[{"content":" As the blog title says, I consider myself a BAFM (Wikipedia calls them BOFH). This isn\u0026rsquo;t supposed to be taken literal, as I ain\u0026rsquo;t as bad as the original (that\u0026rsquo;s why I called it BAFM and not BOFH).\nI am a 42 year old computer geek (if you don\u0026rsquo;t know the difference between geek and nerd: a geek only has Intelligence and a bit of an obsession, while the nerd has both as well as social ineptitude). Currently I live in South-West Germany with my family, where I work for a large IT systems house.\nWhen I\u0026rsquo;m at work, I pretend do be a system administrator/systems engineer handling mostly VMware infrastructure, Cisco UCS/Cisco UCS-X/NetApp and PureStorage systems.\nIn my past job, I used to be a jack of all trades - as in handling the whole IT for an entire data center (most parts of it) for a rather large University in North-Eastern Germany, as well as some sort of guide for a couple of trainees.\nWhile I\u0026rsquo;m not working, I mostly spend time with my family. I\u0026rsquo;m trying to also spend some time at the gym, (you know, to work of the anger and frustration one amasses during the day) or reading (what I would consider \u0026quot; good books\u0026quot;), mostly science fiction or \u0026quot; normal\u0026quot; thrillers (Dan Brown ain\u0026rsquo;t exactly normal, neither is Frank Schätzing) or modern adventures like Clive Cussler\u0026rsquo;s Dirk Pitt Adventures.\nMaaaaany books!\nIf there is some time left, I may end up watching one of my (maaaaaaany) movies. If you\u0026rsquo;re looking for a way to contact me, try my email address: hello@pakiheim.de\nThis list shows all the open source work I\u0026rsquo;ve done in the past, while spending time in front of computer(s):\nNagios plugin \u0026ldquo;check_ram\u0026rdquo; (based on check_swap) Some minor adjustments on check_ram.py, I don\u0026rsquo;t deserve credit for various backports for SLES 9/10/11 and VMware ESX 3.5/4.0 various contributions to the code base of Gentoo Linux ","permalink":"https://christian.blog.pakiheim.de/about/","summary":"\u003cfigure class=\"align-center portrait\"\u003e\n    \u003cimg loading=\"lazy\" src=\"portrait_christian_us-comic.png#center\"\n         alt=\"Christian\" width=\"320\"/\u003e \n\u003c/figure\u003e\n\n\u003cp\u003eAs the blog title says, I consider myself a BAFM (Wikipedia calls them \u003ca href=\"http://en.wikipedia.org/wiki/Bastard_Operator_From_Hell\"\u003eBOFH\u003c/a\u003e). This isn\u0026rsquo;t supposed to be taken literal, as I ain\u0026rsquo;t as bad as the original (that\u0026rsquo;s why I called it BAFM and not BOFH).\u003c/p\u003e\n\u003cp\u003eI am a 42 year old computer \u003ca href=\"http://www.wikihow.com/Tell-the-Difference-Between-Nerds-and-Geeks\"\u003egeek\u003c/a\u003e (if you don\u0026rsquo;t know the difference between geek and nerd: a geek only has Intelligence and a bit of an obsession, while the nerd has both as well as social ineptitude). Currently I live in South-West Germany with my family, where I work for a large IT systems house.\u003c/p\u003e","title":"About Me"},{"content":"Introduction When developing automation for Cisco Intersight, understanding the API structure is crucial. The Intersight OpenAPI v3 specification contains over 5,000 schemas across 575,000+ lines of YAML—a daunting document to navigate manually. This article introduces a Python-based tool that makes exploring this specification efficient and practical.\nThe Challenge Developing PowerShell functions for Intersight requires deep knowledge of:\nObject properties and their types Required vs. optional fields Relationship hierarchies (MoMoRef patterns) Enum values and defaults Inheritance structures through allOf references Without proper tooling, developers must:\nSearch through massive YAML files manually Trace inheritance chains across multiple schema definitions Guess which properties are relationships vs. simple types Trial-and-error to find mandatory properties This slows development and increases the chance of errors.\nThe Solution: get_intersight_api_reference.py The tool provides a command-line interface for querying the OpenAPI specification with features specifically designed for API exploration and development workflows.\nKey Features 1. Schema Discovery\nList all 5,394 available schemas Filter by module prefix (e.g., all vnic.* types) Quick search for specific object types 2. Property Analysis\nAutomatic inheritance resolution (allOf chains) Clear identification of relationships vs. simple properties Read-only property detection Enum value extraction Default value display 3. Relationship Mapping\nAutomatic detection of MoMoRef patterns Distinction between single and array relationships Full relationship type resolution 4. Export Capabilities\nJSON export for further processing Integration with tools like jq Documentation generation Installation and Setup Prerequisites The tool requires Python 3 and the PyYAML library:\n1 2 3 4 5 # Install dependencies pip install pyyaml # Make the script executable (optional) chmod +x get_intersight_api_reference.py Download the OpenAPI Specification The tool requires the Intersight OpenAPI v3 specification file. Download it from the official Cisco Intersight API documentation:\nOption 1: Download via Browser\nVisit the Intersight API Documentation Navigate to the API reference section Look for the \u0026ldquo;Download OpenAPI Specification\u0026rdquo; link Download the YAML file (typically named intersight-openapi-v3-\u0026lt;version\u0026gt;.yaml) Place it in your workspace directory Option 2: Download via Command Line\n1 2 3 4 5 6 7 8 # Download the latest OpenAPI spec (replace URL with current version) curl -O https://intersight.com/apidocs/downloads/intersight-openapi-v3.yaml # Or use wget wget https://intersight.com/apidocs/downloads/intersight-openapi-v3.yaml # Verify the download ls -lh intersight-openapi-v3*.yaml Note: The specification file is approximately 180 MB and contains 575,000+ lines. Make sure you have sufficient disk space.\nOption 3: From Intersight PowerShell SDK\nIf you have the Intersight PowerShell SDK installed, the OpenAPI specification is usually included in the SDK directory:\n1 2 3 4 5 6 # Find the SDK installation directory Get-Module -ListAvailable Intersight* | Select-Object -ExpandProperty ModuleBase # The OpenAPI spec is typically in the SDK\u0026#39;s documentation or examples folder # Example path (varies by installation): # C:\\Program Files\\WindowsPowerShell\\Modules\\Intersight.PowerShell\\1.0.11\\ Verify the Setup After downloading the specification, verify everything is ready:\n1 2 3 4 5 6 7 8 # Check Python version (3.6+ required) python3 --version # Verify PyYAML is installed python3 -c \u0026#34;import yaml; print(yaml.__version__)\u0026#34; # Test the tool with the downloaded spec python3 get_intersight_api_reference.py -l | head -20 The script auto-detects the OpenAPI specification file in your workspace. If multiple files exist, it uses the first match and warns you. You can explicitly specify the path with the -s option:\n1 python3 get_intersight_api_reference.py -s /path/to/intersight-openapi-v3.yaml -l Basic Usage List All Available Schemas 1 python3 get_intersight_api_reference.py Output:\n1 2 3 4 5 6 7 8 9 === Available Object Types === aaa.* (15 schemas) adapter.* (45 schemas) ... vnic.* (28 schemas) workflow.* (35 schemas) Total: 5394 schemas Filter Schemas by Module 1 python3 get_intersight_api_reference.py -l vnic Output:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 === Available Object Types === vnic.* - vnic.BaseEthIf - vnic.Cdn - vnic.EthAdapter - vnic.EthAdapterPolicy - vnic.EthIf - vnic.EthNetworkPolicy - vnic.EthQosPolicy - vnic.VnicTemplate ... Total: 28 schemas Explore a Specific Schema 1 python3 get_intersight_api_reference.py -t vnic.VnicTemplate -p This displays:\nDescription from the API documentation Inheritance hierarchy Required properties All properties with types and descriptions Markers for relationships and read-only fields Focus on Relationships 1 python3 get_intersight_api_reference.py -t vnic.VnicTemplate -r Output:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 === vnic.VnicTemplate === Relationship Properties: EthAdapterPolicy Type: vnic.EthAdapterPolicy.Relationship Description: A reference to a vnicEthAdapterPolicy resource. FabricEthNetworkGroupPolicy Type: fabric.EthNetworkGroupPolicy.Relationship Description: An array of relationships to fabricEthNetworkGroupPolicy resources. MacPool Type: macpool.Pool.Relationship Description: A reference to a macpoolPool resource. Total Properties: 38 Relationships: 11 Export for Processing 1 2 3 4 python3 get_intersight_api_reference.py \\ -t vnic.VnicTemplate \\ -p \\ -o vnic-template.json The JSON output can be processed with tools like jq:\n1 2 3 4 5 # Extract only relationship names jq -r \u0026#39;.relationships | keys[]\u0026#39; vnic-template.json # Get all required properties jq -r \u0026#39;.required[]\u0026#39; vnic-template.json Real-World Development Workflow Let\u0026rsquo;s walk through developing a new PowerShell function using this tool.\nScenario: Clone a vNIC Template We need to create Copy-IntersightVnicTemplate that clones a vNIC template with cluster-specific configuration.\nStep 1: Understand the Schema 1 python3 get_intersight_api_reference.py -t vnic.VnicTemplate -p Key Findings:\nRequired: ClassId, ObjectType Name property: String type (for the new template name) Inherits from: vnic.BaseEthIf (we get base properties too) Relationships: 11 different policy references Step 2: Identify Mandatory Relationships 1 python3 get_intersight_api_reference.py -t vnic.VnicTemplate -r | grep -i \u0026#34;mandatory\\|required\u0026#34; From the descriptions, we find:\nFabricEthNetworkControlPolicy is mandatory FabricEthNetworkGroupPolicy is required (at least 1) Step 3: Understand Network Group Policy 1 python3 get_intersight_api_reference.py -t fabric.EthNetworkGroupPolicy -p Key Properties:\nVlanSettings - VLAN configuration object Organization - Must use original organization (not template\u0026rsquo;s)! Step 4: Check Property Types For FabricEthNetworkGroupPolicy:\n1 python3 get_intersight_api_reference.py -t vnic.VnicTemplate -p | grep -A 3 \u0026#34;FabricEthNetworkGroupPolicy\u0026#34; Output:\n1 2 3 FabricEthNetworkGroupPolicy [REL] Type: array of fabric.EthNetworkGroupPolicy.Relationship Description: An array of relationships... This tells us:\nIt\u0026rsquo;s an array (not a single reference) We need to create multiple MoMoRefs Each references a FabricEthNetworkGroupPolicy Step 5: Implement in PowerShell Armed with this knowledge, we write:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 function Copy-IntersightVnicTemplate { param( [Parameter(Mandatory)] [PSCustomObject]$SourceVnicTemplate, [Parameter(Mandatory)] [int]$ClusterNumber ) # Clone Network Groups (array relationship) $fabricEthNetGroupPolicies = @() foreach ($networkGroup in $SourceVnicTemplate.FabricEthNetworkGroupPolicy) { $clonedNetworkGroup = Copy-IntersightEthernetNetworkGroup @params $moMoRef = Initialize-IntersightMoMoRef ` -ClassId \u0026#39;MoMoRef\u0026#39; ` -ObjectType \u0026#39;FabricEthNetworkGroupPolicy\u0026#39; ` -Moid $clonedNetworkGroup.Moid $fabricEthNetGroupPolicies += $moMoRef } # Copy mandatory FabricEthNetworkControlPolicy (single relationship) $controlPolicyRef = Initialize-IntersightMoMoRef ` -ClassId \u0026#39;MoMoRef\u0026#39; ` -ObjectType \u0026#39;FabricEthNetworkControlPolicy\u0026#39; ` -Moid $SourceVnicTemplate.FabricEthNetworkControlPolicy.Moid # Create new vNIC Template $newVnicParams = @{ Name = \u0026#34;vNIC-CL{0:00}-Template\u0026#34; -f $ClusterNumber ClassId = \u0026#39;vnic.VnicTemplate\u0026#39; ObjectType = \u0026#39;vnic.VnicTemplate\u0026#39; FabricEthNetworkGroupPolicy = $fabricEthNetGroupPolicies FabricEthNetworkControlPolicy = $controlPolicyRef } New-IntersightVnicVnicTemplate @newVnicParams } The tool prevented common errors:\n❌ Treating array relationship as single value ❌ Missing mandatory FabricEthNetworkControlPolicy ❌ Wrong ObjectType in MoMoRef ❌ Forgetting required properties Advanced Use Cases 1. Validate Parameter Sets 1 python3 get_intersight_api_reference.py -t vnic.VnicTemplate -p | grep -A 3 \u0026#34;SwitchId\u0026#34; Output:\n1 2 3 4 SwitchId Type: string Enum: None, A, B Default: None Translate to PowerShell:\n1 2 3 [Parameter()] [ValidateSet(\u0026#39;None\u0026#39;, \u0026#39;A\u0026#39;, \u0026#39;B\u0026#39;)] [string]$SwitchId = \u0026#39;None\u0026#39; 2. Document API Changes Export schemas before and after SDK updates:\n1 2 3 4 5 6 7 8 # Before update python3 get_intersight_api_reference.py -t vnic.VnicTemplate -o before.json # After update python3 get_intersight_api_reference.py -t vnic.VnicTemplate -o after.json # Compare diff before.json after.json 3. Generate Documentation Create property reference tables:\n1 2 3 python3 get_intersight_api_reference.py -t vnic.VnicTemplate -p | \\ grep -A 2 \u0026#34;^ [A-Z]\u0026#34; | \\ grep -v \u0026#34;^--$\u0026#34; \u0026gt; vnic-template-properties.txt 4. Bulk Analysis Find all mandatory properties across multiple schemas:\n1 2 3 4 5 6 for type in vnic.VnicTemplate vnic.EthIf fabric.EthNetworkGroupPolicy; do echo \u0026#34;=== $type ===\u0026#34; python3 get_intersight_api_reference.py -t $type -p 2\u0026gt;/dev/null | \\ grep -A 10 \u0026#34;Required Properties\u0026#34; echo \u0026#34;\u0026#34; done Technical Deep Dive Inheritance Resolution The tool automatically resolves complex inheritance chains. For example, vnic.VnicTemplate:\n1 2 3 4 5 6 7 8 9 vnic.VnicTemplate ↓ allOf ├─ vnic.BaseEthIf │ ↓ allOf │ ├─ policy.AbstractPolicy │ │ ↓ allOf │ │ └─ mo.BaseMo │ └─ Inline definition └─ Inline definition All properties from parent schemas are merged and displayed as a single, flat list. This eliminates the need to manually chase references through the YAML file.\nRelationship Detection Algorithm Properties are identified as relationships when:\nType ends with .Relationship\nExample: vnic.EthAdapterPolicy.Relationship Type is MoMoRef or mo.MoRef\nDirect managed object references Array items match above criteria\nExample: array of fabric.EthNetworkGroupPolicy.Relationship This allows the tool to automatically separate data properties from object references, crucial for understanding the API structure.\nPerformance Considerations First Run (~5-10 seconds)\nYAML parsing of 575,110 lines Schema indexing Inheritance graph building Subsequent Queries (instant)\nIn-memory lookup Pre-built inheritance chains Cached schema definitions For development workflows with multiple queries, consider:\n1 2 # Keep an interactive Python session python3 -i get_intersight_api_reference.py Property Markers Explained The tool uses visual markers for quick identification:\nMarker Meaning Implication [REL] Relationship Requires MoMoRef creation [RO] Read-Only Cannot be set during creation/update → Reference Shows the target object type Example output:\n1 2 3 4 5 6 7 8 9 10 11 Name Type: string Description: Name of the vNIC template. MacPool [REL] Type: → macpool.Pool.Relationship Description: A reference to a macpoolPool resource. AccountMoid [RO] Type: string Description: The Account ID for this managed object. Integration with CI/CD Pre-Commit Hook Validate that new functions reference valid object types:\n1 2 3 4 5 6 7 8 9 10 11 12 13 #!/bin/bash # .git/hooks/pre-commit # Extract ObjectType references from modified PowerShell files git diff --cached --name-only | grep \u0026#39;\\.ps1$\u0026#39; | while read file; do grep -oP \u0026#34;ObjectType\\s*=\\s*\u0026#39;\\K[^\u0026#39;]+\u0026#34; \u0026#34;$file\u0026#34; | while read objtype; do python3 get_intersight_api_reference.py -t \u0026#34;$objtype\u0026#34; -p \u0026gt; /dev/null 2\u0026gt;\u0026amp;1 if [ $? -ne 0 ]; then echo \u0026#34;Error: Invalid ObjectType \u0026#39;$objtype\u0026#39; in $file\u0026#34; exit 1 fi done done Documentation Generation Generate API reference documentation automatically:\n1 2 3 4 5 6 7 8 9 10 11 #!/bin/bash # generate-api-docs.sh SCHEMAS=(\u0026#34;vnic.VnicTemplate\u0026#34; \u0026#34;vnic.EthIf\u0026#34; \u0026#34;fabric.EthNetworkGroupPolicy\u0026#34;) for schema in \u0026#34;${SCHEMAS[@]}\u0026#34;; do python3 get_intersight_api_reference.py \\ -t \u0026#34;$schema\u0026#34; \\ -p \\ -o \u0026#34;docs/api-reference-${schema}.json\u0026#34; done Comparison with Alternatives vs. Manual YAML Search Aspect Manual Search This Tool Find schema grep through 575K lines Instant lookup Inheritance Manual chain following Automatic resolution Relationships Visual inspection Auto-detected Export Copy/paste JSON output Speed Minutes per schema Seconds per schema vs. Web Documentation Aspect Web Docs This Tool Offline access ❌ ✅ Version-specific May mismatch SDK Exact match to SDK Scriptable ❌ ✅ Bulk queries ❌ ✅ Export Manual copy JSON/programmatic vs. IDE Schema Hints Aspect IDE This Tool Requires SDK installation ✅ ❌ Shows relationships Partial Complete Shows inheritance No Yes Bulk analysis No Yes Export No Yes Common Patterns and Idioms Pattern 1: Single Relationship Property Schema:\n1 2 3 4 5 { \u0026#34;MacPool\u0026#34;: { \u0026#34;ref\u0026#34;: \u0026#34;macpool.Pool.Relationship\u0026#34; } } PowerShell Implementation:\n1 2 3 4 5 6 7 8 if ($SourceTemplate.MacPool) { $macPoolRef = $SourceTemplate.MacPool $moMoRef = Initialize-IntersightMoMoRef ` -ClassId \u0026#39;MoMoRef\u0026#39; ` -ObjectType \u0026#39;MacpoolPool\u0026#39; ` -Moid $macPoolRef.Moid $params[\u0026#39;MacPool\u0026#39;] = $moMoRef } Pattern 2: Array of Relationships Schema:\n1 2 3 4 5 6 { \u0026#34;FabricEthNetworkGroupPolicy\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;array\u0026#34;, \u0026#34;items\u0026#34;: \u0026#34;fabric.EthNetworkGroupPolicy.Relationship\u0026#34; } } PowerShell Implementation:\n1 2 3 4 5 6 7 8 9 $moMoRefs = @() foreach ($policy in $SourceTemplate.FabricEthNetworkGroupPolicy) { $moMoRef = Initialize-IntersightMoMoRef ` -ClassId \u0026#39;MoMoRef\u0026#39; ` -ObjectType \u0026#39;FabricEthNetworkGroupPolicy\u0026#39; ` -Moid $policy.Moid $moMoRefs += $moMoRef } $params[\u0026#39;FabricEthNetworkGroupPolicy\u0026#39;] = $moMoRefs Pattern 3: Enum Validation Schema:\n1 2 3 4 SwitchId Type: string Enum: None, A, B Default: None PowerShell Implementation:\n1 2 3 [Parameter()] [ValidateSet(\u0026#39;None\u0026#39;, \u0026#39;A\u0026#39;, \u0026#39;B\u0026#39;)] [string]$SwitchId = \u0026#39;None\u0026#39; Pattern 4: Conditional Mandatory Properties Some properties are mandatory only in certain contexts. The tool shows all required properties, but descriptions reveal context:\n1 python3 get_intersight_api_reference.py -t vnic.EthIf -p Look for phrases like:\n\u0026ldquo;required when\u0026hellip;\u0026rdquo; \u0026ldquo;mandatory for\u0026hellip;\u0026rdquo; \u0026ldquo;must be specified if\u0026hellip;\u0026rdquo; Troubleshooting Schema Not Found Problem:\n1 Error: Schema \u0026#39;vnic.Template\u0026#39; not found Solution:\n1 2 3 4 5 # Search for similar schemas python3 get_intersight_api_reference.py -l | grep -i template # Correct name is vnic.VnicTemplate python3 get_intersight_api_reference.py -t vnic.VnicTemplate -p Slow First Execution Problem: First query takes 10 seconds\nSolution: This is normal for the initial YAML parsing. Subsequent queries are instant. For multiple queries, keep the script running in an interactive session.\nMultiple OpenAPI Files Problem:\n1 Warning: Multiple spec files found, using: intersight-openapi-v3-1.0.11.yaml Solution: Explicitly specify the file:\n1 2 3 4 python3 get_intersight_api_reference.py \\ -s /path/to/specific/openapi.yaml \\ -t vnic.VnicTemplate \\ -p Command Reference Options Summary Option Short Description --type TYPE -t TYPE Object type to query --properties -p Show all properties --relationships -r Show relationships only --output PATH -o PATH Export to JSON --spec PATH -s PATH OpenAPI spec file path --list [PREFIX] -l [PREFIX] List schemas (filtered) Common Commands 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # List all schemas python3 get_intersight_api_reference.py # List vnic.* schemas python3 get_intersight_api_reference.py -l vnic # Show all properties python3 get_intersight_api_reference.py -t vnic.VnicTemplate -p # Show relationships only python3 get_intersight_api_reference.py -t vnic.VnicTemplate -r # Export to JSON python3 get_intersight_api_reference.py -t vnic.VnicTemplate -p -o output.json Best Practices 1. Start with Relationships When exploring a new schema, always check relationships first:\n1 python3 get_intersight_api_reference.py -t \u0026lt;ObjectType\u0026gt; -r This reveals the dependency graph immediately.\n2. Export for Reference Keep JSON exports of frequently-used schemas:\n1 2 mkdir -p api-schemas python3 get_intersight_api_reference.py -t vnic.VnicTemplate -p -o api-schemas/vnic-template.json 3. Validate Before Coding Before implementing a function, verify:\n1 2 3 4 5 # Check schema exists python3 get_intersight_api_reference.py -t \u0026lt;ObjectType\u0026gt; -p # Verify all referenced types exist # (Extract from relationships and check each) 4. Document Assumptions Add comments referencing the tool output:\n1 2 3 # Source: get_intersight_api_reference.py -t vnic.VnicTemplate -r # FabricEthNetworkGroupPolicy is an array of relationships # FabricEthNetworkControlPolicy is mandatory (single relationship) 5. Update After SDK Changes When updating the Intersight PowerShell SDK:\n1 2 3 4 5 6 7 8 9 10 # Export current schemas python3 get_intersight_api_reference.py -t vnic.VnicTemplate -p -o before.json # Update SDK (which includes new OpenAPI spec) # Export new schemas python3 get_intersight_api_reference.py -t vnic.VnicTemplate -p -o after.json # Compare diff -u before.json after.json Conclusion The get_intersight_api_reference.py tool transforms the challenge of navigating a massive API specification into a streamlined workflow. By automating inheritance resolution, relationship detection, and property analysis, it enables developers to:\nUnderstand complex object structures in seconds Validate implementations against the specification Document API usage patterns Accelerate development with accurate property information For PowerShell module development, this tool is invaluable. It bridges the gap between the OpenAPI specification and practical implementation, reducing errors and development time.\nResources Tool Files get_intersight_api_reference.py - The Python script Full documentation in api-reference-tool.md Official Documentation Intersight API Documentation Intersight PowerShell SDK OpenAPI v3 Specification Full Tool Documentation Below is the complete reference documentation for the tool.\nOverview The get_intersight_api_reference.py script extracts structured information from the Intersight OpenAPI v3 specification. This is particularly useful when developing PowerShell functions that interact with the Intersight API.\nUsage Basic Syntax 1 python3 get_intersight_api_reference.py [OPTIONS] Available Options Option Short Description --type TYPE -t TYPE Object type to query (e.g., vnic.VnicTemplate) --properties -p Show detailed property information --relationships -r Show relationship properties only --output PATH -o PATH Export results to JSON file --spec PATH -s PATH Path to OpenAPI spec file (auto-detected if not specified) --list [PREFIX] -l [PREFIX] List available schemas (optionally filtered by prefix) Examples 1. List All Available Object Types 1 python3 get_intersight_api_reference.py Output:\n1 2 3 4 5 6 7 8 9 10 === Available Object Types === aaaudit.* (5 schemas) aaa.* (15 schemas) adapter.* (45 schemas) ... vnic.* (28 schemas) workflow.* (35 schemas) Total: 5394 schemas 2. List All vnic.* Schemas 1 python3 get_intersight_api_reference.py -l vnic Output:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 === Available Object Types === vnic.* - vnic.BaseEthIf - vnic.Cdn - vnic.EthAdapter - vnic.EthAdapterPolicy - vnic.EthIf - vnic.EthNetworkPolicy - vnic.EthQosPolicy - vnic.VnicTemplate ... Total: 28 schemas 3. Show All Properties of an Object 1 python3 get_intersight_api_reference.py -t vnic.VnicTemplate -p Output:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 === vnic.VnicTemplate === Description: The vNIC template consists of the common vNIC configuration... Inherits from: - vnic.BaseEthIf - Inline definition Required Properties: - ObjectType - ClassId All Properties: Name Type: string Description: Name of the vNIC template. MacPool [REL] Type: → macpool.Pool.Relationship Description: A reference to a macpoolPool resource. FabricEthNetworkGroupPolicy [REL] Type: array of fabric.EthNetworkGroupPolicy.Relationship Description: An array of relationships to fabricEthNetworkGroupPolicy resources. ... Legend: [REL] = Relationship, [RO] = Read-only Total Properties: 38 Relationships: 11 4. Show Only Relationship Properties 1 python3 get_intersight_api_reference.py -t vnic.VnicTemplate -r Output:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 === vnic.VnicTemplate === Relationship Properties: EthAdapterPolicy Type: vnic.EthAdapterPolicy.Relationship Description: A reference to a vnicEthAdapterPolicy resource. EthQosPolicy Type: vnic.EthQosPolicy.Relationship Description: A reference to a vnicEthQosPolicy resource. FabricEthNetworkGroupPolicy Type: fabric.EthNetworkGroupPolicy.Relationship Description: An array of relationships to fabricEthNetworkGroupPolicy resources. FabricEthNetworkControlPolicy Type: fabric.EthNetworkControlPolicy.Relationship Description: A reference to a fabricEthNetworkControlPolicy resource. IscsiBootPolicy Type: vnic.IscsiBootPolicy.Relationship Description: A reference to a vnicIscsiBootPolicy resource. MacPool Type: macpool.Pool.Relationship Description: A reference to a macpoolPool resource. Organization Type: organization.Organization.Relationship Description: A reference to a organizationOrganization resource. Total Properties: 38 Relationships: 11 5. Export Schema as JSON 1 2 3 4 python3 get_intersight_api_reference.py \\ -t vnic.VnicTemplate \\ -p \\ -o docs/vnic-template-schema.json JSON Structure:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 { \u0026#34;object_type\u0026#34;: \u0026#34;vnic.VnicTemplate\u0026#34;, \u0026#34;description\u0026#34;: \u0026#34;The vNIC template consists of...\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;\u0026#34;, \u0026#34;required\u0026#34;: [\u0026#34;ObjectType\u0026#34;, \u0026#34;ClassId\u0026#34;], \u0026#34;all_of\u0026#34;: [\u0026#34;vnic.BaseEthIf\u0026#34;, \u0026#34;Inline definition\u0026#34;], \u0026#34;properties\u0026#34;: { \u0026#34;Name\u0026#34;: { \u0026#34;name\u0026#34;: \u0026#34;Name\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;string\u0026#34;, \u0026#34;description\u0026#34;: \u0026#34;Name of the vNIC template.\u0026#34;, \u0026#34;format\u0026#34;: null, \u0026#34;read_only\u0026#34;: false, \u0026#34;items\u0026#34;: null, \u0026#34;ref\u0026#34;: null, \u0026#34;is_relationship\u0026#34;: false, \u0026#34;enum\u0026#34;: null, \u0026#34;default\u0026#34;: null } }, \u0026#34;relationships\u0026#34;: { \u0026#34;MacPool\u0026#34;: { \u0026#34;name\u0026#34;: \u0026#34;MacPool\u0026#34;, \u0026#34;type\u0026#34;: null, \u0026#34;description\u0026#34;: \u0026#34;A reference to a macpoolPool resource.\u0026#34;, \u0026#34;ref\u0026#34;: \u0026#34;macpool.Pool.Relationship\u0026#34;, \u0026#34;is_relationship\u0026#34;: true } } } Use Cases 1. Develop New PowerShell Function When developing a function like Copy-IntersightVnicTemplate:\n1 2 3 4 5 6 7 8 9 10 11 # Understand available properties python3 get_intersight_api_reference.py -t vnic.VnicTemplate -p # Identify all relationships python3 get_intersight_api_reference.py -t vnic.VnicTemplate -r # Export for documentation python3 get_intersight_api_reference.py \\ -t vnic.VnicTemplate \\ -p \\ -o docs/api-vnic-template.json 2. Identify Mandatory Properties 1 python3 get_intersight_api_reference.py -t fabric.EthNetworkControlPolicy -p | grep -A 5 \u0026#34;Required Properties\u0026#34; Output:\n1 2 3 Required Properties: - ClassId - ObjectType 3. Property Types for Validation 1 python3 get_intersight_api_reference.py -t vnic.VnicTemplate -p | grep -A 3 \u0026#34;SwitchId\u0026#34; Output:\n1 2 3 4 5 SwitchId Type: string Description: The fabric port to which the vNICs will be associated. Enum: None, A, B Default: None 4. Understand Inheritance Hierarchy 1 python3 get_intersight_api_reference.py -t vnic.VnicTemplate -p | grep -A 3 \u0026#34;Inherits from\u0026#34; Output:\n1 2 3 Inherits from: - vnic.BaseEthIf - Inline definition Important Object Types vNIC and LAN Connectivity Object Type Description Used By vnic.VnicTemplate vNIC Template Cloned by Copy-IntersightVnicTemplate vnic.EthIf Ethernet Interface Derived from vNIC Template vnic.LanConnectivityPolicy LAN Connectivity Policy Container for EthIfs fabric.EthNetworkGroupPolicy VLAN Groups Defines allowed VLANs fabric.EthNetworkControlPolicy Network Control CDP, LLDP, MAC learning Policies Object Type Description vnic.EthAdapterPolicy Adapter settings vnic.EthQosPolicy QoS settings macpool.Pool MAC address pools vnic.IscsiBootPolicy iSCSI boot configuration Queries 1 2 3 4 5 6 7 8 # All vnic.* types python3 get_intersight_api_reference.py -l vnic # All fabric.* types python3 get_intersight_api_reference.py -l fabric # All macpool.* types python3 get_intersight_api_reference.py -l macpool Property Markers The tool uses the following markers in its output:\n[REL] - Relationship: Property references another object [RO] - Read-Only: Property cannot be modified → - Reference: Shows the referenced type Integration in Development Workflow Explore Schema: Understand available properties and relationships Identify Mandatory Properties: Ensure all required fields are set Understand Relationships: Determine which MoMoRefs need to be created Validate Enum Values: Use enum information for parameter validation Generate Documentation: Export as JSON for further processing Technical Details Inheritance Resolution The script automatically resolves allOf references and merges properties from parent schemas. Example:\n1 2 3 4 5 6 7 vnic.VnicTemplate ↓ allOf ├─ vnic.BaseEthIf │ ↓ allOf │ ├─ policy.AbstractPolicy │ └─ mo.BaseMo └─ Inline definition All properties are combined and displayed.\nRelationship Detection Properties are detected as relationships when:\nThe type ends with Relationship (e.g., vnic.EthAdapterPolicy.Relationship) The type is MoMoRef or mo.MoRef It\u0026rsquo;s an array of relationships Performance First execution: ~5-10 seconds (YAML parsing) Subsequent queries: Immediate (if already loaded) Large file: 575,110 lines, ~180 MB Troubleshooting \u0026ldquo;Schema not found\u0026rdquo; Error 1 2 # Check available schemas python3 get_intersight_api_reference.py -l | grep -i \u0026lt;search-term\u0026gt; OpenAPI Spec Not Found 1 2 3 4 5 # Explicitly specify path python3 get_intersight_api_reference.py \\ -s /path/to/intersight-openapi-*.yaml \\ -t vnic.VnicTemplate \\ -p YAML Parsing Slow The first execution takes longer because the entire YAML document must be loaded. This is normal for a ~180 MB specification.\nPublished: February 7, 2026 Last Updated: February 7, 2026\n","permalink":"https://christian.blog.pakiheim.de/posts/2026-02-07_working-with-intersight-api/","summary":"\u003ch2 id=\"introduction\"\u003eIntroduction\u003c/h2\u003e\n\u003cp\u003eWhen developing automation for Cisco Intersight, understanding the API structure is crucial. The Intersight OpenAPI v3 specification contains over 5,000 schemas across 575,000+ lines of YAML—a daunting document to navigate manually. This article introduces a Python-based tool that makes exploring this specification efficient and practical.\u003c/p\u003e\n\u003ch2 id=\"the-challenge\"\u003eThe Challenge\u003c/h2\u003e\n\u003cp\u003eDeveloping PowerShell functions for Intersight requires deep knowledge of:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eObject properties and their types\u003c/li\u003e\n\u003cli\u003eRequired vs. optional fields\u003c/li\u003e\n\u003cli\u003eRelationship hierarchies (MoMoRef patterns)\u003c/li\u003e\n\u003cli\u003eEnum values and defaults\u003c/li\u003e\n\u003cli\u003eInheritance structures through \u003ccode\u003eallOf\u003c/code\u003e references\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWithout proper tooling, developers must:\u003c/p\u003e","title":"Exploring the Intersight API with a Python-Based Schema Browser"},{"content":" ℹ️ Attribution This article is a reproduction/adaptation of the original article by @nawazdhandala on OneUptime. The original article can be found here: How to Use NAS Storage with Docker Compose. I am not the original author of this content. You have a NAS with terabytes of storage, RAID protection, and automatic backups. Your Docker containers keep losing data when you recreate them. The solution is obvious: mount your NAS storage directly into your containers. Docker Compose makes this surprisingly easy once you understand the volume driver options.\nThis guide covers mounting NFS, SMB/CIFS, and local NAS shares in Docker Compose, along with production tips for permissions, performance, and reliability.\nQuick Protocol Comparison Protocol Best For Strengths Watch-outs NFS Linux hosts, shared access across containers Simple setup, low overhead, native Docker support No built-in encryption, UID/GID mapping can be tricky SMB/CIFS Windows hosts, mixed environments, AD integration Works everywhere, credential-based auth Higher overhead, requires cifs-utils on host Local mount + bind Maximum performance, simple setups No network latency, works offline Requires NAS mounted on host first Prerequisites Before starting:\nYour NAS is reachable from your Docker host (same network or routed) You have created a share/export on your NAS Your Docker host has the required client packages Installing Required Packages For NFS on Debian/Ubuntu:\n1 2 3 # Update package list and install NFS client utilities # nfs-common includes mount.nfs required for NFS volume mounts sudo apt-get update \u0026amp;\u0026amp; sudo apt-get install -y nfs-common For NFS on RHEL/Rocky/AlmaLinux:\n1 2 3 # Install NFS utilities for Red Hat-based distributions # Includes rpcbind and other NFS dependencies sudo dnf install -y nfs-utils For SMB/CIFS:\n1 2 3 4 5 # Debian/Ubuntu - install CIFS mount utilities sudo apt-get install -y cifs-utils # RHEL/Rocky - same package, different package manager sudo dnf install -y cifs-utils Method 1: NFS Volumes (Recommended for Linux) Docker has built-in support for NFS volumes. No plugins required.\nStep 1: Create an NFS Export on Your NAS On Synology DSM:\nControl Panel → Shared Folder → Create folder (e.g., docker-data) Control Panel → File Services → NFS → Enable NFS Edit the shared folder → NFS Permissions → Add rule: Hostname/IP: Your Docker host IP or * Privilege: Read/Write Squash: Map all users to admin On TrueNAS:\nSharing → Unix Shares (NFS) → Add share Set path and authorized networks Step 2: Use NFS in Docker Compose 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 # docker-compose.yml version: \u0026#34;3.8\u0026#34; services: app: image: nginx:alpine volumes: # Mount the NFS volume to serve static files - nfs-data:/usr/share/nginx/html ports: - \u0026#34;8080:80\u0026#34; # Volume definitions - NFS configuration lives here volumes: nfs-data: # Use the local driver with NFS-specific options driver: local driver_opts: # Specify NFS as the filesystem type type: nfs # Mount options: NAS IP, NFS version, and behavior flags # soft = return errors on timeout, nolock = disable file locking o: addr=192.168.1.100,nfsvers=4.1,soft,nolock # NFS export path on your NAS (note the leading colon) device: \u0026#34;:/volume1/docker-data\u0026#34; NFS Mount Options Explained Option Purpose addr= NAS IP address nfsvers=4.1 NFS version (use 4.1 or 4.2 for best compatibility) soft Return errors on timeout instead of hanging (use hard for databases) nolock Disable file locking (faster, but don\u0026rsquo;t use for databases) rw Read-write mount (default) noatime Don\u0026rsquo;t update access times (better performance) Production-Ready NFS Example 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 version: \u0026#34;3.8\u0026#34; services: # PostgreSQL database - critical data, needs reliable storage postgres: image: postgres:16 environment: POSTGRES_PASSWORD: secretpassword volumes: # Database files stored on NAS for persistence and backup - postgres-data:/var/lib/postgresql/data # Redis cache - ephemeral data, can tolerate some loss redis: image: redis:7-alpine volumes: - redis-data:/data # Application container - uses shared upload storage app: image: myapp:latest volumes: # User uploads - shared between app instances for horizontal scaling - app-uploads:/app/uploads # Application logs - centralized on NAS for easy access - app-logs:/app/logs depends_on: - postgres - redis volumes: # Database volume: use \u0026#39;hard\u0026#39; mount for data integrity postgres-data: driver: local driver_opts: type: nfs o: addr=192.168.1.100,nfsvers=4.1,hard,intr device: \u0026#34;:/volume1/docker/postgres\u0026#34; # Cache volume: \u0026#39;soft\u0026#39; mount is fine since data is ephemeral redis-data: driver: local driver_opts: type: nfs o: addr=192.168.1.100,nfsvers=4.1,soft,nolock device: \u0026#34;:/volume1/docker/redis\u0026#34; # Upload volume: balanced settings for reliability + performance app-uploads: driver: local driver_opts: type: nfs o: addr=192.168.1.100,nfsvers=4.1,hard,noatime device: \u0026#34;:/volume1/docker/uploads\u0026#34; # Logs volume: soft mount since logs are append-only app-logs: driver: local driver_opts: type: nfs o: addr=192.168.1.100,nfsvers=4.1,soft,noatime device: \u0026#34;:/volume1/docker/logs\u0026#34; Method 2: SMB/CIFS Volumes For Windows environments or when your NAS only offers SMB shares.\nBasic SMB Volume 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 version: \u0026#34;3.8\u0026#34; services: app: image: nginx:alpine volumes: - smb-data:/usr/share/nginx/html volumes: smb-data: driver: local driver_opts: type: cifs o: addr=192.168.1.100,username=myuser,password=mypassword,file_mode=0777,dir_mode=0777 device: \u0026#34;//192.168.1.100/docker-data\u0026#34; SMB with Credentials File (More Secure) Storing passwords in docker-compose.yml is a bad idea. Use a credentials file instead:\n1 2 # Create credentials file on Docker host sudo nano /etc/docker-smb-credentials 1 2 3 username=myuser password=mypassword domain=WORKGROUP 1 sudo chmod 600 /etc/docker-smb-credentials 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 version: \u0026#34;3.8\u0026#34; services: app: image: nginx:alpine volumes: - smb-data:/usr/share/nginx/html volumes: smb-data: driver: local driver_opts: type: cifs o: addr=192.168.1.100,credentials=/etc/docker-smb-credentials,uid=1000,gid=1000,file_mode=0644,dir_mode=0755 device: \u0026#34;//192.168.1.100/docker-data\u0026#34; SMB Mount Options Option Purpose credentials= Path to credentials file uid= / gid= Map files to specific user/group ID file_mode= / dir_mode= Set permissions for files/directories vers=3.0 SMB protocol version (try 2.1 or 3.0) seal Enable encryption (SMB 3.0+) Method 3: Bind Mounts (NAS Mounted on Host) Sometimes the simplest approach is mounting the NAS share on your Docker host first, then using bind mounts in Docker Compose.\nStep 1: Mount NAS on Host Add to /etc/fstab:\n1 2 3 4 5 # NFS 192.168.1.100:/volume1/docker-data /mnt/nas-docker nfs4 defaults,_netdev 0 0 # SMB //192.168.1.100/docker-data /mnt/nas-docker cifs credentials=/etc/smb-credentials,uid=1000,gid=1000,_netdev 0 0 Mount it:\n1 2 sudo mkdir -p /mnt/nas-docker sudo mount -a Step 2: Use Bind Mounts in Docker Compose 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 version: \u0026#34;3.8\u0026#34; services: app: image: nginx:alpine volumes: - /mnt/nas-docker/nginx-html:/usr/share/nginx/html - /mnt/nas-docker/nginx-conf:/etc/nginx/conf.d:ro ports: - \u0026#34;8080:80\u0026#34; postgres: image: postgres:16 environment: POSTGRES_PASSWORD: secretpassword volumes: - /mnt/nas-docker/postgres:/var/lib/postgresql/data Pros:\nSimple to understand Works with any file system the host can mount Better debugging (you can browse files directly on host) Cons:\nExtra setup step on host If mount fails, containers fail too Not portable across hosts Handling Permissions Permission issues are the #1 problem when using NAS storage with Docker. Here\u0026rsquo;s how to solve them.\nUnderstanding the Problem Docker containers often run as specific users (e.g., postgres runs as UID 999, nginx as UID 101). Your NAS might squash all writes to a different UID. Result: permission denied.\nSolution 1: Match Container UID to NAS UID Find out what UID your container uses:\n1 2 docker run --rm postgres:16 id # uid=999(postgres) gid=999(postgres) groups=999(postgres) Configure your NAS to allow that UID, or use NFS squashing to map all access to a UID that the container can use.\nSolution 2: Run Container as Specific User 1 2 3 4 5 6 services: app: image: myapp user: \u0026#34;1000:1000\u0026#34; # Match your NAS UID/GID volumes: - nfs-data:/app/data Solution 3: Use an Init Container to Fix Permissions 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 services: # Init container to set permissions init-permissions: image: busybox user: root command: [\u0026#34;sh\u0026#34;, \u0026#34;-c\u0026#34;, \u0026#34;chown -R 1000:1000 /data \u0026amp;\u0026amp; chmod -R 755 /data\u0026#34;] volumes: - app-data:/data app: image: myapp user: \u0026#34;1000:1000\u0026#34; volumes: - app-data:/app/data depends_on: init-permissions: condition: service_completed_successfully Solution 4: NAS-Side Squashing On Synology NFS settings, set \u0026ldquo;Squash\u0026rdquo; to \u0026ldquo;Map all users to admin\u0026rdquo; - this makes all access appear as the admin user, bypassing permission issues.\nCommon Pitfalls and Solutions Pitfall 1: \u0026ldquo;mount.nfs: access denied by server\u0026rdquo; Cause: NFS export doesn\u0026rsquo;t allow your Docker host IP.\nFix: Check NAS export settings and add your Docker host\u0026rsquo;s IP.\nPitfall 2: Container can\u0026rsquo;t write to volume Cause: UID/GID mismatch.\nFix: Use user: directive in compose file or configure NAS squashing.\nPitfall 3: Volume not mounting on docker-compose up Cause: NAS not reachable or DNS not resolved yet at boot.\nFix: Add _netdev to fstab for bind mounts, or use a healthcheck/restart policy.\nPitfall 4: \u0026ldquo;Host is down\u0026rdquo; after NAS reboot Cause: Docker cached the mount, NFS handle is stale.\nFix: Restart the containers: docker-compose down \u0026amp;\u0026amp; docker-compose up -d\nPitfall 5: Slow write performance Cause: Synchronous NFS writes.\nFix: Use async export on NAS (with UPS/battery backup) or accept the latency.\nPitfall 6: SMB mounts fail silently Cause: Wrong SMB version or missing cifs-utils.\nFix: Try adding vers=3.0 or vers=2.1 to mount options. Ensure cifs-utils is installed.\nPerformance Tips 1. Use Dedicated Storage Network If your NAS has multiple NICs, dedicate one to Docker storage traffic:\n1 2 3 4 5 6 7 volumes: data: driver: local driver_opts: type: nfs o: addr=10.0.1.100,nfsvers=4.1,hard # Storage VLAN IP device: \u0026#34;:/volume1/docker\u0026#34; 2. Tune NFS Options for Your Workload For large files (media, backups):\n1 o: addr=192.168.1.100,nfsvers=4.1,hard,rsize=1048576,wsize=1048576 For many small files (web apps):\n1 o: addr=192.168.1.100,nfsvers=4.1,hard,noatime,nodiratime 3. Use Local Volumes for High-IOPS Workloads For databases that need maximum performance, consider keeping them on local SSD and only using NAS for backups:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 services: postgres: volumes: - postgres-local:/var/lib/postgresql/data # Fast local SSD - postgres-backup:/backup # NAS for backups volumes: postgres-local: # Default local driver, uses host storage postgres-backup: driver: local driver_opts: type: nfs o: addr=192.168.1.100,nfsvers=4.1,soft device: \u0026#34;:/volume1/backups/postgres\u0026#34; Verifying Your Setup After configuring, verify everything works:\n1 2 3 4 5 6 7 8 9 10 11 12 # Start the stack docker-compose up -d # Check volume mounts docker-compose exec app df -h docker-compose exec app mount | grep nfs # Test write access docker-compose exec app touch /data/test-file docker-compose exec app ls -la /data/ # Check from NAS side that file appears Environment Variables for Flexibility Make your compose file portable across environments:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 version: \u0026#34;3.8\u0026#34; services: app: image: myapp volumes: - app-data:/app/data volumes: app-data: driver: local driver_opts: type: nfs o: addr=${NAS_IP:-192.168.1.100},nfsvers=4.1,hard device: \u0026#34;:${NAS_PATH:-/volume1/docker}/app-data\u0026#34; Create a .env file:\n1 2 NAS_IP=192.168.1.100 NAS_PATH=/volume1/docker-prod TL;DR Quick Start For most setups:\nInstall NFS client on Docker host: apt install nfs-common Create NFS export on your NAS Add NFS volume to your docker-compose.yml: 1 2 3 4 5 6 7 volumes: my-data: driver: local driver_opts: type: nfs o: addr=YOUR_NAS_IP,nfsvers=4.1,soft device: \u0026#34;:/path/to/share\u0026#34; Use the volume in your service: volumes: - my-data:/app/data Fix permissions by matching UIDs or using NAS squashing Your containers now persist data to your NAS. Set up NAS snapshots and backups, and you have a reliable, centralized storage solution for your Docker environment.\n","permalink":"https://christian.blog.pakiheim.de/posts/2026-02-03_nfs_performance_considerations_for_docker/","summary":"\u003cdiv class=\"notice notice-info\"\u003e\n  \u003cdiv class=\"notice-title\"\u003eℹ️ Attribution\u003c/div\u003e\n  \u003cdiv class=\"notice-content\"\u003e\n    This article is a reproduction/adaptation of the original article by \u003ca href=\"https://github.com/nawazdhandala\"\u003e@nawazdhandala\u003c/a\u003e on OneUptime. The original article can be found here: \u003ca href=\"https://oneuptime.com/blog/post/2025-12-15-how-to-use-nas-storage-with-docker-compose/view\"\u003eHow to Use NAS Storage with Docker Compose\u003c/a\u003e. I am not the original author of this content.\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eYou have a NAS with terabytes of storage, RAID protection, and automatic backups. Your Docker containers keep losing data when you recreate them. The solution is obvious: mount your NAS storage directly into your containers. Docker Compose makes this surprisingly easy once you understand the volume driver options.\u003c/p\u003e","title":"How to Use NAS Storage with Docker Compose: NFS, SMB, and Local Volumes"},{"content":"This is a personal quick-reference for working with LVM (Logical Volume Manager) on Linux. It covers the full lifecycle from creating Physical Volumes through extending Logical Volumes, and finally growing the filesystem on top.\nLVM Concepts at a Glance LVM introduces three abstraction layers between physical disks and mounted filesystems:\nPhysical Volume (PV) — a whole disk initialized for LVM use. Volume Group (VG) — a storage pool made up of one or more PVs. Logical Volume (LV) — a virtual partition carved out of a VG, on which you create a filesystem. The general workflow is always: PV → VG → LV → Filesystem.\nCreating Physical Volumes Before a disk can be used by LVM, it needs to be initialized as a Physical Volume.\n1 2 3 # Initialize whole disks as PVs pvcreate /dev/sdb pvcreate /dev/sdc Verify with:\n1 2 3 pvs # or for detailed output: pvdisplay Tip: You can increase the metadata area size with --metadatasize if you plan to use many snapshots. A too-small metadata area can cause issues later. Example: pvcreate --metadatasize 512k /dev/sdb\nCreating a Volume Group Combine one or more PVs into a Volume Group:\n1 vgcreate vg_data /dev/sdb /dev/sdc This creates a VG named vg_data spanning both PVs. The default Physical Extent (PE) size is 4 MiB, which is fine for most use cases.\nVerify with:\n1 2 3 vgs # or for detailed output: vgdisplay vg_data Creating Logical Volumes Logical Volumes are carved from a VG. There are multiple ways to specify the size.\nExample 1: Fixed size in GiB 1 lvcreate -L 50G -n lv_www vg_data Creates a 50 GiB Logical Volume named lv_www in vg_data.\nExample 2: Fixed size in MiB 1 lvcreate -L 512M -n lv_logs vg_data Creates a 512 MiB Logical Volume named lv_logs.\nExample 3: Percentage of free VG space 1 lvcreate -l 100%FREE -n lv_backup vg_data Uses all remaining free space in vg_data. Other useful percentage variants:\n-l 50%FREE — use 50% of the remaining free space -l 80%VG — use 80% of the total VG size After creation, format the LV and mount it:\n1 2 3 4 5 6 mkfs.xfs /dev/vg_data/lv_www # or mkfs.ext4 /dev/vg_data/lv_logs mkdir -p /srv/www mount /dev/vg_data/lv_www /srv/www Verify with:\n1 2 3 lvs # or lvdisplay /dev/vg_data/lv_www Extending LVM: PV, VG, and LV Adding a new PV and extending the VG When you attach new storage, initialize it and add it to an existing VG:\n1 2 3 4 5 # Initialize the new disk pvcreate /dev/sdd # Add it to the existing VG vgextend vg_data /dev/sdd Check the updated free space:\n1 vgs Extending a Logical Volume With free space available in the VG, extend the LV. There are several ways to specify the new size:\n1 2 3 4 5 6 7 8 # Add 20 GiB to the LV lvextend -L +20G /dev/vg_data/lv_www # Grow the LV to an absolute size of 100 GiB lvextend -L 100G /dev/vg_data/lv_www # Use all remaining free space in the VG lvextend -l +100%FREE /dev/vg_data/lv_www Shortcut: extend LV and resize filesystem in one step Modern LVM supports the -r (--resizefs) flag, which automatically grows the filesystem after extending the LV:\n1 lvextend --resizefs -L +20G /dev/vg_data/lv_www This works for both XFS and ext3/ext4 and is the recommended approach for most cases. If you prefer (or need) to do it manually, read on.\nGrowing Filesystems After LV Extension After extending a Logical Volume, the filesystem still has its original size. You need to grow it separately (unless you used --resizefs above).\nXFS XFS filesystems must be mounted to be grown. The xfs_growfs command takes the mount point as its argument:\n1 2 3 4 5 # Grow to fill all available space on the LV xfs_growfs /mountpoint # Example xfs_growfs /srv/www To preview without making changes, use the -n (dry-run) flag:\n1 xfs_growfs -n /srv/www Important: XFS can only be grown, never shrunk. Plan your layout accordingly.\next3 / ext4 ext3 and ext4 filesystems are grown with resize2fs. Unlike XFS, this command takes the device path (not the mount point):\n1 2 3 4 5 # Grow to fill all available space on the LV resize2fs /dev/vg_data/lv_logs # Or grow to a specific size resize2fs /dev/vg_data/lv_logs 80G ext4 supports online (mounted) resizing. For ext3 this also works in most cases, but if you encounter issues, unmount first and optionally run a filesystem check:\n1 2 3 4 umount /mnt/logs e2fsck -f /dev/vg_data/lv_logs resize2fs /dev/vg_data/lv_logs mount /mnt/logs Verifying the result After resizing, confirm the new size:\n1 2 df -hT /srv/www df -hT /mnt/logs Cheat Sheet Task Command Create PV pvcreate /dev/sdX Create VG vgcreate vg_name /dev/sdX [/dev/sdY ...] Create LV (fixed size) lvcreate -L 50G -n lv_name vg_name Create LV (% of free) lvcreate -l 100%FREE -n lv_name vg_name Extend VG with new PV pvcreate /dev/sdZ \u0026amp;\u0026amp; vgextend vg_name /dev/sdZ Extend LV lvextend -L +20G /dev/vg_name/lv_name Extend LV + filesystem lvextend --resizefs -L +20G /dev/vg_name/lv_name Grow XFS xfs_growfs /mountpoint Grow ext3/ext4 resize2fs /dev/vg_name/lv_name Show PVs / VGs / LVs pvs / vgs / lvs Detailed info pvdisplay / vgdisplay / lvdisplay References Thomas-Krenn Wiki — LVM Grundkonfiguration Red Hat Blog — How to resize a logical volume with 5 simple LVM commands Red Hat Docs — Increasing the Size of an XFS File System Red Hat Docs — Resizing an ext4 File System man lvm, man xfs_growfs, man resize2fs ","permalink":"https://christian.blog.pakiheim.de/posts/2026-02-01_lvm_quick_reference-setup_extend_resize_filesystems/","summary":"\u003cp\u003eThis is a personal quick-reference for working with LVM (Logical Volume Manager) on Linux. It covers the full lifecycle from creating Physical Volumes through extending Logical Volumes, and finally growing the filesystem on top.\u003c/p\u003e","title":"LVM Quick Reference: Setup, Extend, and Resize Filesystems"},{"content":"How to enable Traefik auto-discovery for docker-compose containers on Swarm worker nodes\nThe Problem I am running docker (duh) at home for various containers (stirlingpdf, vscodium, jellyfin, gitea, authentik - just to name a few). And I wanted to spread the workload across multiple worker-nodes, but didn\u0026rsquo;t want to hassle with the hurdles of that - managing which host was serving what container.\nSo I started looking at docker swarm - which sadly was a no-go for me, as komodo isn\u0026rsquo;t supporting swarm yet. I\u0026rsquo;m currently also running portainer (and moving away from it) - which I could have used for that, but I wanted to get rid of portainer.\nHowever I wanted to use some of the concept(s) of docker swarm or even kubernetes (the ingress - https://kubernetes.io/docs/concepts/services-networking/ingress/) - while mainting the simplicity of docker compose.\nWhen running Docker Swarm with Traefik as the reverse proxy, you typically want:\nSwarm Services - Deployed via docker stack deploy, automatically discovered by Traefik Standalone Containers - Deployed via docker compose on worker nodes for simpler management Traefik v3 with providers.swarm only sees Swarm services, not standalone containers. And unlike Traefik v2, Traefik v3 does not support multiple Docker endpoints - you cannot configure it to watch multiple Docker sockets.\nFailed Approaches Socket Proxy: Exposing Docker sockets from workers via TCP/socket-proxy doesn\u0026rsquo;t work - Traefik v3 rejects multiple docker providers Docker API over TCP: Same limitation applies Service Mesh (Consul Connect, Linkerd): Overkill for this use case After a lot of trial and error (you know that rabbit hole you go down, once you start looking) I came to the conclusion that there was no such thing.\nThe Solution: Docker Label Sync A lightweight Python service that:\nWatches Docker events on worker nodes Extracts Traefik labels from containers Generates Traefik file provider rules (YAML) Syncs rules to the Swarm manager via SSH/rsync Traefik\u0026rsquo;s file provider with watch=true picks up changes automatically.\nArchitecture 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 SWARM CLUSTER ┌───────────────────────────────────────────────────────────────────┐ │ │ │ ┌─────────────────────────────────────┐ │ │ │ MANAGER NODE │ │ │ │ (swarm-mgr-01) │ │ │ │ │ │ │ │ ┌─────────────────────────────┐ │ │ │ │ │ Traefik (Swarm Service) │ │ │ │ │ │ │ │ │ │ │ │ - providers.swarm ─────────┼────┼──► Swarm Services │ │ │ │ - providers.file ──────┐ │ │ │ │ │ │ (watch=true) │ │ │ │ │ │ └─────────────────────────┼───┘ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ ┌─────────────────────────────┐ │ │ │ │ │ /opt/stacks/traefik/ │ │ │ │ │ │ config/rules/ │ │ │ │ │ │ worker-node-01-app.yml │◄───┼─────┐ │ │ │ │ worker-node-02-api.yml │◄───┼─────┼────┐ │ │ │ └─────────────────────────────┘ │ │ │ │ │ │ │ │ │ │ │ └─────────────────────────────────────┘ │ │ │ │ │ │ SSH/rsync │ │ ┌────────────────────────────────────┘ │ │ │ │ │ │ │ ┌──────┴──────────────────────┐ ┌──────────────┴─────────────┐ │ │ │ WORKER NODE 01 │ │ WORKER NODE 02 │ │ │ │ (swarm-wrk-01) │ │ (swarm-wrk-02) │ │ │ │ │ │ │ │ │ │ ┌───────────────────────┐ │ │ ┌───────────────────────┐ │ │ │ │ │ docker-label-sync │ │ │ │ docker-label-sync │ │ │ │ │ │ (systemd service) │ │ │ │ (systemd service) │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - Watch Docker API │ │ │ │ - Watch Docker API │ │ │ │ │ │ - Parse labels │ │ │ │ - Parse labels │ │ │ │ │ │ - Generate YAML │ │ │ │ - Generate YAML │ │ │ │ │ │ - rsync to manager │ │ │ │ - rsync to manager │ │ │ │ │ └───────────┬───────────┘ │ │ └───────────┬───────────┘ │ │ │ │ │ │ │ │ │ │ │ │ ▼ │ │ ▼ │ │ │ │ ┌───────────────────────┐ │ │ ┌───────────────────────┐ │ │ │ │ │ Docker Compose │ │ │ │ Docker Compose │ │ │ │ │ │ Containers │ │ │ │ Containers │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ my-app ──────────────┼──┼──┼──┼───────────────────────┼─┼──┤ │ │ │ traefik.enable=true │ │ │ │ my-api │ │ │ │ │ │ traefik.http... │ │ │ │ traefik.enable=true │ │ │ │ │ └───────────────────────┘ │ │ └───────────────────────┘ │ │ │ │ │ │ │ │ │ └─────────────────────────────┘ └────────────────────────────┘ │ │ │ │ ┌─────────────────────┐ │ │ │ Overlay Network │ │ │ │ traefik-overlay │ │ │ │ (attachable) │ │ │ └─────────────────────┘ │ │ │ │ │ Containers connect to overlay │ │ for direct routing from Traefik │ │ │ └───────────────────────────────────────────────────────────────────┘ Data Flow 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 Container Start on Worker │ ▼ ┌─────────────────┐ │ Docker Event │ │ type: container │ │ action: start │ └────────┬────────┘ │ ▼ ┌─────────────────────────────────────────────┐ │ docker-label-sync │ │ │ │ 1. Receive event via Docker API │ │ 2. Inspect container │ │ 3. Check: connected to overlay network? │ │ └─ No: skip │ │ └─ Yes: continue │ │ 4. Check: traefik.enable=true? │ │ └─ No: skip │ │ └─ Yes: continue │ │ 5. Parse traefik.* labels │ │ 6. Get container IP in overlay network │ │ 7. Generate Traefik YAML rule │ │ 8. rsync to manager:/opt/.../rules/ │ └─────────────────────────────────────────────┘ │ ▼ ┌─────────────────┐ │ Traefik │ │ file provider │ │ watch=true │ │ │ │ Detects new │ │ rule file │ │ Routes traffic │ └─────────────────┘ Implementation The Python Script The core script (docker-label-sync) runs as a systemd service and performs these tasks:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 # Simplified flow def main(): client = docker.from_env() # Sync existing containers on startup for container in client.containers.list(): process_container(container) # Watch for new events for event in client.events(decode=True): if event[\u0026#39;Type\u0026#39;] == \u0026#39;container\u0026#39;: if event[\u0026#39;Action\u0026#39;] == \u0026#39;start\u0026#39;: container = client.containers.get(event[\u0026#39;Actor\u0026#39;][\u0026#39;ID\u0026#39;]) process_container(container) elif event[\u0026#39;Action\u0026#39;] in (\u0026#39;stop\u0026#39;, \u0026#39;die\u0026#39;): schedule_cleanup(event[\u0026#39;Actor\u0026#39;][\u0026#39;Attributes\u0026#39;][\u0026#39;name\u0026#39;]) def process_container(container): # Check if container is in our overlay network ip = get_container_ip(container, OVERLAY_NETWORK) if not ip: return # Parse traefik labels labels = parse_traefik_labels(container.labels) if not labels: return # Generate and sync rule yaml_content = generate_traefik_rule(container, labels, ip) sync_to_manager(yaml_content, f\u0026#34;worker-{hostname}-{container.name}.yml\u0026#34;) Label to Rule Transformation Input: Docker Compose Labels\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 services: webapp: image: myapp:latest networks: - traefik-overlay labels: traefik.enable: \u0026#34;true\u0026#34; traefik.http.routers.webapp.rule: \u0026#34;Host(`app.example.com`)\u0026#34; traefik.http.routers.webapp.entrypoints: \u0026#34;websecure\u0026#34; traefik.http.services.webapp.loadbalancer.server.port: \u0026#34;8080\u0026#34; networks: traefik-overlay: external: true Output: Traefik File Provider Rule\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # Auto-generated by docker-label-sync # Container: webapp (abc123def) # Host: swarm-wrk-01.example.com http: routers: webapp: rule: \u0026#34;Host(`app.example.com`)\u0026#34; entryPoints: - websecure service: webapp tls: certResolver: letsencrypt services: webapp: loadBalancer: servers: - url: \u0026#34;http://10.0.1.15:8080\u0026#34; # Container IP in overlay Systemd Service 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [Unit] Description=Docker Label Sync Service After=docker.service Requires=docker.service [Service] Type=simple User=root EnvironmentFile=/etc/docker-label-sync.conf ExecStart=/usr/local/bin/docker-label-sync Restart=always RestartSec=5 [Install] WantedBy=multi-user.target Configuration 1 2 3 4 5 6 7 8 # /etc/docker-label-sync.conf TRAEFIK_SYNC_MANAGER=\u0026lt;ssh-user\u0026gt;@swarm-mgr-01.example.com TRAEFIK_SYNC_PATH=/opt/stacks/traefik/config/rules TRAEFIK_SYNC_NETWORK=traefik-overlay TRAEFIK_SYNC_PREFIX=worker- TRAEFIK_SYNC_CLEANUP_DELAY=15 TRAEFIK_SYNC_SSH_KEY=/home/\u0026lt;ssh-user\u0026gt;/.ssh/id_ed25519 TRAEFIK_SYNC_CERT_RESOLVER=letsencrypt Traefik Configuration The Swarm manager runs Traefik with both providers:\n1 2 3 4 5 6 7 8 9 10 # traefik command arguments command: # Swarm provider for stack-deployed services - \u0026#34;--providers.swarm\u0026#34; - \u0026#34;--providers.swarm.exposedbydefault=false\u0026#34; - \u0026#34;--providers.swarm.network=traefik-overlay\u0026#34; # File provider for worker container rules - \u0026#34;--providers.file.directory=/etc/traefik/rules\u0026#34; - \u0026#34;--providers.file.watch=true\u0026#34; Cleanup Strategy When a container stops, the sync service:\nWaits for configurable delay (default: 15 seconds) Removes the rule file from the manager Traefik automatically removes the route The delay prevents flapping during container restarts or quick redeploys.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Container Stop Event │ ▼ ┌───────────────────┐ │ Start 15s timer │ └─────────┬─────────┘ │ ▼ Container restarts within 15 seconds? │ ┌─────┴─────┐ │ │ Yes No │ │ ▼ ▼ ┌─────────┐ ┌─────────────┐ │ Cancel │ │ Remove rule │ │ timer │ │ from manager│ └─────────┘ └─────────────┘ Network Requirements Overlay Network The overlay network must be:\nCreated on the Swarm manager Marked as attachable: true Used by both Traefik and worker containers 1 2 # On manager docker network create --driver overlay --attachable traefik-overlay SSH Access Workers need SSH access to the manager for rsync:\nUses dedicated service user (ssh-user) Only needs write access to rules directory Advantages Aspect Benefit Simplicity No complex service mesh required Compatibility Works with standard docker-compose Real-time Docker events API provides instant updates Reliability rsync over SSH is robust and well-tested Security SSH keys, no exposed Docker sockets Flexibility Works with any deployment tool (Komodo, Portainer, CLI) Limitations Requires SSH connectivity between workers and manager Additional service running on each worker Slight delay compared to native Traefik discovery (~1-2 seconds) Rule files accumulate if cleanup fails (manual cleanup may be needed) Monitoring Check service status:\n1 2 systemctl status docker-label-sync journalctl -u docker-label-sync -f Verify rules on manager:\n1 2 ls -la /opt/stacks/traefik/config/rules/ cat /opt/stacks/traefik/config/rules/worker-*.yml Conclusion Docker Label Sync bridges the gap between Traefik v3\u0026rsquo;s Swarm-only discovery and the need for docker-compose deployments on worker nodes. It\u0026rsquo;s a pragmatic solution that:\nMaintains the familiar label-based configuration Works transparently with existing workflows Requires minimal infrastructure changes Provides real-time route updates The approach trades a small amount of complexity (one additional service per worker) for significant operational flexibility.\n","permalink":"https://christian.blog.pakiheim.de/posts/2026-02-01_docker-swarm-and-compose-traefik_label_sync/","summary":"A lightweight Python service that watches Docker events on worker nodes, extracts Traefik labels, and syncs them as file provider rules to the Swarm manager.","title":"Docker Swarm + Compose: Traefik Label Sync"},{"content":"Impressum Angaben gemäß § 5 TMG Christian Heim Leopoldstr. 32 D-76287 Rheinstetten\nKontakt E-Mail: hello@pakiheim.de\nHinweis Dies ist eine private, nicht-kommerzielle Webseite.\nHaftung für Inhalte Als Diensteanbieter bin ich gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG bin ich als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen.\nVerpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werde ich diese Inhalte umgehend entfernen.\nHaftung für Links Mein Angebot enthält Links zu externen Websites Dritter, auf deren Inhalte ich keinen Einfluss habe. Deshalb kann ich für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar.\nEine permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werde ich derartige Links umgehend entfernen.\nUrheberrecht Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite sind nur für den privaten, nicht kommerziellen Gebrauch gestattet.\nSoweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitte ich um einen entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werde ich derartige Inhalte umgehend entfernen.\n","permalink":"https://christian.blog.pakiheim.de/impressum/","summary":"\u003ch1 id=\"impressum\"\u003eImpressum\u003c/h1\u003e\n\u003ch2 id=\"angaben-gemäß--5-tmg\"\u003eAngaben gemäß § 5 TMG\u003c/h2\u003e\n\u003cp\u003eChristian Heim\nLeopoldstr. 32\nD-76287 Rheinstetten\u003c/p\u003e\n\u003ch2 id=\"kontakt\"\u003eKontakt\u003c/h2\u003e\n\u003cp\u003eE-Mail: \u003ca href=\"mailto:hello@pakiheim.de\"\u003ehello@pakiheim.de\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"hinweis\"\u003eHinweis\u003c/h2\u003e\n\u003cp\u003eDies ist eine private, nicht-kommerzielle Webseite.\u003c/p\u003e\n\u003ch2 id=\"haftung-für-inhalte\"\u003eHaftung für Inhalte\u003c/h2\u003e\n\u003cp\u003eAls Diensteanbieter bin ich gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG bin ich als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen.\u003c/p\u003e","title":"Impressum"},{"content":"Who we are Our website address is: https://christian.blog.pakiheim.de.\nWhat personal data we collect and why we collect it Comments When visitors leave comments on the site we collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to help spam detection.\nMedia If you upload images to the website, you should avoid uploading images with embedded location data (EXIF GPS) included. Visitors to the website can download and extract any location data from images on the website.\nContact forms Cookies If you leave a comment on our site you may opt-in to saving your name, email address and website in cookies. These are for your convenience so that you do not have to fill in your details again when you leave another comment. These cookies will last for one year.\nIf you have an account and you log in to this site, we will set a temporary cookie to determine if your browser accepts cookies. This cookie contains no personal data and is discarded when you close your browser.\nWhen you log in, we will also set up several cookies to save your login information and your screen display choices. Login cookies last for two days, and screen options cookies last for a year. If you select \u0026ldquo;Remember Me\u0026rdquo;, your login will persist for two weeks. If you log out of your account, the login cookies will be removed.\nIf you edit or publish an article, an additional cookie will be saved in your browser. This cookie includes no personal data and simply indicates the post ID of the article you just edited. It expires after 1 day.\nEmbedded content from other websites Articles on this site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves in the exact same way as if the visitor has visited the other website.\nThese websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracing your interaction with the embedded content if you have an account and are logged in to that website.\nAnalytics Who we share your data with Nobody.\nHow long we retain your data If you leave a comment, the comment and its metadata are retained indefinitely. This is so we can recognize and approve any follow-up comments automatically instead of holding them in a moderation queue.\nFor users that register on our website (if any), we also store the personal information they provide in their user profile. All users can see, edit, or delete their personal information at any time (except they cannot change their username). Website administrators can also see and edit that information.\nWhat rights you have over your data If you have an account on this site, or have left comments, you can request to receive an exported file of the personal data we hold about you, including any data you have provided to us. You can also request that we erase any personal data we hold about you. This does not include any data we are obliged to keep for administrative, legal, or security purposes.\nWhere we send your data This site does not collect any data.\nYour contact information Christian Heim hello@pakiheim.de\nAdditional information How we protect your data This site does not store any form of user related data.\nWhat data breach procedures we have in place What third parties we receive data from This site does not receive any data from third parties.\nWhat automated decision making and/or profiling we do with user data This site does not do any automated decision making/profiling.\n","permalink":"https://christian.blog.pakiheim.de/privacy-policy/","summary":"\u003ch2 id=\"who-we-are\"\u003eWho we are\u003c/h2\u003e\n\u003cp\u003eOur website address is: \u003ca href=\"https://christian.blog.pakiheim.de\"\u003ehttps://christian.blog.pakiheim.de\u003c/a\u003e.\u003c/p\u003e\n\u003ch2 id=\"what-personal-data-we-collect-and-why-we-collect-it\"\u003eWhat personal data we collect and why we collect it\u003c/h2\u003e\n\u003ch3 id=\"comments\"\u003eComments\u003c/h3\u003e\n\u003cp\u003eWhen visitors leave comments on the site we collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to help spam detection.\u003c/p\u003e\n\u003ch3 id=\"media\"\u003eMedia\u003c/h3\u003e\n\u003cp\u003eIf you upload images to the website, you should avoid uploading images with embedded location data (EXIF GPS) included. Visitors to the website can download and extract any location data from images on the website.\u003c/p\u003e","title":"Privacy Policy"},{"content":"OwnCloud Camera Import Sort Script 1 2 3 4 5 6 7 8 9 10 11 12 BASE_DIR=/var/www/owncloud.heimdaheim.de/data/christian/files/Camera-Import SORT_DIR=/var/www/owncloud.heimdaheim.de/data/christian/files/Camera-Sorted find \u0026#34;$BASE_DIR\u0026#34; -type f -name \u0026#34;*\u0026#34; | while IFS= read -r file; do year=\u0026#34;$(date -d \u0026#34;$(stat -c %y \u0026#34;$file\u0026#34;)\u0026#34; +%Y)\u0026#34; month=\u0026#34;$(date -d \u0026#34;$(stat -c %y \u0026#34;$file\u0026#34;)\u0026#34; +%b)\u0026#34; filestamp=\u0026#34;$(date -d \u0026#34;$(stat -c %y \u0026#34;$file\u0026#34;)\u0026#34; +%Y%m%d)\u0026#34; [[ ! -d \u0026#34;$SORT_DIR/$year/$month\u0026#34; ]] \u0026amp;\u0026amp; mkdir -p \u0026#34;$SORT_DIR/$year/$month\u0026#34; mv \u0026#34;$file\u0026#34; \u0026#34;$SORT_DIR/$year/$month/${filestamp}_${file##*/}\u0026#34; done Description This Bash script automatically sorts camera uploads from OwnCloud into a year/month directory structure. Files are organized based on their modification date and prefixed with a timestamp in the filename.\nHow it works Searches the Camera-Import directory for all files Extracts the year and month based on each file\u0026rsquo;s modification date Creates target directories (Year/Month) if they don\u0026rsquo;t exist Moves files to the appropriate folders with a YYYYMMDD_ prefix Usage Simply run the script to organize all camera imports into a chronological folder structure.\n","permalink":"https://christian.blog.pakiheim.de/posts/2023-04-16_sort-file-by-createdtime-into-subdirectories-structures-by-year-and-month/","summary":"\u003ch1 id=\"owncloud-camera-import-sort-script\"\u003eOwnCloud Camera Import Sort Script\u003c/h1\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eBASE_DIR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/var/www/owncloud.heimdaheim.de/data/christian/files/Camera-Import\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eSORT_DIR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/var/www/owncloud.heimdaheim.de/data/christian/files/Camera-Sorted\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efind \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$BASE_DIR\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e -type f -name \u003cspan class=\"s2\"\u003e\u0026#34;*\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e \u003cspan class=\"k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"nv\"\u003eIFS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eread\u003c/span\u003e -r file\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eyear\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003edate -d \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003estat -c %y \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$file\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e +%Y\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003emonth\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003edate -d \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003estat -c %y \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$file\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e +%b\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003efilestamp\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003edate -d \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003estat -c %y \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$file\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e +%Y%m%d\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e[[\u003c/span\u003e ! -d \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$SORT_DIR\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$year\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$month\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e mkdir -p \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$SORT_DIR\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$year\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$month\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  mv \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$file\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$SORT_DIR\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$year\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$month\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003efilestamp\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e_\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e##*/\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch2 id=\"description\"\u003eDescription\u003c/h2\u003e\n\u003cp\u003eThis Bash script automatically sorts camera uploads from OwnCloud into a year/month directory structure. Files are organized based on their modification date and prefixed with a timestamp in the filename.\u003c/p\u003e","title":"Sort file into subdirectories structures by year and month"},{"content":"This is how to sort files into date separated folders.\n1 2 3 4 5 6 7 8 9 10 BASE_DIR=/var/www/owncloud.heimdaheim.de/data/christian/files/oldgallery SORT_DIR=/var/www/owncloud.heimdaheim.de/data/christian/files/datedgallery find \u0026#34;$BASE_DIR\u0026#34; -type f -name \u0026#34;*\u0026#34; | while IFS= read -r file; do year=\u0026#34;$(date -d \u0026#34;$(stat -c %y \u0026#34;$file\u0026#34;)\u0026#34; +%Y)\u0026#34; month=\u0026#34;$(date -d \u0026#34;$(stat -c %y \u0026#34;$file\u0026#34;)\u0026#34; +%b)\u0026#34; filestamp=\u0026#34;$( date -d \u0026#34;$( stat -c %y \u0026#34;$file\u0026#34;)\u0026#34; +%Y%m%d)\u0026#34; [[ ! -d \u0026#34;$SORT_DIR/$year/$month\u0026#34; ]] \u0026amp;\u0026amp; mkdir -p \u0026#34;$SORT_DIR/$year/$month\u0026#34;; mv \u0026#34;$file\u0026#34; \u0026#34;$SORT_DIR/$year/$month/${filestamp}_${file##*/}\u0026#34; done ","permalink":"https://christian.blog.pakiheim.de/posts/2023-04-07_bash-sort-files-into-date-subdirectories/","summary":"\u003cp\u003eThis is how to sort files into date separated folders.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eBASE_DIR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/var/www/owncloud.heimdaheim.de/data/christian/files/oldgallery\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eSORT_DIR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/var/www/owncloud.heimdaheim.de/data/christian/files/datedgallery\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efind \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$BASE_DIR\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e -type f -name \u003cspan class=\"s2\"\u003e\u0026#34;*\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e \u003cspan class=\"k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"nv\"\u003eIFS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eread\u003c/span\u003e -r file\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eyear\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003edate -d \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003estat -c %y \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$file\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e +%Y\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003emonth\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003edate -d \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003estat -c %y \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$file\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e +%b\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003efilestamp\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e date -d \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e stat -c %y \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$file\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e +%Y%m%d\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e[[\u003c/span\u003e ! -d \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$SORT_DIR\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$year\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$month\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e mkdir -p \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$SORT_DIR\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$year\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$month\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  mv \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$file\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$SORT_DIR\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$year\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$month\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003efilestamp\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e_\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e##*/\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Bash sort files into date-subdirectories"},{"content":"So I just had the issue, that I encountered a long running local tracking git repo to be huge.\nAnd it wasn\u0026rsquo;t that there are huge (lfs) files stored in it.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # du -h --max-depth=1 --exclude=.git /var/www/pma.heimdaheim.de/www/ 60K /var/www/pma.heimdaheim.de/www/.github 676K /var/www/pma.heimdaheim.de/www/doc 20K /var/www/pma.heimdaheim.de/www/examples 9.0M /var/www/pma.heimdaheim.de/www/js 5.8M /var/www/pma.heimdaheim.de/www/libraries 59M /var/www/pma.heimdaheim.de/www/po 92K /var/www/pma.heimdaheim.de/www/scripts 28K /var/www/pma.heimdaheim.de/www/setup 28K /var/www/pma.heimdaheim.de/www/sql 1.5M /var/www/pma.heimdaheim.de/www/templates 3.3M /var/www/pma.heimdaheim.de/www/test 9.0M /var/www/pma.heimdaheim.de/www/themes 20M /var/www/pma.heimdaheim.de/www/vendor 92M /var/www/pma.heimdaheim.de/www/node_modules 28K /var/www/pma.heimdaheim.de/www/tmp 200M /var/www/pma.heimdaheim.de/www/ Now after looking at that, we can take a closer look into the git-directory itself (as to what is consuming the space):\n1 2 3 4 5 6 7 8 # du -h --max-depth=1 /var/www/pma.heimdaheim.de/www/.git 52K /var/www/pma.heimdaheim.de/www/.git/hooks 0 /var/www/pma.heimdaheim.de/www/.git/branches 68K /var/www/pma.heimdaheim.de/www/.git/info 32K /var/www/pma.heimdaheim.de/www/.git/refs 1.5G /var/www/pma.heimdaheim.de/www/.git/objects 68K /var/www/pma.heimdaheim.de/www/.git/logs 1.2G /var/www/pma.heimdaheim.de/www/.git As you can see, the git objects directory is a wopping 1.5GB. There is two ways to clean that:\na) git fetch \u0026ndash;prune\nb) git repack -a -d \u0026ndash;depth=250 \u0026ndash;window=250\nAfter doing b) lets look at the git directory again:\n1 2 3 4 5 6 7 8 # du -h --max-depth=1 /var/www/pma.heimdaheim.de/www/.git 52K /var/www/pma.heimdaheim.de/www/.git/hooks 0 /var/www/pma.heimdaheim.de/www/.git/branches 68K /var/www/pma.heimdaheim.de/www/.git/info 32K /var/www/pma.heimdaheim.de/www/.git/refs 1.2G /var/www/pma.heimdaheim.de/www/.git/objects 68K /var/www/pma.heimdaheim.de/www/.git/logs 1.2G /var/www/pma.heimdaheim.de/www/.git ","permalink":"https://christian.blog.pakiheim.de/posts/2022-08-26_shrink-git-repo-directory/","summary":"\u003cp\u003eSo I just had the issue, that I encountered a long running local tracking git repo to be huge.\u003cbr\u003e\nAnd it wasn\u0026rsquo;t that there are huge (lfs) files stored in it.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# du -h --max-depth=1 --exclude=.git /var/www/pma.heimdaheim.de/www/\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e60K     /var/www/pma.heimdaheim.de/www/.github\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e676K    /var/www/pma.heimdaheim.de/www/doc\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e20K     /var/www/pma.heimdaheim.de/www/examples\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e9.0M    /var/www/pma.heimdaheim.de/www/js\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e5.8M    /var/www/pma.heimdaheim.de/www/libraries\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e59M     /var/www/pma.heimdaheim.de/www/po\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e92K     /var/www/pma.heimdaheim.de/www/scripts\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e28K     /var/www/pma.heimdaheim.de/www/setup\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e28K     /var/www/pma.heimdaheim.de/www/sql\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1.5M    /var/www/pma.heimdaheim.de/www/templates\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e3.3M    /var/www/pma.heimdaheim.de/www/test\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e9.0M    /var/www/pma.heimdaheim.de/www/themes\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e20M     /var/www/pma.heimdaheim.de/www/vendor\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e92M     /var/www/pma.heimdaheim.de/www/node_modules\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e28K     /var/www/pma.heimdaheim.de/www/tmp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e200M    /var/www/pma.heimdaheim.de/www/\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eNow after looking at that, we can take a closer look into the git-directory itself (as to what is consuming the space):\u003c/p\u003e","title":"Shrink git repo directory"},{"content":" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 # Clone the VM qm clone 9000 4140 --name nzbget.ka.beiheimdaheim.de --full=true --storage vmstorage # Set the nameserver qm set 4140 --nameserver=10.76.41.1 # Set the ipconfiguration qm set 4140 --ipconfig0 ip=10.76.41.40/24,gw=10.76.41.1 # Configure the virtual network adapter. qm set 4140 --net0 virtio,bridge=vmbr0,tag=41 # Enable autoboot qm set 4140 --onboot 1 # Set the RAM of the VM qm set 4140 --memory 2048 # Set the vCPU count for the VM qm set 4140 --cores 2 # Start the VM qm start 4140 ","permalink":"https://christian.blog.pakiheim.de/posts/2022-06-21_create-a-proxmox-vm-via-cli/","summary":"\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Clone the VM\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm clone \u003cspan class=\"m\"\u003e9000\u003c/span\u003e \u003cspan class=\"m\"\u003e4140\u003c/span\u003e --name nzbget.ka.beiheimdaheim.de --full\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nb\"\u003etrue\u003c/span\u003e --storage vmstorage\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Set the nameserver\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm \u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u003cspan class=\"m\"\u003e4140\u003c/span\u003e --nameserver\u003cspan class=\"o\"\u003e=\u003c/span\u003e10.76.41.1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Set the ipconfiguration\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm \u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u003cspan class=\"m\"\u003e4140\u003c/span\u003e --ipconfig0 \u003cspan class=\"nv\"\u003eip\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e10.76.41.40/24,gw\u003cspan class=\"o\"\u003e=\u003c/span\u003e10.76.41.1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Configure the virtual network adapter.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm \u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u003cspan class=\"m\"\u003e4140\u003c/span\u003e --net0 virtio,bridge\u003cspan class=\"o\"\u003e=\u003c/span\u003evmbr0,tag\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e41\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Enable autoboot\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm \u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u003cspan class=\"m\"\u003e4140\u003c/span\u003e --onboot \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Set the RAM of the VM\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm \u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u003cspan class=\"m\"\u003e4140\u003c/span\u003e --memory \u003cspan class=\"m\"\u003e2048\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Set the vCPU count for the VM\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm \u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u003cspan class=\"m\"\u003e4140\u003c/span\u003e --cores \u003cspan class=\"m\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Start the VM\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm start \u003cspan class=\"m\"\u003e4140\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Create a Proxmox VM via CLI"},{"content":"Step 1: Download the Ubuntu image 1 2 3 4 5 6 SRC_IMG=\u0026#34;https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64-disk-kvm.img\u0026#34; #VMSTORAGE=\u0026#34;/vmstorage\u0026#34; VMSTORAGE=\u0026#34;/var/lib/vz/images\u0026#34; IMG_NAME=\u0026#34;jammy-server-cloudimg-amd64-disk-kvm.qcow2\u0026#34; IMG_PATH=\u0026#34;$VMSTORAGE/$IMG_NAME\u0026#34; wget -O $IMG_PATH $SRC_IMG Step 2: Add necessary packages 1 2 sudo apt install -y libguestfs-tools sudo virt-customize -a $IMG_PATH --install cloud-initramfs-growroot,atop,htop,nano,vim,qemu-guest-agent,curl,wget,unattended-upgrades,git Step 3: Modify /etc/ssh/sshd_config 1 sudo virt-customize -a $IMG_PATH --run-command \u0026#34;sed -i \u0026#39;s/.*PasswordAuthentication.*/PasswordAuthentication yes/g\u0026#39; /etc/ssh/sshd_config\u0026#34; Step 4: Modify /etc/apt/apt.conf.d/50unattended-upgrades 1 2 export EDITOR=nano sudo -E virt-edit -a $IMG_PATH /etc/apt/apt.conf.d/50unattended-upgrades Step 5: Modify /etc/default/grub 1 2 3 export EDITOR=nano sudo -E virt-edit -a $IMG_PATH /etc/default/grub sudo virt-customize -a $IMG_PATH --run-command \u0026#34;update-grub\u0026#34; Step 6: Install ohmybash 1 2 sudo virt-customize -a $IMG_PATH --run-command \u0026#34;git clone https://github.com/ohmybash/oh-my-bash.git /opt/ohmybash\u0026#34; Step 7: Fix timezone 1 sudo virt-customize -a $IMG_PATH --timezone \u0026#34;Europe/Berlin\u0026#34; Step 8: Create the Proxmox template 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 TEMPL_NAME=\u0026#34;ubuntu2204-cloud\u0026#34; VMID=\u0026#34;9000\u0026#34; MEM=\u0026#34;512\u0026#34; DISK_SIZE=\u0026#34;10G\u0026#34; DISK_STOR=\u0026#34;vmstorage\u0026#34; NET_BRIDGE=\u0026#34;vmbr0\u0026#34; qm create $VMID --name $TEMPL_NAME --memory $MEM --net0 virtio,bridge=$NET_BRIDGE qm importdisk $VMID $IMG_NAME $DISK_STOR qm set $VMID --agent enabled=1 qm set $VMID --scsihw virtio-scsi-pci --scsi0 $DISK_STOR:vm-$VMID-disk-0 qm set $VMID --ide2 $DISK_STOR:cloudinit qm set $VMID --boot c --bootdisk scsi0 qm set $VMID --serial0 socket --vga serial0 qm set $VMID --ipconfig0 ip=dhcp qm set $VMID --ciuser=christian qm set $VMID --cipassword=\u0026#34;bla\u0026#34; qm set $VMID --searchdomain=ka.beiheimdaheim.de qm resize $VMID scsi0 $DISK_SIZE qm template $VMID ","permalink":"https://christian.blog.pakiheim.de/posts/2022-06-21_create-a-proxmox-ubuntu-cloud-init-template/","summary":"\u003ch2 id=\"step-1-download-the-ubuntu-image\"\u003eStep 1: Download the Ubuntu image\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e6\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eSRC_IMG\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64-disk-kvm.img\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#VMSTORAGE=\u0026#34;/vmstorage\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eVMSTORAGE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/var/lib/vz/images\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eIMG_NAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;jammy-server-cloudimg-amd64-disk-kvm.qcow2\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eIMG_PATH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;$VMSTORAGE/$IMG_NAME\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewget\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eO\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eIMG_PATH\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eSRC_IMG\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch2 id=\"step-2-add-necessary-packages\"\u003eStep 2: Add necessary packages\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-1-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esudo\u003c/span\u003e \u003cspan class=\"n\"\u003eapt\u003c/span\u003e \u003cspan class=\"n\"\u003einstall\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"n\"\u003elibguestfs\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003etools\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esudo\u003c/span\u003e \u003cspan class=\"n\"\u003evirt\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ecustomize\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eIMG_PATH\u003c/span\u003e \u003cspan class=\"o\"\u003e--\u003c/span\u003e\u003cspan class=\"n\"\u003einstall\u003c/span\u003e \u003cspan class=\"n\"\u003ecloud\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003einitramfs\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003egrowroot\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003eatop\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003ehtop\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003enano\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003evim\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003eqemu\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eguest\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eagent\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003ecurl\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003ewget\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003eunattended\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eupgrades\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003egit\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch2 id=\"step-3-modify-etcsshsshd_config\"\u003eStep 3: Modify /etc/ssh/sshd_config\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-2-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-2-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo virt-customize -a \u003cspan class=\"nv\"\u003e$IMG_PATH\u003c/span\u003e --run-command \u003cspan class=\"s2\"\u003e\u0026#34;sed -i \u0026#39;s/.*PasswordAuthentication.*/PasswordAuthentication yes/g\u0026#39; /etc/ssh/sshd_config\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch2 id=\"step-4-modify-etcaptaptconfd50unattended-upgrades\"\u003eStep 4: Modify \u003ccode\u003e/etc/apt/apt.conf.d/50unattended-upgrades\u003c/code\u003e\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-3-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eEDITOR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003enano\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo -E virt-edit -a \u003cspan class=\"nv\"\u003e$IMG_PATH\u003c/span\u003e /etc/apt/apt.conf.d/50unattended-upgrades\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch2 id=\"step-5-modify-etcdefaultgrub\"\u003eStep 5: Modify \u003ccode\u003e/etc/default/grub\u003c/code\u003e\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-4-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-4-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-4-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-4-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-4-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-4-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eEDITOR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003enano\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo -E virt-edit -a \u003cspan class=\"nv\"\u003e$IMG_PATH\u003c/span\u003e /etc/default/grub\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo virt-customize -a \u003cspan class=\"nv\"\u003e$IMG_PATH\u003c/span\u003e --run-command \u003cspan class=\"s2\"\u003e\u0026#34;update-grub\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch2 id=\"step-6-install-ohmybash\"\u003eStep 6: Install \u003ccode\u003eohmybash\u003c/code\u003e\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-5-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-5-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-5-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-5-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo virt-customize -a \u003cspan class=\"nv\"\u003e$IMG_PATH\u003c/span\u003e --run-command \u003cspan class=\"s2\"\u003e\u0026#34;git clone https://github.com/ohmybash/oh-my-bash.git /opt/ohmybash\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch2 id=\"step-7-fix-timezone\"\u003eStep 7: Fix timezone\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-6-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-6-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo virt-customize -a \u003cspan class=\"nv\"\u003e$IMG_PATH\u003c/span\u003e --timezone \u003cspan class=\"s2\"\u003e\u0026#34;Europe/Berlin\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch2 id=\"step-8-create-the-proxmox-template\"\u003eStep 8: Create the Proxmox template\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-7-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-7-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-7-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eTEMPL_NAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;ubuntu2204-cloud\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eVMID\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;9000\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eMEM\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;512\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eDISK_SIZE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;10G\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eDISK_STOR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;vmstorage\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eNET_BRIDGE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;vmbr0\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm create \u003cspan class=\"nv\"\u003e$VMID\u003c/span\u003e --name \u003cspan class=\"nv\"\u003e$TEMPL_NAME\u003c/span\u003e --memory \u003cspan class=\"nv\"\u003e$MEM\u003c/span\u003e --net0 virtio,bridge\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$NET_BRIDGE\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm importdisk \u003cspan class=\"nv\"\u003e$VMID\u003c/span\u003e \u003cspan class=\"nv\"\u003e$IMG_NAME\u003c/span\u003e \u003cspan class=\"nv\"\u003e$DISK_STOR\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm \u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u003cspan class=\"nv\"\u003e$VMID\u003c/span\u003e --agent \u003cspan class=\"nv\"\u003eenabled\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm \u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u003cspan class=\"nv\"\u003e$VMID\u003c/span\u003e --scsihw virtio-scsi-pci --scsi0 \u003cspan class=\"nv\"\u003e$DISK_STOR\u003c/span\u003e:vm-\u003cspan class=\"nv\"\u003e$VMID\u003c/span\u003e-disk-0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm \u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u003cspan class=\"nv\"\u003e$VMID\u003c/span\u003e --ide2 \u003cspan class=\"nv\"\u003e$DISK_STOR\u003c/span\u003e:cloudinit\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm \u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u003cspan class=\"nv\"\u003e$VMID\u003c/span\u003e --boot c --bootdisk scsi0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm \u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u003cspan class=\"nv\"\u003e$VMID\u003c/span\u003e --serial0 socket --vga serial0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm \u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u003cspan class=\"nv\"\u003e$VMID\u003c/span\u003e --ipconfig0 \u003cspan class=\"nv\"\u003eip\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003edhcp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm \u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u003cspan class=\"nv\"\u003e$VMID\u003c/span\u003e --ciuser\u003cspan class=\"o\"\u003e=\u003c/span\u003echristian\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm \u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u003cspan class=\"nv\"\u003e$VMID\u003c/span\u003e --cipassword\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;bla\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm \u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u003cspan class=\"nv\"\u003e$VMID\u003c/span\u003e --searchdomain\u003cspan class=\"o\"\u003e=\u003c/span\u003eka.beiheimdaheim.de\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm resize \u003cspan class=\"nv\"\u003e$VMID\u003c/span\u003e scsi0 \u003cspan class=\"nv\"\u003e$DISK_SIZE\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eqm template \u003cspan class=\"nv\"\u003e$VMID\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Create a Proxmox Ubuntu Cloud-Init Template"},{"content":"This is a quick note for some commands, I have found useful.\nGet the currently configured OS hostname 1 \u0026gt; racadm get System.ServerOS.Hostname Set the configured OS hostname 1 2 3 \u0026gt; racadm set System.ServerOS.Hostname hv-2.ka.beiheimdaheim.de [Key=System.Embedded.1#ServerOS.1] Object value modified successfully Reset the SSL certificate 1 2 \u0026gt; racadm sslresetcfg \u0026gt; racadm racreset https://mindlesstux.com/2018/03/13/idrac-7-letsencrypt-wildcard-cert/ https://www.itechlounge.net/2018/03/dell-how-to-install-a-custom-issued-ssl-certificate-on-idrac/ Get a list of all storage devices, and their blocksize (conversion of NetApp Disks - blocksize 520) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 $ for sg in $( ls /dev/sg* ); do output=$(sg\\_format $sg 2\u0026gt;/dev/null); blocksize=$( echo \u0026#34;$output\u0026#34; \\| grep \u0026#39;Block size\u0026#39; \\| cut -d\\\\= -f2 \\| cut -d\\ -f1); echo \u0026#34;$sg: $blocksize\u0026#34;; done /dev/sg0: 512 /dev/sg1: 512 /dev/sg10: 512 /dev/sg11: 512 /dev/sg12: 512 /dev/sg13: 512 /dev/sg14: 512 /dev/sg15: 512 /dev/sg16: 512 /dev/sg17: 512 /dev/sg18: 512 /dev/sg19: 512 /dev/sg2: 512 /dev/sg20: 512 /dev/sg21: 512 /dev/sg22: /dev/sg23: /dev/sg3: 512 /dev/sg4: 512 /dev/sg5: 512 /dev/sg6: 512 /dev/sg7: 512 /dev/sg8: 512 /dev/sg9: 512 List the servers power status and try and turn the power off. 1 2 3 4 admin1-\u0026gt; racadm serveraction powerstatus Server power status: ON admin1-\u0026gt; racadm serveraction powerdown ERROR: Timeout while waiting for server to perform requested power action. If you happen to have 3rd party fans inside the system, you may get the above reaction.\n1 2 3 4 # Get/Enable/Disable 3rd party fan response racadm get system.thermalsettings.ThirdPartyPCIFanResponse racadm set system.thermalsettings.ThirdPartyPCIFanResponse 1 # enable racadm set system.thermalsettings.ThirdPartyPCIFanResponse 0 # disable BIOS 2.0.21 iDrac 1.57.57 BIOS 2.1.3 iDrac w/ Lifecycle Controller 2.21.21 (the updates merged after this point) BIOS 2.4.2 iDrac w/ LCC 2.40.40 BIOS 2.5.1 iDrac w. LCC 2.63.60.62. (latest) BIOS 2.6.0 (latest) ","permalink":"https://christian.blog.pakiheim.de/posts/2022-04-15_dell-notes/","summary":"\u003cp\u003eThis is a quick note for some commands, I have found useful.\u003c/p\u003e\n\u003ch2 id=\"get-the-currently-configured-os-hostname\"\u003eGet the currently configured OS hostname\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026gt; racadm get System.ServerOS.Hostname\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch2 id=\"set-the-configured-os-hostname\"\u003eSet the configured OS hostname\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-1-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026gt; racadm \u003cspan class=\"nb\"\u003eset\u003c/span\u003e System.ServerOS.Hostname hv-2.ka.beiheimdaheim.de\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"nv\"\u003eKey\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eSystem.Embedded.1#ServerOS.1\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eObject value modified successfully\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch2 id=\"reset-the-ssl-certificate\"\u003eReset the SSL certificate\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-2-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-2-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-2-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-2-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026gt; racadm sslresetcfg\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026gt; racadm racreset\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://mindlesstux.com/2018/03/13/idrac-7-letsencrypt-wildcard-cert/\"\u003ehttps://mindlesstux.com/2018/03/13/idrac-7-letsencrypt-wildcard-cert/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.itechlounge.net/2018/03/dell-how-to-install-a-custom-issued-ssl-certificate-on-idrac/\"\u003ehttps://www.itechlounge.net/2018/03/dell-how-to-install-a-custom-issued-ssl-certificate-on-idrac/\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"get-a-list-of-all-storage-devices-and-their-blocksize-conversion-of-netapp-disks---blocksize-520\"\u003eGet a list of all storage devices, and their blocksize (conversion of NetApp Disks - blocksize 520)\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-3-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-3-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-3-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ \u003cspan class=\"k\"\u003efor\u003c/span\u003e sg in \u003cspan class=\"k\"\u003e$(\u003c/span\u003e ls /dev/sg* \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e \u003cspan class=\"nv\"\u003eoutput\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003esg\u003cspan class=\"se\"\u003e\\_\u003c/span\u003eformat \u003cspan class=\"nv\"\u003e$sg\u003c/span\u003e 2\u0026gt;/dev/null\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"nv\"\u003eblocksize\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$output\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\|\u003c/span\u003e grep \u003cspan class=\"s1\"\u003e\u0026#39;Block size\u0026#39;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\|\u003c/span\u003e cut -d\u003cspan class=\"se\"\u003e\\\\\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e -f2 \u003cspan class=\"se\"\u003e\\|\u003c/span\u003e cut -d\u003cspan class=\"se\"\u003e\\ \u003c/span\u003e-f1\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$sg\u003c/span\u003e\u003cspan class=\"s2\"\u003e: \u003c/span\u003e\u003cspan class=\"nv\"\u003e$blocksize\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg0: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg1: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg10: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg11: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg12: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg13: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg14: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg15: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg16: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg17: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg18: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg19: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg2: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg20: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg21: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg22:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg23:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg3: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg4: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg5: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg6: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg7: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg8: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sg9: \u003cspan class=\"m\"\u003e512\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch2 id=\"list-the-servers-power-status-and-try-and-turn-the-power-off\"\u003eList the servers power status and try and turn the power off.\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-4-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-4-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-4-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-4-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-4-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-4-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-4-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-4-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eadmin1-\u0026gt; racadm serveraction powerstatus\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eServer power status: ON\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eadmin1-\u0026gt; racadm serveraction powerdown\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eERROR: Timeout \u003cspan class=\"k\"\u003ewhile\u003c/span\u003e waiting \u003cspan class=\"k\"\u003efor\u003c/span\u003e server to perform requested power action.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eIf you happen to have 3rd party fans inside the system, you may get the above reaction.\u003c/p\u003e","title":"Dell notes"},{"content":"Since I got the pleasure of watching some Windows boxen with Nagios, I took the Windows Update plugin from Michal Jankowski and implemented it. It took me some time, to initially set up the nsclient++ correctly so it just works, but up till now the check plugin sometimes reported the usual \u0026ldquo;Service Check Timed Out\u0026rdquo;.\nUsually I ended up increasing the cscript timeout, or the nsclient++ socket timeout, but it still kept showing up. Since I rely heavily on my surveillance tools, I have the demand, that as few as possible false positives show up. So I ended up chasing down this error today, and after that I have to say it was quite simple.\nIn my case, it wasn\u0026rsquo;t cscript (that timeout is set to 300 seconds), neither nsclient++ (socket timeout is set to 300 seconds too), nor the nrpe plugin itself (that has 300 seconds as well).\nAs it turns out, Nagios got an additional setting controlling these things, called service_check_timeout which defaults to 60 seconds. Sadly the plugin, or rather Windows needs longer than those 60 seconds to figure out whether or not it needs updating, thus Nagios is killing the plugin and returning a CRITICAL message.\nAfter increasing the value of service_check_timeout that\u0026rsquo;ll be fixed hopefully.\n","permalink":"https://christian.blog.pakiheim.de/posts/2018-12-07_nagios-service-check-timed-out/","summary":"\u003cp\u003eSince I got the pleasure of watching some Windows boxen with Nagios, I took the \u003ca href=\"http://www.monitoringexchange.org/inventory/Check-Plugins/Operating-Systems/Windows-NRPE/Check-Windows-Updates\"\u003eWindows Update plugin\u003c/a\u003e from Michal Jankowski and implemented it. It took me some time, to initially set up the nsclient++ correctly so it just works, but up till now the check plugin sometimes reported the usual \u0026ldquo;Service Check Timed Out\u0026rdquo;.\u003c/p\u003e\n\u003cp\u003eUsually I ended up increasing the cscript timeout, or the nsclient++ socket timeout, but it still kept showing up. Since I rely heavily on my surveillance tools, I have the demand, that as few as possible false positives show up. So I ended up chasing down this error today, and after that I have to say it was quite simple.\u003c/p\u003e","title":"Nagios: Service Check Timed Out"},{"content":"I was fighting with our VTL again, and TSM was thinking all the drives were offline. In order to update the drive status, you\u0026rsquo;d need to go into the ISC and select each drive and set them to ONLINE. Since I\u0026rsquo;m a bit click-lazy, I wrote a simple nested for-loop, which gives me the output to update all the drives at once:\n1 2 3 4 5 for i in 1 2; do for k in $( seq -w 1 32 ); do echo \u0026#34;UPDATE DRIVE VTL$i VTL${i}_DR${k} ONLINE=YES\u0026#34; done done Result is a list like this:\n1 2 3 4 5 6 7 ... UPDATE DRIVE VTL1 VTL1_DR31 ONLINE=YES UPDATE DRIVE VTL1 VTL1_DR32 ONLINE=YES UPDATE DRIVE VTL2 VTL2_DR01 ONLINE=YES UPDATE DRIVE VTL2 VTL2_DR02 ONLINE=YES UPDATE DRIVE VTL2 VTL2_DR03 ONLINE=YES ... The same goes for mass-updating the path status:\n1 2 3 4 5 for i in 1 2; do for k in $( seq -w 1 32 ); do echo \u0026#34;UPDATE PATH TSM$i VTL${i}_DR${k} SRCTYPE=SERVER DESTTYPE=DRIVE LIBRARY=VTL$i ONLINE=YES\u0026#34; done done Result is a list like this:\n1 2 3 4 5 ... UPDATE PATH TSM1 VTL1_DR31 SRCTYPE=SERVER DESTTYPE=DRIVE LIBRARY=VTL1 ONLINE=YES UPDATE PATH TSM1 VTL1_DR32 SRCTYPE=SERVER DESTTYPE=DRIVE LIBRARY=VTL1 ONLINE=YES UPDATE PATH TSM2 VTL2_DR01 SRCTYPE=SERVER DESTTYPE=DRIVE LIBRARY=VTL2 ONLINE=YES UPDATE PATH TSM2 VTL2_DR02 SRCTYPE=SERVER DESTTYPE=DRIVE LIBRARY=VTL2 ONLINE=YES ","permalink":"https://christian.blog.pakiheim.de/posts/2017-10-11_mass-updating-tivoli-storage-manager-drive-status/","summary":"\u003cp\u003eI was fighting with our VTL again, and TSM was thinking all the drives were offline. In order to update the drive status, you\u0026rsquo;d need to go into the ISC and select each drive and set them to \u003cem\u003eONLINE\u003c/em\u003e. Since I\u0026rsquo;m a bit click-lazy, I wrote a simple nested for-loop, which gives me the output to update all the drives at once:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efor i in 1 2; do\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  for k in $( seq -w 1 32 ); do\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    echo \u0026#34;UPDATE DRIVE VTL$i VTL${i}_DR${k} ONLINE=YES\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  done\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edone\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eResult is a list like this:\u003c/p\u003e","title":"Mass-updating Tivoli Storage Manager drive status"},{"content":"I had this weird plugin error the other day which bothered me on Friday. I decided to go fixing it. So after poking around in the vCenter installed software list. I couldn\u0026rsquo;t find the Auto Deploy in the list, so I figured due to my recent vCenter reinstallation while keeping the database, I forgot to reinstall Auto Deploy.\nI went ahead and started the Auto Deploy setup from the DVD again, until I received this weird looking error. Apparently the setup thought (and decided correctly) that Auto Deploy was already installed in my vCenter.\nSo after a bit of googling, I found this nice explanation on how to manually deregister Auto Deploy from my vCenter. So here are steps retyped:\nRun the setup an hold at the window where you\u0026rsquo;re informed that Auto Deploy is already installed. Copy the MSI package from %TEMP%{RANDOM-GUID} to C:TEMP Unpack the setup files from the msi Manually deregister Auto Deploy using autodeploy-register Run the Auto Deploy setup again Unpack the setup files: Open a command prompt and extract the msi using msiexec\n1 msiexec /a\u0026amp;nbsp;C:TEMPautodeploy.msi /qb TARGETDIR=C:TEMPautodeploy 3. Switch to C:TEMPautodeployProgram FilesVMwareVMware vSphere Auto Deploy and run autodeploy-register.exe against your vCenter installation\n1 2 cd \u0026#34;TEMPautodeployProgram FilesVMwareVMware vSphere Auto Deploy\u0026#34; autodeploy-register.exe -U -a vcenter.home.barfoo.org -u adminaccount -w passwithoutspaceandspecialchars -p 80 After that command completes, you simply can run the setup from the DVD again. Afterwards the RuleEngine errors were gone (simply because Auto Deploy is installed again) and Auto Deploy is working again. ","permalink":"https://christian.blog.pakiheim.de/posts/2017-09-03_vmware-auto-deploy-already-registered-ruleengine/","summary":"\u003cp\u003eI had this weird plugin error the other day which bothered me on Friday. I decided to go fixing it. So after poking around in the vCenter installed software list. I couldn\u0026rsquo;t find the Auto Deploy in the list, so I figured due to my recent vCenter reinstallation while keeping the database, I forgot to reinstall Auto Deploy.\u003c/p\u003e\n\u003cp\u003eI went ahead and started the Auto Deploy setup from the DVD again, until I received this weird looking error. Apparently the setup thought (and decided correctly) that Auto Deploy was already installed in my vCenter.\u003c/p\u003e","title":"VMware Auto Deploy already registered / RuleEngine"},{"content":"Well, I recently prepared a bunch of Debian KVM guests, and today I got annoyed (basically because logwatch complains about it \u0026hellip;) by this pesky error message on each startup. What causes this is error is really simple.\nUdev loads the PC speaker driver (pcspkr) and then (for whatever reason) tries to load the alsa-module for the PC speaker (snd_pcsp). And the second one, basically fails. All we need to do, is create a blacklist.conf and add the latter one to it.\n1 echo blacklist snd_pcsp | sudo tee -a /etc/modprobe.d/blacklist.conf ","permalink":"https://christian.blog.pakiheim.de/posts/2017-02-28_debian-dmesg-output-contains-error-driver-pcspkr-is-already-registered-aborting/","summary":"\u003cp\u003eWell, I recently prepared a bunch of Debian KVM guests, and today I got annoyed (basically because logwatch complains about it \u0026hellip;) by this pesky error message on each startup. What causes this is error is really simple.\u003c/p\u003e\n\u003cp\u003eUdev loads the PC speaker driver (pcspkr) and then (for whatever reason) tries to load the alsa-module for the PC speaker (snd_pcsp). And the second one, basically fails. All we need to do, is create a blacklist.conf and add the latter one to it.\u003c/p\u003e","title":"Debian: dmesg output contains Error: Driver 'pcspkr' is already registered, aborting…"},{"content":"Well, the title pretty much says what I want to do. Even if the DS213+ is on top of a living room cupboard, it\u0026rsquo;s still way to bright .. as I don\u0026rsquo;t need really need the LED, here\u0026rsquo;s a quick hack (the ID and the device is taken from the Synology Wiki) on how to disable it on each startup:\n1 2 3 4 5 6 7 8 #!/bin/sh case $1 in start) echo \u0026#34;Disabling Power LED\u0026#34; echo 6 \u0026gt; /dev/ttyS1 ;; esac Just place the file in /opt/etc/init.d/S01leds and the script is gonna turn the LED off during a boot/reboot.\n","permalink":"https://christian.blog.pakiheim.de/posts/2016-09-09_synology-ds213-disable-blue-status-led/","summary":"\u003cp\u003eWell, the title pretty much says what I want to do. Even if the DS213+ is on top of a living room cupboard, it\u0026rsquo;s still way to bright .. as I don\u0026rsquo;t need really need the LED, here\u0026rsquo;s a quick hack (the ID and the device is \u003ca href=\"http://www.synology-wiki.de/index.php/LEDs_und_Buttons\"\u003etaken from the Synology Wiki\u003c/a\u003e) on how to disable it on each startup:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e8\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/sh\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nv\"\u003e$1\u003c/span\u003e in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        start\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Disabling Power LED\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"m\"\u003e6\u003c/span\u003e \u0026gt; /dev/ttyS1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eesac\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eJust place the file in \u003cem\u003e/opt/etc/init.d/S01leds\u003c/em\u003e and the script is gonna turn the LED off during a boot/reboot.\u003c/p\u003e","title":"Synology DS213+: Disable Blue Status LED"},{"content":"As I wrote before about enabling multipathing for the AutoYaST installation it\u0026rsquo;s about time I write this one here.\nSadly AutoYaST needs a little push in the right direction (as to where to actually put the root device), so here\u0026rsquo;s part of my AutoYaST profile for such a Cisco blade:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 \u0026lt;profile xmlns=\u0026#34;http://www.suse.com/1.0/yast2ns\u0026#34; xmlns:config=\u0026#34;http://www.suse.com/1.0/configns\u0026#34;\u0026gt; \u0026lt;bootloader\u0026gt; \u0026lt;device_map config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;device_map_entry\u0026gt; \u0026lt;firmware\u0026gt;hd0\u0026lt;/firmware\u0026gt; \u0026lt;linux\u0026gt;/dev/sda\u0026lt;/linux\u0026gt; \u0026lt;/device_map_entry\u0026gt; \u0026lt;/device_map\u0026gt; \u0026lt;/bootloader\u0026gt; \u0026lt;partitioning config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;drive\u0026gt; \u0026lt;device\u0026gt;/dev/sda\u0026lt;/device\u0026gt; \u0026lt;/drive\u0026gt; \u0026lt;/partitioning\u0026gt; \u0026lt;scripts\u0026gt; \u0026lt;pre-scripts config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;script\u0026gt; \u0026lt;debug config:type=\u0026#34;boolean\u0026#34;\u0026gt;false\u0026lt;/debug\u0026gt; \u0026lt;feedback config:type=\u0026#34;boolean\u0026#34;\u0026gt;false\u0026lt;/feedback\u0026gt; \u0026lt;filename\u0026gt;config-ucs.sh\u0026lt;/filename\u0026gt; \u0026lt;interpreter\u0026gt;shell\u0026lt;/interpreter\u0026gt; \u0026lt;source\u0026gt;\u0026lt;![CDATA[ cat /tmp/profile/autoinst.xml | sed \u0026#34;s,/dev/sda,/dev/mapper/`/sbin/multipath -ll | grep dm-0 | cut -d -f1`,\u0026#34; \u0026gt; /tmp/profile/modified.xml ]]\u0026gt; \u0026lt;/source\u0026gt; \u0026lt;/script\u0026gt; \u0026lt;/pre-scripts\u0026gt; \u0026lt;chroot-scripts config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;script\u0026gt; \u0026lt;chrooted config:type=\u0026#34;boolean\u0026#34;\u0026gt;true\u0026lt;/chrooted\u0026gt; \u0026lt;debug config:type=\u0026#34;boolean\u0026#34;\u0026gt;true\u0026lt;/debug\u0026gt; \u0026lt;feedback config:type=\u0026#34;boolean\u0026#34;\u0026gt;true\u0026lt;/feedback\u0026gt; \u0026lt;filename\u0026gt;config-ucs-chroot.sh\u0026lt;/filename\u0026gt; \u0026lt;interpreter\u0026gt;shell\u0026lt;/interpreter\u0026gt; \u0026lt;location\u0026gt;http://install.home.barfoo.org/autoyast/scripts/config-ucs-chroot.sh\u0026lt;/location\u0026gt; \u0026lt;/script\u0026gt; \u0026lt;/chroot-scripts\u0026gt; \u0026lt;/scripts\u0026gt; \u0026lt;software\u0026gt; \u0026lt;packages config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;package\u0026gt;multipath-tools\u0026lt;/package\u0026gt; \u0026lt;/packages\u0026gt; \u0026lt;/software\u0026gt; \u0026lt;/profile\u0026gt; Now, the profile addition takes care of the placement of the root-device now (simply parses multipath -ll) and adjusts the pulled profile accordingly ( /tmp/profile/modified.xml), which AutoYaST then re-reads.\nNow, after installing the system, it\u0026rsquo;s gonna come up broken and shitty. That\u0026rsquo;s what the chroot-script above is for. This script looks like this (the original idea was here, look through the attachments):\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #!/bin/bash echo \u0026#34;defaults { user_friendly_names yes bindings_file /etc/multipath_bindings }\u0026#34; \u0026gt; /etc/multipath.conf sleep 1 # Fix wrong root-path in /etc/fstab sed -i \u0026#39;s/mapper/.*_part/disk/by-id/scsi-mpatha-part/\u0026#39; /etc/fstab # Fix grub root-path and wrong root-partition sed -i -e \u0026#39;s/mapper/.*_part/disk/by-id/scsi-mpatha-part/\u0026#39; -e \u0026#39;s,scsi-mpatha-part2,scsi-mpatha-part3,\u0026#39; /boot/grub/menu.lst # Fix the device.map echo -e \u0026#34;(hd0)t$( ls /dev/disk/by-id/scsi-* | grep -v part )\u0026#34; \u0026gt; /boot/grub/device.map sleep 1 mkinitrd -f multipath What the script does, is 1) fix the occurances of /dev/mapper/, since this isn\u0026rsquo;t the proper way 2) create a multipathing initrd. Without the creation of the multipath-aware initrd the system will also not boot!\n","permalink":"https://christian.blog.pakiheim.de/posts/2016-06-30_ucs-blades-w-boot-from-san-and-autoyast/","summary":"\u003cp\u003eAs I wrote before about \u003ca href=\"/posts/2014-08-08_enabling-multipathing-in-autoyast-installations\" title=\"Enabling multipathing in autoyast installations\"\u003eenabling multipathing for the AutoYaST installation\u003c/a\u003e it\u0026rsquo;s about time I write this one here.\u003c/p\u003e\n\u003cp\u003eSadly AutoYaST needs a little push in the right direction (as to where to actually put the root device), so here\u0026rsquo;s part of my AutoYaST profile for such a Cisco blade:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e44\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-45\"\u003e45\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-46\"\u003e46\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-47\"\u003e47\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-48\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-48\"\u003e48\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-49\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-49\"\u003e49\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-50\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-50\"\u003e50\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-51\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-51\"\u003e51\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-52\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-52\"\u003e52\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-53\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-53\"\u003e53\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-54\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-54\"\u003e54\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eprofile\u003c/span\u003e \u003cspan class=\"n\"\u003exmlns\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;http://www.suse.com/1.0/yast2ns\u0026#34;\u003c/span\u003e \u003cspan class=\"n\"\u003exmlns\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;http://www.suse.com/1.0/configns\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003ebootloader\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003edevice_map\u003c/span\u003e \u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;list\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003edevice_map_entry\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003efirmware\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003ehd0\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003efirmware\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003elinux\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;/\u003c/span\u003e\u003cspan class=\"n\"\u003edev\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003esda\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003elinux\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003edevice_map_entry\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003edevice_map\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003ebootloader\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003epartitioning\u003c/span\u003e \u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;list\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003edrive\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003edevice\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;/\u003c/span\u003e\u003cspan class=\"n\"\u003edev\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003esda\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003edevice\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003edrive\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003epartitioning\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003escripts\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003epre\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003escripts\u003c/span\u003e \u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;list\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003escript\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003edebug\u003c/span\u003e \u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;boolean\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"bp\"\u003efalse\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003edebug\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003efeedback\u003c/span\u003e \u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;boolean\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"bp\"\u003efalse\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003efeedback\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003efilename\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eucs\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esh\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003efilename\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003einterpreter\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003eshell\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003einterpreter\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003esource\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u0026lt;!\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eCDATA\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecat\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003etmp\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eprofile\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eautoinst\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003exml\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003esed\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;s,/dev/sda,/dev/mapper/`/sbin/multipath -ll | grep dm-0 | cut -d  -f1`,\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003etmp\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eprofile\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emodified\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003exml\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]]\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003esource\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003escript\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003epre\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003escripts\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echroot\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003escripts\u003c/span\u003e \u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;list\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003escript\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echrooted\u003c/span\u003e \u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;boolean\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"bp\"\u003etrue\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003echrooted\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003edebug\u003c/span\u003e \u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;boolean\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"bp\"\u003etrue\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003edebug\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003efeedback\u003c/span\u003e \u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;boolean\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"bp\"\u003etrue\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003efeedback\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003efilename\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eucs\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003echroot\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esh\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003efilename\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003einterpreter\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003eshell\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003einterpreter\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003elocation\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003ehttp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003einstall\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ehome\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ebarfoo\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eorg\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eautoyast\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003escripts\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eucs\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003echroot\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esh\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003elocation\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003escript\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003echroot\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003escripts\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003escripts\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003esoftware\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003epackages\u003c/span\u003e \u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;list\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003epackage\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003emultipath\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003etools\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003epackage\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003epackages\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003esoftware\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"n\"\u003eprofile\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eNow, the profile addition takes care of the placement of the root-device now (simply parses \u003cem\u003emultipath -ll\u003c/em\u003e) and adjusts the pulled profile accordingly ( \u003cem\u003e/tmp/profile/modified.xml\u003c/em\u003e), which AutoYaST then re-reads.\u003c/p\u003e","title":"UCS blades w/ Boot-from-SAN and AutoYaST"},{"content":"Recently I had the issue, that my root partition (/ or slash) was a bit too small for some update. So I had to look up how to resize the root partition. Luckily with LVM/btrfs this works like a charm (if you added enough free space):\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 christian:(hans.heimdaheim.de) PWD:/ Fri Mar 11, 07:02:40 [0] \u0026gt; df -h Filesystem Size Used Avail Use% Mounted on udev 2.0G 4.0K 2.0G 1% /dev tmpfs 396M 428K 395M 1% /run /dev/dm-1 952M 789M 176M 82% / none 4.0K 0 4.0K 0% /sys/fs/cgroup none 5.0M 0 5.0M 0% /run/lock none 2.0G 0 2.0G 0% /run/shm none 100M 0 100M 0% /run/user christian:(hans.heimdaheim.de) PWD:/ Fri Mar 11, 07:02:46 [0] \u0026gt; lvextend /dev/vg0/slash -L2G Extending logical volume slash to 2.00 GiB Logical volume slash successfully resized christian:(hans.heimdaheim.de) PWD:/ Fri Mar 11, 07:04:51 [0] \u0026gt; btrfs filesystem resize max / Resize \u0026#39;/\u0026#39; of \u0026#39;max\u0026#39; christian:(hans.heimdaheim.de) PWD:/ Fri Mar 11, 07:04:55 [0] \u0026gt; df -h Filesystem Size Used Avail Use% Mounted on udev 2.0G 12K 2.0G 1% /dev tmpfs 396M 440K 395M 1% /run /dev/dm-1 2.0G 647M 1.4G 32% / none 4.0K 0 4.0K 0% /sys/fs/cgroup none 5.0M 0 5.0M 0% /run/lock none 2.0G 0 2.0G 0% /run/shm none 100M 0 100M 0% /run/user ","permalink":"https://christian.blog.pakiheim.de/posts/2016-03-11_extend-a-lvm-btrfs-partition/","summary":"\u003cp\u003eRecently I had the issue, that my root partition (/ or slash) was a bit too small for some update. So I had to look up how to resize the root partition. Luckily with LVM/btrfs this works like a charm (if you added enough free space):\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echristian:(hans.heimdaheim.de) PWD:/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFri Mar 11, 07:02:40 [0] \u0026gt; df -h\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFilesystem            Size  Used Avail Use% Mounted on\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eudev                  2.0G  4.0K  2.0G   1% /dev\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etmpfs                 396M  428K  395M   1% /run\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/dm-1             952M  789M  176M  82% /\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enone                  4.0K     0  4.0K   0% /sys/fs/cgroup\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enone                  5.0M     0  5.0M   0% /run/lock\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enone                  2.0G     0  2.0G   0% /run/shm\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enone                  100M     0  100M   0% /run/user\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echristian:(hans.heimdaheim.de) PWD:/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFri Mar 11, 07:02:46 [0] \u0026gt; lvextend /dev/vg0/slash -L2G\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  Extending logical volume slash to 2.00 GiB\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  Logical volume slash successfully resized\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echristian:(hans.heimdaheim.de) PWD:/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFri Mar 11, 07:04:51 [0] \u0026gt; btrfs filesystem resize max /\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eResize \u0026#39;/\u0026#39; of \u0026#39;max\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echristian:(hans.heimdaheim.de) PWD:/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFri Mar 11, 07:04:55 [0] \u0026gt; df -h\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFilesystem            Size  Used Avail Use% Mounted on\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eudev                  2.0G   12K  2.0G   1% /dev\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etmpfs                 396M  440K  395M   1% /run\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/dm-1             2.0G  647M  1.4G  32% /\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enone                  4.0K     0  4.0K   0% /sys/fs/cgroup\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enone                  5.0M     0  5.0M   0% /run/lock\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enone                  2.0G     0  2.0G   0% /run/shm\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enone                  100M     0  100M   0% /run/user\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Extend a LVM btrfs partition"},{"content":"Another .NET update later, an hour spent looking this up. Why is mscorsvw.exe using 25% CPU for \u0026gt;30 minutes?\nHere\u0026rsquo;s a short outliner on how to speed it up:\nThe scripts we’ve provided are a convenience for people who don’t want to deal with a command prompt. If you prefer to use the command prompt, you can use the commands below instead. These commands depend on the version of the .NET Framework you have installed and the version of Windows that you have and whether it’s 32-bit or 64-bit.\n.NET 4, 4.5, or 4.5.1 Preview on Windows 7 or earlier:c:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\ngen.exe executeQueuedItems\nOn a 64-bit operating system, add:\nc:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\ngen.exe executeQueuedItems\n.NET 4, 4.5, or 4.5.1 Preview on Windows 8 or 8.1 Preview:c:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\ngen.exe executeQueuedItems schTasks /run /Tn \u0026ldquo;\\Microsoft\\Windows\\.NET Framework\\.NET Framework NGEN v4.0.30319\u0026rdquo;\nOn a 64-bit operating system, add:\nc:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\ngen.exe executeQueuedItems schTasks /run /Tn \u0026ldquo;\\Microsoft\\Windows\\.NET Framework\\.NET Framework NGEN v4.0.30319 64\u0026rdquo;\nIf you don’t have .NET 4 or later installed, but you do have .NET 2.0 or 3.5, use this command instead:c:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\ngen.exe executeQueuedItems\nOn a 64-bit operating system, add:\nc:\\Windows\\Microsoft.NET\\Framework64\\v2.0.50727\\ngen.exe executeQueuedItems\nThese commands assume that Windows is installed on the C drive. If that’s not the case, you can change the drive letter, or use the %windir% environment variable (ex: %windir%\\Microsoft.NET\\Framework\\v4.0.30319\\ngen.exe executeQueuedItems)\n","permalink":"https://christian.blog.pakiheim.de/posts/2015-09-01_windows-mscorsvw-exe-high-cpu-usage/","summary":"\u003cp\u003eAnother .NET update later, an hour spent looking this up. \u003ca href=\"http://blogs.msdn.com/b/dotnet/archive/2013/08/06/wondering-why-mscorsvw-exe-has-high-cpu-usage-you-can-speed-it-up.aspx\"\u003eWhy is mscorsvw.exe using 25% CPU for \u0026gt;30 minutes?\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eHere\u0026rsquo;s a short outliner on how to speed it up:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe scripts we’ve provided are a convenience for people who don’t want to deal with a command prompt. If you prefer to use the command prompt, you can use the commands below instead. These commands depend on the version of the .NET Framework you have installed and the version of Windows that you have and whether it’s 32-bit or 64-bit.\u003c/p\u003e","title":"Windows *: mscorsvw-exe high CPU usage"},{"content":"Well, I\u0026rsquo;ve been tinkering with NGINX for a while at home, up till now I had a somewhat working reverse proxy setup (to access my stuff, when I\u0026rsquo;m not at home or away).\nWhat didn\u0026rsquo;t work so far was the DSM web interface. Basically, because the interface is using absolute paths in some CSS/JS includes, which fuck up the whole interface.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 \u0026lt;link rel=\u0026#34;stylesheet\u0026#34; type=\u0026#34;text/css\u0026#34; href=\u0026#34;/scripts/ext-3/resources/css/ext-all.css?v=3211\u0026#34; /\u0026gt; \u0026lt;link rel=\u0026#34;stylesheet\u0026#34; type=\u0026#34;text/css\u0026#34; href=\u0026#34;/scripts/ext-3/resources/css/xtheme-gray.css?v=3211\u0026#34; /\u0026gt; \u0026lt;link rel=\u0026#34;stylesheet\u0026#34; type=\u0026#34;text/css\u0026#34; href=\u0026#34;/scripts/ext-3/ux/ux-all.css?v=3211\u0026#34; /\u0026gt; \u0026lt;link rel=\u0026#34;stylesheet\u0026#34; type=\u0026#34;text/css\u0026#34; href=\u0026#34;resources/css/desktop.css?v=3211\u0026#34; /\u0026gt; \u0026lt;link rel=\u0026#34;stylesheet\u0026#34; type=\u0026#34;text/css\u0026#34; href=\u0026#34;resources/css/flexcrollstyles.css?v=3211\u0026#34; /\u0026gt; ... \u0026lt;script type=\u0026#34;text/javascript\u0026#34; src=\u0026#34;/scripts/uistrings.cgi?lang=enu\u0026amp;v=3211\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script type=\u0026#34;text/javascript\u0026#34; src=\u0026#34;/webfm/webUI/uistrings.cgi?lang=enu\u0026amp;v=3211\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script type=\u0026#34;text/javascript\u0026#34; src=\u0026#34;uistrings.cgi?lang=enu\u0026amp;v=3211\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script type=\u0026#34;text/javascript\u0026#34; src=\u0026#34;/scripts/prototype-1.6.1/prototype.js?v=3211\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script type=\u0026#34;text/javascript\u0026#34; src=\u0026#34;/scripts/ext-3/adapter/ext/ext-base.js?v=3211\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script type=\u0026#34;text/javascript\u0026#34; src=\u0026#34;/scripts/ext-3/ext-all.js?v=3211\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script type=\u0026#34;text/javascript\u0026#34; src=\u0026#34;/scripts/ext-3/ux/ux-all.js?v=3211\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script type=\u0026#34;text/javascript\u0026#34; src=\u0026#34;/scripts/scrollbar/flexcroll.js?v=3211\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; After some googling and looking through the NGINX documentation I thought \u0026ldquo;Why don\u0026rsquo;t I create a vHost for each application that is being served by the reverse proxy?\u0026rdquo;.\nAnd after looking further into the documentation, out came this simple reverse proxy statement:\n1 2 3 4 5 6 7 8 9 10 11 12 13 server { listen 80; server_name syno.heimdaheim.de; location / { proxy_pass http://172.31.76.50:5000/; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_redirect http://172.31.76.50:5000/ http://$host:$server_port/; proxy_buffering off; auth_basic \u0026#34;Restricted\u0026#34;; auth_basic_user_file /etc/nginx/htpasswd; } } And as you can see, it works:\nSynology DSM via NGINX\n","permalink":"https://christian.blog.pakiheim.de/posts/2015-08-05_nginx-reverse-proxy-for-synology-diskstation/","summary":"\u003cp\u003eWell, I\u0026rsquo;ve been tinkering with NGINX for a while at home, up till now I had a somewhat working reverse proxy setup (to access my stuff, when I\u0026rsquo;m not at home or away).\u003c/p\u003e\n\u003cp\u003eWhat didn\u0026rsquo;t work so far was the DSM web interface. Basically, because the interface is using absolute paths in some CSS/JS includes, which fuck up the whole interface.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-xhtml\" data-lang=\"xhtml\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003elink\u003c/span\u003e \u003cspan class=\"na\"\u003erel\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;stylesheet\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;text/css\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003ehref\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/scripts/ext-3/resources/css/ext-all.css?v=3211\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003elink\u003c/span\u003e \u003cspan class=\"na\"\u003erel\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;stylesheet\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;text/css\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003ehref\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/scripts/ext-3/resources/css/xtheme-gray.css?v=3211\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003elink\u003c/span\u003e \u003cspan class=\"na\"\u003erel\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;stylesheet\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;text/css\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003ehref\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/scripts/ext-3/ux/ux-all.css?v=3211\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003elink\u003c/span\u003e \u003cspan class=\"na\"\u003erel\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;stylesheet\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;text/css\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003ehref\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;resources/css/desktop.css?v=3211\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003elink\u003c/span\u003e \u003cspan class=\"na\"\u003erel\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;stylesheet\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;text/css\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003ehref\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;resources/css/flexcrollstyles.css?v=3211\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;text/javascript\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/scripts/uistrings.cgi?lang=enu\u0026amp;v=3211\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;text/javascript\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/webfm/webUI/uistrings.cgi?lang=enu\u0026amp;v=3211\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;text/javascript\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;uistrings.cgi?lang=enu\u0026amp;v=3211\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;text/javascript\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/scripts/prototype-1.6.1/prototype.js?v=3211\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;text/javascript\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/scripts/ext-3/adapter/ext/ext-base.js?v=3211\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;text/javascript\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/scripts/ext-3/ext-all.js?v=3211\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;text/javascript\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/scripts/ext-3/ux/ux-all.js?v=3211\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;text/javascript\u0026#34;\u003c/span\u003e \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;/scripts/scrollbar/flexcroll.js?v=3211\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAfter some googling and looking through the NGINX documentation I thought \u0026ldquo;Why don\u0026rsquo;t I create a vHost for each application that is being served by the reverse proxy?\u0026rdquo;.\u003c/p\u003e","title":"NGINX reverse proxy for Synology DiskStation"},{"content":"As I said in the previous posts, I\u0026rsquo;ve reorganized my music library. That included creating sub directories based on the first letter of the artists name (say for example AC/DC would be sorted into the folder A, Iron Maiden would be sorted into I).\nSo here\u0026rsquo;s the file name pattern, that I\u0026rsquo;ve used to accomplish this:\n1 $left(%album artist%,1)\\%album artist% - [%date% - ]%album%\\$num(%discnumber%,1)%tracknumber%. %title% ","permalink":"https://christian.blog.pakiheim.de/posts/2015-07-02_foobar2000-file-operations-setup/","summary":"\u003cp\u003eAs I said in the previous posts, I\u0026rsquo;ve reorganized my music library. That included creating sub directories based on the first letter of the artists name (say for example AC/DC would be sorted into the folder A, Iron Maiden would be sorted into I).\u003c/p\u003e\n\u003cp\u003eSo here\u0026rsquo;s the file name pattern, that I\u0026rsquo;ve used to accomplish this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$left(%album artist%,1)\\%album artist% - [%date% - ]%album%\\$num(%discnumber%,1)%tracknumber%. %title%\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"foobar2000 File Operations Setup"},{"content":"Well, compared to the previous script, this one is a short one. It\u0026rsquo;ll find all Matroska containers lacking a corresponding thumbnail (-thumb.jpg or .tbn) file.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #!/opt/bin/bash # Find all episodes/movies missing a thumb file MKV=\u0026#34;$( find . -name \u0026#34;*.mkv\u0026#34; | sed \u0026#34;s,./,,\u0026#34; | sort )\u0026#34; echo \u0026#34;These videos are missing a thumbnail file:\u0026#34; echo \u0026#34;\u0026#34; for mkv in $MKV; do basename=\u0026#34;${mkv%.*}\u0026#34; # Check if there is a \u0026lt;xbmc11 thumbnail file if [ -f \u0026#34;$basename.tbn\u0026#34; ] ; then : elif [ -f \u0026#34;$basename-thumb.jpg\u0026#34; ] ; then : else echo \u0026#34; - $basename.mkv\u0026#34; fi done echo ","permalink":"https://christian.blog.pakiheim.de/posts/2015-04-06_kodi-shell-script-find-videos-missing-a-thumbnail/","summary":"\u003cp\u003eWell, compared to the previous script, this one is a short one. It\u0026rsquo;ll find all Matroska containers lacking a corresponding thumbnail (-thumb.jpg or .tbn) file.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/opt/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Find all episodes/movies missing a thumb file\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eMKV\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e find . -name \u003cspan class=\"s2\"\u003e\u0026#34;*.mkv\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s2\"\u003e\u0026#34;s,./,,\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sort \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;These videos are missing a thumbnail file:\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e mkv in \u003cspan class=\"nv\"\u003e$MKV\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003ebasename\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003emkv\u003c/span\u003e\u003cspan class=\"p\"\u003e%.*\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Check if there is a \u0026lt;xbmc11 thumbnail file\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -f \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$basename\u003c/span\u003e\u003cspan class=\"s2\"\u003e.tbn\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                :\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eelif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -f \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$basename\u003c/span\u003e\u003cspan class=\"s2\"\u003e-thumb.jpg\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                :\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;  - \u003c/span\u003e\u003cspan class=\"nv\"\u003e$basename\u003c/span\u003e\u003cspan class=\"s2\"\u003e.mkv\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Kodi Shell Script: Find videos missing a thumbnail"},{"content":"Well, I use SickBeard. And sometimes (very often actually) the names are rather screwed up\u0026hellip;. So I wrote myself a script, that\u0026rsquo;ll fix most episode errors (I\u0026rsquo;ve caught so far \u0026hellip;).\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 #!/opt/bin/bash OPTS=\u0026#34;$@\u0026#34; [ \u0026#34;$( cat /etc/distribution 2\u0026gt;/dev/null )\u0026#34; == \u0026#34;OpenELEC\u0026#34; ] \u0026amp;\u0026amp; openelec=1 || openelec=0 [ \u0026#34;$( mount | /opt/bin/grep \u0026#34;$( echo $PWD | /opt/bin/sed \u0026#34;s,/tvshows,,\u0026#34; )\u0026#34; | awk \u0026#39;{ print $5 }\u0026#39; )\u0026#34; == \u0026#34;cifs\u0026#34; ] \u0026amp;\u0026amp; cifs=1 || cifs=0 if [ $openelec -eq 0 -a $cifs -eq 0 ] ; then # Fix permissions chown -R nobody.users \u0026#34;$PWD\u0026#34; /opt/bin/findutils-find \u0026#34;$PWD\u0026#34; -type f ! -perm 0664 -exec chmod 0664 {} \\; /opt/bin/findutils-find \u0026#34;$PWD\u0026#34; -type d ! -perm 0775 -exec chmod 0775 {} \\; fi EXTENSIONS=\u0026#34;.avi .mp4 .mkv .srt .tbn .nfo .xml -thumb.jpg\u0026#34; # Needs renaming: PATTERN=\u0026#34;WEB.DL,WEB-DL Web-Dl,WEB-DL AVC.AC3,DD5.1.H.264 .AC3.PSIV,-PSIV DD.5.1,DD5.1 DD5-1,DD5.1 Dd5.1,DD5.1 DD.2.0,DD2.0 WEB-DLAAC2,WEB-DL.AAC2 H.264.DD5.1,DD5.1.H.264 AAC.2.0,AAC2.0 DD5.1.AAC2.0,DD5.1 WEB-DL-pcsyndicate,WEB-DL.DD5.1.H.264-pcsyndicate x264,H.264 X264,H.264 h264,H.264 H264,H.264 Forever.S0,Forever.2014.S0 H-264,H.264 h.264,H.264 DD5.1-H.264,DD5.1.H.264 .KiNGS,-KiNGS -KINGS,-KiNGS .TB,-TB .BS,-BS .~DG2~, .~DG~, .CtrlHD,-CtrlHD 1x,S01E .ECI,-ECI .NFHD,-NFHD .POD,-POD \\.NTb,\\-NTb .DNR,-DNR .pcsyndicate,-pcsyndicate German.DD20.Synced.DL.720p.iTunesHD.AVC,720p.WEB-DL.DD2.0.DL.H.264 -ss,-SS .Reaperza,-Reaperza Grey\u0026#39;s.Anatomy,Greys.Anatomy Five-0,Five.0 Hawaii.Five.0.2010\\.S0,Hawaii.Five.0.S0 WEBRip,WEB-DL WEB-DL.H.264.AAC2.0,WEB-DL.AAC2.0.H.264 Hell.On.Wheels,Hell.on.Wheels Mythbusters,MythBusters Dont.Trust.The.B----.In.Apartment.23,Dont.Trust.The.B.In.Apartment.23 Dont.Trust.the.Bitch.in.Apartment.23,Dont.Trust.The.B.In.Apartment.23 Dont.Trust.the.B.in.Apartment.23,Dont.Trust.The.B.In.Apartment.23 Rizzoli.\u0026amp;.Isles,Rizzoli.and.Isles Revolution.2012,Revolution Orange.Is.The.New.Black,Orange.Is.the.New.Black Castle.S,Castle.2009.S /Agents.of.S.H.I.E.L.D.,/Marvels.Agents.Of.S.H.I.E.L.D. Marvel.Agents.Of.SHIELD,Marvels.Agents.Of.S.H.I.E.L.D. Marvel.Agents.Of.S.H.I.E.L.D..S,Marvels.Agents.Of.S.H.I.E.L.D.S Marvel.Agents.Of.S.H.I.E.L.D.S,Marvels.Agents.Of.S.H.I.E.L.D.S Marvels.Agents.Of.S.H.I.E.L.D..S,Marvels.Agents.Of.S.H.I.E.L.D.S Marvels.Agents.of.S.H.I.E.L.D.,Marvels.Agents.Of.S.H.I.E.L.D. Rizzoli.Isles,Rizzoli.and.Isles The.Bridge.S,The.Bridge.US.S Last.Man.Standing.US,Last.Man.Standing.2011 The.Americans.S,The.Americans.2013.S Person.Of.Interest,Person.of.Interest The.Tomorrow.People.S0,The.Tomorrow.People.US.S0 The.Code.AU,The.Code.2014 How.to.Get.Away.With.Murder,How.To.Get.Away.With.Murder How.to.Get.Away.with.Murder,How.To.Get.Away.With.Murder How.To.Get.Away.with.Murder,How.To.Get.Away.With.Murder Izombie,iZombie -SiCKBEARD,.720p.WEB-DL.DD5.1.H.264 DL.DD5.1.WEB-DL,WEB-DL.DD5.1.DL XIII.The.Series.2011,XIII.2011\u0026#34; FILEEXT=\u0026#34;\\\\.nfo\\\\. \\\\.par2\\\\.\u0026#34; # Find files containing spaces and rename them according to the scene rules for ext in $EXTENSIONS; do [ \u0026#34;$ext\u0026#34; != \u0026#34;.srt\u0026#34; ] \u0026amp;\u0026amp; \\ /opt/bin/find . -name \u0026#34;* *$ext\u0026#34; -type f -exec sh -c \u0026#39; fp=\u0026#34;${0%/*}\u0026#34; fn=\u0026#34;${0##*/}\u0026#34; fn=\u0026#34;$( echo $fn | /opt/bin/sed -e \u0026#34;s,\\!,,\u0026#34; )\u0026#34; fn=\u0026#34;$( echo $fn | /opt/bin/egrep -oi \u0026#34;[A-Z][A-Za-z0-9.-]+.$ext\u0026#34; | sort -u | tail -n1 )\u0026#34; echo \u0026#34;Enforcing naming scheme for $0\u0026#34; mv \u0026#34;$0\u0026#34; \u0026#34;$fp/$fn\u0026#34; read -t 1 line \u0026lt;/dev/tty \u0026#39; {} \u0026#39;;\u0026#39; done # Build the list of replacements. Do it here, since we need to # do it only once, and not for each file. for pat in $PATTERN; do set -- `echo $pat | tr , \\ ` REN=\u0026#34;$REN -e \u0026#34;\u0026#34;s,$1,$2,g\u0026#34;\u0026#34;\u0026#34; done for pat in $FILEEXT; do REN=\u0026#34;$REN -e \u0026#34;\u0026#34;s,${pat},,g\u0026#34;\u0026#34;\u0026#34; done REN=\u0026#34;$REN -e \u0026#34;\u0026#34;s/[()]//g\u0026#34;\u0026#34;\u0026#34; # Main loop starts here. Only handle files with the specified extensions. for ext in $EXTENSIONS; do REGEX=\u0026#34;$REGEX|$ext\u0026#34; done REGEX=\u0026#34;$( echo $REGEX | sed \u0026#34;s,|,,\u0026#34; )\u0026#34; MAIN_REN=$REN for file in $( /opt/bin/find . -regextype posix-egrep -type f -regex \u0026#34;.*($REGEX)\u0026#34; ! -wholename \u0026#39;*tvshow*\u0026#39; ! -wholename \u0026#39;*season*\u0026#39; ! -wholename \u0026#39;*actors\u0026#39; | sort ); do OLD=\u0026#34;$file\u0026#34; NEW=\u0026#34;$file\u0026#34; REN=\u0026#34;$MAIN_REN\u0026#34; if [ \u0026#34;$( echo $file | /opt/bin/egrep \u0026#34;\\.(REPACK|REREPACK|PROPER|iNTERNAL|RERIP|REAL)\\.\u0026#34; )\u0026#34; == \u0026#34;\u0026#34; ] ; then if [ \u0026#34;$( echo $file | /opt/bin/grep \u0026#34;720p\u0026#34; )\u0026#34; != \u0026#34;\u0026#34; ] ; then REN=\u0026#34;$REN -e \u0026#34;\u0026#34;s/\\(.*S[0-9]\\+\\(E[0-9]\\+\\)\\+\\)\\+.*\\(720p.*\\)/\\1.\\3/\u0026#34;\u0026#34;\u0026#34; fi if [ \u0026#34;$( echo $file | /opt/bin/grep \u0026#34;1080p\u0026#34; )\u0026#34; != \u0026#34;\u0026#34; ] ; then REN=\u0026#34;$REN -e \u0026#34;\u0026#34;s/\\(.*S[0-9]\\+\\(E[0-9]\\+\\)\\+\\)\\+.*\\(1080p.*\\)/\\1.\\3/\u0026#34;\u0026#34;\u0026#34; fi fi NEW=\u0026#34;$( echo $OLD | /opt/bin/sed $REN )\u0026#34; if [ ! -z \u0026#34;$NEW\u0026#34; -a \u0026#34;$NEW\u0026#34; != \u0026#34;$OLD\u0026#34; ] ; then echo \u0026#34;Enforcing naming scheme for $file\u0026#34; mv \u0026#34;$OLD\u0026#34; \u0026#34;$NEW\u0026#34; fi done [ \u0026#34;$OPTS\u0026#34; = \u0026#34;--force\u0026#34; ] \u0026amp;\u0026amp; RESCAN_ALL=1 || RESCAN_ALL=0 IFS=\u0026#34; \u0026#34; if [ $RESCAN_ALL -eq 1 ] ; then FILES=\u0026#34;`/opt/bin/grep -rl \u0026#39;episodedetails\u0026#39; */*/*.nfo 2\u0026gt;/dev/null`\u0026#34; else # Get a list of all NFO files having incorrect information FILES=\u0026#34;`/opt/bin/egrep -rli \u0026#39;(\\(Guest Star\\)|\\(Writer\\))\u0026#39; */*/*.nfo 2\u0026gt;/dev/null`\u0026#34; fi for episode in $FILES; do # First convert the nfo-file to use linux line-breaks. /opt/bin/sed -i \u0026#39;s/^M$//\u0026#39; $episode if [ \u0026#34;$( /opt/bin/grep \u0026#39;\u0026lt;director\u0026gt;.*\u0026lt;/director\u0026gt;\u0026#39; $episode )\u0026#34; == \u0026#34;\u0026#34; ] ; then DIRECTOR_MISSING=\u0026#34;$DIRECTOR_MISSING $episode\u0026#34; fi if [ \u0026#34;$( /opt/bin/grep \u0026#39;\u0026lt;credits\u0026gt;.*\u0026lt;/credits\u0026gt;\u0026#39; $episode )\u0026#34; == \u0026#34;\u0026#34; ]; then CREDITS_MISSING=\u0026#34;$CREDITS_MISSING $episode\u0026#34; fi if [ \u0026#34;$( /opt/bin/grep \u0026#39;\u0026lt;credits\u0026gt;.*\\(Writer\\).*\u0026lt;/credits\u0026gt;\u0026#39; $episode )\u0026#34; == \u0026#34;\u0026#34; ]; then WRITER_MISSING=\u0026#34;$WRITER_MISSING $episode\u0026#34; fi if [ \u0026#34;$( /opt/bin/grep \u0026#39;\u0026lt;credits\u0026gt;.*\\\u0026amp;amp;.*\u0026lt;/credits\u0026gt;\u0026#39; $episode )\u0026#34; != \u0026#34;\u0026#34; ]; then CREDITS_JUNK=\u0026#34;$CREDITS_JUNK $episode\u0026#34; else # see if the file has new-style (multi-line) or old-style (single-line) credits. if [ \u0026#34;$( /opt/bin/grep \u0026#39;\u0026lt;credits\u0026gt;\u0026#39; $episode | wc -l )\u0026#34; -gt 1 ] ; then echo \u0026#34;Updating episode information in $episode (new-style)\u0026#34; mv $episode $episode.old /opt/bin/grep -v \u0026#34;(Guest Star)\u0026lt;/credits\u0026gt;\u0026#34; $episode.old | /opt/bin/sed \\ -e \u0026#34;s, (Writer),,g\u0026#34; -e -e \u0026#34;s,|, / ,g\u0026#34; \\ -e \u0026#34;s, , ,g\u0026#34; -e \u0026#39;s/^[ \\t]*//\u0026#39; | \\ tee $episode \u0026amp;\u0026gt;/dev/null else # Mangle the list, so we can work with it old_credits=\u0026#34;$( /opt/bin/grep \u0026#34;\u0026lt;credits\u0026gt;\u0026#34; $episode | /opt/bin/sed -n \\ -e \u0026#39;s/.*\u0026lt;credits\u0026gt;\\(.*\\)\u0026lt;\\/credits\u0026gt;.*/\\1/p\u0026#39; )\u0026#34; # Fixup the credits line new_credits=\u0026#34;$( echo $old_credits | tr \u0026#39;/\u0026#39; \u0026#39;\\n\u0026#39; | /opt/bin/grep -v \u0026#34;Guest Star\u0026#34; | \\ tr \u0026#39;\\n\u0026#39; \u0026#39;/\u0026#39; | /opt/bin/sed -e \u0026#34;s, (Writer),,g\u0026#34; \\ -e \u0026#34;s,|, / ,g\u0026#34; -e \u0026#34;s, , ,g\u0026#34; | /opt/bin/sed -e \u0026#39;s/^[ \\t]*//\u0026#39; \\ -e \u0026#34;s/\\/*$//\u0026#34; )\u0026#34; shopt -q -s extglob echo \u0026#34;Updating episode information in $episode (old-style)\u0026#34; if [ -n \u0026#34;$new_credits\u0026#34; ] ; then /opt/bin/sed -i \u0026#34;s|${old_credits##+([[:space:]])}|$new_credits|g\u0026#34; $episode fi shopt -q -u extglob fi fi done IFS=\u0026#34; \u0026#34; if [ -n \u0026#34;$DIRECTOR_MISSING\u0026#34; ] ; then echo \u0026#34;The following episodes are missing a director:\u0026#34; for episode in $DIRECTOR_MISSING; do echo \u0026#34; $episode\u0026#34; done echo fi if [ -n \u0026#34;$CREDITS_JUNK\u0026#34; ] ; then echo \u0026#34;The following episodes credits\u0026#39; contain junk and should be fixed at thetvdb.com:\u0026#34; for episode in $CREDITS_JUNK; do echo \u0026#34; $episode\u0026#34; done echo fi if [ -n \u0026#34;$CREDITS_MISSING\u0026#34; ] ; then echo \u0026#34;The following episodes are missing credits:\u0026#34; for episode in $CREDITS_MISSING; do echo \u0026#34; $episode\u0026#34; done echo fi if [ -n \u0026#34;$WRITER_MISSING\u0026#34; ] ; then echo \u0026#34;The following episodes are missing a writer:\u0026#34; for episode in $WRITER_MISSING; do echo \u0026#34; $episode\u0026#34; done fi /opt/bin/findutils-find . -name \u0026#34;*.old\u0026#34; -exec rm {} \\; Bear in mind, this script is using ipkg/optware executables, mainly because the provided BusyBox ones are lacking some features.\n","permalink":"https://christian.blog.pakiheim.de/posts/2015-04-06_sickbeard-shell-script-fix-tv-episodes-name/","summary":"\u003cp\u003eWell, I use SickBeard. And sometimes (very often actually) the names are rather screwed up\u0026hellip;. So I wrote myself a script, that\u0026rsquo;ll fix most episode errors (I\u0026rsquo;ve caught so far \u0026hellip;).\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e  1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e  2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e  3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e  4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e  5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e  6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e  7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e  8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e  9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e 10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e 11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e 12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e 13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e 14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e 15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e 16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e 17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e 18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e 19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e 20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e 21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e 22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e 23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e 24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e 25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e 26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e 27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e 28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e 29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e 30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e 31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e 32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e 33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e 34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e 35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e 36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e 37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e 38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e 39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e 40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e 41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e 42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e 43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e 44\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-45\"\u003e 45\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-46\"\u003e 46\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-47\"\u003e 47\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-48\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-48\"\u003e 48\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-49\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-49\"\u003e 49\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-50\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-50\"\u003e 50\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-51\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-51\"\u003e 51\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-52\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-52\"\u003e 52\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-53\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-53\"\u003e 53\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-54\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-54\"\u003e 54\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-55\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-55\"\u003e 55\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-56\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-56\"\u003e 56\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-57\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-57\"\u003e 57\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-58\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-58\"\u003e 58\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-59\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-59\"\u003e 59\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-60\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-60\"\u003e 60\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-61\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-61\"\u003e 61\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-62\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-62\"\u003e 62\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-63\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-63\"\u003e 63\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-64\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-64\"\u003e 64\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-65\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-65\"\u003e 65\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-66\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-66\"\u003e 66\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-67\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-67\"\u003e 67\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-68\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-68\"\u003e 68\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-69\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-69\"\u003e 69\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-70\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-70\"\u003e 70\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-71\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-71\"\u003e 71\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-72\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-72\"\u003e 72\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-73\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-73\"\u003e 73\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-74\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-74\"\u003e 74\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-75\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-75\"\u003e 75\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-76\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-76\"\u003e 76\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-77\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-77\"\u003e 77\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-78\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-78\"\u003e 78\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-79\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-79\"\u003e 79\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-80\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-80\"\u003e 80\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-81\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-81\"\u003e 81\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-82\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-82\"\u003e 82\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-83\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-83\"\u003e 83\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-84\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-84\"\u003e 84\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-85\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-85\"\u003e 85\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-86\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-86\"\u003e 86\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-87\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-87\"\u003e 87\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-88\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-88\"\u003e 88\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-89\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-89\"\u003e 89\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-90\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-90\"\u003e 90\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-91\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-91\"\u003e 91\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-92\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-92\"\u003e 92\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-93\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-93\"\u003e 93\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-94\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-94\"\u003e 94\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-95\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-95\"\u003e 95\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-96\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-96\"\u003e 96\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-97\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-97\"\u003e 97\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-98\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-98\"\u003e 98\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-99\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-99\"\u003e 99\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-100\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-100\"\u003e100\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-101\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-101\"\u003e101\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-102\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-102\"\u003e102\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-103\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-103\"\u003e103\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-104\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-104\"\u003e104\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-105\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-105\"\u003e105\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-106\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-106\"\u003e106\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-107\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-107\"\u003e107\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-108\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-108\"\u003e108\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-109\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-109\"\u003e109\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-110\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-110\"\u003e110\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-111\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-111\"\u003e111\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-112\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-112\"\u003e112\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-113\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-113\"\u003e113\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-114\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-114\"\u003e114\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-115\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-115\"\u003e115\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-116\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-116\"\u003e116\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-117\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-117\"\u003e117\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-118\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-118\"\u003e118\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-119\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-119\"\u003e119\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-120\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-120\"\u003e120\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-121\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-121\"\u003e121\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-122\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-122\"\u003e122\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-123\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-123\"\u003e123\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-124\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-124\"\u003e124\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-125\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-125\"\u003e125\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-126\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-126\"\u003e126\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-127\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-127\"\u003e127\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-128\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-128\"\u003e128\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-129\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-129\"\u003e129\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-130\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-130\"\u003e130\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-131\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-131\"\u003e131\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-132\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-132\"\u003e132\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-133\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-133\"\u003e133\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-134\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-134\"\u003e134\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-135\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-135\"\u003e135\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-136\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-136\"\u003e136\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-137\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-137\"\u003e137\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-138\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-138\"\u003e138\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-139\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-139\"\u003e139\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-140\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-140\"\u003e140\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-141\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-141\"\u003e141\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-142\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-142\"\u003e142\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-143\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-143\"\u003e143\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-144\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-144\"\u003e144\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-145\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-145\"\u003e145\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-146\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-146\"\u003e146\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-147\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-147\"\u003e147\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-148\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-148\"\u003e148\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-149\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-149\"\u003e149\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-150\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-150\"\u003e150\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-151\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-151\"\u003e151\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-152\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-152\"\u003e152\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-153\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-153\"\u003e153\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-154\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-154\"\u003e154\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-155\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-155\"\u003e155\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-156\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-156\"\u003e156\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-157\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-157\"\u003e157\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-158\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-158\"\u003e158\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-159\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-159\"\u003e159\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-160\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-160\"\u003e160\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-161\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-161\"\u003e161\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-162\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-162\"\u003e162\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-163\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-163\"\u003e163\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-164\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-164\"\u003e164\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-165\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-165\"\u003e165\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-166\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-166\"\u003e166\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-167\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-167\"\u003e167\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-168\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-168\"\u003e168\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-169\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-169\"\u003e169\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-170\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-170\"\u003e170\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-171\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-171\"\u003e171\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-172\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-172\"\u003e172\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-173\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-173\"\u003e173\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-174\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-174\"\u003e174\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-175\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-175\"\u003e175\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-176\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-176\"\u003e176\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-177\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-177\"\u003e177\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-178\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-178\"\u003e178\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-179\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-179\"\u003e179\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-180\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-180\"\u003e180\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-181\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-181\"\u003e181\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-182\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-182\"\u003e182\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-183\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-183\"\u003e183\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-184\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-184\"\u003e184\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-185\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-185\"\u003e185\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-186\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-186\"\u003e186\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-187\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-187\"\u003e187\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-188\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-188\"\u003e188\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-189\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-189\"\u003e189\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-190\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-190\"\u003e190\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-191\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-191\"\u003e191\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-192\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-192\"\u003e192\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-193\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-193\"\u003e193\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-194\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-194\"\u003e194\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-195\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-195\"\u003e195\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-196\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-196\"\u003e196\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-197\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-197\"\u003e197\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-198\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-198\"\u003e198\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-199\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-199\"\u003e199\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-200\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-200\"\u003e200\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-201\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-201\"\u003e201\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-202\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-202\"\u003e202\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-203\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-203\"\u003e203\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-204\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-204\"\u003e204\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-205\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-205\"\u003e205\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-206\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-206\"\u003e206\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-207\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-207\"\u003e207\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-208\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-208\"\u003e208\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-209\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-209\"\u003e209\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-210\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-210\"\u003e210\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-211\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-211\"\u003e211\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-212\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-212\"\u003e212\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-213\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-213\"\u003e213\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-214\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-214\"\u003e214\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-215\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-215\"\u003e215\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-216\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-216\"\u003e216\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-217\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-217\"\u003e217\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-218\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-218\"\u003e218\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-219\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-219\"\u003e219\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-220\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-220\"\u003e220\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-221\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-221\"\u003e221\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-222\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-222\"\u003e222\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-223\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-223\"\u003e223\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-224\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-224\"\u003e224\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-225\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-225\"\u003e225\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-226\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-226\"\u003e226\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-227\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-227\"\u003e227\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-228\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-228\"\u003e228\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-229\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-229\"\u003e229\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-230\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-230\"\u003e230\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-231\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-231\"\u003e231\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-232\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-232\"\u003e232\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-233\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-233\"\u003e233\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-234\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-234\"\u003e234\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-235\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-235\"\u003e235\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-236\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-236\"\u003e236\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-237\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-237\"\u003e237\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-238\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-238\"\u003e238\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-239\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-239\"\u003e239\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-240\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-240\"\u003e240\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-241\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-241\"\u003e241\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-242\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-242\"\u003e242\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-243\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-243\"\u003e243\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-244\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-244\"\u003e244\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-245\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-245\"\u003e245\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/opt/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eOPTS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$@\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e cat /etc/distribution 2\u0026gt;/dev/null \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;OpenELEC\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"nv\"\u003eopenelec\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"nv\"\u003eopenelec\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e mount \u003cspan class=\"p\"\u003e|\u003c/span\u003e /opt/bin/grep \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$PWD\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e /opt/bin/sed \u003cspan class=\"s2\"\u003e\u0026#34;s,/tvshows,,\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $5 }\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;cifs\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"nv\"\u003ecifs\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"nv\"\u003ecifs\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$openelec\u003c/span\u003e -eq \u003cspan class=\"m\"\u003e0\u003c/span\u003e -a \u003cspan class=\"nv\"\u003e$cifs\u003c/span\u003e -eq \u003cspan class=\"m\"\u003e0\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Fix permissions\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        chown -R nobody.users \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PWD\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        /opt/bin/findutils-find \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PWD\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e -type f ! -perm \u003cspan class=\"m\"\u003e0664\u003c/span\u003e -exec chmod \u003cspan class=\"m\"\u003e0664\u003c/span\u003e \u003cspan class=\"o\"\u003e{}\u003c/span\u003e \u003cspan class=\"se\"\u003e\\;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        /opt/bin/findutils-find \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PWD\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e -type d ! -perm \u003cspan class=\"m\"\u003e0775\u003c/span\u003e -exec chmod \u003cspan class=\"m\"\u003e0775\u003c/span\u003e \u003cspan class=\"o\"\u003e{}\u003c/span\u003e \u003cspan class=\"se\"\u003e\\;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eEXTENSIONS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;.avi .mp4 .mkv .srt .tbn .nfo .xml -thumb.jpg\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Needs renaming:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ePATTERN\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;WEB.DL,WEB-DL\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eWeb-Dl,WEB-DL\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eAVC.AC3,DD5.1.H.264\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e.AC3.PSIV,-PSIV\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eDD.5.1,DD5.1\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eDD5-1,DD5.1\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eDd5.1,DD5.1\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eDD.2.0,DD2.0\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eWEB-DLAAC2,WEB-DL.AAC2\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eH.264.DD5.1,DD5.1.H.264\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eAAC.2.0,AAC2.0\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eDD5.1.AAC2.0,DD5.1\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eWEB-DL-pcsyndicate,WEB-DL.DD5.1.H.264-pcsyndicate\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003ex264,H.264\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eX264,H.264\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eh264,H.264\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eH264,H.264\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eForever.S0,Forever.2014.S0\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eH-264,H.264\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eh.264,H.264\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eDD5.1-H.264,DD5.1.H.264\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e.KiNGS,-KiNGS\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e-KINGS,-KiNGS\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e.TB,-TB\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e.BS,-BS\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e.~DG2~,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e.~DG~,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e.CtrlHD,-CtrlHD\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e1x,S01E\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e.ECI,-ECI\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e.NFHD,-NFHD\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e.POD,-POD\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\\.NTb,\\-NTb\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e.DNR,-DNR\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e.pcsyndicate,-pcsyndicate\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eGerman.DD20.Synced.DL.720p.iTunesHD.AVC,720p.WEB-DL.DD2.0.DL.H.264\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e-ss,-SS\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e.Reaperza,-Reaperza\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eGrey\u0026#39;s.Anatomy,Greys.Anatomy\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eFive-0,Five.0\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eHawaii.Five.0.2010\\.S0,Hawaii.Five.0.S0\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eWEBRip,WEB-DL\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eWEB-DL.H.264.AAC2.0,WEB-DL.AAC2.0.H.264\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eHell.On.Wheels,Hell.on.Wheels\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eMythbusters,MythBusters\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eDont.Trust.The.B----.In.Apartment.23,Dont.Trust.The.B.In.Apartment.23\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eDont.Trust.the.Bitch.in.Apartment.23,Dont.Trust.The.B.In.Apartment.23\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eDont.Trust.the.B.in.Apartment.23,Dont.Trust.The.B.In.Apartment.23\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eRizzoli.\u0026amp;.Isles,Rizzoli.and.Isles\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eRevolution.2012,Revolution\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eOrange.Is.The.New.Black,Orange.Is.the.New.Black\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eCastle.S,Castle.2009.S\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e/Agents.of.S.H.I.E.L.D.,/Marvels.Agents.Of.S.H.I.E.L.D.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eMarvel.Agents.Of.SHIELD,Marvels.Agents.Of.S.H.I.E.L.D.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eMarvel.Agents.Of.S.H.I.E.L.D..S,Marvels.Agents.Of.S.H.I.E.L.D.S\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eMarvel.Agents.Of.S.H.I.E.L.D.S,Marvels.Agents.Of.S.H.I.E.L.D.S\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eMarvels.Agents.Of.S.H.I.E.L.D..S,Marvels.Agents.Of.S.H.I.E.L.D.S\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eMarvels.Agents.of.S.H.I.E.L.D.,Marvels.Agents.Of.S.H.I.E.L.D.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eRizzoli.Isles,Rizzoli.and.Isles\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eThe.Bridge.S,The.Bridge.US.S\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eLast.Man.Standing.US,Last.Man.Standing.2011\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eThe.Americans.S,The.Americans.2013.S\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003ePerson.Of.Interest,Person.of.Interest\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eThe.Tomorrow.People.S0,The.Tomorrow.People.US.S0\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eThe.Code.AU,The.Code.2014\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eHow.to.Get.Away.With.Murder,How.To.Get.Away.With.Murder\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eHow.to.Get.Away.with.Murder,How.To.Get.Away.With.Murder\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eHow.To.Get.Away.with.Murder,How.To.Get.Away.With.Murder\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eIzombie,iZombie\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e-SiCKBEARD,.720p.WEB-DL.DD5.1.H.264\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eDL.DD5.1.WEB-DL,WEB-DL.DD5.1.DL\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003eXIII.The.Series.2011,XIII.2011\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eFILEEXT\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\\\\.nfo\\\\.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\\\\.par2\\\\.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Find files containing spaces and rename them according to the scene rules\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e ext in \u003cspan class=\"nv\"\u003e$EXTENSIONS\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$ext\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e !\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;.srt\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                /opt/bin/find . -name \u003cspan class=\"s2\"\u003e\u0026#34;* *\u003c/span\u003e\u003cspan class=\"nv\"\u003e$ext\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e -type f -exec sh -c \u003cspan class=\"s1\"\u003e\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e                        fp=\u0026#34;${0%/*}\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e                        fn=\u0026#34;${0##*/}\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e                        fn=\u0026#34;$( echo $fn | /opt/bin/sed -e \u0026#34;s,\\!,,\u0026#34; )\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e                        fn=\u0026#34;$( echo $fn | /opt/bin/egrep -oi \u0026#34;[A-Z][A-Za-z0-9.-]+.$ext\u0026#34; | sort -u | tail -n1 )\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e                        echo \u0026#34;Enforcing naming scheme for $0\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e                        mv \u0026#34;$0\u0026#34; \u0026#34;$fp/$fn\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e                        read -t 1 line \u0026lt;/dev/tty\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s1\"\u003e                \u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e{}\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;;\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Build the list of replacements. Do it here, since we need to\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# do it only once, and not for each file.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e pat in \u003cspan class=\"nv\"\u003e$PATTERN\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eset\u003c/span\u003e -- \u003cspan class=\"sb\"\u003e`\u003c/span\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$pat\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e tr , \u003cspan class=\"se\"\u003e\\ \u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eREN\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$REN\u003c/span\u003e\u003cspan class=\"s2\"\u003e -e \u0026#34;\u0026#34;s,\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"s2\"\u003e,\u003c/span\u003e\u003cspan class=\"nv\"\u003e$2\u003c/span\u003e\u003cspan class=\"s2\"\u003e,g\u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e pat in \u003cspan class=\"nv\"\u003e$FILEEXT\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eREN\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$REN\u003c/span\u003e\u003cspan class=\"s2\"\u003e -e \u0026#34;\u0026#34;s,\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003epat\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e,,g\u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eREN\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$REN\u003c/span\u003e\u003cspan class=\"s2\"\u003e -e \u0026#34;\u0026#34;s/[()]//g\u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Main loop starts here. Only handle files with the specified extensions.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e ext in \u003cspan class=\"nv\"\u003e$EXTENSIONS\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eREGEX\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$REGEX\u003c/span\u003e\u003cspan class=\"s2\"\u003e|\u003c/span\u003e\u003cspan class=\"nv\"\u003e$ext\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eREGEX\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$REGEX\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s2\"\u003e\u0026#34;s,|,,\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eMAIN_REN\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$REN\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e file in \u003cspan class=\"k\"\u003e$(\u003c/span\u003e /opt/bin/find . -regextype posix-egrep -type f -regex \u003cspan class=\"s2\"\u003e\u0026#34;.*(\u003c/span\u003e\u003cspan class=\"nv\"\u003e$REGEX\u003c/span\u003e\u003cspan class=\"s2\"\u003e)\u0026#34;\u003c/span\u003e ! -wholename \u003cspan class=\"s1\"\u003e\u0026#39;*tvshow*\u0026#39;\u003c/span\u003e ! -wholename \u003cspan class=\"s1\"\u003e\u0026#39;*season*\u0026#39;\u003c/span\u003e ! -wholename \u003cspan class=\"s1\"\u003e\u0026#39;*actors\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sort \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eOLD\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$file\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eNEW\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$file\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eREN\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$MAIN_REN\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$file\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e /opt/bin/egrep \u003cspan class=\"s2\"\u003e\u0026#34;\\.(REPACK|REREPACK|PROPER|iNTERNAL|RERIP|REAL)\\.\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$file\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e /opt/bin/grep \u003cspan class=\"s2\"\u003e\u0026#34;720p\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e !\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"nv\"\u003eREN\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$REN\u003c/span\u003e\u003cspan class=\"s2\"\u003e -e \u0026#34;\u0026#34;s/\\(.*S[0-9]\\+\\(E[0-9]\\+\\)\\+\\)\\+.*\\(720p.*\\)/\\1.\\3/\u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$file\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e /opt/bin/grep \u003cspan class=\"s2\"\u003e\u0026#34;1080p\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e !\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"nv\"\u003eREN\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$REN\u003c/span\u003e\u003cspan class=\"s2\"\u003e -e \u0026#34;\u0026#34;s/\\(.*S[0-9]\\+\\(E[0-9]\\+\\)\\+\\)\\+.*\\(1080p.*\\)/\\1.\\3/\u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eNEW\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$OLD\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e /opt/bin/sed \u003cspan class=\"nv\"\u003e$REN\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e ! -z \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$NEW\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e -a \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$NEW\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e !\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$OLD\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Enforcing naming scheme for \u003c/span\u003e\u003cspan class=\"nv\"\u003e$file\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                mv \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$OLD\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$NEW\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$OPTS\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;--force\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"nv\"\u003eRESCAN_ALL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"nv\"\u003eRESCAN_ALL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eIFS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$RESCAN_ALL\u003c/span\u003e -eq \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eFILES\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;`/opt/bin/grep -rl \u0026#39;episodedetails\u0026#39; */*/*.nfo 2\u0026gt;/dev/null`\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Get a list of all NFO files having incorrect information\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eFILES\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;`/opt/bin/egrep -rli \u0026#39;(\\(Guest Star\\)|\\(Writer\\))\u0026#39; */*/*.nfo 2\u0026gt;/dev/null`\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e episode in \u003cspan class=\"nv\"\u003e$FILES\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# First convert the nfo-file to use linux line-breaks.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        /opt/bin/sed -i \u003cspan class=\"s1\"\u003e\u0026#39;s/^M$//\u0026#39;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e /opt/bin/grep \u003cspan class=\"s1\"\u003e\u0026#39;\u0026lt;director\u0026gt;.*\u0026lt;/director\u0026gt;\u0026#39;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nv\"\u003eDIRECTOR_MISSING\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$DIRECTOR_MISSING\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u003c/span\u003e\u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e /opt/bin/grep \u003cspan class=\"s1\"\u003e\u0026#39;\u0026lt;credits\u0026gt;.*\u0026lt;/credits\u0026gt;\u0026#39;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nv\"\u003eCREDITS_MISSING\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$CREDITS_MISSING\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u003c/span\u003e\u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e /opt/bin/grep \u003cspan class=\"s1\"\u003e\u0026#39;\u0026lt;credits\u0026gt;.*\\(Writer\\).*\u0026lt;/credits\u0026gt;\u0026#39;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nv\"\u003eWRITER_MISSING\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$WRITER_MISSING\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u003c/span\u003e\u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e /opt/bin/grep \u003cspan class=\"s1\"\u003e\u0026#39;\u0026lt;credits\u0026gt;.*\\\u0026amp;amp;.*\u0026lt;/credits\u0026gt;\u0026#39;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e !\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nv\"\u003eCREDITS_JUNK\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$CREDITS_JUNK\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u003c/span\u003e\u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"c1\"\u003e# see if the file has new-style (multi-line) or old-style (single-line) credits.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e /opt/bin/grep \u003cspan class=\"s1\"\u003e\u0026#39;\u0026lt;credits\u0026gt;\u0026#39;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e wc -l \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e -gt \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Updating episode information in \u003c/span\u003e\u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e\u003cspan class=\"s2\"\u003e (new-style)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        mv \u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e \u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e.old\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        /opt/bin/grep -v \u003cspan class=\"s2\"\u003e\u0026#34;(Guest Star)\u0026lt;/credits\u0026gt;\u0026#34;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e.old \u003cspan class=\"p\"\u003e|\u003c/span\u003e /opt/bin/sed \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                -e \u003cspan class=\"s2\"\u003e\u0026#34;s, (Writer),,g\u0026#34;\u003c/span\u003e -e -e \u003cspan class=\"s2\"\u003e\u0026#34;s,|, / ,g\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                -e \u003cspan class=\"s2\"\u003e\u0026#34;s,  , ,g\u0026#34;\u003c/span\u003e -e \u003cspan class=\"s1\"\u003e\u0026#39;s/^[ \\t]*//\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                tee \u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e \u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e\u0026gt;/dev/null\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"c1\"\u003e# Mangle the list, so we can work with it\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"nv\"\u003eold_credits\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e /opt/bin/grep \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;credits\u0026gt;\u0026#34;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e /opt/bin/sed -n \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                -e \u003cspan class=\"s1\"\u003e\u0026#39;s/.*\u0026lt;credits\u0026gt;\\(.*\\)\u0026lt;\\/credits\u0026gt;.*/\\1/p\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"c1\"\u003e# Fixup the credits line\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"nv\"\u003enew_credits\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$old_credits\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e tr \u003cspan class=\"s1\"\u003e\u0026#39;/\u0026#39;\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;\\n\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e /opt/bin/grep -v \u003cspan class=\"s2\"\u003e\u0026#34;Guest Star\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                tr \u003cspan class=\"s1\"\u003e\u0026#39;\\n\u0026#39;\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;/\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e /opt/bin/sed -e \u003cspan class=\"s2\"\u003e\u0026#34;s, (Writer),,g\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                -e \u003cspan class=\"s2\"\u003e\u0026#34;s,|, / ,g\u0026#34;\u003c/span\u003e -e \u003cspan class=\"s2\"\u003e\u0026#34;s,  , ,g\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e /opt/bin/sed -e \u003cspan class=\"s1\"\u003e\u0026#39;s/^[ \\t]*//\u0026#39;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                -e \u003cspan class=\"s2\"\u003e\u0026#34;s/\\/*\u003c/span\u003e$\u003cspan class=\"s2\"\u003e//\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"nb\"\u003eshopt\u003c/span\u003e -q -s extglob\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Updating episode information in \u003c/span\u003e\u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e\u003cspan class=\"s2\"\u003e (old-style)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -n \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$new_credits\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                /opt/bin/sed -i \u003cspan class=\"s2\"\u003e\u0026#34;s|\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eold_credits\u003c/span\u003e\u003cspan class=\"p\"\u003e##+([[:\u003c/span\u003e\u003cspan class=\"nv\"\u003espace\u003c/span\u003e\u003cspan class=\"p\"\u003e:]])\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e|\u003c/span\u003e\u003cspan class=\"nv\"\u003e$new_credits\u003c/span\u003e\u003cspan class=\"s2\"\u003e|g\u0026#34;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"nb\"\u003eshopt\u003c/span\u003e -q -u extglob\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eIFS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34; \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -n \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$DIRECTOR_MISSING\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;The following episodes are missing a director:\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efor\u003c/span\u003e episode in \u003cspan class=\"nv\"\u003e$DIRECTOR_MISSING\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34; \u003c/span\u003e\u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -n \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$CREDITS_JUNK\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;The following episodes credits\u0026#39; contain junk and should be fixed at thetvdb.com:\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efor\u003c/span\u003e episode in \u003cspan class=\"nv\"\u003e$CREDITS_JUNK\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34; \u003c/span\u003e\u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -n \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$CREDITS_MISSING\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;The following episodes are missing credits:\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efor\u003c/span\u003e episode in \u003cspan class=\"nv\"\u003e$CREDITS_MISSING\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34; \u003c/span\u003e\u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -n \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$WRITER_MISSING\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;The following episodes are missing a writer:\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efor\u003c/span\u003e episode in \u003cspan class=\"nv\"\u003e$WRITER_MISSING\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34; \u003c/span\u003e\u003cspan class=\"nv\"\u003e$episode\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/opt/bin/findutils-find . -name \u003cspan class=\"s2\"\u003e\u0026#34;*.old\u0026#34;\u003c/span\u003e -exec rm \u003cspan class=\"o\"\u003e{}\u003c/span\u003e \u003cspan class=\"se\"\u003e\\;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eBear in mind, this script is using ipkg/optware executables, mainly because the provided BusyBox ones are lacking some features.\u003c/p\u003e","title":"Sickbeard Shell Script: Fix TV episodes name"},{"content":"I have the issue that we use a cloud automation software, which for whatever reason failed to delete the hypervisor snapshots.\nNow I was looking into a quick way to delete all those 520 snapshots with PowerCLI, and I found something pretty quick.\nBased on that, I came up with my own quick PowerCLI one-liner, that\u0026rsquo;ll list all VMs and their snapshots:\n1 Get-VM | Get-Snapshot | Where { $_.Name -like \u0026#34;201502*\u0026#34; } | Format-Table -Property VM, Name, Created, Description, SizeMB -AutoSize Now, I could use another one-liner to delete all snapshots, that\u0026rsquo;ll look like this:\n1 Get-VM | Get-Snapshot | Where {$_.Name -like \u0026#34;201502*\u0026#34;} | Remove-Snapshot -Confirm:$false -RunAsync However, this will either crash an ESXi host (because the amount of the snapshots is too much) or overwealm the storage. So in the end I used a script like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 $maxtasks = 5 $snaps = Get-VM | Get-Snapshot | Where { $_.Name -like \u0026#34;201502*\u0026#34; } $i = 0 while($i -lt $snaps.Count) { Remove-Snapshot -Snapshot $snaps[$i] -RunAsync -Confirm:$false $tasks = Get-Task -Status \u0026#34;Running\u0026#34; | where {$_.Name -eq \u0026#34;RemoveSnapshot_Task\u0026#34;} while($tasks.Count -gt ($maxtasks-1)) { sleep 30 $tasks = Get-Task -Status \u0026#34;Running\u0026#34; | where {$_.Name -eq \u0026#34;RemoveSnapshot_Task\u0026#34;} } $i++ } This\u0026rsquo;ll limit the maximum amount of snapshots to delete at times to 5 (or 10 if you change the $maxtasks value).\n","permalink":"https://christian.blog.pakiheim.de/posts/2015-02-23_powercli-delete-all-snapshots-by-name/","summary":"\u003cp\u003eI have the issue that we use a cloud automation software, which for whatever reason failed to delete the hypervisor snapshots.\u003c/p\u003e\n\u003cp\u003eNow I was looking into a quick way to delete all those 520 snapshots with PowerCLI, and \u003ca href=\"http://www.hrbac.cz/2013/01/powercli-to-list-delete-snapshots/\"\u003eI found something\u003c/a\u003e pretty quick.\u003c/p\u003e\n\u003cp\u003eBased on that, I came up with my own quick PowerCLI one-liner, that\u0026rsquo;ll list all VMs and their snapshots:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-ps\" data-lang=\"ps\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eGet-VM\u003c/span\u003e \u003cspan class=\"nf\"\u003e|\u003c/span\u003e \u003cspan class=\"nf\"\u003eGet-Snapshot\u003c/span\u003e  \u003cspan class=\"nf\"\u003e|\u003c/span\u003e \u003cspan class=\"nf\"\u003eWhere\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nf\"\u003e$_.Name\u003c/span\u003e \u003cspan class=\"nf\"\u003e-like\u003c/span\u003e \u003cspan class=\"nf\"\u003e\u0026#34;201502*\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"nf\"\u003e|\u003c/span\u003e \u003cspan class=\"nf\"\u003eFormat-Table\u003c/span\u003e \u003cspan class=\"nf\"\u003e-Property\u003c/span\u003e \u003cspan class=\"nf\"\u003eVM,\u003c/span\u003e \u003cspan class=\"nf\"\u003eName,\u003c/span\u003e \u003cspan class=\"nf\"\u003eCreated,\u003c/span\u003e \u003cspan class=\"nf\"\u003eDescription,\u003c/span\u003e \u003cspan class=\"nf\"\u003eSizeMB\u003c/span\u003e \u003cspan class=\"nf\"\u003e-AutoSize\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eNow, I could use another one-liner to delete all snapshots, that\u0026rsquo;ll look like this:\u003c/p\u003e","title":"PowerCLI: Delete all snapshots by name"},{"content":"For the past two months we\u0026rsquo;ve been trying to migrate a bunch (90 or so) VMs from XenServer to ESXi \u0026hellip; However for some reason on some of them, the Converter Service would crash.\nVMware Converter crashing due to rsintcor32.dll\nUp till Monday, I had no idea why. I decided to look into the error once again, and this time decided just to Google the failing module\u0026hellip; And guess what ? Out came this Citrix forum post regarding the failing module. So, after knowing that rsintcor32.dll belongs to the Citrix System Monitoring Agent service (well, I could have guessed that from the DLLs path \u0026#x1f61b;) I decided to simply stop the service.\nAnd now, we can migrate the remaining VMs to ESXi and get rid of XenServer!\n","permalink":"https://christian.blog.pakiheim.de/posts/2015-02-19_migrating-from-xenserver-to-esxi/","summary":"\u003cp\u003eFor the past two months we\u0026rsquo;ve been trying to migrate a bunch (90 or so) VMs from XenServer to ESXi \u0026hellip; However for some reason on some of them, the Converter Service would crash.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2014/02/citrix-monitoring1.png\"\n         alt=\"VMware Converter crashing due to rsintcor32.dll\" width=\"500\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eVMware Converter crashing due to rsintcor32.dll\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eUp till Monday, I had no idea why. I decided to look into the error once again, and this time decided just to Google the failing module\u0026hellip; And guess what ? Out came \u003ca href=\"http://discussions.citrix.com/topic/102434-faulting-module-rsintcordll/\"\u003ethis Citrix forum\u003c/a\u003e post regarding the failing module. So, after knowing that rsintcor32.dll belongs to the Citrix System Monitoring Agent service (well, I could have guessed that from the DLLs path \u0026#x1f61b;) I decided to simply stop the service.\u003c/p\u003e","title":"Migrating from XenServer to ESXi"},{"content":"Well, I have a bunch of Tiny Tiny RSS instances running on my webhost, and I wanted a init-script that starts the update-daemons for all instances.\nNow, there\u0026rsquo;s already a bunch of init scripts for Debian around ( 1, 2) however none of them were to my liking or did what I wanted it to do. So I ended up (yeah, I know again) rewriting them.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 #!/bin/sh ### BEGIN INIT INFO # Provides: ttrss # Required-Start: $local_fs $remote_fs networking # Required-Stop: $local_fs $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Tiny Tiny RSS update daemon # Description: Update the Tiny Tiny RSS subscribed syndication feeds. ### END INIT INFO set -e PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC=\u0026#34;Tiny Tiny RSS update daemon\u0026#34; NAME=$(command basename \u0026#34;${0}\u0026#34;) DISABLED=1 FORKING=0 # Read configuration variable file if it is present [ -r \u0026#34;/etc/default/${NAME}\u0026#34; ] \u0026amp;\u0026amp; . \u0026#34;/etc/default/${NAME}\u0026#34; DAEMON_SCRIPT=\u0026#34;update.php --daemon\u0026#34; if [ $FORKING -ne 0 ] ; then DAEMON_SCRIPT=\u0026#34;update_daemon2.php\u0026#34; fi DAEMON=/usr/bin/php # Exit if the package is not installed [ -x \u0026#34;$DAEMON\u0026#34; ] || exit 0 [ -d \u0026#34;${TTRSS_PATH}\u0026#34; ] || exit 0 # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (\u0026gt;= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions if [ \u0026#34;$DISABLED\u0026#34; != \u0026#34;0\u0026#34; -a \u0026#34;$1\u0026#34; != \u0026#34;stop\u0026#34; ]; then log_warning_msg \u0026#34;Not starting $DESC - edit /etc/default/tt-rss and change DISABLED to be 0.\u0026#34;; exit 0; fi # Function that starts the daemon/service do_start() { for dir in ${TTRSS_PATH}/*; do INSTANCE_NAME=${dir##*/} start-stop-daemon --start --make-pidfile --background --quiet --chuid \u0026#34;${TTRSS_USERID}\u0026#34; --group \u0026#34;${TTRSS_GROUPID}\u0026#34; --chdir \u0026#34;${dir}\u0026#34; --pidfile \u0026#34;${TTRSS_PIDDIR}/ttrss-${INSTANCE_NAME}.pid\u0026#34; --exec \u0026#34;${DAEMON}\u0026#34; --test \u0026gt;/dev/null || return 1 start-stop-daemon --start --make-pidfile --background --quiet --chuid \u0026#34;${TTRSS_USERID}\u0026#34; --group \u0026#34;${TTRSS_GROUPID}\u0026#34; --chdir \u0026#34;${dir}\u0026#34; --pidfile \u0026#34;${TTRSS_PIDDIR}/ttrss-${INSTANCE_NAME}.pid\u0026#34; --exec \u0026#34;${DAEMON}\u0026#34; -- ${dir}/${DAEMON_SCRIPT} --log /var/log/ttrss/${INSTANCE_NAME}.log || return 2 done } # Function that stops the daemon/service do_stop() { for dir in ${TTRSS_PATH}/*; do INSTANCE_NAME=${dir##*/} start-stop-daemon --stop --make-pidfile --quiet --retry=TERM/1/KILL/5 --pidfile \u0026#34;${TTRSS_PIDDIR}/ttrss-${INSTANCE_NAME}.pid\u0026#34; RETVAL=\u0026#34;$?\u0026#34; [ \u0026#34;$RETVAL\u0026#34; = 2 ] \u0026amp;\u0026amp; return 2 start-stop-daemon --stop --quiet --oknodo --retry=0/1/KILL/5 --exec ${DAEMON} [ \u0026#34;$?\u0026#34; = 2 ] \u0026amp;\u0026amp; return 2 rm -f \u0026#34;${TTRSS_PIDDIR}/ttrss-${INSTANCE_NAME}.pid\u0026#34; return $RETVAL done } case \u0026#34;$1\u0026#34; in start) log_daemon_msg \u0026#34;Starting $DESC\u0026#34; \u0026#34;$NAME\u0026#34; do_start case \u0026#34;$?\u0026#34; in 0|1) log_end_msg 0 ;; 2) log_end_msg 1 ;; esac ;; stop) log_daemon_msg \u0026#34;Stopping $DESC\u0026#34; \u0026#34;$NAME\u0026#34; do_stop case \u0026#34;$?\u0026#34; in 0|1) log_end_msg 0 ;; 2) log_end_msg 1 ;; esac ;; restart|force-reload) # If the \u0026#34;reload\u0026#34; option is implemented then remove the # \u0026#39;force-reload\u0026#39; alias log_daemon_msg \u0026#34;Restarting $DESC\u0026#34; \u0026#34;$NAME\u0026#34; do_stop case \u0026#34;$?\u0026#34; in 0|1) do_start case \u0026#34;$?\u0026#34; in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) echo \u0026#34;Usage: ${NAME} {start|stop|restart|force-reload}\u0026#34; \u0026gt;\u0026amp;2 exit 3 ;; esac : 1 2 3 4 5 6 7 8 9 10 11 12 # Set DISABLED to 1 to prevent the daemon from starting. DISABLED=0 TTRSS_USERID=\u0026#34;www-data\u0026#34; TTRSS_GROUPID=\u0026#34;www-data\u0026#34; TTRSS_PIDDIR=\u0026#34;/var/run\u0026#34; TTRSS_PATH=\u0026#34;/var/www/rss.heimdaheim.de/www\u0026#34; # Allow the update_daemon script to use a forking daemon instead of a # single-threaded instance. # This option is only available for TinyTinyRSS 1.2.20 and above. FORKING=0 ","permalink":"https://christian.blog.pakiheim.de/posts/2015-02-09_tiny-tiny-rss-init-script-for-multiple-instances-on-debian-wheezy/","summary":"\u003cp\u003eWell, I have a bunch of Tiny Tiny RSS instances running on my webhost, and I wanted a init-script that starts the update-daemons for all instances.\u003c/p\u003e\n\u003cp\u003eNow, there\u0026rsquo;s already a bunch of init scripts for Debian around ( \u003ca href=\"http://noctus.net/2012/initscript-mit-tiny-tiny-rss-1-5-10\"\u003e1\u003c/a\u003e, \u003ca href=\"http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-tiny-tiny-rss-sur-debian-4-0-etch/tt-rss-initd\"\u003e2\u003c/a\u003e) however none of them were to my liking or did what I wanted it to do. So I ended up (yeah, I know \u003cem\u003e\u003cstrong\u003eagain\u003c/strong\u003e\u003c/em\u003e) rewriting them.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e  1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e  2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e  3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e  4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e  5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e  6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e  7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e  8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e  9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e 10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e 11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e 12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e 13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e 14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e 15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e 16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e 17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e 18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e 19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e 20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e 21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e 22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e 23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e 24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e 25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e 26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e 27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e 28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e 29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e 30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e 31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e 32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e 33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e 34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e 35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e 36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e 37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e 38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e 39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e 40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e 41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e 42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e 43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e 44\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-45\"\u003e 45\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-46\"\u003e 46\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-47\"\u003e 47\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-48\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-48\"\u003e 48\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-49\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-49\"\u003e 49\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-50\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-50\"\u003e 50\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-51\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-51\"\u003e 51\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-52\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-52\"\u003e 52\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-53\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-53\"\u003e 53\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-54\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-54\"\u003e 54\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-55\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-55\"\u003e 55\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-56\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-56\"\u003e 56\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-57\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-57\"\u003e 57\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-58\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-58\"\u003e 58\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-59\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-59\"\u003e 59\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-60\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-60\"\u003e 60\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-61\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-61\"\u003e 61\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-62\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-62\"\u003e 62\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-63\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-63\"\u003e 63\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-64\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-64\"\u003e 64\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-65\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-65\"\u003e 65\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-66\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-66\"\u003e 66\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-67\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-67\"\u003e 67\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-68\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-68\"\u003e 68\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-69\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-69\"\u003e 69\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-70\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-70\"\u003e 70\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-71\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-71\"\u003e 71\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-72\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-72\"\u003e 72\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-73\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-73\"\u003e 73\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-74\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-74\"\u003e 74\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-75\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-75\"\u003e 75\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-76\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-76\"\u003e 76\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-77\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-77\"\u003e 77\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-78\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-78\"\u003e 78\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-79\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-79\"\u003e 79\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-80\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-80\"\u003e 80\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-81\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-81\"\u003e 81\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-82\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-82\"\u003e 82\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-83\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-83\"\u003e 83\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-84\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-84\"\u003e 84\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-85\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-85\"\u003e 85\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-86\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-86\"\u003e 86\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-87\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-87\"\u003e 87\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-88\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-88\"\u003e 88\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-89\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-89\"\u003e 89\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-90\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-90\"\u003e 90\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-91\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-91\"\u003e 91\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-92\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-92\"\u003e 92\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-93\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-93\"\u003e 93\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-94\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-94\"\u003e 94\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-95\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-95\"\u003e 95\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-96\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-96\"\u003e 96\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-97\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-97\"\u003e 97\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-98\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-98\"\u003e 98\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-99\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-99\"\u003e 99\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-100\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-100\"\u003e100\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-101\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-101\"\u003e101\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-102\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-102\"\u003e102\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-103\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-103\"\u003e103\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-104\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-104\"\u003e104\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-105\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-105\"\u003e105\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-106\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-106\"\u003e106\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-107\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-107\"\u003e107\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-108\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-108\"\u003e108\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-109\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-109\"\u003e109\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-110\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-110\"\u003e110\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-111\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-111\"\u003e111\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-112\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-112\"\u003e112\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-113\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-113\"\u003e113\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-114\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-114\"\u003e114\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-115\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-115\"\u003e115\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-116\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-116\"\u003e116\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-117\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-117\"\u003e117\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-118\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-118\"\u003e118\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-119\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-119\"\u003e119\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-120\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-120\"\u003e120\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-121\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-121\"\u003e121\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-122\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-122\"\u003e122\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-123\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-123\"\u003e123\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-124\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-124\"\u003e124\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-125\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-125\"\u003e125\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-126\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-126\"\u003e126\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-127\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-127\"\u003e127\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-128\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-128\"\u003e128\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-129\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-129\"\u003e129\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-130\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-130\"\u003e130\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-131\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-131\"\u003e131\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-132\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-132\"\u003e132\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-133\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-133\"\u003e133\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-134\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-134\"\u003e134\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-135\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-135\"\u003e135\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/sh\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e### BEGIN INIT INFO\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Provides:          ttrss\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Required-Start:    $local_fs $remote_fs networking\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Required-Stop:     $local_fs $remote_fs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Default-Start:     2 3 4 5\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Default-Stop:      0 1 6\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Short-Description: Tiny Tiny RSS update daemon\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Description:       Update the Tiny Tiny RSS subscribed syndication feeds.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e### END INIT INFO\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e -e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ePATH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/sbin:/usr/sbin:/bin:/usr/bin\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eDESC\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Tiny Tiny RSS update daemon\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eNAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e\u003cspan class=\"nb\"\u003ecommand\u003c/span\u003e basename \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003e0\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eDISABLED\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eFORKING\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Read configuration variable file if it is present\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e -r \u003cspan class=\"s2\"\u003e\u0026#34;/etc/default/\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eNAME\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e . \u003cspan class=\"s2\"\u003e\u0026#34;/etc/default/\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eNAME\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eDAEMON_SCRIPT\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;update.php --daemon\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$FORKING\u003c/span\u003e -ne \u003cspan class=\"m\"\u003e0\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eDAEMON_SCRIPT\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;update_daemon2.php\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eDAEMON\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/usr/bin/php\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Exit if the package is not installed\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e -x \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$DAEMON\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e -d \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eTTRSS_PATH\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Load the VERBOSE setting and other rcS variables\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e. /lib/init/vars.sh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Define LSB log_* functions.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Depend on lsb-base (\u0026gt;= 3.0-6) to ensure that this file is present.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e. /lib/lsb/init-functions\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$DISABLED\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e !\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;0\u0026#34;\u003c/span\u003e -a \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e !\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;stop\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        log_warning_msg \u003cspan class=\"s2\"\u003e\u0026#34;Not starting \u003c/span\u003e\u003cspan class=\"nv\"\u003e$DESC\u003c/span\u003e\u003cspan class=\"s2\"\u003e - edit /etc/default/tt-rss and change DISABLED to be 0.\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e 0\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Function that starts the daemon/service\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edo_start\u003cspan class=\"o\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efor\u003c/span\u003e dir in \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eTTRSS_PATH\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e/*\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nv\"\u003eINSTANCE_NAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003edir\u003c/span\u003e\u003cspan class=\"p\"\u003e##*/\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                start-stop-daemon --start --make-pidfile --background --quiet\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        --chuid \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eTTRSS_USERID\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e --group \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eTTRSS_GROUPID\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        --chdir \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003edir\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        --pidfile \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eTTRSS_PIDDIR\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e/ttrss-\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eINSTANCE_NAME\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e.pid\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        --exec \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eDAEMON\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e --test \u0026gt;/dev/null\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                start-stop-daemon --start --make-pidfile --background --quiet\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        --chuid \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eTTRSS_USERID\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e --group \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eTTRSS_GROUPID\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        --chdir \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003edir\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        --pidfile \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eTTRSS_PIDDIR\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e/ttrss-\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eINSTANCE_NAME\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e.pid\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        --exec \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eDAEMON\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e -- \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003edir\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e/\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eDAEMON_SCRIPT\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e --log\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        /var/log/ttrss/\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eINSTANCE_NAME\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e.log\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Function that stops the daemon/service\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edo_stop\u003cspan class=\"o\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efor\u003c/span\u003e dir in \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eTTRSS_PATH\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e/*\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nv\"\u003eINSTANCE_NAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003edir\u003c/span\u003e\u003cspan class=\"p\"\u003e##*/\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                start-stop-daemon --stop --make-pidfile --quiet\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        --retry\u003cspan class=\"o\"\u003e=\u003c/span\u003eTERM/1/KILL/5\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        --pidfile \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eTTRSS_PIDDIR\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e/ttrss-\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eINSTANCE_NAME\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e.pid\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nv\"\u003eRETVAL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$?\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$RETVAL\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                start-stop-daemon --stop --quiet --oknodo --retry\u003cspan class=\"o\"\u003e=\u003c/span\u003e0/1/KILL/5\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        --exec \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eDAEMON\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$?\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                rm -f \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eTTRSS_PIDDIR\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e/ttrss-\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eINSTANCE_NAME\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e.pid\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"nv\"\u003e$RETVAL\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        start\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                log_daemon_msg \u003cspan class=\"s2\"\u003e\u0026#34;Starting \u003c/span\u003e\u003cspan class=\"nv\"\u003e$DESC\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$NAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                do_start\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$?\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        0\u003cspan class=\"p\"\u003e|\u003c/span\u003e1\u003cspan class=\"o\"\u003e)\u003c/span\u003e log_end_msg \u003cspan class=\"m\"\u003e0\u003c/span\u003e \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        2\u003cspan class=\"o\"\u003e)\u003c/span\u003e log_end_msg \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003eesac\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        stop\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                log_daemon_msg \u003cspan class=\"s2\"\u003e\u0026#34;Stopping \u003c/span\u003e\u003cspan class=\"nv\"\u003e$DESC\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$NAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                do_stop\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$?\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        0\u003cspan class=\"p\"\u003e|\u003c/span\u003e1\u003cspan class=\"o\"\u003e)\u003c/span\u003e log_end_msg \u003cspan class=\"m\"\u003e0\u003c/span\u003e \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        2\u003cspan class=\"o\"\u003e)\u003c/span\u003e log_end_msg \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003eesac\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        restart\u003cspan class=\"p\"\u003e|\u003c/span\u003eforce-reload\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"c1\"\u003e# If the \u0026#34;reload\u0026#34; option is implemented then remove the\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"c1\"\u003e# \u0026#39;force-reload\u0026#39; alias\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                log_daemon_msg \u003cspan class=\"s2\"\u003e\u0026#34;Restarting \u003c/span\u003e\u003cspan class=\"nv\"\u003e$DESC\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$NAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                do_stop\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$?\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        0\u003cspan class=\"p\"\u003e|\u003c/span\u003e1\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                do_start\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$?\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                        0\u003cspan class=\"o\"\u003e)\u003c/span\u003e log_end_msg \u003cspan class=\"m\"\u003e0\u003c/span\u003e \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                        1\u003cspan class=\"o\"\u003e)\u003c/span\u003e log_end_msg \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"p\"\u003e;;\u003c/span\u003e \u003cspan class=\"c1\"\u003e# Old process is still running\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                        *\u003cspan class=\"o\"\u003e)\u003c/span\u003e log_end_msg \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"p\"\u003e;;\u003c/span\u003e \u003cspan class=\"c1\"\u003e# Failed to start\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                \u003cspan class=\"k\"\u003eesac\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        *\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                \u003cspan class=\"c1\"\u003e# Failed to stop\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                log_end_msg \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003eesac\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        *\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Usage: \u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eNAME\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e {start|stop|restart|force-reload}\u0026#34;\u003c/span\u003e \u0026gt;\u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e\u003cspan class=\"m\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e3\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eesac\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-1-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Set DISABLED to 1 to prevent the daemon from starting.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eDISABLED\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eTTRSS_USERID\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;www-data\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eTTRSS_GROUPID\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;www-data\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eTTRSS_PIDDIR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/var/run\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eTTRSS_PATH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/var/www/rss.heimdaheim.de/www\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Allow the update_daemon script to use a forking daemon instead of a\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# single-threaded instance.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# This option is only available for TinyTinyRSS 1.2.20 and above.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eFORKING\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Tiny Tiny RSS init-script for multiple instances on Debian Wheezy"},{"content":"Well, I\u0026rsquo;m currently migrating between different cluster layouts, and I had to create the new PortGroups on the old hosts, in order for me to switch between old and new hosts.\n1 2 3 4 5 6 7 $vmhosts = Get-Cluster \u0026#34;UCSCL01-02\u0026#34; | Get-VMHost foreach ($vmhost in $vmhosts) { import-csv -Delimiter \u0026#34;;\u0026#34; .\\pg.csv | foreach { $vmhost | Get-VirtualSwitch -Name \u0026#34;vSwitch3\u0026#34; | New-VirtualPortGroup ` -Name $_.portgroup -VLanId $_.vlanid } } And the corresponding CSV would look like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 portgroup;vlanid 1700_routers;1700 1701_routers;1701 1702_routers;1702 1703_routers;1703 1704_routers;1704 1705_routers;1705 1706_routers;1706 1707_routers;1707 1708_routers;1708 1709_routers;1709 1710_routers;1710 1711_routers;1711 1712_routers;1712 1713_routers;1713 1714_routers;1714 1715_routers;1715 1716_routers;1716 1717_routers;1717 1718_routers;1718 1719_routers;1719 2000_virtual-machines;2000 2001_virtual-machines;2001 2002_virtual-machines;2002 2003_virtual-machines;2003 2004_virtual-machines;2004 2005_virtual-machines;2005 2006_virtual-machines;2006 2007_virtual-machines;2007 2008_virtual-machines;2008 2009_virtual-machines;2009 2010_virtual-machines;2010 2011_virtual-machines;2011 2012_virtual-machines;2012 2013_virtual-machines;2013 2014_virtual-machines;2014 2015_virtual-machines;2015 2016_virtual-machines;2016 2017_virtual-machines;2017 2018_virtual-machines;2018 2019_virtual-machines;2019 ","permalink":"https://christian.blog.pakiheim.de/posts/2015-01-03_quick-add-a-bunch-of-virtual-machine-port-groups-from-csv/","summary":"\u003cp\u003eWell, I\u0026rsquo;m currently migrating between different cluster layouts, and I had to create the new PortGroups on the old hosts, in order for me to switch between old and new hosts.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e7\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-ps\" data-lang=\"ps\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003e$vmhosts\u003c/span\u003e \u003cspan class=\"nf\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eGet-Cluster\u003c/span\u003e \u003cspan class=\"nf\"\u003e\u0026#34;UCSCL01-02\u0026#34;\u003c/span\u003e \u003cspan class=\"nf\"\u003e|\u003c/span\u003e \u003cspan class=\"nf\"\u003eGet-VMHost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eforeach\u003c/span\u003e \u003cspan class=\"s\"\u003e($vmhost in $vmhosts)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eimport-csv\u003c/span\u003e \u003cspan class=\"nf\"\u003e-Delimiter\u003c/span\u003e \u003cspan class=\"nf\"\u003e\u0026#34;;\u0026#34;\u003c/span\u003e \u003cspan class=\"nf\"\u003e.\\pg.csv\u003c/span\u003e \u003cspan class=\"nf\"\u003e|\u003c/span\u003e \u003cspan class=\"nf\"\u003eforeach\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003e$vmhost\u003c/span\u003e \u003cspan class=\"nf\"\u003e|\u003c/span\u003e \u003cspan class=\"nf\"\u003eGet-VirtualSwitch\u003c/span\u003e \u003cspan class=\"nf\"\u003e-Name\u003c/span\u003e \u003cspan class=\"nf\"\u003e\u0026#34;vSwitch3\u0026#34;\u003c/span\u003e \u003cspan class=\"nf\"\u003e|\u003c/span\u003e \u003cspan class=\"nf\"\u003eNew-VirtualPortGroup\u003c/span\u003e \u003cspan class=\"nf\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                \u003cspan class=\"nf\"\u003e-Name\u003c/span\u003e \u003cspan class=\"nf\"\u003e$_.portgroup\u003c/span\u003e \u003cspan class=\"nf\"\u003e-VLanId\u003c/span\u003e \u003cspan class=\"nf\"\u003e$_.vlanid\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAnd the corresponding CSV would look like this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-1-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-38\"\u003e38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-39\"\u003e39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-40\"\u003e40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-41\"\u003e41\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eportgroup;vlanid\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1700_routers;1700\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1701_routers;1701\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1702_routers;1702\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1703_routers;1703\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1704_routers;1704\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1705_routers;1705\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1706_routers;1706\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1707_routers;1707\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1708_routers;1708\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1709_routers;1709\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1710_routers;1710\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1711_routers;1711\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1712_routers;1712\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1713_routers;1713\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1714_routers;1714\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1715_routers;1715\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1716_routers;1716\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1717_routers;1717\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1718_routers;1718\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1719_routers;1719\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2000_virtual-machines;2000\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2001_virtual-machines;2001\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2002_virtual-machines;2002\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2003_virtual-machines;2003\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2004_virtual-machines;2004\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2005_virtual-machines;2005\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2006_virtual-machines;2006\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2007_virtual-machines;2007\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2008_virtual-machines;2008\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2009_virtual-machines;2009\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2010_virtual-machines;2010\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2011_virtual-machines;2011\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2012_virtual-machines;2012\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2013_virtual-machines;2013\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2014_virtual-machines;2014\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2015_virtual-machines;2015\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2016_virtual-machines;2016\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2017_virtual-machines;2017\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2018_virtual-machines;2018\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2019_virtual-machines;2019\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Quick-Add a bunch of Virtual Machine Port-Groups from CSV"},{"content":"Well, I use ViMbAdmin for the mail box administration of my users (and aliases) on heimdaheim.de. After I while (well, over half a year I guess), I decided to look at it again. However it didn\u0026rsquo;t work. Well this was a multi-part problem.\nViMbAdmin has been updated to require PHP composer (which populates the vendor/ folder) the application.ini was outdated After I fixed all that, ViMbAdmin was working again. However I decided to replace my mod_rewrite stuff (I had in my apache config from the previous version) with the one from the Documentation and that actually made things worse. So I ended up redigging into mod_rewrite (again sigh) and rewrite the Rewrite Rules\u0026hellip; This time I\u0026rsquo;m documenting it.\n1 2 3 4 5 6 7 \u0026lt;IfModule mod_rewrite.c\u0026gt; RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !^/(img|images|css|js)/(.*)$ RewriteRule ^(.*)$ /index.php [QSA,L] \u0026lt;/IfModule\u0026gt; Keep in mind, this is part of my apache config, not a .htaccess file.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-12-02_vimbadmin-and-mod-rewrite/","summary":"\u003cp\u003eWell, I use ViMbAdmin for the mail box administration of my users (and aliases) on heimdaheim.de. After I while (well, over half a year I guess), I decided to look at it again. However it didn\u0026rsquo;t work. Well this was a multi-part problem.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eViMbAdmin has been updated to require PHP composer (which populates the vendor/ folder)\u003c/li\u003e\n\u003cli\u003ethe application.ini was outdated\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eAfter I fixed all that, ViMbAdmin was working again. However I decided to replace my mod_rewrite stuff (I had in my apache config from the previous version) with the one from the Documentation and that actually made things worse. So I ended up \u003cem\u003eredigging\u003c/em\u003e into mod_rewrite (again \u003cem\u003esigh\u003c/em\u003e) and rewrite the Rewrite Rules\u0026hellip; This time I\u0026rsquo;m documenting it.\u003c/p\u003e","title":"ViMbAdmin and mod_rewrite"},{"content":"Well, as I said earlier I\u0026rsquo;ve been playing around with my Sonos (and in that regard cleaning up my music library). Now, I started setting up my foobar2000 to ignore articles (The, A) when moving/copying file to my music library.\nFor example, previously the structure would have looked like this:\n1 albums\\T\\The Beatles - 1963-03-22 - Please Please Me Now, after implementing the file operations adjustments (I\u0026rsquo;ll post them later), the structure looks like this:\n1 albums\\B\\Beatles - 1963-03-22 - Please Please Me However the Album View will display the album artist as it\u0026rsquo;s presented in the MP3\u0026rsquo;s %album% tag. So, I needed to modify the Album List\u0026rsquo;s view. For that repeat these steps:\nGoto Preferences (Ctrl+P or File-\u0026gt;Preferences) Extend the Media Library node Switch to Album List I wanted to adjust the \u0026ldquo;by artist/album\u0026rdquo; view (since I only use that). The default code for that is as follows:\n1 [%album artist% - ][\u0026#39;[\u0026#39;%date%\u0026#39;]\u0026#39; ]%album%|[[%discnumber%.]%tracknumber%. ][%track artist% - ]%title% As with everything in foobar2000, that is configurable and uses the Title Formatting. After a short peek into the Foobar2000 forum, I found what I was looking for.\n1 [$if($strcmp($left(%album artist%,4),The ),$right(%album artist%,$sub($len(%album artist%),4))\u0026#39;, \u0026#39;The,%album artist%) - ][\u0026#39;[\u0026#39;$cut(%date%,4)\u0026#39;]\u0026#39; ]%album%|[[%discnumber%.]%tracknumber%. ][%track artist% - ]%title% ","permalink":"https://christian.blog.pakiheim.de/posts/2014-11-13_adjust-album-list-display-in-foobar2000/","summary":"\u003cp\u003eWell, as I said earlier I\u0026rsquo;ve been playing around with my Sonos (and in that regard cleaning up my music library). Now, I started setting up my foobar2000 to ignore articles (The, A) when moving/copying file to my music library.\u003c/p\u003e\n\u003cp\u003eFor example, previously the structure would have looked like this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ealbums\\T\\The Beatles - 1963-03-22 - Please Please Me\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eNow, after implementing the file operations adjustments (I\u0026rsquo;ll post them later), the structure looks like this:\u003c/p\u003e","title":"Adjust album list display in foobar2000"},{"content":"Well, Microsoft finally had an insight into the user complaints about not being able to download a (legal) Media Refresh ISO for people with preinstalled Windows 8(.1). Now, you just have to download the Media Creation Tool from http://windows.microsoft.com/en-us/windows-8/create-reset-refresh-media.\nIt\u0026rsquo;s portable, just execute the EXE and it\u0026rsquo;ll download you the selected Windows 8(.1) ISO you selected. Additionally, it finally accepts the Product Keys from Windows 8, which is a big step.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-11-13_download-a-legal-windows-8-1-media-refresh-iso/","summary":"\u003cp\u003eWell, Microsoft finally had an insight into the user complaints about not being able to download a (legal) Media Refresh ISO for people with preinstalled Windows 8(.1). Now, you just have to download the Media Creation Tool from \u003ca href=\"http://windows.microsoft.com/en-us/windows-8/create-reset-refresh-media\"\u003ehttp://windows.microsoft.com/en-us/windows-8/create-reset-refresh-media\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eIt\u0026rsquo;s portable, just execute the EXE and it\u0026rsquo;ll download you the selected Windows 8(.1) ISO you selected. Additionally, it finally accepts the Product Keys from Windows 8, which is a big step.\u003c/p\u003e","title":"Download a (legal) Windows 8-1 Media Refresh ISO"},{"content":"I\u0026rsquo;ve been cleaning up my music library the past few days (well, I bought a Sonos \u0026#x1f600;), so here\u0026rsquo;s how you display for example the tagging field MUSICBRAINZ ALBUM TYPE in foobar2000\u0026rsquo;s default metadata view.\nGoto preferences (Ctrl+P or File-\u0026gt;Preferences) Navigate to Advanced Extend the Display node, extend Properties Dialoge node There you\u0026rsquo;ll find the option for Standard fields Change it to the following: 1 Artist Name=ARTIST;Track Title=TITLE;Album Title=ALBUM;Date=DATE;Genre=GENRE;Composer=COMPOSER;Performer=PERFORMER;Album Artist=ALBUM ARTIST;Track Number=TRACKNUMBER;Total Tracks=TOTALTRACKS;Disc Number=DISCNUMBER;Total Discs=TOTALDISCS;Comment=COMMENT;Album Type=MUSICBRAINZ ALBUM TYPE After changing the Standard fields option, the metadata view will look like this:\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-11-13_display-musicbrainz-info-in-foobar2000/","summary":"\u003cp\u003eI\u0026rsquo;ve been cleaning up my music library the past few days (well, I bought a Sonos \u0026#x1f600;), so here\u0026rsquo;s how you display for example the tagging field MUSICBRAINZ ALBUM TYPE in foobar2000\u0026rsquo;s default metadata view.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eGoto preferences (Ctrl+P or File-\u0026gt;Preferences)\u003c/li\u003e\n\u003cli\u003eNavigate to Advanced\u003c/li\u003e\n\u003cli\u003eExtend the Display node, extend Properties Dialoge node\u003c/li\u003e\n\u003cli\u003eThere you\u0026rsquo;ll find the option for Standard fields\u003c/li\u003e\n\u003cli\u003eChange it to the following:\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eArtist Name=ARTIST;Track Title=TITLE;Album Title=ALBUM;Date=DATE;Genre=GENRE;Composer=COMPOSER;Performer=PERFORMER;Album Artist=ALBUM ARTIST;Track Number=TRACKNUMBER;Total Tracks=TOTALTRACKS;Disc Number=DISCNUMBER;Total Discs=TOTALDISCS;Comment=COMMENT;Album Type=MUSICBRAINZ ALBUM TYPE\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAfter changing the Standard fields option, the metadata view will look like this:\u003c/p\u003e","title":"Display MusicBrainz info in foobar2000"},{"content":"Well, since most trainers won\u0026rsquo;t enable me to become \u0026ldquo;GOD\u0026rdquo; (yeah, I guess I\u0026rsquo;m too stupid for ARmA III), here\u0026rsquo;s a list of commands that\u0026rsquo;ll change things.\nDisable damage to player and teammates:\n1 { _x allowDamage false; } foreach units group player; Disable player fatigue:\n1 player enableFatigue true; player enableFatigue false; ","permalink":"https://christian.blog.pakiheim.de/posts/2014-10-27_arma-iii-cheats/","summary":"\u003cp\u003eWell, since most trainers won\u0026rsquo;t enable me to become \u0026ldquo;GOD\u0026rdquo; (yeah, I guess I\u0026rsquo;m too stupid for ARmA III), here\u0026rsquo;s a list of commands that\u0026rsquo;ll change things.\u003c/p\u003e\n\u003cp\u003eDisable damage to player and teammates:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{ _x allowDamage false; } foreach units group player;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eDisable player fatigue:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-1-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eplayer enableFatigue true; player enableFatigue false;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"ARmA III - Cheats"},{"content":"Here\u0026rsquo;s an easy way to update the OpenELEC running on a CuBox-i easily:\n1 2 3 cd ~/.update curl http://snapshots.openelec.tv/`curl http://snapshots.openelec.tv/ | grep OpenELEC-Cuboxi | cut -d\\\u0026#34; -f2` | tar x mv OpenELEC*/target/* . \u0026amp;\u0026amp; rm -r OpenELEC* ","permalink":"https://christian.blog.pakiheim.de/posts/2014-10-20_openelec-on-cubox-i-update-to-latest-snapshot/","summary":"\u003cp\u003eHere\u0026rsquo;s an easy way to update the OpenELEC running on a CuBox-i easily:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecd ~/.update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl http://snapshots.openelec.tv/`curl http://snapshots.openelec.tv/ | grep OpenELEC-Cuboxi | cut -d\\\u0026#34; -f2` | tar x\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emv OpenELEC*/target/* . \u0026amp;\u0026amp; rm -r OpenELEC*\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"OpenELEC on CuBox i - Update to latest snapshot"},{"content":"Well, I\u0026rsquo;ve been playing around with PowerShell today. I had the task to move (as in change the IP address) two domain controllers into another VLAN. I could have done it the easy way and added the DNS servers by hand (by RDP\u0026rsquo;ing to each system having these particular DNS servers configured) - which wouldn\u0026rsquo;t have been very hard considering the domain only has 7 members at this point \u0026hellip;\nI wanted to do it the proper way, so I ended up asking old uncle Google, and it supplied me with the answers I was looking for.\n1 2 3 4 5 6 7 PS \u0026gt; Get-ADComputer -SearchBase ` \u0026#39;OU=Server,OU=Devicesdc=ka,dc=home,dc=heimdaheim,dc=de\u0026#39; ` -Filter \u0026#39;*\u0026#39; | Select dnshostname | foreach { \u0026gt;\u0026gt; Invoke-Command -ScriptBlock {Get-NetAdapter -Name Ethernet | ` Set-DnsClientServerAddress -ServerAddresses (\u0026#34;10.76.15.20\u0026#34;, \u0026#34;10.76.15.20\u0026#34;, \u0026#34;10.75.20.20\u0026#34;, \u0026#34;10.75.20.21\u0026#34;)} ` -ComputerName $_.dnshostname \u0026gt;\u0026gt; } Now, I executed those few PowerShell lines before changing the IP address of both domain controllers (10.76.15.20 being the old IP and 10.76.20.20 being the new one). After that I changed the IP address on the second (and after a short downtime) on the first domain controller. After both were restored and available again (and I checked with repadmin /showrepl), I ran the script again, this time only setting the new DCs:\n1 2 3 4 5 6 7 PS \u0026gt; Get-ADComputer -SearchBase ` \u0026#39;OU=Server,OU=Devicesdc=ka,dc=home,dc=heimdaheim,dc=de\u0026#39; ` -Filter \u0026#39;*\u0026#39; | Select dnshostname | foreach { \u0026gt;\u0026gt; Invoke-Command -ScriptBlock {Get-NetAdapter -Name Ethernet | ` Set-DnsClientServerAddress -ServerAddresses (\u0026#34;10.75.20.20\u0026#34;, \u0026#34;10.75.20.21\u0026#34;)} ` -ComputerName $_.dnshostname \u0026gt;\u0026gt; } Well, considering the time I spent on looking for this and the time I would have needed to change even the seven members - even this is a time saver.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-10-01_powershell-and-how-to-add-new-dns-servers-to-remote-systems/","summary":"\u003cp\u003eWell, I\u0026rsquo;ve been playing around with PowerShell today. I had the task to move (as in change the IP address) two domain controllers into another VLAN. I could have done it the easy way and added the DNS servers by hand (by RDP\u0026rsquo;ing to each system having these particular DNS servers configured) - which wouldn\u0026rsquo;t have been very hard considering the domain only has 7 members at this point \u0026hellip;\u003c/p\u003e","title":"PowerShell - and how to add new DNS servers to remote systems"},{"content":"Well, I recently decided to rename a bunch of my Standard Port Groups, since they did no longer reflect the network they were providing. Since I\u0026rsquo;m a lazy bastard (well lazy as in click lazy), I wrote this little PowerCLI script:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 param( [string] $vcenter, [string] $cluster, [string] $oldpg, [string] $newpg, [string] $vlan ) # Add the VI-Snapin if it isn\u0026#39;t loaded already if ( (Get-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; -ErrorAction SilentlyContinue) -eq $null ) { Add-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; } If ( !($vcenter) -or !($cluster) -or !($oldpg) -or !($newpg) -or !($vlan) ) { Write-Host `n \u0026#34;pg-cluster-rename: \u0026lt;vcenter-server\u0026gt; \u0026lt;cluster\u0026gt; \u0026lt;oldpg\u0026gt; \u0026lt;newpg\u0026gt;\u0026#34; `n Write-Host \u0026#34;This script renames each port group with the name \u0026lt;oldpg\u0026gt; to \u0026lt;newpg\u0026gt;\u0026#34; `n Write-Host \u0026#34; \u0026lt;vcenter-server\u0026gt; - DNS name of your vCenter server.\u0026#34; `n Write-Host \u0026#34; \u0026lt;cluster\u0026gt; - Display-Name of the vCenter cluster, on which we are\u0026#34; Write-Host \u0026#34; gonna create the new portgroup.\u0026#34; `n Write-Host \u0026#34; \u0026lt;oldpg\u0026gt; - Name of the old Port Group that is to be replaced (ie VLAN2).\u0026#34; `n Write-Host \u0026#34; \u0026lt;newpg\u0026gt; - Name of the new Port Group (ie PG-VLAN2-Produktion).\u0026#34; `n Write-Host \u0026#34; \u0026lt;vlan\u0026gt; - VLAN-ID for of the new port group.\u0026#34; `n exit 1 } Connect-VIServer -Server $vcenter Get-Cluster $cluster | Get-VMHost | Get-VirtualSwitch -Name $vswitch | ` New-VirtualPortGroup -Name $pg -VLanId $vlan Get-Cluster $cluster | Get-VM | Get-NetworkAdapter | Where { $_.NetworkName -eq \u0026#34;$oldpg\u0026#34; } | ` Set-NetworkAdapter -NetworkName $newpg -Confirm:$false Get-Cluster $cluster | Get-VMHost | %{Get-View (Get-View $_.ID).configmanager.networkSystem} | %{ $_.RemovePortGroup($oldpg) } Disconnect-VIServer -server $vcenter -Confirm:$false This script basically takes a vCenter instance and a single cluster, then creates a new Port Group on each host, after which it reconfigures all VMs possessing a virtual NIC with that Port Group and then deletes the old Port Group.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-09-24_rename-a-standard-port-group-on-all-hosts-in-a-cluster/","summary":"\u003cp\u003eWell, I recently decided to rename a bunch of my Standard Port Groups, since they did no longer reflect the network they were providing. Since I\u0026rsquo;m a lazy bastard (well lazy as in click lazy), I wrote this little PowerCLI script:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eparam\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evcenter\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ecluster\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eoldpg\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003enewpg\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evlan\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Add the VI-Snapin if it isn\u0026#39;t loaded already\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ePSSnapin\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eName\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;VMware.VimAutomation.Core\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eErrorAction\u003c/span\u003e \u003cspan class=\"n\"\u003eSilentlyContinue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eeq\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eAdd\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ePSSnapin\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eName\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;VMware.VimAutomation.Core\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eIf\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"o\"\u003e!\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evcenter\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"ow\"\u003eor\u003c/span\u003e \u003cspan class=\"o\"\u003e!\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ecluster\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"ow\"\u003eor\u003c/span\u003e \u003cspan class=\"o\"\u003e!\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eoldpg\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"ow\"\u003eor\u003c/span\u003e \u003cspan class=\"o\"\u003e!\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003enewpg\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"ow\"\u003eor\u003c/span\u003e \u003cspan class=\"o\"\u003e!\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evlan\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pg-cluster-rename: \u0026lt;vcenter-server\u0026gt; \u0026lt;cluster\u0026gt; \u0026lt;oldpg\u0026gt; \u0026lt;newpg\u0026gt;\u0026#34;\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;This script renames each port group with the name \u0026lt;oldpg\u0026gt; to \u0026lt;newpg\u0026gt;\u0026#34;\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;   \u0026lt;vcenter-server\u0026gt;  - DNS name of your vCenter server.\u0026#34;\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;   \u0026lt;cluster\u0026gt;         - Display-Name of the vCenter cluster, on which we are\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;                       gonna create the new portgroup.\u0026#34;\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;   \u0026lt;oldpg\u0026gt;           - Name of the old Port Group that is to be replaced (ie VLAN2).\u0026#34;\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;   \u0026lt;newpg\u0026gt;           - Name of the new Port Group (ie PG-VLAN2-Produktion).\u0026#34;\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;   \u0026lt;vlan\u0026gt;            - VLAN-ID for of the new port group.\u0026#34;\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eexit\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eConnect\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVIServer\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eServer\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evcenter\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eCluster\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ecluster\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVMHost\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVirtualSwitch\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eName\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evswitch\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eNew\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVirtualPortGroup\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eName\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003epg\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVLanId\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evlan\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eCluster\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ecluster\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVM\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eNetworkAdapter\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eWhere\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003e_\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eNetworkName\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eeq\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;$oldpg\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eSet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eNetworkAdapter\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eNetworkName\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003enewpg\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eConfirm\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"bp\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eCluster\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ecluster\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVMHost\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eView\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eView\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003e_\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eID\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econfigmanager\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003enetworkSystem\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003e_\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eRemovePortGroup\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eoldpg\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eDisconnect\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVIServer\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eserver\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evcenter\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eConfirm\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"bp\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThis script basically takes a vCenter instance and a single cluster, then creates a new Port Group on each host, after which it reconfigures all VMs possessing a virtual NIC with that Port Group and then deletes the old Port Group.\u003c/p\u003e","title":"Rename a Standard Port Group on all hosts in a cluster"},{"content":"Well, I have a few directories containing comics (in JPG/PNG) format. Since I\u0026rsquo;m lazy and didn\u0026rsquo;t want to create a 7z by hand for each directory, I wrote a short script that\u0026rsquo;ll do the work for me \u0026#x1f604;\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 #!/bin/bash # Mangle IFS, since space is a valid default IFS SAVEIFS=$IFS IFS=$(echo -en \u0026#34;\\n\u0026#34;) # Locate the 7z binary if [ -x \u0026#34;/usr/bin/7zr\u0026#34; ] ; then ZIP=\u0026#39;/usr/bin/7zr\u0026#39; fi if [ -x \u0026#34;/usr/syno/bin/7z\u0026#34; ] ; then ZIP=\u0026#39;/usr/syno/bin/7z\u0026#39; fi ORIG_DIR=\u0026#34;$PWD\u0026#34; #find $DIR -mindepth 1 -maxdepth 1 -type d -print0 | sed \u0026#34;s,./,,\u0026#34; | while IFS= read -r -d \u0026#39;\u0026#39; dir; do find $DIR -mindepth 1 -maxdepth 1 -type d -print0 | while IFS= read -r -d \u0026#39;\u0026#39; dir; do dir=\u0026#34;${dir##*/}\u0026#34; case $dir in extracted|@eaDir*) continue;; esac ARCHIVE=\u0026#34;${dir}\u0026#34; # Remove tags from file names ARCHIVE=\u0026#34;$( echo $ARCHIVE | sed -e \u0026#34;s,\\[SaHa\\] ,,g\u0026#34; )\u0026#34; ARCHIVE=\u0026#34;$( echo $ARCHIVE | sed \u0026#39;s/([^)]*)//g\u0026#39; )\u0026#34; ARCHIVE=\u0026#34;$( echo $ARCHIVE | sed -e \u0026#34;s,_, ,g\u0026#34; )\u0026#34; ARCHIVE=\u0026#34;$( echo $ARCHIVE | sed -e \u0026#39;s/[ \\t]*$//\u0026#39; )\u0026#34; # Decide, whether \u0026#34;,\u0026#34; or \u0026#34;-\u0026#34; separates writer and series # Get series and author from directory name WRITER=\u0026#34;$( echo ${ARCHIVE} | cut -d, -f1 | sed \u0026#34;s,./,,\u0026#34; )\u0026#34; SERIES=\u0026#34;$( echo ${ARCHIVE} | cut -d, -f2- | sed -e \u0026#39;s/^[ \\t]*//\u0026#39; )\u0026#34; # Check if the pictures are directly beyond the subdirectory. Otherwise # report the directory and skip it. HAS_PICTURES=\u0026#34;$( find \u0026#34;$dir\u0026#34; -mindepth 1 -maxdepth 1 -type f -regex \u0026#34;.*\\.\\(PNG\\|png\\|jpg\\|JPG\\|jpeg\\|JPG\\)\u0026#34; | wc -l )\u0026#34; if [ \u0026#34;$HAS_PICTURES\u0026#34; -lt 1 ] ; then echo echo \u0026#34;Attention: $dir\u0026#34; echo \u0026#34;has no pictures in the immediate directory. Please move the pictures\u0026#34; echo \u0026#34;from the subdirectory to the immediate directory.\u0026#34; echo continue fi # Create a bare ComicInfo.xml cat \u0026gt; \u0026#34;$dir/ComicInfo.xml\u0026#34; \u0026lt;\u0026lt; EOF \u0026lt;?xml version=\u0026#34;1.0\u0026#34;?\u0026gt; \u0026lt;ComicInfo xmlns:xsd=\u0026#34;http://www.w3.org/2001/XMLSchema\u0026#34; xmlns:xsi=\u0026#34;http://www.w3.org/2001/XMLSchema-instance\u0026#34;\u0026gt; \u0026lt;Series\u0026gt;$SERIES\u0026lt;/Series\u0026gt; \u0026lt;Writer\u0026gt;$WRITER\u0026lt;/Writer\u0026gt; \u0026lt;Genre\u0026gt;Adult\u0026lt;/Genre\u0026gt; \u0026lt;LanguageISO\u0026gt;en\u0026lt;/LanguageISO\u0026gt; \u0026lt;AgeRating\u0026gt;Adults Only 18+\u0026lt;/AgeRating\u0026gt; \u0026lt;/ComicInfo\u0026gt; EOF if [ -f \u0026#34;$ORIG_DIR/$ARCHIVE.cb7\u0026#34; ] ; then echo \u0026#34;$ARCHIVE.cb7: Skipping, since the new archive already exists ?\u0026#34; continue else cd \u0026#34;$dir\u0026#34; # Create the cb7 archive echo \u0026#34;Creating $ARCHIVE.cb7\u0026#34; ret=$( $ZIP a \u0026#34;$ORIG_DIR/$ARCHIVE.cb7\u0026#34; * \u0026amp;\u0026gt;/dev/null \u0026amp;\u0026amp; echo 0 || echo 1 ) cd $ORIG_DIR if [ $ret -eq 0 -a -f \u0026#34;$ORIG_DIR/$ARCHIVE.cb7\u0026#34; ] ; then rm -rf \u0026#34;$dir\u0026#34; \u0026amp;\u0026gt;/dev/null fi fi done # restore $IFS IFS=$SAVEIFS ","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-31_create-comicrack-compatible-cb7-archives/","summary":"\u003cp\u003eWell, I have a few directories containing comics (in JPG/PNG) format. Since I\u0026rsquo;m lazy and didn\u0026rsquo;t want to create a 7z by hand for each directory, I wrote a short script that\u0026rsquo;ll do the work for me \u0026#x1f604;\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e44\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-45\"\u003e45\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-46\"\u003e46\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-47\"\u003e47\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-48\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-48\"\u003e48\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-49\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-49\"\u003e49\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-50\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-50\"\u003e50\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-51\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-51\"\u003e51\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-52\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-52\"\u003e52\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-53\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-53\"\u003e53\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-54\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-54\"\u003e54\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-55\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-55\"\u003e55\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-56\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-56\"\u003e56\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-57\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-57\"\u003e57\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-58\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-58\"\u003e58\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-59\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-59\"\u003e59\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-60\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-60\"\u003e60\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-61\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-61\"\u003e61\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-62\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-62\"\u003e62\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-63\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-63\"\u003e63\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-64\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-64\"\u003e64\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-65\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-65\"\u003e65\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-66\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-66\"\u003e66\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-67\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-67\"\u003e67\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-68\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-68\"\u003e68\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-69\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-69\"\u003e69\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-70\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-70\"\u003e70\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-71\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-71\"\u003e71\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-72\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-72\"\u003e72\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-73\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-73\"\u003e73\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-74\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-74\"\u003e74\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-75\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-75\"\u003e75\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-76\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-76\"\u003e76\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-77\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-77\"\u003e77\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-78\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-78\"\u003e78\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-79\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-79\"\u003e79\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-80\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-80\"\u003e80\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-81\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-81\"\u003e81\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-82\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-82\"\u003e82\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-83\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-83\"\u003e83\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-84\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-84\"\u003e84\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Mangle IFS, since space is a valid default IFS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eSAVEIFS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$IFS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eIFS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e -en \u003cspan class=\"s2\"\u003e\u0026#34;\\n\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Locate the 7z binary\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -x \u003cspan class=\"s2\"\u003e\u0026#34;/usr/bin/7zr\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"nv\"\u003eZIP\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;/usr/bin/7zr\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -x \u003cspan class=\"s2\"\u003e\u0026#34;/usr/syno/bin/7z\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eZIP\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;/usr/syno/bin/7z\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eORIG_DIR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PWD\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#find $DIR -mindepth 1 -maxdepth 1 -type d -print0 | sed \u0026#34;s,./,,\u0026#34; | while IFS= read -r -d \u0026#39;\u0026#39; dir; do\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efind \u003cspan class=\"nv\"\u003e$DIR\u003c/span\u003e -mindepth \u003cspan class=\"m\"\u003e1\u003c/span\u003e -maxdepth \u003cspan class=\"m\"\u003e1\u003c/span\u003e -type d -print0 \u003cspan class=\"p\"\u003e|\u003c/span\u003e \u003cspan class=\"k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"nv\"\u003eIFS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eread\u003c/span\u003e -r -d \u003cspan class=\"s1\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e dir\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003edir\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003edir\u003c/span\u003e\u003cspan class=\"p\"\u003e##*/\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nv\"\u003e$dir\u003c/span\u003e in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                extracted\u003cspan class=\"p\"\u003e|\u003c/span\u003e@eaDir*\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"k\"\u003econtinue\u003c/span\u003e\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eesac\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eARCHIVE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003edir\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Remove tags from file names\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eARCHIVE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$ARCHIVE\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed -e \u003cspan class=\"s2\"\u003e\u0026#34;s,\\[SaHa\\] ,,g\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eARCHIVE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$ARCHIVE\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s1\"\u003e\u0026#39;s/([^)]*)//g\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eARCHIVE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$ARCHIVE\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed -e \u003cspan class=\"s2\"\u003e\u0026#34;s,_, ,g\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eARCHIVE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$ARCHIVE\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed -e \u003cspan class=\"s1\"\u003e\u0026#39;s/[ \\t]*$//\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Decide, whether \u0026#34;,\u0026#34; or \u0026#34;-\u0026#34; separates writer and series\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Get series and author from directory name\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eWRITER\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eARCHIVE\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d, -f1 \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s2\"\u003e\u0026#34;s,./,,\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eSERIES\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eARCHIVE\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d, -f2- \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed -e \u003cspan class=\"s1\"\u003e\u0026#39;s/^[ \\t]*//\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Check if the pictures are directly beyond the subdirectory. Otherwise\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# report the directory and skip it.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eHAS_PICTURES\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e find \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$dir\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e -mindepth \u003cspan class=\"m\"\u003e1\u003c/span\u003e -maxdepth \u003cspan class=\"m\"\u003e1\u003c/span\u003e -type f -regex \u003cspan class=\"s2\"\u003e\u0026#34;.*\\.\\(PNG\\|png\\|jpg\\|JPG\\|jpeg\\|JPG\\)\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e wc -l \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$HAS_PICTURES\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e -lt \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Attention: \u003c/span\u003e\u003cspan class=\"nv\"\u003e$dir\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;has no pictures in the immediate directory. Please move the pictures\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;from the subdirectory to the immediate directory.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003econtinue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Create a bare ComicInfo.xml\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        cat \u0026gt; \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$dir\u003c/span\u003e\u003cspan class=\"s2\"\u003e/ComicInfo.xml\u0026#34;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; EOF\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\u0026lt;?xml version=\u0026#34;1.0\u0026#34;?\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\u0026lt;ComicInfo xmlns:xsd=\u0026#34;http://www.w3.org/2001/XMLSchema\u0026#34; xmlns:xsi=\u0026#34;http://www.w3.org/2001/XMLSchema-instance\u0026#34;\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e  \u0026lt;Series\u0026gt;$SERIES\u0026lt;/Series\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e  \u0026lt;Writer\u0026gt;$WRITER\u0026lt;/Writer\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e  \u0026lt;Genre\u0026gt;Adult\u0026lt;/Genre\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e  \u0026lt;LanguageISO\u0026gt;en\u0026lt;/LanguageISO\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e  \u0026lt;AgeRating\u0026gt;Adults Only 18+\u0026lt;/AgeRating\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\u0026lt;/ComicInfo\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eEOF\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -f \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$ORIG_DIR\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$ARCHIVE\u003c/span\u003e\u003cspan class=\"s2\"\u003e.cb7\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$ARCHIVE\u003c/span\u003e\u003cspan class=\"s2\"\u003e.cb7: Skipping, since the new archive already exists ?\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003econtinue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003ecd\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$dir\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"c1\"\u003e# Create the cb7 archive\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Creating \u003c/span\u003e\u003cspan class=\"nv\"\u003e$ARCHIVE\u003c/span\u003e\u003cspan class=\"s2\"\u003e.cb7\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nv\"\u003eret\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nv\"\u003e$ZIP\u003c/span\u003e a \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$ORIG_DIR\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$ARCHIVE\u003c/span\u003e\u003cspan class=\"s2\"\u003e.cb7\u0026#34;\u003c/span\u003e * \u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e\u0026gt;/dev/null \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003ecd\u003c/span\u003e \u003cspan class=\"nv\"\u003e$ORIG_DIR\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$ret\u003c/span\u003e -eq \u003cspan class=\"m\"\u003e0\u003c/span\u003e -a -f \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$ORIG_DIR\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$ARCHIVE\u003c/span\u003e\u003cspan class=\"s2\"\u003e.cb7\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        rm -rf \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$dir\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e\u0026gt;/dev/null\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# restore $IFS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eIFS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$SAVEIFS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Create ComicRack compatible cb7 archives"},{"content":"Well, I\u0026rsquo;ve had my share of troubles with Hetzner, Debian, KVM and IPv6 addresses. After figuring out how to get around the IPv6 neighbor stuff (npd6 for teh win!), I battled with the problem that after restarting (rebooting/resetting - doesn\u0026rsquo;t really matter) a domain it\u0026rsquo;s IPv6 address would no longer work.\nWell, today I decided to take a closer look. After the reboot, the guest comes up with this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 pinguinfuss:(thanatos.heimdaheim.de/webs) PWD:~ Mon Sep 09, 19:01:27 [0] \u0026gt; ip a 1: lo: \u0026lt;LOOPBACK,UP,LOWER_UP\u0026gt; mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:96:ed:35 brd ff:ff:ff:ff:ff:ff inet 78.46.37.114 peer 78.46.37.118/32 brd 78.46.37.114 scope global eth0 inet6 2a01:4f8:110:3148::5/64 scope global tentative dadfailed valid_lft forever preferred_lft forever inet6 fe80::5054:ff:fe96:ed35/64 scope link valid_lft forever preferred_lft forever A quick peek into ip 6 neigh show reveals this:\n1 2 3 pinguinfuss:(kvm.heimdaheim.de/KVM) PWD:~ Mon Sep 09, 19:02:27 [0] \u0026gt; sudo ip -6 neigh show 2a01:4f8:110:3148::5 dev eth0 FAILED At this point I had no idea were to look (I haven\u0026rsquo;t used IPv6 much), so thanks to a friend I ended up googling whatever dadfailed meant \u0026hellip; as it turns out dadfailed indicates that a duplicate address had been detected. A short peek into kern.log/dmesg fuelled that idea:\n1 2 3 pinguinfuss:(thanatos.heimdaheim.de/webs) PWD:/var/log Mon Sep 09, 19:33:46 [0] \u0026gt; sudo grep eth kern.log Sep 9 19:03:25 thanatos kernel: [ 9.150549] eth0: IPv6 duplicate address 2a01:4f8:110:3148::5 detected! So, I went on googling IPv6, KVM and duplicate address, and guess what .. I don\u0026rsquo;t seem to be the only one that has this issue \u0026hellip; I haven\u0026rsquo;t found the root cause of this, but I have a quick fix \u0026hellip; I usually don\u0026rsquo;t assign duplicate IPv6 addresses to multiple domains (each domain has it\u0026rsquo;s on block of IPv6 addresses), so I ended up writing a short puppet class, that\u0026rsquo;ll disable the Duplicate Adress Detection for all my KVM guests!\n1 2 3 4 5 6 7 8 class kvm-ipv6-domain { file { \u0026#39;kvm-ipv6.conf\u0026#39;: path =\u0026gt; \u0026#39;/etc/sysctl.d/kvm-ipv6.conf\u0026#39;, ensure =\u0026gt; \u0026#39;present\u0026#39;, mode =\u0026gt; \u0026#39;0644\u0026#39;, content =\u0026gt; \u0026#39;net.ipv6.conf.eth0.accept_dad=0\u0026#39;, } } ","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-25_hetzner-debian-kvm-and-ipv6/","summary":"\u003cp\u003eWell, I\u0026rsquo;ve had my share of troubles with Hetzner, Debian, KVM and IPv6 addresses. After figuring out how to get around the IPv6 neighbor stuff (npd6 for teh win!), I battled with the problem that after restarting (rebooting/resetting - doesn\u0026rsquo;t really matter) a domain it\u0026rsquo;s IPv6 address would no longer work.\u003c/p\u003e\n\u003cp\u003eWell, today I decided to take a closer look. After the reboot, the guest comes up with this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epinguinfuss:(thanatos.heimdaheim.de/webs) PWD:~\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eMon Sep 09, 19:01:27 [0] \u0026gt; ip a\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1: lo: \u0026lt;LOOPBACK,UP,LOWER_UP\u0026gt; mtu 16436 qdisc noqueue state UNKNOWN\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    inet 127.0.0.1/8 scope host lo\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    inet6 ::1/128 scope host\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       valid_lft forever preferred_lft forever\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2: eth0: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc pfifo_fast state UP qlen 1000\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    link/ether 52:54:00:96:ed:35 brd ff:ff:ff:ff:ff:ff\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    inet 78.46.37.114 peer 78.46.37.118/32 brd 78.46.37.114 scope global eth0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    inet6 2a01:4f8:110:3148::5/64 scope global tentative dadfailed\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       valid_lft forever preferred_lft forever\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    inet6 fe80::5054:ff:fe96:ed35/64 scope link\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       valid_lft forever preferred_lft forever\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eA quick peek into ip 6 neigh show reveals this:\u003c/p\u003e","title":"Hetzner, Debian, KVM and IPv6"},{"content":"Well, as I wrote recently, we received a new BladeCenter a few weeks back. Now, as we slowly take it into service I was interested in watching the utilization of the back planes as well as the CPU utilization of the Cisco Catalyst 3012 network switches.\nThe first mistake I made, was to trust Cisco with their guide about how to get the utilization from the device using SNMP. They stated some OID\u0026rsquo;s, which I tried with snmpwalk and got a result from.\n1 2 snmpwalk -v1 -c public -O n 10.0.0.35 .1.3.6.1.4.1.9.5.1.1.8 .1.3.6.1.4.1.9.5.1.1.8.0 = INTEGER: 0 Now, as I tried retrieving the SNMP data by means of the check_snmp plugin, I got some flaky results:\n1 2 3 4 /usr/lib/nagios/plugins/check_snmp -H 10.0.0.35 -C public .1.3.6.1.4.1.9.5.1.1.8 SNMP problem - No data received from host CMD: /usr/bin/snmpget -t 1 -r 5 -m \u0026#39;\u0026#39; -v 1 [authpriv] 10.0.0.35:161 Those of you, who read the excerpts carefully will notice the difference between snmpwalk and the OID I passed on to check_snmp.\nThe point being, the OID\u0026rsquo;s Cisco gave in their Design tech notes are either old, or just not accurate at all. After passing on the .0 to each value given by Cisco, the check_snmp is all honky dory and integrated into Nagios.\nAs usual, the Nagios definitions are further down, for those interested.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 define host { use generic-network host_name c3012-1 alias c3012-1.home.barfoo.org address 10.0.0.35 hostgroups network } define service { use generic-service host_name c3012-1 service_description SYS: Backplane utilization check_command check_snmpv1_public!.1.3.6.1.4.1.9.5.1.1.8.0!60!80! %!\u0026#34;Backplane utilization:\u0026#34; action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } define service { use generic-service host_name c3012-1 service_description SYS: CPU utilization - 5sec check_command check_snmpv1_public!.1.3.6.1.4.1.9.2.1.56.0!130!160! %!\u0026#34;CPU utilization (5sec):\u0026#34; action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } define service { use generic-service host_name c3012-1 service_description SYS: CPU utilization - 1min check_command check_snmpv1_public!.1.3.6.1.4.1.9.2.1.57.0!80!95! %!\u0026#34;CPU utilization (1min):\u0026#34; action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } define service { use generic-service host_name c3012-1 service_description SYS: CPU utilization - 5min check_command check_snmpv1_public!.1.3.6.1.4.1.9.2.1.58.0!35!60! %!\u0026#34;CPU utilization (5min):\u0026#34; action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } For now, the pnp4nagios graphing for the back plane utilization isn\u0026rsquo;t working (don\u0026rsquo;t ask me why). Also, it might be a good idea, to combine the CPU utilization commands into one, so you\u0026rsquo;d get a single graph out of it.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-20_nagios-integrating-cisco-switches/","summary":"\u003cp\u003eWell, as I wrote recently, we received a new BladeCenter a few weeks back. Now, as we slowly take it into service I was interested in watching the utilization of the back planes as well as the CPU utilization of the Cisco Catalyst 3012 network switches.\u003c/p\u003e\n\u003cp\u003eThe first mistake I made, was to trust Cisco with their guide about \u003ca href=\"http://www.cisco.com/en/US/tech/tk389/tk816/technologies_tech_note09186a0080094a96.shtml\"\u003ehow to get the utilization\u003c/a\u003e from \u003ca href=\"http://www.cisco.com/en/US/tech/tk648/tk362/technologies_tech_note09186a0080094a94.shtml\"\u003ethe device using SNMP\u003c/a\u003e. They stated some OID\u0026rsquo;s, which I tried with \u003cem\u003esnmpwalk\u003c/em\u003e and got a result from.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esnmpwalk -v1 -c public -O n 10.0.0.35 .1.3.6.1.4.1.9.5.1.1.8\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.1.3.6.1.4.1.9.5.1.1.8.0 = INTEGER: 0\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eNow, as I tried retrieving the SNMP data by means of the \u003cem\u003echeck_snmp\u003c/em\u003e plugin, I got some flaky results:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-1-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/usr/lib/nagios/plugins/check_snmp -H 10.0.0.35 -C public\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                   .1.3.6.1.4.1.9.5.1.1.8\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSNMP problem - No data received from host\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCMD: /usr/bin/snmpget -t 1 -r 5 -m \u0026#39;\u0026#39; -v 1 [authpriv] 10.0.0.35:161\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThose of you, who read the excerpts carefully will notice the difference between \u003cem\u003esnmpwalk\u003c/em\u003e and the OID I passed on to \u003cem\u003echeck_snmp\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003eThe point being, the OID\u0026rsquo;s Cisco gave in their Design tech notes are either old, or just not accurate at all. After passing on the \u003cstrong\u003e.0\u003c/strong\u003e to each value given by Cisco, the \u003cem\u003echeck_snmp\u003c/em\u003e is all honky dory and integrated into Nagios.\u003c/p\u003e\n\u003cp\u003eAs usual, the Nagios definitions are further down, for those interested.\u003c/p\u003e\n","title":"Nagios: Integrating Cisco switches"},{"content":"Well it\u0026rsquo;s mid of July and the weather seems to be my friend. 25°C ain\u0026rsquo;t that bad. I really liked the weather last week (although everyone at work was bitching about it being tooo warm \u0026#x1f61b;) and would like to keep it (for the rest of the year of course!).\nHrm, for everyone who loved the music within Kill Bill - Volume 1: Tomoyasu Hotei really rocks (playing Battle without Honor or Humanity).\nWork is finally getting interesting. The x366 have been delivered, as well as the new Netbay 42U rack and of course the optional Cisco Catalyst 3650. Hopefully my co-worker will let me work on those babies in a short time (I would really like to \u0026#x1f604;)\nAnd now to my Gentoo related work:\nI had an interesting conversation with Hendrik yesterday about some of his packages, and I\u0026rsquo;m taking over some of them \u0026hellip;\nI bumped sys-cluster/vzctl, hopefully all bugs related to the upstream changes (well I missed a config var in the init-script #138469) are now fixed. Oh yeah, they finally decided to switch to a sane versioning scheme. Thanks Kir and Igor!\nLinux VServer stuff is also approaching its final release (even if Herbert is always saying When its done. I\u0026rsquo;ll prepare the patch tarballs for 2.{0.2,1.1}_rc26 later.\nMeh, I nearly forgot to say thank you. Thanks a lot Mr. Bush. They just showed how the local waste disposal company is blocking the road with dumpsters while being protected by ~20 policemen \u0026hellip; And only to prevent anybody driving into the city with a car which could endanger Mr. President!\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_summer-finally/","summary":"\u003cp\u003eWell it\u0026rsquo;s mid of July and the weather seems to be my friend. 25°C ain\u0026rsquo;t that bad. I really liked the weather last week (although everyone at work was bitching about it being tooo warm \u0026#x1f61b;) and would like to keep it (for the rest of the year of course!).\u003c/p\u003e\n\u003cp\u003eHrm, for everyone who loved the music within \u003cstrong\u003eKill Bill - Volume 1\u003c/strong\u003e: \u003ca href=\"http://en.wikipedia.org/wiki/Tomoyasu_Hotei\"\u003eTomoyasu Hotei\u003c/a\u003e really rocks (playing \u003cstrong\u003eBattle without Honor or Humanity\u003c/strong\u003e).\u003c/p\u003e","title":"Summer - finally"},{"content":"Hrm, today I tried to install some extra programs I need for devel-stuff (quilt, git, subversion) on an ancient (not sooo ancient) SuSE Linux Enterprise Server 9.2.\nDid I already mention I hate rpm-based distros ? Ah and I missed to tell you, that I really love USE-flags \u0026hellip;\nOk, so it took me half the afternoon, to rebuild half of all installed packages (heh, kde* depends upon expat*; but who need X or even KDE on a server-machine?) and figured that everything was for nothing.\nI found no RPM/SRPM providing te_ams, so I couldn\u0026rsquo;t install xmlto, which in fact resulted that I couldn\u0026rsquo;t install git. Also took a look at the git.spec file, where something like \u0026ndash;without=docs is mentioned.\nEither its this ancient rpm-version, or that generally doesn\u0026rsquo;t work. So I\u0026rsquo;m fscked, not git on that machine and short-handed just ssh -e rsync\u0026rsquo;ed my local linux-git to that machine. It\u0026rsquo;s a bit inconvenient, but works.\nI\u0026rsquo;ll look into that tomorrow, maybe I even manage to get the damn git working on that machine (or even dump SLES9 in favour of SLES10 / Gentoo!).\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_sles-9-2/","summary":"\u003cp\u003eHrm, today I tried to install some extra programs I need for devel-stuff (quilt, git, subversion) on an \u003cem\u003eancient\u003c/em\u003e (not sooo ancient) SuSE Linux Enterprise Server 9.2.\u003c/p\u003e\n\u003cp\u003eDid I already mention \u003cstrong\u003eI hate\u003c/strong\u003e rpm-based distros ? Ah and I missed to tell you, that I \u003cstrong\u003ereally\u003c/strong\u003e love USE-flags \u0026hellip;\u003c/p\u003e\n\u003cp\u003eOk, so it took me half the afternoon, to rebuild half of all installed packages (heh, \u003cem\u003ekde*\u003c/em\u003e depends upon \u003cem\u003eexpat*\u003c/em\u003e; but who need \u003cem\u003eX\u003c/em\u003e or even \u003cem\u003eKDE\u003c/em\u003e on a server-machine?) and figured that everything was for nothing.\u003c/p\u003e","title":"SLES-9-2"},{"content":"On Monday I helped Ned fixing ebuilds using the following DEPEND/RDEPEND:\n1 *DEPEND=\u0026#34; || ( app-admin/eselect-compiler \u0026gt;=sys-devel/gcc-config-1.3.1 )\u0026#34; Problems only popped up because app-admin/eselect-compiler got masked due to numerous, unresolved bugs (and Jeremy/eradicator being MIA again).\nBut that also revealed a bug within portage on handling the || ( a b ), where a is being masked.\nSo solar and I had being working on updating those ebuilds that use the above syntax (or something similar, some are using other versions, thanks Sven for the hint/reminder).\nBut now I\u0026rsquo;m sitting here with a broken system (ask tsunam about yesterday evening, ~ 20:00 UTC), unable to switch gcc-versions (due to gcc-config-1.3 misbehaving in some way and always only setting the cross-compiler when it should set the native-compiler).\nI decided to reinstall the system from my kept binary packages (heh FEATURES=buildpkg ++), just backed up /etc (and left /home and /root). Will see how that turns out.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_portage-eselect-compiler/","summary":"\u003cp\u003eOn Monday I helped \u003ca href=\"http://blogs.gentoo.org/solar\"\u003eNed\u003c/a\u003e fixing ebuilds using the following DEPEND/RDEPEND:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e*DEPEND=\u0026#34; || ( app-admin/eselect-compiler \u0026gt;=sys-devel/gcc-config-1.3.1 )\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eProblems only popped up because app-admin/eselect-compiler got masked due to numerous, unresolved bugs (and Jeremy/eradicator being MIA again).\u003c/p\u003e\n\u003cp\u003eBut that also revealed \u003ca href=\"http://bugs.gentoo.org/143908\"\u003ea bug\u003c/a\u003e within portage on handling the || ( a b ), where a is being masked.\u003c/p\u003e\n\u003cp\u003eSo solar and I had being working on updating those ebuilds that use the above syntax (or something similar, some are using other versions, thanks Sven for the hint/reminder).\u003c/p\u003e","title":"portage / eselect-compiler"},{"content":"Ok, as I said earlier I\u0026rsquo;m currently reinstalling my system from scratch (to finally and completly get rid of stupid eselect-compiler).\nThe first attempt was a bit, ehrm, error-prone (as in unpacking stage3-i686-2006.0.tar.bz2, chroot ing to that and running emerge -ek system). Result was a b0rked chroot after the first two packages (heh, it was pulling in =sys-libs/glibc-2.4-r3 as the second package, thus everything that hasn\u0026rsquo;t been merged from my binpkg-repo and still originating from the snapshot being broken).\nAfter removing the whole stuff again, again unpacking the stage3 tarball I simply untar\u0026rsquo;ed all system related (or those that I thought were vital) tarballs into the /mnt/gentoo directory.\narg after I finished writing those lines, I tried sudo gcc-config 6 to see if that would work. And what happens ?\nSame old, same old \u0026hellip;\n1 2 * Switching cross-compiler to i686-linux-gnu-4.1.1\t[ ok ] \u0026gt;\u0026gt;\u0026gt; Regenerating /etc/ld.so.cache ","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_livecd-bootstraping-and-binary-packages/","summary":"\u003cp\u003eOk, as I said \u003ca href=\"/posts/2014-08-16_portage-eselect-compiler\" title=\"portage / eselect-compiler\"\u003eearlier\u003c/a\u003e I\u0026rsquo;m currently reinstalling my system from scratch (to finally and completly get rid of stupid eselect-compiler).\u003c/p\u003e\n\u003cp\u003eThe first attempt was a bit, ehrm, error-prone (as in unpacking \u003cem\u003estage3-i686-2006.0.tar.bz2\u003c/em\u003e, \u003cem\u003echroot\u003c/em\u003e ing to that and running \u003cem\u003eemerge -ek system\u003c/em\u003e). Result was a b0rked chroot after the first two packages (heh, it was pulling in \u003cem\u003e=sys-libs/glibc-2.4-r3\u003c/em\u003e as the second package, thus everything that hasn\u0026rsquo;t been merged from my binpkg-repo and still originating from the snapshot being broken).\u003c/p\u003e","title":"LiveCD, bootstraping and binary packages"},{"content":"OK, as some of you may now (hah, you\u0026rsquo;re really a dear Mr. Gulleen); I\u0026rsquo;m currently practicing an extended time-out (sort of) from Gentoo.\nI noticed devrel and all the other groups I have a responsibility for, that I\u0026rsquo;ll be more or less away till 30th November 2006. This is due some crazy stuff currently happening at work (like my desk being full of paperwork).\nI also lately thought about retiring myself from Gentoo, but haven\u0026rsquo;t come to a conclusion yet. I really enjoy the work currently, but I can\u0026rsquo;t find as much motivation/time as I used to find earlier this year. True, work is currently eating myself up completely, with all that provisioning (which hopefully ends around 30th November this year - note to head: accounting at German universities sucks !).\nWhat really annoys me lately on Gentoo is all the bitching / flaming on -core, in #gentoo-dev and on -dev. Boys can\u0026rsquo;t you act like adults and respect another persons opinion ? Whats the big deal to act like the person you are in your real life ? But I guess that\u0026rsquo;s only my personal opinion nobody is going to respect !\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_time-out/","summary":"\u003cp\u003eOK, as some of you may now (hah, you\u0026rsquo;re really a dear \u003ca href=\"http://blogs.gentoo.org/seemant/2006/11/09/i_lied_i_really_am_gulleen\"\u003eMr. Gulleen\u003c/a\u003e); I\u0026rsquo;m currently practicing an extended time-out (sort of) from Gentoo.\u003c/p\u003e\n\u003cp\u003eI noticed devrel and all the other groups I have a responsibility for, that I\u0026rsquo;ll be more or less away till 30th November 2006. This is due some crazy stuff currently happening at work (like my desk being full of paperwork).\u003c/p\u003e\n\u003cp\u003eI also lately thought about retiring myself from Gentoo, but haven\u0026rsquo;t come to a conclusion yet. I really enjoy the work currently, but I can\u0026rsquo;t find as much motivation/time as I used to find earlier this year. True, work is currently eating myself up completely, with all that provisioning (which hopefully ends around 30th November this year - note to head: accounting at German universities sucks !).\u003c/p\u003e","title":"Time-out"},{"content":"Heh, I managed to catch the S1 to Hellenberg and got of in Stuttgart Rohr. The S-Bahn doors nearly squashed me.\nI’m now at my aunt’s place, sitting on the sofa and relaxing a bit. My aunt was really happy when she saw me (as she always is if I or my brother comes by).\nI’ll go to bed in a few minutes, Saturday is getting really stressing. I need to get to my cousin and his wife (and my little grand cousins). I even need to buy a new LCD display for my aunt, since she somewhere red that those need 70% less power.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_db-adventure-travels-part-3/","summary":"\u003cp\u003eHeh, I managed to catch the S1 to Hellenberg and got of in Stuttgart Rohr. The S-Bahn doors nearly squashed me.\u003c/p\u003e\n\u003cp\u003eI’m now at my aunt’s place, sitting on the sofa and relaxing a bit. My aunt was really happy when she saw me (as she always is if I or my brother comes by).\u003c/p\u003e\n\u003cp\u003eI’ll go to bed in a few minutes, Saturday is getting really stressing. I need to get to my cousin and his wife (and my little grand cousins). I even need to buy a new LCD display for my aunt, since she somewhere red that those need 70% less power.\u003c/p\u003e","title":"DB Adventure Travels - part 3"},{"content":"So Uncle Seemant just conceded his defeat (at least for yesterday\u0026rsquo;s battle) which gives me something I barely have. But for today\u0026rsquo;s battle I guess I have to concede, as he has some valid points.\n#0: Why am I still awake ? It\u0026rsquo;s a bit after 12pm around here (that\u0026rsquo;s in Germany) and I\u0026rsquo;m usually in bed at that time, but not today. Basically I waited all the time for my dear Uncle Seemant to gimme his response, so I might be enlightened by his never ending wisdom. And I have to admit it was worth it \u0026#x1f61b; so kids, listen to your Uncle Seemant! The other part of it is, I just don\u0026rsquo;t want to go to bed, as I\u0026rsquo;m trying to avoid some nightmares with blood and killing people and stuff like that.\n#1: Weekend road trip Well I have to admit I thought about it, and it really sounds tempting, to leave the Notebook, even the damn cell phone at home, and just go some place no one can distract me. Not even those stupid thoughts \u0026hellip;\n#2: The reason for getting away Problem is, anything that would tempt me to get a look at is about \u0026gt;300km away, so that might be a no-go for the weekend. Yeah, I know. It sounds crazy, but I actually might go to church on Sunday, maybe even do a confession. Clubbing also sounds interesting (hrm, has been a while .. \u0026#x1f61b; and the last one had a bad ending) as does the Frisbee, but as you already noticed, it\u0026rsquo;s a bit too cold for that \u0026#x1f61b; If I were in Spain or Italy right now, that might be an option but not up here.\n#3: Hanging out with other people Well I guess there lies the problem within \u0026#x1f61b; I usually have a problem with people I don\u0026rsquo;t know, I actually fear them. I\u0026rsquo;m so terribly frightened they might eventually hurt me or my feelings (as it happened too often in the past), I don\u0026rsquo;t even want to know them.\n#4: Going off and being unable to think about something other You\u0026rsquo;re point is partly true, but when I\u0026rsquo;m off the hook, I can\u0026rsquo;t stop thinking about Gentoo, work and some people. Guess that\u0026rsquo;s a pretty hazardous combination \u0026hellip;\nA dear friend of mine phrased it this way today: \u0026quot; As long as you keep projecting all the stuff that happens around you onto yourself, you won\u0026rsquo;t get anything but sadness and depressions!\u0026quot;. And she even mentioned the letting go part !\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_seemant-never-ending-wisdom-and-work-confession/","summary":"\u003cp\u003eSo Uncle Seemant just \u003ca href=\"http://kulleen.org/seemant/blog/2006/nov/15/bloggo-war/\"\u003econceded his defeat\u003c/a\u003e (at least for yesterday\u0026rsquo;s battle) which gives me something I barely have. But for today\u0026rsquo;s battle I guess I have to concede, as he has some valid points.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e#0: Why am I still awake ?\u003c/strong\u003e\nIt\u0026rsquo;s a bit after 12pm around here (that\u0026rsquo;s in Germany) and I\u0026rsquo;m usually in bed at that time, but not today. Basically I waited all the time for my dear Uncle Seemant to gimme his response, so I might be enlightened by his never ending wisdom. And I have to admit it was worth it \u0026#x1f61b; so kids, listen to your Uncle Seemant! The other part of it is, I just don\u0026rsquo;t want to go to bed, as I\u0026rsquo;m trying to avoid some nightmares with blood and killing people and stuff like that.\u003c/p\u003e","title":"Seemant, never ending wisdom and work (confession)"},{"content":"Since one of the requirements for my current project is having NIC redundancy, I didn\u0026rsquo;t get around looking at the available \u0026quot; adapter teaming\u0026quot; (or adapter bonding) solutions available for Linux/SLES.\nFirst I tried to dig into the Broadcom solution (since the Blade I first implemented the stuff uses a Broadcom NetXtreme II card) , but found out pretty soon that the basp configuration tool, which is only available on the Broadcom driver CD\u0026rsquo;s shipped with the Blade itself, pretty much doesn\u0026rsquo;t work.\nSome hours googling later at how to get the frickin\u0026rsquo; Broadcom crap working, I stumbled upon a file linked as bonding.txt. Turns out, that the kernel already supports adapter teaming (only that it\u0026rsquo;s called adapter bonding) by itself. No need for the Broadcom solution anymore.\nSetting it up was rather easy (besides my lazy SUSE admin can\u0026rsquo;t do it via yast; it has to be done on the file layer since \u0026quot; yast lan\u0026quot; is too stupid to even show the thing), it\u0026rsquo;s simply creating the interface configs via said \u0026quot; yast lan\u0026quot;, copying one of the \u0026quot; ifcfg-eth-id\u0026quot; files to another file called \u0026quot; ifcfg-bond0\u0026quot;, removing some stuff out of it and cleaning out the other interface configs.\nThen simply shove in the following into the ifcfg-bond0 in /etc/sysconfig/network:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 IPADDR=\u0026#34;141.53.5.141\u0026#34; NETMASK=\u0026#34;255.255.255.0\u0026#34; NETWORK=\u0026#34;141.53.5.0\u0026#34; MTU=\u0026#34;\u0026#34; REMOTE_IPADDR=\u0026#34;\u0026#34; STARTMODE=\u0026#34;auto\u0026#34; BONDING_MASTER=\u0026#34;yes\u0026#34; BONDING_MODULE_OPTS=\u0026#34;miimon=100 mode=balance-alb\u0026#34; BONDING_SLAVE0=\u0026#34;bus-pci-0000:02:00.0\u0026#34; BONDING_SLAVE1=\u0026#34;bus-pci-0000:06:00.0\u0026#34; IPADDR_int=\u0026#34;172.16.234.41\u0026#34; NETMASK_int=\u0026#34;255.255.255.0\u0026#34; NETWORK_int=\u0026#34;172.16.234.0\u0026#34; LABEL_int=\u0026#34;int\u0026#34; That\u0026rsquo;s it .. We just defined an adapter IP (the 141.53.5.x) and an virtual interface labeled as \u0026quot; int\u0026quot;. We also configured the MII-Monitor to check every 100ms(?) the link of each interface (those defined in BONDING_SLAVEx) if they are either up or down, as well as the adaptive load balancing (\u0026quot; mode=balance-alb\u0026quot;).\nOnly thing annoying me with that solution is the following entry in /var/log/messages:\n1 2 3 4 5 6 7 8 9 10 11 12 13 Jul 4 18:32:00 dbc-mysql1 kernel: Ethernet Channel Bonding Driver: v3.0.1 (January 9, 2006) Jul 4 18:32:00 dbc-mysql1 kernel: bonding: Warning: either miimon or arp_interval and arp_ip_target module parameters must be specified, otherwise bonding will not detect link failures! see bonding.txt for details. Jul 4 18:32:00 dbc-mysql1 kernel: bonding: bond0: Setting MII monitoring interval to 100. Jul 4 18:32:00 dbc-mysql1 kernel: bonding: bond0: setting mode to balance-alb (6). Jul 4 18:32:00 dbc-mysql1 kernel: bnx2: eth1: using MSI Jul 4 18:32:00 dbc-mysql1 kernel: bonding: bond0: enslaving eth1 as an active interface with a down link. Jul 4 18:32:00 dbc-mysql1 kernel: bnx2: eth1 NIC Link is Up, 1000 Mbps full duplex Jul 4 18:32:00 dbc-mysql1 kernel: bonding: bond0: link status definitely up for interface eth1. Jul 4 18:32:00 dbc-mysql1 kernel: bonding: bond0: making interface eth1 the new active one. Jul 4 18:32:00 dbc-mysql1 kernel: bnx2: eth0: using MSI Jul 4 18:32:00 dbc-mysql1 kernel: bonding: bond0: enslaving eth0 as an active interface with a down link. Jul 4 18:32:00 dbc-mysql1 kernel: bnx2: eth0 NIC Link is Up, 1000 Mbps full duplex Jul 4 18:32:01 dbc-mysql1 kernel: bonding: bond0: link status definitely up for interface eth0. See the warning ? I can\u0026rsquo;t get it to shut up .. I also tried loading the mii.ko module, but it won\u0026rsquo;t shut up \u0026hellip; damn \u0026#x1f61e;\nWell, at least the adapter teaming works as desired (still haven\u0026rsquo;t measured the performance impact with this setup - really need a clever way to do that) and I can plug one of the two cables connected to this box and still have one interface online and a continuous connection. yay \u0026#x2757;\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_adapter-teaming-on-sles10/","summary":"\u003cp\u003eSince one of the requirements for my current project is having NIC redundancy, I didn\u0026rsquo;t get around looking at the available \u0026quot; \u003cem\u003eadapter teaming\u003c/em\u003e\u0026quot; (or adapter bonding) solutions available for Linux/SLES.\u003c/p\u003e\n\u003cp\u003eFirst I tried to dig into the Broadcom solution (since the Blade I first implemented the stuff uses a Broadcom NetXtreme II card) , but found out pretty soon that the basp configuration tool, which is \u003cem\u003e\u003cstrong\u003eonly\u003c/strong\u003e\u003c/em\u003e available on the Broadcom driver CD\u0026rsquo;s shipped with the Blade itself, pretty much doesn\u0026rsquo;t work.\u003c/p\u003e","title":"Adapter teaming on SLES10"},{"content":"In preparation to get our website (and all those other websites - like www.fh-neubrandenburg.de or www.hmt-rostock.de) clustered, someone bought the cluster version of the PacketPro 450. These things are nice, especially considering you don\u0026rsquo;t need to fiddle around with LVS yourself (which is a real pain in the ass).\nThe only problem I have currently with them is that they scan the database and web nodes every 30 seconds, and since we have an active node and a hot-standby both do this and producing this:\n1 2 3 4 5 6 7 8 9 10 11 12 Jul 4 18:27:29 dbc-mysql1 sshd[7313]: Did not receive identification string from 172.16.234.11 Jul 4 18:27:30 dbc-mysql1 sshd[7350]: Did not receive identification string from 172.16.234.12 Jul 4 18:27:59 dbc-mysql1 sshd[7363]: Did not receive identification string from 172.16.234.11 Jul 4 18:28:01 dbc-mysql1 sshd[7364]: Did not receive identification string from 172.16.234.12 Jul 4 18:28:31 dbc-mysql1 sshd[7393]: Did not receive identification string from 172.16.234.11 Jul 4 18:28:33 dbc-mysql1 sshd[7394]: Did not receive identification string from 172.16.234.12 Jul 4 18:29:04 dbc-mysql1 sshd[7417]: Did not receive identification string from 172.16.234.11 Jul 4 18:29:05 dbc-mysql1 sshd[7418]: Did not receive identification string from 172.16.234.12 Jul 4 18:29:36 dbc-mysql1 sshd[7419]: Did not receive identification string from 172.16.234.11 Jul 4 18:29:37 dbc-mysql1 sshd[7420]: Did not receive identification string from 172.16.234.12 Jul 4 18:30:06 dbc-mysql1 sshd[7419]: Did not receive identification string from 172.16.234.11 Jul 4 18:30:07 dbc-mysql1 sshd[7420]: Did not receive identification string from 172.16.234.12 That\u0026rsquo;s only the logs from three minutes \u0026hellip; now figure you have it running for like four days and figure what the average log size due to such crap is \u0026hellip; But at least it looks solvable, though I gonna have to call them tomorrow and ask for a patch/update to get their ssh-scan to send some banner when performing the service check.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_bloody-cluster-solutions/","summary":"\u003cp\u003eIn preparation to get our website (and all those other websites - like \u003ca href=\"http://www.fh-neubrandenburg.de\"\u003ewww.fh-neubrandenburg.de\u003c/a\u003e or \u003ca href=\"http://www.hmt-rostock.de\"\u003ewww.hmt-rostock.de\u003c/a\u003e) clustered, someone bought the cluster version of the \u003ca href=\"http://www.packetpro.de/content/view/63/112/\"\u003ePacketPro 450\u003c/a\u003e. These things are nice, especially considering you don\u0026rsquo;t need to fiddle around with LVS yourself (which is a \u003cem\u003e\u003cstrong\u003ereal\u003c/strong\u003e\u003c/em\u003e pain in the ass).\u003c/p\u003e\n\u003cp\u003eThe only problem I have currently with them is that they scan the database and web nodes every 30 seconds, and since we have an active node and a hot-standby both do this and producing this:\u003c/p\u003e","title":"Bloody cluster solutions"},{"content":"Since I got annoyed by umlauts being printed as ░, I figured I\u0026rsquo;d install a UTF-8 capable font on this box here and all my problems would be gone. But not so fast.\nscreen is a real fucked up thing. If you\u0026rsquo;re starting screen via screen -U everything is nice and cosy, and you get your UTF-8 goodness. But, don\u0026rsquo;t think you\u0026rsquo;ll get away with just enabling UTF-8 as default and enabling UTF-8 for each new window by doing this:\n1 2 defutf8 on utf8 on on You won\u0026rsquo;t get any UTF-8 char (at least w/ irssi) out of that .. \u0026#x1f620;\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_screen-and-utf-8/","summary":"\u003cp\u003eSince I got annoyed by umlauts being printed as ░, I figured I\u0026rsquo;d install a UTF-8 capable font on this box here and all my problems would be gone. But not so fast.\u003c/p\u003e\n\u003cp\u003escreen is a real fucked up thing. If you\u0026rsquo;re starting screen via \u003cem\u003escreen -U\u003c/em\u003e everything is nice and cosy, and you get your UTF-8 goodness. But, don\u0026rsquo;t think you\u0026rsquo;ll get away with just enabling UTF-8 as default and enabling UTF-8 for each new window by doing this:\u003c/p\u003e","title":"screen and UTF-8"},{"content":"Well, since our current solution for mapping printers is an ugly batch file, which needs to be put into Startup, I today poked at doing it in VBscript (I know, but it\u0026rsquo;s less ugly than the batch script, trust me).\nAs some of you know, printers are only applicable to users (as in you can\u0026rsquo;t put a startup script onto an OU, which is going to map the printers). So as we store users and the computes in different OU\u0026rsquo;s in our Active Directory (we do have about 15.000 students), I can\u0026rsquo;t apply the printer.vbs to the users OU directly either, unless I implement some intelligence into the script itself.\nAnd that\u0026rsquo;s basically what I did. Since different pools at the university have different DNS suffixes (like pools.rz.barfoo.org, that our or pools.fmz.barfoo.org) and we only want them students to have our printers when they logon at our pool, I just made the script to get the DNS DomainName of the current active interface and compare it against a given pattern.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 \u0026#39; The problem is, if you apply something like this the users get the printers regardless whether they \u0026#39; are at our location or a different one. So we either need to look up the current AD object (this computer), \u0026#39; or just compare our current DNS suffix/DomainName against a known pattern. \u0026#39; Now, lets get the DomainName from the WMI-Interface strComputer = \u0026#34;.\u0026#34; Set objWMIService = GetObject(\u0026#34;winmgmts:{impersonationLevel=impersonate}!\\.rootcimv2\u0026#34;) Set colNicConfigs = objWMIService.ExecQuery (\u0026#34;SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True\u0026#34;) For Each objNicConfig In colNicConfigs strDNSDomain = objNicConfig.DNSDomain Next \u0026#39; Apply some regexp foo, to see if we\u0026#39;re at the computing center or not! Dim regexp Set regexp = New RegExp regexp.Pattern = \u0026#34;pools.rz.barfoo.org\u0026#34; if regexp.Test(strDNSDomain) Then \u0026#39;If so, then lets just connect the printers we need! Set WshNetwork = CreateObject(\u0026#34;WScript.Network\u0026#34;) WshNetwork.AddWindowsPrinterConnection \u0026#34;\\nas.barfoo.orgKyocera Mita FS-9100DN KX\u0026#34; \u0026#39; Set the default printer to something useful WshNetwork.SetDefaultPrinter \u0026#34;\\nas.barfoo.orgKyocera Mita FS-9100DN KX\u0026#34; End If ","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_vbscript-amp-active-directory-and-printers/","summary":"\u003cp\u003eWell, since our current solution for mapping printers is an ugly batch file, which needs to be put into \u003cem\u003eStartup\u003c/em\u003e, I today poked at doing it in VBscript (I know, but it\u0026rsquo;s less ugly than the batch script, trust me).\u003c/p\u003e\n\u003cp\u003eAs some of you know, printers are only applicable to users (as in you can\u0026rsquo;t put a startup script onto an OU, which is going to map the printers). So as we store users and the computes in different OU\u0026rsquo;s in our Active Directory (we do have about 15.000 students), I can\u0026rsquo;t apply the printer.vbs to the users OU directly either, unless I implement some intelligence into the script itself.\u003c/p\u003e","title":"VBscript undamp; Active Directory and printers"},{"content":"OK, since Alex asked me last Sunday what exactly needs to be done to turn a simple chroot (or even a bloody box) into a binpkg producing environment, here\u0026rsquo;s a little howto \u0026hellip;\nFirst, lets start from a freshly unpacked stage3.\n1 2 3 4 5 catalyst/x86 stage3-amd64-hardened # chroot . /bin/bash --login # Now, make sure you turn on FEATURES=buildpkg # (and setup anything else you need, like CFLAGS, # LDFLAGS, whatever) linux # echo \u0026#39;FEATURES=\u0026#34;buildpkg\u0026#34;\u0026#39; \u0026gt;\u0026gt; /etc/make.conf With that single change you\u0026rsquo;re basically nearly finished with setting up the whole thing, the remaining things are just\nMaking sure the binary packages get to a web-enabled (either ftp or http) box, from where you\u0026rsquo;re going to fetch the binary packages to their target Make sure you use binary packages on the target systems by default But first, we\u0026rsquo;re gonna need to emerge something within that freshly created build chroot.\n1 2 3 4 # Let\u0026#39;s emerge some packages linux # emerge -e world -q ... (some minutes/hours/days later) linux # Since we now emerged some things we do have quite a few binary packages, which we are going to need on the target systems in order to avoid individual compile time.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 linux # cd /usr/portage/packages/; ls */* -rw-r--r-- 1 root root 780125 Oct 9 21:59 All/autoconf-2.61-r1.tbz2 -rw-r--r-- 1 root root 24648 Oct 9 21:32 All/autoconf-wrapper-4-r3.tbz2 -rw-r--r-- 1 root root 24331 Oct 9 21:32 All/automake-wrapper-3-r1.tbz2 -rw-r--r-- 1 root root 270794 Oct 9 22:07 All/baselayout-1.12.9-r2.tbz2 -rw-r--r-- 1 root root 734855 Oct 9 21:41 All/bash-3.2_p17.tbz2 -rw-r--r-- 1 root root 3546966 Oct 9 21:51 All/binutils-2.17-r1.tbz2 -rw-r--r-- 1 root root 23989 Oct 9 21:48 All/binutils-config-1.9-r4.tbz2 -rw-r--r-- 1 root root 536021 Oct 9 21:49 All/bison-2.3.tbz2 -rw-r--r-- 1 root root 1589258 Oct 9 21:36 All/busybox-1.6.1.tbz2 -rw-r--r-- 1 root root 592700 Oct 9 21:36 All/bzip2-1.0.4.tbz2 -rw-r--r-- 1 root root 119105 Oct 9 22:03 All/ca-certificates-20070303-r1.tbz2 -rw-r--r-- 1 root root 50235 Oct 9 21:43 All/com_err-1.39.tbz2 -rw-r--r-- 1 root root 2377785 Oct 9 22:05 All/coreutils-6.9-r1.tbz2 -rw-r--r-- 1 root root 180610 Oct 9 21:37 All/cpio-2.9.tbz2 -rw-r--r-- 1 root root 256863 Oct 9 21:31 All/cracklib-2.8.10.tbz2 -rw-r--r-- 1 root root 2356960 Oct 9 21:56 All/db-4.5.20_p2.tbz2 -rw-r--r-- 1 root root 67253 Oct 9 21:58 All/debianutils-2.17.5.tbz2 -rw-r--r-- 1 root root 327359 Oct 9 21:59 All/diffutils-2.8.7-r2.tbz2 -rw-r--r-- 1 root root 805505 Oct 9 21:52 All/e2fsprogs-1.39-r2.tbz2 -rw-r--r-- 1 root root 199867 Oct 9 21:31 All/expat-2.0.1.tbz2 -rw-r--r-- 1 root root 465529 Oct 9 21:44 All/findutils-4.3.8-r1.tbz2 -rw-r--r-- 1 root root 379065 Oct 9 21:45 All/flex-2.5.33-r2.tbz2 -rw-r--r-- 1 root root 947984 Oct 9 21:47 All/gawk-3.1.5-r3.tbz2 -rw-r--r-- 1 root root 47111 Oct 9 21:32 All/gcc-config-1.3.16.tbz2 -rw-r--r-- 1 root root 2049299 Oct 9 21:39 All/gettext-0.16.1-r1.tbz2 -rw-r--r-- 1 root root 71249 Oct 9 21:31 All/gnuconfig-20070118.tbz2 -rw-r--r-- 1 root root 198718 Oct 9 21:45 All/grep-2.5.1a-r1.tbz2 -rw-r--r-- 1 root root 2770274 Oct 9 22:08 All/groff-1.19.2-r1.tbz2 -rw-r--r-- 1 root root 158291 Oct 9 21:46 All/gzip-1.3.12.tbz2 -rw-r--r-- 1 root root 31423 Oct 9 21:32 All/hashalot-0.3-r2.tbz2 -rw-r--r-- 1 root root 18045 Oct 9 21:49 All/init-0.tbz2 -rw-r--r-- 1 root root 94341 Oct 9 21:46 All/iputils-20060512.tbz2 -rw-r--r-- 1 root root 1123810 Oct 9 21:46 All/kbd-1.12-r8.tbz2 -rw-r--r-- 1 root root 183504 Oct 9 21:41 All/less-406.tbz2 -rw-r--r-- 1 root root 18560 Oct 9 21:31 All/libiconv-0.tbz2 -rw-r--r-- 1 root root 18583 Oct 9 21:31 All/libintl-0.tbz2 -rw-r--r-- 1 root root 1937796 Oct 9 21:58 All/libperl-5.8.8-r1.tbz2 -rw-r--r-- 1 root root 514331 Oct 9 21:40 All/linux-headers-2.6.21.tbz2 -rw-r--r-- 1 root root 248267 Oct 9 21:42 All/m4-1.4.9-r1.tbz2 -rw-r--r-- 1 root root 502032 Oct 9 21:48 All/make-3.81.tbz2 -rw-r--r-- 1 root root 282155 Oct 9 22:08 All/man-1.6e-r3.tbz2 -rw-r--r-- 1 root root 4013627 Oct 9 21:59 All/man-pages-2.64.tbz2 -rw-r--r-- 1 root root 40598 Oct 9 21:58 All/mktemp-1.5.tbz2 -rw-r--r-- 1 root root 360001 Oct 9 22:07 All/module-init-tools-3.2.2-r3.tbz2 -rw-r--r-- 1 root root 473826 Oct 9 21:48 All/nano-2.0.6.tbz2 -rw-r--r-- 1 root root 1371743 Oct 9 21:29 All/ncurses-5.6-r1.tbz2 -rw-r--r-- 1 root root 564916 Oct 9 21:46 All/net-tools-1.60-r12.tbz2 -rw-r--r-- 1 root root 3002432 Oct 9 22:02 All/openssl-0.9.8e-r3.tbz2 -rw-r--r-- 1 root root 730702 Oct 9 22:07 All/pam-0.78-r5.tbz2 -rw-r--r-- 1 root root 128006 Oct 9 21:36 All/patch-2.5.9.tbz2 -rw-r--r-- 1 root root 90402 Oct 9 21:31 All/pax-utils-0.1.15.tbz2 -rw-r--r-- 1 root root 23917 Oct 9 21:59 All/perl-cleaner-1.04.3.tbz2 -rw-r--r-- 1 root root 115201 Oct 9 21:32 All/pkgconfig-0.21-r1.tbz2 -rw-r--r-- 1 root root 88097 Oct 9 21:44 All/popt-1.10.7.tbz2 -rw-r--r-- 1 root root 416062 Oct 9 21:27 All/portage-2.1.3.9.tbz2 -rw-r--r-- 1 root root 262433 Oct 9 21:41 All/procps-3.2.7.tbz2 -rw-r--r-- 1 root root 20749 Oct 9 21:33 All/python-updater-0.2.tbz2 -rw-r--r-- 1 root root 1032660 Oct 9 21:45 All/readline-5.2_p7.tbz2 -rw-r--r-- 1 root root 302340 Oct 9 21:49 All/rsync-2.6.9-r3.tbz2 -rw-r--r-- 1 root root 76862 Oct 9 21:33 All/sandbox-1.2.17.tbz2 -rw-r--r-- 1 root root 221380 Oct 9 21:43 All/sed-4.1.5.tbz2 -rw-r--r-- 1 root root 37273 Oct 9 21:33 All/setarch-1.8.tbz2 -rw-r--r-- 1 root root 1186511 Oct 9 22:09 All/shadow-4.0.18.1-r1.tbz2 -rw-r--r-- 1 root root 60436 Oct 9 21:48 All/ss-1.39.tbz2 -rw-r--r-- 1 root root 136646 Oct 9 21:43 All/sysvinit-2.86-r8.tbz2 -rw-r--r-- 1 root root 819482 Oct 9 21:47 All/tar-1.18-r2.tbz2 -rw-r--r-- 1 root root 149255 Oct 9 21:33 All/tcp-wrappers-7.6-r8.tbz2 -rw-r--r-- 1 root root 836401 Oct 9 21:42 All/texinfo-4.8-r5.tbz2 -rw-r--r-- 1 root root 545686 Oct 9 21:34 All/timezone-data-2007g.tbz2 -rw-r--r-- 1 root root 318901 Oct 9 22:07 All/udev-114.tbz2 -rw-r--r-- 1 root root 33969 Oct 9 21:33 All/unifdef-1.20.tbz2 -rw-r--r-- 1 root root 1356353 Oct 9 21:56 All/util-linux-2.12r-r7.tbz2 -rw-r--r-- 1 root root 514592 Oct 9 22:03 All/wget-1.10.2.tbz2 -rw-r--r-- 1 root root 53049 Oct 9 21:49 All/which-2.16.tbz2 -rw-r--r-- 1 root root 153247 Oct 9 21:31 All/zlib-1.2.3-r1.tbz2 lrwxrwxrwx 1 root root 31 Oct 9 21:59 app-admin/perl-cleaner-1.04.3.tbz2 -\u0026gt; ../All/perl-cleaner-1.04.3.tbz2 lrwxrwxrwx 1 root root 30 Oct 9 21:33 app-admin/python-updater-0.2.tbz2 -\u0026gt; ../All/python-updater-0.2.tbz2 lrwxrwxrwx 1 root root 23 Oct 9 21:36 app-arch/bzip2-1.0.4.tbz2 -\u0026gt; ../All/bzip2-1.0.4.tbz2 lrwxrwxrwx 1 root root 20 Oct 9 21:37 app-arch/cpio-2.9.tbz2 -\u0026gt; ../All/cpio-2.9.tbz2 lrwxrwxrwx 1 root root 23 Oct 9 21:46 app-arch/gzip-1.3.12.tbz2 -\u0026gt; ../All/gzip-1.3.12.tbz2 lrwxrwxrwx 1 root root 23 Oct 9 21:47 app-arch/tar-1.18-r2.tbz2 -\u0026gt; ../All/tar-1.18-r2.tbz2 lrwxrwxrwx 1 root root 27 Oct 9 21:32 app-crypt/hashalot-0.3-r2.tbz2 -\u0026gt; ../All/hashalot-0.3-r2.tbz2 lrwxrwxrwx 1 root root 22 Oct 9 21:48 app-editors/nano-2.0.6.tbz2 -\u0026gt; ../All/nano-2.0.6.tbz2 lrwxrwxrwx 1 root root 39 Oct 9 22:03 app-misc/ca-certificates-20070303-r1.tbz2 -\u0026gt; ../All/ca-certificates-20070303-r1.tbz2 lrwxrwxrwx 1 root root 28 Oct 9 21:31 app-misc/pax-utils-0.1.15.tbz2 -\u0026gt; ../All/pax-utils-0.1.15.tbz2 lrwxrwxrwx 1 root root 24 Oct 9 21:41 app-shells/bash-3.2_p17.tbz2 -\u0026gt; ../All/bash-3.2_p17.tbz2 lrwxrwxrwx 1 root root 23 Oct 9 21:31 dev-libs/expat-2.0.1.tbz2 -\u0026gt; ../All/expat-2.0.1.tbz2 lrwxrwxrwx 1 root root 29 Oct 9 22:02 dev-libs/openssl-0.9.8e-r3.tbz2 -\u0026gt; ../All/openssl-0.9.8e-r3.tbz2 lrwxrwxrwx 1 root root 23 Oct 9 21:44 dev-libs/popt-1.10.7.tbz2 -\u0026gt; ../All/popt-1.10.7.tbz2 lrwxrwxrwx 1 root root 29 Oct 9 21:32 dev-util/pkgconfig-0.21-r1.tbz2 -\u0026gt; ../All/pkgconfig-0.21-r1.tbz2 lrwxrwxrwx 1 root root 24 Oct 9 21:33 dev-util/unifdef-1.20.tbz2 -\u0026gt; ../All/unifdef-1.20.tbz2 lrwxrwxrwx 1 root root 28 Oct 9 21:46 net-misc/iputils-20060512.tbz2 -\u0026gt; ../All/iputils-20060512.tbz2 lrwxrwxrwx 1 root root 26 Oct 9 21:49 net-misc/rsync-2.6.9-r3.tbz2 -\u0026gt; ../All/rsync-2.6.9-r3.tbz2 lrwxrwxrwx 1 root root 23 Oct 9 22:03 net-misc/wget-1.10.2.tbz2 -\u0026gt; ../All/wget-1.10.2.tbz2 lrwxrwxrwx 1 root root 32 Oct 9 22:07 sys-apps/baselayout-1.12.9-r2.tbz2 -\u0026gt; ../All/baselayout-1.12.9-r2.tbz2 lrwxrwxrwx 1 root root 25 Oct 9 21:36 sys-apps/busybox-1.6.1.tbz2 -\u0026gt; ../All/busybox-1.6.1.tbz2 lrwxrwxrwx 1 root root 28 Oct 9 22:05 sys-apps/coreutils-6.9-r1.tbz2 -\u0026gt; ../All/coreutils-6.9-r1.tbz2 lrwxrwxrwx 1 root root 30 Oct 9 21:58 sys-apps/debianutils-2.17.5.tbz2 -\u0026gt; ../All/debianutils-2.17.5.tbz2 lrwxrwxrwx 1 root root 30 Oct 9 21:59 sys-apps/diffutils-2.8.7-r2.tbz2 -\u0026gt; ../All/diffutils-2.8.7-r2.tbz2 lrwxrwxrwx 1 root root 30 Oct 9 21:44 sys-apps/findutils-4.3.8-r1.tbz2 -\u0026gt; ../All/findutils-4.3.8-r1.tbz2 lrwxrwxrwx 1 root root 25 Oct 9 21:47 sys-apps/gawk-3.1.5-r3.tbz2 -\u0026gt; ../All/gawk-3.1.5-r3.tbz2 lrwxrwxrwx 1 root root 26 Oct 9 21:45 sys-apps/grep-2.5.1a-r1.tbz2 -\u0026gt; ../All/grep-2.5.1a-r1.tbz2 lrwxrwxrwx 1 root root 27 Oct 9 22:08 sys-apps/groff-1.19.2-r1.tbz2 -\u0026gt; ../All/groff-1.19.2-r1.tbz2 lrwxrwxrwx 1 root root 23 Oct 9 21:46 sys-apps/kbd-1.12-r8.tbz2 -\u0026gt; ../All/kbd-1.12-r8.tbz2 lrwxrwxrwx 1 root root 20 Oct 9 21:41 sys-apps/less-406.tbz2 -\u0026gt; ../All/less-406.tbz2 lrwxrwxrwx 1 root root 23 Oct 9 22:08 sys-apps/man-1.6e-r3.tbz2 -\u0026gt; ../All/man-1.6e-r3.tbz2 lrwxrwxrwx 1 root root 26 Oct 9 21:59 sys-apps/man-pages-2.64.tbz2 -\u0026gt; ../All/man-pages-2.64.tbz2 lrwxrwxrwx 1 root root 22 Oct 9 21:58 sys-apps/mktemp-1.5.tbz2 -\u0026gt; ../All/mktemp-1.5.tbz2 lrwxrwxrwx 1 root root 38 Oct 9 22:07 sys-apps/module-init-tools-3.2.2-r3.tbz2 -\u0026gt; ../All/module-init-tools-3.2.2-r3.tbz2 lrwxrwxrwx 1 root root 30 Oct 9 21:46 sys-apps/net-tools-1.60-r12.tbz2 -\u0026gt; ../All/net-tools-1.60-r12.tbz2 lrwxrwxrwx 1 root root 27 Oct 9 21:27 sys-apps/portage-2.1.3.9.tbz2 -\u0026gt; ../All/portage-2.1.3.9.tbz2 lrwxrwxrwx 1 root root 26 Oct 9 21:33 sys-apps/sandbox-1.2.17.tbz2 -\u0026gt; ../All/sandbox-1.2.17.tbz2 lrwxrwxrwx 1 root root 21 Oct 9 21:43 sys-apps/sed-4.1.5.tbz2 -\u0026gt; ../All/sed-4.1.5.tbz2 lrwxrwxrwx 1 root root 23 Oct 9 21:33 sys-apps/setarch-1.8.tbz2 -\u0026gt; ../All/setarch-1.8.tbz2 lrwxrwxrwx 1 root root 30 Oct 9 22:09 sys-apps/shadow-4.0.18.1-r1.tbz2 -\u0026gt; ../All/shadow-4.0.18.1-r1.tbz2 lrwxrwxrwx 1 root root 28 Oct 9 21:43 sys-apps/sysvinit-2.86-r8.tbz2 -\u0026gt; ../All/sysvinit-2.86-r8.tbz2 lrwxrwxrwx 1 root root 31 Oct 9 21:33 sys-apps/tcp-wrappers-7.6-r8.tbz2 -\u0026gt; ../All/tcp-wrappers-7.6-r8.tbz2 lrwxrwxrwx 1 root root 26 Oct 9 21:42 sys-apps/texinfo-4.8-r5.tbz2 -\u0026gt; ../All/texinfo-4.8-r5.tbz2 lrwxrwxrwx 1 root root 31 Oct 9 21:56 sys-apps/util-linux-2.12r-r7.tbz2 -\u0026gt; ../All/util-linux-2.12r-r7.tbz2 lrwxrwxrwx 1 root root 22 Oct 9 21:49 sys-apps/which-2.16.tbz2 -\u0026gt; ../All/which-2.16.tbz2 lrwxrwxrwx 1 root root 28 Oct 9 21:59 sys-devel/autoconf-2.61-r1.tbz2 -\u0026gt; ../All/autoconf-2.61-r1.tbz2 lrwxrwxrwx 1 root root 33 Oct 9 21:32 sys-devel/autoconf-wrapper-4-r3.tbz2 -\u0026gt; ../All/autoconf-wrapper-4-r3.tbz2 lrwxrwxrwx 1 root root 33 Oct 9 21:32 sys-devel/automake-wrapper-3-r1.tbz2 -\u0026gt; ../All/automake-wrapper-3-r1.tbz2 lrwxrwxrwx 1 root root 28 Oct 9 21:51 sys-devel/binutils-2.17-r1.tbz2 -\u0026gt; ../All/binutils-2.17-r1.tbz2 lrwxrwxrwx 1 root root 34 Oct 9 21:48 sys-devel/binutils-config-1.9-r4.tbz2 -\u0026gt; ../All/binutils-config-1.9-r4.tbz2 lrwxrwxrwx 1 root root 21 Oct 9 21:49 sys-devel/bison-2.3.tbz2 -\u0026gt; ../All/bison-2.3.tbz2 lrwxrwxrwx 1 root root 26 Oct 9 21:45 sys-devel/flex-2.5.33-r2.tbz2 -\u0026gt; ../All/flex-2.5.33-r2.tbz2 lrwxrwxrwx 1 root root 29 Oct 9 21:32 sys-devel/gcc-config-1.3.16.tbz2 -\u0026gt; ../All/gcc-config-1.3.16.tbz2 lrwxrwxrwx 1 root root 29 Oct 9 21:39 sys-devel/gettext-0.16.1-r1.tbz2 -\u0026gt; ../All/gettext-0.16.1-r1.tbz2 lrwxrwxrwx 1 root root 30 Oct 9 21:31 sys-devel/gnuconfig-20070118.tbz2 -\u0026gt; ../All/gnuconfig-20070118.tbz2 lrwxrwxrwx 1 root root 28 Oct 9 21:58 sys-devel/libperl-5.8.8-r1.tbz2 -\u0026gt; ../All/libperl-5.8.8-r1.tbz2 lrwxrwxrwx 1 root root 23 Oct 9 21:42 sys-devel/m4-1.4.9-r1.tbz2 -\u0026gt; ../All/m4-1.4.9-r1.tbz2 lrwxrwxrwx 1 root root 21 Oct 9 21:48 sys-devel/make-3.81.tbz2 -\u0026gt; ../All/make-3.81.tbz2 lrwxrwxrwx 1 root root 23 Oct 9 21:36 sys-devel/patch-2.5.9.tbz2 -\u0026gt; ../All/patch-2.5.9.tbz2 lrwxrwxrwx 1 root root 29 Oct 9 21:52 sys-fs/e2fsprogs-1.39-r2.tbz2 -\u0026gt; ../All/e2fsprogs-1.39-r2.tbz2 lrwxrwxrwx 1 root root 20 Oct 9 22:07 sys-fs/udev-114.tbz2 -\u0026gt; ../All/udev-114.tbz2 lrwxrwxrwx 1 root root 32 Oct 9 21:40 sys-kernel/linux-headers-2.6.21.tbz2 -\u0026gt; ../All/linux-headers-2.6.21.tbz2 lrwxrwxrwx 1 root root 24 Oct 9 21:43 sys-libs/com_err-1.39.tbz2 -\u0026gt; ../All/com_err-1.39.tbz2 lrwxrwxrwx 1 root root 27 Oct 9 21:31 sys-libs/cracklib-2.8.10.tbz2 -\u0026gt; ../All/cracklib-2.8.10.tbz2 lrwxrwxrwx 1 root root 24 Oct 9 21:56 sys-libs/db-4.5.20_p2.tbz2 -\u0026gt; ../All/db-4.5.20_p2.tbz2 lrwxrwxrwx 1 root root 26 Oct 9 21:29 sys-libs/ncurses-5.6-r1.tbz2 -\u0026gt; ../All/ncurses-5.6-r1.tbz2 lrwxrwxrwx 1 root root 23 Oct 9 22:07 sys-libs/pam-0.78-r5.tbz2 -\u0026gt; ../All/pam-0.78-r5.tbz2 lrwxrwxrwx 1 root root 27 Oct 9 21:45 sys-libs/readline-5.2_p7.tbz2 -\u0026gt; ../All/readline-5.2_p7.tbz2 lrwxrwxrwx 1 root root 19 Oct 9 21:48 sys-libs/ss-1.39.tbz2 -\u0026gt; ../All/ss-1.39.tbz2 lrwxrwxrwx 1 root root 31 Oct 9 21:34 sys-libs/timezone-data-2007g.tbz2 -\u0026gt; ../All/timezone-data-2007g.tbz2 lrwxrwxrwx 1 root root 25 Oct 9 21:31 sys-libs/zlib-1.2.3-r1.tbz2 -\u0026gt; ../All/zlib-1.2.3-r1.tbz2 lrwxrwxrwx 1 root root 24 Oct 9 21:41 sys-process/procps-3.2.7.tbz2 -\u0026gt; ../All/procps-3.2.7.tbz2 lrwxrwxrwx 1 root root 18 Oct 9 21:49 virtual/init-0.tbz2 -\u0026gt; ../All/init-0.tbz2 lrwxrwxrwx 1 root root 22 Oct 9 21:31 virtual/libiconv-0.tbz2 -\u0026gt; ../All/libiconv-0.tbz2 lrwxrwxrwx 1 root root 21 Oct 9 21:31 virtual/libintl-0.tbz2 -\u0026gt; ../All/libintl-0.tbz2 Now, we just need to figure out a way to get the packages to a remote repository. That\u0026rsquo;s where bashrc, rsync and ssh come into play.\nTake a looksie at my bashrc (or at solar\u0026rsquo;s if you can find it), especially at syncpkg. That\u0026rsquo;s the actual function doing all the work for us. It\u0026rsquo;s basically guessing what profile you\u0026rsquo;re using atm (by reading the info\u0026rsquo;s on /etc/make.profile ( x86, amd64)), and the uploading it to the remote location given by REPO_HOST, REPO_BASE and REPO_TYPE (either via environment or by /etc/make.conf).\nSure the emerge takes a bit longer (since emerge forks an rsync process via ssh that syncs the just merged binary to our remote repository), but that way you have a nice repository, from which you can install one or 1.000 boxes.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_turning-a-simple-chroot-into-a-binpkg-repository/","summary":"\u003cp\u003eOK, since Alex asked me last Sunday what exactly needs to be done to turn a simple chroot (or even a bloody box) into a binpkg producing environment, here\u0026rsquo;s a little howto \u0026hellip;\u003c/p\u003e\n\u003cp\u003eFirst, lets start from a freshly unpacked stage3.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecatalyst/x86 stage3-amd64-hardened # chroot . /bin/bash --login\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# Now, make sure you turn on FEATURES=buildpkg\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# (and setup anything else you need, like CFLAGS,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# LDFLAGS, whatever)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elinux # echo \u0026#39;FEATURES=\u0026#34;buildpkg\u0026#34;\u0026#39; \u0026gt;\u0026gt; /etc/make.conf\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eWith that single change you\u0026rsquo;re basically nearly finished with setting up the whole thing, the remaining things are just\u003c/p\u003e","title":"Turning a simple chroot into a binpkg repository"},{"content":"For what it\u0026rsquo;s worth, I\u0026rsquo;ve been trying to get some stages together the last few days. Thanks to solar and Brent, the ppc-stages are now coming along quite fast.\nI haven\u0026rsquo;t really tested them yet, but for what it\u0026rsquo;s worth, you\u0026rsquo;ll find stages based on Saturday\u0026rsquo;s snapshot (that is 200780105 for those not smart enough to take a look at the calendar) here for the following profiles:\nuclibc/ppc (normal/-softfloat) uclibc/ppc/hardened uclibc/x86 uclibc/x86/hardened hardened/amd64 hardened/amd64/nomultilib hardened/x86/2.6 (x86/i686) Now remember, this isn\u0026rsquo;t official release material. This is just MY effort ( for now) to provide current stages.\nAnd just a side-note for those brewing their own ( uClibc) soup: if you remerge system/ world, you\u0026rsquo;ll have to keyword =sys-libs/uclibc.0.9.28.3-r2. Otherwise you\u0026rsquo;ll stumble on bug 195368, which is fixed thanks to solar, just not marked stable yet.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_stages/","summary":"\u003cp\u003eFor what it\u0026rsquo;s worth, I\u0026rsquo;ve been trying to get some stages together the last few days. Thanks to \u003ca href=\"http://blogs.gentoo.org/solar\"\u003esolar\u003c/a\u003e and \u003ca href=\"http://blogs.gentoo.org/ferdy\"\u003eBrent\u003c/a\u003e, the ppc-stages are now coming along quite fast.\u003c/p\u003e\n\u003cp\u003eI haven\u0026rsquo;t really tested them yet, but for what it\u0026rsquo;s worth, you\u0026rsquo;ll find stages based on Saturday\u0026rsquo;s snapshot (that is 200780105 for those not smart enough to take a look at the calendar) here for the following profiles:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003euclibc/ppc (normal/-softfloat)\u003c/li\u003e\n\u003cli\u003euclibc/ppc/hardened\u003c/li\u003e\n\u003cli\u003euclibc/x86\u003c/li\u003e\n\u003cli\u003euclibc/x86/hardened\u003c/li\u003e\n\u003cli\u003ehardened/amd64\u003c/li\u003e\n\u003cli\u003ehardened/amd64/nomultilib\u003c/li\u003e\n\u003cli\u003ehardened/x86/2.6 (x86/i686)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eNow remember, this isn\u0026rsquo;t \u003cem\u003e\u003cstrong\u003eofficial\u003c/strong\u003e\u003c/em\u003e release material. This is just \u003cem\u003e\u003cstrong\u003eMY\u003c/strong\u003e\u003c/em\u003e effort ( \u003cem\u003efor now\u003c/em\u003e) to provide current stages.\u003c/p\u003e","title":"stages"},{"content":"So, as the previous try on getting the teamix people to fix the bloody LoadBalancer (as in sending at least an identification string for the SSH check) didn\u0026rsquo;t work so well (they told me, I should configure MASQ uerading/ ROUTE ing on the PacketPro(which is kinda icky), I went on today and looked at what SLES10 installs as default logger.\nSurprisingly they install a rather new syslog-ng (well, syslog-ng-1.6.8 is what they ship) so it was rather easy to workaround the situation.\nHere\u0026rsquo;s what already was in the syslog-ng.conf .in (more on that later):\n1 2 filter f_iptables { facility(kern) and match(\u0026#34;IN=\u0026#34;) and match(\u0026#34;OUT=\u0026#34;); }; filter f_messages { not facility(news, mail) and not filter(f_iptables) }; which I just extended with the following:\n1 2 3 4 filter f_iptables { facility(kern) and match(\u0026#34;IN=\u0026#34;) and match(\u0026#34;OUT=\u0026#34;); }; filter f_messages { not facility(news, mail) and not filter(f_iptables) and not match (\u0026#34;Did not receive identification string from 172.16.(123|234)\u0026#34;); }; Afterwards just a quick SuSEconfig -module syslog-ng, restart the syslog daemon and the messages were gonse. Sure I know it\u0026rsquo;s a rather ugly hack \u0026#x1f606; , but since they refused to provide a \u0026quot; true\u0026quot; fix and it seemed like that question has been asked more than once it works for me, so \u0026#x1f937; \u0026#x1f61b;\nBut now you\u0026rsquo;d ask why syslog-ng.conf .in ? Simply because Novell figured it would be too easy to just invent things like CONFIG_PROTECT for RPM/YaST, so they placed yet another file in there; from which the syslog-ng.conf files is generated every time SuSEconfig is being executed (that\u0026rsquo;s like every time you install a package using YaST).\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_bloody-cluster-solutions-continued/","summary":"\u003cp\u003eSo, as the \u003ca href=\"/posts/2014-08-16_bloody-cluster-solutions-continued\" title=\"Bloody cluster solutions\"\u003eprevious try\u003c/a\u003e on getting the \u003cem\u003eteamix\u003c/em\u003e people to fix the bloody LoadBalancer (as in sending at least an identification string for the SSH check) didn\u0026rsquo;t work so well (they told me, I should configure \u003cstrong\u003eMASQ\u003c/strong\u003e uerading/ \u003cstrong\u003eROUTE\u003c/strong\u003e ing on the \u003cem\u003ePacketPro\u003c/em\u003e(which is kinda icky), I went on today and looked at what SLES10 installs as default logger.\u003c/p\u003e\n\u003cp\u003eSurprisingly they install a rather new syslog-ng (well, syslog-ng-1.6.8 is what they ship) so it was rather easy to workaround the situation.\u003c/p\u003e","title":"Bloody cluster solutions (continued)"},{"content":"OK, as I wrote earlier today I went onto a research mission for today, looking at the alternatives for the 2x stuff. Looks like Citrix Presentation Server is just the software I\u0026rsquo;m looking for. Watched the demo\u0026rsquo;s on their website, which are quite impressing, but sadly don\u0026rsquo;t tell me everything I\u0026rsquo;d like to know.\nMaybe I\u0026rsquo;ll ask some people in Greifswald and in the vicinity, how stuff works with Citrix. Maybe I should even get in contact with Citrix itself and ask for a test version, or some other sort of demonstration.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_research-project/","summary":"\u003cp\u003eOK, as I wrote earlier today I went onto a research mission for today, looking at the alternatives for the 2x stuff. Looks like Citrix Presentation Server is just the software I\u0026rsquo;m looking for. Watched the \u003ca href=\"http://www.citrix.com/English/ps2/demo.asp\"\u003edemo\u0026rsquo;s on their website\u003c/a\u003e, which are quite impressing, but sadly don\u0026rsquo;t tell me everything I\u0026rsquo;d like to know.\u003c/p\u003e\n\u003cp\u003eMaybe I\u0026rsquo;ll ask some people in Greifswald and in the vicinity, how stuff works with Citrix. Maybe I should even get in contact with Citrix itself and ask for a test version, or some other sort of demonstration.\u003c/p\u003e","title":"Research project"},{"content":"I\u0026rsquo;m coming back today from a six day vacation in the warm south (that is Stuttgart), back at work and find three sheets of paper on my desk. Two tell me something I haven\u0026rsquo;t done yet, the other one tells me something I haven\u0026rsquo;t seen yet.\nOne of my colleagues had to restart one of our web nodes and now the thing can\u0026rsquo;t mount the logging volume (and thus, logrotate / awstats failed to do it\u0026rsquo;s job). OCFS2 ain\u0026rsquo;t spitting any error messages, when trying to mount the volume you see it joining the domain the volume belongs to on the other nodes, so from a first glance at things .. nothing is wrong ?\nOne thing I\u0026rsquo;ll have to add is, that you can\u0026rsquo;t reboot the box cleanly (as in you have to use the power button, so I figure something is either stuck or something is malfunctioning ..) \u0026#x1f937;\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_ocfs2-fun-yet-again/","summary":"\u003cp\u003eI\u0026rsquo;m coming back today from a six day vacation in the warm south (that is Stuttgart), back at work and find three sheets of paper on my desk. Two tell me something I haven\u0026rsquo;t done yet, the other one tells me something I haven\u0026rsquo;t seen yet.\u003c/p\u003e\n\u003cp\u003eOne of my colleagues had to restart one of our web nodes and now the thing can\u0026rsquo;t mount the logging volume (and thus, logrotate / awstats failed to do it\u0026rsquo;s job). OCFS2 ain\u0026rsquo;t spitting any error messages, when trying to mount the volume you see it joining the domain the volume belongs to on the other nodes, so from a first glance at things .. nothing is wrong ?\u003c/p\u003e","title":"OCFS2 fun yet again"},{"content":"So I ended up cleaning out some retired (~20) people from metadata.xml, where I found this interesting piece of metadata.xml:\n1 2 3 4 5 6 7 8 kernel-misc crypto@gentoo.org Crypto herd masterdriverz@gentoo.org Charlie Shephered And here the hint for all you people again: A DAMN HERD AIN\u0026rsquo;T NO MAINTAINER. SO IF YOUR HERD IS MAINTAINING A PACKAGE, PUT IT INTO and not into the . kthnxbye.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_metadata-xml/","summary":"\u003cp\u003eSo I ended up cleaning out some retired (~20) people from \u003cem\u003emetadata.xml\u003c/em\u003e, where I found this interesting piece of metadata.xml:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e8\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel-misc\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  crypto@gentoo.org\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  Crypto herd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  masterdriverz@gentoo.org\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  Charlie Shephered\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAnd here the hint for all you people again: \u003cstrong\u003eA DAMN HERD AIN\u0026rsquo;T NO MAINTAINER\u003c/strong\u003e. SO IF YOUR HERD IS MAINTAINING A PACKAGE, PUT IT INTO \u003c!-- raw HTML omitted --\u003e and not into the \u003c!-- raw HTML omitted --\u003e. kthnxbye.\u003c/p\u003e","title":"metadata-xml"},{"content":"We\u0026rsquo;re currently having a weird issue (which we had before); the Windows XP Embedded powering our Wyse V90\u0026rsquo;s isn\u0026rsquo;t applying any GPO settings if you log on with a user that has a configured profile.\nGoogling (is that a valid word yet ?!) for it, only resulted in one useful link, which is apparently a guy with the exact same problem \u0026hellip; \u0026#x1f937; I\u0026rsquo;m completely out of ideas by now, as I don\u0026rsquo;t even have a place to start (as in where the reason might be located).\nWell, I do have a place to start with (that\u0026rsquo;s the local Events Viewer), which indeed lists some errors, but only such errors which ain\u0026rsquo;t making any sense. For example I see this:\nUserenv:1086 - \u0026quot; Windows cannot do loopback processing for downlevel or local users. Loopback processing will be disabled.\u0026quot; SceCli:1704 - \u0026quot; Security policy in the Group policy objects has been applied successfully.\u0026quot; Userenv:1085 - \u0026quot; The Group Policy client-side extension Folder Redirection failed to execute. Please look for any errors reported earlier by that extension.\u0026quot; ","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_windows-xp-embedded-and-gpo-settings/","summary":"\u003cp\u003eWe\u0026rsquo;re currently having a weird issue (which we had before); the Windows XP Embedded powering our Wyse V90\u0026rsquo;s isn\u0026rsquo;t applying any GPO settings if you log on with a user that has a configured profile.\u003c/p\u003e\n\u003cp\u003eGoogling (is that a valid word yet ?!) for it, only resulted in \u003ca href=\"http://windows.ittoolbox.com/groups/technical-functional/activedirectory-l/applying-gpo-to-xp-embedded-thin-client-1259431\"\u003eone useful link\u003c/a\u003e, which is apparently a guy with the exact same problem \u0026hellip; \u0026#x1f937; I\u0026rsquo;m completely out of ideas by now, as I don\u0026rsquo;t even have a place to start (as in where the reason might be located).\u003c/p\u003e","title":"Windows XP Embedded and GPO settings"},{"content":"Okay, so we received a brand new x3650 the other day entitled to replace one (or better two) of our NAS frontend servers. We installed Windows on it the other day (had to create a custom Windows Server 2003 CD first, since the default one doesn\u0026rsquo;t recognize the integrated ServeRAID), and we prepped the box during the week with the usual things.\nOn Monday I started installing the \u0026quot; IBM StorageManager RDAC\u0026quot; MultiPath driver (since the box got two single port PCIe FC-HBA\u0026rsquo;s) and figured I\u0026rsquo;d be nice if we had this. I asked a IBM Systems Engineer of one of our partners, which told me generally there wouldn\u0026rsquo;t be a problem with Microsoft Cluster Services (MSCS) and the IBM MPIO driver. Only requirement would be that I\u0026rsquo;d install the new storport.sys driver (version 5.2.3790.4021) first (as in Microsoft KB932755).\nNow, yesterday I finished the zoning, did the mappings on the storage arrays and then figured the box should see the hard disks. So I started adding another node to our existing Microsoft Cluster.\nResult: Zip (as in MSCS telling me not all nodes could see the quorum disk)\nReason: a combination of two things. First, said IBM Storage Manager RDAC. The first time I installed it, I forgot about the storage mappings, thus the box seeing zero disks. After uninstalling it, I was seeing 121 (that\u0026rsquo;s right, one hundred and twenty one) new devices.\nVisible volumes previous to installing the RDAC driver\nThat is basically a result of the zoning I did for this particular device, which has all controllers present in a single SAN zone, thus the HBA\u0026rsquo;s seeing devices eight (or nine) times .. Update: yes, I\u0026rsquo;m missing one controller \u0026hellip; \u0026#x1f600;\nSAN zoning for the box\nNow, as I reinstalled the RDAC after the host discovered the volumes, it\u0026rsquo;s showing only a dozen drives.\nVisible volumes after installing the RDAC driver\nNow, as I figured this out, I told myself \u0026quot; Hey, adding the third node to the Windows Cluster should now work without a clue \u0026hellip;\u0026quot; \u0026hellip; guess what ?\nIt\u0026rsquo;s Microsoft and it doesn\u0026rsquo;t. Now why doesn\u0026rsquo;t it work ? \u0026lsquo;Cause the Cluster Setup Wizard is getting confused in Typical mode, as it\u0026rsquo;s creating a \u0026ldquo;local quorum disk\u0026rdquo; which naturally isn\u0026rsquo;t present in the cluster it\u0026rsquo;s joining. Now, switching the wizard to \u0026ldquo;Advanced (minimum) configuration\u0026rdquo; as suggested in Q331801, just works \u0026hellip; \u0026#x1f937;\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_ibm-rdac-and-windows-cluster-service/","summary":"\u003cp\u003eOkay, so we received a brand new \u003ca href=\"http://www-03.ibm.com/systems/x/hardware/rack/x3650/index.html\"\u003ex3650\u003c/a\u003e the other day entitled to replace one (or better two) of our NAS frontend servers. We installed Windows on it the other day (had to create a custom Windows Server 2003 CD first, since the default one doesn\u0026rsquo;t recognize the integrated ServeRAID), and we prepped the box during the week with the usual things.\u003c/p\u003e\n\u003cp\u003eOn Monday I started installing the \u0026quot; \u003ca href=\"http://www-947.ibm.com/support/entry/portal/sdd?brand=5000028\u0026amp;key=5329827\u0026amp;osKey=0#5365978\"\u003e\u003cem\u003eIBM StorageManager RDAC\u003c/em\u003e\u003c/a\u003e\u0026quot; MultiPath driver (since the box got two single port PCIe FC-HBA\u0026rsquo;s) and figured I\u0026rsquo;d be nice if we had this. I asked a IBM Systems Engineer of one of our partners, which told me generally there wouldn\u0026rsquo;t be a problem with Microsoft Cluster Services (MSCS) and the IBM MPIO driver. Only requirement would be that I\u0026rsquo;d install the new storport.sys driver (version 5.2.3790.4021) first (as in Microsoft \u003ca href=\"http://support.microsoft.com/kb/932755/en\"\u003eKB932755\u003c/a\u003e).\u003c/p\u003e","title":"IBM RDAC and Windows Cluster Service"},{"content":"Well, as I said in my previous post, I do have some weird things happening. Apparently adding the domain user to the local group \u0026ldquo;Administrators\u0026rdquo; makes everything just works fine, yet he can\u0026rsquo;t do administrator like stuff (like turning off the write protection, changing local user accounts, \u0026hellip;).\nAlso, if you\u0026rsquo;re looking for a smart way of how to add a certain global group (as in Active Directory group) to a local group, try this:\n1 NET LOCALGROUP Administrators /ADD DOMAINGROUPNAME That simple, doesn\u0026rsquo;t even need the usual credentials to lookup the object, it apparently bypassed that step \u0026#x1f937;.\nAnd yet another weird thing is: if I run a certain command from a deployment script, it gives me different result as a manual execution of said script would give me .. \u0026#x1f937;\n1 2 3 4 5 6 NETDOM JOIN %COMPUTERNAME% /domain:heimdaheim.de /OU:\u0026#34;OU=Thinclients,OU=Computers,DC=heimdaheim,DC=de\u0026#34; /UserD:%ADMIN% /PasswordD:somepass /User0: Administrator /Password0:Administrator NET LOCALGROUP Administrators /ADD BARFOODomain-Users If I put that into a rsp (that is Wyse Device Manager script), it ain\u0026rsquo;t working. Would I be executing it myself without the WDM, everything works like a charm \u0026hellip; yuck\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_windows-xp-embedded-and-gpo-settings-continued/","summary":"\u003cp\u003eWell, as I said in my \u003ca href=\"/posts/2008-06-04_windows-xp-embedded-windows-server-2003-and-gpo-settings-the-solution\" title=\"Windows XP Embedded and GPO settings\"\u003eprevious post\u003c/a\u003e, I do have some weird things happening. Apparently adding the domain user to the local group \u0026ldquo;Administrators\u0026rdquo; makes everything just works fine, yet he can\u0026rsquo;t do administrator like stuff (like turning off the write protection, changing local user accounts, \u0026hellip;).\u003c/p\u003e\n\u003cp\u003eAlso, if you\u0026rsquo;re looking for a smart way of how to add a certain global group (as in Active Directory group) to a local group, try this:\u003c/p\u003e","title":"Windows XP Embedded and GPO settings (continued)"},{"content":"I\u0026rsquo;m just got back from four days in Rostock over at S\u0026amp;N, where I was attending a VMware design course and here\u0026rsquo;s a list of questions I did ask the trainer:\nWhat\u0026rsquo;s the disadvantage of having a 1016 ported vSwitch ? Any clues on how to exchange the default certificate of the Virtual Center ? Are there any tools to stress test the virtual system ? Are there any performance impacts of having more than 10 users in Virtual Center ? Any clues and/or guides on how to do time synchronization in VMware guests, especially Linux guests ? What\u0026rsquo;s the preferred NIC type for Linux guests ? Any clues to using Raw Device Mappings with VMotion ? Is there a way of defining CPU masks on a global level ? Answers:\nThere might be a small overhead, though that\u0026rsquo;s limited to a really, non-measureable amount Hasn\u0026rsquo;t done it yet. Yes, there are free stress test tools like cpubusy.vbs, cpubusy.pl, iometer.exe, .. Nope, you should only experienece load problems starting at 25 or so users Select one variant, either time synchronization by use of the VMware tools or ntpupdate; if ntpupdate, select a single time source for your whole environment For ESX 3.5.0 that would be \u0026ldquo;Flexible\u0026rdquo; (as per VMware Knowledgebase), as the vmxnet type is a leftover from ESX 3.0 Raw device mappings are absolutely supported by VMware, and also work without any troubles (when mapping/zonig is correctly configured) Currently there\u0026rsquo;s no known way of doing this When adjusting the CPU afinity of a VM, always completely stop the virtual machine afterwards When trying to figure out CPU bottlenecks, check whether or not hyperthreading is enabled. The hyperthreaded (second) core is only giving you a CPU with 15% of the first. Also, here are some guidelines on how the trainer extended the defaults:\nESX Server:\nExtend the \u0026quot; /\u0026quot; size to 10GiB Extend the \u0026quot; swap\u0026quot; partition to about 1GiB Extend the \u0026quot; /var/log\u0026quot; partition to about 4 GiB don\u0026rsquo;t mess around with creating too many vSwitches; just keep it simple set the duplex mode manually if the ESX is giving you any trouble disable the Traffic Shaping, unless you really need it VirtualCenter:\nThere\u0026rsquo;s two options when installing VirtualCenter: either install it on a physical box or simply put it into a virtual machine itself A problem with putting it into a virtual machine is, when the VM is shutting down or powered off due to isolation of the ESX running it, any ESX Server powering up isn\u0026rsquo;t going to start any virtual machines as that in return requires the License Server (as Michael pointed out in #c1, the VM is still gonna start as the HA agent is able to start virtual machines on the basis of the 14-day grace period) Only use the SQL Server Express variant if you really have to. It\u0026rsquo;s limited to 4GB database size, so if your installation grows above say 50 hosts and 2000 VM\u0026rsquo;s, this is gonna break the limits of SQL Server Express ","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_vmware-design-rules/","summary":"\u003cp\u003eI\u0026rsquo;m just got back from four days in Rostock over at \u003ca href=\"http://www.sundat.net/De/Default.aspx\"\u003eS\u0026amp;N\u003c/a\u003e, where I was attending a VMware design course and here\u0026rsquo;s a list of questions I did ask the trainer:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eWhat\u0026rsquo;s the disadvantage of having a 1016 ported vSwitch ?\u003c/li\u003e\n\u003cli\u003eAny clues on how to exchange the default certificate of the Virtual Center ?\u003c/li\u003e\n\u003cli\u003eAre there any tools to stress test the virtual system ?\u003c/li\u003e\n\u003cli\u003eAre there any performance impacts of having more than 10 users in Virtual Center ?\u003c/li\u003e\n\u003cli\u003eAny clues and/or guides on how to do time synchronization in VMware guests, especially Linux guests ?\u003c/li\u003e\n\u003cli\u003eWhat\u0026rsquo;s the preferred NIC type for Linux guests ?\u003c/li\u003e\n\u003cli\u003eAny clues to using Raw Device Mappings with VMotion ?\u003c/li\u003e\n\u003cli\u003eIs there a way of defining CPU masks on a global level ?\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eAnswers:\u003c/p\u003e","title":"VMware design rules"},{"content":"Well, it turns out that building stuff on ppc64 is a real pain in the ass, at least on anything SUSE related. I do have to tweak every damn spec to include this:\n1 2 3 %ifarch ppc64 export LDFLAGS=\u0026#34;$LDFLAGS -m64\u0026#34; %endif Otherwise, ld is gonna fail when linking, as it\u0026rsquo;s gonna try linking the generated 64bit code ( -m64 is passed on via RPM_OPT_FLAGS to CFLAGS) as 32bit code, which ain\u0026rsquo;t gonna work at all \u0026hellip;\nOn top of that, stuff ain\u0026rsquo;t building due to multiple problems (for example nagios and vim, cause ld is unable to find the fitting -lperl (for nagios) and -lXt (for vim)) as well as source errors \u0026hellip;\n1 2 3 4 5 6 7 8 9 10 11 12 13 gcc -DHAVE_CONFIG_H -I. -I. -I../../include -I../../include -I/usr/include -D_FREETDS_LIBRARY_SOURCE -DUNIXODBC -DHAVE_UNISTD_H -DHAVE_PWD_H -DHAVE_SYS_TYPES_H -DHAVE_LONG_LONG -DSIZEOF_LONG=4 -D_REENTRANT -D_THREAD_SAFE -DDEBUG=1 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -pthread -O2 -g -m64 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -Wdeclaration-after-statement -MT connectparams.lo -MD -MP -MF .deps/connectparams.Tpo -c connectparams.c -fPIC -DPIC -o .libs/connectparams.o In file included from connectparams.c:22: ../../include/config.h:375:1: warning: \u0026#34;SIZEOF_LONG\u0026#34; redefined \u0026lt;command line\u0026gt;:1:1: warning: this is the location of the previous definition connectparams.c:90: error: static declaration of `SQLGetPrivateProfileString\u0026#39; follows non-static declaration /usr/include/odbcinst.h:170: error: previous declaration of `SQLGetPrivateProfileString\u0026#39; was here make[3]: *** [connectparams.lo] Error 1 make[3]: Leaving directory `/srv/BUILD/freetds-0.82/src/odbc\u0026#39; make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/srv/BUILD/freetds-0.82/src/odbc\u0026#39; make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/srv/BUILD/freetds-0.82/src\u0026#39; make: *** [all-recursive] Error 1 ","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_building-rpms-on-sles10sp2-ppc64/","summary":"\u003cp\u003eWell, it turns out that building stuff on ppc64 is a \u003cem\u003e\u003cstrong\u003ereal\u003c/strong\u003e\u003c/em\u003e pain in the ass, at least on anything SUSE related. I do have to tweak \u003cstrong\u003e\u003cem\u003eevery\u003c/em\u003e\u003c/strong\u003e damn spec to include this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e%\u003c/span\u003e\u003cspan class=\"n\"\u003eifarch\u003c/span\u003e \u003cspan class=\"n\"\u003eppc64\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eexport\u003c/span\u003e \u003cspan class=\"n\"\u003eLDFLAGS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;$LDFLAGS -m64\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e%\u003c/span\u003e\u003cspan class=\"n\"\u003eendif\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eOtherwise, ld is gonna fail when linking, as it\u0026rsquo;s gonna try linking the generated 64bit code ( \u003cstrong\u003e-m64\u003c/strong\u003e is passed on via \u003cem\u003eRPM_OPT_FLAGS\u003c/em\u003e to \u003cem\u003eCFLAGS\u003c/em\u003e) as 32bit code, which ain\u0026rsquo;t gonna work at all \u0026hellip;\u003c/p\u003e","title":"Building RPMs on SLES10SP2-ppc64"},{"content":"Today I did something horrible. I yet again noticed that I bought the wrong CPU\u0026rsquo;s (basically I bought Xeon DP\u0026rsquo;s with four cores). Those have apparently a feature called SSSE3, which makes vMotion with our old Xeon DP\u0026rsquo;s (dual cores) fail before even trying.\nBut as we had a cooling outage today (basically \u0026lsquo;cause it broke), I needed to turn off some ESX servers. Thus leaving me with the new ones and one of the old ones. * yuck*\nSo after a bit of googling, I found this VMware KB entry, which luckily lists the registers (on level 1) you need to zero out.\n1 2 ecx ---- ---- ---- -0-- ---- --0- ---0 -0-- edx ---- ---- ---- --0- ---- ---- ---- ---- Only problem after that was that it still wasn\u0026rsquo;t enough. So back to the drawing board. The final solution came rather quick and looks like this:\n1 2 3 eax ---- ---- ---- ---- ---- 0--0 ---- ---- ecx ---- ---- ---- -0-- ---- --0- ---0 -0-- edx ---- ---- ---- --0- ---- ---- ---- ---- The only stupid thing about this is, that\nit ain\u0026rsquo;t supported by VMware (as in if you\u0026rsquo;re having trouble with your ESX/VC and you have a VM running with this, you\u0026rsquo;re shit outta luck!) you have to define this on a * per VM basis*, which really is a pain in the ass for larger installations True, I just should\u0026rsquo;ve bought vMotion compatible CPU\u0026rsquo;s, that would have spared me the hassle \u0026hellip; but it\u0026rsquo;s too late now, I have to live with those ones.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_extending-vmotion-compatiblity/","summary":"\u003cp\u003eToday I did something horrible. I yet again noticed that I bought the wrong CPU\u0026rsquo;s (basically I bought Xeon DP\u0026rsquo;s with four cores). Those have apparently a feature called SSSE3, which makes vMotion with our old Xeon DP\u0026rsquo;s (dual cores) fail before even trying.\u003c/p\u003e\n\u003cp\u003eBut as we had a cooling outage today (basically \u0026lsquo;cause it broke), I needed to turn off some ESX servers. Thus leaving me with the new ones and one of the old ones. * \u003cstrong\u003eyuck\u003c/strong\u003e*\u003c/p\u003e","title":"Extending vMotion compatiblity"},{"content":"As virtualization seems to be a trendy thing to do, I went ahead and virtualized our nagios (while reinstalling the whole thing \u0026hellip;).\nNow as I went into work today and started my email client, I received 4 nagios warnings about a LOAD service reaching critical state. Looked at the nagios box itself, opened up the VM console, looked into the syslog. Nothing.\nYet over 3/4 of the services were flapping, some ping checks were critical (for whatever reason). So I opened the nagios webinterface again, and noticed it dropping the connection over and over again (had to reauthentificate me again and again).\nSo I opened up Putty, which established the connection without a single problem, but dropped me like a stone after a short amount of time. I restarted the session and got a security warning from Putty (due to different than the saved sshd public key). That raised my suspicion. So I took a look at the hostname, and lookie there.\nSomehow my old nagios box (which is a physical box), got turned online again, thus having the same IP address as my virtualized one. So the virtualized nagios wasn\u0026rsquo;t really dropping my connection, but I was being directed to the old nagios.\nWalked over into the data center, turned of the old box (well, I kept the power button pressed for a short time), and away went my troubles.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_nagios-virtualization/","summary":"\u003cp\u003eAs virtualization seems to be a trendy thing to do, I went ahead and virtualized our nagios (while reinstalling the whole thing \u0026hellip;).\u003c/p\u003e\n\u003cp\u003eNow as I went into work today and started my email client, I received 4 nagios warnings about a LOAD service reaching critical state. Looked at the nagios box itself, opened up the VM console, looked into the syslog. Nothing.\u003c/p\u003e\n\u003cp\u003eYet over 3/4 of the services were flapping, some ping checks were critical (for whatever reason). So I opened the nagios webinterface again, and noticed it dropping the connection over and over again (had to reauthentificate me again and again).\u003c/p\u003e","title":"Nagios virtualization"},{"content":"As I wrote earlier, I recently virtualized our nagios. Along with that came a complete \u0026quot; redesign\u0026quot; of how checks are applied. Up till now, I defined checks for each and every single server, thus ending up with ~25 files, each holding roughly 6 checks which are in the same file just sorted by hostname.\nAs you can imagine, it gets quite confusing with that amount of checks (~150). So the last two days I spent on reorganizing (with Visio), on which object/hostgroup placing a check would make sense. Now, this is my first result of two days planning, reorganizing, reordering and moving hosts into different hostgroups.\nNagios Hostgroup Inheritance - Linux\nNagios Hostgroup Inheritance - Windows\nThanks to Josh (and Chris I think), realizing the above is gonna get quite easy. Gonna talk about the config layout itself about once I have it all wrapped up. Stay tuned!\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_nagios-hostgroup-inheritance/","summary":"\u003cp\u003eAs I wrote earlier, I recently \u003ca href=\"/posts/2014-08-16_nagios-virtualization\" title=\"Nagios virtualization\"\u003evirtualized our nagios\u003c/a\u003e. Along with that came a complete \u0026quot; \u003cem\u003eredesign\u003c/em\u003e\u0026quot; of how checks are applied. Up till now, I defined checks for each and every single server, thus ending up with ~25 files, each holding roughly 6 checks which are in the same file just sorted by hostname.\u003c/p\u003e\n\u003cp\u003eAs you can imagine, it gets quite confusing with that amount of checks (~150). So the last two days I spent on reorganizing (with Visio), on which object/hostgroup placing a check would make sense. Now, this is my first result of two days planning, reorganizing, reordering and moving hosts into different hostgroups.\u003c/p\u003e","title":"Nagios Hostgroup Inheritance"},{"content":"So here I was, sitting around and thinking about formatted classes for my paragraphs. Now the result is quite pleasing, but has some side effects. But see for yourself \u0026hellip;\nMessed up CSS\nAs you can see, the browser is reusing the background-image URL from the element within the element, even though the element initially had none. Even defining putting an background-image: none; into the class doesn\u0026rsquo;t get me anywhere.The weird thing is only Firefox is displaying it this messed up (not so weird when you think about how IE 6 treats standards). So if any of you CSS wiz\u0026rsquo; got a suggestion, I\u0026rsquo;m listening \u0026#x1f604;\nThanks to the tip of Dave(?), the issue is fixed now!\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_cascading-style-sheets-are-really-weird/","summary":"\u003cp\u003eSo here I was, sitting around and thinking about formatted classes for my paragraphs. Now the result is quite pleasing, but has some side effects. But see for yourself \u0026hellip;\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2008/07/screenshot-p-elements.gif\"\n         alt=\"Messed up CSS\" width=\"500\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eMessed up CSS\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eAs you can see, the browser is reusing the background-image URL from the \u003c!-- raw HTML omitted --\u003e element within the \u003c!-- raw HTML omitted --\u003e element, even though the \u003c!-- raw HTML omitted --\u003e element initially had none. Even defining putting an background-image: none; into the \u003c!-- raw HTML omitted --\u003e class doesn\u0026rsquo;t get me anywhere.The weird thing is only Firefox is displaying it this messed up (not so weird when you think about how IE 6 treats standards). So if any of you CSS wiz\u0026rsquo; got a suggestion, I\u0026rsquo;m listening \u0026#x1f604;\u003c/p\u003e","title":"Cascading Style Sheets are really weird"},{"content":"Well, guess my \u0026quot; solution\u0026quot; didn\u0026rsquo;t work sooo good. Lemme tell you what\u0026rsquo;s happening. I successfully added the node to the cluster group, but I can\u0026rsquo;t get any resources online.\nThe node tries bringing it online, then shows a failure and immidiately moves them over to the next node. There the resource is being successfully moved online .. So again, I\u0026rsquo;m out of ideas ..\nAlready tried reinstalling the box, after that I could get the third node successfully into the cluster, without the \u0026quot; Advanced (minimum)\u0026quot; trick \u0026hellip; \u0026#x1f937; still ain\u0026rsquo;t bringing any resources online.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_windows-cluster-service-continued/","summary":"\u003cp\u003eWell, guess my \u0026quot; \u003ca href=\"/posts/2014-08-16_ibm-rdac-and-windows-cluster-service\" title=\"IBM RDAC and Windows Cluster Service\"\u003e\u003cem\u003esolution\u003c/em\u003e\u003c/a\u003e\u0026quot; didn\u0026rsquo;t work sooo good. Lemme tell you what\u0026rsquo;s happening. I successfully added the node to the cluster group, but I can\u0026rsquo;t get \u003cem\u003e\u003cstrong\u003eany\u003c/strong\u003e\u003c/em\u003e resources online.\u003c/p\u003e\n\u003cp\u003eThe node tries bringing it online, then shows a failure and immidiately moves them over to the next node. There the resource is being successfully moved online .. So again, I\u0026rsquo;m out of ideas ..\u003c/p\u003e\n\u003cp\u003eAlready tried reinstalling the box, after that I could get the third node successfully into the cluster, without the \u0026quot; \u003cem\u003eAdvanced (minimum)\u003c/em\u003e\u0026quot; trick \u0026hellip; \u0026#x1f937; still ain\u0026rsquo;t bringing any resources online.\u003c/p\u003e","title":"Windows Cluster Service (continued)"},{"content":"We\u0026rsquo;re currently having a really weird problem with our VM\u0026rsquo;s. Sometime last week, SUSE released a kernel update. Now, once you install it and you reboot the selected VM with a DVD/CD image present, you\u0026rsquo;re gonna see this:\nmsg.vmxaiomgr.retrycontabort.unkown\nThe only workaround so far has been to unmount any cleanse any CD-Drives attached to the VM. And yes, this is reproduceable, even reinstalling from scratch doesn\u0026rsquo;t change the fact, that after installing the patch the VM quits working.\nI also know, SLES10 SP2 ain\u0026rsquo;t officially supported yet by VMware, but I\u0026rsquo;d still suspect it to just work and not produce such weird errors. The only thing I found so far is this VMTN thread ..\nLucky us, VMware just today released Update 2 for VirtualCenter and ESX, wherein SLES10SP2 should be officially supported!\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_suse-linux-enterprise-server-10-on-vmware-esx/","summary":"\u003cp\u003eWe\u0026rsquo;re currently having a \u003cem\u003e\u003cstrong\u003ereally\u003c/strong\u003e\u003c/em\u003e weird problem with our VM\u0026rsquo;s. Sometime last week, SUSE released a kernel update. Now, once you install it and you reboot the selected VM with a DVD/CD image present, you\u0026rsquo;re gonna see this:\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2008/08/vmxaiomgr.png\"\n         alt=\"msg.vmxaiomgr.retrycontabort.unkown\" width=\"500\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003emsg.vmxaiomgr.retrycontabort.unkown\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eThe only workaround so far has been to unmount \u003cem\u003e\u003cstrong\u003eany\u003c/strong\u003e\u003c/em\u003e cleanse any CD-Drives attached to the VM. And yes, this is reproduceable, even reinstalling from scratch doesn\u0026rsquo;t change the fact, that after installing the patch the VM quits working.\u003c/p\u003e","title":"SUSE Linux Enterprise Server 10 on VMware ESX"},{"content":"Well, after some searching today (we applied the VMware Update 2 today, thus the VMware Tools update too), I finally found out what is causing that problem.\nThough the problem seems to be not limited to virtual systems alone, I just browsed through this Novell Forum thread which pretty much describes my problem. I found the same error in the VM\u0026rsquo;s I tried to mount a CD image.\n1 2 kernel: ide-cd: weird block size 524288 kernel: ide-cd: default to 2kb block size Only difference between my behaviour and the one described, is that the virtual maschine is switched off immediately after you try to mount a CD image.\nNow, this guy is saying Novell is working on it \u0026hellip; But you\u0026rsquo;re gonna have to ask the question, why in gods name did such an update get through QA ? Or ain\u0026rsquo;t there no QA for updates ? \u0026#x1f937;\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_suse-linux-enterprise-server-10-on-vmware-esx-continued/","summary":"\u003cp\u003eWell, after some searching today (we applied the VMware Update 2 today, thus the VMware Tools update too), I finally found out what is causing \u003ca href=\"/posts/2008-07-30_suse-linux-enterprise-server-10-on-vmware-esx-finished\" title=\"SUSE Linux Enterprise Server 10 on VMware ESX\"\u003ethat problem\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThough the problem seems to be not limited to virtual systems alone, I just browsed through this \u003ca href=\"http://forums.novell.com/novell-product-support-forums/suse-linux-enterprise-desktop-sled/sled-updates/336899-kernel-update-07182008-a.html#post1600495\"\u003eNovell Forum thread\u003c/a\u003e which pretty much describes my problem. I found the same error in the VM\u0026rsquo;s I tried to mount a CD image.\u003c/p\u003e","title":"SUSE Linux Enterprise Server 10 on VMware ESX (continued)"},{"content":"Well, after my co-worker switched the VirtualCenter certificates with one produced by our RA a few days ago, I can\u0026rsquo;t clone anything using a customization specification anymore.\nUnable to decrypt passwords in customization specification\nGuess, we\u0026rsquo;re shit outa luck. At least both of those linked VMTN discussions don\u0026rsquo;t contain any (that is for us) workable solution (well besides storing the password in cleartext in the spec \u0026ndash; which ain\u0026rsquo;t sooo good). Gonna bug him tomorrow to open up a VMware support request, maybe that\u0026rsquo;ll help somewhat. I sure hope so.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-16_more-virtualcenter-troubles/","summary":"\u003cp\u003eWell, after my co-worker switched the VirtualCenter certificates with one produced by our RA a few days ago, I can\u0026rsquo;t clone anything using a \u003ca href=\"http://communities.vmware.com/thread/54721\"\u003ecustomization\u003c/a\u003e \u003ca href=\"http://communities.vmware.com/thread/139080\"\u003especification\u003c/a\u003e anymore.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2008/08/virtualcenter_unable_to_decrypt_password.png\"\n         alt=\"Unable to decrypt passwords in customization specification\" width=\"500\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eUnable to decrypt passwords in customization specification\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eGuess, we\u0026rsquo;re shit outa luck. At least both of those linked VMTN discussions don\u0026rsquo;t contain any (that is for us) workable solution (well besides storing the password in cleartext in the spec \u0026ndash; which ain\u0026rsquo;t sooo good). Gonna bug him tomorrow to open up a VMware support request, maybe that\u0026rsquo;ll help somewhat. I sure hope so.\u003c/p\u003e","title":"More VirtualCenter troubles"},{"content":"Well, there is this \u0026ldquo;nifty\u0026rdquo; tool called patch2mail, which basically converts the XML for the updates to a more readable format. But you\u0026rsquo;re screwed if you want to do the same on SLES10. Since it ain\u0026rsquo;t shipping with the zypper xml wrapper thing, you need to do it a bit different.\nSo I ended up writing a small (and yet, ugly) shell script to generate me a mail of my liking ..\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #!/bin/bash TO=\u0026#34;admin-addr@localhost\u0026#34; CLASSES=\u0026#34;security recommended optional\u0026#34; # Temporary files ZYPP_LIST=\u0026#34;$( mktemp /tmp/zypper-list.XXXXXX )\u0026#34; ZYPP_DETAILS=\u0026#34;$( mktemp /tmp/zypper-details.XXXXXX )\u0026#34; TMP=\u0026#34;$( mktemp /tmp/zypper-report.XXXXXX )\u0026#34; zypper pch 2\u0026gt;/dev/null \u0026gt; $ZYPP_LIST # Figure out how much updates are still pending PENDING=\u0026#34;$( cat $ZYPP_LIST | grep \u0026#34;| Needed\u0026#34; | wc -l )\u0026#34; if [ $PENDING -eq 0 ] ; then exit 0 fi echo \u0026gt; $TMP echo \u0026#34; Pending updates for $( domainname -f ) on $( date )\u0026#34; \u0026gt;\u0026gt; $TMP for severity in $CLASSES; do PACKAGES=\u0026#34;$( cat $ZYPP_LIST | egrep \u0026#34;${severity}(.*)| Needed\u0026#34; | cut -d| -f2 | sed \u0026#34;s,^ ,,\u0026#34; )\u0026#34; echo echo \u0026#34; Category: $severity\u0026#34; for package in $PACKAGES; do zypper patch-info $package 2\u0026gt;/dev/null \u0026gt; $ZYPP_DETAILS echo \u0026#34; * $package ($( cat $ZYPP_DETAILS | grep \u0026#34;Version: \u0026#34; | sed \u0026#34;s,Version,version,\u0026#34; ))\u0026#34; echo \u0026#34; $( cat $ZYPP_DETAILS | grep \u0026#34;Summary: \u0026#34;)\u0026#34; echo \u0026#34; $( cat $ZYPP_DETAILS | grep \u0026#34;Reboot Required:\u0026#34; )\u0026#34; echo done echo done \u0026gt;\u0026gt; $TMP cat $TMP | mail -s \u0026#34;[$( date +%F )] Update report for $( domainname -f )\u0026#34; $TO trap \u0026#39;rm -f \u0026#34;$TMP\u0026#34; \u0026#34;$ZYPP_LIST\u0026#34; \u0026#34;$ZYPP_DETAILS\u0026#34; \u0026gt;/dev/null 2\u0026gt;\u0026amp;1\u0026#39; 0 trap \u0026#34;exit 2\u0026#34; 1 2 3 15 # vim: set tw=80 ","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_patch2mail-for-sles10/","summary":"\u003cp\u003eWell, there is this \u0026ldquo;nifty\u0026rdquo; tool called \u003ca href=\"http://software.opensuse.org/search?q=patch2mail\"\u003epatch2mail\u003c/a\u003e, which basically converts the XML for the updates to a more readable format. But you\u0026rsquo;re screwed if you want to do the same on SLES10. Since it ain\u0026rsquo;t shipping with the zypper xml wrapper thing, you need to do it a bit different.\u003c/p\u003e\n\u003cp\u003eSo I ended up writing a small (and yet, ugly) shell script to generate me a mail of my liking ..\u003c/p\u003e","title":"patch2mail for SLES10"},{"content":"As I talked to Tobi yesterday, we came to talk about our Ethernet Box thermometer. It\u0026rsquo;s a neat device, which works pretty much out of the box. Integrating it with Nagios is a bit of a bummer.\nEthernetbox 2\nThat\u0026rsquo;s what the ~300 EUR box looks like. It\u0026rsquo;s basically a small black box with a RJ45 jack, and four RJ11 jacks for attached external devices. The box itself only functions as a \u0026quot; management station\u0026quot; and doesn\u0026rsquo;t come with a sensor. Normally, you can attach up till four RJ11 sensors to it. But, MessPC also has RJ11 port splitters, which enables you to attach up to eight RJ11 sensors to the MessPC.\nThermometer RJ45 jacks\nAs you can see, the box has a RJ45 jack on the other side, which you basically hook up to your network and then configure an IP address (or if you fancy DHCP for those things, it\u0026rsquo;s possible too).\nThermometer RJ11 jacks\nOn the opposite site, are the RJ11 jacks for the sensors. As you can see, we currently do have 4 splitters attachted to the box, enabling up till 8 sensors to be measured. Once you have it up and running, you can look at the web interface and you\u0026rsquo;ll be able to see the state of the sensors right on the first page.\nNow, if you have a Nagios installation (like I do), you might want to integrate the Ethernetbox with Nagios. You do have two choices: either do the checking by means of SNMP but forego graphing by Nagios, or use check_pcmeasure and use the full features of your Nagios installation (read: graphing done by pnp4nagios). As I recently updated our Nagios installation to 3.0.4, I ran into trouble with the pcmeasure plugin. It simply didn\u0026rsquo;t run with the embedded perl (which it should, but apparently became a bit stricter between 2.x and 3.x). So I went ahead and changed it, so it would run with embedded perl, as I was in the mood. After that was done, I simply dumped it into /usr/lib/nagios/plugins on my nagios box, created a /etc/nagios/objects/commands/etherbox.cfg containing the necessary command definition:\n1 2 3 4 5 # \u0026#39;check_ethernetbox\u0026#39; command definition define command{ command_name check_ethernetbox command_line /usr/lib/nagios/plugins/check_pcmeasure.pl -H $HOSTADDRESS$ -S $ARG1$ -W $ARG2$ -C $ARG3$ } Nagios Service Detail\nNow we can go ahead and really integrate it into Nagios, by simply creating a host utilizing this command definition.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 define host { use generic-network host_name ethernetbox alias ethernetbox.home.barfoo.org address 10.0.0.9 parents home-0 } define service { use generic-service host_name ethernetbox service_description 1.1: Aussentemperatur check_command check_ethernetbox!com1.1!29.0!35.0! action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } define service { use generic-service host_name ethernetbox service_description 1.2: Druckfussboden check_command check_ethernetbox!com1.2!16.0!19.0! action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } ","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_messpc-ethernetbox-2-and-nagios/","summary":"\u003cp\u003eAs I talked to Tobi yesterday, we came to talk about our Ethernet Box thermometer. It\u0026rsquo;s a neat device, which works pretty much out of the box. Integrating it with Nagios is a bit of a bummer.\u003c/p\u003e\n\u003cp\u003eThat\u0026rsquo;s what the ~300 EUR box looks like. It\u0026rsquo;s basically a small black box with a RJ45 jack, and four RJ11 jacks for attached external devices. The box itself only functions as a \u0026quot; \u003cem\u003emanagement station\u003c/em\u003e\u0026quot; and doesn\u0026rsquo;t come with a sensor.\nNormally, you can attach up till four RJ11 sensors to it. But, MessPC also has RJ11 port splitters, which enables you to attach up to eight RJ11 sensors to the MessPC.\u003c/p\u003e\n\u003cp\u003eAs you can see, the box has a RJ45 jack on the other side, which you basically hook up to your network and then configure an IP address (or if you fancy DHCP for those things, it\u0026rsquo;s possible too).\u003c/p\u003e\n\u003cp\u003eOn the opposite site, are the RJ11 jacks for the sensors. As you can see, we currently do have 4 splitters attachted to the box, enabling up till 8 sensors to be measured.\nOnce you have it up and running, you can look at the web interface and you\u0026rsquo;ll be able to see the state of the sensors right on the first page.\u003c/p\u003e\n","title":"MessPC Ethernetbox 2 and Nagios"},{"content":"Well, since we received part of our shipment on Wednesday, I finally looked at how we\u0026rsquo;re gonna deploy our active/active Tivoli Storage Manager configuration. Right now, we do have a single pSeries box hosting ~100 client nodes which we\u0026rsquo;re looking to split by two (since we do have two x366 for that purpose now).\nNow, as there ain\u0026rsquo;t no solution for this scenario yet (neither from International Business Machines nor someone out of the open source community), I sat down and started writing an OCF Resource agent for dsmserv (that is the Tivoli Storage Manager server).\nAt first I had a bit trouble adjusting myself on how stupid/non-standard dsmserv is, but after reading through the Storage Manager Installation handbook (on multiple installations on a single server) and through some peoples notes on multiple deployments of Tivoli Storage Manager on the same server, I think I managed to get my head around it.\nI still think the resource agent lacks some real testing (I put a two node cluster online on Tuesday, but that is non-productive), but that\u0026rsquo;ll happen soon.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 #!/bin/sh # # Description: Manages a Tivoli Storage manager as an OCF High-Availability # resource under Heartbeat/LinuxHA control # # Author: Christian Heim (christian.heim@barfoo.org) # Copyright: (C) 2008 Christian Heim # License: GNU General Public License (GPL) # # An example XML-entry for this resource would look like this: # # \u0026lt;primitive class=\u0026#34;ocf\u0026#34; id=\u0026#34;dsmserv\u0026#34; provider=\u0026#34;heartbeat\u0026#34; type=\u0026#34;dsmserv\u0026#34;\u0026gt; # \u0026lt;operations\u0026gt; # \u0026lt;op id=\u0026#34;dsmserv_mon\u0026#34; interval=\u0026#34;5s\u0026#34; name=\u0026#34;monitor\u0026#34; timeout=\u0026#34;5s\u0026#34;/\u0026gt; # \u0026lt;/operations\u0026gt; # \u0026lt;instance_attributes id=\u0026#34;dsmserv_inst_attr\u0026#34;\u0026gt; # \u0026lt;attributes\u0026gt; # \u0026lt;!-- # All attributes listed below are required. # You are strongly advised to put them into your configuration, # otherwise the resource agent is gonna fail horribly. # --\u0026gt; # \u0026lt;nvpair id=\u0026#34;dsmserv_attr_0\u0026#34; name=\u0026#34;prefix\u0026#34; value=\u0026#34;/opt/tivoli/tsm/server\u0026#34; /\u0026gt; # \u0026lt;nvpair id=\u0026#34;dsmserv_attr_1\u0026#34; name=\u0026#34;instance\u0026#34; value=\u0026#34;tsm1\u0026#34; /\u0026gt; # \u0026lt;nvpair id=\u0026#34;dsmserv_attr_2\u0026#34; name=\u0026#34;id\u0026#34; value=\u0026#34;ha_client\u0026#34; /\u0026gt; # \u0026lt;nvpair id=\u0026#34;dsmserv_attr_3\u0026#34; name=\u0026#34;password\u0026#34; value=\u0026#34;ha_client\u0026#34; /\u0026gt; # \u0026lt;nvpair id=\u0026#34;dsmserv_attr_4\u0026#34; name=\u0026#34;TCPAddress\u0026#34; value=\u0026#34;10.0.0.10\u0026#34; /\u0026gt; # \u0026lt;nvpair id=\u0026#34;dsmserv_attr_5\u0026#34; name=\u0026#34;TCPPort\u0026#34; value=\u0026#34;1500\u0026#34; /\u0026gt; # \u0026lt;!-- # All below attributes are optional, meaning if you are not putting # anything into the configuration file, the resource agent is going # to use the defaults. # --\u0026gt; # \u0026lt;nvpair id=\u0026#34;dsmserv_attr_6\u0026#34; name=\u0026#34;max_retries\u0026#34; value=\u0026#34;2\u0026#34; /\u0026gt; # \u0026lt;nvpair id=\u0026#34;dsmserv_attr_6\u0026#34; name=\u0026#34;shutdown_timeout\u0026#34; value=\u0026#34;10\u0026#34; /\u0026gt; # \u0026lt;nvpair id=\u0026#34;dsmserv_attr_7\u0026#34; name=\u0026#34;dsmserv_dir\u0026#34; value=\u0026#34;/opt/tivoli/tsm/server/bin\u0026#34; /\u0026gt; # \u0026lt;nvpair id=\u0026#34;dsmserv_attr_8\u0026#34; name=\u0026#34;dsmclient_dir\u0026#34; value=\u0026#34;/opt/tivoli/client/ba/bin\u0026#34; /\u0026gt; # \u0026lt;!-- # If you are unclear, what this agent set a certain variable to, change # the below to \u0026#34;1\u0026#34; to enable the extended debugging to your ha.log. # --\u0026gt; # \u0026lt;nvpair id=\u0026#34;dsmserv_attr_9\u0026#34; name=\u0026#34;extended_debugging\u0026#34; value=\u0026#34;0\u0026#34; /\u0026gt; # \u0026lt;/attributes\u0026gt; # \u0026lt;/instance_attributes\u0026gt; # \u0026lt;/primitive\u0026gt; # # OCF parameters: # OCF_RESKEY_prefix # OCF_RESKEY_instance # OCF_RESKEY_id # OCF_RESKEY_password # OCF_RESKEY_TCPAddress # OCF_RESKEY_TCPPort # OCF_RESKEY_max_retries # OCF_RESKEY_shutdown_timeout # OCF_RESKEY_dsmserv_dir # OCF_RESKEY_dsmclient_dir # OCF_RESKEY_extended_debugging . ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs unset LC_ALL; export LC_ALL unset LANGUAGE; export LANGUAGE dsmserv_metadata() { cat \u0026lt;\u0026lt;END \u0026lt;?xml version=\u0026#34;1.0\u0026#34;?\u0026gt; \u0026lt;!DOCTYPE resource-agent SYSTEM \u0026#34;ra-api-1.dtd\u0026#34;\u0026gt; \u0026lt;resource-agent name=\u0026#34;dsmserv\u0026#34;\u0026gt; \u0026lt;version\u0026gt;1.0\u0026lt;/version\u0026gt; \u0026lt;longdesc lang=\u0026#34;en\u0026#34;\u0026gt; This script manages the Tivoli Storage Manager server. Please be aware, that in order to run your Tivoli Storage Manager Server via Heartbeat you need to prepare the according to the Storage Manager Handbook. \u0026lt;/longdesc\u0026gt; \u0026lt;shortdesc lang=\u0026#34;en\u0026#34;\u0026gt;OCF Resource Agent compilant dsmserv script.\u0026lt;/shortdesc\u0026gt; \u0026lt;parameters\u0026gt; \u0026lt;parameter name=\u0026#34;prefix\u0026#34;\u0026gt; \u0026lt;longdesc lang=\u0026#34;en\u0026#34;\u0026gt; Where all your Tivoli Storage Manager Server instances are going to show up. This is adjustable to your wishes, just make sure the directory exists on all possible owners of this resource. \u0026lt;/longdesc\u0026gt; \u0026lt;shortdesc lang=\u0026#34;en\u0026#34;\u0026gt;Prefix for all Tivoli Storage Manager Server instances.\u0026lt;/shortdesc\u0026gt; \u0026lt;content type=\u0026#34;string\u0026#34; /\u0026gt; \u0026lt;/parameter\u0026gt; \u0026lt;parameter name=\u0026#34;instance\u0026#34;\u0026gt; \u0026lt;longdesc lang=\u0026#34;en\u0026#34;\u0026gt; The Tivoli Storage Manager Server named instance. This is the path to the named instance, which is located on a single file system. \u0026lt;/longdesc\u0026gt; \u0026lt;shortdesc lang=\u0026#34;en\u0026#34;\u0026gt;Name of a single dsmserv instance located in your Prefix.\u0026lt;/shortdesc\u0026gt; \u0026lt;content type=\u0026#34;string\u0026#34; /\u0026gt; \u0026lt;/parameter\u0026gt; \u0026lt;parameter name=\u0026#34;TCPAddress\u0026#34;\u0026gt; \u0026lt;longdesc lang=\u0026#34;en\u0026#34;\u0026gt; The Tivoli Storage Manager Server instance IP-Address. This is needed for the shutdown command to \u0026#34;nicely\u0026#34; halt the server instead of just sending a kill -9. \u0026lt;/longdesc\u0026gt; \u0026lt;shortdesc lang=\u0026#34;en\u0026#34;\u0026gt;The Tivoli Storage Manager Server IP-Address.\u0026lt;/shortdesc\u0026gt; \u0026lt;content type=\u0026#34;string\u0026#34; /\u0026gt; \u0026lt;/parameter\u0026gt; \u0026lt;parameter name=\u0026#34;TCPPort\u0026#34; unique=\u0026#34;1\u0026#34;\u0026gt; \u0026lt;longdesc lang=\u0026#34;en\u0026#34;\u0026gt; The Tivoli Storage Manager Server instance Port. This is needed for the shutdown command to \u0026#34;nicely\u0026#34; halt the server instead of just sending a kill -9. \u0026lt;/longdesc\u0026gt; \u0026lt;shortdesc lang=\u0026#34;en\u0026#34;\u0026gt;The Tivoli Storage Manager Server Port.\u0026lt;/shortdesc\u0026gt; \u0026lt;content type=\u0026#34;string\u0026#34; /\u0026gt; \u0026lt;/parameter\u0026gt; \u0026lt;parameter name=\u0026#34;id\u0026#34;\u0026gt; \u0026lt;longdesc lang=\u0026#34;en\u0026#34;\u0026gt; This needs to be an account with ADMIN privileges, in order to correctly halt the server. \u0026lt;/longdesc\u0026gt; \u0026lt;shortdesc lang=\u0026#34;en\u0026#34;\u0026gt;An administrative user (CLASS=SYSTEM) on the TSM server.\u0026lt;/shortdesc\u0026gt; \u0026lt;content type=\u0026#34;string\u0026#34; /\u0026gt; \u0026lt;/parameter\u0026gt; \u0026lt;parameter name=\u0026#34;password\u0026#34;\u0026gt; \u0026lt;longdesc lang=\u0026#34;en\u0026#34;\u0026gt; The password for the specified user account. \u0026lt;/longdesc\u0026gt; \u0026lt;shortdesc lang=\u0026#34;en\u0026#34;\u0026gt;The password for the specified account on the TSM server.\u0026lt;/shortdesc\u0026gt; \u0026lt;content type=\u0026#34;string\u0026#34; /\u0026gt; \u0026lt;/parameter\u0026gt; \u0026lt;parameter name=\u0026#34;max_retries\u0026#34;\u0026gt; \u0026lt;longdesc lang=\u0026#34;en\u0026#34;\u0026gt; This defines the amount of retries the script is going to do before continuing. This is useful on busy servers, where you would end up with new sessions before shutting down the server. \u0026lt;/longdesc\u0026gt; \u0026lt;shortdesc lang=\u0026#34;en\u0026#34;\u0026gt;Amount of retries before shutting down the server.\u0026lt;/shortdesc\u0026gt; \u0026lt;content type=\u0026#34;string\u0026#34; default=\u0026#34;2\u0026#34; /\u0026gt; \u0026lt;/parameter\u0026gt; \u0026lt;parameter name=\u0026#34;shutdown_timeout\u0026#34;\u0026gt; \u0026lt;longdesc lang=\u0026#34;en\u0026#34;\u0026gt; Time to wait (in seconds) before killing (as in running kill -9) the server instance. \u0026lt;/longdesc\u0026gt; \u0026lt;shortdesc lang=\u0026#34;en\u0026#34;\u0026gt;Timeout before killing the server instance.\u0026lt;/shortdesc\u0026gt; \u0026lt;content type=\u0026#34;string\u0026#34; default=\u0026#34;5\u0026#34; /\u0026gt; \u0026lt;/parameter\u0026gt; \u0026lt;parameter name=\u0026#34;dsmserv_dir\u0026#34;\u0026gt; \u0026lt;longdesc lang=\u0026#34;en\u0026#34;\u0026gt; Path to the Tivoli Storage Manager Server binaries. This is a feature for multiple purposes. First, its a way to run instances with different versions on the same physical server. Second, if you had to customize the path where your version of Tivoli Storage Manager Server is installed, then use this to adjust the used path. \u0026lt;/longdesc\u0026gt; \u0026lt;shortdesc lang=\u0026#34;en\u0026#34;\u0026gt;Path to the TSM server binaries.\u0026lt;/shortdesc\u0026gt; \u0026lt;content type=\u0026#34;string\u0026#34; default=\u0026#34;/opt/tivoli/tsm/server/bin\u0026#34; /\u0026gt; \u0026lt;/parameter\u0026gt; \u0026lt;parameter name=\u0026#34;dsmclient_dir\u0026#34;\u0026gt; \u0026lt;longdesc lang=\u0026#34;en\u0026#34;\u0026gt; Path to the Tivoli Storage Manager Administrative Console binary. This is a feature for multiple purposes. First, its a way to run instances with different versions on the same physical server. Second, if you had to customize the path where your version of Tivoli Storage Manager Administrative Console is installed, then use this to adjust the used path. \u0026lt;/longdesc\u0026gt; \u0026lt;shortdesc lang=\u0026#34;en\u0026#34;\u0026gt;Path to the TSM Administrative Console binary.\u0026lt;/shortdesc\u0026gt; \u0026lt;content type=\u0026#34;string\u0026#34; default=\u0026#34;/opt/tivoli/tsm/client/ba/bin\u0026#34; /\u0026gt; \u0026lt;/parameter\u0026gt; \u0026lt;parameter name=\u0026#34;extended_debugging\u0026#34;\u0026gt; \u0026lt;longdesc lang=\u0026#34;en\u0026#34;\u0026gt; Enables the somewhat extensive debugging features in this OCF Resource Agent. This is coming in handy, if you suspect that either this Agent or something other is screwing up. \u0026lt;/longdesc\u0026gt; \u0026lt;shortdesc lang=\u0026#34;en\u0026#34;\u0026gt;Enables the extended debugging.\u0026lt;/shortdesc\u0026gt; \u0026lt;content type=\u0026#34;string\u0026#34; default=\u0026#34;0\u0026#34; /\u0026gt; \u0026lt;/parameter\u0026gt; \u0026lt;/parameters\u0026gt; \u0026lt;actions\u0026gt; \u0026lt;action name=\u0026#34;start\u0026#34; timeout=\u0026#34;90\u0026#34; /\u0026gt; \u0026lt;action name=\u0026#34;stop\u0026#34; timeout=\u0026#34;100\u0026#34; /\u0026gt; \u0026lt;action name=\u0026#34;monitor\u0026#34; depth=\u0026#34;10\u0026#34; timeout=\u0026#34;30s\u0026#34; interval=\u0026#34;60s\u0026#34; start-delay=\u0026#34;1s\u0026#34; /\u0026gt; \u0026lt;action name=\u0026#34;validate-all\u0026#34; timeout=\u0026#34;30s\u0026#34; /\u0026gt; \u0026lt;action name=\u0026#34;meta-data\u0026#34; timeout=\u0026#34;5s\u0026#34; /\u0026gt; \u0026lt;action name=\u0026#34;status\u0026#34; timeout=\u0026#34;30s\u0026#34; /\u0026gt; \u0026lt;/actions\u0026gt; \u0026lt;/resource-agent\u0026gt; END exit $OCF_SUCCESS } dsmserv_settings() { # Settings the above mentioned defaults. : ${OCF_RESKEY_max_retries:=2} : ${OCF_RESKEY_shutdown_timeout:=5} : ${OCF_RESKEY_dsmserv_dir:=/opt/tivoli/tsm/server/bin} : ${OCF_RESKEY_dsmclient_dir:=/opt/tivoli/tsm/client/ba/bin} : ${OCF_RESKEY_extended_debugging:=0} : ${DSMSERV_DIR:=$OCF_RESKEY_dsmserv_dir} : ${DSMSERV_CONFIG:=$OCF_RESKEY_prefix/$OCF_RESKEY_instance/dsmserv.opt} : ${DSMADMC:=$OCF_RESKEY_dsmclient_dir/dsmadmc} # Make sure we put a note into the log about unconfigured # $OCF_RESKEY_TCPAddress and $OCF_RESKEY_TCPPort. if $TEST -z \u0026#34;$OCF_RESKEY_TCPAddress\u0026#34; -o -z \u0026#34;$OCF_RESKEY_TCPPort\u0026#34; ; then ocf_log info \u0026#34;Either $OCF_RESKEY_TCPAddress or $OCF_RESKEY_TCPPort are not configured.\u0026#34; ocf_log info \u0026#34;This isn\u0026#39;t a major fault (if you are only running a single instance\u0026#34; ocf_log info \u0026#34;for high-availibility), but it is gonna make this script fail if you are having\u0026#34; ocf_log info \u0026#34;multiple instances running on different ports.\u0026#34; fi } dsmserv_checkstatus() { kill -0 \u0026#34;$1\u0026#34; \u0026gt;/dev/null 2\u0026gt;\u0026amp;1 } dsmserv_getpid() { $AWK --source \u0026#39;{print $4}\u0026#39; $OCF_RESKEY_prefix/$OCF_RESKEY_instance/dsmserv.lock 2\u0026gt;/dev/null } dsmserv_debuginfo() { if $TEST $OCF_RESKEY_extended_debugging ; then # Some debug information, makes it easier finding configuration mistakes. ocf_log debug \u0026#34; \u0026#34; ocf_log debug \u0026#34;$OCF_RESKEY_prefix: \u0026#34;$OCF_RESKEY_prefix\u0026#34;\u0026#34; ocf_log debug \u0026#34;$OCF_RESKEY_instance: \u0026#34;$OCF_RESKEY_instance\u0026#34;\u0026#34; ocf_log debug \u0026#34;$OCF_RESKEY_id: \u0026#34;$OCF_RESKEY_id\u0026#34;\u0026#34; ocf_log debug \u0026#34;$OCF_RESKEY_TCPAddress: \u0026#34;$OCF_RESKEY_TCPAddress\u0026#34;\u0026#34; ocf_log debug \u0026#34;$OCF_RESKEY_TCPPort: \u0026#34;$OCF_RESKEY_TCPPort\u0026#34;\u0026#34; ocf_log debug \u0026#34;$OCF_RESKEY_max_retries: \u0026#34;$OCF_RESKEY_max_retries\u0026#34;\u0026#34; ocf_log debug \u0026#34;$OCF_RESKEY_shutdown_timeout: \u0026#34;$OCF_RESKEY_shutdown_timeout\u0026#34;\u0026#34; ocf_log debug \u0026#34;$OCF_RESKEY_dsmserv_dir: \u0026#34;$OCF_RESKEY_dsmserv_dir\u0026#34;\u0026#34; ocf_log debug \u0026#34;$OCF_RESKEY_dsmclient_dir: \u0026#34;$OCF_RESKEY_dsmclient_dir\u0026#34;\u0026#34; ocf_log debug \u0026#34; \u0026#34; ocf_log debug \u0026#34;$DSMSERV_DIR: \u0026#34;$DSMSERV_DIR\u0026#34;\u0026#34; ocf_log debug \u0026#34;$DSMSERV_CONFIG: \u0026#34;$DSMSERV_CONFIG\u0026#34;\u0026#34; ocf_log debug \u0026#34;$DSMADMC: \u0026#34;$DSMADMC\u0026#34;\u0026#34; ocf_log debug \u0026#34; \u0026#34; fi } dsmserv_checksetup() { # Move the checks for dsmserv/dsmadmc binaries and dsmserv.opt/dsmserv.dsk # into a single function. dsmserv_settings local EXIT=\u0026#34;\u0026#34; case \u0026#34;$1\u0026#34; in start) EXIT=\u0026#34;$OCF_NOT_RUNNING\u0026#34; ;; validate) EXIT=\u0026#34;$OCF_ERR_ARGS\u0026#34; ;; esac dsmserv_debuginfo # Terminate rather here than later with a half-hanging dsmserv instance, due to # main configuration values not being set properly. ocf_log debug \u0026#34;Probing whether or not $OCF_RESKEY_prefix, $OCF_RESKEY_instance, $OCF_RESKEY_id\u0026#34; ocf_log debug \u0026#34;and $OCF_RESKEY_password are set.\u0026#34; if $TEST -z \u0026#34;$OCF_RESKEY_prefix\u0026#34; -o -z \u0026#34;$OCF_RESKEY_instance\u0026#34; -o -z \u0026#34;$OCF_RESKEY_id\u0026#34; -o -z \u0026#34;$OCF_RESKEY_password\u0026#34; ; then ocf_log err \u0026#34;Your configuration is missing the most important settings.\u0026#34; ocf_log err \u0026#34;Please check whether you missed either of the following:\u0026#34; ocf_log err \u0026#34;$OCF_RESKEY_prefix, $OCF_RESKEY_instance, $OCF_RESKEY_id or $OCF_RESKEY_password.\u0026#34; ocf_log err \u0026#34;This is a non-recoverable, fatal error!\u0026#34; exit $EXIT fi # Check for the \u0026#39;dsmserv\u0026#39; binary from TIVsm-server ocf_log debug \u0026#34;Probing for existance of $DSMSERV_DIR/dsmserv.\u0026#34; if $TEST ! -x $DSMSERV_DIR/dsmserv ; then ocf_log err \u0026#34;You are lacking a version of IBMs Tivoli Storage Manager Server.\u0026#34; ocf_log err \u0026#34;Make sure you have the TIVsm-server RPM installed. Please check the debug log for further information.\u0026#34; ocf_log err \u0026#34;This is a non-recoverable, fatal error!\u0026#34; exit $EXIT fi # Check for the \u0026#39;dsmadmc\u0026#39; binary from TIVsm-BA ocf_log debug \u0026#34;Probing for existance of $DSMADMC.\u0026#34; if $TEST ! -x $DSMADMC ; then ocf_log err \u0026#34;You are lacking a version of IBMs Tivoli Storage Manager Client.\u0026#34; ocf_log err \u0026#34;Make sure you have the TIVsm-BA RPM installed. Please check the debug log for further information.\u0026#34; ocf_log err \u0026#34;This is a non-recoverable, fatal error!\u0026#34; exit $EXIT fi # Check for \u0026#39;dsmserv.opt\u0026#39; and \u0026#39;dsmserv.dsk\u0026#39; in $OCF_RESKEY_prefix/$OCF_RESKEY_instance. if $TEST ! -f $DSMSERV_CONFIG -o ! -f ${DSMSERV_CONFIG%/*}/dsmserv.dsk ; then ocf_log err \u0026#34;Either $DSMSERV_CONFIG or ${DSMSERV_CONFIG%/*}/dsmserv.dsk for dsmserv instance \u0026#34;$OCF_RESKEY_instance\u0026#34;\u0026#34; ocf_log err \u0026#34;could not be found, thus exiting. The Tivoli Storage Manager Instance you are trying to run, needs\u0026#34; ocf_log err \u0026#34;to be prepared in order to be run by Heartbeat! Also, please check the debug log for further information.\u0026#34; ocf_log err \u0026#34;This is a non-recoverable, fatal error!\u0026#34; exit $EXIT fi return $OCF_SUCCESS } dsmserv_start() { if ocf_is_root ; then : ; else ocf_log err \u0026#34;You must be root.\u0026#34; exit $OCF_ERR_PERM fi if dsmserv_status ; then ocf_log info \u0026#34;dsmserv instance \u0026#34;$OCF_RESKEY_instance\u0026#34; is already running.\u0026#34; exit $OCF_SUCCESS fi dsmserv_checksetup \u0026#34;start\u0026#34; export DSMSERV_CONFIG=$DSMSERV_CONFIG export DSMSERV_DIR=$DSMSERV_DIR # May be removed, still need to test it. cd ${DSMSERV_CONFIG%/*} $DSMSERV_DIR/dsmserv \u0026gt;\u0026gt;/var/log/dsmserv_$OCF_RESKEY_instance.log 2\u0026gt;\u0026amp;1 \u0026amp; unset DSMSERV_CONFIG unset DSMSERV_DIR if $TEST $? -ne 0 ; then ocf_log err \u0026#34;Error. dsmserv instance \u0026#34;$OCF_RESKEY_instance\u0026#34; returned error $?.\u0026#34; exit $OCF_ERR_GENERIC fi ocf_log info \u0026#34;Started dsmserv instance \u0026#34;$OCF_RESKEY_instance\u0026#34;.\u0026#34; exit $OCF_SUCCESS } dsmserv_stop() { if dsmserv_status ; then PID=\u0026#34;$( dsmserv_getpid )\u0026#34; dsmserv_settings dsmserv_debuginfo local CMD=\u0026#34;$DSMADMC -id=$OCF_RESKEY_id -password=$OCF_RESKEY_password -noconfirm -displaymode=list -tcpserveraddress=$OCF_RESKEY_TCPAddress -tcpport=$OCF_RESKEY_TCPPort\u0026#34; local i=1 while $TEST $i -le $OCF_RESKEY_max_retries; do # Check whether or not we need to terminate any running processes first. PROCESSES=\u0026#34;$( $CMD query process | $EGREP \u0026#39;Process Number: .*\u0026#39; | $AWK -F \u0026#39;: \u0026#39; \u0026#39;{ print $2 }\u0026#39; )\u0026#34; ocf_log debug \u0026#34;Try #$i: Processing shutdown tests 1/2 (running processes) for dsmserv instance \u0026#34;$OCF_RESKEY_instance\u0026#34;\u0026#34; ocf_log debug \u0026#34;Executing \u0026#34;$CMD query process | $EGREP \u0026#39;Process Number: .*\u0026#39; | $AWK -F \u0026#39;: \u0026#39; \u0026#39;{ print $2 }\u0026#39;\u0026#34;\u0026#34; ocf_log debug \u0026#34;Process list: \u0026#39;$PROCESSES\u0026#39;\u0026#34; if $TEST -n $PROCESSES ; then ocf_log debug \u0026#34;Try #$i: Processing shutdown steps 1/2 (running processes) for dsmserv instance \u0026#34;$OCF_RESKEY_instance\u0026#34;\u0026#34; ocf_log info \u0026#34;Try #$i: Canceling all active processes.\u0026#34; for process in $PROCESSES; do ocf_log debug \u0026#34;Executing \u0026#34;$CMD cancel process $process\u0026#34;\u0026#34; $CMD cancel process $process \u0026gt;\u0026gt;/var/log/dsmadmc.log 2\u0026gt;\u0026amp;1 done fi # Check whether or not we need to unmount the drives first. VOLUMES=\u0026#34;$( $CMD query mount | $EGREP \u0026#39;LTO volume .* is mounted\u0026#39; | $AWK -F \u0026#39; \u0026#39; \u0026#39;{ print $4 }\u0026#39; )\u0026#34; ocf_log debug \u0026#34;Try #$i: Processing shutdown tests 2/2 (volume mounts) for dsmserv instance \u0026#34;$OCF_RESKEY_instance\u0026#34;\u0026#34; ocf_log debug \u0026#34;Executing \u0026#34;$CMD query mount | $EGREP \u0026#39;LTO volume .* is mounted\u0026#39; | $AWK -F \u0026#39; \u0026#39; \u0026#39;{ print $4 }\u0026#39;\u0026#34;\u0026#34; ocf_log debug \u0026#34;Mounted volumes: \u0026#39;$VOLUMES\u0026#39;\u0026#34; if $TEST -n \u0026#34;$VOLUMES\u0026#34; ; then ocf_log debug \u0026#34;Try #$i: Processing shutdown steps 2/2 (volume mounts) for dsmserv instance \u0026#34;$OCF_RESKEY_instance\u0026#34;\u0026#34; ocf_log info \u0026#34;Try #$i: Dismounting all mounted volumes.\u0026#34; for tape in $VOLUMES; do ocf_log debug \u0026#34;Executing \u0026#34;$CMD dismount volume $tape\u0026#34;\u0026#34; $CMD dismount volume $tape \u0026gt;\u0026gt;/var/log/dsmadmc.log 2\u0026gt;\u0026amp;1 done fi i=$(($i+1)) done # Now, halt the server instance ocf_log info \u0026#34;Trying to send the \u0026#39;HALT\u0026#39; command to the dsmserv instance \u0026#34;$OCF_RESKEY_instance\u0026#34;.\u0026#34; ocf_log debug \u0026#34;Executing \u0026#34;$CMD halt\u0026#34;\u0026#34; $CMD halt \u0026gt;\u0026gt;/var/log/dsmadmc.log 2\u0026gt;\u0026amp;1 local i=1 while $TEST $i -le $OCF_RESKEY_max_retries; do ocf_log debug \u0026#34;Try #$i: Waiting for $OCF_RESKEY_shutdown_timeout seconds.\u0026#34; sleep $OCF_RESKEY_shutdown_timeout i=$(($i+1)) done if dsmserv_checkstatus \u0026#34;$PID\u0026#34; ; then ocf_log err \u0026#34;Sending the \u0026#39;HALT\u0026#39; command to the dsmserv instance \u0026#34;$OCF_RESKEY_instance\u0026#34; failed.\u0026#34; ocf_log debug \u0026#34;The server might still be shutting down, try increasing $OCF_RESKEY_shutdown_timeout.\u0026#34; ocf_log info \u0026#34;Proceeding with a SIGTERM.\u0026#34; kill $PID if $TEST $? -ne 0 ; then ocf_log err \u0026#34;Ending the dsmserv instance \u0026#34;$OCF_RESKEY_instance\u0026#34; with SIGTERM failed.\u0026#34; ocf_log info \u0026#34;Proceeding with a SIGKILL.\u0026#34; kill -SIGKILL $PID if $TEST $? -ne 0 ; then ocf_log err \u0026#34;Ending the dsmserv instance \u0026#34;$OCF_RESKEY_instance\u0026#34; with SIGKILL failed.\u0026#34; ocf_log err \u0026#34;Failed ending the process, giving up. User intervention is required.\u0026#34; return $OCF_ERR_GENERIC fi fi fi fi ocf_log info \u0026#34;Stopped dsmserv instance \u0026#34;$OCF_RESKEY_instance\u0026#34;.\u0026#34; exit $OCF_SUCCESS } dsmserv_status() { if $TEST -f $OCF_RESKEY_prefix/$OCF_RESKEY_instance/dsmserv.lock ; then # dsmserv is probably still running PID=\u0026#34;$( dsmserv_getpid )\u0026#34; if $TEST -n $PID ; then dsmserv_checkstatus \u0026#34;$PID\u0026#34; \u0026gt;/dev/null \u0026amp;\u0026amp; [ `ps -p $PID | grep dsmserv | wc -l` -eq 1 ] return $? fi fi false } dsmserv_monitor() { if dsmserv_status ; then return $OCF_SUCCESS else return $OCF_NOT_RUNNING fi } dsmserv_usage() { echo \u0026#34;Usage: $0 {start|stop|status|monitor|validate-all}\u0026#34; \u0026gt;\u0026amp;2 exit $OCF_SUCCESS } case \u0026#34;$1\u0026#34; in start) dsmserv_start ;; stop) dsmserv_stop ;; status) dsmserv_status ;; monitor) dsmserv_monitor ;; validate-all) dsmserv_checksetup \u0026#34;validate\u0026#34; ;; meta-data) dsmserv_metadata ;; usage) dsmserv_usage ;; notify|demote|promote|migrate_to|migrate_from|reload|recover) exit $OCF_ERR_UNIMPLEMENTED ;; *) dsmserv_usage exit $OCF_ERR_UNIMPLEMENTED ;; esac As you can see, I reworked the \u0026ldquo;stop\u0026rdquo; phase, to first terminate all running processes and then dismount all tapes in order to avoid data corruption (that was an advice from our friendly IBM systems engineer); if that fails, try terminating it by a \u0026ldquo;friendly\u0026rdquo; kill (SIGTERM); and if that ain\u0026rsquo;t helping, kill it the \u0026ldquo;Die Hard Way\u0026rdquo;™ (SIGKILL).\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_linux-ha-and-tivoli-storage-manager/","summary":"\u003cp\u003eWell, since we received part of our shipment on Wednesday, I finally looked at how we\u0026rsquo;re gonna deploy our active/active Tivoli Storage Manager configuration. Right now, we do have a single pSeries box hosting ~100 client nodes which we\u0026rsquo;re looking to split by two (since we do have two x366 for that purpose now).\u003c/p\u003e\n\u003cp\u003eNow, as there ain\u0026rsquo;t no solution for this scenario yet (neither from International Business Machines nor someone out of the open source community), I sat down and started writing an OCF Resource agent for dsmserv (that is the Tivoli Storage Manager server).\u003c/p\u003e","title":"Linux-HA and Tivoli Storage Manager"},{"content":"Well, I was at work for a brief moment, where I grabbed me one of our SATA-\u0026gt;USB bridges, since I need to migrate some (~750GB) data of the old raid-array and onto a new one. The troublesome about that is simply, that the current RAID controller only supports four attached devices, that\u0026rsquo;s why I do have to use something like this \u0026hellip; Sure I could have bought a new RAID controller, but why spend 45+ EUR on something, that you can solve differently ?\nWell, after figuring that I need to change my kernel config yet again (didn\u0026rsquo;t have USB support till Tue Dec 23 ~16:45:00 CET 2008) I attached the adapter to two adjacent USB ports. And shortly after copying 4-10MB, the transfer would result in a read-only EXT3 file system with something like this in the syslog:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Dec 23 17:23:57 epimetheus usb 1-2: new high speed USB device using ehci_hcd and address 2 Dec 23 17:23:57 epimetheus usb usb3: New USB device found, idVendor=1d6b, idProduct=0001 Dec 23 17:23:57 epimetheus usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1 Dec 23 17:23:57 epimetheus usb usb3: Product: OHCI Host Controller Dec 23 17:23:57 epimetheus usb usb3: Manufacturer: Linux 2.6.25-hardened-r11 ohci_hcd Dec 23 17:23:57 epimetheus usb usb3: SerialNumber: 0000:00:02.1 Dec 23 17:23:57 epimetheus Initializing USB Mass Storage driver... Dec 23 17:23:57 epimetheus usb 1-2: reset high speed USB device using ehci_hcd and address 2 Dec 23 17:23:57 epimetheus usb 1-2: device descriptor read/64, error -71 Dec 23 17:23:58 epimetheus usb 1-2: reset high speed USB device using ehci_hcd and address 2 Dec 23 17:23:58 epimetheus usb 1-2: device descriptor read/64, error -71 Dec 23 17:23:58 epimetheus usb 1-2: reset high speed USB device using ehci_hcd and address 2 Dec 23 17:23:58 epimetheus usb 1-2: device not accepting address 2, error -71 Dec 23 17:23:59 epimetheus usb 1-2: reset high speed USB device using ehci_hcd and address 2 Dec 23 17:23:59 epimetheus usb 1-2: device not accepting address 2, error -71 Dec 23 17:23:59 epimetheus usb 1-2: USB disconnect, address 2 Dec 23 17:23:59 epimetheus sd 4:0:0:0: Device offlined - not ready after error recovery Dec 23 17:23:59 epimetheus sd 4:0:0:0: [sde] Result: hostbyte=0x01 driverbyte=0x00 Dec 23 17:23:59 epimetheus end_request: I/O error, dev sde, sector 1229380295 Dec 23 17:23:59 epimetheus end_request: I/O error, dev sde, sector 1229380535 Dec 23 17:23:59 epimetheus Aborting journal on device sde1. Dec 23 17:23:59 epimetheus ext3_abort called. Dec 23 17:23:59 epimetheus EXT3-fs error (device sde1): ext3_journal_start_sb: Detected aborted journal Dec 23 17:23:59 epimetheus Remounting filesystem read-only Dec 23 17:23:59 epimetheus EXT3-fs error (device sde1) in ext3_ordered_writepage: IO failure Dec 23 17:23:59 epimetheus __journal_remove_journal_head: freeing b_frozen_data Dec 23 17:23:59 epimetheus __journal_remove_journal_head: freeing b_frozen_data Dec 23 17:23:59 epimetheus __journal_remove_journal_head: freeing b_frozen_data Dec 23 17:23:59 epimetheus __journal_remove_journal_head: freeing b_frozen_data Dec 23 17:23:59 epimetheus __journal_remove_journal_head: freeing b_committed_data Well, now what ? I googled a for a bit, apparently this happens when EHCI tries to write to the device and gets a timeout, cause the device is rather slow \u0026ndash; or whatever (or the device drops down to USB 1.1). So, after disabling EHCI, the transfer has been running for about three hours now, and roughly only 1/12 of the data transferred to the external disk. Only trouble with that is, that even USB 1.1 is kinda slow to transfer 750GiB \u0026#x2757;\nFollowup: Well, due to USB 1.1 being slow as a snail, I went surfing for alternatives using Windows (since I know that the bridge does full USB 2.0 with Windows without any troubles). And guess what I found ? There\u0026rsquo;s an EXT2/3 device driver for Windows XP, yay! So I\u0026rsquo;m copying with full 100Mbit speed right now \u0026#x1f937;\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_usb-weirdness/","summary":"\u003cp\u003eWell, I was at work for a brief moment, where I grabbed me one of our SATA-\u0026gt;USB bridges, since I need to migrate some (~750GB) data of the old raid-array and onto a new one. The troublesome about that is simply, that the current RAID controller only supports four attached devices, that\u0026rsquo;s why I do have to use something like this \u0026hellip; Sure I could have bought a new RAID controller, but why spend 45+ EUR on something, that you can solve differently ?\u003c/p\u003e","title":"USB weirdness"},{"content":"Well, after I had so much trouble with the USB converter (which isn\u0026rsquo;t really suited for Linux), I went ahead and bought a DawiControl DC-154 (which is using a SIL3114) controller to migrate my stuff.\nAfter fucking up the new RAID array with the 1TB disks on the old controller (luckily I had the old hard disks still lying around, which still contained the RAID array), I plugged the 1TB disks onto the new controller and started building the array. So after 760 minutes (that\u0026rsquo;s nearly 13 hours) of synchronizing the newly created array, I was finally able to create the file system \u0026ndash; that should be without trouble, right ?\nWell, yeah \u0026hellip; it was \u0026hellip; So I started putting the data on the newly created array (using rsync). Only problem: something seems to be corrupting data (as in EXT3 is barfing up a lot of file system errors).\n1 2 3 4 5 6 7 Dec 28 08:47:21 epimetheus [67092.652866] EXT3-fs: mounted filesystem with ordered data mode. Dec 28 09:53:20 epimetheus [71058.253027] EXT3-fs error (device md2): ext3_add_entry: bad entry in directory #23371810: directory entry across blocks - offset=260, inode=18964552, rec_len=26988, name_len=115 Dec 28 09:53:20 epimetheus [71058.305558] EXT3-fs error (device md2): ext3_add_entry: bad entry in directory #23371810: directory entry across blocks - offset=260, inode=18964552, rec_len=26988, name_len=115 (fsck.ext3 is returning much, much more ..)\nAfter putting the blame on EXT3, I tried out reiserfs (yeah, yeah I know .. baaaad idea). Well, at first it didn\u0026rsquo;t put out any errors, but running fsck.reiserfs turned up errors that looked a lot like the ones fsck.ext3 returned.\nThen, I started looking at the array size (since I was curious), and it said the new array on four 1TB disks is ~760GB. Now according to my improper math, using 4* 1000GB drives the total usable amount of disk space should be something like 2793.96GB, and not ~760GB. \u0026#x1f937;\nI\u0026rsquo;m out of idea\u0026rsquo;s right now, and I\u0026rsquo;m gonna wait till January till I do anything else.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_sil-3114-barfing/","summary":"\u003cp\u003eWell, after I had \u003ca href=\"/posts/2014-08-08_usb-weirdness\" title=\"USB weirdness\"\u003eso much trouble with the USB converter\u003c/a\u003e (which isn\u0026rsquo;t really suited for Linux), I went ahead and bought a DawiControl DC-154 (which is using a SIL3114) controller to migrate my stuff.\u003c/p\u003e\n\u003cp\u003eAfter fucking up the new RAID array with the 1TB disks on the old controller (luckily I had the old hard disks still lying around, which still contained the RAID array), I plugged the 1TB disks onto the new controller and started building the array. So after 760 minutes (that\u0026rsquo;s nearly 13 hours) of synchronizing the newly created array, I was finally able to create the file system \u0026ndash; that should be without trouble, right ?\u003c/p\u003e","title":"SIL 3114 barfing"},{"content":"As I pointed out back in October, it\u0026rsquo;s rather easy to create a setup which syncs a built binary package to a remote node (which is serving them to the world - via http,rsync,ftp - pick your poison).\nNow, ever since we had slight space problems on miranda ( \u0026#x1f915; my binpkgs \u0026#x1f915;), I wanted to look into methods on how to get rid of storing them on the buildnode and the webnode. I think now (hehe, it\u0026rsquo;s only 7pm), I finally managed to get a \u0026quot; proper\u0026quot; bashrc which does a lot of that foo. Take a look at this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 ... syncpkg() { # Syncing the binary tbz2 to my webhost if is_feature \u0026#34;buildpkg\u0026#34; \u0026amp;\u0026amp; [[ -n $REPO_HOST \u0026amp;\u0026amp; -n $REPO_BASE \u0026amp;\u0026amp; -n $REPO_PATH ]] ; then REMOTE_TARGET=\u0026#34;$REPO_HOST:$REPO_BASE/$REPO_PATH\u0026#34; REMOTE_ECACHE=\u0026#34;$REPO_BASE/$REPO_PATH/settings/.ebuild.x\u0026#34; einfo \u0026#34;Publishing data to remote repository ($REPO_PATH) on ${REPO_HOST##*@}\u0026#34; if ! $( ssh $REPO_HOST \u0026#34;test -d $REPO_BASE/$REPO_PATH/settings\u0026#34; ) ; then ssh $REPO_HOST \u0026#34;mkdir -p $REPO_BASE/$REPO_PATH/settings\u0026#34; \u0026gt;\u0026gt; /var/log/syncpkg.log 2\u0026gt;\u0026amp;1 fi if [ -x /usr/bin/q ] ; then /usr/bin/qlist -IvCU \u0026gt; /etc/portage/package.list fi ebegin \u0026#34; [ SYNC: 1/3] /etc/make.conf, /etc/portage/package* to $REPO_PATH/settings\u0026#34; rssh /etc/{make.conf,portage/package*,portage/profile,portage/bin,portage/bashrc} $REMOTE_TARGET/settings/ \u0026gt; /var/log/syncpkg.log 2\u0026gt;\u0026amp;1 eend $? ebegin \u0026#34; [ SYNC: 2/3] $PKGDIR to $REPO_PATH\u0026#34; rssh $PKGDIR/ $REMOTE_TARGET/ \u0026gt;\u0026gt; /var/log/syncpkg.log 2\u0026gt;\u0026amp;1 eend $? ebegin \u0026#34; [ SYNC: 3/3] Cleaning $PKGDIR\u0026#34; rm -rf $PKGDIR/* \u0026gt;\u0026gt; /var/log/syncpkg.log 2\u0026gt;\u0026amp;1 eend $? # We sync our copy of .ebuild.x over to the webnode, as it might not be # synced as often / at the same time as the buildnode. Thus the # `qpkg --eclean\u0026#39; would remove packages, which *are* in the tree, but # the webnode hasn\u0026#39;t synced up yet. rssh $PORTDIR/.ebuild.x $REMOTE_TARGET/settings/.ebuild.x \u0026gt;\u0026gt; /var/log/syncpkg.log 2\u0026gt;\u0026amp;1 if $( ssh $REPO_HOST \u0026#34;test -f $REMOTE_ECACHE\u0026#34; ) ; then ebegin \u0026#34; [MAINT: 1/3] Removing stale packages in $REPO_PATH\u0026#34; ssh $REPO_HOST \u0026#34;CACHE_EBUILD_FILE=$REMOTE_ECACHE qpkg -Eq -P $REPO_BASE/$REPO_PATH/\u0026#34; \u0026gt;\u0026gt; /var/log/syncpkg.log 2\u0026gt;\u0026amp;1 eend $? fi # And now remove the .ebuild.x copy again. ssh $REPO_HOST \u0026#34;rm -f $REMOTE_ECACHE\u0026#34; \u0026gt;\u0026gt; /var/log/syncpkg.log 2\u0026gt;\u0026amp;1 # The user ssh\u0026#39;ing, needs to be in the portage group on the remote # end. Otherwise, things *will* go wrong (like genpkgindex being # unable to write to /var/cache/edb/xpak). Also /var/cache/edb/xpak # needs to be owned by portage:portage, as well as group-writeable. if $( ssh $REPO_HOST \u0026#34;test -w /var/cache/edb/xpak\u0026#34; ) ; then ebegin \u0026#34; [MAINT: 2/3] Regenerating $REPO_PATH/Packages\u0026#34; ssh $REPO_HOST \u0026#34;$REPO_BASE/$REPO_PATH/settings/bin/genpkgindex $REPO_BASE/$REPO_PATH/All\u0026#34; \u0026gt;\u0026gt; /var/log/syncpkg.log 2\u0026gt;\u0026amp;1 eend $? fi if ! $( ssh $REPO_HOST \u0026#34;test -L $REPO_BASE/$REPO_PATH/Packages\u0026#34; ) ; then ebegin \u0026#34; [MAINT: 3/3] Fixing $REPO_PATH/Packages symlink\u0026#34; ssh $REPO_HOST \u0026#34;cd $REPO_BASE/$REPO_PATH; rm -f Packages; ln -s All/Packages\u0026#34; \u0026gt;\u0026gt; /var/log/syncpkg.log 2\u0026gt;\u0026amp;1 eend $? fi fi } ... As you can see, it does a lot of things, which are all connected with binary package repositories (including cleaning up old packages no longer in the tree - trying not to waste too much space). Sadly, I currently have to use a custom patched qpkg version, as the one implementing the \u0026ndash;eclean features isn\u0026rsquo;t in the tree yet. When I talked to Ned the other day, he complained about it being slow (well, yeah \u0026ndash; it has to go through the whole tree) which I don\u0026rsquo;t really see when you look at what it\u0026rsquo;s doing.\nAlso, I had a weird phenomenon today happening: the buildnode built a binary package, sent it to the webnode, which ran ` qpkg \u0026ndash;eclean\u0026rsquo; afterwards. But after that the binary package was gone. \u0026quot; Why\u0026quot; you ask now ? Well, apparently the webnode isn\u0026rsquo;t synced the same time the buildnode syncs (the webnode is in Germany, the buildnode in the US). So I had to come up with a trick, in order to fool qpkg into not cleaning the freshly built binary packages. See the `rssh\u0026rsquo; in front of the qpkg call ? Guess what, that\u0026rsquo;s the lil\u0026rsquo; dirty trick \u0026hellip;\nAnyway, the full bashrc is available. The next thing I\u0026rsquo;m gonna have to look at (which Markus already did), is building packages via buildbot.\nUpdate: as you see, I updated the bashrc a bit. That\u0026rsquo;s because after writing this, I started a new (fresh) binpkg repository (empty), and out of the sudden the thing ain\u0026rsquo;t syncing correctly (as in no Packages file, no portage settings). Turns out, rsync doesn\u0026rsquo;t create directories which ain\u0026rsquo;t there. So another extra ` ssh\u0026rsquo; execution to create the settings/ directory inside the repo.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_advanced-bashrc-turning-a-simple-chroot-into-a-binpkg-repository-continued/","summary":"\u003cp\u003eAs I pointed out back in \u003ca href=\"/posts/2014-08-08_advanced-bashrc-turning-a-simple-chroot-into-a-binpkg-repository-continued\"\u003eOctober\u003c/a\u003e, it\u0026rsquo;s rather easy to create a setup which syncs a built binary package to a remote node (which is serving them to the world - via http,rsync,ftp - pick your poison).\u003c/p\u003e\n\u003cp\u003eNow, ever since we had slight space problems on miranda ( \u0026#x1f915; my binpkgs \u0026#x1f915;), I wanted to look into methods on how to get rid of storing them on the buildnode and the webnode. I think now (hehe, it\u0026rsquo;s only 7pm), I finally managed to get a \u0026quot; \u003cem\u003eproper\u003c/em\u003e\u0026quot; bashrc which does a lot of that foo. Take a look at this:\u003c/p\u003e","title":"Advanced bashrc ('Turning a simple chroot into a binpkg repository' continued)"},{"content":"Disclaimer: I don’t take any responsibility for faults within the software, I just provide the RPM’s! Feel free to ask me about stuff concerning these RPM’s, but I ain’t accountable if your stuff goes kaboom …\nWell, I just looked at opsview again (haha, thanks Alex \u0026#x1f61b;). Only trouble is, the people over at opsview don\u0026rsquo;t distribute RPM\u0026rsquo;s for that \u0026hellip; After registering for their site, to download the SRPM\u0026rsquo;s (or to download anything), I got the RPM\u0026rsquo;s and started looking at them.\nWell, the only things I needed to adjust in opsview-base, opsview-core and opsview-perl were the dependencies. I also needed to rebuild a RP M for perl-Version from Dag Wieers, since opsview-perl required them to even build.\nopsview 2.14.1 (build 1695-1) opsview-agent (i586, x86_64) opsview-base (i586, x86_64) opsview-core (noarch) opsview-perl (i586, x86_64) opsview-reports (noarch) opsview-slave (i586, x86_64) opsview-web (noarch) opsview 3.0.0 (beta, build 1895-1) opsview-agent (i586, x86_64) opsview-base (i586, x86_64) opsview-core (noarch) opsview-perl (i586, x86_64) opsview-reports (noarch) opsview-slave (noarch) opsview-web (noarch) Installation order is like this:\nopsview-base opsview-perl opsview-web opsview-core opsview-reports If you are looking for older versions, try the respective directory on distributions.barfoo.org (for example i586 for SLES10).\nIf you encounter a missing link (either striked or just missing), please note that older builds aren\u0026rsquo;t available anymore.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_building-opsview-for-suse-linux-enterprise-10/","summary":"\u003cp\u003e\u003cstrong\u003eDisclaimer:\u003c/strong\u003e I don’t take \u003cem\u003eany responsibility\u003c/em\u003e for faults within the software, I just provide the RPM’s! Feel free to ask me about stuff concerning these RPM’s, but I ain’t accountable if your stuff goes \u003cstrong\u003ekaboom\u003c/strong\u003e …\u003c/p\u003e\n\u003cp\u003eWell, I just looked at \u003ca href=\"http://www.opsview.com/\"\u003eopsview\u003c/a\u003e again (haha, thanks Alex \u0026#x1f61b;). Only trouble is, the people over at opsview don\u0026rsquo;t distribute RPM\u0026rsquo;s for that \u0026hellip; After registering for their site, to download the SRPM\u0026rsquo;s (or to download anything), I got the RPM\u0026rsquo;s and started looking at them.\u003c/p\u003e","title":"Building opsview for SUSE Linux Enterprise 10"},{"content":"For those of you, still using my binary packages. It\u0026rsquo;s just a waste of disk space for me (6.8G to be exact), so I decided to remove them. I\u0026rsquo;m gonna give people one week to grab yourself a copy. I\u0026rsquo;m gonna keep the bashrc and all the other stuff I wrote back when I was still interested in binary packages, but the binary packages are gonna vanish!\nAgain, grab yourself a copy if you need them, at some point next week (probably on Friday), I\u0026rsquo;m simply gonna rm -rf them.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_packages-barfoo-org-is-going-away/","summary":"\u003cp\u003eFor those of you, still using my binary packages. It\u0026rsquo;s just a waste of disk space for me (6.8G to be exact), so I decided to remove them. I\u0026rsquo;m gonna give people one week to grab yourself a copy. I\u0026rsquo;m gonna keep the bashrc and all the other stuff I wrote back when I was \u003ca href=\"/posts/2014-08-16_turning-a-simple-chroot-into-a-binpkg-repository\" title=\"Advanced bashrc ('Turning a simple chroot into a binpkg repository' continued)\"\u003estill interested\u003c/a\u003e in binary packages, but the binary packages \u003cstrong\u003eare gonna vanish\u003c/strong\u003e!\u003c/p\u003e","title":"packages-barfoo-org is going away"},{"content":"Well, today I once again had the case where a virtual machine (in my case a Virtual Machine Template) was kinda stuck. You couldn\u0026rsquo;t remove the template (as in the entries for \u0026ldquo;Remove from inventory\u0026rdquo; was grayed out) and you couldn\u0026rsquo;t re-add the Virtual Machine\u0026rsquo;s VMX from the datastore browser either.\nVI Client - Disconnected templates\nThough, a simple putting the host into maintenance mode and rebooting helped that problem. Maybe there is a simpler solution for this, I just don\u0026rsquo;t know about it.\nThanks to Sven in #1, I now know that simple solution for my problem!\n1 2 3 4 5 6 7 [root@esxi root]# /etc/init.d/mgmt-vmware restart Stopping VMware ESX Server Management services: VMware ESX Server Host Agent Watchdog [ OK ] VMware ESX Server Host Agent [ OK ] Starting VMware ESX Server Management services: VMware ESX Server Host Agent (background) [ OK ] Availability report startup (background) [ OK ] Half a minute, and a heart-stopping moment later (all VM\u0026rsquo;s on that host turn grey after the first update) the VM\u0026rsquo;s are accessible again. Thanks again to Sven!\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_vmware-vcenter-is-not-connected/","summary":"\u003cp\u003eWell, today I once again had the case where a virtual machine (in my case a Virtual Machine Template) was kinda stuck. You couldn\u0026rsquo;t remove the template (as in the entries for \u0026ldquo;Remove from inventory\u0026rdquo; was grayed out) and you couldn\u0026rsquo;t re-add the Virtual Machine\u0026rsquo;s VMX from the datastore browser either.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2014/08/vi-disconnected-image.png\"\n         alt=\"VI Client - Disconnected templates\" width=\"400\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eVI Client - Disconnected templates\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eThough, a simple putting the host into maintenance mode and rebooting helped that problem. Maybe there is a simpler solution for this, I just don\u0026rsquo;t know about it.\u003c/p\u003e","title":"VMware vCenter: is not connected"},{"content":"Well, I just had another look at our client scheduler services on our Microsoft Cluster. A while back we noticed that those scheduler services were going nuts after some time. Well, as it turns out, I can tell why. Microsoft Cluster Services have a feature called registration replication, which replicates a given key, if changed when the resource is online, to all connected cluster nodes.\nNow, we added the obvious registry key to the settings of our cluster resources for the scheduler services ( SOFTWAREIBMADSMCurrentVersionBackupClientNodes) and the scheduler service would use the same registry key to store it\u0026rsquo;s passwords. But it seems we were far off with that assumption.\nThe scheduler service uses another registry key, it\u0026rsquo;s quite similar to the one the GUI is using, but it\u0026rsquo;s different enough ( SOFTWAREIBMADSMCurrentVersionNodes).\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_tivoli-storage-manager-client-and-microsoft-cluster-services/","summary":"\u003cp\u003eWell, I just had another look at our client scheduler services on our \u003ca href=\"http://www.microsoft.com/windowsserver2003/enterprise/clustering.mspx\"\u003eMicrosoft Cluster\u003c/a\u003e. A while back we noticed that those scheduler services were going nuts after some time. Well, as it turns out, I can tell why. Microsoft Cluster Services have a feature called \u003ca href=\"http://support.microsoft.com/kb/174070\"\u003eregistration replication\u003c/a\u003e, which replicates a given key, if changed when the resource is online, to all connected cluster nodes.\u003c/p\u003e\n\u003cp\u003eNow, we added the obvious registry key to the settings of our cluster resources for the scheduler services ( \u003cem\u003eSOFTWAREIBMADSMCurrentVersionBackupClientNodes\u003c!-- raw HTML omitted --\u003e\u003c/em\u003e) and the scheduler service would use the same registry key to store it\u0026rsquo;s passwords. But it seems we were far off with that assumption.\u003c/p\u003e","title":"Tivoli Storage Manager Client and Microsoft Cluster Services"},{"content":"Well, Arne recently (not really recently though .. \u0026#x1f61b; ) complained about my blog being waaay to technical, so I ended up writing this lil\u0026rsquo; anecdote.\nI\u0026rsquo;m finally on my long awaited, the remaining year lasting vacation. Last week was interrupted by a short job interview in Nuremberg, and also by the flu (not \u0026quot; again\u0026quot;, I still got it in me, haven\u0026rsquo;t been able to shake it now for about three months).\nToday I\u0026rsquo;m spending the night on Spiekeroog, which is a smallish island in the middle of the North Sea. It\u0026rsquo;s a real neat island, and if I would have the choice of deciding whether or not to move here for the same salary, I\u0026rsquo;d probably do it. Spiekeroog certainly does have a certain amount of flair, which I ain\u0026rsquo;t gonna deny. But it also does have it\u0026rsquo;s drawbacks.\nOne thing \u0026quot; neat\u0026quot; about Spiekeroog is, that it\u0026rsquo;s completely isolated from the CO² pollution. There is not a single car on the island (well, besides emergency services like police and fire/rescue) - only electric cars.\nIt\u0026rsquo;s located in the North Sea, so it\u0026rsquo;s exposed to the raw Atlantic weather of which I got a good taste today. When I was planning the trip a few weeks back, I allotted about 8 hours for the 400km\u0026rsquo;ish trip to Neuharlingersiel. Due to my driving \u0026quot; skills\u0026quot; ( \u0026#x1f600; others would say I do have a rather heavy foot - 170km/h or 105.6331 mph for those not able to deal with the metric system \u0026#x2757; ), I was there about two hours early. So I went eating some crab soup (which was really delicious) and then went down to the harbour, where the hotel boat was gonna pick me up. And then it started raining (as in pouring), with only about 2°C air temperature. So basically I was freezing my bollocks off.\nAnyway, after eating dinner worth fifty bucks in the restaurant (well, don\u0026rsquo;t forget the expensive rose wine - which was a bit sour actually, as well as the three bucks of delicious tea) I\u0026rsquo;m now all cosy within my bed and all tucked in.\nCheerio for now!\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_short-vacation/","summary":"\u003cp\u003eWell, \u003ca href=\"http://uplegger.eu\"\u003eArne\u003c/a\u003e recently (not really recently though .. \u0026#x1f61b; ) complained about my blog being waaay to technical, so I ended up writing this lil\u0026rsquo; anecdote.\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;m finally on my long awaited, the remaining year lasting vacation. Last week was interrupted by a short job interview in Nuremberg, and also by the flu (not \u0026quot; \u003cem\u003eagain\u003c/em\u003e\u0026quot;, I still got it in me, haven\u0026rsquo;t been able to shake it now for about three months).\u003c/p\u003e","title":"Short vacation"},{"content":"Well, kernel updates on our Linux servers running IBM\u0026rsquo;s RDAC driver (developed by LSI) is a real pest .. especially if you have to reboot the box two times in order to install the drivers/initrd correctly.\nSo I sat down and looked at the Makefile. Turns out, it just needs four tweaks in order to be working with a different kernel version (which you have to pass using environment variables to make).\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 --- linuxrdac-09.03.0C05.0030.orig/Makefile +++ linuxrdac-09.03.0C05.0030/Makefile @@ -25,7 +25,10 @@ # ####################################################################### -OS_VER := $(shell uname -r) +ifeq (\u0026#34;$(OS_VER)\u0026#34;,\u0026#34;\u0026#34;) +\tOS_VER := $(shell uname -r) +endif + HOST_TYPE := $(shell uname -m) IS_SMP := $(shell (uname -v | grep -c \u0026#34;SMP\u0026#34;)) # Kernel Distribution (either REDHAT or SUSE) @@ -170,7 +173,7 @@ copyrpmfiles : moduledep : @echo \u0026#34;Generating module dependencies...\u0026#34; -\t@/sbin/depmod $(uname -r) +\t@/sbin/depmod $(OS_VER) setupfiles : @install -o root -g root -m 0500 -D Makefile $(DEST_DIR)/opt/mpp/makefile.saved @@ -190,7 +193,7 @@ setupfiles : rm devicemapping; fi setupdriver: -\t@/opt/mpp/setupDriver.$(DIST) +\t@/opt/mpp/setupDriver.$(DIST) $(OS_VER) @if [ -f /etc/SuSE-release ]; then /sbin/insserv /etc/init.d/mpp; else @@ -266,7 +269,7 @@ uninstall_doer: @echo \u0026#34;The mpp RAMdisk image mpp-$(OS_VER).img has been removed. You may want to remove it from your boot loader config file.\u0026#34; @if test ! -s /var/mpp/devicemapping ; then rm -rf /var/mpp/; fi @echo \u0026#34;Generating module dependencies...\u0026#34; -\t@/sbin/depmod $(uname -r) +\t@/sbin/depmod $(OS_VER) LINUX_RDAC_DIR := $(shell pwd) After that, a simple make KERNEL_OBJ=/lib/modules/2.6.16.60-0.37_f594963d-smp/build OS_VER=2.6.16.60-0.37_f594963d-smp install correctly installs the modules in /lib/modules, rebuilds the correct modules dependencies and builds the correct initrd image.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_ibm-rdac-installing-the-driver-for-a-not-yet-running-version/","summary":"\u003cp\u003eWell, kernel updates on our Linux servers running IBM\u0026rsquo;s RDAC driver (developed by \u003ca href=\"http://www.lsi.com/rdac/ds4000.html#current\"\u003eLSI\u003c/a\u003e) is a real pest .. especially if you have to reboot the box two times in order to install the drivers/initrd correctly.\u003c/p\u003e\n\u003cp\u003eSo I sat down and looked at the Makefile. Turns out, it just needs four tweaks in order to be working with a different kernel version (which you have to pass using environment variables to make).\u003c/p\u003e","title":"IBM RDAC: Installing the driver for a (not yet) running version"},{"content":"Well, after yesterday\u0026rsquo;s lesson about getting the IBM RDAC to install for a not-yet-running kernel, I decided to take it a step further. Novell does have some documentation about KMP\u0026rsquo;s, which is actually rather good, especially the guide written by Andreas Grünbacher.\nAfter a short tinkering, I got it actually working. I was kinda surprised, at how easily it actually is. One problem I still have to deal with, is modifying the %post, to generate the mpp-initrd image. For now, the KMP only contains the default %post, which updates the modules.* stuff.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 Name: ibm-rdac License: GPL Group: System/Kernel Summary: IBM Multipathing driver for DS4000 disk subsystems. Version: 09.03.0C05.0030 Release: 0.1 Source0: rdac-LINUX-%version-source.tar.gz BuildRequires: kernel-source kernel-syms BuildRoot: %{_tmppath}/%{name}-%{version}-build Requires(post): mppUtil-%{version}, module-init-tools Requires(preun): module-init-tools Requires(postun): module-init-tools %suse_kernel_module_package um %description This is the Engenio Linux RDAC Driver Package for IBM DS4000 Storage Subsystems. %package KMP Group: System/Kernel Summary: IBM Multipathing driver for DS4000 disk subsystems. %description KMP This is the Engenio Linux RDAC Driver Package for IBM DS4000 Storage Subsystems. %prep %setup -n linuxrdac-%{version} set -- * mkdir source mv \u0026#34;$@\u0026#34; source/ mkdir obj %build export EXTRA_CFLAGS=\u0026#39;-DVERSION=\u0026#34;%version\u0026#34;\u0026#39; for flavor in %flavors_to_build; do rm -rf obj/$flavor cp -r source obj/$flavor make -C /usr/src/linux-obj/%_target_cpu/$flavor modules M=$PWD/obj/$flavor done %install export INSTALL_MOD_PATH=$RPM_BUILD_ROOT export INSTALL_MOD_DIR=updates for flavor in %flavors_to_build; do make -C /usr/src/linux-obj/%_target_cpu/$flavor modules_install M=$PWD/obj/$flavor done %changelog * Thu May 07 2009 - 09.03.0C05.0030-0.1 - Initial package. Now, I\u0026rsquo;m kinda asking myself, why don\u0026rsquo;t more vendors submit their drivers to Novell in form of KMP\u0026rsquo;s \u0026hellip; Anyway, I\u0026rsquo;m gonna send mine the LSI/IBM way, maybe they\u0026rsquo;ll pick it up \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_novell-kmp-kmp-ing-ibm-s-rdac-driver/","summary":"\u003cp\u003eWell, after yesterday\u0026rsquo;s lesson about \u003ca href=\"/posts/2014-08-08_ibm-rdac-installing-the-driver-for-a-not-yet-running-version\" title=\"IBM RDAC: Installing the driver for a (not yet) running version\"\u003egetting the IBM RDAC to install for a not-yet-running kernel\u003c/a\u003e, I decided to take it a step further. Novell does have some \u003ca href=\"http://developer.novell.com/wiki/index.php/Creating_a_Kernel_Module_Source_RPM\"\u003edocumentation about KMP\u0026rsquo;s\u003c/a\u003e, which is actually rather good, especially the \u003ca href=\"http://www.suse.de/~agruen/KMPM/old/KernelModulePackagesManual-CODE10.pdf\"\u003eguide written by Andreas Grünbacher\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAfter a short tinkering, I got it actually working. I was kinda surprised, at how easily it actually is. One problem I still have to deal with, is modifying the %post, to generate the mpp-initrd image. For now, the KMP only contains the default %post, which updates the modules.* stuff.\u003c/p\u003e","title":"Novell KMP: KMP'ing IBM's RDAC driver"},{"content":"After some more tinkering, a lot more looking at the macros in /usr/lib/rpm/rpm-suse-kernel-module-subpackage and /usr/lib/rpm/suse_macros, I think I finally have a usable RPM\u0026rsquo;ified version of IBM\u0026rsquo;s Multipathing driver ready for use.\nThere is still one major annoyance left: each time you install a new ibm-rdac-ds4000-kmp RPM, you also need to reinstall the corresponding ibm-rdac-ds4000-initrd package, as the macros in /usr/lib/rpm don\u0026rsquo;t allow for custom %post or %postun.\nAs mentioned before, I\u0026rsquo;m gonna send them to LSI/IBM for review, and maybe, MAYBE they are actually gonna make use of that.\nWithout further delay, here\u0026rsquo;s the list of packages. Just a short explanation: you need mppUtil-%version, in order to install the ibm-rdac-ds4000-kmp.\nmppUtil-09.03.0C05.0030-0.2 (i586, x86_64, SRPM) ibm-rdac-kmp-09.03.0C05.0030_2.6.16.60_0.37_f594963d-0.2 (SRPM) ibm-rdac-kmp-bigsmp (i586) ibm-rdac-kmp-debug (i586, x86_64) ibm-rdac-kmp-default (i586, x86_64) ibm-rdac-kmp-kdump (i586, x86_64) ibm-rdac-kmp-kdumppae (i586) ibm-rdac-kmp-smp (i586, x86_64) ibm-rdac-kmp-vmi (i586) ibm-rdac-kmp-vmipae (i586) ibm-rdac-ds4000-initrd-09.03.0C05.0030_2.6.16.60_0.37_f594963d-0.2 ibm-rdac-initrd-bigsmp (i586) ibm-rdac-initrd-debug (i586, x86_64) ibm-rdac-initrd-default (i586, x86_64) ibm-rdac-initrd-kdump (i586, x86_64) ibm-rdac-initrd-kdumppae (i586) ibm-rdac-initrd-smp (i586, x86_64) ibm-rdac-initrd-vmi (i586) ibm-rdac-initrd-vmipae (i586) This package should be usable with System Storage DS4000 as well as System Storage DS3000 (they use the exact same source code).\nI also know, that this solution isn\u0026rsquo;t really perfect. I\u0026rsquo;ve been looking at the %triggerin/%triggerun macros, but right now I can\u0026rsquo;t draw up a scenario (an easy one at that) to successfully use triggers in this situation. Only idea coming up looks like this:\nPut the triggers into ibm-rdac-ds4000 When installing the kernel module packages, write the kernelversion/-flavor into a temporary file (impossible, since the macros don\u0026rsquo;t let you influence %post), and then let the trigger create/update the MPP initrd If anyone knows a better solution (as in easier, without the writing to a separate file), I\u0026rsquo;m all ears.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_novell-kmp-useable-version-of-ibm-rdac-ds4000/","summary":"\u003cp\u003eAfter some more tinkering, a lot more looking at the macros in /usr/lib/rpm/rpm-suse-kernel-module-subpackage and /usr/lib/rpm/suse_macros, I think I finally have a usable RPM\u0026rsquo;ified version of IBM\u0026rsquo;s Multipathing driver ready for use.\u003c/p\u003e\n\u003cp\u003eThere is still one major annoyance left: each time you install a new ibm-rdac-ds4000-kmp RPM, you also need to reinstall the corresponding ibm-rdac-ds4000-initrd package, as the macros in /usr/lib/rpm don\u0026rsquo;t allow for custom %post or %postun.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/posts/2014-08-08_novell-kmp-kmp-ing-ibm-s-rdac-driver\" title=\"Novell KMP: KMP'ing IBM's RDAC driver\"\u003eAs mentioned before\u003c/a\u003e, I\u0026rsquo;m gonna send them to LSI/IBM for review, and maybe, MAYBE they are actually gonna make use of that.\u003c/p\u003e","title":"Novell KMP: Useable version of ibm-rdac-ds4000"},{"content":"Well, today we had a rather weird problem with our TS3500. TSM running on AIX basically went bonko and spit out weird media sense errors, all stating that there is a hardware or media error of unknown nature:\n1 2 3 4 5 6 7 8 9 ANR8943E Hardware or media error on library LIB3584 (OP=00006C03, CC=-1, KEY=04, ASC=44, ASCQ=00, SENSE=70.00.04.00.00.00.00.46.00.00.00.00.44.00.00.00.00- .00.40.82.00.00.00.40.00.00.02.00.48.01.A1.00.00.00.00.0- 0.06.1B.00.01.09.00.00.00.00.00.00.00.00.00.00.00.00.00.- 00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00- .00.00.00.00.00., Description=An undetermined error has occurred). Refer to Appendix C in the \u0026#39;Messages\u0026#39; manual for recommended action. ANR8381E LTO volume HG4480L4 could not be mounted in drive DR9 (/dev/rmt8). After restarting the TSM server (as in the service, not the whole box) five times, which didn\u0026rsquo;t resolve squat we decided to take a look at the TS3500 itself. We opened up the Management interface and tried moving a tape into a drive. That didn\u0026rsquo;t work. Hrmmmmm.\nWe tried the manual move from the LCD display mounted on the front of the TS3500 base frame, that didn\u0026rsquo;t work either. So we figured the gripper was stuck and placed a call with our trustworthy support provider.\nAfter a few minutes, they called us back and told us: \u0026quot; Try the following: Place the library in \u0026ldquo;Pause\u0026rdquo;-Mode and open it up, maybe a tape fell down \u0026hellip;\u0026quot;.\nWe did exactly that, the gripper moved back to it\u0026rsquo;s pause position (which is in the base frame), and we started looking inside after opening up the base frame and an expansion frame. Nothing \u0026hellip;\nSo we closed it back up, and let the base frame resume it\u0026rsquo;s normal duties \u0026hellip; guess what: After resuming normal operations, it worked again \u0026#x1f937;\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_weird-ts3500-problem/","summary":"\u003cp\u003eWell, today we had a rather weird problem with our TS3500. TSM running on AIX basically went bonko and spit out weird media sense errors, all stating that there is a hardware or media error of unknown nature:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e9\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eANR8943E Hardware or media error on library LIB3584 (OP=00006C03, CC=-1,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eKEY=04, ASC=44, ASCQ=00,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSENSE=70.00.04.00.00.00.00.46.00.00.00.00.44.00.00.00.00-\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     .00.40.82.00.00.00.40.00.00.02.00.48.01.A1.00.00.00.00.0-\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      0.06.1B.00.01.09.00.00.00.00.00.00.00.00.00.00.00.00.00.-\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00-\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     .00.00.00.00.00., Description=An undetermined error has occurred).\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eRefer to Appendix C in the \u0026#39;Messages\u0026#39; manual for recommended action.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eANR8381E LTO volume HG4480L4 could not be mounted in drive DR9 (/dev/rmt8).\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAfter restarting the TSM server (as in the service, not the whole box) five times, which didn\u0026rsquo;t resolve squat we decided to take a look at the TS3500 itself. We opened up the Management interface and tried moving a tape into a drive. That didn\u0026rsquo;t work. Hrmmmmm.\u003c/p\u003e","title":"Weird TS3500 problem"},{"content":"As I previously said, I was writing my own OCF resource agent for IBM\u0026rsquo;s Tivoli Storage Manager Server. And I just finished it yesterday evening (it took me about two hours to write this post).\nTrac revision log (shortened)\nOnly took me about four work days (that is roughly four hours each, which weren\u0026rsquo;t recorded in that subversion repository) plus most of this week at home (which is 10 hours a day) and about one hundred subversion revisions. The good part about it is, that it actually just works \u0026#x1f600; (I was amazed on how good actually). Now you\u0026rsquo;re gonna say, \u0026ldquo;but Christian, why didn\u0026rsquo;t you use the included Init-Script and just fix it up, so it is actually compilant to the LSB Standard ?\u0026rdquo;\nThe answer is rather simple: Yeah I could have done that, but you also know that wouldn\u0026rsquo;t have been fun. Life is all about learning, and learn something I did (even if I hit the head against the wall from time to time \u0026#x1f609; during those few days) \u0026hellip; There\u0026rsquo;s still one or two things I might want to add/change in the future (that is maybe next week), like\nadding support for monitor depth by querying the dsmserv instance via dsmadmc (if you read through the resource agent, I already use it for the shutdown/pre-shutdown stuff) I still have to properly test it (like Alan Robertson mentioned in his one hour thirty talk on Linux-HA 2.0 and on his slides, Page 100-102) in a pre-production environment I\u0026rsquo;m probably configure the IBM RSA to act as a stonith device ( s hoot t he o ther n ode i n t he h ead) - just for the case one of them ever gets stuck in a case, where the box is still up, but doesn\u0026rsquo;t react to any requests anymore So here\u0026rsquo;s a small (well the picture is rather big \u0026#x1f61b; duuh) screen capture of a grouped resource (basically, IP + Filesystem mounts + dsmserv instance) migrating to a different physical host (both share some shared storage in this example - I used two VM\u0026rsquo;s).\nShowing the VM configuration\nFirst the VM configuration. It looks a bit messy, as I needed two database volumes for Tivoli, two recovery log volumes for Tivoli, one Active Data storage pool for Tivoli and one volume for the configurations of the Tivoli Storage Manager server itself. I could have done it with only 5 disks each. But I wanted to test how Linux-HA handles the migration with resources, as well as I wanted to test how Tivoli is handling it.\nNow, the first hard disk is where the system (and all the other stuff, like heartbeat \u0026hellip;) is installed. It got two network cards, one for cluster link and the other for the serviceing to the public network. It also got a second controller, simply due to the nature VMware handles disk sharing. This controller is set to SCSI Bus Sharing = Physical (or scsi?.sharedBus = \u0026ldquo;physical\u0026rdquo; if you rather want the vmx term), to allow it to share hard disks with other virtual machines.\nI then started installing stuff (needed heartbeat-2.1.3, heartbeat-pils-2.1.3 and heartbeat-stonith-2.1.3 - which sadly pulls in GNOME due to \u0026quot; hb_gui\u0026quot;), imported the configurations (they are in my earlier post about Setting up Linux-HA) like this:\n1 2 cibadmin -o resources -C -x resources.xml cibadmin -o constraints -C -x constraints.xml Showing the initial state of the cluster resources\nAnd that\u0026rsquo;s basically it. The cluster is up and running (even if I set the dsmserv to stopped for the time being since I wasn\u0026rsquo;t sure whether or not the resource agent would work). Now, after we\u0026rsquo;re done with setting up the cluster, it basically looks as showed on the picture.\nThe good part about the constraints is though, they are the \u0026quot; good kind\u0026quot; of resource constraints. They basically say \u0026ldquo;run the resource group tsm1_group on the host tsm1, but if you really have to, starting it on the host tsm2 is also ok\u0026rdquo;. If you looked closely at my resources.xml, you might have noticed that I specified name=\u0026ldquo;target_role\u0026rdquo; value=\u0026ldquo;stopped\u0026rdquo; for each dsmserv resource.\nWell I did this on purpose, since I didn\u0026rsquo;t knew whether or not the resource agent is actually gonna work. After I knew (I played with it for a while, remember ?), I started the resource, by issuing this:\n1 2 3 4 5 6 cibadmin -o resources -M -X \u0026#39;\u0026lt;nvpair name=\u0026#34;target_role\u0026#34; id=\u0026#34;dsmserv_tsm1_status\u0026#34; value=\u0026#34;started\u0026#34;/\u0026gt;\u0026#39; cibadmin -o resources -M -X \u0026#39;\u0026lt;nvpair name=\u0026#34;target_role\u0026#34; id=\u0026#34;dsmserv_tsm2_status\u0026#34; value=\u0026#34;started\u0026#34;/\u0026gt;\u0026#39; Now guess, what happens if you start rebooting one box ? Exactly. Linux-HA figures after 30 seconds that the box is dead (which it is, at least from the service\u0026rsquo;s point of view) and simply starts it on the still \u0026quot; living\u0026quot; cluster node. Now, lets play with those resource groups. By simply issuing\n1 crm_resource -M -r tsm1_group -H tsm2 Failing over a resource is pretty simple\nwe\u0026rsquo;re gonna tell Linux-HA to migrate the resource group to the second host, and keep it pinned there. As you can see on the left, it actually takes a bit until Linux-HA is starting to enforce the policy, which crm_resource just created for us.\nLinux-HA really does shut down the resource group in order\nAfter a brief moment (that is about thirty seconds - due to the ocf resource agent sleeping for 2*5s), the resources are shutting down on the first host.\nNow, after thinking about it, I could have done this differently. As you can see, Linux-HA is first shutting down the whole resource group on one host, before it starts bringing any resources (because it treats the resource group as a single resource itself). This implies a longer outage than if I would have done it with before/after constraints. I still might do that, but for now the resource group is ok.\nAfter a short break in service availibility the resource is back online\nAs you can see, about fifty seconds after I ordered Linux-HA to migrate the resource group tsm1_group to the second host, it finally enforced policy and the resources are up and running again. Now, sadly Linux-HA doesn\u0026rsquo;t do something like vMotion does (copying the memory map and stuff), which would safe us the trouble of doing the shutdown in the first place. I know openVZ does support that kind of stuff, but I guess that\u0026rsquo;s just day-dreaming for now. Would make one hell of a solution \u0026#x1f61b;\nOh yeah, and if you\u0026rsquo;re as much annoyed as me of heartbeat (or rather logd) polluting your messages file, and you are a lucky beggar and are running syslog-ng, simple put this into your /etc/syslog-ng/syslog-ng.conf (or rather /etc/syslog-ng/syslog-ng.conf .in on SLES10 and running SuSEconfig \u0026ndash;module syslog-ng):\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 # The main filter for all Heartbeat related programs filter f_ha { program(\u0026#34;^Filesystem$\u0026#34;) or program(\u0026#34;^IPaddr2$\u0026#34;) or program(\u0026#34;^dsmserv$\u0026#34;) or program(\u0026#34;^attrd$\u0026#34;) or program(\u0026#34;^attrd_updater$\u0026#34;) or program(\u0026#34;^ccm$\u0026#34;) or program(\u0026#34;^ccm_tool$\u0026#34;) or program(\u0026#34;^cib$\u0026#34;) or program(\u0026#34;^cibadmin$\u0026#34;) or program(\u0026#34;^cluster$\u0026#34;) or program(\u0026#34;^cl_status$\u0026#34;) or program(\u0026#34;^crmadmin$\u0026#34;) or program(\u0026#34;^crmd$\u0026#34;) or program(\u0026#34;^crm_attribute$\u0026#34;) or program(\u0026#34;^crm_diff$\u0026#34;) or program(\u0026#34;^crm_failcount$\u0026#34;) or program(\u0026#34;^crm_master$\u0026#34;) or program(\u0026#34;^crm_resource$\u0026#34;) or program(\u0026#34;^crm_standby$\u0026#34;) or program(\u0026#34;^crm_uuid$\u0026#34;) or program(\u0026#34;^crm_verify$\u0026#34;) or program(\u0026#34;^haclient$\u0026#34;) or program(\u0026#34;^heartbeat$\u0026#34;) or program(\u0026#34;^ipfail$\u0026#34;) or program(\u0026#34;^logd$\u0026#34;) or program(\u0026#34;^lrmd$\u0026#34;) or program(\u0026#34;^mgmtd$\u0026#34;) or program(\u0026#34;^pengine$\u0026#34;) or program(\u0026#34;^stonithd$\u0026#34;) or program(\u0026#34;^tengine$\u0026#34;); }; filter f_ha_debug { level(debug); }; filter f_ha_main { not level(debug); }; # # heartbeat messages in separate file: # destination ha_main { file(\u0026#34;/var/log/heartbeat/ha-log\u0026#34; owner(root) group(root) create_dirs(yes) dir_group(root) dir_owner(root) dir_perm(0700)); }; destination ha_debug { file(\u0026#34;/var/log/heartbeat/ha-debug\u0026#34; owner(root) group(root) create_dirs(yes) dir_group(root) dir_owner(root) dir_perm(0700)); }; log { source(src); filter(f_ha); filter(f_ha_main); destination(ha_main); }; log { source(src); filter(f_ha); filter(f_ha_debug); destination(ha_debug); }; That should get you a directory in /var/log named heartbeat with two logfiles, the main log \u0026quot; ha-log\u0026quot; which holds the important stuff and the debug log \u0026quot; ha-debug\u0026quot;. You also should put a logrotate rule somewhere, as those two files grow big rather fast.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_linux-ha-and-tivoli-storage-manager-finito/","summary":"\u003cp\u003eAs I previously said, I was writing \u003ca href=\"http://christian.weblog.heimdaheim.de/2008/09/26/linux-ha-and-tivoli-storage-manager/\" title=\"Linux-HA and Tivoli Storage Manager\"\u003emy own OCF resource agent\u003c/a\u003e for IBM\u0026rsquo;s Tivoli Storage Manager Server. And I just finished it yesterday evening (it took me about two hours to write this post).\u003c/p\u003e\n\u003cp\u003eOnly took me about four work days (that is roughly four hours each, which weren\u0026rsquo;t recorded in that subversion repository) plus most of this week at home (which is 10 hours a day) and about one hundred subversion revisions. The good part about it is, that it actually just works :-D (I was amazed on how good actually). Now you\u0026rsquo;re gonna say, \u0026ldquo;but Christian, why didn\u0026rsquo;t you use the included Init-Script and just fix it up, so it is actually compilant to the LSB Standard ?\u0026rdquo;\u003c/p\u003e\n\u003cp\u003eThe answer is rather simple: Yeah I could have done that, but you also know that wouldn\u0026rsquo;t have been fun. Life is all about learning, and learn something I did (even if I hit the head against the wall from time to time ;-) during those few days) \u0026hellip; There\u0026rsquo;s still one or two things I might want to add/change in the future (that is maybe next week), like\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eadding support for monitor depth by querying the dsmserv instance via dsmadmc (if you read through the resource agent, I already use it for the shutdown/pre-shutdown stuff)\u003c/li\u003e\n\u003cli\u003eI still have to properly test it (like Alan Robertson mentioned in his \u003ca href=\"http://lca2007.linux.org.au/talk/29.html\"\u003eone hour thirty talk on Linux-HA 2.0\u003c/a\u003e and \u003ca href=\"http://www.slideshare.net/opensource_training/heartbeat\"\u003eon his slides\u003c/a\u003e, Page 100-102) in a pre-production environment\u003c/li\u003e\n\u003cli\u003eI\u0026rsquo;m probably configure the IBM RSA to act as a stonith device ( \u003cstrong\u003es\u003c/strong\u003e hoot \u003cstrong\u003et\u003c/strong\u003e he \u003cstrong\u003eo\u003c/strong\u003e ther \u003cstrong\u003en\u003c/strong\u003e ode \u003cstrong\u003ei\u003c/strong\u003e n \u003cstrong\u003et\u003c/strong\u003e he \u003cstrong\u003eh\u003c/strong\u003e ead) - just for the case one of them ever gets stuck in a case, where the box is still up, but doesn\u0026rsquo;t react to any requests anymore\u003c/li\u003e\n\u003c/ul\u003e\n","title":"Linux-HA and Tivoli Storage Manager (Finito!)"},{"content":"I recently bought an Acer Aspire Revo and had one of my trainees put XMBC on a SDHC card today. So after a bit of toying earlier, I started looking at the thing (from the command line that is).\nOne thing, if you enable the PPA (ppa.launchpad.net) sources, apt/aptitude is gonna babble something about an unverified key.\n1 2 3 4 5 Fetched 119kB in 2s (41.4kB/s) Reading package lists... Done W: GPG error: http://ppa.launchpad.net jaunty Release: The following signatures couldn\u0026#39;t be verified because the public key is not available: NO_PUBKEY 6D975C4791E7EE5E W: GPG error: http://ppa.launchpad.net jaunty Release: The following signatures couldn\u0026#39;t be verified because the public key is not available: NO_PUBKEY 2BBD133164234534 W: GPG error: http://ppa.launchpad.net jaunty Release: The following signatures couldn\u0026#39;t be verified because the public key is not available: NO_PUBKEY A956EB81318C7509 I ended up looking the error up (since I only have an Ubuntu desktop). There\u0026rsquo;s a simple solution for this:\n1 2 3 4 5 for i in 2BBD133164234534 A956EB81318C7509 6D975C4791E7EE5E do gpg --keyserver wwwkeys.eu.pgp.net --recv-keys $i gpg --export --armor $i | apt-key add - done Alternatively you can also use this:\n1 2 3 for i in 2BBD133164234534 A956EB81318C7509 6D975C4791E7EE5E apt-key adv --keyserver=wwwkeys.de.pgp.net --recv-key $i done ","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_xbmc-adding-the-ppa-keys-to-apt/","summary":"\u003cp\u003eI recently bought an Acer Aspire Revo and had one of my trainees put XMBC on a SDHC card today. So after a bit of toying earlier, I started looking at the thing (from the command line that is).\u003c/p\u003e\n\u003cp\u003eOne thing, if you enable the PPA (ppa.launchpad.net) sources, apt/aptitude is gonna babble something about an unverified key.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-go\" data-lang=\"go\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eFetched\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"mi\"\u003e119\u003c/span\u003e\u003cspan class=\"nx\"\u003ekB\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"nx\"\u003ein\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"nf\"\u003es\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mf\"\u003e41.4\u003c/span\u003e\u003cspan class=\"nx\"\u003ekB\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"nx\"\u003es\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eReading\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kn\"\u003epackage\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"nx\"\u003elists\u003c/span\u003e\u003cspan class=\"o\"\u003e...\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"nx\"\u003eDone\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eW\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"nx\"\u003eGPG\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kt\"\u003eerror\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"nx\"\u003ehttp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"cp\"\u003e//ppa.launchpad.net jaunty Release: The following signatures couldn\u0026#39;t be verified because the public key is not available: NO_PUBKEY 6D975C4791E7EE5E\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eW\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"nx\"\u003eGPG\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kt\"\u003eerror\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"nx\"\u003ehttp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"cp\"\u003e//ppa.launchpad.net jaunty Release: The following signatures couldn\u0026#39;t be verified because the public key is not available: NO_PUBKEY 2BBD133164234534\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eW\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"nx\"\u003eGPG\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kt\"\u003eerror\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"nx\"\u003ehttp\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"cp\"\u003e//ppa.launchpad.net jaunty Release: The following signatures couldn\u0026#39;t be verified because the public key is not available: NO_PUBKEY A956EB81318C7509\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eI ended up looking the error up (since I only have an Ubuntu desktop). There\u0026rsquo;s a simple solution for this:\u003c/p\u003e","title":"XBMC: Adding the ppa keys to apt"},{"content":"As I wrote a month ago, one of my trainees put up with my stubbornness to put XBMC on said Acer Aspire Revo. Now, initially he put the Live Edition onto it, which didn\u0026rsquo;t really fly with me. I\u0026rsquo;m usually the CLI guy, so I needed to install it myself (again). Since I wanted to use the VDPAU features the later GeForce cards offer (and the Revo has such a graphics cad), I had to install the current development builds (you know \u0026ndash; I love bleeding edge!)\nAt first, I was struggling with how to switch the rendering to VDPAU, but after looking through the various settings menus, I figured it out \u0026#x1f61b;\nThe next things on my list we\u0026rsquo;re:\nGet the TechniSat USB IR receiver/TechniSat IR remote working with XBMC Get a better looking user interface Get cross fading working 1. Since there aren\u0026rsquo;t many USB IR receivers available to purchase, I went ahead an bought a TechniSat USB IR receiver. Shortly afterwards I figured, that I might need the remote too.\nAfter all my stuff arrived I spent about the evenings of one work week and one whole weekend figuring out this damn remote and it\u0026rsquo;s keys. But nada .. Nothing appeared in the output of irw or mode2. After googling for the problem (and coming up with just stupid answers), I went ahead and installed inputlirc. After that, I simply turned of the box and carried it back to work the next day.\nWhen I initially showed my trainee the box and asked him to figure out why the remote wasn\u0026rsquo;t working, he was like \u0026quot; WTF ? Are you serious ?\u0026quot;. After about an hour I went back to see what progress he had made, and he was like \u0026quot; Dude, it just works .. don\u0026rsquo;t ask me how\u0026quot;.\nTo get this damn remote working, you need the following:\nconfiguration for the TechniSat TS35 remote as /etc/lirc/lircd.conf hardware settings for lirc as /etc/lirc/hardware.conf The package inputlirc and it\u0026rsquo;s configuration file as /etc/default/inputlirc Lircmap.xml (see Lircmap.xml.help for the real keymapping) and Keymap.xml in ~/.xbmc/userdata After placing all these files, I can program my Harmony (a bit strangely I admit) to the various keys of the TechniSat remote \u0026#x1f62f;\n2. I don\u0026rsquo;t have anything against the default user interface of XBMC, but it really isn\u0026rsquo;t all there is .. So I went looking. Looked at about fifteen different skins, until I found Stark. Now, Stark is about everything I\u0026rsquo;ve been looking for.\n3. The next thing on my list was to get simultaneous output working. If you do cross fading (only to name an example), you need the ability to stream two audio tracks through a single device. If you remember back two years, ALSA still wasn\u0026rsquo;t capable of doing that either way. A short time later, the ALSA developers introduced DMix. Now, after fiddling a bit with it, I think I have that too!\nI still need to work out a few flaws in the keymap, but once that is resolved, I\u0026rsquo;m probably completely happy \u0026#x1f600;\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_xbmc-on-the-acer-revo/","summary":"\u003cp\u003eAs I wrote \u003ca href=\"/posts/2014-08-08_xbmc-adding-the-ppa-keys-to-apt\" title=\"XBMC: Adding the ppa keys to apt\"\u003ea month ago\u003c/a\u003e, one of my trainees put up with my stubbornness to put XBMC on said Acer Aspire Revo. Now, initially he put the Live Edition onto it, which didn\u0026rsquo;t really fly with me. I\u0026rsquo;m usually the CLI guy, so I needed to install it myself (again). Since I wanted to use the VDPAU features the later GeForce cards offer (and the Revo has such a graphics cad), I had to install the current development builds (you know \u0026ndash; I love bleeding edge!)\u003c/p\u003e","title":"XBMC on the Acer Revo"},{"content":"Well, since about a week or so I keep having troubles with my vHost and lighttpd. The point being, after some time (up till now it\u0026rsquo;s been something between days and minutes) lighttpd completely freezes and doesn\u0026rsquo;t serve no content anymore. I don\u0026rsquo;t know if this is related to PHP (might be, I did perform an update to dev-lang/php-5.2.9-r2 on Thu May 28 12:18:57 2009), but I have to figure this out since the restart cron-job is getting annoying.\nWell, it seems like lighttpd is getting stuck in mod_fastcgi \u0026hellip;\n1 2 3 2009-06-23 21:34:40: (mod_access.c.135) -- mod_access_uri_handler called 2009-06-23 21:34:40: (mod_fastcgi.c.3675) handling it in mod_fastcgi 2009-06-23 21:34:40: (mod_fastcgi.c.3005) got proc: pid: 11151 socket: unix:/var/run/lighttpd/lighttpd-fastcgi-php-11147.socket-0 load: 85 Usually the last line is followed by a line telling that it released the proc, but not always.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_weird-lighttpd-troubles/","summary":"\u003cp\u003eWell, since about a week or so I keep having troubles with my vHost and lighttpd. The point being, after some time (up till now it\u0026rsquo;s been something between days and minutes) lighttpd completely freezes and doesn\u0026rsquo;t serve no content anymore. I don\u0026rsquo;t know if this is related to PHP (might be, I did perform an update to \u003cem\u003edev-lang/php-5.2.9-r2\u003c/em\u003e on \u003cem\u003eThu May 28 12:18:57 2009\u003c/em\u003e), but I have to figure this out since the restart cron-job is getting annoying.\u003c/p\u003e","title":"Weird lighttpd troubles"},{"content":"Well, after last weeks lighttpd troubles with PHP (or was it without ?), they finally seem resolved. First thing I did, was upgrade to the new php-version (5.2.10). After that, I ran revdep-rebuild, which apparently found issues with lighttpd being linked to a wrong pcre-version. After remerging lighttpd the issues seem to be gone!\nWell, guess I was to quick in saying the problem was resolved .. it\u0026rsquo;s still there, just not happening as fast as it would in the past \u0026hellip;.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_lighttpd-troubles-resolved/","summary":"\u003cp\u003eWell, after last weeks lighttpd troubles with PHP (or was it without ?), they finally seem resolved. First thing I did, was upgrade to the new php-version (5.2.10). After that, I ran revdep-rebuild, which apparently found issues with lighttpd being linked to a wrong pcre-version. After remerging lighttpd the \u003ca href=\"/posts/2014-08-08_weird-lighttpd-troubles\" title=\"Weird lighttpd troubles\"\u003eissues\u003c/a\u003e seem to be gone!\u003c/p\u003e\n\u003cp\u003eWell, guess I was to quick in saying the problem was resolved .. it\u0026rsquo;s still there, just not happening as fast as it would in the past \u0026hellip;.\u003c/p\u003e","title":"Lighttpd troubles resolved"},{"content":"At first, it seemed that my lighttpd issues were resolved by updating PHP/remerging lighttpd. But apparently not. After putting in a crontab entry, that restarts lighttpd every 15 minutes (which completely sucks), the issue was minimized in it\u0026rsquo;s impact but not really solved.\n1 */15 * * * * root /etc/init.d/lighttpd restart \u0026amp;\u0026gt;/dev/null Thanks to Michél (I guess, again) \u0026ndash; who helped me looking at the strace logs, and of course Christian (aka hoffie \u0026ndash; one of my old Gentoo buddies), the issue seems finally resolved. It turns out it was neither a PHP nor lighttpd issue. It was a simple matter of (stale) symlinks in /etc/ssl/certs if you can imagine that. Apparently a stale symlink forced PHP into a loop or something, from which it couldn\u0026rsquo;t recover on it\u0026rsquo;s own.\nSo the thank you is probably to the one, who introduced those lines to the ca-certificates ebuild (guess, that would be vapier, the old code monkey):\n1 2 3 4 5 6 if [[ $badcerts -eq 1 ]]; then ewarn \u0026#34;You MUST remove the above broken symlinks\u0026#34; ewarn \u0026#34;Otherwise any SSL validation that use the directory may fail!\u0026#34; ewarn \u0026#34;To batch-remove them, run:\u0026#34; ewarn \u0026#34;find -L ${ROOT}etc/ssl/certs/ -type l -exec rm {} +\u0026#34; fi After letting the find run through /etc/ssl/certs and restarting lighttpd in the process, everything is back to working order! Finally!\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_lighttpd-issues/","summary":"\u003cp\u003eAt first, it seemed that \u003ca href=\"/posts/2014-08-08_lighttpd-troubles-resolved\" title=\"Lighttpd troubles resolved\"\u003emy lighttpd issues were resolved\u003c/a\u003e by updating PHP/remerging lighttpd. But apparently not. After putting in a crontab entry, that restarts lighttpd every 15 minutes (which completely sucks), the issue was minimized in it\u0026rsquo;s impact but not really solved.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e*/15 * * * * root    /etc/init.d/lighttpd restart \u0026amp;\u0026gt;/dev/null\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThanks to Michél (I guess, again) \u0026ndash; who helped me looking at the strace logs, and of course Christian (aka hoffie \u0026ndash; one of my old Gentoo buddies), the issue seems finally resolved. It turns out it was neither a PHP nor lighttpd issue. It was a simple matter of (stale) symlinks in /etc/ssl/certs if you can imagine that. Apparently a stale symlink forced PHP into a loop or something, from which it couldn\u0026rsquo;t recover on it\u0026rsquo;s own.\u003c/p\u003e","title":"Lighttpd issues"},{"content":"As many people on the VM-Planet already blogged about this, I ain\u0026rsquo;t gonna write just about it. Let\u0026rsquo;s turn the clock back a few months, to January 2008.\nAs the institution I work for, is part of the DFN we took the opportunity to be a part of the \u0026quot; I want you to run our RA\u0026quot;-gang. In January 2008 we thought about changing the vCenter certificate. Now, apparently there\u0026rsquo;s a slight difference between the DFN-PCA and what VMware considers common practice.\nThe DFN-PCA states, that only CSR\u0026rsquo;s with a key length of 2048 bits are allowed (as outlined in 6.1.5 of the DFN-PKI Certificate Policy). Now VMware apparently didn\u0026rsquo;t actually think customers would use this \u0026quot; feature\u0026quot; (that is changing the SSL certificates).\nCustomization Specifications Created in Previous Releases Can Be Used in VirtualCenter 2.5 Update 4 to Clone or Deploy Virtual Machine with Customized Guest Operating Systems This release resolves an issue where, if you clone or deploy a virtual machine using a customization specification that was created prior to upgrading the VirtualCenter, the VirtualCenter Server might display the error message The VirtualCenter server is unable to decrypt the passwords stored in the customization specification in the following scenarios:\nVirtualCenter Server is uninstalled first, and then re-installed and/or upgraded afterwards. Custom SSL certificate are deployed, but the instruction in http://www.vmware.com/pdf/vi_vcserver_certificates.pdf are not followed in a verbatim manner. Well, and apparently it ain\u0026rsquo;t fixed yet. At least not for us \u0026#x1f615;\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_vmware-new-virtualcenter-2-5-update-4/","summary":"\u003cp\u003eAs many people on the VM-Planet already blogged about this, I ain\u0026rsquo;t gonna write just about it. Let\u0026rsquo;s turn the clock back a few months, to January 2008.\u003c/p\u003e\n\u003cp\u003eAs the institution I work for, is part of the DFN we took the opportunity to be a part of the \u0026quot; \u003cem\u003eI want you to run our RA\u003c/em\u003e\u0026quot;-gang. In January 2008 we thought about changing the vCenter certificate. Now, apparently there\u0026rsquo;s a slight difference between the DFN-PCA and what VMware considers common practice.\u003c/p\u003e","title":"VMware: New VirtualCenter 2-5 Update 4"},{"content":"I\u0026rsquo;m building a 6-node cluster, using Xen at the moment. For the last few days, I tried my setup in a virtual machine, simply because VM\u0026rsquo;s boot much faster than the real hardware. However, certain things you can only replicate on the real hardware (for example, the InfiniBand interfaces, as well as certain nfs-stuff).\nSo I spent most of the day to replicate my configurations onto the hardware. After getting all done, the moment of the first boot \u0026hellip; kaput! Doesn\u0026rsquo;t boot, just keeps hanging before booting the real kernel. Now what ? I removed the Xen vga parameters and rebooted (waited ~2 minutes in the process) until I finally saw the root cause for my trouble:\n1 2 Low bootmem alloc of 67108864 bytes failed! Kernel panic - not syncing: Out of low memory I was like wtf \u0026hellip; My tftp setup _worked_ inside the VM\u0026rsquo;s, why ain\u0026rsquo;t it working here ? Quick look at the pxelinux.cfg for the mac address revealed this:\n1 2 3 4 5 6 label Xen AMD64 MENU LABEL ^xen-3.2-1-amd64 KERNEL mboot.c32 APPEND xen/xen-3.2-1-amd64.gz console=vga vga=gfx-1024x768x16 dom0_mem=64M noreboot --- xen/vmlinuz-2.6.26-2-xen-amd64 rw console=tty0 rootdelay=5 root=/dev/nfs nfsroot=172.30.10.1:/srv/nfs/xen2 ip=dhcp --- xen/initrd.img-2.6.26-2-xen-amd64 As you can see, I had devised 64M for the dom0, which apparently wasn\u0026rsquo;t enough. After tuning the memory limit to 256M, everything is honky-dory!\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_xen-dom0-failing-with-kernel-panic/","summary":"\u003cp\u003eI\u0026rsquo;m building a 6-node cluster, using Xen at the moment. For the last few days, I tried my setup in a virtual machine, simply because VM\u0026rsquo;s boot much faster than the real hardware. However, certain things you can only replicate on the real hardware (for example, the InfiniBand interfaces, as well as certain nfs-stuff).\u003c/p\u003e\n\u003cp\u003eSo I spent most of the day to replicate my configurations onto the hardware. After getting all done, the moment of the first boot \u0026hellip; \u003cstrong\u003ekaput\u003c/strong\u003e! Doesn\u0026rsquo;t boot, just keeps hanging before booting the real kernel. Now what ? I removed the Xen vga parameters and rebooted (waited ~2 minutes in the process) until I finally saw the root cause for my trouble:\u003c/p\u003e","title":"Xen dom0 failing with kernel panic"},{"content":"Here\u0026rsquo;s yet another post about my compute cluster. It\u0026rsquo;s (obviously) running NFS and that works quite well. Up till now, I would always have trouble with portmap hanging on shutdown/reboot. After spending some time thinking about the problem, looking at the init script and googling, I stumbled upon this Ubuntu bug on portmap.\nAs noted in the bug, a pmap_dump would hang indefinitely. After taking another look at our nfs-root configuration (in regard to the first comment on the bug), it turns out it\u0026rsquo;s exactly that. We didn\u0026rsquo;t setup lo which seems vital for some things.\nAfter adding the lines\n1 2 auto lo iface lo inet loopback to /etc/network/interfaces, portmap stops just fine \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_portmap-hanging-on-shutdown/","summary":"\u003cp\u003eHere\u0026rsquo;s yet another post about my compute cluster. It\u0026rsquo;s (obviously) running NFS and that works quite well. Up till now, I would always have trouble with portmap hanging on shutdown/reboot. After spending some time thinking about the problem, looking at the init script and googling, I stumbled upon this Ubuntu bug on \u003ca href=\"https://bugs.launchpad.net/ubuntu/+source/portmap/+bug/309542\"\u003eportmap\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAs noted in the bug, a pmap_dump would hang indefinitely. After taking another look at our nfs-root configuration (in regard to the \u003ca href=\"https://bugs.launchpad.net/ubuntu/+source/portmap/+bug/309542/comments/1\"\u003efirst comment\u003c/a\u003e on the bug), it turns out it\u0026rsquo;s exactly that. We didn\u0026rsquo;t setup lo which seems vital for some things.\u003c/p\u003e","title":"portmap hanging on shutdown"},{"content":"Today, after a short break (you can call it break, I think), I sat down and looked at the IBM RSA II adapter\u0026rsquo;s remote management GUI and it\u0026rsquo;s trouble with JRE versions. Ever since the last Java updates, I was unable to access the RSA console because Java would throw an error like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Initializing RemoteDisk v2.2 MCS v.3.6 initialized Established connection to rsa.home.barfoo.org:1045 Connected via socket: Socket[addr=rsa.home.barfoo.org/10.0.0.150,port=2000,localport=4292] Closing socket java.lang.NullPointerException at mcsClient.Row.isValid(Unknown Source) at java.awt.Component.invalidateIfValid(Unknown Source) at java.awt.Component.setLocale(Unknown Source) at javax.swing.JComponent.(Unknown Source) at javax.swing.JPanel.(Unknown Source) at javax.swing.JPanel.(Unknown Source) at javax.swing.JPanel.(Unknown Source) at mcsClient.Row.(Unknown Source) at mcsClient.Options.(Unknown Source) at mcsClient.McsToolBar.(Unknown Source) at mcsClient.McsClient.begin(Unknown Source) at mcsClient.McsClient.init(Unknown Source) at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Ausnahme: java.lang.NullPointerException In the end, I downloaded every version since JRE 1.5.0.11 (that is 20 different versions \u0026#x2757;), as wittnessed by Michael Ellerbeck that the last working version for him was JRE 1.5.0.11, and gave each one a try (since I want to report the issue to IBM, so that they gonna release a fix sometime soon).\nSo here\u0026rsquo;s the list of what Java JRE version works with an RSA II adapter running Firmware 1.10 (GGEP36B):\nJava JRE 1.50 U11 \u0026hellip;\u0026hellip;\u0026hellip; works Java JRE 1.50 U12 \u0026hellip;\u0026hellip;\u0026hellip; works¹ Java JRE 1.50 U13 \u0026hellip;\u0026hellip;\u0026hellip; works Java JRE 1.50 U14 \u0026hellip;\u0026hellip;\u0026hellip; works Java JRE 1.50 U15 \u0026hellip;\u0026hellip;\u0026hellip; works Java JRE 1.50 U16 \u0026hellip;\u0026hellip;\u0026hellip; works Java JRE 1.50 U17 \u0026hellip;\u0026hellip;\u0026hellip; works Java JRE 1.50 U18 \u0026hellip;\u0026hellip;\u0026hellip; works Java JRE 1.60 \u0026hellip;\u0026hellip;\u0026hellip; works Java JRE 1.60 U01 \u0026hellip;\u0026hellip;\u0026hellip; works Java JRE 1.60 U02 \u0026hellip;\u0026hellip;\u0026hellip; works Java JRE 1.60 U03 \u0026hellip;\u0026hellip;\u0026hellip; works Java JRE 1.60 U04 \u0026hellip;\u0026hellip;\u0026hellip; works Java JRE 1.60 U05 \u0026hellip;\u0026hellip;\u0026hellip; works Java JRE 1.60 U06 \u0026hellip;\u0026hellip;\u0026hellip; works Java JRE 1.60 U07 \u0026hellip;\u0026hellip;\u0026hellip; works Java JRE 1.60 U12 \u0026hellip;\u0026hellip;\u0026hellip; not working (see above) Java JRE 1.60 U13 \u0026hellip;\u0026hellip;\u0026hellip; not working (see above) Java JRE 1.60 U14 \u0026hellip;\u0026hellip;\u0026hellip; not working (see above) 1: This version presents some small annoyances (garbled video output)\nUpdate: IBM already knows about the problem, but says it\u0026rsquo;s presumably a Java problem since it stopped working mid-version in between U11 and U12.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_ibm-rsa-ii-adapter-and-java-re/","summary":"\u003cp\u003eToday, after a short break (you can call it break, I think), I sat down and looked at the IBM RSA II adapter\u0026rsquo;s remote management GUI and it\u0026rsquo;s trouble with JRE versions. Ever since the last Java updates, I was unable to access the RSA console because Java would throw an error like this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eInitializing RemoteDisk v2.2\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eMCS v.3.6 initialized\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eEstablished connection to rsa.home.barfoo.org:1045\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eConnected via socket: Socket[addr=rsa.home.barfoo.org/10.0.0.150,port=2000,localport=4292]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eClosing socket\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ejava.lang.NullPointerException\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\tat mcsClient.Row.isValid(Unknown Source)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\tat java.awt.Component.invalidateIfValid(Unknown Source)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\tat java.awt.Component.setLocale(Unknown Source)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\tat javax.swing.JComponent.(Unknown Source)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\tat javax.swing.JPanel.(Unknown Source)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\tat javax.swing.JPanel.(Unknown Source)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\tat javax.swing.JPanel.(Unknown Source)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\tat mcsClient.Row.(Unknown Source)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\tat mcsClient.Options.(Unknown Source)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\tat mcsClient.McsToolBar.(Unknown Source)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\tat mcsClient.McsClient.begin(Unknown Source)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\tat mcsClient.McsClient.init(Unknown Source)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\tat sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\tat java.lang.Thread.run(Unknown Source)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAusnahme: java.lang.NullPointerException\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eIn the end, I \u003ca href=\"http://www.oracle.com/technetwork/java/archive-139210.html\"\u003edownloaded\u003c/a\u003e every version since JRE 1.5.0.11 (that is 20 different versions \u0026#x2757;), as wittnessed by \u003ca href=\"http://mellerbeck.blogspot.com/2009/07/mcs-v36-initialized-java-error-ibm-rsa.html\"\u003eMichael Ellerbeck\u003c/a\u003e that the last working version for him was JRE 1.5.0.11, and gave each one a try (since I want to report the issue to IBM, so that they gonna release a fix sometime soon).\u003c/p\u003e","title":"IBM RSA II adapter and Java RE"},{"content":"It\u0026rsquo;s been very quiet around here, I\u0026rsquo;ve been rather busy with my real life. During that busy time, a lot of things happened. I switched jobs starting on October 1st, I\u0026rsquo;m now working in Karlsruhe (as compared to the 870km northern Greifswald). It may sound far, but it\u0026rsquo;s actually quite pleasant. You know, I was born down here (well not exactly here \u0026ndash; 70 kilometers afar) and I still had the feeling that this is my home.\nMy tasks haven\u0026rsquo;t changed that much, I\u0026rsquo;m still doing\nVMware Virtual Infrastructure (as compared to vSphere) IBM Storage / Brocade SAN (was IBM Storage / Cisco SAN) Storage Virtualisation Controller (we were just buying that before I left) SUSE Linux Enterprise Server 10/11 - Deployment and Management (is pretty much the same as before) What I don\u0026rsquo;t do any longer is Windows. That is, per se not completely right, since Virtual Center only runs on Windows boxen, but pretty much my whole work focuses on Linux and Storage. It\u0026rsquo;s as I argumented in the the interview a step ahead, since I\u0026rsquo;m specializing myself into a certain direction (whether or not that works out \u0026ndash; I can\u0026rsquo;t tell yet. Time is gonna tell me that).\nIn my first week I spent some time getting to know the co-workers, working my head into the SVC (I already had a somewhat theroretical \u0026ndash; and practical \u0026ndash; insight, but not deep enough to actually make do with it). Next on my list is the AutoYaST environment for SLES-boxen / Kickstart for ESX(i), which (hopefully) enables us to standardize server installations using common schemas and partitions layout.\nAlso on the list is building a two-node test environment for the SVC so we don\u0026rsquo;t break the live environment with some tests we might be doing. Next on the list is some accouting to bring the settlements for the resource utilization based on vCPU/vMem upon a solid, up to date foundation.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_loooong-time/","summary":"\u003cp\u003eIt\u0026rsquo;s been very quiet around here, I\u0026rsquo;ve been rather busy with my real life. During that busy time, a lot of things happened. I switched jobs starting on October 1st, I\u0026rsquo;m now working in Karlsruhe (as compared to the 870km northern Greifswald). It may sound far, but it\u0026rsquo;s actually quite pleasant. You know, I was born down here (well not exactly here \u0026ndash; 70 kilometers afar) and I still had the feeling that \u003cstrong\u003ethis is my home\u003c/strong\u003e.\u003c/p\u003e","title":"Loooong time"},{"content":"After the first week passed awfully quick, the last week I worked on refining the way on how we are doing openSuSE / SUSE Linux Enterprise Server installations. Up till now, they were done by hand (without a predefined schema) and were getting ugly to maintain. Working my way through the Novell documentation on AutoYaST was pretty straight forward, but the little details were getting hairy. So I decided to write them down, in case someone was gonna end up in the same situation like me.\n1. Understanding the folder layout This isn\u0026rsquo;t a debate about how you should organize your file system(s), this is a reminder on how to design the AutoYaST profile \u0026hellip; If (and probably when) you\u0026rsquo;re using rules, the layout of the profile directory mentioned in your autoyast PXE line should look like this:\nKeep in mind, that profiles mentioned in your rules.xml, need to be placed in the parent folder, not in the rules folder itself.\n2. Rules might not work as you think (ie installed_product) If you work your way through AutoYaST, you are gonna get to the point where you can\u0026rsquo;t get around rules. Rules match specific parameters of the target system to a (sub) set of configuration parameters. Now, say you want to create a rule for systems on which you are about to install SUSE Linux Enterprise Server 11. The documentation tells us, to use something along the lines like this:\n1 2 3 4 5 6 7 8 9 10 11 \u0026lt;rule\u0026gt; \u0026lt;install_product\u0026gt; \u0026lt;match\u0026gt;SUSE Linux Enterprise Server\u0026lt;/match\u0026gt; \u0026lt;/install_product\u0026gt; \u0026lt;install_product_version\u0026gt; \u0026lt;match\u0026gt;11\u0026lt;/match\u0026gt; \u0026lt;/install_product_version\u0026gt; \u0026lt;result\u0026gt; \u0026lt;profile\u0026gt;sles11.xml\u0026lt;/profile\u0026gt; \u0026lt;/result\u0026gt; \u0026lt;/rule\u0026gt; You\u0026rsquo;re quickly gonna notice that you\u0026rsquo;re installation is gonna fail. Why ? Because Novell decided to drop the defined schema and use something else \u0026hellip; The tag install_product, when performing an SLES11 installation doesn\u0026rsquo;t contain \u0026rsquo; SUSE Linux Enterprise Server\u0026rsquo; as you might think, but rather \u0026rsquo; SUSE Linux Enterprise Server 11\u0026rsquo; \u0026hellip; notice the difference ? That and the default, that if no match-tag is given, it matches to the exact phrase. So the correct AutoYaST snippet should look likes this:\n1 2 3 4 5 6 7 8 9 10 11 \u0026lt;!-- Installing SLES11 --\u0026gt; \u0026lt;rule\u0026gt; \u0026lt;installed_product\u0026gt; \u0026lt;match\u0026gt;SUSE Linux Enterprise Server 11\u0026lt;/match\u0026gt; \u0026lt;match_type\u0026gt;regex\u0026lt;/match_type\u0026gt; \u0026lt;/installed_product\u0026gt; \u0026lt;result\u0026gt; \u0026lt;profile\u0026gt;sles11.xml\u0026lt;/profile\u0026gt; \u0026lt;continue config:type=\u0026#34;boolean\u0026#34;\u0026gt;true\u0026lt;/continue\u0026gt; \u0026lt;/result\u0026gt; \u0026lt;/rule\u0026gt; Another hint when trying to match for SUSE Linux Enterprise Server 10 \u0026ndash; say you wanna deploy SLES10SP2. Make sure you make a regex match for that, since \u0026ndash; as you might have guessed, I didn\u0026rsquo;t at first \u0026ndash; the install_product tag seems to contain SUSE Linux Enterprise Server 10 SP2 \u0026#x2757;\n1 2 3 4 5 6 7 8 9 10 11 \u0026lt;!-- Installing SLES10 --\u0026gt; \u0026lt;rule\u0026gt; \u0026lt;installed_product\u0026gt; \u0026lt;match\u0026gt;^SUSE Linux Enterprise Server 10\u0026lt;/match\u0026gt; \u0026lt;match_type\u0026gt;regex\u0026lt;/match_type\u0026gt; \u0026lt;/installed_product\u0026gt; \u0026lt;result\u0026gt; \u0026lt;profile\u0026gt;sles10.xml\u0026lt;/profile\u0026gt; \u0026lt;continue config:type=\u0026#34;boolean\u0026#34;\u0026gt;true\u0026lt;/continue\u0026gt; \u0026lt;/result\u0026gt; \u0026lt;/rule\u0026gt; 3. Asking questions during the installation If you\u0026rsquo;re in need of asking questions (like \u0026ldquo;Please enter the hostname\u0026rdquo; or \u0026ldquo;Please supply the root password\u0026rdquo;), you\u0026rsquo;re gonna need a bit of understanding as well as a few tricks:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 \u0026lt;general\u0026gt; \u0026lt;ask-list config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;listentry\u0026gt; \u0026lt;default\u0026gt;xxx.home.barfoo.org\u0026lt;/default\u0026gt; \u0026lt;pathlist config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;path\u0026gt;networking,dns,hostname\u0026lt;/path\u0026gt; \u0026lt;/pathlist\u0026gt; \u0026lt;question\u0026gt;Enter Hostname\u0026lt;/question\u0026gt; \u0026lt;/listentry\u0026gt; \u0026lt;listentry\u0026gt; \u0026lt;help\u0026gt;Enter the password for the superuser \u0026#34;root\u0026#34;.\u0026lt;/help\u0026gt; \u0026lt;password config:type=\u0026#34;boolean\u0026#34;\u0026gt;true\u0026lt;/password\u0026gt; \u0026lt;path\u0026gt;users,0,user_password\u0026lt;/path\u0026gt; \u0026lt;question\u0026gt;Enter root password\u0026lt;/question\u0026gt; \u0026lt;stage\u0026gt;initial\u0026lt;/stage\u0026gt; \u0026lt;title\u0026gt;Password for Root\u0026lt;/title\u0026gt; \u0026lt;/listentry\u0026gt; \u0026lt;/ask-list\u0026gt; \u0026lt;/general\u0026gt; ... \u0026lt;users config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;user\u0026gt; \u0026lt;fullname\u0026gt;root\u0026lt;/fullname\u0026gt; \u0026lt;gid\u0026gt;0\u0026lt;/gid\u0026gt; \u0026lt;home\u0026gt;/root\u0026lt;/home\u0026gt; \u0026lt;shell\u0026gt;/bin/bash\u0026lt;/shell\u0026gt; \u0026lt;uid\u0026gt;0\u0026lt;/uid\u0026gt; \u0026lt;username\u0026gt;root\u0026lt;/username\u0026gt; \u0026lt;/user\u0026gt; \u0026lt;/users\u0026gt; 4. Working with scripts Once you get to the point, where you want to embed scripts into the AutoYaST profile, you might up in a situation where YaST literally shoots you in the foot. If you (like me) utilize different profile, and in each profile define a script, YaST is gonna overwrite the tags from the other profile. This sucks, and I ended up placing a dummy script into my master profile.\n4. Debugging the rules merging process\nWell this is quite troublesome. There is no easy way to do this, no GUI or script telling you what the resulting AutoYaST xml is gonna look like. There are a few helps (like the xsltproc call mentioned in the FAQ -- or looking at the output of /var/log/YaST2/y2log concerning your rules.xml) but other than that there really is just fiddling with it.\nRight now, I\u0026rsquo;m stuck working on the determination whether or not the system YaST is about to install happens to be inside a VMware virtual machine or not (simply looking at the MAC address should suffice).\nBut again, as mentioned in the second point, Novell apparently lacks some consistency. The handbook states the rules tag mac would contain the MAC address \u0026hellip; apprently not, the mac-tag is empty \u0026hellip; Which leads us to using a custom rules script fiddling with ip, a bit of grep and a simple echo, which works quite well. Just make sure, that you move the output of your script to /dev/null, otherwise you\u0026rsquo;re gonna sit there and end up trying to figure out why the hell the script works on the command line, but not within an AutoYaST installation \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_sles11-and-autoyast/","summary":"\u003cp\u003eAfter the first week passed awfully quick, the last week I worked on refining the way on how we are doing openSuSE / SUSE Linux Enterprise Server installations. Up till now, they were done by hand (without a predefined schema) and were getting ugly to maintain. Working my way through the \u003ca href=\"http://www.suse.com/~ug/autoyast_doc/index.html\"\u003eNovell documentation on AutoYaST\u003c/a\u003e was pretty straight forward, but the little details were getting hairy. So I decided to write them down, in case someone was gonna end up in the same situation like me.\u003c/p\u003e","title":"SLES11 and AutoYaST"},{"content":"Up till now, we did have a bunch of shell and perl scripts doing this work. Today, as I was looking for some stuff to do, I found them and decided rewriting it, so you wouldn\u0026rsquo;t need a shell script to call the perl worker script \u0026hellip; This is pretty much the result!\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 #!/usr/bin/perl # LICENSE: GNU General Public License v2. (see LICENSE.txt) # COPYRIGHT: Copyright 2010 Christian Heim \u0026lt;christian.heim@barfoo.org\u0026gt; # This script runs a batch of commands on a list of FC-switches. For example: # fc-switch-commands.pl statsclear | configupload | supportsave use strict; use warnings; use Net::Telnet; our( @san_fabric1_core, @san_fabric1_edge_1, @san_fabric1_edge_2 ); our( @san_fabric2_core, @san_fabric2_edge_1, @san_fabric2_edge_2 ); our( @switches ); our( $ftp_host, $ftp_username, $ftp_password ); our( $telnet ); our( $i, $version, @debug ); @san_fabric1_core = ( \u0026#34;10.144.20.50\u0026#34;, \u0026#34;admin\u0026#34;, \u0026#34;JuNxJFSAS!\u0026#34;, \u0026#39;san_fabric1_core\u0026#39; ); @san_fabric1_edge_1 = ( \u0026#34;10.144.20.51\u0026#34;, \u0026#34;admin\u0026#34;, \u0026#34;JuNxJFSAS!\u0026#34;, \u0026#39;san_fabric1_edge_1\u0026#39; ); @san_fabric1_edge_2 = ( \u0026#34;10.144.20.52\u0026#34;, \u0026#34;admin\u0026#34;, \u0026#34;JuNxJFSAS!\u0026#34;, \u0026#39;san_fabric1_edge_2\u0026#39; ); @san_fabric2_core = ( \u0026#34;10.144.20.60\u0026#34;, \u0026#34;admin\u0026#34;, \u0026#34;JuNxJFSAS!\u0026#34;, \u0026#39;san_fabric2_core\u0026#39; ); @san_fabric2_edge_1 = ( \u0026#34;10.144.20.61\u0026#34;, \u0026#34;admin\u0026#34;, \u0026#34;JuNxJFSAS!\u0026#34;, \u0026#39;san_fabric2_edge_1\u0026#39; ); @san_fabric2_edge_2 = ( \u0026#34;10.144.20.62\u0026#34;, \u0026#34;admin\u0026#34;, \u0026#34;JuNxJFSAS!\u0026#34;, \u0026#39;san_fabric2_edge_2\u0026#39; ); $ftp_host = \u0026#39;10.144.20.45\u0026#39;; $ftp_username = \u0026#39;brocade_cfg\u0026#39;; $ftp_password = \u0026#39;JuNxJPFC!\u0026#39;; @switches = ( @san_fabric1_core, @san_fabric2_core, @san_fabric1_edge_1, @san_fabric1_edge_2, @san_fabric2_edge_1, @san_fabric2_edge_2 ); @debug = ( Dump_Log =\u0026gt; \u0026#39;dump.log\u0026#39;, Output_Log =\u0026gt; \u0026#39;out.log\u0026#39;, Input_Log =\u0026gt; \u0026#39;in.log\u0026#39; ); $telnet = new Net::Telnet(Timeout=\u0026gt;240, Errmode=\u0026gt;\u0026#39;die\u0026#39;, Prompt =\u0026gt; \u0026#39;/.*:admin\u0026gt; $/is\u0026#39;, @debug); for ($i = 0; $i \u0026lt; $#switches + 1; $i++) { $telnet-\u0026gt;open($switches[$i][0]); $telnet-\u0026gt;login($switches[$i][1], $switches[$i][2]); if ( $ARGV[0] eq \u0026#34;statsclear\u0026#34; ) { $telnet-\u0026gt;cmd(\u0026#34;statsclear\u0026#34;); } elsif ( $ARGV[0] eq \u0026#34;configupload\u0026#34; ) { # Check the FabricOS version, as Brocade decided to break compatiblity with # earlier firmware versions w/ v6 (at least configupload) $telnet-\u0026gt;cmd(\u0026#34;firmwareshow\u0026#34;); $version = $telnet-\u0026gt;lastline; $version =~ s/s+|s+$//g; if ( $version =~ \u0026#34;v6\u0026#34; ) { $telnet-\u0026gt;cmd(\u0026#34;configupload -all -ftp \u0026#34;$ftp_host\u0026#34;,\u0026#34;$ftp_username\u0026#34;,\u0026#34;$switches[$i][3].cfg\u0026#34;,\u0026#34;$ftp_password\u0026#34;\u0026#34;); } else { $telnet-\u0026gt;cmd(\u0026#34;configupload \u0026#34;$ftp_host\u0026#34;,\u0026#34;$ftp_username\u0026#34;,\u0026#34;$switches[$i][3].cfg\u0026#34;,\u0026#34;$ftp_password\u0026#34;\u0026#34;); } } elsif ( $ARGV[0] eq \u0026#34;supportsave\u0026#34; ) { $telnet-\u0026gt;cmd(\u0026#34;supportsave -n -u \u0026#34;$ftp_username\u0026#34; -p \u0026#34;$ftp_password\u0026#34; -h \u0026#34;$ftp_host\u0026#34; -d \u0026#34;supportsave/$switches[$i][3]\u0026#34; -l ftp\u0026#34;); } $telnet-\u0026gt;close(); } ","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_run-a-command-on-a-list-of-fibre-channel-switches-fc-switch-commands-pl/","summary":"\u003cp\u003eUp till now, we did have a bunch of shell and perl scripts doing this work. Today, as I was looking for some stuff to do, I found them and decided rewriting it, so you wouldn\u0026rsquo;t need a shell script to call the perl worker script \u0026hellip; This is pretty much the result!\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e44\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-45\"\u003e45\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-46\"\u003e46\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-47\"\u003e47\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-48\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-48\"\u003e48\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-49\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-49\"\u003e49\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-50\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-50\"\u003e50\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-51\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-51\"\u003e51\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-52\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-52\"\u003e52\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-53\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-53\"\u003e53\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-54\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-54\"\u003e54\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-55\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-55\"\u003e55\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-56\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-56\"\u003e56\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-57\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-57\"\u003e57\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-58\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-58\"\u003e58\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-59\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-59\"\u003e59\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-60\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-60\"\u003e60\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-61\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-61\"\u003e61\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-62\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-62\"\u003e62\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-63\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-63\"\u003e63\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#!/usr/bin/perl\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# LICENSE:     GNU General Public License v2. (see LICENSE.txt)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# COPYRIGHT:   Copyright 2010 Christian Heim \u0026lt;christian.heim@barfoo.org\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# This script runs a batch of commands on a list of FC-switches. For example:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# fc-switch-commands.pl statsclear | configupload | supportsave\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003euse\u003c/span\u003e \u003cspan class=\"n\"\u003estrict\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003euse\u003c/span\u003e \u003cspan class=\"n\"\u003ewarnings\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003euse\u003c/span\u003e \u003cspan class=\"n\"\u003eNet\u003c/span\u003e\u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eTelnet\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eour\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric1_core\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric1_edge_1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric1_edge_2\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eour\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric2_core\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric2_edge_1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric2_edge_2\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eour\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003eswitches\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eour\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eftp_host\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eftp_username\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eftp_password\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eour\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etelnet\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eour\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eversion\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003edebug\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric1_core\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;10.144.20.50\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;admin\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;JuNxJFSAS!\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;san_fabric1_core\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric1_edge_1\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;10.144.20.51\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;admin\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;JuNxJFSAS!\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;san_fabric1_edge_1\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric1_edge_2\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;10.144.20.52\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;admin\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;JuNxJFSAS!\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;san_fabric1_edge_2\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric2_core\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;10.144.20.60\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;admin\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;JuNxJFSAS!\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;san_fabric2_core\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric2_edge_1\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;10.144.20.61\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;admin\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;JuNxJFSAS!\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;san_fabric2_edge_1\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric2_edge_2\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;10.144.20.62\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;admin\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;JuNxJFSAS!\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;san_fabric2_edge_2\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eftp_host\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;10.144.20.45\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eftp_username\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;brocade_cfg\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eftp_password\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;JuNxJPFC!\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003eswitches\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric1_core\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric2_core\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric1_edge_1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric1_edge_2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e              \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric2_edge_1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003esan_fabric2_edge_2\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003edebug\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003eDump_Log\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;dump.log\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eOutput_Log\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;out.log\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eInput_Log\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;in.log\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etelnet\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003enew\u003c/span\u003e \u003cspan class=\"n\"\u003eNet\u003c/span\u003e\u003cspan class=\"p\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eTelnet\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eTimeout\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u0026gt;\u003c/span\u003e\u003cspan class=\"mi\"\u003e240\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eErrmode\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u0026gt;\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;die\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                          \u003cspan class=\"n\"\u003ePrompt\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;/.*:admin\u0026gt; $/is\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003edebug\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"c1\"\u003e#switches + 1; $i++) {\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etelnet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003eopen\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eswitches\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"p\"\u003e][\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e]);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etelnet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003elogin\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eswitches\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"p\"\u003e][\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e],\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eswitches\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"p\"\u003e][\u003c/span\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e]);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eARGV\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003eeq\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;statsclear\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etelnet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003ecmd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;statsclear\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"n\"\u003eelsif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eARGV\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003eeq\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;configupload\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# Check the FabricOS version, as Brocade decided to break compatiblity with\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# earlier firmware versions w/ v6 (at least configupload)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etelnet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003ecmd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;firmwareshow\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eversion\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etelnet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003elastline\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eversion\u003c/span\u003e \u003cspan class=\"o\"\u003e=~\u003c/span\u003e \u003cspan class=\"n\"\u003es\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003es\u003c/span\u003e\u003cspan class=\"o\"\u003e+|\u003c/span\u003e\u003cspan class=\"n\"\u003es\u003c/span\u003e\u003cspan class=\"o\"\u003e+$//\u003c/span\u003e\u003cspan class=\"n\"\u003eg\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eversion\u003c/span\u003e \u003cspan class=\"o\"\u003e=~\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;v6\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etelnet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003ecmd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;configupload -all -ftp \u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eftp_host\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;,\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eftp_username\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;,\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eswitches\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"p\"\u003e][\u003c/span\u003e\u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecfg\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;,\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eftp_password\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"k\"\u003eelse\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etelnet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003ecmd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;configupload \u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eftp_host\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;,\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eftp_username\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;,\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eswitches\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"p\"\u003e][\u003c/span\u003e\u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecfg\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;,\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eftp_password\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"n\"\u003eelsif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eARGV\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003eeq\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;supportsave\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etelnet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003ecmd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;supportsave -n -u \u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eftp_username\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34; -p \u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eftp_password\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34; -h \u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eftp_host\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34; -d \u0026#34;\u003c/span\u003e\u003cspan class=\"n\"\u003esupportsave\u003c/span\u003e\u003cspan class=\"o\"\u003e/$\u003c/span\u003e\u003cspan class=\"n\"\u003eswitches\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"p\"\u003e][\u003c/span\u003e\u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34; -l ftp\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etelnet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003eclose\u003c/span\u003e\u003cspan class=\"p\"\u003e();\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Run a command on a list of Fibre-Channel switches (fc-switch-commands-pl)"},{"content":"I looked into the mess a bit more, and as it turns out, the weird crap I was talking about only happens if you have a port with LossofSynchronization, LossofSignal or LinkFailures value with the base of ten (i.e. 10, 101 or 10.000).\nAdditionally, the OID\u0026rsquo;s for those three failure elements seem to be dependent on the firmware version, as with 6.3.x they appear as different OIDs. So I may need to introduce another command-line switch, which selects the firmware version and depending on that, the OID.\nEven despite those problems I just described, I ended up using the plugin to watch our SAN infrastructure. I even wrote a simple pnp4nagios template, so all the data would show up in a single graph and not a graph per data source.\ncheck_snmp_brocade_fcport Graph: 4 Hours\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_monitoring-brocade-fc-switches-with-snmp-nagios/","summary":"\u003cp\u003eI looked into the mess a bit more, and as it turns out, \u003ca href=\"/posts/2014-08-08_monitoring-brocade-fc-switches-with-nagios\" title=\"Monitoring Brocade FC switches with Nagios\"\u003ethe weird crap I was talking about\u003c/a\u003e only happens if you have a port with LossofSynchronization, LossofSignal or LinkFailures value with the base of ten (i.e. 10, 101 or 10.000).\u003c/p\u003e\n\u003cp\u003eAdditionally, the OID\u0026rsquo;s for those three failure elements seem to be dependent on the firmware version, as with 6.3.x they appear as different OIDs. So I may need to introduce another command-line switch, which selects the firmware version and depending on that, the OID.\u003c/p\u003e","title":"Monitoring Brocade FC switches with SNMP/Nagios"},{"content":"The last four days I spent looking for ways on monitoring a Brocade Fibrechannel switch (in my case IBM 2145 B32/F40). The first thing I came up with, is using SNMP. As it was already configured for the previous monitoring with Munin, getting information should be quite easy. After looking through Google for a bit, there is already one script that worked for me.\nOnly trouble I had with that script, is that it crams every single port into one result. As I wanted something, that a) could watch a single port and b) return performance data, I went ahead an used the script to do a basic rewrite. But after a short while, I grew antsy and started writing a script from scratch, using the OIDs I got from that script and a Cacti template.\nSo far, I got a good plugin, but it\u0026rsquo;s still lacking a few things:\nSupport for warning/critical thresholds for each error category Sadly the important errors ( er_link_fail, er_loss_sync and er_loss_sig) are kept in a separate table structure ( swEndDeviceRlsEntry), which I can\u0026rsquo;t seem to access right now; even though the entries are mandatory and according to the MIB should be at least read-only. The plugin isn\u0026rsquo;t doing a proper $session-\u0026gt;close(); . After moving the snmp stuff into a subroutine, Perl refuses to do the session closing. Don\u0026rsquo;t know why right now. Right now, the plugin supports two modes. The first just checks if the port is operational and in sync and the second checks the port status, but also returns the performance data.\nOnly do a basic check if the Port is in operational status 1 2 ./check_snmp_brocade_fcport.pl -H 10.0.0.50 -C public -P 2 -N SNMP_BROCADE_FCPORT OK - FC port 0/2\u0026#39;s swFCPortPhyState is inSync Check the port status, but also return performance data 1 2 ./check_snmp_brocade_fcport.pl -H 10.0.0.50 -C public -P 2 SNMP_BROCADE_FCPORT OK - FC port 0/2\u0026#39;s swFCPortPhyState is inSync|stat_wtx=577976968;0;0;0;0 stat_wrx=4069984468;0;0;0;0 stat_ftx=422378205;0;0;0;0 stat_frx=123789748;0;0;0;0 er_enc_in=0;0;0;0;0 er_crc=0;0;0;0;0 er_trunc=0;0;0;0;0 er_toolong=0;0;0;0;0 er_bad_eof=0;0;0;0;0 er_enc_out=0;0;0;0;0 er_c3_timeout=0;0;0;0;0 That might look like much, but Nagios is gonna pass everything after \u0026ldquo;|\u0026rdquo; to your performance data command.\nList of OIDs, which hold the various information:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 swFCPort PhyState: .1.3.6.1.4.1.1588.2.1.1.1.6.2.1.3. OpStatus: .1.3.6.1.4.1.1588.2.1.1.1.6.2.1.4. AdmStatus: .1.3.6.1.4.1.1588.2.1.1.1.6.2.1.5. LinkState: .1.3.6.1.4.1.1588.2.1.1.1.6.2.1.6. TxWords: .1.3.6.1.4.1.1588.2.1.1.1.6.2.1.11. (stat_wtx) RxWords: .1.3.6.1.4.1.1588.2.1.1.1.6.2.1.12. (stat_wrx) TxFrames: .1.3.6.1.4.1.1588.2.1.1.1.6.2.1.13. (stat_ftx) RxFrames: .1.3.6.1.4.1.1588.2.1.1.1.6.2.1.14. (stat_frx) RxEncInFrs: .1.3.6.1.4.1.1588.2.1.1.1.6.2.1.21. (er_enc_in) RxCrcs: .1.3.6.1.4.1.1588.2.1.1.1.6.2.1.22. (er_crc) RxTruncs: .1.3.6.1.4.1.1588.2.1.1.1.6.2.1.23. (er_trunc) RxTooLongs: .1.3.6.1.4.1.1588.2.1.1.1.6.2.1.24. (er_toolong) RxBadEofs: .1.3.6.1.4.1.1588.2.1.1.1.6.2.1.25. (er_bad_eof) RxEncOutFrs: .1.3.6.1.4.1.1588.2.1.1.1.6.2.1.26. (er_enc_out) C3Discards: .1.3.6.1.4.1.1588.2.1.1.1.6.2.1.28. (er_c3_timeout) swEndDevice LinkFailure: .1.3.6.1.4.1.1588.2.1.1.1.21.1.1.4. (er_link_fail) SyncLoss: .1.3.6.1.4.1.1588.2.1.1.1.21.1.1.5. (er_loss_sync) SigLoss: .1.3.6.1.4.1.1588.2.1.1.1.21.1.1.6. (er_loss_sig) The last three OIDs, as well as the ones in FCMGMT-MIB (as I mentioned in the TODO), sadly don\u0026rsquo;t exist (or I\u0026rsquo;m doing something wrong ? \u0026ndash; no clue right now), so I can\u0026rsquo;t incorporate them into the script at this time.\nHowever, I found something in a separate OID-tree (also the FCMGMT-MIB), which seems to be exactly what I\u0026rsquo;m looking for.\n1 2 3 4 connUnitPortStatCount LossofSynchronization: .1.3.6.1.3.94.4.5.1.44.16.0.0.5.30.52.240.185.0.0.0.0.0.0.0.0.\u0026lt;fcport\u0026gt; LossofSignal: .1.3.6.1.3.94.4.5.1.43.16.0.0.5.30.52.240.185.0.0.0.0.0.0.0.0.\u0026lt;fcport\u0026gt; LinkFailures: .1.3.6.1.3.94.4.5.1.44.16.0.0.5.30.52.240.185.0.0.0.0.0.0.0.0.\u0026lt;fcport\u0026gt; Only trouble with those OIDs is, that they are OCTET STRING\u0026rsquo;s, which right now just return crap (either nothing or just a new-line) with my script. Gonna have to work on that.\nIf you\u0026rsquo;re interested in the Perl script (for now, lacking some options, performance data, $session-\u0026gt;close();), you\u0026rsquo;ll find it here.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_monitoring-brocade-fc-switches-with-nagios/","summary":"\u003cp\u003eThe last four days I spent looking for ways on monitoring a Brocade Fibrechannel switch (in my case IBM 2145 B32/F40). The first thing I came up with, is using SNMP. As it was already configured for the previous monitoring with Munin, getting information should be quite easy. After looking through Google for a bit, there is already \u003ca href=\"http://exchange.nagios.org/directory/Plugins/Hardware/Storage-Systems/SAN-and-NAS/IBM-Brocade/check_snmp_FCports_brocade-2Epl/details\"\u003eone script\u003c/a\u003e that worked for me.\u003c/p\u003e\n\u003cp\u003eOnly trouble I had with that script, is that it crams every single port into one result. As I wanted something, that a) could watch a single port and b) return performance data, I went ahead an used the script to do a basic rewrite. But after a short while, I grew antsy and started writing a script from scratch, using the OIDs I got from that script and a \u003ca href=\"http://forums.cacti.net//files/brocade_interfaces.xml\"\u003eCacti template\u003c/a\u003e.\u003c/p\u003e","title":"Monitoring Brocade FC switches with Nagios"},{"content":"Recently, we found some systems (sadly, customer systems) that weren\u0026rsquo;t getting any Security Updates anymore. Much more sadly, them is running Windows Server 2003, and as you know Security Updates are pretty important for Windows Systems.\nAt the time of finding this, I had no clue as to why the were not getting any updates. At first we thought it had something to do with the WSUS server, so I upgraded the WSUS 3.0 SP1 to SP2. Since that didn\u0026rsquo;t solve nothing, I went searching for a internal VM, that showed the same symptoms and I quickly found one.\nAfter cloning said VM (since that one is running in the production environment), a bit of hacking on it (you know, disabling the network of the VM, switching IP and Hostname, running NewSID, \u0026hellip;) I went cracking at the problem.\nStopped the Windows Update Service, cleaned the %WINDIR%SoftwareDistribution, and started the Windows Update Service again; triggered a wuauclt.exe /detectnow /reportnow. Yet again the same result. \u0026ldquo;0 updates detected\u0026rdquo;. Shite.\nWent ahead, and tried what Microsoft in their \u0026quot; If you have trouble with Windows Update\u0026quot; knowledge base article, but then again. Same result.\nAnother try, was simply reinstalling the Windows Update Agent, which also resulted in the same old \u0026hellip; \u0026ldquo;0 updates detected\u0026rdquo;\nDue to some discussion with my co-workers, I ended up clicking through a Microsoft KB for a recently released patch. What I found, was that any newer update I looked at, only had \u0026ldquo;Windows Server 2003 with Service Pack 2\u0026rdquo; listed as download element. Shite.\nSomehow, I stumbled over a link (in the same KB article) detailing the Support Lifecycle for Service Packs in general, as well as the Lifecycle announcements for each Service Pack.\nEnd of the story and solution to my problem basically is, Microsoft terminated the Lifecycle for Windows Server 2003 SP1 on 14.04.2009, which is the target date after which Security and Critical Updates are no longer issued for systems running SP1.\nIn the end, I don\u0026rsquo;t really blame them, since SP2 was already released in 2007. But what I would\u0026rsquo;ve expected is some kind of press release or a public note, that Security releases are gonna end. Another construction area identified, more work for me!\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_windows-server-2003-sp1-wsus-and-security-updates/","summary":"\u003cp\u003eRecently, we found some systems (sadly, customer systems) that  weren\u0026rsquo;t getting any Security Updates anymore. Much more sadly, them is running Windows Server 2003, and as you know Security Updates are pretty important for Windows Systems.\u003c/p\u003e\n\u003cp\u003eAt the time of finding this, I had no clue as to why the were not getting any updates. At first we thought it had something to do with the WSUS server, so I upgraded the WSUS 3.0 SP1 to SP2. Since that didn\u0026rsquo;t solve nothing, I went searching for a internal VM, that showed the same symptoms and I quickly found one.\u003c/p\u003e","title":"Windows Server 2003 SP1, WSUS and Security Updates"},{"content":"As I wrote on Thursday, I am battling with Windows Server 2003. Now I got a list out of our change management database, which sadly ain\u0026rsquo;t that accurate. So in order to get reliable information about the target systems (in order to do some accurate planning), I ended up writing a small vbscript which simply takes the hostname on the command line (cscript //NoLogo win_sp_level.vbs 10.0.0.5) and returns a csv-like element.\nWe may have to tune the script a bit more for our use, but it should show the basic functions I need.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Dim hostname, os, servicepack hostname = WScript.Arguments.Item(0) strComputer = hostname Set objSWbemLocator = CreateObject(\u0026#34;WbemScripting.SWbemLocator\u0026#34;) Set objSWbemServices = objSWbemLocator.ConnectServer _ (strComputer, \u0026#34;rootcimv2\u0026#34;, hostname \u0026amp;amp; \u0026#34;chrischie\u0026#34;, \u0026#34;hah-this-password-is-easy\u0026#34;) objSWbemServices.Security_.ImpersonationLevel = 3 Set colOperatingSystems = objSWbemServices.ExecQuery _ (\u0026#34;Select * from Win32_OperatingSystem\u0026#34;) For Each objOperatingSystem in colOperatingSystems os = objOperatingSystem.Caption servicepack = objOperatingSystem.ServicePackMajorVersion Next Wscript.Echo hostname \u0026amp; \u0026#34;;\u0026#34; \u0026amp; os \u0026amp; \u0026#34;; SP\u0026#34; \u0026amp; servicepack \u0026amp; \u0026#34;;\u0026#34; ","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_vbscript-query-remote-os-and-sp-info/","summary":"\u003cp\u003eAs I wrote \u003ca href=\"/posts/2014-08-08_windows-server-2003-sp1-wsus-and-security-updates\" title=\"Windows Server 2003 SP1, WSUS and Security Updates\"\u003eon Thursday\u003c/a\u003e, I am battling with Windows Server 2003. Now I got a list out of our change management database, which sadly ain\u0026rsquo;t that accurate. So in order to get reliable information about the target systems (in order to do some accurate planning), I ended up writing a small vbscript which simply takes the hostname on the command line (cscript //NoLogo win_sp_level.vbs 10.0.0.5) and returns a csv-like element.\u003c/p\u003e","title":"VBscript: Query remote OS and SP info"},{"content":"Since I\u0026rsquo;ve been playing with my AutoYAST setup for the last few days, working out the kinks (for example SLES10 not being able to install into the MBR), I needed a way to zap the MBR (as in remove grub to see whether or not the installation would install a new loader). So after quickly googling, I found this:\n1 dd if=/dev/zero of=/dev/hda bs=512 count=1 That actually does the trick. The loader as well as the partition table are gone after wards!\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_reset-master-boot-record-mbr/","summary":"\u003cp\u003eSince I\u0026rsquo;ve been playing with my AutoYAST setup for the last few days, working out the kinks (for example SLES10 not being able to install into the MBR), I needed a way to zap the MBR (as in remove grub to see whether or not the installation would install a new loader). So after quickly googling, I found \u003ca href=\"http://linuxgazette.net/issue63/okopnik.html\"\u003ethis\u003c/a\u003e:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e dd if=/dev/zero of=/dev/hda bs=512 count=1\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThat actually does the trick. The loader as well as the partition table are gone after wards!\u003c/p\u003e","title":"Reset Master Boot Record (MBR)"},{"content":"As I mentioned before, we\u0026rsquo;re starting to utilize Boot-from-SAN as a means to strip the blades of their local disk. As the title says, after trying a manual installation of SLES 11.1 via CD/HTTP I wanted to automate the process, in order to get a reproducible, consistent installation method. As you might have figured, AutoYaST doesn\u0026rsquo;t have any built in support for configuring multipathing (hey, that\u0026rsquo;s what Novell says here). Now, they also provide a comprehensive how-to on how to \u0026ldquo;add\u0026rdquo; this to your AutoYaST, using a DUD (or D river U pdate D isk).\nNow, you can download the provided Driver Update Disk to any Linux box and unpack it using cpio. As the KB states, do the following:\n1 2 3 4 cd /tmp/ gunzip multipath.DUD.gz cd /Installsource/SLES11SP1-x86_64/ cpio -i \u0026lt;/tmp/multipath.DUD And you might get the same as I do:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 chrischie:(sles-vm.home.barfoo.org) PWD:/srv/instsrc/sles/11.1/x64 Wed Feb 29, 21:13:42 [0] \u0026gt; sudo cpio -i \u0026lt; /tmp/multipath.DUD cpio: /NETSTORE/Installsource/SLES11SP1-x86_64/linux: Cannot mkdir: No such file or directory cpio: /NETSTORE/Installsource/SLES11SP1-x86_64/linux/suse: Cannot mkdir: No such file or directory cpio: /NETSTORE/Installsource/SLES11SP1-x86_64/linux/suse/x86_64-sles11: Cannot mkdir: No such file or directory cpio: /NETSTORE/Installsource/SLES11SP1-x86_64/linux/suse/x86_64-sles11/inst-sys: Cannot mkdir: No such file or directory cpio: /NETSTORE/Installsource/SLES11SP1-x86_64/linux/suse/x86_64-sles11/inst-sys/usr: Cannot mkdir: No such file or directory cpio: /NETSTORE/Installsource/SLES11SP1-x86_64/linux/suse/x86_64-sles11/inst-sys/usr/lib: Cannot mkdir: No such file or directory cpio: /NETSTORE/Installsource/SLES11SP1-x86_64/linux/suse/x86_64-sles11/inst-sys/usr/lib/YaST2: Cannot mkdir: No such file or directory cpio: /NETSTORE/Installsource/SLES11SP1-x86_64/linux/suse/x86_64-sles11/inst-sys/usr/lib/YaST2/startup: Cannot mkdir: No such file or directory cpio: /NETSTORE/Installsource/SLES11SP1-x86_64/linux/suse/x86_64-sles11/inst-sys/usr/lib/YaST2/startup/hooks: Cannot mkdir: No such file or directory cpio: /NETSTORE/Installsource/SLES11SP1-x86_64/linux/suse/x86_64-sles11/inst-sys/usr/lib/YaST2/startup/hooks/preFirstStage-old: Cannot mkdir: No such file or directory cpio: /NETSTORE/Installsource/SLES11SP1-x86_64/linux/suse/x86_64-sles11/inst-sys/usr/lib/YaST2/startup/hooks/preFirstStage-old/S01start_multipath.sh: Cannot open: No such file or directory cpio: /NETSTORE/Installsource/SLES11SP1-x86_64/linux/suse/x86_64-sles11/inst-sys/usr/lib/YaST2/startup/hooks/preFirstCall: Cannot mkdir: No such file or directory cpio: /NETSTORE/Installsource/SLES11SP1-x86_64/linux/suse/x86_64-sles11/inst-sys/usr/lib/YaST2/startup/hooks/preFirstCall/S01start_multipath.sh: Cannot open: No such file or directory 8 blocks Now, after creating the path in question (just mkdir -p /NETSTORE/Installsource/SLES11SP1-x86_64) and retrying the cpio, you\u0026rsquo;ll get the following:\n1 2 3 chrischie:(sles-vm.home.barfoo.org) PWD:/srv/instsrc/sles/11.1/x64 Wed Feb 29, 21:15:44 [0] \u0026gt; sudo cpio -i \u0026lt; /tmp/multipath.DUD 8 blocks Next, according to the KB article is moving the linux directory to your actual install location (in my case /srv/instsrc/sles/11.1/x64) and then booting your system in question. And guess what you get ? Nil (as in the setup starts, but /sbin/multipath isn\u0026rsquo;t being called \u0026ndash; which is nothing in my setup).\nNext I tried copying the cpio-image ( /tmp/multipath.DUD) to my install location as driverupdate (I know the SLES setup is pulling that file), which produced a warning about an unsigned driverupdate file (as it isn\u0026rsquo;t in ./content) -- which can be circumvented by adding Insecure: 1 to your Info file (or passing insecure=1 as linuxrc parameter) \u0026ndash; but after pressing \u0026ldquo;Yes\u0026rdquo; produced yet again Nil (still no call to /sbin/multipath).\nAfter about three hours of fiddling with the original DUD (sadly the UCS blades are painfully slow to reboot \u0026ndash; takes them about six minutes each), I decided to repack the Driver Update Disk. The Update Media HOWTO explains the structure/layout of the DUD pretty well, but fails to mention what kind of image it actually is or how to create it. Luckily there\u0026rsquo;s Google and the Internets.\nThe guys over at OPS East Blog, posted something that helped me create the DUD.\nBasically, create /tmp/update-media and copy/move the linux folder into this folder.\n1 2 3 mkdir /tmp/driver-update cp -r /NETSTORE/Installsource/SLES11SP1-x86_64/linux /tmp/update-media chown -R root.root /tmp/update-media After this, we create a Driver Update Disk configration.\n1 2 3 4 echo \u0026#34;UpdateName: Enable multipathing config on AutoYaST boot\u0026#34; \u0026gt; /tmp/update-media/linux/suse/x86_64-sles11/dud.config echo \u0026#34;UpdateID: autoyast_multipath_1\u0026#34; \u0026gt;\u0026gt; /tmp/update-media/linux/suse/x86_64-sles11/dud.config Now, we create the DUD package.\n1 mkfs.cramfs /tmp/update-media /tmp/driverupdate This produces a CramFS image named /tmp/driverupdate (which you can view using mount -o loop). After moving this image to my install location and keeping the filename driverupdate, /sbin/multipath is actually being called as you can see below.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_enabling-multipathing-in-autoyast-installations/","summary":"\u003cp\u003eAs I mentioned before, we\u0026rsquo;re starting to utilize Boot-from-SAN as a means to strip the blades of their local disk. As the title says, after trying a manual installation of SLES 11.1 via CD/HTTP I wanted to automate the process, in order to get a reproducible, consistent installation method. As you might have figured, AutoYaST doesn\u0026rsquo;t have any built in support for configuring multipathing (hey, that\u0026rsquo;s what \u003ca href=\"http://www.novell.com/support/viewContent.do?externalId=7009981\u0026amp;sliceId=1\"\u003eNovell says here\u003c/a\u003e). Now, they also provide a \u003ca href=\"http://www.novell.com/support/viewContent.do?externalId=7009981\u0026amp;sliceId=1\"\u003ecomprehensive how-to\u003c/a\u003e on how to \u0026ldquo;add\u0026rdquo; this to your AutoYaST, using a DUD (or \u003cstrong\u003eD\u003c/strong\u003e river \u003cstrong\u003eU\u003c/strong\u003e pdate \u003cstrong\u003eD\u003c/strong\u003e isk).\u003c/p\u003e","title":"Enabling multipathing in autoyast installations"},{"content":"Well as the title says, sadly we bought our FAS6210 without CIFS/NFS license. Thus, in order to create the folder structure/add the authorized_keys file, you\u0026rsquo;ll have to work for your money a little bit.\nFirst, you need to run cifs setup / cifs passwd somewhere. I did it on our Data ONTAP simulator, which comes in handy for things like that.\nYou\u0026rsquo;ll get a cryptic looking password (no clue which format that is), looking like this: _OnWddr)xa.\nNow, in order for the ftpd process to work, you need to create a /etc/passwd file. Usually the cifs setup would take care of that, but since we don\u0026rsquo;t own a CIFS license and I didn\u0026rsquo;t wanna add a trial license, I simply did what I described above on our simulator.\nNow, open a SSH session with your filer. Create a new /etc/passwd file using wrfile. The new passwd file should look like this:\n1 2 3 4 root:_OnWddr)xa.:0:1::/: pcuser::65534:65534::/: nobody::65535:65535::/: ftp::65533:65533:FTP Anonymous:/home/ftp: Now make sure, to replace the whole string in between the double dots with the one you got from the output of cifs passwd. After that is done, enable the FTP daemon using the options command:\n1 options ftpd.enable on Now, create your authorized_keys file somewhere (I exported my Public Key using PuTTygen), and from there open a ftp sessions with your root user on the filer. In the ftp shell run this:\n1 2 3 4 5 6 7 8 cd /etc/sshd mkdir root cd root mkdir .ssh cd .ssh lcd D:userschrischieDesktop prompt mput authorized_keys The above example asumes that you created the authorized_keys file in the folder Desktop (that\u0026rsquo;s where my Desktop folder is, so replace it to suit your needs). Afterwards, disable the FTP daemon again:\n1 options ftpd.enable off And, tada \u0026hellip; enjoy SSH password-less with your shiny public key.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_netapp-fas-data-ontap-public-key-authentification-with-cifs-nfs-license/","summary":"\u003cp\u003eWell as the title says, sadly we bought our FAS6210 without CIFS/NFS license. Thus, in order to create the folder structure/add the \u003cem\u003eauthorized_keys\u003c/em\u003e file, you\u0026rsquo;ll have to work for your money a little bit.\u003c/p\u003e\n\u003cp\u003eFirst, you need to run \u003cem\u003ecifs setup\u003c/em\u003e / \u003cem\u003ecifs passwd\u003c/em\u003e somewhere. I did it on our Data ONTAP simulator, which comes in handy for things like that.\u003c/p\u003e\n\u003cp\u003eYou\u0026rsquo;ll get a cryptic looking password (no clue which format that is), looking like this: _OnWddr)xa.\u003c/p\u003e","title":"NetApp FAS/Data ONTAP public key authentification with CIFS/NFS license"},{"content":"As I wrote a few days ago, I started a new job. One of my first (voluntary) tasks was writing a shell script which would copy a VDisk Host-Mapping from a given host to another. This is useful, if you do have a lot of ESX servers for example and a few roaming ones.\nNow, if say, you need to do some ESX-Updates and you would like to add the roaming one to a given farm, you would be in a dark an deary place. You would be required to either click through the GUI a dozen times (in my case, it might have needed ~200 clicks) or type svcinfo lshostvdiskmap and svctask mkhostvdiskmap -force (these are incomplete command references) a few times.\nBoth methods ain\u0026rsquo;t optimal nor fast. Since the SVCTools (Perl, jikes) don\u0026rsquo;t really came into consideration, and the SVC SSH interface really doesn\u0026rsquo;t provide any other method to do a simple `cut -d: -f3` (as a hint: if anyone knows a nice method to emulate cut with bash patterns -- yeah, I ain\u0026rsquo;t kidding \u0026ndash; please drop me a note!), I ended up writing a simple shell script which is gonna do all the tasks from any Linux system (in possession of the SSH DSA private keys for the SVC of course).\nThe script looks like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #!/bin/bash svc_cluster_ip=10.0.0.10 svc_priv_dsa=~/.ssh/id_dsa_svc if [ -n $2 ] ; then echo \u0026#34; copyvdiskhostmap.sh [ host_to | host_from ]\u0026#34; echo echo \u0026#34; host_to - Target host, for which we will create the VDisk map.\u0026#34; echo \u0026#34; host_from - Source host, from which the VDisk map will be copied.\u0026#34; echo exit 1; fi if [ ! -f $svc_priv_dsa ] ; then echo \u0026#34; copyvdiskhostmap.sh is missing the SSH DSA private key needed\u0026#34; echo \u0026#34; to access the SAN Volume controller.\u0026#34; echo \u0026#34; Please specify the correct path!\u0026#34; fi host_to=$1 host_from=$2 for mapping in $( ssh -i $svc_priv_dsa admin@$svc_cluster_ip svcinfo lshostvdiskmap -nohdr -delim : $host_from ); do vdisk_scsi_id=\u0026#34;$( echo $mapping | cut -d: -f3 )\u0026#34; vdisk_name=\u0026#34;$( echo $mapping | cut -d: -f5 )\u0026#34; ssh -i $svc_priv_dsa admin@$svc_cluster_ip svcinfo lshost $host_to || echo \u0026#34;Failed, since the target host doesn\u0026#39;t existent!\u0026#34; \u0026amp;\u0026amp; break ssh -i $svc_priv_dsa admin@$svc_cluster_ip svctask mkvdiskhostmap -force -host $host_to -scsi $vdisk_scsi_id $vdisk_name done ","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_ibm-svc-copy-vdisk-host-mapping-from-one-host-to-another/","summary":"\u003cp\u003eAs I wrote \u003ca href=\"/posts/2014-08-08_loooong-time\" title=\"Loooong time\"\u003ea few days ago\u003c/a\u003e, I started a new job. One of my first (voluntary) tasks was writing a shell script which would copy a VDisk Host-Mapping from a given host to another. This is useful, if you do have a lot of ESX servers for example and a few roaming ones.\u003c/p\u003e\n\u003cp\u003eNow, if say, you need to do some ESX-Updates and you would like to add the roaming one to a given farm, you would be in a dark an deary place. You would be required to either click through the GUI a dozen times (in my case, it might have needed ~200 clicks) or type svcinfo lshostvdiskmap \u003c!-- raw HTML omitted --\u003e and svctask mkhostvdiskmap \u003c!-- raw HTML omitted --\u003e -force (these are incomplete command references) a few times.\u003c/p\u003e","title":"IBM SVC: Copy VDisk Host-Mapping from one host to another"},{"content":"Well, today I had another idea (basically like the one I wrote for SVC\u0026rsquo;s VDisk mappings a while back) for a script:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 #!/bin/bash KEY_FILE=\u0026#34;/root/.ssh/netapp.dsa\u0026#34; SSH_OPTS=\u0026#34;/root/.ssh/netapp-ssh_config\u0026#34; if [ $# -ne 3 ] ; then echo \u0026#34;fas-copy-lunmap: FAS_CONTROLLER SOURCE_IGROUP TARGET_IGROUP\u0026#34; echo echo \u0026#34;Copy the LUN map from one igroup to another, ie for ESX reinstallation\u0026#34; echo echo \u0026#34; Usage:\u0026#34; echo \u0026#34; - FAS_CONTROLLER: Hostname/IP-adress of the DATA ONTAP controller\u0026#34; echo \u0026#34; - SOURCE_IGROUP: igroup that is used as a reference for the copy process\u0026#34; echo \u0026#34; - TARGET_IGROUP: igroup that is actually modified\u0026#34; echo exit 1 fi FAS_CTRL=$1 SOURCE=$2 TARGET=$3 ssh_fas() { # $@: commands for Data ONTAP COMMANDS=\u0026#34;$@\u0026#34; /usr/bin/ssh -i $KEY_FILE -l root -F $SSH_OPTS $COMMANDS } #set -x # Get the lun list. for lun in $( ssh_fas $FAS_CTRL lun show -g $SOURCE | awk \u0026#39;{ print $1 }\u0026#39; | sort -u ); do # Get the LUN number its mapped LUN_ID=\u0026#34;$( ssh_fas $FAS_CTRL lun show -m $lun | grep \u0026#34;^/vol\u0026#34; | awk \u0026#39;{ print $3 }\u0026#39; )\u0026#34; # If the LUN id is 0, skip otherwise we would copy the boot LUN if [ \u0026#34;$LUN_ID\u0026#34; != \u0026#34;0\u0026#34; ] ; then # Actually map the lun to our host echo \u0026#34;Mapping $lun to $TARGET as LUN_ID $LUN_ID\u0026#34; ssh_fas $FAS_CTRL lun map $lun $TARGET $LUN_ID fi done #set +x I\u0026rsquo;ll post the counterpart of the script (to remove the LUNs) in a second post later on.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_netapp-copy-lun-mappings/","summary":"\u003cp\u003eWell, today I had another idea (basically like the one I wrote for \u003ca href=\"/posts/2014-08-08_ibm-svc-copy-vdisk-host-mapping-from-one-host-to-another\" title=\"IBM SVC: Copy VDisk Host-Mapping from one host to another\"\u003eSVC\u0026rsquo;s VDisk mappings\u003c/a\u003e a while back) for a script:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e44\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eKEY_FILE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/root/.ssh/netapp.dsa\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eSSH_OPTS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/root/.ssh/netapp-ssh_config\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$#\u003c/span\u003e -ne \u003cspan class=\"m\"\u003e3\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;fas-copy-lunmap: FAS_CONTROLLER SOURCE_IGROUP TARGET_IGROUP\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Copy the LUN map from one igroup to another, ie for ESX reinstallation\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;  Usage:\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;    - FAS_CONTROLLER:   Hostname/IP-adress of the DATA ONTAP controller\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;    - SOURCE_IGROUP:    igroup that is used as a reference for the copy process\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;    - TARGET_IGROUP:    igroup that is actually modified\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eFAS_CTRL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eSOURCE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eTARGET\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$3\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003essh_fas\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# $@: commands for Data ONTAP\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eCOMMANDS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$@\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  /usr/bin/ssh -i \u003cspan class=\"nv\"\u003e$KEY_FILE\u003c/span\u003e -l root -F \u003cspan class=\"nv\"\u003e$SSH_OPTS\u003c/span\u003e \u003cspan class=\"nv\"\u003e$COMMANDS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#set -x\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Get the lun list.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e lun in \u003cspan class=\"k\"\u003e$(\u003c/span\u003e ssh_fas \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e lun show -g \u003cspan class=\"nv\"\u003e$SOURCE\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $1 }\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sort -u \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# Get the LUN number its mapped\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eLUN_ID\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e ssh_fas \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e lun show -m \u003cspan class=\"nv\"\u003e$lun\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep \u003cspan class=\"s2\"\u003e\u0026#34;^/vol\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $3 }\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# If the LUN id is 0, skip otherwise we would copy the boot LUN\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$LUN_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e !\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;0\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# Actually map the lun to our host\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Mapping \u003c/span\u003e\u003cspan class=\"nv\"\u003e$lun\u003c/span\u003e\u003cspan class=\"s2\"\u003e to \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TARGET\u003c/span\u003e\u003cspan class=\"s2\"\u003e as LUN_ID \u003c/span\u003e\u003cspan class=\"nv\"\u003e$LUN_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ssh_fas \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e lun map \u003cspan class=\"nv\"\u003e$lun\u003c/span\u003e \u003cspan class=\"nv\"\u003e$TARGET\u003c/span\u003e \u003cspan class=\"nv\"\u003e$LUN_ID\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#set +x\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eI\u0026rsquo;ll post the counterpart of the script (to remove the LUNs) in a second post later on.\u003c/p\u003e","title":"NetApp - Copy LUN mappings"},{"content":"Well, here\u0026rsquo;s the promised script to regenerate the main PXE menu based on the menu entries created by register-suse and register-vmware.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 #!/bin/bash TFTP_DIR=/srv/tftpboot/pxelinux.cfg mkdir -p $TFTP_DIR \u0026amp;\u0026gt;/dev/null # Iterate through the pxelinux.cfg directory and recreate the index menues. for dir in $( find $TFTP_DIR -mindepth 1 -maxdepth 1 -type d ); do echo \u0026#34;Generating summary menu for: $dir\u0026#34; count=1 cat \u0026gt; $dir.menu \u0026lt;\u0026lt; EOF MENU TITLE Linux Installationservices MENU BACKGROUND addons/background.png MENU COLOR screen 37;40 #80ffffff #00000000 MENU COLOR border 0 #ffffffff #ee000000 std MENU COLOR title 0 #ffffffff #ee000000 std MENU COLOR unsel 0 #ffffffff #ee000000 std MENU COLOR sel 0 #ffffffff #85000000 std MENU COLOR scrollbar 30;44 #40000000 #00000000 MENU COLOR tabmsg 0 #ee000000 #ffffffff std MENU COLOR cmdmark 0 #ff00ff00 #00000000 std MENU COLOR cmdline 0 #ee000000 #ffffffff std MENU COLOR timeout_msg 0 #ee000000 #ffffffff std MENU COLOR timeout 0 #ee000000 #ffffffff std MENU COLOR disabled 0 #ffffffff #ee000000 std MENU COLOR pwdheader 0 #ff000000 #99ffffff rev MENU COLOR pwdborder 0 #ff000000 #99ffffff rev MENU COLOR pwdentry 0 #ff000000 #99ffffff rev MENU COLOR hotkey 0 #ff00ff00 #ee000000 std MENU COLOR hotsel 0 #ffffffff #85000000 std EOF for file in $( find $dir -mindepth 1 -name \u0026#34;*.menu\u0026#34; | sort -r ); do FILE_LABEL=\u0026#34;$( grep ^#LABEL $file | cut -d -f2- )\u0026#34; FILE_OSARCH=\u0026#34;$( grep ^#OSARCH $file | cut -d -f2- )\u0026#34; cat \u0026gt;\u0026gt; $dir.menu \u0026lt;\u0026lt; EOF LABEL $count MENU LABEL $FILE_LABEL ($FILE_OSARCH) KERNEL addons/vesamenu.c32 APPEND pxelinux.cfg/${dir##*/}/${file##*/} EOF count=$(( $count + 1 )) done done 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 Tue Jul 24, 17:18:35 [0] \u0026gt; ll -R /srv/tftpboot/ /srv/tftpboot/: total 28K drwxr-xr-x 2 root root 4.0K Jun 20 2011 addons/ drwxr-xr-x 7 root root 4.0K Jun 24 2011 boot/ drwxr-xr-x 6 root root 4.0K Jul 20 13:14 pxelinux.cfg/ -rw-r--r-- 1 root root 15K Oct 7 2009 pxelinux.0 /srv/tftpboot/addons: total 280K -rw-r--r-- 1 root root 16K Dec 28 2009 background.png -rw-r--r-- 1 root root 23K Dec 28 2009 background-sles.png -rw-r--r-- 1 root root 24K Dec 28 2009 background-suse.png -rw-r--r-- 1 root root 20K Dec 28 2009 background-vmware.png -rw-r--r-- 1 root root 48K Oct 7 2009 mboot.c32 -rw-r--r-- 1 root root 142K Oct 7 2009 vesamenu.c32 /srv/tftpboot/boot: total 20K drwxr-xr-x 3 root root 4.0K Jun 24 2011 esx/ drwxr-xr-x 2 root root 4.0K Oct 14 2009 firmware/ drwxr-xr-x 5 root root 4.0K Dec 14 2011 opensuse/ drwxr-xr-x 10 root root 4.0K Mar 9 17:28 sles/ drwxr-xr-x 3 root root 4.0K Oct 7 2009 tests/ /srv/tftpboot/boot/esx: total 4.0K drwxr-xr-x 2 root root 4.0K Jun 24 2011 4.1-348481/ /srv/tftpboot/boot/esx/4.1-348481: total 81M -r--r--r-- 1 root root 79M Jun 24 2011 initrd.img -r--r--r-- 1 root root 1.5M Jun 24 2011 vmlinuz /srv/tftpboot/boot/firmware: total 4.3M -rw-r--r-- 1 root root 1.5M Oct 14 2009 fdboot.img -rw-r--r-- 1 root root 20K Oct 14 2009 memdisk -rw-r--r-- 1 root root 1.5M Oct 14 2009 qmh2462_1.76.img -rw-r--r-- 1 root root 1.5M Oct 14 2009 qmh2462_1.81.img /srv/tftpboot/boot/opensuse: total 12K drwxr-xr-x 4 root root 4.0K Jun 20 2011 11.3/ drwxr-xr-x 4 root root 4.0K Jun 20 2011 11.4/ drwxr-xr-x 4 root root 4.0K Dec 14 2011 12.1/ /srv/tftpboot/boot/opensuse/11.3: total 8.0K drwxr-xr-x 2 root root 4.0K Jun 20 2011 x64/ drwxr-xr-x 2 root root 4.0K Jun 20 2011 x86/ /srv/tftpboot/boot/opensuse/11.3/x64: total 32M -r--r--r-- 1 root root 28M Jun 20 2011 initrd -r--r--r-- 1 root root 3.8M Jun 20 2011 linux /srv/tftpboot/boot/opensuse/11.3/x86: total 32M -r--r--r-- 1 root root 28M Jun 20 2011 initrd -r--r--r-- 1 root root 3.7M Jun 20 2011 linux /srv/tftpboot/boot/opensuse/11.4: total 8.0K drwxr-xr-x 2 root root 4.0K Jun 20 2011 x64/ drwxr-xr-x 2 root root 4.0K Jun 20 2011 x86/ /srv/tftpboot/boot/opensuse/11.4/x64: total 37M -r--r--r-- 1 root root 33M Jun 20 2011 initrd -r--r--r-- 1 root root 4.1M Jun 20 2011 linux /srv/tftpboot/boot/opensuse/11.4/x86: total 37M -r--r--r-- 1 root root 33M Jun 20 2011 initrd -r--r--r-- 1 root root 3.9M Jun 20 2011 linux /srv/tftpboot/boot/opensuse/12.1: total 8.0K drwxr-xr-x 2 root root 4.0K Dec 14 2011 x64/ drwxr-xr-x 2 root root 4.0K Dec 14 2011 x86/ /srv/tftpboot/boot/opensuse/12.1/x64: total 43M -r--r--r-- 1 root root 39M Dec 14 2011 initrd -r--r--r-- 1 root root 4.5M Dec 14 2011 linux /srv/tftpboot/boot/opensuse/12.1/x86: total 43M -r--r--r-- 1 root root 38M Dec 14 2011 initrd -r--r--r-- 1 root root 4.4M Dec 14 2011 linux /srv/tftpboot/boot/sles: total 32K drwxr-xr-x 4 root root 4.0K Jun 24 2011 10.2/ drwxr-xr-x 4 root root 4.0K Sep 28 2011 10.3/ drwxr-xr-x 4 root root 4.0K Jun 17 2011 10.4/ drwxr-xr-x 4 root root 4.0K Jun 17 2011 11/ drwxr-xr-x 4 root root 4.0K Jun 17 2011 11.1/ drwxr-xr-x 4 root root 4.0K Jun 17 2011 11.1-vmware/ drwxr-xr-x 3 root root 4.0K Mar 9 17:28 11.2/ drwxr-xr-x 4 root root 4.0K Jul 24 17:04 11.2-vmware/ /srv/tftpboot/boot/sles/10.2: total 8.0K drwxr-xr-x 2 root root 4.0K Jun 24 2011 x64/ drwxr-xr-x 2 root root 4.0K Jun 24 2011 x86/ /srv/tftpboot/boot/sles/10.2/x64: total 11M -r--r--r-- 1 root root 9.0M Jun 24 2011 initrd -r--r--r-- 1 root root 1.4M Jun 24 2011 linux /srv/tftpboot/boot/sles/10.2/x86: total 11M -r--r--r-- 1 root root 8.9M Jun 24 2011 initrd -r--r--r-- 1 root root 1.3M Jun 24 2011 linux /srv/tftpboot/boot/sles/10.3: total 8.0K drwxr-xr-x 2 root root 4.0K Sep 28 2011 x64/ drwxr-xr-x 2 root root 4.0K Sep 28 2011 x86/ /srv/tftpboot/boot/sles/10.3/x64: total 12M -r--r--r-- 1 root root 11M Sep 28 2011 initrd -r--r--r-- 1 root root 1.4M Sep 28 2011 linux /srv/tftpboot/boot/sles/10.3/x86: total 12M -r--r--r-- 1 root root 11M Sep 28 2011 initrd -r--r--r-- 1 root root 1.3M Sep 28 2011 linux /srv/tftpboot/boot/sles/10.4: total 8.0K drwxr-xr-x 2 root root 4.0K Jun 17 2011 x64/ drwxr-xr-x 2 root root 4.0K Jun 17 2011 x86/ /srv/tftpboot/boot/sles/10.4/x64: total 13M -r--r--r-- 1 root root 12M Jun 17 2011 initrd -r--r--r-- 1 root root 1.4M Jun 17 2011 linux /srv/tftpboot/boot/sles/10.4/x86: total 13M -r--r--r-- 1 root root 12M Jun 17 2011 initrd -r--r--r-- 1 root root 1.3M Jun 17 2011 linux /srv/tftpboot/boot/sles/11: total 8.0K drwxr-xr-x 2 root root 4.0K Jun 17 2011 x64/ drwxr-xr-x 2 root root 4.0K Jun 17 2011 x86/ /srv/tftpboot/boot/sles/11/x64: total 24M -r--r--r-- 1 root root 21M Jun 17 2011 initrd -r--r--r-- 1 root root 2.5M Jun 17 2011 linux /srv/tftpboot/boot/sles/11/x86: total 23M -r--r--r-- 1 root root 21M Jun 17 2011 initrd -r--r--r-- 1 root root 2.4M Jun 17 2011 linux /srv/tftpboot/boot/sles/11.1: total 8.0K drwxr-xr-x 2 root root 4.0K Jun 17 2011 x64/ drwxr-xr-x 2 root root 4.0K Jun 17 2011 x86/ /srv/tftpboot/boot/sles/11.1/x64: total 27M -r--r--r-- 1 root root 23M Jun 17 2011 initrd -r--r--r-- 1 root root 3.1M Jun 17 2011 linux /srv/tftpboot/boot/sles/11.1/x86: total 26M -r--r--r-- 1 root root 23M Jun 17 2011 initrd -r--r--r-- 1 root root 3.1M Jun 17 2011 linux /srv/tftpboot/boot/sles/11.1-vmware: total 8.0K drwxr-xr-x 2 root root 4.0K Jun 17 2011 x64/ drwxr-xr-x 2 root root 4.0K Jun 17 2011 x86/ /srv/tftpboot/boot/sles/11.1-vmware/x64: total 27M -r--r--r-- 1 root root 23M Jun 17 2011 initrd -r--r--r-- 1 root root 3.1M Jun 17 2011 linux /srv/tftpboot/boot/sles/11.1-vmware/x86: total 26M -r--r--r-- 1 root root 23M Jun 17 2011 initrd -r--r--r-- 1 root root 3.1M Jun 17 2011 linux /srv/tftpboot/boot/sles/11.2: total 4.0k drwxr-xr-x 2 root root 4.0K Mar 9 17:29 x64/ /srv/tftpboot/boot/sles/11.2/x64: total 36M -r--r--r-- 1 root root 33M Mar 9 17:29 initrd -r--r--r-- 1 root root 3.7M Mar 9 17:29 linux /srv/tftpboot/boot/sles/11.2-vmware: total 8.0K drwxr-xr-x 2 root root 4.0K Mar 9 16:52 x64/ drwxr-xr-x 2 root root 4.0K Jul 24 17:05 x86/ /srv/tftpboot/boot/sles/11.2-vmware/x64: total 36M -r--r--r-- 1 root root 33M Jul 20 12:46 initrd -r--r--r-- 1 root root 3.7M Jul 20 12:46 linux /srv/tftpboot/boot/sles/11.2-vmware/x86: total 35M -r--r--r-- 1 root root 32M Jul 24 17:17 initrd -r--r--r-- 1 root root 3.6M Jul 24 17:17 linux /srv/tftpboot/boot/tests: total 4.0K drwxr-xr-x 2 root root 4.0K Oct 7 2009 memtest/ /srv/tftpboot/boot/tests/memtest: total 164K -rw-r--r-- 1 root root 157K Oct 7 2009 memtest86+-4.00 /srv/tftpboot/pxelinux.cfg: total 48K -rw-r--r-- 1 root root 2.0K Jun 20 2011 default drwxr-xr-x 2 root root 4.0K Jun 24 2011 esx/ -rw-r--r-- 1 root root 1.3K Jul 24 17:18 esx.menu drwxr-xr-x 2 root root 4.0K Jun 20 2011 esxi/ -rw-r--r-- 1 root root 1.1K Jul 24 17:18 esxi.menu -rw-r--r-- 1 root root 423 Oct 20 2009 firmware.menu drwxr-xr-x 2 root root 4.0K Dec 14 2011 opensuse/ -rw-r--r-- 1 root root 1.8K Jul 24 17:18 opensuse.menu -rw-r--r-- 1 root root 2.6K Jun 4 2010 rescue.menu drwxr-xr-x 2 root root 4.0K Jul 24 17:05 sles/ -rw-r--r-- 1 root root 2.7K Jul 24 17:18 sles.menu -rw-r--r-- 1 root root 329 Oct 20 2009 tests.menu /srv/tftpboot/pxelinux.cfg/esx: total 8.0K -rw-r--r-- 1 root root 1.9K Jun 24 2011 esx-4.1-260247.menu -rw-r--r-- 1 root root 1.9K Jun 24 2011 esx-4.1-348481.menu /srv/tftpboot/pxelinux.cfg/esxi: total 4.0K -rw-r--r-- 1 root root 1.7K Jun 20 2011 esxi41.menu /srv/tftpboot/pxelinux.cfg/opensuse: total 24K -rw-r--r-- 1 root root 1.8K Jun 20 2011 opensuse-11.3-x64.menu -rw-r--r-- 1 root root 1.8K Jun 20 2011 opensuse-11.3-x86.menu -rw-r--r-- 1 root root 1.8K Jun 20 2011 opensuse-11.4-x64.menu -rw-r--r-- 1 root root 1.8K Jun 20 2011 opensuse-11.4-x86.menu -rw-r--r-- 1 root root 1.8K Dec 14 2011 opensuse-12.1-x64.menu -rw-r--r-- 1 root root 1.8K Dec 14 2011 opensuse-12.1-x86.menu /srv/tftpboot/pxelinux.cfg/sles: total 60K -rw-r--r-- 1 root root 1.8K Jul 24 16:58 sles-10.2-x64.menu -rw-r--r-- 1 root root 1.8K Jul 24 16:57 sles-10.2-x86.menu -rw-r--r-- 1 root root 1.8K Jul 24 16:57 sles-10.3-x64.menu -rw-r--r-- 1 root root 1.8K Jul 24 16:57 sles-10.3-x86.menu -rw-r--r-- 1 root root 1.8K Jul 24 16:57 sles-10.4-x64.menu -rw-r--r-- 1 root root 1.8K Jul 24 16:57 sles-10.4-x86.menu -rw-r--r-- 1 root root 1.8K Jul 24 16:58 sles-11-x64.menu -rw-r--r-- 1 root root 1.8K Jul 24 16:58 sles-11-x86.menu -rw-r--r-- 1 root root 1.8K Jul 24 16:59 sles-11.1-vmware-x64.menu -rw-r--r-- 1 root root 1.8K Jul 24 16:59 sles-11.1-vmware-x86.menu -rw-r--r-- 1 root root 1.8K Jul 24 16:59 sles-11.1-x64.menu -rw-r--r-- 1 root root 1.8K Jul 24 17:00 sles-11.1-x86.menu -rw-r--r-- 1 root root 1.8K Jul 24 17:00 sles-11.2-vmware-x64.menu -rw-r--r-- 1 root root 1.8K Jul 24 17:17 sles-11.2-vmware-x86.menu -rw-r--r-- 1 root root 1.8K Jul 24 17:00 sles-11.2-x64.menu ","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_installserver-regenerate-pxe-base-menu/","summary":"\u003cp\u003eWell, here\u0026rsquo;s the promised script to regenerate the main PXE menu based on the menu entries created by register-suse and register-vmware.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e44\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-45\"\u003e45\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-46\"\u003e46\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-47\"\u003e47\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-48\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-48\"\u003e48\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-49\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-49\"\u003e49\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-50\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-50\"\u003e50\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-51\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-51\"\u003e51\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-52\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-52\"\u003e52\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eTFTP_DIR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/srv/tftpboot/pxelinux.cfg\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir -p \u003cspan class=\"nv\"\u003e$TFTP_DIR\u003c/span\u003e \u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e\u0026gt;/dev/null\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Iterate through the pxelinux.cfg directory and recreate the index menues.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e dir in \u003cspan class=\"k\"\u003e$(\u003c/span\u003e find \u003cspan class=\"nv\"\u003e$TFTP_DIR\u003c/span\u003e -mindepth \u003cspan class=\"m\"\u003e1\u003c/span\u003e -maxdepth \u003cspan class=\"m\"\u003e1\u003c/span\u003e -type d \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Generating summary menu for: \u003c/span\u003e\u003cspan class=\"nv\"\u003e$dir\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003ecount\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  cat \u0026gt; \u003cspan class=\"nv\"\u003e$dir\u003c/span\u003e.menu \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; EOF\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU TITLE Linux Installationservices\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU BACKGROUND addons/background.png\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU COLOR screen       37;40  #80ffffff #00000000\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU COLOR border           0  #ffffffff #ee000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU COLOR title            0  #ffffffff #ee000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU COLOR unsel            0  #ffffffff #ee000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU COLOR sel              0  #ffffffff #85000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU COLOR scrollbar    30;44  #40000000 #00000000\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU COLOR tabmsg           0  #ee000000 #ffffffff std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU COLOR cmdmark          0  #ff00ff00 #00000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU COLOR cmdline          0  #ee000000 #ffffffff std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU COLOR timeout_msg      0  #ee000000 #ffffffff std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU COLOR timeout          0  #ee000000 #ffffffff std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU COLOR disabled         0  #ffffffff #ee000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU COLOR pwdheader        0  #ff000000 #99ffffff rev\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU COLOR pwdborder        0  #ff000000 #99ffffff rev\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU COLOR pwdentry         0  #ff000000 #99ffffff rev\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU COLOR hotkey           0  #ff00ff00 #ee000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU COLOR hotsel           0  #ffffffff #85000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eEOF\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efor\u003c/span\u003e file in \u003cspan class=\"k\"\u003e$(\u003c/span\u003e find \u003cspan class=\"nv\"\u003e$dir\u003c/span\u003e -mindepth \u003cspan class=\"m\"\u003e1\u003c/span\u003e -name \u003cspan class=\"s2\"\u003e\u0026#34;*.menu\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sort -r \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nv\"\u003eFILE_LABEL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep ^#LABEL \u003cspan class=\"nv\"\u003e$file\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d  -f2- \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nv\"\u003eFILE_OSARCH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep ^#OSARCH \u003cspan class=\"nv\"\u003e$file\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d  -f2- \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      cat \u0026gt;\u0026gt; \u003cspan class=\"nv\"\u003e$dir\u003c/span\u003e.menu \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; EOF\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    LABEL $count\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    MENU LABEL $FILE_LABEL ($FILE_OSARCH)\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    KERNEL addons/vesamenu.c32\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e    APPEND pxelinux.cfg/${dir##*/}/${file##*/}\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eEOF\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003ecount\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003e$((\u003c/span\u003e \u003cspan class=\"nv\"\u003e$count\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"k\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-1-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-1\"\u003e  1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-2\"\u003e  2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-3\"\u003e  3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-4\"\u003e  4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-5\"\u003e  5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-6\"\u003e  6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-7\"\u003e  7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-8\"\u003e  8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-9\"\u003e  9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-10\"\u003e 10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-11\"\u003e 11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-12\"\u003e 12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-13\"\u003e 13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-14\"\u003e 14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-15\"\u003e 15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-16\"\u003e 16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-17\"\u003e 17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-18\"\u003e 18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-19\"\u003e 19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-20\"\u003e 20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-21\"\u003e 21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-22\"\u003e 22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-23\"\u003e 23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-24\"\u003e 24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-25\"\u003e 25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-26\"\u003e 26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-27\"\u003e 27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-28\"\u003e 28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-29\"\u003e 29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-30\"\u003e 30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-31\"\u003e 31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-32\"\u003e 32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-33\"\u003e 33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-34\"\u003e 34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-35\"\u003e 35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-36\"\u003e 36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-37\"\u003e 37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-38\"\u003e 38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-39\"\u003e 39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-40\"\u003e 40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-41\"\u003e 41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-42\"\u003e 42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-43\"\u003e 43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-44\"\u003e 44\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-45\"\u003e 45\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-46\"\u003e 46\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-47\"\u003e 47\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-48\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-48\"\u003e 48\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-49\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-49\"\u003e 49\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-50\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-50\"\u003e 50\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-51\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-51\"\u003e 51\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-52\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-52\"\u003e 52\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-53\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-53\"\u003e 53\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-54\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-54\"\u003e 54\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-55\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-55\"\u003e 55\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-56\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-56\"\u003e 56\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-57\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-57\"\u003e 57\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-58\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-58\"\u003e 58\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-59\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-59\"\u003e 59\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-60\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-60\"\u003e 60\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-61\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-61\"\u003e 61\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-62\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-62\"\u003e 62\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-63\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-63\"\u003e 63\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-64\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-64\"\u003e 64\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-65\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-65\"\u003e 65\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-66\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-66\"\u003e 66\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-67\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-67\"\u003e 67\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-68\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-68\"\u003e 68\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-69\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-69\"\u003e 69\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-70\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-70\"\u003e 70\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-71\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-71\"\u003e 71\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-72\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-72\"\u003e 72\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-73\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-73\"\u003e 73\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-74\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-74\"\u003e 74\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-75\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-75\"\u003e 75\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-76\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-76\"\u003e 76\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-77\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-77\"\u003e 77\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-78\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-78\"\u003e 78\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-79\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-79\"\u003e 79\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-80\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-80\"\u003e 80\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-81\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-81\"\u003e 81\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-82\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-82\"\u003e 82\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-83\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-83\"\u003e 83\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-84\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-84\"\u003e 84\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-85\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-85\"\u003e 85\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-86\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-86\"\u003e 86\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-87\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-87\"\u003e 87\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-88\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-88\"\u003e 88\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-89\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-89\"\u003e 89\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-90\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-90\"\u003e 90\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-91\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-91\"\u003e 91\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-92\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-92\"\u003e 92\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-93\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-93\"\u003e 93\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-94\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-94\"\u003e 94\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-95\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-95\"\u003e 95\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-96\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-96\"\u003e 96\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-97\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-97\"\u003e 97\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-98\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-98\"\u003e 98\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-99\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-99\"\u003e 99\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-100\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-100\"\u003e100\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-101\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-101\"\u003e101\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-102\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-102\"\u003e102\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-103\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-103\"\u003e103\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-104\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-104\"\u003e104\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-105\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-105\"\u003e105\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-106\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-106\"\u003e106\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-107\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-107\"\u003e107\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-108\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-108\"\u003e108\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-109\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-109\"\u003e109\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-110\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-110\"\u003e110\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-111\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-111\"\u003e111\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-112\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-112\"\u003e112\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-113\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-113\"\u003e113\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-114\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-114\"\u003e114\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-115\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-115\"\u003e115\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-116\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-116\"\u003e116\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-117\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-117\"\u003e117\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-118\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-118\"\u003e118\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-119\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-119\"\u003e119\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-120\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-120\"\u003e120\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-121\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-121\"\u003e121\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-122\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-122\"\u003e122\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-123\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-123\"\u003e123\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-124\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-124\"\u003e124\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-125\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-125\"\u003e125\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-126\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-126\"\u003e126\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-127\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-127\"\u003e127\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-128\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-128\"\u003e128\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-129\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-129\"\u003e129\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-130\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-130\"\u003e130\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-131\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-131\"\u003e131\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-132\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-132\"\u003e132\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-133\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-133\"\u003e133\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-134\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-134\"\u003e134\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-135\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-135\"\u003e135\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-136\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-136\"\u003e136\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-137\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-137\"\u003e137\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-138\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-138\"\u003e138\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-139\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-139\"\u003e139\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-140\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-140\"\u003e140\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-141\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-141\"\u003e141\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-142\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-142\"\u003e142\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-143\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-143\"\u003e143\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-144\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-144\"\u003e144\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-145\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-145\"\u003e145\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-146\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-146\"\u003e146\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-147\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-147\"\u003e147\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-148\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-148\"\u003e148\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-149\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-149\"\u003e149\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-150\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-150\"\u003e150\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-151\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-151\"\u003e151\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-152\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-152\"\u003e152\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-153\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-153\"\u003e153\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-154\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-154\"\u003e154\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-155\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-155\"\u003e155\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-156\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-156\"\u003e156\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-157\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-157\"\u003e157\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-158\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-158\"\u003e158\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-159\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-159\"\u003e159\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-160\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-160\"\u003e160\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-161\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-161\"\u003e161\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-162\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-162\"\u003e162\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-163\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-163\"\u003e163\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-164\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-164\"\u003e164\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-165\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-165\"\u003e165\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-166\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-166\"\u003e166\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-167\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-167\"\u003e167\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-168\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-168\"\u003e168\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-169\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-169\"\u003e169\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-170\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-170\"\u003e170\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-171\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-171\"\u003e171\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-172\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-172\"\u003e172\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-173\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-173\"\u003e173\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-174\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-174\"\u003e174\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-175\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-175\"\u003e175\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-176\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-176\"\u003e176\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-177\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-177\"\u003e177\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-178\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-178\"\u003e178\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-179\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-179\"\u003e179\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-180\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-180\"\u003e180\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-181\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-181\"\u003e181\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-182\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-182\"\u003e182\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-183\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-183\"\u003e183\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-184\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-184\"\u003e184\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-185\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-185\"\u003e185\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-186\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-186\"\u003e186\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-187\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-187\"\u003e187\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-188\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-188\"\u003e188\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-189\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-189\"\u003e189\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-190\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-190\"\u003e190\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-191\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-191\"\u003e191\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-192\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-192\"\u003e192\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-193\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-193\"\u003e193\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-194\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-194\"\u003e194\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-195\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-195\"\u003e195\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-196\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-196\"\u003e196\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-197\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-197\"\u003e197\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-198\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-198\"\u003e198\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-199\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-199\"\u003e199\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-200\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-200\"\u003e200\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-201\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-201\"\u003e201\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-202\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-202\"\u003e202\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-203\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-203\"\u003e203\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-204\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-204\"\u003e204\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-205\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-205\"\u003e205\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-206\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-206\"\u003e206\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-207\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-207\"\u003e207\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-208\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-208\"\u003e208\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-209\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-209\"\u003e209\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-210\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-210\"\u003e210\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-211\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-211\"\u003e211\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-212\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-212\"\u003e212\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-213\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-213\"\u003e213\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-214\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-214\"\u003e214\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-215\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-215\"\u003e215\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-216\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-216\"\u003e216\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-217\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-217\"\u003e217\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-218\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-218\"\u003e218\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-219\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-219\"\u003e219\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-220\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-220\"\u003e220\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-221\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-221\"\u003e221\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-222\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-222\"\u003e222\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-223\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-223\"\u003e223\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-224\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-224\"\u003e224\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-225\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-225\"\u003e225\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-226\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-226\"\u003e226\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-227\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-227\"\u003e227\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-228\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-228\"\u003e228\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-229\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-229\"\u003e229\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eTue Jul 24, 17:18:35 \u003cspan class=\"o\"\u003e[\u003c/span\u003e0\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u0026gt; ll -R /srv/tftpboot/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 28K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e addons/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e7\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e24\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e boot/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e6\u003c/span\u003e root root 4.0K Jul \u003cspan class=\"m\"\u003e20\u003c/span\u003e 13:14 pxelinux.cfg/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  15K Oct  \u003cspan class=\"m\"\u003e7\u003c/span\u003e  \u003cspan class=\"m\"\u003e2009\u003c/span\u003e pxelinux.0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/addons:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 280K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  16K Dec \u003cspan class=\"m\"\u003e28\u003c/span\u003e  \u003cspan class=\"m\"\u003e2009\u003c/span\u003e background.png\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  23K Dec \u003cspan class=\"m\"\u003e28\u003c/span\u003e  \u003cspan class=\"m\"\u003e2009\u003c/span\u003e background-sles.png\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  24K Dec \u003cspan class=\"m\"\u003e28\u003c/span\u003e  \u003cspan class=\"m\"\u003e2009\u003c/span\u003e background-suse.png\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  20K Dec \u003cspan class=\"m\"\u003e28\u003c/span\u003e  \u003cspan class=\"m\"\u003e2009\u003c/span\u003e background-vmware.png\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  48K Oct  \u003cspan class=\"m\"\u003e7\u003c/span\u003e  \u003cspan class=\"m\"\u003e2009\u003c/span\u003e mboot.c32\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 142K Oct  \u003cspan class=\"m\"\u003e7\u003c/span\u003e  \u003cspan class=\"m\"\u003e2009\u003c/span\u003e vesamenu.c32\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 20K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x  \u003cspan class=\"m\"\u003e3\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e24\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e esx/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x  \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Oct \u003cspan class=\"m\"\u003e14\u003c/span\u003e  \u003cspan class=\"m\"\u003e2009\u003c/span\u003e firmware/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x  \u003cspan class=\"m\"\u003e5\u003c/span\u003e root root 4.0K Dec \u003cspan class=\"m\"\u003e14\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e opensuse/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e10\u003c/span\u003e root root 4.0K Mar  \u003cspan class=\"m\"\u003e9\u003c/span\u003e 17:28 sles/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x  \u003cspan class=\"m\"\u003e3\u003c/span\u003e root root 4.0K Oct  \u003cspan class=\"m\"\u003e7\u003c/span\u003e  \u003cspan class=\"m\"\u003e2009\u003c/span\u003e tests/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/esx:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 4.0K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e24\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e 4.1-348481/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/esx/4.1-348481:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 81M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  79M Jun \u003cspan class=\"m\"\u003e24\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd.img\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.5M Jun \u003cspan class=\"m\"\u003e24\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e vmlinuz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/firmware:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 4.3M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.5M Oct \u003cspan class=\"m\"\u003e14\u003c/span\u003e  \u003cspan class=\"m\"\u003e2009\u003c/span\u003e fdboot.img\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  20K Oct \u003cspan class=\"m\"\u003e14\u003c/span\u003e  \u003cspan class=\"m\"\u003e2009\u003c/span\u003e memdisk\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.5M Oct \u003cspan class=\"m\"\u003e14\u003c/span\u003e  \u003cspan class=\"m\"\u003e2009\u003c/span\u003e qmh2462_1.76.img\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.5M Oct \u003cspan class=\"m\"\u003e14\u003c/span\u003e  \u003cspan class=\"m\"\u003e2009\u003c/span\u003e qmh2462_1.81.img\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/opensuse:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 12K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e4\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e 11.3/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e4\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e 11.4/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e4\u003c/span\u003e root root 4.0K Dec \u003cspan class=\"m\"\u003e14\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e 12.1/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/opensuse/11.3:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 8.0K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x64/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x86/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/opensuse/11.3/x64:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 32M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  28M Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 3.8M Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/opensuse/11.3/x86:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 32M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  28M Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 3.7M Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/opensuse/11.4:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 8.0K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x64/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x86/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/opensuse/11.4/x64:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 37M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  33M Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 4.1M Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/opensuse/11.4/x86:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 37M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  33M Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 3.9M Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/opensuse/12.1:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 8.0K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Dec \u003cspan class=\"m\"\u003e14\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x64/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Dec \u003cspan class=\"m\"\u003e14\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x86/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/opensuse/12.1/x64:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 43M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  39M Dec \u003cspan class=\"m\"\u003e14\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 4.5M Dec \u003cspan class=\"m\"\u003e14\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/opensuse/12.1/x86:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 43M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  38M Dec \u003cspan class=\"m\"\u003e14\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 4.4M Dec \u003cspan class=\"m\"\u003e14\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 32K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e4\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e24\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e 10.2/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e4\u003c/span\u003e root root 4.0K Sep \u003cspan class=\"m\"\u003e28\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e 10.3/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e4\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e 10.4/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e4\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e 11/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e4\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e 11.1/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e4\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e 11.1-vmware/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e3\u003c/span\u003e root root 4.0K Mar  \u003cspan class=\"m\"\u003e9\u003c/span\u003e 17:28 11.2/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e4\u003c/span\u003e root root 4.0K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 17:04 11.2-vmware/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/10.2:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 8.0K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e24\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x64/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e24\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x86/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/10.2/x64:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 11M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 9.0M Jun \u003cspan class=\"m\"\u003e24\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.4M Jun \u003cspan class=\"m\"\u003e24\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/10.2/x86:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 11M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 8.9M Jun \u003cspan class=\"m\"\u003e24\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.3M Jun \u003cspan class=\"m\"\u003e24\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/10.3:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 8.0K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Sep \u003cspan class=\"m\"\u003e28\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x64/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Sep \u003cspan class=\"m\"\u003e28\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x86/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/10.3/x64:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 12M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  11M Sep \u003cspan class=\"m\"\u003e28\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.4M Sep \u003cspan class=\"m\"\u003e28\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/10.3/x86:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 12M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  11M Sep \u003cspan class=\"m\"\u003e28\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.3M Sep \u003cspan class=\"m\"\u003e28\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/10.4:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 8.0K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x64/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x86/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/10.4/x64:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 13M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  12M Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.4M Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/10.4/x86:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 13M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  12M Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.3M Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/11:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 8.0K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x64/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x86/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/11/x64:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 24M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  21M Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 2.5M Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/11/x86:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 23M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  21M Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 2.4M Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/11.1:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 8.0K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x64/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x86/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/11.1/x64:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 27M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  23M Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 3.1M Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/11.1/x86:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 26M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  23M Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 3.1M Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/11.1-vmware:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 8.0K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x64/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e x86/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/11.1-vmware/x64:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 27M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  23M Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 3.1M Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/11.1-vmware/x86:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 26M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  23M Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 3.1M Jun \u003cspan class=\"m\"\u003e17\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/11.2:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 4.0k\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Mar  \u003cspan class=\"m\"\u003e9\u003c/span\u003e 17:29 x64/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/11.2/x64:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 36M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  33M Mar  \u003cspan class=\"m\"\u003e9\u003c/span\u003e 17:29 initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 3.7M Mar  \u003cspan class=\"m\"\u003e9\u003c/span\u003e 17:29 linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/11.2-vmware:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 8.0K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Mar  \u003cspan class=\"m\"\u003e9\u003c/span\u003e 16:52 x64/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 17:05 x86/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/11.2-vmware/x64:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 36M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  33M Jul \u003cspan class=\"m\"\u003e20\u003c/span\u003e 12:46 initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 3.7M Jul \u003cspan class=\"m\"\u003e20\u003c/span\u003e 12:46 linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/sles/11.2-vmware/x86:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 35M\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  32M Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 17:17 initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-r--r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 3.6M Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 17:17 linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/tests:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 4.0K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Oct  \u003cspan class=\"m\"\u003e7\u003c/span\u003e  \u003cspan class=\"m\"\u003e2009\u003c/span\u003e memtest/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/boot/tests/memtest:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 164K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 157K Oct  \u003cspan class=\"m\"\u003e7\u003c/span\u003e  \u003cspan class=\"m\"\u003e2009\u003c/span\u003e memtest86+-4.00\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/pxelinux.cfg:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 48K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 2.0K Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e default\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e24\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e esx/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.3K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 17:18 esx.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e esxi/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.1K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 17:18 esxi.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  \u003cspan class=\"m\"\u003e423\u003c/span\u003e Oct \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2009\u003c/span\u003e firmware.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Dec \u003cspan class=\"m\"\u003e14\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e opensuse/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 17:18 opensuse.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 2.6K Jun  \u003cspan class=\"m\"\u003e4\u003c/span\u003e  \u003cspan class=\"m\"\u003e2010\u003c/span\u003e rescue.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edrwxr-xr-x \u003cspan class=\"m\"\u003e2\u003c/span\u003e root root 4.0K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 17:05 sles/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 2.7K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 17:18 sles.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root  \u003cspan class=\"m\"\u003e329\u003c/span\u003e Oct \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2009\u003c/span\u003e tests.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/pxelinux.cfg/esx:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 8.0K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.9K Jun \u003cspan class=\"m\"\u003e24\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e esx-4.1-260247.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.9K Jun \u003cspan class=\"m\"\u003e24\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e esx-4.1-348481.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/pxelinux.cfg/esxi:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 4.0K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.7K Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e esxi41.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/pxelinux.cfg/opensuse:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 24K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e opensuse-11.3-x64.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e opensuse-11.3-x86.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e opensuse-11.4-x64.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jun \u003cspan class=\"m\"\u003e20\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e opensuse-11.4-x86.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Dec \u003cspan class=\"m\"\u003e14\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e opensuse-12.1-x64.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Dec \u003cspan class=\"m\"\u003e14\u003c/span\u003e  \u003cspan class=\"m\"\u003e2011\u003c/span\u003e opensuse-12.1-x86.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/srv/tftpboot/pxelinux.cfg/sles:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etotal 60K\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 16:58 sles-10.2-x64.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 16:57 sles-10.2-x86.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 16:57 sles-10.3-x64.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 16:57 sles-10.3-x86.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 16:57 sles-10.4-x64.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 16:57 sles-10.4-x86.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 16:58 sles-11-x64.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 16:58 sles-11-x86.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 16:59 sles-11.1-vmware-x64.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 16:59 sles-11.1-vmware-x86.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 16:59 sles-11.1-x64.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 17:00 sles-11.1-x86.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 17:00 sles-11.2-vmware-x64.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 17:17 sles-11.2-vmware-x86.menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- \u003cspan class=\"m\"\u003e1\u003c/span\u003e root root 1.8K Jul \u003cspan class=\"m\"\u003e24\u003c/span\u003e 17:00 sles-11.2-x64.menu\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Installserver: Regenerate PXE base menu"},{"content":"As I wrote before, we\u0026rsquo;re using SnapManager (for SQL/Oracle) to create consistent snapshots. However my database guys don\u0026rsquo;t want to name their snapshots daily. (which I can understand), as once you archive those snapshots to a secondary (and tertiary) system, the names become junk.\nSo, they\u0026rsquo;re naming the snapshots like snap__vcsrv_29_12_2012-10.00.01. Sadly, when it comes to SnapVault, it expects the names in form of daily. otherwise you won\u0026rsquo;t be able to transfer the snapshots with the CLI (none that I have found anyway).\nBut we didn\u0026rsquo;t want to move away from naming the snapshots the way they are, so I ended up writing a PowerShell script, that once triggered archives the Snapshots needed for a set of databases. It took me a while to figure a bunch of stuff out, but in the end I think I have a working way of archiving custom-named snapshots.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 # $HeadURL: https://svn.barfoo.org/svn/scripts/netapp/snapvault-archive-mssql.ps1 $ # $Author: christian.th.heim $ # $Revision: 326 $ # $Date: 2012-12-27 21:20:00 +0100 (Do, 27 Dez 2012) $ Add-PSSNapin -Name \u0026#34;SqlServerCmdletSnapin100\u0026#34; $DB_NAMES = $args $ARCHIVE = \u0026#34;daily\u0026#34; $OUTPATH=\u0026#34;C:ScriptsTEMP\u0026#34; $OUTFILE=\u0026#34;$( $OUTPATH )snapvault-archive-mssql\u0026#34; $SMTP_HOST = \u0026#34;smtprelay.barfoo.org\u0026#34; $SMTP_SENDER = \u0026#34;christian.heim@barfoo.org\u0026#34; $SMTP_RECEIVER = \u0026#34;christian.heim@barfoo.org\u0026#34; $WAIT = 15 function clean-tempdir() { param( [string]$outputpath, [string]$outputfile ) # Sanatize the environment, check if OUTPATH exists, otherwise create it. # Check if OUTFILE is still there from a previous run, otherwise delete it. if ( !(Test-Path $outputpath) ) { New-Item $outputpath -type directory } if ( Test-Path $outputfile ) { Remove-Item $outputfile } } function get-db-mountpoint() { # Lists all necessary mountpoints for a specified SQL database param( [string] $dbname ) $mountpoints = Invoke-Sqlcmd ` -Database master -Query \u0026#34;SELECT DB_NAME(database_id) DatabaseName, physical_name FROM sys.master_files WHERE DB_NAME(database_id) LIKE \u0026#39;$( $dbname )%\u0026#39;\u0026#34; # Remove junk from the end of the string # Output looks something like this: F:sql_dbdb_data1msdb.ldf # Parsed output looks like this: F:sql_dbdb_data1 foreach ( $db in $mountpoints ) { $str = $db.physical_name $pos = $str.LastIndexOf(\u0026#39;\u0026#39;) $str = $str.Substring(0, $pos) $pos = $str.LastIndexOf(\u0026#39;\u0026#39;) $str = $str.Substring(0, $pos) $str } } function sdcli-version-list() { # Get the sdcli version. Depending on this, adjust the SDCLI_WAIT (as 6.3.1R1 # takes about a minute to complete a snapvault archive) and adjust the $ARCHIVE param( [string] $opt ) $sdcli_version = (Get-Command \u0026#39;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#39;).FileVersionInfo.FileVersion $sdcli_version = $sdcli_version -replace \u0026#34; \u0026#34;,\u0026#34;\u0026#34; switch -wildcard ($sdcli_version) { \u0026#34;6.3*\u0026#34; { $SDCLI_WAIT = 10 $ARCHIVE_SEARCH = \u0026#34;$($ARCHIVE)\u0026#34; } \u0026#34;6.4*\u0026#34; { $SDCLI_WAIT = 120 $ARCHIVE_SEARCH = \u0026#34;$($ARCHIVE).0\u0026#34; } } switch ($opt) { \u0026#34;sdcli_wait\u0026#34; { return $SDCLI_WAIT } \u0026#34;archive_search\u0026#34; { return $ARCHIVE_SEARCH } } } function sdcli-snap-list() { # Get the snapshot for the selected mountpoint. Searches for a pattern, and # returns only the first one (the newest) param( [string] $mountpoint, [string] $search ) if ( $search ) { # Output of sdcli snap list -d $volume looks like this: # sqlsnap__vcsrv_10-22-2012_14.05.16 1% ( 1%) 0% ( 0%) Okt 22 14:05 Consistent snapshot copy # Thus, we need to emulate awk and just print the first row of this output $str = \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snap list -d $mountpoint | Select-String $search | Select -First 1 | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[0]; } } else { $str = \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snap list -d $mountpoint | Select -First 1 | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[0]; } } # Sadly the above returns the snapshot name beginning with a newline, # thus screwing the output. So we need to replace all carriage returns! $str = $str -replace \u0026#34;`t|`n|`r\u0026#34;,\u0026#34;\u0026#34; $str } function sdcli-vol-list() { # Get the controller and volume for a mountpoint. Needed for systems, where # more than one LUN are provisioned in the same volume, thus we would end # up calling snapvault archive more than once for the same volume, thus # running into an error, as the archive is already done. param ( [string] $mountpoint, [string] $outfile ) If ( ! ( Test-Path \u0026#34;$( $outfile ).dsk\u0026#34; ) ) { \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; disk list | Out-File \u0026#34;$( $outfile ).dsk\u0026#34; } $hash = \u0026#34;{0:D4}\u0026#34; -f (1..9999 | Get-Random) $hashfile = \u0026#34;$( $outfile )-$( $hash ).dsk\u0026#34; # Sadly, Select-String requires an escaped backslash (escaped by a backslash) # so we need to run a replace .. $mountpoint = $mountpoint -replace \u0026#34;\\\u0026#34;,\u0026#34;``\u0026#34; # Output from disk list looks like this: # Storage System: fas6210a # Storage System Path: /vol/vol001_vcsrv_lun03/sv/vcsrv_lun03 # Type: lun # Disk serial number: bfd4K8Cp7lvM # Backed by Snapshot Copy: # Shared: No # BootOrSystem Disk: No # SCSI port: 2 # Bus: 0 # Target: 1 # LUN: 1 # Readonly: No # Size: 5122 MB # Snapmirror Source: No # Snapvault Primary: Yes # Disk Partition Style: Master Boot Record (MBR) # Clone Split Restore status: Normal # DiskID: 1 # Volume Name: \\?Volume{68e8100e-8565-11e1-b4e9-0025b502004f} # Mount points: F:sql_dbdb_data1 Get-Content \u0026#34;$( $outfile ).dsk\u0026#34; | Select-String \u0026#34;$( $mountpoint )\u0026#34; ` -Context 19,0 | Out-File $hashfile # Get the Storage System and the Path from the output of sdcli disk list. $storage_volume = Get-Content $hashfile | Select-String \u0026#34;Storage System Path:\u0026#34; | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[12]; } $storage_volume = $storage_volume -replace \u0026#34;`t|`n|`r\u0026#34;,\u0026#34;\u0026#34; | %{ $_.Split(\u0026#39;/\u0026#39;)[2]; } return $storage_volume } function sdcli-fas-list() { # Get the controller and volume for a mountpoint. Needed for systems, where # more than one LUN are provisioned in the same volume, thus we would end # up calling snapvault archive more than once for the same volume, thus # running into an error, as the archive is already done. param ( [string] $mountpoint, [string] $outfile ) If ( ! ( Test-Path \u0026#34;$( $outfile ).dsk\u0026#34; ) ) { \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; disk list | Out-File \u0026#34;$( $outfile ).dsk\u0026#34; } $hash = \u0026#34;{0:D4}\u0026#34; -f (1..9999 | Get-Random) $hashfile = \u0026#34;$( $outfile )-$( $hash ).dsk\u0026#34; # Output from disk list looks like this: # Storage System: fas6210a # Storage System Path: /vol/vol001_vcsrv_lun03/sv/vcsrv_lun03 # Type: lun # Disk serial number: bfd4K8Cp7lvM # Backed by Snapshot Copy: # Shared: No # BootOrSystem Disk: No # SCSI port: 2 # Bus: 0 # Target: 1 # LUN: 1 # Readonly: No # Size: 5122 MB # Snapmirror Source: No # Snapvault Primary: Yes # Disk Partition Style: Master Boot Record (MBR) # Clone Split Restore status: Normal # DiskID: 1 # Volume Name: \\?Volume{68e8100e-8565-11e1-b4e9-0025b502004f} # Mount points: F:sql_dbdb_data1 # Sadly, Select-String requires an escaped backslash (escaped by a backslash) # so we need to run a replace .. $mountpoint = $mountpoint -replace \u0026#34;\\\u0026#34;,\u0026#34;``\u0026#34; Get-Content \u0026#34;$( $outfile ).dsk\u0026#34; | Select-String \u0026#34;$( $mountpoint )\u0026#34; -Context 19,0 | Out-File $hashfile # Get the Storage System and the Path from the output of sdcli disk list. $storage_controller = Get-Content $hashfile | ` Select-String \u0026#34;Storage System:\u0026#34; | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[15]; } $storage_controller = $storage_controller -replace \u0026#34;`t|`n|`r\u0026#34;,\u0026#34;\u0026#34; return $storage_controller } function sdcli-sv-archive() { # Starts the SnapVault archive to the SnapVault secondary. # Needs the archive class (specified on the controller by viewing snapvault snap sched), # the mountpoint, the snapshot name - all which are needed to trigger the snapvault # archive. param( [string] $archive, [string] $mountpoint, [string] $snapname, [string] $outfile ) \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snapvault archive -a $archive ` -DS $mountpoint $snapname } function sdcli-sv-snaplist() { # Retrieves the snapshot list on SV_SEC and only returns the last snapshot # that is already on the destination. param ( [string] $mountpoint, [string] $search ) if ( $search ) { $str = \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snapvault snap_list ` -d $mountpoint | Select-String $search | Select -First 1 | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[16]; } } else { $str = \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snapvault snap_list ` -d $mountpoint | Select -First 1 | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[16]; } } # Sadly the above returns the snapshot name beginning with a newline, # thus screwing the output. So we need to replace all carriage returns! $str = $str -replace \u0026#34;`t|`n|`r\u0026#34;,\u0026#34;\u0026#34; $str } function sdcli-sv-snaprename() { # Since the snapvault archive names the snapshot like the archive class # (in most cases \u0026#39;daily\u0026#39;), we need to rename the snapshot on the SV_SEC # to it\u0026#39;s original name. However we need to wait until the transport # to the SV_SEC is finished, in order to rename the snapshot. param( [string] $archive, [string] $mountpoint, [string] $snapshot ) \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snapvault snapshot_rename ` -o $archive -n $snapshot -d $mountpoint } function Write-CustomOut ($Details){ $LogDate = Get-Date -Format T Write-Output \u0026#34;$($LogDate) $Details\u0026#34; } # Call the cleanup. clean-tempdir $OUTPATH \u0026#34;$( $OUTFILE ).csv\u0026#34; clean-tempdir $OUTPATH \u0026#34;$( $OUTFILE ).tmp\u0026#34; clean-tempdir $OUTPATH \u0026#34;$( $OUTFILE )*.dsk\u0026#34; # Generate a csv-file containing all mountpoints and associated snapshot names Add-Content \u0026#34;$( $OUTFILE ).csv\u0026#34; \u0026#34;Controller;Volume;Mountpoint;Snapshot\u0026#34; foreach ($db in $DB_NAMES) { $mountpoints = get-db-mountpoint $db if ( ! ($mountpoints) ) { $body = \u0026#34;Didn\u0026#39;t get a vaild database mountpoint from database $( $db )`n`nDebug output:`nOutput from `$mountpoints: $( $mountpoints )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault archive failed on $( $env:COMPUTERNAME )\u0026#34; ` -body $body ` -priority High -smtpServer $SMTP_HOST } foreach ( $mountpoint in $mountpoints ) { $snapname = sdcli-snap-list $mountpoint \u0026#34;sql\u0026#34; $controller = sdcli-fas-list $mountpoint $OUTFILE $volume = sdcli-vol-list $mountpoint $OUTFILE Add-Content \u0026#34;$( $OUTFILE ).csv\u0026#34; \u0026#34;$( $controller );$( $volume );$( $mountpoint );$( $snapname )\u0026#34; } } # Call the sdcli-version-list function, to adjust SDCLI_WAIT and $ARCHIVE_SEARCH $ARCHIVE_SEARCH = sdcli-version-list archive_search $SDCLI_WAIT = sdcli-version-list sdcli_wait Write-CustomOut \u0026#34;ARCHIVE_SEARCH: $($ARCHIVE_SEARCH)\u0026#34; Write-CustomOut \u0026#34;SDCLI_WAIT: $($SDCLI_WAIT)\u0026#34; if ( $ARCHIVE_SEARCH -notmatch $ARCHIVE ) { Write-CustomOut \u0026#34;`$ARCHIVE_SEARCH doesn\u0026#39;t match `$ARCHIVE. This breaks the script, so the script\u0026#34; Write-CustomOut \u0026#34;aborts at this point. Please look into it and fix it!\u0026#34; exit 128 } if ( $SDCLI_WAIT -lt 10 ) { Write-CustomOut \u0026#34;`$SDCLI_WAIT is less than 10. Currently 10 is the parameter for SnapDrive 6.3.1R1\u0026#34; Write-CustomOut \u0026#34;and anything below doesn\u0026#39;t make sense ... The script aborts at this point.\u0026#34; exit 128 } # Read the csv-file and sort it, and eliminate duplicate entries. # Separate the triggering of the snapvault and snapvault rename into two # separate loops, otherwise the first loop would have to wait each time # until the snapshot is on the SV_SEC. Write-CustomOut \u0026#34;Starting SnapVault backup\u0026#34; Import-CSV \u0026#34;$( $OUTFILE ).csv\u0026#34; -Delimiter \u0026#34;;\u0026#34; | Sort-Object Controller,Volume | Get-Unique -asstring | foreach { $controller = $_.Controller $volume = $_.Volume $mountpoint = $_.Mountpoint $snap = $_.Snapshot Write-CustomOut \u0026#34; - Creating SnapVault transfer task for $( $mountpoint ) - $( $snap )\u0026#34; if ( !( $snapvaulted | Select-String \u0026#34;$( $controller )-$( $volume )\u0026#34; -q ) ) { # Check if there is already an unrenamed snapshot on the destination and # abort, otherwise more stuff goes kablooey. $svsnap = sdcli-sv-snaplist $mountpoint \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; | Out-String Write-CustomOut $svsnap if ( $svsnap -Match \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; ) { Write-CustomOut \u0026#34; failed ($($ARCHIVE_SEARCH) already present - failed rename?)\u0026#34; $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - failed: $($ARCHIVE_SEARCH) present\u0026#34; ` -body $body ` -priority High -smtpServer $SMTP_HOST } else { # Call the sdcli-sv-archive function, copying the snapshot to our SV_SEC. $command = sdcli-sv-archive $ARCHIVE $mountpoint $snap | Out-String Write-CustomOut $command if ( $command -NotMatch \u0026#34;The operation completed successfully\u0026#34; ) { Write-CustomOut \u0026#34; failed (transfer)\u0026#34; $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )`n`nDebug output:`nOutput from `$command: $( $command )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - transfer failed (snapvault update)\u0026#34; ` -body $body ` -priority High -smtpServer $SMTP_HOST } else { Write-CustomOut \u0026#34; started (transfer)\u0026#34; $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )`n`nDebug output:`nOutput from `$command: $( $command )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - transfer started\u0026#34; ` -body $body ` -smtpServer $SMTP_HOST } } $snapvaulted += \u0026#34;$( $controller )-$( $volume )`n\u0026#34; Write-CustomOut \u0026#34; finished(volume)\u0026#34; } Write-CustomOut \u0026#34; finished(loop-volume)\u0026#34; } # Now, wait in this loop until the snapshot is on the SV_SEC, and then rename # the snapshot to it\u0026#39;s original name - making it more recognizable than \u0026#39;daily\u0026#39; Write-CustomOut \u0026#34;Starting SnapVault renames\u0026#34; Import-CSV \u0026#34;$( $OUTFILE ).csv\u0026#34; -Delimiter \u0026#34;;\u0026#34; | Sort-Object Controller,Volume | Get-Unique -asstring | foreach { $controller = $_.Controller $volume = $_.Volume $mountpoint = $_.Mountpoint $snap = $_.Snapshot Write-CustomOut \u0026#34; - Creating SnapVault rename task for $( $mountpoint ) - $( $snap )\u0026#34; if ( !( $snapvaulted_ren | Select-String \u0026#34;$( $controller )-$( $volume )\u0026#34; -q ) ) { # Since the snapvault archive names the destination snapshot like the archive # class (which is bullshit), wait till the snapshot is on the destination and # then rename the snapvault snapshot. Write-CustomOut \u0026#34; checking for snapshot $($ARCHIVE_SEARCH)\u0026#34; $svsnap = sdcli-sv-snaplist $mountpoint \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; Write-CustomOut $svsnap while ( $svsnap -ne \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; ) { Write-CustomOut \u0026#34; waiting for snapshot $($ARCHIVE_SEARCH))\u0026#34; sleep $SDCLI_WAIT $svsnap = sdcli-sv-snaplist $mountpoint \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; Write-CustomOut $svsnap $count++ } if ( $count -gt $WAIT ) { $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )`n`nDebug output:`nOutput from `$command: $( $command )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - transfer skipped\u0026#34; ` -body $body ` -priority High -smtpServer $SMTP_HOST } else { Write-CustomOut \u0026#34; snapshot $($ARCHIVE_SEARCH) present\u0026#34; $command = sdcli-sv-snaprename \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; $mountpoint $snap | Out-String Write-CustomOut $command if ( $command -NotMatch \u0026#34;The operation completed successfully\u0026#34; ) { $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )`n`nDebug output:`nOutput from `$command: $( $command )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - transfer failed (snapvault rename)\u0026#34; ` -body $body ` -priority High -smtpServer $SMTP_HOST } else { $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )`n`nDebug output:`nOutput from `$command: $( $command )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - transfer completed\u0026#34; ` -body $body ` -smtpServer $SMTP_HOST } } $snapvaulted_ren += \u0026#34;$( $controller )-$( $volume )`n\u0026#34; Write-CustomOut \u0026#34; finished(volume)\u0026#34; } Write-CustomOut \u0026#34; finished(loop-volume)\u0026#34; } Write-CustomOut \u0026#34;all done!\u0026#34; Write-CustomOut \u0026#34;\u0026#34; The script is being called with a list of databases (simply append \u0026ldquo;msdb vcdb vumdb ssodb\u0026rdquo; to the execution of the script), from that grabs a list of affected volumes (in case the databases is distributed over a bunch of volumes) - so the user needs to have access to the database.\nFrom that list of affected volumes, the script triggers a SnapVault Archive (using SDCLI.exe\u0026rsquo;s snapvault archive function) and then wait\u0026rsquo;s for the Snapshots to appear on the SnapVault destination.\nOnce the Snapshots are on the destination, it\u0026rsquo;ll rename the Snapshots to reflect the names of the originals.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_netapp-archive-snapmanager-sql-snapshots/","summary":"\u003cp\u003eAs I wrote before, we\u0026rsquo;re using SnapManager (for SQL/Oracle) to create consistent snapshots. However my database guys don\u0026rsquo;t want to name their snapshots daily.\u003c!-- raw HTML omitted --\u003e (which I can understand), as once you archive those snapshots to a secondary (and tertiary) system, the names become junk.\u003c/p\u003e\n\u003cp\u003eSo, they\u0026rsquo;re naming the snapshots like snap__vcsrv_29_12_2012-10.00.01. Sadly, when it comes to SnapVault, it expects the names in form of daily.\u003c!-- raw HTML omitted --\u003e otherwise you won\u0026rsquo;t be able to transfer the snapshots with the CLI (none that I have found anyway).\u003c/p\u003e\n\u003cp\u003eBut we didn\u0026rsquo;t want to move away from naming the snapshots the way they are, so I ended up writing a PowerShell script, that once triggered archives the Snapshots needed for a set of databases. It took me a while to figure a bunch of stuff out, but in the end I think I have a working way of archiving custom-named snapshots.\u003c/p\u003e\n","title":"NetApp: Archive SnapManager SQL snapshots"},{"content":"Well, I recently had the pleasant task of implementing SnapVault backups, that are being shipped to an offsite location with SnapMirror.\nThat in itself isn\u0026rsquo;t the bad thing, however we decided against Protection Manager (since it was a charged product back when we decided on this). So I basically had the three tasks:\nActually implement the SnapVault stuff (and learn my way around it and also document it) Write a bunch of scripts, that help us in creating scheduled backups of our databases Create a monitoring script, that\u0026rsquo;ll fit into our Nagios environment already in place Well, two months later (sadly it still has some kinks - I can\u0026rsquo;t figure out this one bug though for the life of it) and a few hundred hours of working on/with it and out came four things:\nBash-scripts to create the SnapVault/SnapMirror relations Powershell scripts to trigger the SnapVault updates a Nagios plugin, based on NetApp\u0026rsquo;s SDK for Data ONTAP (even if the API is crap from time to time - it\u0026rsquo;s still better than using SNMP) I\u0026rsquo;ll post those things one after another, once I wrote up all the articles.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_implementing-snapvault-backups-the-hard-way/","summary":"\u003cp\u003eWell, I recently had the pleasant task of implementing SnapVault backups, that are being shipped to an offsite location with SnapMirror.\u003c/p\u003e\n\u003cp\u003eThat in itself isn\u0026rsquo;t the bad thing, however we decided against Protection Manager (since it was a charged product back when we decided on this). So I basically had the three tasks:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eActually implement the SnapVault stuff (and learn my way around it and also document it)\u003c/li\u003e\n\u003cli\u003eWrite a bunch of scripts, that help us in creating scheduled backups of our databases\u003c/li\u003e\n\u003cli\u003eCreate a monitoring script, that\u0026rsquo;ll fit into our Nagios environment already in place\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eWell, two months later (sadly it still has some kinks - I can\u0026rsquo;t figure out this one bug though for the life of it) and a few hundred hours of working on/with it and out came four things:\u003c/p\u003e","title":"Implementing SnapVault backups - the hard way"},{"content":"I\u0026rsquo;ve been spending a lot of my time the last week on getting SnapVault with out FAS-filers to work. Out came a script, which does this for a given volume (and of course SnapVault Primary and Secondary).\nThe script expects, that SSH public key authentification has been set up.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 #!/bin/bash # Create a SnapVault relation between two volumes # 1) create volume on target, if it doesn\u0026#39;t exist # 2) set snapshot reserve on target # 3) start the snapvault relationship # 4) create snapvault retention for this volume KEY_FILE=\u0026#34;/root/.ssh/netapp.dsa\u0026#34; SSH_OPTS=\u0026#34;/root/.ssh/netapp-ssh_config\u0026#34; usage() { echo \u0026#34;Usage: fas-snapvault-start.sh \u0026lt;MODE\u0026gt; \u0026lt;VOLUME|HOSTNAME\u0026gt; \u0026lt;SV_SECONDARY\u0026gt; \u0026lt;SV_PRIMARY\u0026gt; \u0026lt;SV_RETENTION\u0026gt; [SV_SCHED_NAME] [SV_RATE_LIMIT]\u0026#34; echo \u0026#34;\u0026#34; if [ -n \u0026#34;$1\u0026#34; ] ; then echo \u0026#34;$1\u0026#34; echo \u0026#34;\u0026#34; fi echo \u0026#34;Required parameters:\u0026#34; echo \u0026#34;\u0026#34; echo \u0026#34; - MODE: Either host or volume (case sensitive).\u0026#34; echo \u0026#34;\u0026#34; echo \u0026#34; - VOLUME: Volume for which to configure SnapVault (if mode is set to volume)\u0026#34; echo \u0026#34; - HOSTNAME: Host for which to configure SnapVault (if mode is set to host)\u0026#34; echo \u0026#34; - SV_SECONDARY: SnapVault Secondary\u0026#34; echo \u0026#34; - SV_PRIMARY: SnapVault Primary\u0026#34; echo \u0026#34; - SV_RETENTION: How many SnapVault snapshots should be kept on the SV_SECONDARY\u0026#34; echo \u0026#34;\u0026#34; echo \u0026#34;Optional parameters:\u0026#34; echo \u0026#34;\u0026#34; echo \u0026#34; - SV_SCHED_NAME: Retention class for this schedule, defaults to \u0026#39;daily\u0026#39;\u0026#34; echo \u0026#34; - SV_RATE_LIMIT: Limit the SnapVault transfer to xx kb, may help on busy systems.\u0026#34; echo \u0026#34; Defaults to no limit at all, may cause harm to already busy FAS\u0026#34; echo \u0026#34; controllers.\u0026#34; echo \u0026#34;\u0026#34; exit 1 } ssh_fas() { # $@: commands for Data ONTAP COMMANDS=\u0026#34;$@\u0026#34; /usr/bin/ssh -i $KEY_FILE -l root -F $SSH_OPTS $COMMANDS } snapvault_flexvol_size() { # $1: current size and unit # $2: retention period size=$1 retention=$2 UNIT_PARAM=\u0026#34;$( echo \u0026#34;${#size} - 1\u0026#34; | bc )\u0026#34; UNIT=\u0026#34;${size:$UNIT_PARAM:1}\u0026#34; case $UNIT in k) CONV=\u0026#34;1024\u0026#34;;; m) CONV=\u0026#34;1024 * 1024\u0026#34;;; g) CONV=\u0026#34;1024 * 1024 * 1024\u0026#34;;; esac SIZE=\u0026#34;$( echo \u0026#34;scale=0; ${size/$UNIT/} * $CONV * $retention\u0026#34; | bc )\u0026#34; echo \u0026#34;${SIZE}k\u0026#34; } snapvault_setup() { if [ \u0026#34;$#\u0026#34; -lt 6 ] ; then break fi # $1: sv_secondary # $2: sv_primary # $3: sv_retention # $4: volume # $5: sv_sched_name # $6: sv_rate_limit sv_secondary=$1 sv_primary=$2 sv_retention=$3 volume=$4 sv_sched_name=$5 sv_rate_limit=$6 # Check if snapvault access is configured correctly sv_secondary_ip=\u0026#34;$( ssh_fas $sv_secondary rdfile /etc/hosts | grep $sv_secondary-e0a | awk \u0026#39;{ print $1 }\u0026#39; )\u0026#34; sv_access=\u0026#34;$( ssh_fas $sv_primary options snapvault.access | grep $sv_secondary_ip )\u0026#34; if [ -z \u0026#34;$sv_access\u0026#34; ] ; then echo \u0026#34;Please make sure, that SnapVault access is correctly\u0026#34; echo \u0026#34;configured on $sv_primary, so that $sv_secondary\u0026#34; echo \u0026#34;can access it using snapvault.\u0026#34; echo echo \u0026#34;Hint: options snapvault.access should look like this:\u0026#34; echo \u0026#34; options snapvault.access host=$sv_secondary_ip\u0026#34; echo exit 1 fi # First, check if SnapVault is already configured! SV=\u0026#34;$( ssh_fas $sv_primary snapvault status | grep -i \u0026#34;^$sv_primary:/vol/$volume/sv/\u0026#34; | awk \u0026#39;{ print $5 }\u0026#39; )\u0026#34; case $SV in Transferring|Idle) continue;; esac # Get vol size and snapreserve from sv_primary # and calculate the new size. Simply setting the volume to the original # size isn\u0026#39;t enough, as we need to keep the lun plus SV_RETENTION times # of snapshots ... VOLUME_SIZE=\u0026#34;$( ssh_fas $sv_primary vol size $volume | awk \u0026#39;{ print $8 }\u0026#39; | sed \u0026#34;s,.,,\u0026#34; )\u0026#34; VOLAUTO_SIZE=\u0026#34;$( snapvault_flexvol_size $VOLUME_SIZE $sv_retention )\u0026#34; SNAP_RESERVE=\u0026#34;$( ssh_fas $sv_primary snap reserve $volume | cut -d -f7 | sed \u0026#34;s,%,,\u0026#34; )\u0026#34; # Check if the is a qtree on sv_primary QTREE=\u0026#34;$( ssh_fas $sv_primary qtree status | grep $volume | cut -d -f2 | sed \u0026#39;/^$/d\u0026#39; )\u0026#34; if [ -z \u0026#34;$QTREE\u0026#34; ] ; then echo echo \u0026#34;SnapDrive only supports Qtree to Qtree relations!\u0026#34; echo \u0026#34;Please run the following commands to create a qtree and\u0026#34; echo \u0026#34;move the lun to it:\u0026#34; echo echo \u0026#34;qtree create /vol/$volume/sv\u0026#34; for lun in $( ssh_fas $sv_primary lun show -l $volume | awk \u0026#39;{ print $1 }\u0026#39; | tr \u0026#39;n\u0026#39; \u0026#39; \u0026#39; ); do lun_name=\u0026#34;$( echo $lun | cut -d/ -f4 )\u0026#34; echo \u0026#34;lun move $lun /vol/$volume/sv/$lun_name\u0026#34; done #\telif [ \u0026#34;$( ssh_fas $sv_secondary ping $sv_primary-igm1 )\u0026#34; != \u0026#34;$sv_primary-igm1 is alive\u0026#34; ] ; then #\techo #\techo \u0026#34;Please make sure the SV_SECONDARY $sv_secondary can reach\u0026#34; #\techo \u0026#34;the SV_PRIMARY $sv_primary via igm1!\u0026#34; #\techo else echo \u0026#34;SnapVault operations for FlexVol: $volume\u0026#34; echo \u0026#34; - Creating FlexVol\u0026#34; # Assume to always use aggr1 on sv_secondary ssh_fas $sv_secondary vol create $volume -s none aggr1 $VOLUME_SIZE \u0026amp;\u0026gt;/dev/null echo \u0026#34; - Disabling Unicode/atime/automatic snapshotting\u0026#34; ssh_fas $sv_secondary vol options $volume fractional_reserve 100 ssh_fas $sv_secondary vol options $volume no_atime_update on ssh_fas $sv_secondary vol options $volume create_ucode off ssh_fas $sv_secondary vol options $volume nosnap on ssh_fas $sv_secondary vol options $volume convert_ucode off ssh_fas $sv_secondary snap reserve $volume $SNAP_RESERVE # Doesn\u0026#39;t matter, as a snapvault update would resync source and destination #echo \u0026#34; - Enabling Volume Autosizing (vol max: $VOLAUTO_SIZE)\u0026#34; #ssh_fas $sv_secondary vol autosize $volume -m $VOLAUTO_SIZE -i 1g #ssh_fas $sv_secondary vol autosize $volume on echo \u0026#34; - Enabling Deduplication (mon-sun@15)\u0026#34; ssh_fas $sv_secondary sis on /vol/$volume \u0026amp;\u0026gt;/dev/null ssh_fas $sv_secondary sis config -s mon-sun@15 /vol/$volume # Now create the SnapVault relationship between sv_secondary and sv_primary [ -n $sv_rate_limit ] \u0026amp;\u0026amp; sv_rate_limit=\u0026#34;-k $sv_rate_limit\u0026#34; echo \u0026#34; - Starting SnapVault relation between $sv_secondary and $sv_primary\u0026#34; COMMAND=\u0026#34;$( ssh_fas $sv_secondary snapvault start $sv_rate_limit -S $sv_primary-igm1:/vol/$volume/sv/ /vol/$volume/sv )\u0026#34; if [ \u0026#34;$( echo $COMMAND | grep \u0026#34;Transfer aborted\u0026#34; )\u0026#34; != \u0026#34;\u0026#34; ] ; then echo echo \u0026#34; FAILED\u0026#34; echo echo \u0026#34;Output from snapvault start was: $COMMAND\u0026#34; else echo \u0026#34; - Creating retention class on $sv_primary\u0026#34; ssh_fas $sv_primary snapvault snap sched $volume $sv_sched_name $sv_retention@- echo \u0026#34; - Creating retention class on $sv_secondary\u0026#34; ssh_fas $sv_secondary snapvault snap sched $volume $sv_sched_name $sv_retention@- echo echo \u0026#34;You can monitor the SnapVault initialization on the SnapVault Secondary ($sv_secondary)\u0026#34; echo \u0026#34;by using the following command:\u0026#34; echo echo \u0026#34; \u0026#39;snapvault status /vol/$volume/sv\u0026#39;\u0026#34; echo fi fi } # Main script starts here. #set -x if [ \u0026#34;$#\u0026#34; -lt 5 ] ; then usage fi case $1 in host) MODE=\u0026#34;host\u0026#34;; HOST=$2 ;; volume) MODE=\u0026#34;volume\u0026#34;; VOLUME=$2 ;; *) usage \u0026#34;Invalid mode specified\u0026#34; esac SV_SECONDARY=$3 SV_PRIMARY=$4 SV_RETENTION=$5 SV_SCHED_NAME=${6:-daily} SV_RATE_LIMIT=${7:-50000} if [ \u0026#34;$MODE\u0026#34; == \u0026#34;host\u0026#34; ] ; then # Get the LUN list VOLUME_LIST=\u0026#34;$( ssh_fas $SV_PRIMARY lun show -g $HOST | awk \u0026#39;{ print $1 }\u0026#39; | cut -d/ -f3 | grep -v windows | tr \u0026#39;n\u0026#39; \u0026#39; \u0026#39; | sort -u )\u0026#34; for vol in $VOLUME_LIST; do # Check if snapreserve is enabled SNAP=\u0026#34;$( ssh_fas $SV_PRIMARY snap reserve $vol | cut -d -f7 | sed \u0026#34;s,%,,\u0026#34; )\u0026#34; if [ $SNAP -ne \u0026#34;0\u0026#34; ] ; then snapvault_setup $SV_SECONDARY $SV_PRIMARY $SV_RETENTION $vol $SV_SCHED_NAME $SV_RATE_LIMIT else echo \u0026#34;No snap reserve configured for $vol\u0026#34; fi done elif [ \u0026#34;$MODE\u0026#34; == \u0026#34;volume\u0026#34; ] ; then SNAP=\u0026#34;$( ssh_fas $SV_PRIMARY snap reserve $VOLUME | cut -d -f7 | sed \u0026#34;s,%,,\u0026#34; )\u0026#34; if [ $SNAP -ne \u0026#34;0\u0026#34; ] ; then snapvault_setup $SV_SECONDARY $SV_PRIMARY $SV_RETENTION $VOLUME $SV_SCHED_NAME $SV_RATE_LIMIT else echo \u0026#34;No snap reserve configured for $vol\u0026#34; fi fi #set +x The script expects that you set up SSH public key authentification, in order to access the primary and secondary SnapVault filer (in order to actually create the relationship between the two).\nAdditionaly the script expects the source to be a qtree. That is because in my tinkering, I\u0026rsquo;ve found Volume-based SnapVaults to be less reliable than Qtree-based SnapVaults (don\u0026rsquo;t ask me why though).\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-08_netapp-establishing-snapvault-relations/","summary":"\u003cp\u003eI\u0026rsquo;ve been spending a lot of my time the last week on getting SnapVault with out FAS-filers to work. Out came a script, which does this for a given volume (and of course SnapVault Primary and Secondary).\u003c/p\u003e\n\u003cp\u003eThe script expects, that \u003ca href=\"http://christian.weblog.heimdaheim.de/2012/03/07/netapp-fasdata-ontap-public-key-authentification-with-cifsnfs-license/\" title=\"NetApp FAS/Data ONTAP public key authentification with CIFS/NFS license\"\u003eSSH public key authentification\u003c/a\u003e has been set up.\u003c/p\u003e\n","title":"NetApp: Establishing SnapVault relations"},{"content":"Well, just like everybody else, I\u0026rsquo;ve been using phpMyAdmin to do my casual MySQL fixing/work on this website. However, recently the phpMyAdmin developers switched to Git on SourceForge and then to GitHub shortly after that.\nSo, the guy over at Network Jack wrote down what I had already been doing:\n1 2 3 git clone --depth=1 git://phpmyadmin.git.sf.net/gitroot/phpmyadmin/phpmyadmin cd phpmyadmin git checkout --track -b PMASTABLE origin/STABLE However, as I said before, they switched from SourceForge to GitHub, thus you need another URL.\n1 2 3 git clone --depth=1 git://github.com/phpmyadmin/phpmyadmin.git cd phpmyadmin git checkout --track -b PMASTABLE origin/STABLE After that, you just need to add a simple cronjob that enters the directory and runs git pull.\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-08-06_setting-up-a-phpmyadmin-auto-update/","summary":"\u003cp\u003eWell, just like everybody else, I\u0026rsquo;ve been using phpMyAdmin to do my casual MySQL fixing/work on this website. However, recently the phpMyAdmin developers switched to Git on SourceForge and then to GitHub shortly after that.\u003c/p\u003e\n\u003cp\u003eSo, the guy over at \u003ca href=\"http://www.networkjack.info/blog/2011/04/05/simple-checkout-of-phpmyadmin-with-git/\"\u003eNetwork Jack wrote down\u003c/a\u003e what I had already been doing:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit clone --depth\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e git://phpmyadmin.git.sf.net/gitroot/phpmyadmin/phpmyadmin\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e phpmyadmin\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit checkout --track -b PMASTABLE origin/STABLE\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eHowever, as I said before, they switched from SourceForge to GitHub, thus you need another URL.\u003c/p\u003e","title":"Setting up a phpMyAdmin auto-update"},{"content":"Once the disk is failed (or is actually defective), mdadm will automatically remove it from the RAID. After that, you\u0026rsquo;ll either have to add the disk back as a data disk or as a hot-spare (which was in my case). Now, here\u0026rsquo;s after the rebuild for the failed disk started:\n1 2 3 4 5 6 7 8 root:(charon.ka.heimdaheim.de) PWD:~ Sun Jul 27, 23:40:35 [0] \u0026gt; cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md127 : active raid5 sdi1[0] sdh1[6] sdj1[7] sdk1[8] sdf1[9] sdb1[5] sde1[4] sdd1[2] sdc1[1] 15626121216 blocks super 1.2 level 5, 512k chunk, algorithm 2 [9/8] [UUUUU_UUU] [===================\u0026gt;.] recovery = 97.9% (1913176308/1953265152) finish=12.3min speed=53936K/sec unused devices: \u0026lt;none\u0026gt; In order to add the replaced disk back to the RAID, you\u0026rsquo;ll have to prepare a partition for it (see this post for more details). After that, it\u0026rsquo;s a simple call with mdadm to re-add the hot-spare:\n1 2 3 4 5 6 7 8 9 10 11 root:(charon.ka.heimdaheim.de) PWD:~ Sun Jul 27, 23:44:19 [0] \u0026gt; mdadm --add /dev/md127 /dev/sdg1 mdadm: added /dev/sdg1 root:(charon.ka.heimdaheim.de) PWD:~ Sun Jul 27, 23:44:37 [0] \u0026gt; cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md127 : active raid5 sdg1[10](S) sdi1[0] sdh1[6] sdj1[7] sdk1[8] sdf1[9] sdb1[5] sde1[4] sdd1[2] sdc1[1] 15626121216 blocks super 1.2 level 5, 512k chunk, algorithm 2 [9/8] [UUUUU_UUU] [===================\u0026gt;.] recovery = 98.6% (1926141684/1953265152) finish=8.6min speed=52224K/sec unused devices: \u0026lt;none\u0026gt; As you can see, disk 10 (sdg1 in this example) has been added with the tag hot-spare \u0026hellip; mdadm \u0026ndash;detail shows that a bit better:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 root:(charon.ka.heimdaheim.de) PWD:~ Sun Jul 27, 23:44:46 [0] \u0026gt; mdadm --detail /dev/md127 /dev/md127: Version : 1.2 Creation Time : Sat Jan 26 18:35:19 2013 Raid Level : raid5 Array Size : 15626121216 (14902.23 GiB 16001.15 GB) Used Dev Size : 1953265152 (1862.78 GiB 2000.14 GB) Raid Devices : 9 Total Devices : 10 Persistence : Superblock is persistent Update Time : Sun Jul 27 23:44:37 2014 State : clean, degraded, recovering Active Devices : 8 Working Devices : 10 Failed Devices : 0 Spare Devices : 2 Layout : left-symmetric Chunk Size : 512K Rebuild Status : 98% complete Name : charon:aggr1 (local to host charon) UUID : 6d11820f:04847070:2725c434:9ee39718 Events : 11221 Number Major Minor RaidDevice State 0 8 129 0 active sync /dev/sdi1 1 8 33 1 active sync /dev/sdc1 2 8 49 2 active sync /dev/sdd1 4 8 65 3 active sync /dev/sde1 5 8 17 4 active sync /dev/sdb1 6 8 113 5 spare rebuilding /dev/sdh1 9 8 81 6 active sync /dev/sdf1 8 8 161 7 active sync /dev/sdk1 7 8 145 8 active sync /dev/sdj1 10 8 97 - spare /dev/sdg1 ","permalink":"https://christian.blog.pakiheim.de/posts/2014-07-27_mdadm-add-a-hot-spare-after-failing-a-disk/","summary":"\u003cp\u003eOnce the disk is failed (or is \u003cem\u003eactually\u003c/em\u003e defective), mdadm will automatically remove it from the RAID. After that, you\u0026rsquo;ll either have to add the disk back as a data disk or as a hot-spare (which was in my case). Now, here\u0026rsquo;s after the rebuild for the failed disk started:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e8\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eroot:(charon.ka.heimdaheim.de) PWD:~\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSun Jul 27, 23:40:35 [0] \u0026gt; cat /proc/mdstat\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePersonalities : [raid6] [raid5] [raid4]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emd127 : active raid5 sdi1[0] sdh1[6] sdj1[7] sdk1[8] sdf1[9] sdb1[5] sde1[4] sdd1[2] sdc1[1]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      15626121216 blocks super 1.2 level 5, 512k chunk, algorithm 2 [9/8] [UUUUU_UUU]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      [===================\u0026gt;.]  recovery = 97.9% (1913176308/1953265152) finish=12.3min speed=53936K/sec\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eunused devices: \u0026lt;none\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eIn order to add the replaced disk back to the RAID, you\u0026rsquo;ll have to prepare a partition for it (see \u003ca href=\"/posts/2014-07-09_sfdisk-partition-table-for-2tb-raid-disks\" title=\"SFdisk – Partition table for 2TB RAID-Disks\"\u003ethis post for more details\u003c/a\u003e). After that, it\u0026rsquo;s a simple call with mdadm to re-add the hot-spare:\u003c/p\u003e","title":"mdadm: Add a hot-spare after failing a disk"},{"content":"Get a list of all disks and show the serial numbers\n1 2 3 4 5 6 7 8 9 10 #!/bin/bash if [ ! -x /usr/sbin/hdparm ] ; then echo \u0026#34;Missing hdparm\u0026#34; exit 1 fi for disk in /dev/sd?; do echo \u0026#34;$disk: `hdparm -I $disk | grep \u0026#34;Serial Number:\u0026#34; | awk \u0026#39;{ print $3 }\u0026#39;`\u0026#34; done ","permalink":"https://christian.blog.pakiheim.de/posts/2014-07-27_diskinfo/","summary":"\u003cp\u003eGet a list of all disks and show the serial numbers\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e ! -x /usr/sbin/hdparm \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Missing hdparm\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e disk in /dev/sd?\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$disk\u003c/span\u003e\u003cspan class=\"s2\"\u003e: `hdparm -I \u003c/span\u003e\u003cspan class=\"nv\"\u003e$disk\u003c/span\u003e\u003cspan class=\"s2\"\u003e | grep \u0026#34;\u003c/span\u003eSerial Number:\u003cspan class=\"s2\"\u003e\u0026#34; | awk \u0026#39;{ print \u003c/span\u003e\u003cspan class=\"nv\"\u003e$3\u003c/span\u003e\u003cspan class=\"s2\"\u003e }\u0026#39;`\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"diskinfo"},{"content":"Another wrapper (like mdstat), that\u0026rsquo;ll look through my Western Digital disks and fix any disk not having the head parking timeout set to a configured value.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #!/bin/bash FIRMWARE_TIMEOUT_SH=138 if [ ! -x /usr/sbin/idle3ctl ] ; then echo \u0026#34;idle3-tools is missing.\u0026#34; exit 1 fi for disk in /dev/sd?; do # idle time should be set to: 138 (300s) # 138-128=10 # 10x30=300 seconds FIRMWARE_TIMEOUT_IS=\u0026#34;$( /usr/sbin/idle3ctl -g $disk | awk \u0026#39;{ print $5 }\u0026#39; )\u0026#34; if [ \u0026#34;$FIRMWARE_TIMEOUT_IS\u0026#34; -ne \u0026#34;$FIRMWARE_TIMEOUT_SH\u0026#34; ]; then /usr/sbin/idle3ctl -s$FIRMWARE_TIMEOUT_SH $disk fi done ","permalink":"https://christian.blog.pakiheim.de/posts/2014-07-27_idle3-wrapper/","summary":"\u003cp\u003eAnother wrapper (like mdstat), that\u0026rsquo;ll look through my Western Digital disks and fix any disk not having the head parking timeout set to a configured value.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eFIRMWARE_TIMEOUT_SH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e138\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e ! -x /usr/sbin/idle3ctl \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;idle3-tools is missing.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e disk in /dev/sd?\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# idle time should be set to: 138 (300s)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# 138-128=10\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# 10x30=300 seconds\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eFIRMWARE_TIMEOUT_IS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e /usr/sbin/idle3ctl -g \u003cspan class=\"nv\"\u003e$disk\u003c/span\u003e  \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $5 }\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$FIRMWARE_TIMEOUT_IS\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e -ne \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$FIRMWARE_TIMEOUT_SH\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    /usr/sbin/idle3ctl -s\u003cspan class=\"nv\"\u003e$FIRMWARE_TIMEOUT_SH\u003c/span\u003e \u003cspan class=\"nv\"\u003e$disk\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"idle3 wrapper"},{"content":"Well, I needed a way to watch the mdstat progress (because a disk just failed \u0026hellip;).\n1 2 3 #!/bin/bash watch -n1 cat /proc/mdstat ","permalink":"https://christian.blog.pakiheim.de/posts/2014-07-27_mdstat/","summary":"\u003cp\u003eWell, I needed a way to watch the mdstat progress (because a disk just failed \u0026hellip;).\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewatch -n1 cat /proc/mdstat\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"mdstat"},{"content":"Well, I have a few movies and series that ain\u0026rsquo;t represented in TMDB/TVDB. So here\u0026rsquo;s a little script, that will parse over any video files, check if a thumb file is already present, and if not generate one using ffmpegthumbnailer\u0026hellip;\n1 2 3 4 5 6 7 8 #!/bin/bash find /srv/smb/tv/ -name \u0026#34;*.wmv\u0026#34; -o -name \u0026#34;*.avi\u0026#34; -o -name \u0026#34;*.mp4\u0026#34; \\ -o -name \u0026#34;*.mkv\u0026#34; | while read file; do if [ ! -f \u0026#34;${file%.*}-thumb.jpg\u0026#34; ] ; then fmpegthumbnailer -i $file -o \u0026#34;${file%.*}-thumb.jpg\u0026#34; -s 0 \u0026amp;\u0026gt;/dev/null fi done ","permalink":"https://christian.blog.pakiheim.de/posts/2014-07-19_xbmc-thumbnail-generation/","summary":"\u003cp\u003eWell, I have a few movies and series that ain\u0026rsquo;t represented in TMDB/TVDB. So here\u0026rsquo;s a little script, that will parse over any video files, check if a thumb file is already present, and if not generate one using \u003ca href=\"https://code.google.com/p/ffmpegthumbnailer/wiki/FFMpegThumbnailer\" title=\"FFMpegThumbnailer homepage\"\u003effmpegthumbnailer\u003c/a\u003e\u0026hellip;\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e8\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efind /srv/smb/tv/ -name \u003cspan class=\"s2\"\u003e\u0026#34;*.wmv\u0026#34;\u003c/span\u003e -o -name \u003cspan class=\"s2\"\u003e\u0026#34;*.avi\u0026#34;\u003c/span\u003e -o -name \u003cspan class=\"s2\"\u003e\u0026#34;*.mp4\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  -o -name \u003cspan class=\"s2\"\u003e\u0026#34;*.mkv\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e \u003cspan class=\"k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"nb\"\u003eread\u003c/span\u003e file\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e ! -f \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e%.*\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e-thumb.jpg\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    fmpegthumbnailer -i \u003cspan class=\"nv\"\u003e$file\u003c/span\u003e -o \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e%.*\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e-thumb.jpg\u0026#34;\u003c/span\u003e -s \u003cspan class=\"m\"\u003e0\u003c/span\u003e \u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003e\u0026gt;/dev/null\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"XBMC thumbnail generation"},{"content":"Well, I recently had to flatten my archive NAS (well only the OS part \u0026hellip; wheeeh). Since I didn\u0026rsquo;t have the chance to backup the old settings I had to do everything from scratch \u0026hellip; And this time I decided, I wasn\u0026rsquo;t doing a script but rather the proper way.\nI spent a while reading through the Internetz about the various settings until I stumbled upon a Frauenhofer Wiki entry. From there I ended up writing those udev-rules and the sysctl configs\u0026hellip;\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 # Settings from http://www.fhgfs.com/wiki/StorageServerTuning # Set an appropriate IO scheduler for file servers. KERNEL==\u0026#34;sd[a-z]\u0026#34;, ATTR{queue/scheduler}=\u0026#34;deadline\u0026#34; KERNEL==\u0026#34;sd[a-i][a-z]\u0026#34;, ATTR{queue/scheduler}=\u0026#34;deadline\u0026#34; # Give the IO scheduler more flexibility by increasing the number of # schedulable requests. KERNEL==\u0026#34;sd[a-z]\u0026#34;, ATTR{queue/nr_requests}=\u0026#34;4096\u0026#34; KERNEL==\u0026#34;sd[a-i][a-z]\u0026#34;, ATTR{queue/nr_requests}=\u0026#34;4096\u0026#34; # To improve throughput for sequential reads, increase the maximum amount of # read-ahead data. The actual amount of read-ahead is adaptive, so using a # high value here won\u0026#39;t harm performance for small random access. KERNEL==\u0026#34;sd[a-z]\u0026#34;, ATTR{queue/read_ahead_kb}=\u0026#34;73728\u0026#34; KERNEL==\u0026#34;sd[a-i][a-z]\u0026#34;, ATTR{queue/read_ahead_kb}=\u0026#34;73728\u0026#34; KERNEL==\u0026#34;sd[a-z]\u0026#34;, RUN+=\u0026#34;/sbin/blockdev --setra 73728 /dev/%n\u0026#34; KERNEL==\u0026#34;sd[a-i][a-z]\u0026#34;, RUN+=\u0026#34;/sbin/blockdev --setra 73728 /dev/%n\u0026#34; SUBSYSTEM==\u0026#34;block\u0026#34;, KERNEL==\u0026#34;md[0-9]*\u0026#34;, RUN+=\u0026#34;/sbin/blockdev --setra 663552 /dev/%n\u0026#34; SUBSYSTEM==\u0026#34;block\u0026#34;, KERNEL==\u0026#34;md[0-9]*\u0026#34;, ATTR{md/stripe_cache_size}=\u0026#34;9216\u0026#34; # Optimal performance for hardware RAID systems often depends on large IOs # being sent to the device in a single large operation. Please refer to your # hardware storage vendor for the corresponding optimal size of # /sys/block/sdX/max_sectors_kb. # It is typically good if this size can be increased to at least match your # RAID stripe set size (i.e. chunk_size x number_of_disks): KERNEL==\u0026#34;sd[a-z]\u0026#34;, ATTR{queue/max_sectors_kb}=\u0026#34;512\u0026#34; KERNEL==\u0026#34;sd[a-i][a-z]\u0026#34;, ATTR{queue/max_sectors_kb}=\u0026#34;512\u0026#34; KERNEL==\u0026#34;sd[a-z]\u0026#34;, ATTR{device/queue_depth}=\u0026#34;1\u0026#34; KERNEL==\u0026#34;sd[a-i][a-z]\u0026#34;, ATTR{device/queue_depth}=\u0026#34;1\u0026#34; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # Settings taken from http://www.fhgfs.com/wiki/StorageServerTuning # To avoid long IO stalls (latencies) for write cache flushing in a production # environment with very different workloads, you will typically want to limit # the kernel dirty (write) cache size. vm.dirty_background_ratio = 5 vm.dirty_ratio = 10 # Assigning slightly higher priority to inode caching helps to avoid disk seeks # for inode loading vm.vfs_cache_pressure = 50 # Buffering of file system data requires frequent memory allocation. Raising the # amount of reserved kernel memory will enable faster and more reliable memory # allocation in critical situations. Raise the corresponding value to 64MB if # you have less than 8GB of memory, otherwise raise it to at least 256MB vm.min_free_kbytes = 262144 For now, I\u0026rsquo;m rather pleased with the results \u0026hellip;\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 root:(charon.ka.heimdaheim.de) PWD:/ Wed Jul 09, 15:02:08 [0] \u0026gt; mdadm --detail /dev/md127 /dev/md127: Version : 1.2 Creation Time : Sat Jan 26 18:35:19 2013 Raid Level : raid5 Array Size : 15626121216 (14902.23 GiB 16001.15 GB) Used Dev Size : 1953265152 (1862.78 GiB 2000.14 GB) Raid Devices : 9 Total Devices : 10 Persistence : Superblock is persistent Update Time : Wed Jul 9 15:03:28 2014 State : clean Active Devices : 9 Working Devices : 10 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Name : charon:aggr1 (local to host charon) UUID : 6d11820f:04847070:2725c434:9ee39718 Events : 11186 Number Major Minor RaidDevice State 0 8 129 0 active sync /dev/sdi1 1 8 33 1 active sync /dev/sdc1 2 8 49 2 active sync /dev/sdd1 4 8 65 3 active sync /dev/sde1 5 8 17 4 active sync /dev/sdb1 10 8 97 5 active sync /dev/sdg1 9 8 81 6 active sync /dev/sdf1 8 8 161 7 active sync /dev/sdk1 7 8 145 8 active sync /dev/sdj1 6 8 113 - spare /dev/sdh1 And here\u0026rsquo;s the dd output:\n1 2 3 4 5 6 root:(charon.ka.heimdaheim.de) PWD:/ Wed Jul 09, 14:57:32 [0] \u0026gt; dd if=/dev/zero of=/srv/smb/tmp bs=1G count=100 \\ oflag=direct 100+0 records in 100+0 records out 107374182400 bytes (107 GB) copied, 257.341 s, 417 MB/s ","permalink":"https://christian.blog.pakiheim.de/posts/2014-07-09_linux-nas-optimizations/","summary":"\u003cp\u003eWell, I recently had to flatten my archive NAS (well only the OS part \u0026hellip; \u003cem\u003ewheeeh\u003c/em\u003e). Since I didn\u0026rsquo;t have the chance to backup the old settings I had to do everything from scratch \u0026hellip; And this time I decided, I wasn\u0026rsquo;t doing a script but rather the proper way.\u003c/p\u003e\n\u003cp\u003eI spent a while reading through the Internetz about the various settings until I stumbled upon a \u003ca href=\"http://www.fhgfs.com/wiki/StorageServerTuning\"\u003eFrauenhofer Wiki entry\u003c/a\u003e. From there I ended up writing those udev-rules and the sysctl configs\u0026hellip;\u003c/p\u003e","title":"Linux NAS optimizations"},{"content":"So, when I create (or add RAID disks) I have this handy sfdisk template (I created once when I first added the 2TB disks):\n1 2 3 4 5 6 7 root:(charon.ka.heimdaheim.de) PWD:~ Wed Jul 09, 15:13:04 [0] \u0026gt; sfdisk -d /dev/sdj \u0026gt; ~/raid-disk-template.sf root:(charon.ka.heimdaheim.de) PWD:~ Wed Jul 09, 15:13:04 [0] \u0026gt; cat ~/raid-disk-template.sf # partition table of /dev/sdj unit: sectors /dev/sdj1 : start= 2048, size=3906793472, Id=da So, if I wanted to add more disks, I\u0026rsquo;d just have to run the following:\n1 2 3 root:(charon.ka.heimdaheim.de) PWD:~ Wed Jul 09, 15:13:04 [0] \u0026gt; cat ~/raid-disk-template.sf | \\ sfdisk --force /dev/sdp ","permalink":"https://christian.blog.pakiheim.de/posts/2014-07-09_sfdisk-partition-table-for-2tb-raid-disks/","summary":"\u003cp\u003eSo, when I create (or add RAID disks) I have this handy sfdisk template (I created once when I first added the 2TB disks):\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e7\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eroot:(charon.ka.heimdaheim.de) PWD:~\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eWed Jul 09, 15:13:04 [0] \u0026gt; sfdisk -d /dev/sdj \u0026gt; ~/raid-disk-template.sf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eroot:(charon.ka.heimdaheim.de) PWD:~\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eWed Jul 09, 15:13:04 [0] \u0026gt; cat ~/raid-disk-template.sf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# partition table of /dev/sdj\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eunit: sectors\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/dev/sdj1 : start= 2048, size=3906793472, Id=da\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eSo, if I wanted to add more disks, I\u0026rsquo;d just have to run the following:\u003c/p\u003e","title":"SFdisk - Partition table for 2TB RAID-Disks"},{"content":"Since I\u0026rsquo;m living and working in Germany, most of my hardware is using timezone configuration for CEST (or Europe/Berlin).\nThis here is the simple configuration for our Nexus 5000\u0026rsquo;s:\n1 2 3 4 5 conf t clock timezone CET 1 0 clock summer-time CEST 5 Sun Mar 02:00 5 Sun Oct 03:00 60 exit copy running-config startup-config ","permalink":"https://christian.blog.pakiheim.de/posts/2014-06-24_nexus-5000-configure-cest/","summary":"\u003cp\u003eSince I\u0026rsquo;m living and working in Germany, most of my hardware is using timezone configuration for CEST (or Europe/Berlin).\u003c/p\u003e\n\u003cp\u003eThis here is the simple configuration for our Nexus 5000\u0026rsquo;s:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econf t\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eclock timezone CET 1 0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eclock summer-time CEST 5 Sun Mar 02:00 5 Sun Oct 03:00 60\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eexit\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecopy running-config startup-config\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Nexus 5000: Configure CEST"},{"content":"Well, another day - another UCS error. Out of the blue, one of our chassis started displaying that one PSU had failed, however the UCS was showing no PSU had failed \u0026#x1f937; Well, as it turns out - this is yet another known bug in 2.0.2(r). You\u0026rsquo;ll either have to unplug and plug all the power cables (that\u0026rsquo;s four) in a maintainance window - or simply change the Equipment Power Policy (found in the Root of your UCS, tab Policy) from \u0026ldquo;N+1\u0026rdquo; to \u0026ldquo;Non Redundant\u0026rdquo;; wait a minute or two till the error is \u0026ldquo;fixed\u0026rdquo; and then change it back to \u0026ldquo;N+1\u0026rdquo;. Problem solved for now \u0026hellip; \u0026#x1f600;\n","permalink":"https://christian.blog.pakiheim.de/posts/2014-06-22_ucs-5108-power-redundancy-lost/","summary":"\u003cp\u003eWell, another day - another UCS error. Out of the blue, one of our chassis started displaying that one PSU had failed, however the UCS was showing no PSU had failed \u0026#x1f937; \u003ca href=\"/uploads/2012/09/F0408-PSU-state.png\"\u003e\u003cimg loading=\"lazy\" src=\"/uploads/2012/09/F0408-PSU-state.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eWell, as it turns out - this is \u003ca href=\"http://tools.cisco.com/Support/BugToolKit/search/getBugDetails.do?method=fetchBugDetails\u0026amp;bugId=CSCub84671\" title=\"Cisco BugTool Kit link\"\u003eyet another known bug in 2.0.2(r)\u003c/a\u003e. You\u0026rsquo;ll either have to unplug and plug all the power cables (that\u0026rsquo;s four) in a maintainance window - or simply change the Equipment Power Policy (found in the Root of your UCS, tab Policy) \u003ca href=\"/uploads/2012/09/power-policy.png\"\u003e\u003cimg loading=\"lazy\" src=\"/uploads/2012/09/power-policy.png\"\u003e\u003c/a\u003e\u003c/p\u003e","title":"UCS 5108 power redundancy lost"},{"content":"Well, I wanted independent SpamAssassin Bayes databases per user (different users, different preferences). For that, RoundCube already set up the Junk folder. However, I wanted the ability (for myself, as well for my other users) to individually mark messages as either Spam or Ham.\nRoundCube: Inbox view\nNow, as I said before I wanted a trivial way to mark messages as Spam or Ham (without using the command line each time).\nRoundCube: Adjusted Inbox View\nNow, that was the mailbox setup part. Now we do have to do some command line foo (yeah, it\u0026rsquo;s still necessary) to actually learn the mails as spam or ham. First we need a script, which scans the Maildir for each domain/user separately, and then creates the bayes database.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #!/bin/bash # Script, which allows per-user bayes db\u0026#39;s for a dovecot virtual user # setup. sa-learn parses a set amount of folders (.Junk.Spam and .Junk.Ham) for # Ham/Spam and adds it to the per-user db. MAIL_DIR=/var/mail SPAMASS_DIR=/var/lib/spamassassin SPAM_FOLDER=\u0026#34;.Junk.Spam\u0026#34; HAM_FOLDER=\u0026#34;.Junk.Ham\u0026#34; # get all mail accounts for domain in $MAIL_DIR/*; do for user in $MAIL_DIR/${domain##*/}/*; do mailaccount=${user##*/} dbpath=$SPAMASS_DIR/${domain##*/}/$mailaccount spamfolder=${domain}/${mailaccount}/Maildir/$SPAM_FOLDER hamfolder=${domain}/${mailaccount}/Maildir/$HAM_FOLDER if [ -d $spamfolder ] ; then [ ! -d $dbpath ] \u0026amp;\u0026amp; mkdir -p ${dbpath} echo \u0026#34;Learning Spam from ${spamfolder} for user ${mailaccount}\u0026#34; nice sa-learn --spam --dbpath ${dbpath}/bayes --no-sync ${spamfolder} fi if [ -d $hamfolder ] ; then echo \u0026#34;Learning Ham from ${hamfolder} for user ${mailaccount}\u0026#34; nice sa-learn --ham --dbpath ${dbpath}/bayes --no-sync ${hamfolder} fi if [ -d $spamfolder -o -d $hamfolder ] ; then nice sa-learn --sync --dbpath $dbpath # Fix dbpath permissions chown -R mail.mail ${dbpath} chmod 700 ${dbpath} fi done done This script is based on work from nesono and workaround.org. Anyhow, the script will scan each user folder (you might need to adjust the MAIL_DIR and SPAMASS_DIR variable, depending on where your MAIL_DIR is located.\nNext, we need to adjust the SPAMD options to use the virtual-config-dir (that\u0026rsquo;s the SPAMD name for this).\n1 2 3 4 5 6 7 8 9 10 11 --- spamassassin.orig 2013-06-19 19:49:30.000000000 +0200 +++ spamassassin 2013-06-19 19:18:07.000000000 +0200 @@ -14,7 +14,7 @@ # make sure --max-children is not set to anything higher than 5, # unless you know what you\u0026#39;re doing. -OPTIONS=\u0026#34;--create-prefs --max-children 5 --helper-home-dir\u0026#34; +OPTIONS=\u0026#34;--create-prefs --max-children 5 --helper-home-dir --virtual-config-dir=/var/lib/spamassassin/%d/%l -x -u mail\u0026#34; # Pid file # Where should spamd write its PID to file? If you use the -u or As you can see, I basically appended the following to the OPTIONS variable: \u0026ndash;virtual-config-dir=/var/lib/spamassassin/%d/%l -x -u mail\nNow, here\u0026rsquo;s a couple of pointers:\n\u0026ndash;virtual-config-dir=pattern This option specifies where per-user preferences can be found for virtual users, for the -x switch. The pattern is used as a base pattern for the directory name. Any of the following escapes can be used:\n%u \u0026ndash; replaced with the full name of the current user, as sent by spamc. %l \u0026ndash; replaced with the \u0026rsquo;local part\u0026rsquo; of the current username. In other words, if the username is an email address, this is the part before the \u0026ldquo;@\u0026rdquo; sign. %d \u0026ndash; replaced with the \u0026lsquo;domain\u0026rsquo; of the current username. In other words, if the username is an email address, this is the part after the \u0026ldquo;@\u0026rdquo; sign. %% -- replaced with a single percent sign (%).\n-u username, \u0026ndash;username=username Run as the named user. If this option is not set, the default behaviour is to setuid() to the user running \u0026ldquo;spamc\u0026rdquo;, if \u0026ldquo;spamd\u0026rdquo; is running as root.\nNote: \u0026ldquo;\u0026ndash;username=root\u0026rdquo; is not a valid option. If specified, \u0026ldquo;spamd\u0026rdquo; will exit with a fatal error on startup.\nNow, only a small adjustment is still needed. In order for the inbound mails to be scanned with the per-user db\u0026rsquo;s, you need to adjust postfix\u0026rsquo;s master.cf file, to run spamc with the per-user db.\n1 2 3 4 5 6 7 8 9 10 11 --- master.cf.orig 2013-06-19 19:56:57.000000000 +0200 +++ master.cf 2013-06-19 19:57:09.000000000 +0200 @@ -115,7 +115,7 @@ # dovecot mail delivery dovecot unix - n n - - pipe - flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/deliver -d ${recipient} + flags=DRhu user=vmail:mail argv=/usr/bin/spamc -u ${recipient} -e /usr/lib/dovecot/deliver -f ${sender} -d ${recipient} amavis unix - - - - 2 smtp -o smtp_data_done_timeout=1200 After that\u0026rsquo;s done (and a restart of postfix, spamassassin and dovecot) you should be the proud owner of a per-user dovecot/postfix/spamassassin implementation.\n","permalink":"https://christian.blog.pakiheim.de/posts/2013-12-23_sa-learn-dovecot-virtual-users-and-virtual-user-configs/","summary":"\u003cp\u003eWell, I wanted independent SpamAssassin Bayes databases per user (different users, different preferences). For that, RoundCube already set up the Junk folder. However, I wanted the ability (for myself, as well for my other users) to individually mark messages as either Spam or Ham.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2013/06/roundcube-inbox-view.png\"\n         alt=\" RoundCube: Inbox view\" width=\"228\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eRoundCube: Inbox view\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eNow, as I said before I wanted a trivial way to mark messages as Spam or Ham (without using the command line each time).\u003c/p\u003e","title":"sa-learn, dovecot virtual users and virtual user configs"},{"content":"As I wrote before, we have a bunch of filers (and a ton of volumes w/ luns on them), that I need to monitor. At first, I tried the existing NetApp Nagios-Plugin(s), but they all use SNMP and with that I can either watch all volumes or none. And that didn\u0026rsquo;t satisfy me.\nDon\u0026rsquo;t get me wrong, the existing plugins are okay and I still use them for stuff (like GLOBALSTATUS or FAN/CPU/POWER) which isn\u0026rsquo;t present in the API or real hard to get at, however I wanted more. So I ended up looking at the NetApp API, and ended up writing a \u0026ldquo;short\u0026rdquo; plugin for Nagios using Perl.\nMaybe if I\u0026rsquo;m ever bored, I\u0026rsquo;ll rewrite it using C, but for now the Perl plugin has to suffice.\nSo far the plugin supports the following things:\nMonitoring FlexVolumes (simply watching the free space) Monitoring LUN space (the allocated space inside a FlexVolume for iSCSI/FC LUNs) Monitoring Snapshot space (the allocated space inside a FlexVolume for Snapshots) Monitoring SnapVault relations (and their age) Monitoring SnapMirror relations (and their age) The plugin will return performance data for most (if not all) of those classes. It needs a user on the filer you wish to monitor - which sadly needs to have the admin role.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 #!/usr/bin/perl -w # check_netapp-volume is a Nagios plugin to monitor a single volume # and it\u0026#39;s occupied space. # Copyright (c) 2013, Christian Thomas Heim \u0026lt;christian.heim@barfoo.org\u0026gt; # # This module is free software; you can redistribute it and/or modify it # under the terms of GNU General Public License (GPL) version 3. use strict; use warnings; use lib \u0026#34;/usr/lib/perl5/site_perl/5.10.0/NetApp\u0026#34;; use NaServer; use NaElement; use Nagios::Plugin; use File::Basename; # IMPORTANT: Nagios plugins could be executed using embedded perl in this case # the main routine would be executed as a subroutine and all the # declared subroutines would therefore be inner subroutines # This will cause all the global lexical variables not to stay shared # in the subroutines! # # All variables are therefore declared as package variables... use vars qw( $VERSION $PROGNAME $plugin $verbose $WAFL_VOL_RESERVE ); $VERSION = \u0026#39;0.1\u0026#39;; $PROGNAME = basename($0); $WAFL_VOL_RESERVE = \u0026#39;1.03\u0026#39;; $plugin = Nagios::Plugin-\u0026gt;new( usage=\u0026gt; \u0026#34;Usage: %s --hostname=\u0026lt;hostname\u0026gt; --cliuser=\u0026lt;cliuser\u0026gt; --clipassword=\u0026lt;clipassword\u0026gt; --flexvol=\u0026lt;volumename\u0026gt; ( -w|--warning=\u0026lt;warningthreshold\u0026gt; ) ( -c|--critical=\u0026lt;criticalthreshold\u0026gt; ) ( --snapreserve ) ( --lunspace ) ( --free ) ( --snapvault ) ( --snapmirror ) ( --aggr=aggr0 )\u0026#34;, version =\u0026gt; $VERSION, blurb =\u0026gt; \u0026#39;This plugin checks a single volume for it\\\u0026#39;s occupied space\u0026#39;, license =\u0026gt; \u0026#34;This nagios plugin is free software, and comes with ABSOLUTELY NO WARRANTY. It may be used, redistributed and/or modified under the terms of the GNU General Public Licence (see http://www.fsf.org/licensing/licenses/gpl.txt).\u0026#34;, extra =\u0026gt; \u0026#34; Examples: Checking the free space of a FlexVolume (default): $PROGNAME -H 10.0.0.35 -u root -p toaster123 --flexvol=sles_boot --free -w 85 -c 92 Checking the amount of lun space for a FlexVolume: $PROGNAME -H 10.0.0.35 -u root -p toaster123 --flexvol=sles_boot --lunspace Checking the Snap Reserve of a FlexVolume: $PROGNAME -H 10.0.0.35 -u root -p toaster123 --flexvol=sles_boot --snapreserve -w 80 -c 92 Checking the SnapVault age of a Qtree-transfer: $PROGNAME -H 10.0.0.35 -u root -p toaster123 --flexvol=sles_boot --snapvault -w 24 -c 26 Checking the SnapMirror age of a Qtree-transfer: $PROGNAME -H 10.0.0.35 -u root -p toaster123 --flexvol=sles_boot --snapmirror -w 24 -c 26 Checking the free space of an aggregate: $PROGNAME -H 10.0.0.35 -u root -p toaster123 --aggr=aggr0 -w 85 -c 92 \u0026#34; ); $plugin-\u0026gt;add_arg( spec =\u0026gt; \u0026#39;hostname|H=s\u0026#39;, help =\u0026gt; qq{-H, --hostname=STRING Hostname/IP-Adress to use for the check.}, required =\u0026gt; 1, ); $plugin-\u0026gt;add_arg( spec =\u0026gt; \u0026#39;cliuser=s\u0026#39;, help =\u0026gt; qq{--cliuser=STRING Username for CLI/API access.}, required =\u0026gt; 1, ); $plugin-\u0026gt;add_arg( spec =\u0026gt; \u0026#39;clipassword=s\u0026#39;, help =\u0026gt; qq{--clipassword=STRING Password for CLI/API access.}, required =\u0026gt; 1, ); $plugin-\u0026gt;add_arg( spec =\u0026gt; \u0026#39;flexvol=s\u0026#39;, help =\u0026gt; qq{-f, --flexvol=STRING FlexVolume that should be checked.}, required =\u0026gt; 0, ); $plugin-\u0026gt;add_arg( spec =\u0026gt; \u0026#39;aggr=s\u0026#39;, help =\u0026gt; qq{-a, --aggr=STRING Aggregate that should be checked.}, required =\u0026gt; 0, ); $plugin-\u0026gt;add_arg( spec =\u0026gt; \u0026#39;snapreserve\u0026#39;, help =\u0026gt; qq{--snapreserve Check the Snap Reserve of the selected volume.}, required =\u0026gt; 0, ); $plugin-\u0026gt;add_arg( spec =\u0026gt; \u0026#39;lunspace\u0026#39;, help =\u0026gt; qq{--lunspace Check if all LUNs and the Snapshot reserve fit into the volume.}, required =\u0026gt; 0, ); $plugin-\u0026gt;add_arg( spec =\u0026gt; \u0026#39;snapvault\u0026#39;, help =\u0026gt; qq{--snapvault Check the SnapVault age of a Qtree-SnapVault transfer.}, required =\u0026gt; 0, ); $plugin-\u0026gt;add_arg( spec =\u0026gt; \u0026#39;snapmirror\u0026#39;, help =\u0026gt; qq{--snapmirror Check the SnapMirror age of a Qtree-SnapVault transfer.}, required =\u0026gt; 0, ); $plugin-\u0026gt;add_arg( spec =\u0026gt; \u0026#39;sis\u0026#39;, help =\u0026gt; qq{--sis Check the Deduplication information.}, required =\u0026gt; 0, ); $plugin-\u0026gt;add_arg( spec =\u0026gt; \u0026#39;free\u0026#39;, help =\u0026gt; qq{--free Check the free space of a volume.}, required =\u0026gt; 0, ); $plugin-\u0026gt;add_arg( spec =\u0026gt; \u0026#39;warning|w=i\u0026#39;, help =\u0026gt; qq{-i, --warning=INTEGER Free space left in percent that should be considered WARNING.}, required =\u0026gt; 0, ); $plugin-\u0026gt;add_arg( spec =\u0026gt; \u0026#39;critical|c=i\u0026#39;, help =\u0026gt; qq{-c, --critical=INTEGER Free space left in percent that should be considered CRITICAL.}, required =\u0026gt; 0, ); # Parse arguments and process standard ones (e.g. usage, help, version) $plugin-\u0026gt;getopts; my ( $hostname, $username, $password, $aggregate, $flexvol, $warning, $critical, $stdout, $filer, $mode ); $hostname = $plugin-\u0026gt;opts-\u0026gt;hostname; $aggregate = $plugin-\u0026gt;opts-\u0026gt;aggr; $flexvol = $plugin-\u0026gt;opts-\u0026gt;flexvol; $username = $plugin-\u0026gt;opts-\u0026gt;cliuser; $password = $plugin-\u0026gt;opts-\u0026gt;clipassword; $warning = $plugin-\u0026gt;opts-\u0026gt;warning; $critical = $plugin-\u0026gt;opts-\u0026gt;critical; $verbose = $plugin-\u0026gt;opts-\u0026gt;verbose; if ( defined $plugin-\u0026gt;opts-\u0026gt;aggr ) { $mode = \u0026#34;aggregate\u0026#34;; } elsif ( defined $plugin-\u0026gt;opts-\u0026gt;lunspace ) { $mode = \u0026#34;lunspace\u0026#34;; } elsif ( defined $plugin-\u0026gt;opts-\u0026gt;snapreserve ) { $mode = \u0026#34;snapreserve\u0026#34;; } elsif ( defined $plugin-\u0026gt;opts-\u0026gt;snapvault ) { $mode = \u0026#34;snapvault\u0026#34;; } elsif ( defined $plugin-\u0026gt;opts-\u0026gt;snapmirror ) { $mode = \u0026#34;snapmirror\u0026#34;; } elsif ( defined $plugin-\u0026gt;opts-\u0026gt;sis ) { $mode = \u0026#34;sis\u0026#34;; } elsif ( defined $plugin-\u0026gt;opts-\u0026gt;free ) { $mode = \u0026#34;volspace\u0026#34;; } else { $mode = \u0026#34;volspace\u0026#34;; } $filer = NaServer-\u0026gt;new($hostname, 1, 3); $stdout = $filer-\u0026gt;set_style(\u0026#34;LOGIN\u0026#34;); if (ref ($stdout) eq \u0026#34;NaElement\u0026#34; \u0026amp;\u0026amp; $stdout-\u0026gt;results_errno != 0 ) { $plugin-\u0026gt;nagios_exit(UNKNOWN, \u0026#34;Unable to set login type. \u0026#34;. $stdout-\u0026gt;results_reason()); } $filer-\u0026gt;set_admin_user($username, $password); $stdout = $filer-\u0026gt;set_transport_type(\u0026#34;HTTPS\u0026#34;); if (ref ($stdout) eq \u0026#34;NaElement\u0026#34; \u0026amp;\u0026amp; $stdout-\u0026gt;results_errno != 0 ) { $plugin-\u0026gt;nagios_exit(UNKNOWN, \u0026#34;Unable to set transport to HTTPS. \u0026#34;. $stdout-\u0026gt;results_reason() ); } sub byteconv($) { my $c = shift; $c \u0026gt;= 1073741824 ? sprintf(\u0026#34;%0.2fTB\u0026#34;, $c/1073741824) : $c \u0026gt;= 1048576 ? sprintf(\u0026#34;%0.2fGB\u0026#34;, $c/1048576) : $c \u0026gt;= 1024 ? sprintf(\u0026#34;%0.2fMB\u0026#34;, $c/1024) : $c . \u0026#34;B\u0026#34;; } sub timeconv($) { my $secs = shift; if ($secs \u0026gt;= 365*24*60*60) { return sprintf \u0026#39;%.1f years\u0026#39;, $secs/(365*24*60*60) } elsif ($secs \u0026gt;= 24*60*60) { return sprintf \u0026#39;%.1f days\u0026#39;, $secs/(24*60*60) } elsif ($secs \u0026gt;= 60*60) { return sprintf \u0026#39;%.1f hours\u0026#39;, $secs/(60*60) } elsif ($secs \u0026gt;= 60) { return sprintf \u0026#39;%.1f minutes\u0026#39;, $secs/(60) } else { return sprintf \u0026#39;%.1f seconds\u0026#39;, $secs } } sub aggrspaceinfo { my $session = $_[0]; my $aggr = $_[1]; my $out; my $status; my @result; my $aggrinfo; my $aggr_size; my $aggr_free; my $aggr_used; my $aggr_vol_alloc; my $aggr_vol_used; my %aggri = (); $out = $session-\u0026gt;invoke(\u0026#34;aggr-space-list-info\u0026#34;, \u0026#34;aggregate\u0026#34;, $aggr); if ($out-\u0026gt;results_status() eq \u0026#34;failed\u0026#34;) { $plugin-\u0026gt;nagios_exit(UNKNOWN, $out-\u0026gt;results_reason()); } $status = $out-\u0026gt;child_get(\u0026#34;aggregates\u0026#34;); if ($status-\u0026gt;children_get() eq 0) { # snapreserve might be 0 } elsif ($status) { @result = $status-\u0026gt;children_get(); } else { $plugin-\u0026gt;nagios_exit(UNKNOWN, \u0026#34;Unable to process result.\u0026#34;); } foreach $aggrinfo (@result){ $aggr_size = $aggrinfo-\u0026gt;child_get_string(\u0026#34;size-nominal\u0026#34;)/1024; $aggr_free = $aggrinfo-\u0026gt;child_get_string(\u0026#34;size-free\u0026#34;)/1024; $aggr_used = $aggrinfo-\u0026gt;child_get_string(\u0026#34;size-used\u0026#34;)/1024; $aggr_vol_alloc = $aggrinfo-\u0026gt;child_get_string(\u0026#34;size-volume-allocated\u0026#34;)/1024; $aggr_vol_used = $aggrinfo-\u0026gt;child_get_string(\u0026#34;size-volume-used\u0026#34;)/1024; if ($verbose) { print(\u0026#34;aggr_size: \u0026#34;. byteconv($aggr_size) .\u0026#34;\\n\u0026#34;); print(\u0026#34;aggr_used: \u0026#34;. byteconv($aggr_used) .\u0026#34;\\n\u0026#34;); print(\u0026#34;aggr_free: \u0026#34;. byteconv($aggr_free) .\u0026#34;\\n\u0026#34;); print(\u0026#34;aggr_vol_allocated: \u0026#34;. byteconv($aggr_vol_alloc) .\u0026#34;\\n\u0026#34;); print(\u0026#34;aggr_vol_used: \u0026#34;. byteconv($aggr_vol_used) .\u0026#34;\\n\u0026#34;); } } $aggri{\u0026#34;aggr_size\u0026#34;} = $aggr_size; $aggri{\u0026#34;aggr_free\u0026#34;} = $aggr_free; $aggri{\u0026#34;aggr_used\u0026#34;} = $aggr_used; $aggri{\u0026#34;aggr_vol_alloc\u0026#34;} = $aggr_vol_alloc; $aggri{\u0026#34;aggr_vol_used\u0026#34;} = $aggr_vol_used; return (\\%aggri); } sub snaplistinfo { my $session = $_[0]; my $vol = $_[1]; my $out; my $status; my @result; my $snapinfo; my $snap_used; my $snap_cumulative; my %snapi = (); $out = $session-\u0026gt;invoke(\u0026#34;snapshot-list-info\u0026#34;, \u0026#34;target-type\u0026#34;, \u0026#34;volume\u0026#34;, \u0026#34;target-name\u0026#34;, $vol); if ($out-\u0026gt;results_status() eq \u0026#34;failed\u0026#34;) { $plugin-\u0026gt;nagios_exit(UNKNOWN, $out-\u0026gt;results_reason()); } $status = $out-\u0026gt;child_get(\u0026#34;snapshots\u0026#34;); if ($status-\u0026gt;children_get() eq 0) { # snapreserve might be 0 } elsif ($status) { @result = $status-\u0026gt;children_get(); } else { $plugin-\u0026gt;nagios_exit(UNKNOWN, \u0026#34;Unable to process result.\u0026#34;); } foreach $snapinfo (@result){ $snap_used += $snapinfo-\u0026gt;child_get_string(\u0026#34;total\u0026#34;); if ($verbose) { print(\u0026#34;snap_name: \u0026#34;. $snapinfo-\u0026gt;child_get_string(\u0026#34;name\u0026#34;) .\u0026#34;\\n\u0026#34;); print(\u0026#34;snap_size: \u0026#34;. byteconv($snapinfo-\u0026gt;child_get_string(\u0026#34;total\u0026#34;)) .\u0026#34;\\n\u0026#34;); print(\u0026#34;snap_used: \u0026#34; . byteconv($snap_used) .\u0026#34;\\n\u0026#34;); } } # Another fix for API misbehaviour. If there are no snapshots inside # a volume, the API returns nothing ... if ( !$snap_used ) { $snap_used = \u0026#34;0\u0026#34; }; $snapi{\u0026#34;snap_total\u0026#34;} = $snap_used; return (\\%snapi); } sub vollistinfo { my $session = $_[0]; my $vol = $_[1]; my $out; my $status; my @result; my $volinfo; my %voli; my $vol_size_avail; my $vol_size_used; my $vol_size_total; my $vol_snap_reserve; $out = $session-\u0026gt;invoke(\u0026#34;volume-list-info\u0026#34;, \u0026#34;volume\u0026#34;, $vol); if ($out-\u0026gt;results_status() eq \u0026#34;failed\u0026#34;) { $plugin-\u0026gt;nagios_exit(UNKNOWN, $out-\u0026gt;results_reason()); } $status = $out-\u0026gt;child_get(\u0026#34;volumes\u0026#34;); if ($status-\u0026gt;children_get() eq 0) { # No output $plugin-\u0026gt;nagios_exit(UNKNOWN, \u0026#34;FlexVol not found.\u0026#34;); } elsif ($status) { @result = $status-\u0026gt;children_get(); } else { $plugin-\u0026gt;nagios_exit(UNKNOWN, \u0026#34;Unable to process result.\u0026#34;); } # Get the total size used in this volume for luns foreach $volinfo (@result){ if ($verbose) { print(\u0026#34;vol-size-avail: \u0026#34; . byteconv($volinfo-\u0026gt;child_get_string(\u0026#34;size-available\u0026#34;)/1024) .\u0026#34;\\n\u0026#34;); print(\u0026#34;vol-size-used: \u0026#34; . byteconv($volinfo-\u0026gt;child_get_string(\u0026#34;size-used\u0026#34;)/1024) .\u0026#34;\\n\u0026#34;); print(\u0026#34;vol-size-total: \u0026#34; . byteconv($volinfo-\u0026gt;child_get_string(\u0026#34;size-total\u0026#34;)/1024) .\u0026#34;\\n\u0026#34;); print(\u0026#34;snapshot-blocks-reserved: \u0026#34; . byteconv($volinfo-\u0026gt;child_get_string(\u0026#34;snapshot-blocks-reserved\u0026#34;)) .\u0026#34;\\n\u0026#34;); print(\u0026#34;snapshot-percent-reserved: \u0026#34; . $volinfo-\u0026gt;child_get_string(\u0026#34;snapshot-percent-reserved\u0026#34;) .\u0026#34;\\n\u0026#34;); } $vol_size_avail = $volinfo-\u0026gt;child_get_string(\u0026#34;size-available\u0026#34;)/1024; $vol_size_used = $volinfo-\u0026gt;child_get_string(\u0026#34;size-used\u0026#34;)/1024; $vol_size_total = $volinfo-\u0026gt;child_get_string(\u0026#34;size-total\u0026#34;)/1024; $vol_snap_reserve = $volinfo-\u0026gt;child_get_string(\u0026#34;snapshot-blocks-reserved\u0026#34;); } $voli{\u0026#34;vol_size_avail\u0026#34;} = $vol_size_avail; $voli{\u0026#34;vol_size_used\u0026#34;} = $vol_size_used; $voli{\u0026#34;vol_size_total\u0026#34;} = $vol_size_total; $voli{\u0026#34;vol_snap_reserve\u0026#34;} = $vol_snap_reserve; return (\\%voli); } sub lunlistinfo { my $session = $_[0]; my $vol = $_[1]; my $out; my $status; my @result; my $luninfo; my $lunsize_total; my $lunsize_used; my %luni = (); $out = $session-\u0026gt;invoke(\u0026#34;lun-list-info\u0026#34;, \u0026#34;volume-name\u0026#34;, $vol); if ($out-\u0026gt;results_status() eq \u0026#34;failed\u0026#34;) { $plugin-\u0026gt;nagios_exit(UNKNOWN, $out-\u0026gt;results_reason()); } $status = $out-\u0026gt;child_get(\u0026#34;luns\u0026#34;); if ($status-\u0026gt;children_get() eq 0) { # No output $plugin-\u0026gt;nagios_exit(UNKNOWN, \u0026#34;FlexVol not found.\u0026#34;); } elsif ($status) { @result = $status-\u0026gt;children_get(); } else { $plugin-\u0026gt;nagios_exit(UNKNOWN, \u0026#34;Unable to process result.\u0026#34;); } # Get the total size used in this volume for luns foreach $luninfo (@result){ if ($verbose) { print(\u0026#34;alignment: \u0026#34; . $luninfo-\u0026gt;child_get_string(\u0026#34;alignment\u0026#34;) .\u0026#34;\\n\u0026#34;); print(\u0026#34;mapped: \u0026#34; . $luninfo-\u0026gt;child_get_string(\u0026#34;mapped\u0026#34;) .\u0026#34;\\n\u0026#34;); print(\u0026#34;online: \u0026#34; . $luninfo-\u0026gt;child_get_string(\u0026#34;online\u0026#34;) .\u0026#34;\\n\u0026#34;); print(\u0026#34;lun-size: \u0026#34; . byteconv($luninfo-\u0026gt;child_get_string(\u0026#34;size\u0026#34;)/1024) .\u0026#34;\\n\u0026#34;); print(\u0026#34;lun-size-used: \u0026#34; . byteconv($luninfo-\u0026gt;child_get_string(\u0026#34;size-used\u0026#34;)/1024) .\u0026#34;\\n\u0026#34;); } $lunsize_total += $luninfo-\u0026gt;child_get_string(\u0026#34;size\u0026#34;)/1024; $lunsize_used += $luninfo-\u0026gt;child_get_string(\u0026#34;size-used\u0026#34;)/1024; } if ( $lunsize_used \u0026gt; $lunsize_total ) { my $tmp_used = $lunsize_used; my $tmp_total = $lunsize_total; if ($verbose) { print(\u0026#34;lun-size(rewritten): \u0026#34;. byteconv($tmp_total) .\u0026#34;\\n\u0026#34;); print(\u0026#34;lun-size-used(rewritten): \u0026#34;. byteconv($tmp_used) .\u0026#34;\\n\u0026#34;); } $lunsize_total = $tmp_used; $lunsize_used = $tmp_total; } $luni{\u0026#34;lun_size_total\u0026#34;} = $lunsize_total; $luni{\u0026#34;lun_size_used\u0026#34;} = $lunsize_used; $luni{\u0026#34;lun_size_free\u0026#34;} = $lunsize_total - $lunsize_used; return (\\%luni); } sub snapvaultinfo { my $session = $_[0]; my $vol = $_[1]; # Define all variables used in this sub-routine as local thus avoiding # variable clashing and other - potential dangerous stuff my $out; my $status; my @result; my $sv_state; my $sv_status; my $sv_progress; my $sv_lag_time; my $sv_error; my $svinfo; my %svi = (); # Run the API command with the full vol-path constructed as /vol/$flexvol/sv $out = $session-\u0026gt;invoke(\u0026#34;snapvault-primary-get-relationship-status\u0026#34;, \u0026#34;system-path\u0026#34;, \u0026#34;/vol/\u0026#34;. $vol .\u0026#34;/sv\u0026#34;); # If results_status equals failed, die. if ($out-\u0026gt;results_status() eq \u0026#34;failed\u0026#34;) { $plugin-\u0026gt;nagios_exit(UNKNOWN, $out-\u0026gt;results_reason()); } # Get the API status element $status = $out-\u0026gt;child_get(\u0026#34;status\u0026#34;); # Die if children_get equals 0, otherwise fill the array if ($status-\u0026gt;children_get() eq 0) { $plugin-\u0026gt;nagios_exit(UNKNOWN, \u0026#34;FlexVol not found.\u0026#34;); } elsif ($status) { @result = $status-\u0026gt;children_get(); } else { $plugin-\u0026gt;nagios_exit(UNKNOWN, \u0026#34;Unable to process result.\u0026#34;); } # Walk through each array element (there should only be one, as we # explicitly selected only a single volume) foreach $svinfo (@result){ $sv_state = $svinfo-\u0026gt;child_get_string(\u0026#34;state\u0026#34;); $sv_status = $svinfo-\u0026gt;child_get_string(\u0026#34;status\u0026#34;); $sv_progress = $svinfo-\u0026gt;child_get_string(\u0026#34;transfer-progress\u0026#34;); $sv_lag_time = $svinfo-\u0026gt;child_get_string(\u0026#34;lag-time\u0026#34;); $sv_error = $svinfo-\u0026gt;child_get_string(\u0026#34;current-transfer-error\u0026#34;); } # Sadly the API isn\u0026#39;t written that well ... if there is no current-transfer-error # the whole element doesn\u0026#39;t exist. So in order that we get through \u0026#39;use strict\u0026#39; # we need a small hack. if ( !$sv_error ) { $sv_error = \u0026#34;none\u0026#34; }; if ( !$sv_progress ) { $sv_progress = \u0026#34;none\u0026#34; }; if ( !$sv_lag_time ) { $sv_lag_time = 0 }; if ( $verbose ) { print(\u0026#34;sv_state: $sv_state\\n\u0026#34;); print(\u0026#34;sv_status: $sv_status\\n\u0026#34;); print(\u0026#34;sv_lag-time: \u0026#34;. $sv_lag_time .\u0026#34;s\\n\u0026#34;); print(\u0026#34;sv_progress: $sv_progress\\n\u0026#34;); print(\u0026#34;sv_transfer-error: $sv_error\\n\u0026#34;); } # Add the below values as hash elements $svi{\u0026#34;sv_state\u0026#34;} = $sv_state; $svi{\u0026#34;sv_status\u0026#34;} = $sv_status; $svi{\u0026#34;sv_progress\u0026#34;} = $sv_progress; $svi{\u0026#34;sv_lag_time\u0026#34;} = $sv_lag_time; $svi{\u0026#34;sv_error\u0026#34;} = $sv_error; # Return the hash return (\\%svi); } sub snapmirrorinfo { my $session = $_[0]; my $vol = $_[1]; # Define all variables used in this sub-routine as local thus avoiding # variable clashing and other - potential dangerous stuff my $out; my $status; my @result; my $sm_state; my $sm_status; my $sm_progress; my $sm_lag_time; my $sm_error; my $sminfo; my %smi = (); # Run the API command with the FlexVol name $out = $session-\u0026gt;invoke(\u0026#34;snapmirror-get-status\u0026#34;, \u0026#34;location\u0026#34;, $vol); # If results_status equals failed, die. if ($out-\u0026gt;results_status() eq \u0026#34;failed\u0026#34;) { $plugin-\u0026gt;nagios_exit(UNKNOWN, $out-\u0026gt;results_reason()); } # Get the API status element $status = $out-\u0026gt;child_get(\u0026#34;snapmirror-status\u0026#34;); # Die if $status is unset, otherwise fill the array if ($status) { @result = $status-\u0026gt;children_get(); } else { $plugin-\u0026gt;nagios_exit(UNKNOWN, \u0026#34;Unable to process result.\u0026#34;); } # Walk through each array element (there should only be one, as we # explicitly selected only a single volume) foreach $sminfo (@result){ $sm_state = $sminfo-\u0026gt;child_get_string(\u0026#34;state\u0026#34;); $sm_status = $sminfo-\u0026gt;child_get_string(\u0026#34;status\u0026#34;); $sm_progress = $sminfo-\u0026gt;child_get_string(\u0026#34;transfer-progress\u0026#34;); $sm_lag_time = $sminfo-\u0026gt;child_get_string(\u0026#34;lag-time\u0026#34;); $sm_error = $sminfo-\u0026gt;child_get_string(\u0026#34;current-transfer-error\u0026#34;); } # Sadly the API isn\u0026#39;t written that well ... if there is no current-transfer-error # the whole element doesn\u0026#39;t exist. So in order that we get through \u0026#39;use strict\u0026#39; # we need a small hack. if ( !$sm_error ) { $sm_error = \u0026#34;none\u0026#34; }; if ( !$sm_progress ) { $sm_progress = 0 }; if ( $verbose ) { print(\u0026#34;sm_state: $sm_state\\n\u0026#34;); print(\u0026#34;sm_status: $sm_status\\n\u0026#34;); print(\u0026#34;sm_lag-time: \u0026#34;. $sm_lag_time .\u0026#34;s\\n\u0026#34;); print(\u0026#34;sm_progress: $sm_progress\\n\u0026#34;); print(\u0026#34;sm_transfer-error: $sm_error\\n\u0026#34;); } # Add the below values as hash elements $smi{\u0026#34;sm_state\u0026#34;} = $sm_state; $smi{\u0026#34;sm_status\u0026#34;} = $sm_status; $smi{\u0026#34;sm_progress\u0026#34;} = $sm_progress; $smi{\u0026#34;sm_lag_time\u0026#34;} = $sm_lag_time; $smi{\u0026#34;sm_error\u0026#34;} = $sm_error; # Return the hash return (\\%smi); } sub sisinfo { my $session = $_[0]; my $vol = $_[1]; # Define all variables used in this sub-routine as local thus avoiding # variable clashing and other - potential dangerous stuff my $out; my $status; my @result; my $sis_state; my $sis_changelog_usage; my $sis_stale_fingerprint; my $sis_last_operation_end; my $sis_last_success_operation; my $sisinfo; my %sis = (); # Run the API command with the FlexVol name $out = $session-\u0026gt;invoke(\u0026#34;sis-status\u0026#34;, \u0026#34;path\u0026#34;, \u0026#39;/vol/\u0026#39;.$vol, \u0026#34;verbose\u0026#34;, \u0026#34;true\u0026#34;); # If results_status equals failed, die. if ($out-\u0026gt;results_status() eq \u0026#34;failed\u0026#34;) { $plugin-\u0026gt;nagios_exit(UNKNOWN, $out-\u0026gt;results_reason()); } # Get the API status element $status = $out-\u0026gt;child_get(\u0026#34;sis-object\u0026#34;); # Die if $status is unset, otherwise fill the array if ($status) { @result = $status-\u0026gt;children_get(); } else { $plugin-\u0026gt;nagios_exit(UNKNOWN, \u0026#34;Unable to process result.\u0026#34;); } # Walk through each array element (there should only be one, as we # explicitly selected only a single volume) foreach $sisinfo (@result){ $sis_state = $sisinfo-\u0026gt;child_get_string(\u0026#34;state\u0026#34;); $sis_stale_fingerprint = $sisinfo-\u0026gt;child_get_string(\u0026#34;stale-fingerprint-percentage\u0026#34;); $sis_changelog_usage = $sisinfo-\u0026gt;child_get_string(\u0026#34;changelog-used-percent\u0026#34;); $sis_last_operation_end = $sisinfo-\u0026gt;child_get_string(\u0026#34;last-operation-end-timestamp\u0026#34;); $sis_last_success_operation = $sisinfo-\u0026gt;child_get_string(\u0026#34;last-success-operation-end-timestamp\u0026#34;); } if ( $verbose ) { print(\u0026#34;sis_state $sis_state\\n\u0026#34;); print(\u0026#34;sis_changelog_usage $sis_changelog_usage\\n\u0026#34;); print(\u0026#34;sis_stale_fingerprint $sis_stale_fingerprint\\n\u0026#34;); print(\u0026#34;sis_last_operation_end \u0026#34;.scalar(localtime($sis_last_operation_end)).\u0026#34;\\n\u0026#34;); print(\u0026#34;sis_last_success_operation \u0026#34;.scalar(localtime($sis_last_success_operation)).\u0026#34;\\n\u0026#34;); print(\u0026#34;timestamps:\\n\u0026#34;); print(\u0026#34;sis_last_operation_end: $sis_last_operation_end\\n\u0026#34;); print(\u0026#34;sis_last_success_operation: $sis_last_success_operation\\n\u0026#34;); print(\u0026#34;current_time: \u0026#34;.time.\u0026#34;\\n\u0026#34;); } # Add the below values as hash elements $sis{\u0026#34;sis_state\u0026#34;} = $sis_state; $sis{\u0026#34;sis_changelog_usage\u0026#34;} = $sis_changelog_usage; $sis{\u0026#34;sis_stale_fingerprint\u0026#34;} = $sis_stale_fingerprint; $sis{\u0026#34;sis_last_operation_end\u0026#34;} = $sis_last_operation_end; $sis{\u0026#34;sis_last_success_operation\u0026#34;} = $sis_last_success_operation; # Return the hash return (\\%sis); } if ( $mode eq \u0026#34;aggregate\u0026#34; ) { # Get the aggregate information my $info = aggrspaceinfo($filer, $aggregate); my $aggr_size = $info-\u0026gt;{\u0026#34;aggr_size\u0026#34;}; my $aggr_free = $info-\u0026gt;{\u0026#34;aggr_free\u0026#34;}; my $aggr_used = $info-\u0026gt;{\u0026#34;aggr_used\u0026#34;}; my $aggr_vol_alloc = $info-\u0026gt;{\u0026#34;aggr_vol_alloc\u0026#34;}; my $aggr_vol_used = $info-\u0026gt;{\u0026#34;aggr_vol_used\u0026#34;}; $plugin-\u0026gt;set_thresholds( warning =\u0026gt; $warning, critical =\u0026gt; $critical, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;aggr_size\u0026#34;, value =\u0026gt; $aggr_size, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;aggr_free\u0026#34;, value =\u0026gt; $aggr_free, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;aggr_used\u0026#34;, value =\u0026gt; $aggr_used, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;aggr_vol_alloc\u0026#34;, value =\u0026gt; $aggr_vol_alloc, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); # Calculate the warning threshold if (defined $warning) { $warning = sprintf \u0026#34;%.0f\u0026#34;, $aggr_size / 100 * $warning; if ($verbose) { print(\u0026#34;warning: \u0026#34;. $warning .\u0026#34;\\n\u0026#34;) }; } # Calculate the critical threshold if (defined $critical) { $critical = sprintf \u0026#34;%.0f\u0026#34;, $aggr_size / 100 * $critical; if ($verbose) { print(\u0026#34;critical: \u0026#34;. $critical .\u0026#34;\\n\u0026#34;) }; } if ( defined $warning \u0026amp;\u0026amp; defined $critical ) { if ( ($aggr_used \u0026gt; $warning) \u0026amp;\u0026amp; ($aggr_used \u0026lt; $critical) ) { $plugin-\u0026gt;nagios_exit(WARNING, \u0026#34;Aggregate \u0026#34;. $aggregate .\u0026#34; has grown above the defined WARNING threshold (\u0026#34;. byteconv($warning) .\u0026#34;).\u0026#34;); } if ( ($aggr_used \u0026gt; $warning) \u0026amp;\u0026amp; ($aggr_used \u0026gt; $critical) ) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;Aggregate \u0026#34;. $aggregate .\u0026#34; has grown above the defined CRITICAL threshold (\u0026#34;. byteconv($warning) .\u0026#34;).\u0026#34;); } if ( ($critical \u0026gt; $aggr_used) \u0026amp;\u0026amp; ($warning \u0026gt; $aggr_used) \u0026amp;\u0026amp; ($aggr_size \u0026gt; $aggr_used) ) { $plugin-\u0026gt;nagios_exit(OK, \u0026#34;Aggregate \u0026#34;. $aggregate .\u0026#34; is ok.\u0026#34;); } } else { # Check the volume allocation if ( ($aggr_vol_alloc \u0026gt; $aggr_size) \u0026amp;\u0026amp; ($aggr_vol_used \u0026lt; $aggr_size) ) { $plugin-\u0026gt;nagios_exit(WARNING, \u0026#34;Aggregate \u0026#34;. $aggregate .\u0026#34; is overcommited, but has enough free space to accomodate all volumes for now.\u0026#34;); } if ( ($aggr_vol_alloc \u0026lt; $aggr_vol_used) || ($aggr_size \u0026gt; $aggr_used) ) { $plugin-\u0026gt;nagios_exit(OK, \u0026#34;Aggregate \u0026#34;. $aggregate .\u0026#34; is ok.\u0026#34;); } } } elsif ( $mode eq \u0026#34;lunspace\u0026#34; ) { # Get a list of all luns and sum them up # Get the snapreserve my $luns = lunlistinfo($filer, $flexvol); my $vols = vollistinfo($filer, $flexvol); my $snap = snaplistinfo($filer, $flexvol); # lun info my $lun_avail = $luns-\u0026gt;{\u0026#34;lun_size_free\u0026#34;}; my $lun_used = $luns-\u0026gt;{\u0026#34;lun_size_used\u0026#34;}; my $lun_total = $luns-\u0026gt;{\u0026#34;lun_size_total\u0026#34;}; # vol info (Data Space) my $vol_avail = $vols-\u0026gt;{\u0026#34;vol_size_avail\u0026#34;}; my $vol_used = $vols-\u0026gt;{\u0026#34;vol_size_used\u0026#34;}; my $vol_total = $vols-\u0026gt;{\u0026#34;vol_size_total\u0026#34;}; # snap info (Snapshot Reserve) my $snap_avail = $vols-\u0026gt;{\u0026#34;vol_snap_reserve\u0026#34;} - $snap-\u0026gt;{\u0026#34;snap_total\u0026#34;}; my $snap_used = $snap-\u0026gt;{\u0026#34;snap_total\u0026#34;}; my $snap_total = $vols-\u0026gt;{\u0026#34;vol_snap_reserve\u0026#34;}; # flex info my $flex_used = $vol_used + $snap_used; my $flex_total = $vol_total + $snap_total; my $flex_avail = $flex_total - $flex_used; $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;lun_total\u0026#34;, value =\u0026gt; $lun_total, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;lun_used\u0026#34;, value =\u0026gt; $lun_used, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;lun_avail\u0026#34;, value =\u0026gt; $lun_avail, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;vol_total\u0026#34;, value =\u0026gt; $vol_total, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;vol_used\u0026#34;, value =\u0026gt; $vol_used, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;vol_avail\u0026#34;, value =\u0026gt; $vol_avail, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;flex_total\u0026#34;, value =\u0026gt; $flex_total, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;flex_used\u0026#34;, value =\u0026gt; $flex_used, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;flex_avail\u0026#34;, value =\u0026gt; $flex_avail, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;snap_total\u0026#34;, value =\u0026gt; $snap_total, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;snap_used\u0026#34;, value =\u0026gt; $snap_used, uom =\u0026gt; \u0026#39;KB\u0026#39;, threshold =\u0026gt; $plugin-\u0026gt;threshold, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;snap_avail\u0026#34;, value =\u0026gt; $snap_avail, uom =\u0026gt; \u0026#39;KB\u0026#39;, threshold =\u0026gt; $plugin-\u0026gt;threshold, ); # Only consider snapshot reserve stuff if it is above 0 if ( $snap_total \u0026gt; 0 ) { # FlexVol still has space left if ( ($lun_used + $snap_used) \u0026lt; $flex_total ) { if ( $snap_used \u0026gt;= $snap_total \u0026amp;\u0026amp; $lun_used \u0026lt; $lun_total ) { $plugin-\u0026gt;nagios_exit(WARNING, \u0026#34;Snapshot Reserve lending space from Data space. Missing capacity: \u0026#34;. byteconv($snap_used-$snap_total)); } if ( $lun_used \u0026gt;= $lun_total \u0026amp;\u0026amp; $snap_used \u0026lt; $snap_total ) { $plugin-\u0026gt;nagios_exit(WARNING, \u0026#34;Data Space lending space from Snapshot Reserve. Missing capacity: \u0026#34;. byteconv($lun_used-$lun_total)); } if ( $lun_used \u0026lt; $lun_total \u0026amp;\u0026amp; $snap_used \u0026lt; $snap_total ) { $plugin-\u0026gt;nagios_exit(OK, \u0026#34;Data Space (\u0026#34;. byteconv($lun_total) .\u0026#34;) and Snapshot Reserve (\u0026#34;. byteconv($snap_total) .\u0026#34;) fit into FlexVol (\u0026#34;. byteconv($flex_total). \u0026#34;). \u0026#34;); } } else { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;Data Space and Snapshot Reserve are out out space. Missing capacity (Data): \u0026#34;. byteconv($lun_used-$lun_total) .\u0026#34; (Snap): \u0026#34;. byteconv($snap_used-$snap_total)); } } if ( $snap_total == 0 ) { # FlexVol still has space left if ( $lun_used \u0026lt; $flex_total \u0026amp;\u0026amp; $lun_used \u0026lt; $lun_total ) { $plugin-\u0026gt;nagios_exit(OK, \u0026#34;Data Space (\u0026#34;. byteconv($lun_total) .\u0026#34;) and Snapshot Reserve (\u0026#34;. byteconv($snap_total) .\u0026#34;) fit into FlexVol (\u0026#34;. byteconv($flex_total). \u0026#34;). \u0026#34;); } else { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;Data Space and Snapshot Reserve are out out space. Missing capacity (Data): \u0026#34;. byteconv($lun_used-$lun_total) .\u0026#34; (Snap): \u0026#34;. byteconv($snap_used-$snap_total)); } } } elsif ( $mode eq \u0026#34;volspace\u0026#34; ) { my $vols = vollistinfo($filer, $flexvol); # Just get the volume size and the free space left # vol_size_avail: Free space inside the volume # vol_size_used: Used space inside the volume my $vol_size_a = sprintf \u0026#34;%.0f\u0026#34;, $vols-\u0026gt;{\u0026#34;vol_size_avail\u0026#34;}; my $vol_size_u = sprintf \u0026#34;%.0f\u0026#34;, $vols-\u0026gt;{\u0026#34;vol_size_used\u0026#34;}; my $vol_size_t = sprintf \u0026#34;%.0f\u0026#34;, $vol_size_a + $vol_size_u; if ( defined $warning \u0026amp;\u0026amp; defined $critical) { $warning = sprintf \u0026#34;%.0f\u0026#34;, $vol_size_t / 100 * $warning; $critical = sprintf \u0026#34;%.0f\u0026#34;, $vol_size_t / 100 * $critical; if ($verbose) { print(\u0026#34;warning: \u0026#34;. $warning .\u0026#34;\\n\u0026#34;) }; if ($verbose) { print(\u0026#34;critical: \u0026#34;. $critical .\u0026#34;\\n\u0026#34;) }; $plugin-\u0026gt;set_thresholds( warning =\u0026gt; $warning, critical =\u0026gt; $critical, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;volspace_used\u0026#34;, value =\u0026gt; $vol_size_u, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;volspace_total\u0026#34;, value =\u0026gt; $vol_size_t, uom =\u0026gt; \u0026#39;KB\u0026#39;, threshold =\u0026gt; $plugin-\u0026gt;threshold, ); $plugin-\u0026gt;nagios_exit($plugin-\u0026gt;check_threshold($vol_size_u), \u0026#34;FlexVol remaining space: \u0026#34;. byteconv($vol_size_a)); } else { $plugin-\u0026gt;nagios_exit(UNKNOWN, \u0026#34;You need warning and critical to use the volspace mode.\u0026#34;); } } elsif ( $mode eq \u0026#34;snapreserve\u0026#34; ) { my $vols = vollistinfo($filer, $flexvol); my $snap = snaplistinfo($filer, $flexvol); # Get the snapreserve and the used snapreserve my $snap_total = $vols-\u0026gt;{\u0026#34;vol_snap_reserve\u0026#34;}; my $snap_used = $snap-\u0026gt;{\u0026#34;snap_total\u0026#34;}; my $snap_avail = $vols-\u0026gt;{\u0026#34;vol_snap_reserve\u0026#34;} - $snap-\u0026gt;{\u0026#34;snap_total\u0026#34;}; my $vol_total = $vols-\u0026gt;{\u0026#34;vol_size_total\u0026#34;}; my $vol_used = $vols-\u0026gt;{\u0026#34;vol_size_used\u0026#34;}; my $vol_avail = $vols-\u0026gt;{\u0026#34;vol_size_avail\u0026#34;}; if ( defined $warning \u0026amp;\u0026amp; defined $critical) { $warning = sprintf \u0026#34;%.0f\u0026#34;, $snap_total / 100 * $warning; $critical = sprintf \u0026#34;%.0f\u0026#34;, $snap_total / 100 * $critical; if ($verbose) { print(\u0026#34;warning: \u0026#34;. $warning .\u0026#34;\\n\u0026#34;); print(\u0026#34;critical: \u0026#34;. $critical .\u0026#34;\\n\u0026#34;); } $plugin-\u0026gt;set_thresholds( warning =\u0026gt; $warning, critical =\u0026gt; $critical, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;snapreserve_total\u0026#34;, value =\u0026gt; $snap_total, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;snapreserve_used\u0026#34;, value =\u0026gt; $snap_used, uom =\u0026gt; \u0026#39;KB\u0026#39;, threshold =\u0026gt; $plugin-\u0026gt;threshold, ); if ( $snap_total \u0026gt; 0 ) { my $snap_percent = sprintf \u0026#34;%.0f\u0026#34;, $snap_used / $snap_total * 100; $plugin-\u0026gt;nagios_exit($plugin-\u0026gt;check_threshold($snap_used), \u0026#34;FlexVol Snap Reserve used: \u0026#34;. byteconv($snap_used). \u0026#34; (\u0026#34;. $snap_percent .\u0026#34;%)\u0026#34;); } else { $plugin-\u0026gt;nagios_exit($plugin-\u0026gt;check_threshold($snap_used), \u0026#34;FlexVol Snap Reserve used: \u0026#34;. byteconv($snap_used)); } } else { $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;snapreserve_total\u0026#34;, value =\u0026gt; $snap_total, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;snapreserve_used\u0026#34;, value =\u0026gt; $snap_used, uom =\u0026gt; \u0026#39;KB\u0026#39;, ); if ( $vol_used \u0026lt; $vol_total \u0026amp;\u0026amp; $snap_used \u0026gt; $snap_total ) { $plugin-\u0026gt;nagios_exit(WARNING, \u0026#34;Snapshots are lending space from data space (Used: \u0026#34;. byteconv($snap_used) .\u0026#34; vs. Reserve: \u0026#34;. byteconv($snap_total) .\u0026#34;)\u0026#34;); } elsif ( $vol_used \u0026gt; $vol_total \u0026amp;\u0026amp; $snap_used \u0026gt; $snap_total ) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;Snapshots are lending space from data space, the volume is out of space and resulted in offline luns!\u0026#34;); } else { $plugin-\u0026gt;nagios_exit(OK, \u0026#34;Snap reserve (\u0026#34;. byteconv($snap_total) .\u0026#34;) of FlexVol $flexvol is OK.\u0026#34;); } } } elsif ( $mode eq \u0026#34;snapvault\u0026#34; ) { my $sv = snapvaultinfo($filer, $flexvol); if ( defined $warning ) { $warning = $warning*60*60 }; if ( defined $critical ) { $critical = $critical*60*60 }; my $sv_lag_time = $sv-\u0026gt;{\u0026#34;sv_lag_time\u0026#34;}; my $sv_state = $sv-\u0026gt;{\u0026#34;sv_state\u0026#34;}; my $sv_status = $sv-\u0026gt;{\u0026#34;sv_status\u0026#34;}; my $sv_progress = $sv-\u0026gt;{\u0026#34;sv_progress\u0026#34;}; my $sv_error = $sv-\u0026gt;{\u0026#34;sv_error\u0026#34;}; if ( defined $warning \u0026amp;\u0026amp; defined $critical ) { $plugin-\u0026gt;set_thresholds( warning =\u0026gt; $warning, critical =\u0026gt; $critical, ); } $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;snapvault_lag_time\u0026#34;, value =\u0026gt; $sv_lag_time, uom =\u0026gt; \u0026#39;s\u0026#39;, threshold =\u0026gt; $plugin-\u0026gt;threshold, ); if ($sv_state eq \u0026#34;snapvaulted\u0026#34; \u0026amp;\u0026amp; $sv_status eq \u0026#34;quiescing\u0026#34; \u0026amp;\u0026amp; $sv_error eq \u0026#34;could not register source qtree information\u0026#34;) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;SnapVault in stuck in quiescing-state - no space left?\u0026#34;); } elsif ($sv_state eq \u0026#34;snapvaulted\u0026#34; \u0026amp;\u0026amp; $sv_status eq \u0026#34;quiescing\u0026#34; \u0026amp;\u0026amp; $sv_error eq \u0026#34;replication destination write failed: No space left on device\u0026#34;) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;SnapVault in stuck in quiescing-state - no space left!\u0026#34;); } elsif ($sv_state eq \u0026#34;snapvaulted\u0026#34; \u0026amp;\u0026amp; $sv_status eq \u0026#34;idle\u0026#34; \u0026amp;\u0026amp; $sv_error eq \u0026#34;replication destination failed to create checksum storage\u0026#34;) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;SnapVault in stuck in quiescing-state\u0026#34;); } elsif ($sv_state eq \u0026#34;snapvaulted\u0026#34; \u0026amp;\u0026amp; $sv_status eq \u0026#34;idle\u0026#34; \u0026amp;\u0026amp; $sv_error eq \u0026#34;process was aborted\u0026#34;) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;SnapVault transfer was aborted\u0026#34;); } elsif ($sv_state eq \u0026#34;snapvaulted\u0026#34; \u0026amp;\u0026amp; $sv_status eq \u0026#34;idle\u0026#34; \u0026amp;\u0026amp; $sv_error eq \u0026#34;destination requested snapshot that does not exist on the source\u0026#34;) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;SnapVault was unable to transfer a snapshot - none found. Possible configuration error?\u0026#34;); } elsif ($sv_state eq \u0026#34;snapvaulted\u0026#34; \u0026amp;\u0026amp; $sv_status eq \u0026#34;idle\u0026#34; \u0026amp;\u0026amp; ($sv_error eq \u0026#34;none\u0026#34; || $sv_error eq \u0026#34;source contains no new data; suspending transfer to destination\u0026#34;)) { if(!$warning \u0026amp;\u0026amp; !$critical) { $plugin-\u0026gt;nagios_exit(OK, \u0026#34;SnapVault Age: \u0026#34;. timeconv($sv_lag_time)); } else { if ($sv_lag_time \u0026gt;= $critical) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;SnapVault Age: \u0026#34;. timeconv($sv_lag_time)); } elsif ($sv_lag_time \u0026lt; $critical \u0026amp;\u0026amp; $sv_lag_time \u0026gt;= $warning) { $plugin-\u0026gt;nagios_exit(WARNING, \u0026#34;SnapVault Age: \u0026#34;. timeconv($sv_lag_time)); } else { $plugin-\u0026gt;nagios_exit(OK, \u0026#34;SnapVault Age: \u0026#34;. timeconv($sv_lag_time)); } } } elsif ($sv_state eq \u0026#34;uninitialized\u0026#34; \u0026amp;\u0026amp; $sv_status eq \u0026#34;transferring\u0026#34;) { $plugin-\u0026gt;nagios_exit(OK, \u0026#34;SnapVault baseline transfer: \u0026#34;. byteconv($sv_progress)); } elsif ($sv_state eq \u0026#34;snapvaulted\u0026#34; \u0026amp;\u0026amp; $sv_status eq \u0026#34;transferring\u0026#34;) { $plugin-\u0026gt;nagios_exit(OK, \u0026#34;SnapVault update transfer: \u0026#34;. byteconv($sv_progress)); } elsif ($sv_state eq \u0026#34;snapvaulted\u0026#34; \u0026amp;\u0026amp; $sv_status eq \u0026#34;idle\u0026#34; \u0026amp;\u0026amp; $sv_error eq \u0026#34;replication destination write failed: No space left on device\u0026#34; ) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;SnapVault aborted: no space left!\u0026#34;); } elsif ($sv_state eq \u0026#34;snapvaulted\u0026#34; \u0026amp;\u0026amp; $sv_status eq \u0026#34;idle\u0026#34; \u0026amp;\u0026amp; $sv_error eq \u0026#34;could not register source qtree information\u0026#34; ) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;SnapVault in stuck in quiescing-state - no space left?\u0026#34;); } elsif ($sv_state eq \u0026#34;snapvaulted\u0026#34; \u0026amp;\u0026amp; $sv_status eq \u0026#34;idle\u0026#34; \u0026amp;\u0026amp; $sv_error eq \u0026#34;transfer aborted because of network error: Connection reset by peer\u0026#34; ) { $plugin-\u0026gt;nagios_exit(WARNING, \u0026#34;SnapVault transfer aborted, networking issues? - Age: \u0026#34;. timeconv($sv_lag_time)); } } elsif ( $mode eq \u0026#34;snapmirror\u0026#34; ) { my $sm = snapmirrorinfo($filer, $flexvol); if ( defined $warning ) { $warning = $warning*60*60 }; if ( defined $critical ) { $critical = $critical*60*60 }; my $sm_lag_time = $sm-\u0026gt;{\u0026#34;sm_lag_time\u0026#34;}; my $sm_state = $sm-\u0026gt;{\u0026#34;sm_state\u0026#34;}; my $sm_status = $sm-\u0026gt;{\u0026#34;sm_status\u0026#34;}; my $sm_progress = $sm-\u0026gt;{\u0026#34;sm_progress\u0026#34;}; my $sm_error = $sm-\u0026gt;{\u0026#34;sm_error\u0026#34;}; if ( defined $warning \u0026amp;\u0026amp; defined $critical ) { $plugin-\u0026gt;set_thresholds( warning =\u0026gt; $warning, critical =\u0026gt; $critical, ); } $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;snapmirror_lag_time\u0026#34;, value =\u0026gt; $sm_lag_time, uom =\u0026gt; \u0026#39;s\u0026#39;, threshold =\u0026gt; $plugin-\u0026gt;threshold, ); if ($sm_state eq \u0026#34;snapmirrored\u0026#34; \u0026amp;\u0026amp; $sm_status eq \u0026#34;quiescing\u0026#34; \u0026amp;\u0026amp; $sm_error eq \u0026#34;could not register source qtree information\u0026#34;) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;SnapMirror is stuck in quiescing-state - no space left?\u0026#34;); } elsif ($sm_state eq \u0026#34;snapmirrored\u0026#34; \u0026amp;\u0026amp; $sm_status eq \u0026#34;idle\u0026#34; \u0026amp;\u0026amp; $sm_error eq \u0026#34;destination requested snapshot that does not exist on the source\u0026#34;) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;SnapMirror was unable to transfer a snapshot - none found. Possible configuration error?\u0026#34;); } elsif ($sm_state eq \u0026#34;unknown\u0026#34; \u0026amp;\u0026amp; $sm_status eq \u0026#34;idle\u0026#34;) { $plugin-\u0026gt;nagios_exit(WARNING, \u0026#34;SnapMirror orphan found. Should be removed!\u0026#34;); } elsif ($sm_state eq \u0026#34;unknown\u0026#34; \u0026amp;\u0026amp; $sm_status eq \u0026#34;idle with restart checkpoint\u0026#34; \u0026amp;\u0026amp; $sm_error eq \u0026#34;destination is offline, is restricted, or does not exist\u0026#34;) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;SnapMirror: Destination volume offline or missing\u0026#34;); } elsif ( ($sm_state eq \u0026#34;snapmirrored\u0026#34; || $sm_state eq \u0026#34;source\u0026#34;) \u0026amp;\u0026amp; $sm_status eq \u0026#34;idle\u0026#34; \u0026amp;\u0026amp; ($sm_error eq \u0026#34;none\u0026#34; || $sm_error eq \u0026#34;Nothing to transfer\u0026#34;)) { if(!$warning \u0026amp;\u0026amp; !$critical) { $plugin-\u0026gt;nagios_exit(OK, \u0026#34;SnapMirror Age: \u0026#34;. timeconv($sm_lag_time)); } else { if ($sm_lag_time \u0026gt;= $critical) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;SnapMirror Age: \u0026#34;. timeconv($sm_lag_time)); } elsif ($sm_lag_time \u0026lt; $critical \u0026amp;\u0026amp; $sm_lag_time \u0026gt;= $warning) { $plugin-\u0026gt;nagios_exit(WARNING, \u0026#34;SnapMirror Age: \u0026#34;. timeconv($sm_lag_time)); } else { $plugin-\u0026gt;nagios_exit(OK, \u0026#34;SnapMirror Age: \u0026#34;. timeconv($sm_lag_time)); } } } elsif ($sm_state eq \u0026#34;uninitialized\u0026#34; \u0026amp;\u0026amp; $sm_status eq \u0026#34;transferring\u0026#34;) { $plugin-\u0026gt;nagios_exit(OK, \u0026#34;SnapMirror baseline transfer: \u0026#34;. byteconv($sm_progress)); } elsif ( ($sm_state eq \u0026#34;snapmirrored\u0026#34; || $sm_state eq \u0026#34;source\u0026#34;) \u0026amp;\u0026amp; $sm_status eq \u0026#34;transferring\u0026#34;) { $plugin-\u0026gt;nagios_exit(OK, \u0026#34;SnapMirror update transfer: \u0026#34;. byteconv($sm_progress)); } elsif ($sm_state eq \u0026#34;snapmirrored\u0026#34; \u0026amp;\u0026amp; $sm_status eq \u0026#34;pending\u0026#34;) { $plugin-\u0026gt;nagios_exit(OK, \u0026#34;SnapMirror update transfer pending\u0026#34;); } elsif ($sm_state eq \u0026#34;snapmirrored\u0026#34; \u0026amp;\u0026amp; $sm_status eq \u0026#34;idle\u0026#34; \u0026amp;\u0026amp; $sm_error eq \u0026#34;replication transfer failed to complete\u0026#34;) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;SnapMirror aborted the transfer!\u0026#34;); } elsif ($sm_state eq \u0026#34;snapmirrored\u0026#34; \u0026amp;\u0026amp; $sm_status eq \u0026#34;pending\u0026#34; \u0026amp;\u0026amp; $sm_error eq \u0026#34;destination volume too small; it must be equal to or larger than the source volume\u0026#34;) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;SnapMirror aborted due to no space left in FlexVol!\u0026#34;); } elsif ($sm_state eq \u0026#34;unknown\u0026#34; \u0026amp;\u0026amp; $sm_status eq \u0026#34;pending with restart checkpoint\u0026#34; \u0026amp;\u0026amp; $sm_error eq \u0026#34;volume is not online; cannot execute operation\u0026#34;) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;SnapMirror: Volume offline!\u0026#34;); } } elsif ( $mode eq \u0026#34;sis\u0026#34; ) { my $sis = sisinfo($filer, $flexvol); if ( defined $warning ) { $warning = $warning*24*60*60 }; if ( defined $critical ) { $critical = $critical*24*60*60 }; my $sis_state = $sis-\u0026gt;{\u0026#34;sis_state\u0026#34;}; my $sis_changelog_usage = $sis-\u0026gt;{\u0026#34;sis_changelog_usage\u0026#34;}; my $sis_stale_fingerprint = $sis-\u0026gt;{\u0026#34;sis_stale_fingerprint\u0026#34;}; my $sis_last_operation_end = $sis-\u0026gt;{\u0026#34;sis_last_operation_end\u0026#34;}; my $sis_last_success_operation = $sis-\u0026gt;{\u0026#34;sis_last_success_operation\u0026#34;}; if ( defined $warning \u0026amp;\u0026amp; defined $critical ) { $plugin-\u0026gt;set_thresholds( warning =\u0026gt; $warning, critical =\u0026gt; $critical, ); } $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;sis_changelog_usage\u0026#34;, value =\u0026gt; $sis_changelog_usage, oum =\u0026gt; \u0026#39;%\u0026#39; ); $plugin-\u0026gt;add_perfdata( label =\u0026gt; \u0026#34;sis_stale_fingerprint\u0026#34;, value =\u0026gt; $sis_stale_fingerprint, oum =\u0026gt; \u0026#39;%\u0026#39; ); if ( $sis_state eq \u0026#34;Disabled\u0026#34; \u0026amp;\u0026amp; $sis_changelog_usage gt 0 ) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;SIS enabled, but no SIS run configured - see NetApp Bug-ID 533238\u0026#34;); } if ( $sis_state eq \u0026#34;Enabled\u0026#34; ) { # Sadly, even if a SIS run is cancelled, the # last-operation-state returns \u0026#39;success\u0026#39;. So we can\u0026#39;t really # use it to check the state of the last SIS run. if ( $sis_last_success_operation \u0026lt; (time - $critical) ) { $plugin-\u0026gt;nagios_exit(CRITICAL, \u0026#34;SIS last operation failed. Last success: \u0026#34;. scalar(localtime($sis_last_success_operation))); } elsif ( $sis_last_success_operation \u0026lt; (time - $warning) ) { $plugin-\u0026gt;nagios_exit(WARNING, \u0026#34;SIS last operation failed. Last success: \u0026#34;. scalar(localtime($sis_last_success_operation))); } else { if ( $sis_stale_fingerprint \u0026gt; 60 ) { $plugin-\u0026gt;nagios_exit(WARNING, \u0026#34;SIS ran successful, however the Stale Fingerprints is above 60 percent.\u0026#34;); } elsif ( $sis_changelog_usage \u0026gt; 60 ) { $plugin-\u0026gt;nagios_exit(WARNING, \u0026#34;SIS ran successful, however the ChangeLog usage is above 60 percent.\u0026#34;); } else { $plugin-\u0026gt;nagios_exit(OK, \u0026#34;SIS ran successful.\u0026#34;); } } } } ","permalink":"https://christian.blog.pakiheim.de/posts/2013-12-15_netapp-monitoring-of-snapvault-snapmirror-lun-snapshot-information-with-nagios/","summary":"\u003cp\u003e\u003ca href=\"http://christian.weblog.heimdaheim.de/2012/12/29/implementing-snapvault-backups-the-hard-way/\" title=\"Implementing SnapVault backups – the hard way\"\u003eAs I wrote before\u003c/a\u003e, we have a bunch of filers (and a ton of volumes w/ luns on them), that I need to monitor. At first, I tried the existing NetApp Nagios-Plugin(s), but they all use SNMP and with that I can either watch all volumes or none. And that didn\u0026rsquo;t satisfy me.\u003c/p\u003e\n\u003cp\u003eDon\u0026rsquo;t get me wrong, the existing plugins are okay and I still use them for stuff (like GLOBALSTATUS or FAN/CPU/POWER) which isn\u0026rsquo;t present in the API or real hard to get at, however I wanted more. So I ended up looking at the NetApp API, and ended up writing a \u0026ldquo;short\u0026rdquo; plugin for Nagios using Perl.\u003c/p\u003e\n\u003cp\u003eMaybe if I\u0026rsquo;m ever bored, I\u0026rsquo;ll rewrite it using C, but for now the Perl plugin has to suffice.\u003c/p\u003e\n\u003cp\u003eSo far the plugin supports the following things:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMonitoring FlexVolumes (simply watching the free space)\u003c/li\u003e\n\u003cli\u003eMonitoring LUN space (the allocated space inside a FlexVolume for iSCSI/FC LUNs)\u003c/li\u003e\n\u003cli\u003eMonitoring Snapshot space (the allocated space inside a FlexVolume for Snapshots)\u003c/li\u003e\n\u003cli\u003eMonitoring SnapVault relations (and their age)\u003c/li\u003e\n\u003cli\u003eMonitoring SnapMirror relations (and their age)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe plugin will return performance data for most (if not all) of those classes. It needs a user on the filer you wish to monitor - which sadly needs to have the admin role.\u003c/p\u003e\n","title":"NetApp: Monitoring of SnapVault/SnapMirror/LUN/Snapshot information with Nagios"},{"content":"One of my co-workers recently approached me, that he needed a simple shell script which would generate a simple report about a Vserver\u0026rsquo;s current connections. After ironing out a few things with him (he had the intention of it being on a CIFS share on our file-server - which I changed to a simple HTML page) I went to work.\nOut came two scripts. One is the collection instance, and the other is the processing instance. First the collection script runs, finds the current HA master node and then collects the Vserver\u0026rsquo;s current connections. After that script has dumped the information (date, time, current connections) into a file, the processing script will go and create a simple HTML page that\u0026rsquo;ll show exactly those informations.\nYou\u0026rsquo;ll also need to have configured the public key authentification on both HA nodes, since entering a password in combination with scripting is a bit lame.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #!/bin/bash IDENTITY_FILE=\u0026#34;/root/.ssh/netscaler\u0026#34; NS_USER=\u0026#34;nsroot\u0026#34; NS_HOST=\u0026#34;$1\u0026#34; NS_VSERVER=\u0026#34;$2\u0026#34; if [ -z \u0026#34;$2\u0026#34; ] ; then echo \u0026#34;Usage: ns-gather-connections.sh \u0026lt;IP/HOSTNAME\u0026gt; \u0026lt;VSERVER_NAME\u0026gt;\u0026#34; echo \u0026#34;\u0026#34; echo \u0026#34; o IP/HOSTNAME - IP or Hostname of the NetScaler\u0026#34; echo \u0026#34; o VSERVER_NAME - Name of the NetScaler vServer\u0026#34; echo \u0026#34;\u0026#34; exit 1 fi ns_ssh() { COMMANDS=\u0026#34;$@\u0026#34; ssh -i $IDENTITY_FILE $NS_USER@$NS_HOST $COMMANDS } # Get HA information from the NetScaler and check if the current IP is the Master NS_NODE_STATUS=\u0026#34;$( ns_ssh sh ha node | egrep -A2 \u0026#34;IP:.*$NS_HOST\u0026#34; | grep Master | \\ awk \u0026#39;{ print $3 }\u0026#39; )\u0026#34; if [ \u0026#34;$NS_NODE_STATUS\u0026#34; != \u0026#34;Primary\u0026#34; ] ; then # Search for the Primary node NS_MASTER_NODE=\u0026#34;$( ns_ssh sh ha node | egrep -B2 \u0026#34;Master State: Primary\u0026#34; | \\ grep \u0026#34;IP: \u0026#34; | awk \u0026#39;{ print $2 }\u0026#39; )\u0026#34; NS_HOST=$NS_MASTER_NODE elif [ \u0026#34;$NS_NODE_STATUS\u0026#34; == \u0026#34;Primary\u0026#34; ] ; then NS_MASTER_NODE=\u0026#34;$NS_HOST\u0026#34; NS_HOST=$NS_MASTER_NODE fi # Check the connection table NS_CONNTABLE=\u0026#34;$( ns_ssh \u0026#34;sh ns connectiontable \\\u0026#34;VSVRNAME = ${NS_VSERVER}\\\u0026#34; -detail LINK\u0026#34; | grep \u0026#39;ESTABLISHED\u0026#39; | wc -l )\u0026#34; echo \u0026#34;`date \u0026#39;+%F_%R\u0026#39;`;$NS_CONNTABLE\u0026#34; \u0026gt;\u0026gt; /srv/www/${NS_VSERVER}_conntable.log 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 #!/bin/bash NS_VSERVER=\u0026#34;$1\u0026#34; HTML_FILE=\u0026#34;/srv/www/htdocs/${NS_VSERVER}.html\u0026#34; cat \u0026gt; $HTML_FILE \u0026lt;\u0026lt; EOF \u0026lt;!DOCTYPE HTML PUBLIC \u0026#34;-//W3C//DTD HTML 4.01 Transitional//EN\u0026#34; \u0026#34;http://www.w3.org/TR/html4/loose.dtd\u0026#34;\u0026gt; \u0026lt;html\u0026gt; \u0026lt;head\u0026gt; \u0026lt;title\u0026gt;$NS_VSERVER - Anzahl Clients nach Datum\u0026lt;/title\u0026gt; \u0026lt;style\u0026gt; .ns { margin:0px;padding:0px; width:100%; border:1px solid #000000; -moz-border-radius-bottomleft:0px; -webkit-border-bottom-left-radius:0px; border-bottom-left-radius:0px; -moz-border-radius-bottomright:0px; -webkit-border-bottom-right-radius:0px; border-bottom-right-radius:0px; -moz-border-radius-topright:0px; -webkit-border-top-right-radius:0px; border-top-right-radius:0px; -moz-border-radius-topleft:0px; -webkit-border-top-left-radius:0px; border-top-left-radius:0px; }.ns table{ border-collapse: collapse; border-spacing: 0; width:100%; height:100%; margin:0px;padding:0px; }.ns th{ font-size:14px; font-family:Verdana; font-weight:bold; border:1px solid #000000; border-width:0px 1px 1px 0px; text-align:left; padding:7px; }.ns tr:last-child td:last-child { -moz-border-radius-bottomright:0px; -webkit-border-bottom-right-radius:0px; border-bottom-right-radius:0px; } .ns table tr:first-child td:first-child { -moz-border-radius-topleft:0px; -webkit-border-top-left-radius:0px; border-top-left-radius:0px; } .ns table tr:first-child td:last-child { -moz-border-radius-topright:0px; -webkit-border-top-right-radius:0px; border-top-right-radius:0px; }.ns tr:last-child td:first-child{ -moz-border-radius-bottomleft:0px; -webkit-border-bottom-left-radius:0px; border-bottom-left-radius:0px; }.ns tr:hover td{ } .ns tr:nth-child(odd){ background-color:#aad4ff; } .ns tr:nth-child(even) { background-color:#ffffff; }.ns td{ vertical-align:middle; border:1px solid #000000; border-width:0px 1px 1px 0px; text-align:left; padding:7px; font-size:14px; font-family:Verdana; font-weight:normal; color:#000000; }.ns tr:last-child td{ border-width:0px 1px 0px 0px; }.ns tr td:last-child{ border-width:0px 0px 1px 0px; }.ns tr:last-child td:last-child{ border-width:0px 0px 0px 0px; } .ns tr:first-child td{ background:-o-linear-gradient(bottom, #005fbf 5%, #003f7f 100%);\tbackground:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #005fbf), color-stop(1, #003f7f) ); background:-moz-linear-gradient( center top, #005fbf 5%, #003f7f 100% ); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\u0026#34;#005fbf\u0026#34;, endColorstr=\u0026#34;#003f7f\u0026#34;);\tbackground: -o-linear-gradient(top,#005fbf,003f7f); background-color:#005fbf; border:0px solid #000000; text-align:center; border-width:0px 0px 1px 1px; font-size:14px; font-family:Verdana; font-weight:bold; color:#ffffff; } .ns tr:first-child:hover td{ background:-o-linear-gradient(bottom, #005fbf 5%, #003f7f 100%);\tbackground:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #005fbf), color-stop(1, #003f7f) ); background:-moz-linear-gradient( center top, #005fbf 5%, #003f7f 100% ); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\u0026#34;#005fbf\u0026#34;, endColorstr=\u0026#34;#003f7f\u0026#34;);\tbackground: -o-linear-gradient(top,#005fbf,003f7f); background-color:#005fbf; } .ns tr:first-child td:first-child{ border-width:0px 0px 1px 0px; } .ns tr:first-child td:last-child{ border-width:0px 0px 1px 1px; } \u0026lt;/style\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;h3\u0026gt;NetScaler Vserver $NS_VSERVER - sortiert nach Datum\u0026lt;/h1\u0026gt; \u0026lt;div class=\u0026#34;ns\u0026#34;\u0026gt; \u0026lt;table border=\u0026#34;1\u0026#34;\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;th\u0026gt;Datum\u0026lt;/th\u0026gt; \u0026lt;th\u0026gt;Zeit\u0026lt;/th\u0026gt; \u0026lt;th\u0026gt;Anzahl Clients\u0026lt;/th\u0026gt; \u0026lt;/tr\u0026gt; EOF for line in $( tac /srv/www/${NS_VSERVER}_conntable.log ); do DATE=\u0026#34;$( echo $line | cut -d\\; -f1 | cut -d_ -f1 )\u0026#34; TIME=\u0026#34;$( echo $line | cut -d\\; -f1 | cut -d_ -f2 )\u0026#34; CONNECTIONS=\u0026#34;$( echo $line | cut -d\\; -f2 )\u0026#34; cat \u0026gt;\u0026gt; $HTML_FILE \u0026lt;\u0026lt; EOF \u0026lt;tr\u0026gt; \u0026lt;td\u0026gt;$DATE\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt;$TIME\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt;$CONNECTIONS\u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; EOF done cat \u0026gt;\u0026gt; $HTML_FILE \u0026lt;\u0026lt; EOF \u0026lt;/div\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; EOF ","permalink":"https://christian.blog.pakiheim.de/posts/2013-11-21_netscaler-generate-a-simple-usage-statistic-per-vserver/","summary":"\u003cp\u003eOne of my co-workers recently approached me, that he needed a simple shell script which would generate a simple report about a Vserver\u0026rsquo;s current connections. After ironing out a few things with him (he had the intention of it being on a CIFS share on our file-server - which I changed to a simple HTML page) I went to work.\u003c/p\u003e\n\u003cp\u003eOut came two scripts. One is the collection instance, and the other is the processing instance. First the collection script runs, finds the current HA master node and then collects the Vserver\u0026rsquo;s current connections. After that script has dumped the information (date, time, current connections) into a file, the processing script will go and create a simple HTML page that\u0026rsquo;ll show exactly those informations.\u003c/p\u003e","title":"NetScaler: Generate a simple usage statistic per Vserver"},{"content":"Well, I\u0026rsquo;ve been fiddling around with SLES and openSUSE VMware templates. I know it\u0026rsquo;s a stupid idea when you have a PXE server from which you could install this in a matter of minutes (seriously the SLES PXE installation takes about 5 minutes).\nHowever, when dealing with DMZ\u0026rsquo;s (yeah, they exist!) you usually don\u0026rsquo;t have any PXE servers there. So I decided to go with simple VMware templates (like we do with Windows already), but had to iron out a few kinks.\nThere\u0026rsquo;s no way to run a set of scripts after the deployment scripts from VMware have been run The hostname isn\u0026rsquo;t changed everywhere (/etc/postfix/main.cf for example) So of I went and wrote a short (70 line ..) init script, which will do exactly that.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 #!/bin/sh # # /etc/init.d/template-deploy # ### BEGIN INIT INFO # Provides: template-deploy # Required-Start: $sshd # Should-Start: # Required-Stop: $sshd # Should-Stop: # Default-Start: 2 3 5 # Default-Stop: # Short-Description: Makes the final adjustments when deployed a template # Description: VMware has a few kinks when deploying a linux template. # This init script will handle those kinks and # incorporate the necessary changes to the final system # after the VMware customizations are done. ### END INIT INFO # Source LSB init functions . /etc/rc.status rc_reset LOGFILES=\u0026#34;/var/log/messages* /var/log/mail* /var/log/zypper.log /var/log/localmessages /var/log/warn /var/log/NetworkManager /var/log/zypp/history /var/log/clamd.log /var/log/cksquid.log /var/log/ftp-proxy.log* /var/log/apache2/*_log /var/log/squid/*.log /var/log/pbl.log\u0026#34; case \u0026#34;$1\u0026#34; in start) # Read /etc/HOSTNAME and check it against /etc/template if [ -f /etc/HOSTNAME -a -f /etc/template ] ; then SYS_HOSTNAME=\u0026#34;`cat /etc/HOSTNAME`\u0026#34; TPL_HOSTNAME=\u0026#34;`cat /etc/template`\u0026#34; # Only if the hostname isn\u0026#39;t like the template name # the script will actually run. if [ \u0026#34;$SYS_HOSTNAME\u0026#34; != \u0026#34;$TPL_HOSTNAME\u0026#34; ] ; then sed -i \u0026#34;s/$TPL_HOSTNAME/$SYS_HOSTNAME/g\u0026#34; \\ /etc/postfix/main.cf /etc/hosts \\ /etc/HOSTNAME bash /var/adm/autoinstall/scripts/configure_users.sh # Stop services for logfile deletion. systemctl stop postfix systemctl stop syslog # Remove log files for file in $LOGFILES; do rm -f $file done rm -f /var/log/YaST2/* rm -rf /var/log/vmware-imc # Remove the init script chkconfig -d template-deploy rm -f /etc/template rm -f /etc/init.d/template-deploy fi fi rc_status -v ;; *) ;; esac rc_exit You\u0026rsquo;ll also need to create a file (/etc/template), which\u0026rsquo;ll hold the template\u0026rsquo;s hostname and will be used for the comparison if VMware\u0026rsquo;s post-processing is already finished.\n","permalink":"https://christian.blog.pakiheim.de/posts/2013-11-21_vmware-templates-post-processing-for-suse-linux-enterprise-server-and-opensuse/","summary":"\u003cp\u003eWell, I\u0026rsquo;ve been fiddling around with SLES and openSUSE VMware templates. I know it\u0026rsquo;s a stupid idea when you have a PXE server from which you could install this in a matter of minutes (seriously the SLES PXE installation takes about 5 minutes).\u003c/p\u003e\n\u003cp\u003eHowever, when dealing with DMZ\u0026rsquo;s (yeah, they exist!) you usually don\u0026rsquo;t have any PXE servers there. So I decided to go with simple VMware templates (like we do with Windows already), but had to iron out a few kinks.\u003c/p\u003e","title":"VMware templates: post-processing for SUSE Linux Enterprise Server and openSUSE"},{"content":"Well, I went to work today \u0026hellip; yeah, I know it\u0026rsquo;s Sunday right ? I ended up updating two MDS9148 switches and I didn\u0026rsquo;t want to figure out everything all over again. So I put the system image and kickstart onto one of our FTP servers and ran a short bash loop on it:\n1 2 3 4 root:(ftp.daheim.heimdaheim.de) PWD:~ Sun Oct 20, 08:57:24 [0] \u0026gt; for file in `ls /srv/ftp/firmware/mds9148/*6.2.3*`; do echo \u0026#34;copy ftp://10.0.0.55/`echo $file | sed \u0026#39;s,/srv/ftp/,,\u0026#39;` bootflash:/`echo $file | sed \u0026#39;s,/srv/ftp/firmware/mds9148/,,\u0026#39;`\u0026#34; done Now that\u0026rsquo;ll generate me two lines, which in turn I can use on the MDS\u0026rsquo;n:\n1 2 copy ftp://10.0.0.55/firmware/mds9148/m9100-s3ek9-kickstart-mz.6.2.3.bin bootflash:/m9100-s3ek9-kickstart-mz.6.2.3.bin copy ftp://10.0.0.55/firmware/mds9148/m9100-s3ek9-mz.6.2.3.bin bootflash:/m9100-s3ek9-mz.6.2.3.bin ","permalink":"https://christian.blog.pakiheim.de/posts/2013-10-20_mds9100-firmware-updates-generating-copy-commands/","summary":"\u003cp\u003eWell, I went to work today \u0026hellip; yeah, I know it\u0026rsquo;s Sunday right ? I ended up updating two MDS9148 switches and I didn\u0026rsquo;t want to figure out everything all over again. So I put the system image and kickstart onto one of our FTP servers and ran a short bash loop on it:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eroot:(ftp.daheim.heimdaheim.de) PWD:~\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSun Oct 20, 08:57:24 [0] \u0026gt; for file in `ls /srv/ftp/firmware/mds9148/*6.2.3*`; do\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eecho \u0026#34;copy ftp://10.0.0.55/`echo $file | sed \u0026#39;s,/srv/ftp/,,\u0026#39;` bootflash:/`echo $file | sed \u0026#39;s,/srv/ftp/firmware/mds9148/,,\u0026#39;`\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edone\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eNow that\u0026rsquo;ll generate me two lines, which in turn I can use on the MDS\u0026rsquo;n:\u003c/p\u003e","title":"MDS9100 firmware updates - generating copy commands"},{"content":"Well, what annoyed me in the past was that I had to patch each XenServer patch by patch (no bulk applying) and when used in combination with UCS blades (especially if those have \u0026gt;250GB RAM), it takes ages to keep a pool up-to-date. So I ended up writing yet another script (I know why I hate Citrix XenServer \u0026hellip; the XenCenter GUI is lacking sooooo much) which will download new patches from a directory on a HTTP server and then print the lines necessary to apply the patches to all hosts in a pool.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 #!/bin/bash # # Updates a XenServer to the most current release # TMPDIR=$( mktemp -d ) # Figure out the XS release XS_REL=\u0026#34;$( grep PRODUCT_VERSION /etc/xensource-inventory | cut -d\\\u0026#39; -f2 )\u0026#34; #set -x # Gather the Patchlist/UUID list UUID=\u0026#34;$( xe patch-list | grep ^uuid | awk \u0026#39;{ print $5 }\u0026#39; )\u0026#34; XSNAME=\u0026#34;$( xe patch-list | grep name-label | awk \u0026#39;{ print $4 }\u0026#39; )\u0026#34; declare -a pUUID=($UUID) declare -a pXS=($XSNAME) count=${#pUUID[@]} count=$((count-1)) for i in $( seq 0 $count ); do echo \u0026#34;${pXS[$i]}: ${pUUID[$i]}\u0026#34; done | sort # Now get the current patchlist PATCH_LIST=\u0026#34;$( wget -q -O $TMPDIR/digest http://xen.heimdaheim.de/patches/$XS_REL/digest )\u0026#34; for xs in \u0026#34;${pXS[@]}\u0026#34;; do sed -i \u0026#34;/$xs/d\u0026#34; $TMPDIR/digest done if [ \u0026#34;$( cat $TMPDIR/digest )\u0026#34; != \u0026#34;\u0026#34; ]; then for file in $( cat $TMPDIR/digest ); do wget -q -O $TMPDIR/$file http://xen.heimdaheim.de/patches/$XS_REL/$file done POOL_MASTER=\u0026#34;$( xe host-list uuid=$( xe pool-list | grep master | \\ awk \u0026#39;{ print $4 }\u0026#39; ) | grep name-label | awk \u0026#39;{ print $4 }\u0026#39; )\u0026#34; while true; do read -p \u0026#34;New XenServer updates found. Should we continue ? (y/n) \u0026#34; yn case $yn in [Yy]* ) break;; [Nn]* ) rm -rf $TMPDIR; exit;; * ) echo \u0026#34;Please answer yes or no.\u0026#34;;; esac done # Upload the patchfiles to the pool master for xs in $( grep -v iso $TMPDIR/digest ); do echo -n \u0026#34;Uploading XS patch $xs\u0026#34; xe patch-upload file-name=$TMPDIR/$xs 1\u0026gt;/dev/null echo \u0026#34;...\u0026#34; done UUID=\u0026#34;$( xe patch-list | grep ^uuid | awk \u0026#39;{ print $5 }\u0026#39; )\u0026#34; XSNAME=\u0026#34;$( xe patch-list | grep name-label | awk \u0026#39;{ print $4 }\u0026#39; )\u0026#34; declare -a PUID=($UUID) declare -a XS=($XSNAME) count=${#PUID[@]} count=$((count-1)) # Write the stuff to a csv, so we can sort it for i in $( seq 0 $count ); do echo \u0026#34;${XS[$i]};${PUID[$i]}\u0026#34; done | sort \u0026gt; $TMPDIR/patchlist.csv echo \u0026#34;The following commands need to be issued on the pool master $POOL_MASTER:\u0026#34; echo for patch in $( cat $TMPDIR/patchlist.csv ); do XS=\u0026#34;$( echo $patch | cut -d\\; -f1 )\u0026#34; UUID=\u0026#34;$( echo $patch | cut -d\\; -f2 )\u0026#34; for host in $( xe host-list | grep ^uuid | awk \u0026#39;{ print $5 }\u0026#39; ); do echo \u0026#34;xe patch-apply host-uuid=$host uuid=${UUID}\u0026#34; done echo done if [ \u0026#34;$( grep iso $TMPDIR/digest )\u0026#34; != \u0026#34;\u0026#34; ] ; then echo echo \u0026#34;The following commands need to be issued on each host individually:\u0026#34; for xs in $( grep iso $TMPDIR/digest ); do cp -f $TMPDIR/$xs /root echo \u0026#34;$xs needs to be installed manually.\u0026#34; echo \u0026#34;This can be achieved with the following commands:\u0026#34; echo \u0026#34; mount -o loop /root/$xs /mnt\u0026#34; echo \u0026#34; cd /mnt\u0026#34; echo \u0026#34; ./install.sh\u0026#34; echo \u0026#34; cd\u0026#34; echo \u0026#34; umount /mnt\u0026#34; done fi else echo \u0026#34;No updates found!\u0026#34; fi rm -rf $TMPDIR There\u0026rsquo;s just a little caveat (not because of the script - but of XenServer\u0026rsquo;s design): if you switch the pool master before the updates are applied to all host, you\u0026rsquo;ll need to manually delete the patches from the pool (xe patch-delete) and rerun the script on the new pool master \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2013-09-15_xenserver-6-x-update-all-hosts-in-pool/","summary":"\u003cp\u003eWell, what annoyed me in the past was that I had to patch each XenServer patch by patch (no bulk applying) and when used in combination with UCS blades (especially if those have \u0026gt;250GB RAM), it takes ages to keep a pool up-to-date. So I ended up writing yet another script (I know why I hate Citrix XenServer \u0026hellip; the XenCenter GUI is lacking sooooo much) which will download new patches from a directory on a HTTP server and then print the lines necessary to apply the patches to all hosts in a pool.\u003c/p\u003e","title":"XenServer 6-x: Update all hosts in pool"},{"content":"Well, today I ended up writing a short script that\u0026rsquo;ll give me a list of VMPPs with the VMs that are associated to it.\n1 2 3 4 5 6 7 8 9 10 11 12 #!/bin/bash # Get a list of VMPPs for vmpp in `xe vmpp-list params=uuid --minimal | sed \u0026#34;s/,/ /g\u0026#34;`; do VMPP_NAME=`xe vmpp-list params=name-label uuid=$vmpp --minimal` for vm in `xe vmpp-list params=VMs --minimal uuid=$vmpp | sed -e \u0026#34;s/;//g\u0026#34; -e \u0026#34;s/,//g\u0026#34;`; do VM=`xe vm-list params=name-label uuid=$vm --minimal` echo \u0026#34;$VMPP_NAME: $VM\u0026#34; done done ","permalink":"https://christian.blog.pakiheim.de/posts/2013-09-15_xenserver-6-x-quick-vm-protection-policy-to-vm-name-label-script/","summary":"\u003cp\u003eWell, today I ended up writing a short script that\u0026rsquo;ll give me a list of VMPPs with the VMs that are associated to it.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Get a list of VMPPs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e vmpp in \u003cspan class=\"sb\"\u003e`\u003c/span\u003exe vmpp-list \u003cspan class=\"nv\"\u003eparams\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003euuid --minimal \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s2\"\u003e\u0026#34;s/,/ /g\u0026#34;\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nv\"\u003eVMPP_NAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003exe vmpp-list \u003cspan class=\"nv\"\u003eparams\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ename-label \u003cspan class=\"nv\"\u003euuid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$vmpp\u003c/span\u003e --minimal\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003efor\u003c/span\u003e vm in \u003cspan class=\"sb\"\u003e`\u003c/span\u003exe vmpp-list \u003cspan class=\"nv\"\u003eparams\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eVMs --minimal \u003cspan class=\"nv\"\u003euuid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$vmpp\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed -e \u003cspan class=\"s2\"\u003e\u0026#34;s/;//g\u0026#34;\u003c/span\u003e -e \u003cspan class=\"s2\"\u003e\u0026#34;s/,//g\u0026#34;\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nv\"\u003eVM\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003exe vm-list \u003cspan class=\"nv\"\u003eparams\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ename-label \u003cspan class=\"nv\"\u003euuid\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$vm\u003c/span\u003e --minimal\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$VMPP_NAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e: \u003c/span\u003e\u003cspan class=\"nv\"\u003e$VM\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"XenServer 6-x: Quick VM Protection Policy to VM name-label script"},{"content":"Well, today I encountered a old problem (or so I thought). Basically a specific udevadm version causes the vmware-config-tools.pl script to error out like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 The vmblock enables dragging or copying files between host and guest in a Fusion or Workstation virtual environment. Do you wish to enable this feature? [no] !!! [EXPERIMENTAL] !!! VMware automatic kernel modules enables automatic building and installation of VMware kernel modules at boot that are not already present. By selecting yes, you will be enabling this experimental feature. You can always disable this feature by re-running vmware-config-tools.pl. Would you like to enable VMware automatic kernel modules? [no] No X install found. Could not find Parent Node... I\u0026rsquo;ve had encountered this before in the past, and before there was some explanation on the VMware forums, which I couldn\u0026rsquo;t locate. Lucky me, the VMware Tools updater keeps modified versions of vmware-tools-config.pl around. So I ended up creating this short diff, so that I may find it in the future - if I still need it:\n1 2 3 4 5 6 7 8 9 10 11 --- /usr/bin/vmware-config-tools.pl 2013-09-09 09:43:13.000000000 +0200 +++ vmware-config-tools.pl 2013-09-09 09:43:04.000000000 +0200 @@ -6880,7 +6880,7 @@ my $txt = $1; if ($txt =~ m/{vendor}==\u0026#34;VMware/is) { # Get the udev device path from this node - if ($txt =~ m/\u0026#39;(.*?)\u0026#39;:/s) { + if ($txt =~ m/^\u0026#39;(.*?)\u0026#39;:/s) { unshift(@scsiNodes, $1); unshift(@nodeText, $txt); } else { ","permalink":"https://christian.blog.pakiheim.de/posts/2013-09-09_vmware-config-tools-pl-finished-with-could-not-find-parent-node/","summary":"\u003cp\u003eWell, today I encountered a old problem (or so I thought). Basically a specific udevadm version causes the vmware-config-tools.pl script to error out like this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eThe\u003c/span\u003e \u003cspan class=\"n\"\u003evmblock\u003c/span\u003e \u003cspan class=\"n\"\u003eenables\u003c/span\u003e \u003cspan class=\"n\"\u003edragging\u003c/span\u003e \u003cspan class=\"ow\"\u003eor\u003c/span\u003e \u003cspan class=\"n\"\u003ecopying\u003c/span\u003e \u003cspan class=\"n\"\u003efiles\u003c/span\u003e \u003cspan class=\"n\"\u003ebetween\u003c/span\u003e \u003cspan class=\"n\"\u003ehost\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003eguest\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003ea\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eFusion\u003c/span\u003e \u003cspan class=\"ow\"\u003eor\u003c/span\u003e \u003cspan class=\"n\"\u003eWorkstation\u003c/span\u003e \u003cspan class=\"n\"\u003evirtual\u003c/span\u003e \u003cspan class=\"n\"\u003eenvironment\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e  \u003cspan class=\"n\"\u003eDo\u003c/span\u003e \u003cspan class=\"n\"\u003eyou\u003c/span\u003e \u003cspan class=\"n\"\u003ewish\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003eenable\u003c/span\u003e \u003cspan class=\"n\"\u003ethis\u003c/span\u003e \u003cspan class=\"n\"\u003efeature\u003c/span\u003e\u003cspan class=\"err\"\u003e?\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eno\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e!!!\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eEXPERIMENTAL\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e!!!\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eVMware\u003c/span\u003e \u003cspan class=\"n\"\u003eautomatic\u003c/span\u003e \u003cspan class=\"n\"\u003ekernel\u003c/span\u003e \u003cspan class=\"n\"\u003emodules\u003c/span\u003e \u003cspan class=\"n\"\u003eenables\u003c/span\u003e \u003cspan class=\"n\"\u003eautomatic\u003c/span\u003e \u003cspan class=\"n\"\u003ebuilding\u003c/span\u003e \u003cspan class=\"ow\"\u003eand\u003c/span\u003e \u003cspan class=\"n\"\u003einstallation\u003c/span\u003e \u003cspan class=\"n\"\u003eof\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eVMware\u003c/span\u003e \u003cspan class=\"n\"\u003ekernel\u003c/span\u003e \u003cspan class=\"n\"\u003emodules\u003c/span\u003e \u003cspan class=\"n\"\u003eat\u003c/span\u003e \u003cspan class=\"n\"\u003eboot\u003c/span\u003e \u003cspan class=\"n\"\u003ethat\u003c/span\u003e \u003cspan class=\"n\"\u003eare\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"n\"\u003ealready\u003c/span\u003e \u003cspan class=\"n\"\u003epresent\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e  \u003cspan class=\"n\"\u003eBy\u003c/span\u003e \u003cspan class=\"n\"\u003eselecting\u003c/span\u003e \u003cspan class=\"n\"\u003eyes\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eyou\u003c/span\u003e \u003cspan class=\"n\"\u003ewill\u003c/span\u003e \u003cspan class=\"n\"\u003ebe\u003c/span\u003e \u003cspan class=\"n\"\u003eenabling\u003c/span\u003e \u003cspan class=\"n\"\u003ethis\u003c/span\u003e \u003cspan class=\"n\"\u003eexperimental\u003c/span\u003e \u003cspan class=\"n\"\u003efeature\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e  \u003cspan class=\"n\"\u003eYou\u003c/span\u003e \u003cspan class=\"n\"\u003ecan\u003c/span\u003e \u003cspan class=\"n\"\u003ealways\u003c/span\u003e \u003cspan class=\"n\"\u003edisable\u003c/span\u003e \u003cspan class=\"n\"\u003ethis\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efeature\u003c/span\u003e \u003cspan class=\"n\"\u003eby\u003c/span\u003e \u003cspan class=\"n\"\u003ere\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003erunning\u003c/span\u003e \u003cspan class=\"n\"\u003evmware\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003econfig\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003etools\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epl\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eWould\u003c/span\u003e \u003cspan class=\"n\"\u003eyou\u003c/span\u003e \u003cspan class=\"n\"\u003elike\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003eenable\u003c/span\u003e \u003cspan class=\"n\"\u003eVMware\u003c/span\u003e \u003cspan class=\"n\"\u003eautomatic\u003c/span\u003e \u003cspan class=\"n\"\u003ekernel\u003c/span\u003e \u003cspan class=\"n\"\u003emodules\u003c/span\u003e\u003cspan class=\"err\"\u003e?\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eno\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eNo\u003c/span\u003e \u003cspan class=\"n\"\u003eX\u003c/span\u003e \u003cspan class=\"n\"\u003einstall\u003c/span\u003e \u003cspan class=\"n\"\u003efound\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eCould\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"n\"\u003efind\u003c/span\u003e \u003cspan class=\"n\"\u003eParent\u003c/span\u003e \u003cspan class=\"ne\"\u003eNode\u003c/span\u003e\u003cspan class=\"o\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eI\u0026rsquo;ve had encountered this before in the past, and before there was some explanation on the VMware forums, which I couldn\u0026rsquo;t locate. Lucky me, the VMware Tools updater keeps modified versions of vmware-tools-config.pl around. So I ended up creating this short diff, so that I may find it in the future - if I still need it:\u003c/p\u003e","title":"vmware-config-tools-pl finished with Could not find Parent Node"},{"content":"Well, I\u0026rsquo;ve been moving stuff to my archive NAS, and in case anyone is wondering - the DS213+ actually nearly gets to the 1GE transmission limit\u0026hellip; It\u0026rsquo;s near the CPU limit then anyhow, but \u0026hellip; \u0026#x1f604;\n","permalink":"https://christian.blog.pakiheim.de/posts/2013-08-25_diskstation-213-lan-throughput/","summary":"\u003cp\u003eWell, I\u0026rsquo;ve been moving stuff to my archive NAS, and in case anyone is wondering - the DS213+ actually nearly gets to the 1GE transmission limit\u0026hellip; It\u0026rsquo;s near the CPU limit then anyhow, but \u0026hellip; \u0026#x1f604;\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/uploads/2013/08/diskstation-1ge.png\"\u003e\u003cimg alt=\"DiskStatin Resource Monitor\" loading=\"lazy\" src=\"/uploads/2013/08/diskstation-1ge.png\"\u003e\u003c/a\u003e\u003c/p\u003e","title":"DiskStation 213+: LAN throughput"},{"content":"As the title pretty much tells, I’ve been working on fixing the Root-Disk-Multipathing feature of our XenServer installations. Our XenServer boot from a HA-enabled NetApp controller, however we recently noticed that during a controller fail-over some, if not all, paths would go offline and never come back. If you do a cf takeover and cf giveback in short succession, you’ll end up with a XenServer host that is unusable, as the Root-Disk would be pretty much non-responsive.\nGuessing from that, there don\u0026rsquo;t seem to be that many people using XenServer with Boot-from-SAN. Otherwise Citrix/NetApp would have fixed that by now\u0026hellip;. Anyhow, I went around digging in our XenServer\u0026rsquo;s. What I already did, was adjust the /etc/multipath.conf according to a bug report (or TR-3373). For completeness sake I\u0026rsquo;ll list it here:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 # Multipathing configuration for XenServer on NetApp ALUA # enabled storage. # TR-3732, revision 5 defaults { user_friendly_names no queue_without_daenon no flush_on_last_del yes } ## some vendor specific modifications devices { device { vendor \u0026#34;NETAPP\u0026#34; product \u0026#34;LUN\u0026#34; path_grouping_policy group_by_prio features \u0026#34;1 queue_if_no_path\u0026#34; getuid_callout \u0026#34;/sbin/scsi_id -g -u -s /block/%n\u0026#34; prio_callout \u0026#34;/sbin/mpath_prio_alua /dev/%n\u0026#34; path_checker directio failback immediate hardware handler \u0026#34;0\u0026#34; rr_weight uniform rr_min_io 128 } } And as it turns out, this is the reason why we\u0026rsquo;re having such difficulties with the Multipathing. The information in TR-3373 is a bunch of BS (no, not everything but a single path is wrong, the getuid_callout) and thus the whole concept of Multipathing, Failover and High-Availibility (yeah, I know - if you want HA, don\u0026rsquo;t use XenServer \u0026#x1f61b;) is gone.\n","permalink":"https://christian.blog.pakiheim.de/posts/2013-07-16_xenserver-6-0-2-fixing-root-disk-multipathing-with-boot-from-san/","summary":"\u003cp\u003eAs the title pretty much tells, I’ve been working on fixing the Root-Disk-Multipathing feature of our XenServer installations. Our XenServer boot from a HA-enabled NetApp controller, however we recently noticed that during a controller fail-over some, if not all, paths would go offline and never come back. If you do a \u003cem\u003ecf takeover\u003c/em\u003e and \u003cem\u003ecf giveback\u003c/em\u003e in short succession, you’ll end up with a XenServer host that is unusable, as the Root-Disk would be pretty much non-responsive.\u003c/p\u003e","title":"XenServer 6-0-2: Fixing Root-Disk-Multipathing with Boot-from-SAN"},{"content":"Well, I\u0026rsquo;ve been fiddling with OpenWRT to replace my crappy Vodafone Easybox 602. Up till now I had DD-WRT on the DIR-615\u0026rsquo;s (yes, two) however recently (I think due to the Synology DiskStation in combination with a WDS setup) I had to filter SSDP broadcasts storms (which in turn kill the Easybox), which isn\u0026rsquo;t quite so easy on DD-WRT, but rather easy on OpenWRT.\nToday I went thinking about VLAN-Tagging and stuff, and I had to figure out the physical to logical port mapping for the DIR-615. So let\u0026rsquo;s run swconfig dev rt305x show on the DIR-615 after plugging in the RJ45 cable to a port.\nOut came this nifty table, which\u0026rsquo;ll hopefully help me, wrapping my head around this whole VLAN thing.\nphysical portCPUWANWLANLAN 1LAN 2LAN 3LAN 4logical port6*543210\nKeep in mind, the CPU port (or the backplane port, connected with 1000 Base-T FD) is by default in both VLANs as a tagged port.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 config interface \u0026#39;loopback\u0026#39; option ifname \u0026#39;lo\u0026#39; option proto \u0026#39;static\u0026#39; option ipaddr \u0026#39;127.0.0.1\u0026#39; option netmask \u0026#39;255.0.0.0\u0026#39; config interface \u0026#39;lan\u0026#39; option ifname \u0026#39;eth0.1\u0026#39; option type \u0026#39;bridge\u0026#39; option proto \u0026#39;static\u0026#39; option ipaddr \u0026#39;172.31.76.10\u0026#39; option netmask \u0026#39;255.255.255.0\u0026#39; #\toption ip6addr \u0026#39;fixme/64\u0026#39; option gateway 172.31.76.1 option broadcast 172.31.76.255 option dns 172.31.76.30 config interface \u0026#39;wan\u0026#39; option ifname \u0026#39;eth0.2\u0026#39; option proto \u0026#39;dhcp\u0026#39; config switch option name \u0026#39;rt305x\u0026#39; option reset \u0026#39;1\u0026#39; option enable_vlan \u0026#39;1\u0026#39; config switch_vlan option device \u0026#39;rt305x\u0026#39; option vlan \u0026#39;1\u0026#39; option ports \u0026#39;0 1 2 3 6t\u0026#39; config switch_vlan option device \u0026#39;rt305x\u0026#39; option vlan \u0026#39;2\u0026#39; option ports \u0026#39;4 6t\u0026#39; # # IPv6 tunnelbroker.net # #config interface \u0026#39;henet\u0026#39; #\toption proto \u0026#39;6in4\u0026#39; #\toption peeraddr \u0026#39;216.66.80.30\u0026#39; #\toption ip6addr \u0026#39;fixme/64\u0026#39; #\toption tunnelid \u0026#39;fixme\u0026#39; #\toption username \u0026#39;fixme\u0026#39; #\toption password \u0026#39;fixme\u0026#39; config interface \u0026#39;vpn\u0026#39; option proto \u0026#39;none\u0026#39; option auto \u0026#39;1\u0026#39; option ifname \u0026#39;tun0\u0026#39; ","permalink":"https://christian.blog.pakiheim.de/posts/2013-06-22_openwrt-on-dir-615-h1-port-mappings/","summary":"\u003cp\u003eWell, I\u0026rsquo;ve been fiddling with OpenWRT to replace my crappy Vodafone Easybox 602. Up till now I had DD-WRT on the DIR-615\u0026rsquo;s (yes, two) however recently (I think due to the Synology DiskStation in combination with a WDS setup) I had to filter SSDP broadcasts storms (which in turn kill the Easybox), which isn\u0026rsquo;t quite so easy on DD-WRT, but rather easy on OpenWRT.\u003c/p\u003e\n\u003cp\u003eToday I went thinking about VLAN-Tagging and stuff, and I had to figure out the physical to logical port mapping for the DIR-615. So let\u0026rsquo;s run \u003cem\u003eswconfig dev rt305x show\u003c/em\u003e on the DIR-615 after plugging in the RJ45 cable to a port.\u003c/p\u003e","title":"OpenWRT on DIR-615 H1 - Port mappings"},{"content":"Well, I\u0026rsquo;m setting up spam/virus filter at the moment. Somewhere I found, that when doing so one should enable soft_bounce=yes in your /etc/postfix/main.cf. Now, once I finished setting up my mailing setup, I wanted to manually force the delivery.\n1 2 3 4 5 6 7 8 9 10 11 12 13 # Check for mails still in the mail-queue root:(eris.heimdaheim.de/mailing) PWD:~ Wed Jun 19, 17:57:10 [0] \u0026gt; mailq -Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient------- B404F1B42C 2751 Wed Jun 19 17:58:01 christian.th.heim@gmail.com (user unknown) christian@heimdaheim.de C250F1B427 2770 Wed Jun 19 17:53:31 christian.th.heim@gmail.com (lost connection with 127.0.0.1[127.0.0.1] while receiving the initial server greeting) christian@heimdaheim.de -- 6 Kbytes in 2 Requests. Now, if you fixed the mail delivery, you just need to enter the following:\n1 2 3 4 root:(eris.heimdaheim.de/mailing) PWD:~ Wed Jun 19, 17:57:10 [0] \u0026gt; postsuper -r ALL root:(eris.heimdaheim.de/mailing) PWD:~ Wed Jun 19, 17:57:11 [0] \u0026gt; postfix flush However if you want to delete the mail from the postfix queue:\n1 2 root:(eris.heimdaheim.de/mailing) PWD:~ Wed Jun 19, 17:57:11 [0] \u0026gt; postsuper -d ALL deferred ","permalink":"https://christian.blog.pakiheim.de/posts/2013-06-19_postfix-soft-bounce-yes-and-redelivering-mails/","summary":"\u003cp\u003eWell, I\u0026rsquo;m setting up spam/virus filter at the moment. \u003ca href=\"http://workaround.org/ispmail/squeeze/content-scanning-amavis\"\u003eSomewhere I found\u003c/a\u003e, that when doing so one should enable soft_bounce=yes in your /etc/postfix/main.cf. Now, once I finished setting up my mailing setup, I wanted to manually force the delivery.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Check for mails still in the mail-queue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eroot:\u003cspan class=\"o\"\u003e(\u003c/span\u003eeris.heimdaheim.de/mailing\u003cspan class=\"o\"\u003e)\u003c/span\u003e PWD:~\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eWed Jun 19, 17:57:10 \u003cspan class=\"o\"\u003e[\u003c/span\u003e0\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u0026gt; mailq\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eB404F1B42C     \u003cspan class=\"m\"\u003e2751\u003c/span\u003e Wed Jun \u003cspan class=\"m\"\u003e19\u003c/span\u003e 17:58:01  christian.th.heim@gmail.com\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                                                \u003cspan class=\"o\"\u003e(\u003c/span\u003euser unknown\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                         christian@heimdaheim.de\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eC250F1B427     \u003cspan class=\"m\"\u003e2770\u003c/span\u003e Wed Jun \u003cspan class=\"m\"\u003e19\u003c/span\u003e 17:53:31  christian.th.heim@gmail.com\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003elost connection with 127.0.0.1\u003cspan class=\"o\"\u003e[\u003c/span\u003e127.0.0.1\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"k\"\u003ewhile\u003c/span\u003e receiving the initial server greeting\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                         christian@heimdaheim.de\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-- \u003cspan class=\"m\"\u003e6\u003c/span\u003e Kbytes in \u003cspan class=\"m\"\u003e2\u003c/span\u003e Requests.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eNow, if you fixed the mail delivery, you just need to enter the following:\u003c/p\u003e","title":"Postfix, soft_bounce=yes and redelivering mails"},{"content":"Now, since we\u0026rsquo;re using bridged routing, we need to adjust the guest.\n1 2 3 4 5 6 7 8 9 10 11 12 13 auto eth0 iface eth0 inet static address 78.46.37.114 netmask 255.255.255.255 pointopoint 78.46.37.118 gateway 78.46.37.118 post-up ping -c2 78.46.37.118 \u0026amp;\u0026gt;/dev/null iface eth0 inet6 static address 2a01:4f8:110:3148::5 netmask 64 gateway 2a01:4f8:110:3148::2 post-up ping6 -c2 2a01:4f8:110:3148::2 \u0026amp;\u0026gt;/dev/null This\u0026rsquo;ll take care of the bridged routing and the ICMPv6 announcement to the host. Without the ping/ping6, guest and host won\u0026rsquo;t be able to communicate (no clue why).\n","permalink":"https://christian.blog.pakiheim.de/posts/2013-06-17_hetzner-kvm-guest-networking/","summary":"\u003cp\u003eNow, since we\u0026rsquo;re using bridged routing, we need to adjust the guest.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eauto eth0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eiface eth0 inet static\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        address 78.46.37.114\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        netmask 255.255.255.255\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        pointopoint 78.46.37.118\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        gateway 78.46.37.118\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        post-up ping -c2 78.46.37.118 \u0026amp;\u0026gt;/dev/null\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eiface eth0 inet6 static\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        address 2a01:4f8:110:3148::5\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        netmask 64\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        gateway 2a01:4f8:110:3148::2\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        post-up ping6 -c2 2a01:4f8:110:3148::2 \u0026amp;\u0026gt;/dev/null\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThis\u0026rsquo;ll take care of the bridged routing and the ICMPv6 announcement to the host. Without the ping/ping6, guest and host won\u0026rsquo;t be able to communicate (no clue why).\u003c/p\u003e","title":"Hetzner KVM guest networking"},{"content":"Firstoff, adjust the /etc/network/interfaces file to look like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 # device: eth0 auto eth0 iface eth0 inet static address 78.46.37.118 netmask 255.255.255.255 gateway 78.46.37.97 pointopoint 78.46.37.97 iface eth0 inet6 static address 2a01:4f8:110:3148::2 netmask 64 gateway fe80::1 auto vmbr0 iface vmbr0 inet static address 78.46.37.118 netmask 255.255.255.255 bridge_ports none bridge_stp off bridge_fd 0 post-up ip route add 78.46.37.108/32 dev vmbr0 post-up ip route add 78.46.37.110/32 dev vmbr0 post-up ip route add 78.46.37.114/32 dev vmbr0 iface vmbr0 inet6 static address 2a01:4f8:110:3148::2 netmask 64 post-up ip -6 neigh add proxy 2a01:4f8:110:3148::3 dev eth0 post-up ip -6 neigh add proxy 2a01:4f8:110:3148::4 dev eth0 post-up ip -6 neigh add proxy 2a01:4f8:110:3148::5 dev eth0 post-up ip -6 neigh add proxy 2a01:4f8:110:3148::6 dev eth0 post-up ip -6 neigh add proxy 2a01:4f8:110:3148::7 dev eth0 post-up ip -6 neigh add proxy 2a01:4f8:110:3148::8 dev eth0 post-up ip -6 neigh add proxy 2a01:4f8:110:3148::9 dev eth0 Secondly, adjust you KVM guest network config to look like this (similar, you might want to replace the MAC address of the guest):\n1 2 3 4 5 6 \u0026lt;interface type=\u0026#39;bridge\u0026#39;\u0026gt; \u0026lt;mac address=\u0026#39;52:54:00:3c:de:d1\u0026#39;/\u0026gt; \u0026lt;source bridge=\u0026#39;vmbr0\u0026#39;/\u0026gt; \u0026lt;model type=\u0026#39;virtio\u0026#39;/\u0026gt; \u0026lt;address type=\u0026#39;pci\u0026#39; domain=\u0026#39;0x0000\u0026#39; bus=\u0026#39;0x00\u0026#39; slot=\u0026#39;0x03\u0026#39; function=\u0026#39;0x0\u0026#39;/\u0026gt; \u0026lt;/interface\u0026gt; ","permalink":"https://christian.blog.pakiheim.de/posts/2013-06-17_hetzner-kvm-host-bridge-configuration/","summary":"\u003cp\u003eFirstoff, adjust the /etc/network/interfaces file to look like this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# device: eth0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eauto eth0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eiface eth0 inet static\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        address         78.46.37.118\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        netmask         255.255.255.255\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        gateway         78.46.37.97\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        pointopoint     78.46.37.97\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eiface eth0 inet6 static\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        address         2a01:4f8:110:3148::2\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        netmask         64\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        gateway         fe80::1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eauto vmbr0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eiface vmbr0 inet static\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        address         78.46.37.118\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        netmask         255.255.255.255\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        bridge_ports    none\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        bridge_stp      off\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        bridge_fd       0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        post-up         ip route add 78.46.37.108/32 dev vmbr0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        post-up         ip route add 78.46.37.110/32 dev vmbr0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        post-up         ip route add 78.46.37.114/32 dev vmbr0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eiface vmbr0 inet6 static\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        address         2a01:4f8:110:3148::2\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        netmask         64\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        post-up         ip -6 neigh add proxy 2a01:4f8:110:3148::3 dev eth0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        post-up         ip -6 neigh add proxy 2a01:4f8:110:3148::4 dev eth0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        post-up         ip -6 neigh add proxy 2a01:4f8:110:3148::5 dev eth0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        post-up         ip -6 neigh add proxy 2a01:4f8:110:3148::6 dev eth0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        post-up         ip -6 neigh add proxy 2a01:4f8:110:3148::7 dev eth0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        post-up         ip -6 neigh add proxy 2a01:4f8:110:3148::8 dev eth0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        post-up         ip -6 neigh add proxy 2a01:4f8:110:3148::9 dev eth0\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eSecondly, adjust you KVM guest network config to look like this (similar, you might want to replace the MAC address of the guest):\u003c/p\u003e","title":"Hetzner KVM host bridge configuration"},{"content":"Create a file /autosetup in the rescue system, that may (or may not) look like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 DRIVE1 /dev/sda DRIVE2 /dev/sdb SWRAID 1 SWRAIDLEVEL 1 BOOTLOADER grub HOSTNAME nyx PART /boot ext2 512M PART swap swap 12G PART lvm vg0 all LV vg0 root / ext3 5G LV vg0 home /home ext3 50G LV vg0 usr /usr ext3 10G LV vg0 tmp /tmp ext3 5G LV vg0 var /var ext3 5G IMAGE /root/.oldroot/nfs/install/../images/Debian-70-wheezy-64-minimal.tar.gz ","permalink":"https://christian.blog.pakiheim.de/posts/2013-06-16_automating-standardizing-hetzner-server-installs-with-installimage/","summary":"\u003cp\u003eCreate a file /autosetup in the rescue system, that may (or may not) look like this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eDRIVE1\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edev\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003esda\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eDRIVE2\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edev\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003esdb\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eSWRAID\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eSWRAIDLEVEL\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eBOOTLOADER\u003c/span\u003e \u003cspan class=\"n\"\u003egrub\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eHOSTNAME\u003c/span\u003e \u003cspan class=\"n\"\u003enyx\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePART\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eboot\u003c/span\u003e  \u003cspan class=\"n\"\u003eext2\u003c/span\u003e        \u003cspan class=\"mi\"\u003e512\u003c/span\u003e\u003cspan class=\"n\"\u003eM\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePART\u003c/span\u003e \u003cspan class=\"n\"\u003eswap\u003c/span\u003e   \u003cspan class=\"n\"\u003eswap\u003c/span\u003e         \u003cspan class=\"mi\"\u003e12\u003c/span\u003e\u003cspan class=\"n\"\u003eG\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ePART\u003c/span\u003e \u003cspan class=\"n\"\u003elvm\u003c/span\u003e    \u003cspan class=\"n\"\u003evg0\u003c/span\u003e          \u003cspan class=\"n\"\u003eall\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eLV\u003c/span\u003e \u003cspan class=\"n\"\u003evg0\u003c/span\u003e      \u003cspan class=\"n\"\u003eroot\u003c/span\u003e         \u003cspan class=\"o\"\u003e/\u003c/span\u003e              \u003cspan class=\"n\"\u003eext3\u003c/span\u003e        \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"n\"\u003eG\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eLV\u003c/span\u003e \u003cspan class=\"n\"\u003evg0\u003c/span\u003e      \u003cspan class=\"n\"\u003ehome\u003c/span\u003e         \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ehome\u003c/span\u003e          \u003cspan class=\"n\"\u003eext3\u003c/span\u003e       \u003cspan class=\"mi\"\u003e50\u003c/span\u003e\u003cspan class=\"n\"\u003eG\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eLV\u003c/span\u003e \u003cspan class=\"n\"\u003evg0\u003c/span\u003e      \u003cspan class=\"n\"\u003eusr\u003c/span\u003e          \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eusr\u003c/span\u003e           \u003cspan class=\"n\"\u003eext3\u003c/span\u003e       \u003cspan class=\"mi\"\u003e10\u003c/span\u003e\u003cspan class=\"n\"\u003eG\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eLV\u003c/span\u003e \u003cspan class=\"n\"\u003evg0\u003c/span\u003e      \u003cspan class=\"n\"\u003etmp\u003c/span\u003e          \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003etmp\u003c/span\u003e           \u003cspan class=\"n\"\u003eext3\u003c/span\u003e        \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"n\"\u003eG\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eLV\u003c/span\u003e \u003cspan class=\"n\"\u003evg0\u003c/span\u003e      \u003cspan class=\"k\"\u003evar\u003c/span\u003e          \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"k\"\u003evar\u003c/span\u003e           \u003cspan class=\"n\"\u003eext3\u003c/span\u003e        \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"n\"\u003eG\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eIMAGE\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eroot\u003c/span\u003e\u003cspan class=\"o\"\u003e/.\u003c/span\u003e\u003cspan class=\"n\"\u003eoldroot\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003enfs\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003einstall\u003c/span\u003e\u003cspan class=\"o\"\u003e/../\u003c/span\u003e\u003cspan class=\"n\"\u003eimages\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eDebian\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e70\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ewheezy\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e64\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eminimal\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etar\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003egz\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Automating/Standardizing Hetzner server installs with installimage"},{"content":"Well, I\u0026rsquo;ve been tinkering with KVM the last few days and I\u0026rsquo;ve been stuck accessing the KVM guests (as the guests are running on a host I don\u0026rsquo;t have my Xorg server running on). After a bit of searching, I actually found what I was looking for.\nPiecing together from both sources, to connect to a KVM host, that has SSH running on a different port:\n1 virt-viewer --connect qemu+ssh://root@kvm.home.barfoo.org:222/system guest ","permalink":"https://christian.blog.pakiheim.de/posts/2013-06-12_virt-viewer-qemu-ssh-to-a-kvm-host-running-ssh-on-a-different-port/","summary":"\u003cp\u003eWell, I\u0026rsquo;ve been tinkering with KVM the last few days and I\u0026rsquo;ve been stuck accessing the KVM guests (as the guests are running on a host I don\u0026rsquo;t have my Xorg server running on). After a bit of searching, I actually found what I was \u003ca href=\"http://qemu-buch.de/d/Managementtools/_libvirt-Tools\"\u003elooking\u003c/a\u003e \u003ca href=\"http://libvirt.org/guide/html/Application_Development_Guide-Architecture-Remote_URIs.html\"\u003efor\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePiecing together from both sources, to connect to a KVM host, that has SSH running on a different port:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evirt-viewer --connect qemu+ssh://root@kvm.home.barfoo.org:222/system guest\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"virt-viewer: qemu+ssh to a KVM host running SSH on a different port"},{"content":"**Code:****Result:**fortknoxAdd $1000 CashkeyholemasterReveal MapineedalltechnosAll TechyeepeekayeNuclear Strike at CursorbigbrotherUnlock Camera ModemotherrussiaSummon M80 TankcoolihaveanewcarSummon CIA Armored VancoolimthepresidentSummon U.S. PredisentswatatyourordersSummon SWATymcaSummon U.S. CopgreenjellySummon U.K. CopbringoutthedeadSummon AmbulanceduckhuntSummon a Flying DuckblackhawkdownSummon SA12 Anti-Aircraft Missile\nCheats MOD: **Code:****Result:**abramsSummon a M1A2 Abrams tankapcSummon a M1A1 Bradley APChindSummon a MI24 Hind gunshipburkeSummon a DDG-51 Arleigh Burke Missile DestroyertarawaSummon a Tarawa class Landing Helicopter DockoliverSummon a FFG-7 Oliver-Hazard-Perry class FrigateddxSummon a DDX Zumwalt class destroyersananSummon a San Antonio-class amphibious transport dockbulldSummon bulldozer constructor (US army builder)seastalSummon a CH-53 Sea StallionhipconSummon a Hip Constructor (consortium builder)hoshawkSummon a Medivac BlackhawkhawkSummon a BlackhawkvrepairSummon a V22 repairmarineSummon a U.S. marinesniperSummon a U.S. sniperblackhawkdownSummon a 9K22 TunguskafortknoxAdd $10.000 Cash\n","permalink":"https://christian.blog.pakiheim.de/posts/2013-05-09_act-of-war-high-treason-cheats/","summary":"\u003cp\u003e**Code:****Result:**fortknoxAdd $1000 CashkeyholemasterReveal MapineedalltechnosAll TechyeepeekayeNuclear Strike at CursorbigbrotherUnlock Camera ModemotherrussiaSummon M80 TankcoolihaveanewcarSummon CIA Armored VancoolimthepresidentSummon U.S. PredisentswatatyourordersSummon SWATymcaSummon U.S. CopgreenjellySummon U.K. CopbringoutthedeadSummon AmbulanceduckhuntSummon a Flying DuckblackhawkdownSummon SA12 Anti-Aircraft Missile\u003c/p\u003e\n\u003cp\u003eCheats MOD:\n**Code:****Result:**abramsSummon a M1A2 Abrams tankapcSummon a M1A1 Bradley APChindSummon a MI24 Hind gunshipburkeSummon a DDG-51 Arleigh Burke Missile DestroyertarawaSummon a Tarawa class Landing Helicopter DockoliverSummon a FFG-7 Oliver-Hazard-Perry class FrigateddxSummon a DDX Zumwalt class destroyersananSummon a San Antonio-class amphibious transport dockbulldSummon bulldozer constructor (US army builder)seastalSummon a CH-53 Sea StallionhipconSummon a Hip Constructor (consortium builder)hoshawkSummon a Medivac BlackhawkhawkSummon a BlackhawkvrepairSummon a V22 repairmarineSummon a U.S. marinesniperSummon a U.S. sniperblackhawkdownSummon a 9K22 TunguskafortknoxAdd $10.000 Cash\u003c/p\u003e","title":"Act of War: High Treason cheats"},{"content":"Today I looked at my ADSL router and had a flashback about five years ago. Back then I was working for the university and used a dual line ISDN link for internet which had about the same bandwidth as my ADSL currently has \u0026hellip; After that experience I know how people must feel in some areas where internet isn\u0026rsquo;t as advanced as my normal 2MBit ADSL line \u0026hellip; Loading YouTube or even a simple forum is a real waiting game (took me about two minutes to load up a hit out of Google), and I even attest myself a dependency on even normal ADSL (not one of that superfast 32MBit lines - just 2MBit).\nI can\u0026rsquo;t even use VPN/Citrix over those 164 KBit (yeah, it\u0026rsquo;s too slow). So guess I\u0026rsquo;m rooting for the Telekom technician today. \u0026#x1f937;\n","permalink":"https://christian.blog.pakiheim.de/posts/2013-05-08_5-year-flashback/","summary":"\u003cp\u003eToday I looked at my ADSL router and had a flashback about five years ago. Back then I was working for the university and used a dual line ISDN link for internet which had about the same bandwidth as my ADSL currently has \u0026hellip; \u003ca href=\"/uploads/2013/05/dsl-speed.png\"\u003e\u003cimg alt=\"Synchronous DSL speed\" loading=\"lazy\" src=\"/uploads/2013/05/dsl-speed.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAfter that experience I know how people must feel in some areas where internet isn\u0026rsquo;t as advanced as my normal 2MBit ADSL line \u0026hellip; Loading YouTube or even a simple forum is a real waiting game (took me about two minutes to load up a hit out of Google), and I even attest myself a dependency on even normal ADSL (not one of that superfast 32MBit lines - just 2MBit).\u003c/p\u003e","title":"5 year flashback"},{"content":"Well, we\u0026rsquo;ve been battling with a KVM bug in our UCS installation, that\u0026rsquo;s been driving me (and apparently the Cisco L3 support and development) nuts. But lets back up a bit. If you\u0026rsquo;ve worked with UCS before, once you open up the KVM console you\u0026rsquo;ll see the KVM and a shortcut commands (Shutdown, Reset) and another tab that allows you to mount virtual media.\nOnce you open it up, it should look like this:\nUCS Manager: KVM console working fine\nNow, when we re-installed some of our servers (mostly the XenServer\u0026rsquo;s) and out of a sudden the KVM virtual media didn\u0026rsquo;t work for some reason. The UCS KVM would suddenly reject us from switching to the virtual media tab, saying that either the Login timed out or we\u0026rsquo;d have the wrong user and/or password, even if we tried with the most powerful user the UCS has, the local admin account.\nUCS Manager - KVM virtual media tab rejecting authentification\nSo I opened a TAC, and Cisco got to work on it immediately. After poking around in the depths of the fabric interconnect with a dplug extension from Cisco with a Cisco L3 guy, and after about two months of development I just got a call back from the Cisco support guy. Apparently development figured out why we\u0026rsquo;d get the above error message.\nOnce you put a hash tag (#) in the Service Profiles User Label you\u0026rsquo;d get the error message.\nUCS Manager - User Label\nOnce I removed the hash tag, the KVM started working like it\u0026rsquo;s supposed to do. So if anyone ever comes across this, that\u0026rsquo;s your solution. Apparently Cisco is going to fix this in an upcoming release, but just removing the hash tag and everything is fine.\n","permalink":"https://christian.blog.pakiheim.de/posts/2013-04-28_ucs-manager-2-0-2r-kvm-bug/","summary":"\u003cp\u003eWell, we\u0026rsquo;ve been battling with a KVM bug in our UCS installation, that\u0026rsquo;s been driving me (and apparently the Cisco L3 support and development) nuts. But lets back up a bit. If you\u0026rsquo;ve worked with UCS before, once you open up the KVM console you\u0026rsquo;ll see the KVM and a shortcut commands (Shutdown, Reset) and another tab that allows you to mount virtual media.\u003c/p\u003e\n\u003cp\u003eOnce you open it up, it should look like this:\u003c/p\u003e","title":"UCS Manager 2-0-2r KVM bug"},{"content":"Well, a coworker of mine asked me about this. Since I didn\u0026rsquo;t know (yeah, I don\u0026rsquo;t know everything) I went to my trusted friend - Google - and searched for it. There seems to be a lot of confusion about this, so I thought I\u0026rsquo;d clarify this.\nI ended up putting a license to one of my hosts in vCenter.\nYeah well, the host has a bit more memory than the allowed 32GB vRAM per Socket (the host has two sockets) - thus you\u0026rsquo;re allowed to have 64GB RAM if your host has two sockets.\n","permalink":"https://christian.blog.pakiheim.de/posts/2013-04-28_vmware-esxi-free-memory-limits-corrected/","summary":"\u003cp\u003eWell, a coworker of mine asked me about this. Since I didn\u0026rsquo;t know (yeah, I don\u0026rsquo;t know everything) I went to my trusted friend - Google - and searched for it. There seems to be a lot of confusion about this, so I thought I\u0026rsquo;d clarify this.\u003c/p\u003e\n\u003cp\u003eI ended up putting a license to one of my hosts in vCenter.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/uploads/2013/04/esxi-free-memory-limit1.png\"\u003e\u003cimg alt=\"VMware ESXi Free Edition  Memory Limit\" loading=\"lazy\" src=\"/uploads/2013/04/esxi-free-memory-limit1.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eYeah well, the host has a bit more memory than the allowed 32GB vRAM per Socket (the host has two sockets) - thus you\u0026rsquo;re allowed to have 64GB RAM if your host has two sockets.\u003c/p\u003e","title":"VMware ESXi - Free memory limits corrected"},{"content":"Well, for the past two months I had a case open with NetApp to figure out this SnapVault replication issue we were seeing. The initial transfer of the SnapVault relation would complete with a hick up, manual snapshot transfers also work - just the scheduled, auto-created Snapshots won\u0026rsquo;t replicate.\nAt first I (and the NetApp support) thought this was an issue with SnapVault itself, however after being away for the last four weeks I looked at the issue with fresh eyes. After a short peek into the logs, I found what I had found back when I first looked into this.\n1 2 3 4 5 6 Mon Apr 1 21:16:46 CEST [fas01: lun.offline:warning]: LUN /vol/flex_windows_boot/sv/{6f3899ab-6c8a-402e-bbb7-d7b7298d254f}.aux has been taken offline Mon Apr 1 21:16:46 CEST [fas01: lun.offline:warning]: LUN /vol/flex_windows_boot/sv/{6f3899ab-6c8a-402e-bbb7-d7b7298d254f}.rws has been taken offline Mon Apr 1 23:06:35 CEST [fas01: rpl.src.lun.invalid_clone:error]: Replication source transfer failed due to an invalid LUN clone with fileid 32466 in snapid 67 in volume flex_windows_boot. Mon Apr 1 23:06:35 CEST [fas01: replication.src.err:error]: SnapVault: source transfer from /vol/flex_windows_boot/sv/ to fas03:/vol/flex_windows_boot/sv : replication source found an invalid lun clone. Mon Apr 1 23:08:35 CEST [fas01: rpl.src.lun.invalid_clone:error]: Replication source transfer failed due to an invalid LUN clone with fileid 32466 in snapid 67 in volume flex_windows_boot. Mon Apr 1 23:08:36 CEST [fas01: replication.src.err:error]: SnapVault: source transfer from /vol/flex_windows_boot/sv/ to fas03:/vol/flex_windows_boot/sv : replication source found an invalid lun clone. SnapVault would create the daily snapshot on the SnapVault Primary and start the replication. However something (or someone, wasn\u0026rsquo;t clear at this point) then created a FlexClone of a volume \u0026hellip; And as, back when we first encountered this, I was kinda puzzled.\nBut then I decided (please don\u0026rsquo;t ask me what made me look there) to look at the logs of the NetApp Filer on our logserver. As it turns out, back when I enabled syslogging to an external logserver I seem to have enabled debug logging \u0026hellip; and it was great to have that! Below you\u0026rsquo;ll find the log I found - and as you can see there\u0026rsquo;s at least a clue as to from where that ghost snapshot is coming from.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Apr 1 21:16:46 fas01 [fas01: lun.offline:warning]: LUN /vol/flex_windows_boot/sv/{6f3899ab-6c8a-402e-bbb7-d7b7298d254f}.aux has been taken offline Apr 1 21:16:46 fas01 [fas01: lun.destroy:info]: LUN /vol/flex_windows_boot/sv/{6f3899ab-6c8a-402e-bbb7-d7b7298d254f}.aux destroyed Apr 1 21:16:46 fas01 [fas01: lun.offline:warning]: LUN /vol/flex_windows_boot/sv/{6f3899ab-6c8a-402e-bbb7-d7b7298d254f}.rws has been taken offline Apr 1 21:16:48 fas01 [fas01: lun.map:info]: LUN /vol/flex_windows_boot/sv/{6f3899ab-6c8a-402e-bbb7-d7b7298d254f}.rws was mapped to initiator group viaRPC.20:00:00:25:b5:02:0a:4c.b230-5=3 Apr 1 21:16:48 fas01 [fas01: lun.map:info]: LUN /vol/flex_windows_boot/sv/{6f3899ab-6c8a-402e-bbb7-d7b7298d254f}.rws was mapped to initiator group viaRPC.20:00:00:25:b5:02:0b:4c.b230-5=3 Apr 1 22:05:31 fas01 [fas01: lun.map.unmap:info]: LUN /vol/flex_windows_boot/sv/{6f3899ab-6c8a-402e-bbb7-d7b7298d254f}.rws unmapped from initiator group viaRPC.20:00:00:25:b5:02:0a:4c.b230-5 Apr 1 22:05:31 fas01 [fas01: lun.map.unmap:info]: LUN /vol/flex_windows_boot/sv/{6f3899ab-6c8a-402e-bbb7-d7b7298d254f}.rws unmapped from initiator group viaRPC.20:00:00:25:b5:02:0b:4c.b230-5 Apr 1 22:05:35 fas01 [fas01: lun.destroy:info]: LUN /vol/flex_windows_boot/sv/{6f3899ab-6c8a-402e-bbb7-d7b7298d254f}.rws destroyed Apr 1 22:05:37 fas01 [fas01: wafl.snap.delete:info]: Snapshot copy {25b8da84-9351-4f20-987c-e7b02d76f15e} on volume flex_windows_boot NetApp was deleted by the Data ONTAP function zapi_snapshot_ delete. The unique ID for this Snapshot copy is (64, 3471969). Apr 1 23:06:35 fas01 [fas01: rpl.src.lun.invalid_clone:error]: Replication source transfer failed due to an invalid LUN clone with fileid 32466 in snapid 67 in volume flex_windows_boot. Apr 1 23:06:35 fas01 [fas01: snapdiff.abnormal.abort:debug]: Encountered unexpected error while computing differences between Snapshot copies. Apr 1 23:06:35 fas01 [fas01: replication.src.err:error]: SnapVault: source transfer from /vol/flex_windows_boot/sv/ to fas03:/vol/flex_windows_boot/sv : replication source found an invalid lun clone. Apr 1 23:08:35 fas01 [fas01: rpl.src.lun.invalid_clone:error]: Replication source transfer failed due to an invalid LUN clone with fileid 32466 in snapid 67 in volume flex_windows_boot. Apr 1 23:08:35 fas01 [fas01: snapdiff.abnormal.abort:debug]: Encountered unexpected error while computing differences between Snapshot copies. Apr 1 23:08:36 fas01 [fas01: replication.src.err:error]: SnapVault: source transfer from /vol/flex_windows_boot/sv/ to fas03:/vol/flex_windows_boot/sv : replication source found an invalid lun clone. Now, with knowing from which corner this issue originated it dawned on me, we have had a similar issue before. A quick peek into TSM Manager and I knew I was on the right track. The daily system backup starts around 21:15. Now our TSM backup includes the System State backup (which in turn utilizes VSS - which triggers the NetApp Snapshot!).\nAfter excluding the System State from the Daily Backup the SnapVault stuff worked without a hickup. I ended up removing SnapDrive from the Server in question, since we don\u0026rsquo;t really need it there. Snapshots created from SnapDrive of the boot lun are gonna be inconsistent anyhow (doesn\u0026rsquo;t matter if I do \u0026rsquo;em from SnapDrive or the NetApp CLI).\nThat restored the default VSS handler, which enables TSM to backup the System State again.\n","permalink":"https://christian.blog.pakiheim.de/posts/2013-04-09_dealing-with-snapvault-replication-issues/","summary":"\u003cp\u003eWell, for the past two months I had a case open with NetApp to figure out this SnapVault replication issue we were seeing. The initial transfer of the SnapVault relation would complete with a hick up, manual snapshot transfers also work - just the scheduled, auto-created Snapshots won\u0026rsquo;t replicate.\u003c/p\u003e\n\u003cp\u003eAt first I (and the NetApp support) thought this was an issue with SnapVault itself, however after being away for the last four weeks I looked at the issue with fresh eyes. After a short peek into the logs, I found what I had found back when I first looked into this.\u003c/p\u003e","title":"Dealing with SnapVault replication issues"},{"content":"Download links:\nOffice 2010 Professional Plus (incl. SP1) 32bit/ 64bit Business Contact Manager 2010 32bit/ 64bit Microsoft Lync 2010 32bit/ 64bit Product Key:\nC74VQ-8YRBX-YCF3V-C8XRH-4YCHF\n","permalink":"https://christian.blog.pakiheim.de/posts/2013-03-09_office-2010-professional/","summary":"\u003cp\u003e\u003cstrong\u003eDownload links\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eOffice 2010 Professional Plus (incl. SP1) \u003ca href=\"https://downloadoffice2010.microsoft.com/usa/registerkey.aspx?ref=backup\"\u003e32bit\u003c/a\u003e/ \u003ca href=\"https://downloadoffice2010.microsoft.com/usa/registerkey.aspx?ref=backup\"\u003e64bit\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBusiness Contact Manager 2010 \u003ca href=\"https://downloadoffice2010.microsoft.com/usa/registerkey.aspx?ref=backup\"\u003e32bit\u003c/a\u003e/ \u003ca href=\"https://downloadoffice2010.microsoft.com/usa/registerkey.aspx?ref=backup\"\u003e64bit\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMicrosoft Lync 2010 \u003ca href=\"https://downloadoffice2010.microsoft.com/usa/registerkey.aspx?ref=backup\"\u003e32bit\u003c/a\u003e/ \u003ca href=\"https://downloadoffice2010.microsoft.com/usa/registerkey.aspx?ref=backup\"\u003e64bit\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eProduct Key:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eC74VQ-8YRBX-YCF3V-C8XRH-4YCHF\u003c/p\u003e\n\u003c/blockquote\u003e","title":"Office 2010 Professional"},{"content":"Windows 7 Installations-Keys:\nWindows 7 Professional: YKHFT-KW986-GK4PY-FDWYH-7TP9F\nWindows 7 Ultimate: 7JQWQ-K6KWQ-BJD6C-K3YVH-DVQJG\nWindows 7 Ultimate: D9RHV-JG8XC-C77H2-3YF6D-RYRJ9\nWindows 7 Ultimate: 482XP-6J9WR-4JXT3-VBPP6-FQF4M\nWindows 7 Ultimate: RFFTV-J6K7W-MHBQJ-XYMMJ-Q8DCH\nWindows 7 Anytime Upgrade-Keys:\nWindows 7 Professional: VTDC3-WM7HP-XMPMX-K4YQ2-WYGJ8\nWindows 7 Home Premium: RHPQ2-RMFJH-74XYM-BH4JX-XM76F\nWindows 7 Ultimate: 22TKD-F8XX6-YG69F-9M66D-PMJBM\nInstallationsmedien:\nWindows 7 Professional: 32bit/ 64bit\n","permalink":"https://christian.blog.pakiheim.de/posts/2013-03-09_windows-7-keys/","summary":"\u003cp\u003e\u003cstrong\u003eWindows 7 Installations-Keys\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWindows 7 Professional:    YKHFT-KW986-GK4PY-FDWYH-7TP9F\u003c/p\u003e\n\u003cp\u003eWindows 7 Ultimate:            7JQWQ-K6KWQ-BJD6C-K3YVH-DVQJG\u003c/p\u003e\n\u003cp\u003eWindows 7 Ultimate:            D9RHV-JG8XC-C77H2-3YF6D-RYRJ9\u003c/p\u003e\n\u003cp\u003eWindows 7 Ultimate:            482XP-6J9WR-4JXT3-VBPP6-FQF4M\u003c/p\u003e\n\u003cp\u003eWindows 7 Ultimate:            RFFTV-J6K7W-MHBQJ-XYMMJ-Q8DCH\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eWindows 7 Anytime Upgrade-Keys\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWindows 7 Professional:          VTDC3-WM7HP-XMPMX-K4YQ2-WYGJ8\u003c/p\u003e\n\u003cp\u003eWindows 7 Home Premium:   RHPQ2-RMFJH-74XYM-BH4JX-XM76F\u003c/p\u003e\n\u003cp\u003eWindows 7 Ultimate:                 22TKD-F8XX6-YG69F-9M66D-PMJBM\u003c/p\u003e\n\u003cp\u003eInstallationsmedien:\u003c/p\u003e\n\u003cp\u003eWindows 7 Professional:   \u003ca href=\"http://msft.digitalrivercontent.net/win/X17-59886.iso\"\u003e32bit\u003c/a\u003e/ \u003ca href=\"http://msft.digitalrivercontent.net/win/X17-59885.iso\"\u003e64bit\u003c/a\u003e\u003c/p\u003e","title":"Windows 7 Keys"},{"content":"Well, I have a openvpn script on my DiskStation, and apparently the \u0026ldquo;normal\u0026rdquo; services (like the packages) start before optware (that\u0026rsquo;s where my openvpn client is located), it immidiatly starts downloading (which isn\u0026rsquo;t really that desired). So looking at the SABnzbd command line parameters there\u0026rsquo;s one option that looks like it\u0026rsquo;s what I want:\n-p\u0026ndash;pauseStart in paused mode\n","permalink":"https://christian.blog.pakiheim.de/posts/2013-02-23_sabnzbd-start-daemon-in-paused-mode/","summary":"\u003cp\u003eWell, I have a openvpn script on my DiskStation, and apparently the \u0026ldquo;normal\u0026rdquo; services (like the packages) start before optware (that\u0026rsquo;s where my openvpn client is located), it immidiatly starts downloading (which isn\u0026rsquo;t really that desired). So looking at the \u003ca href=\"http://wiki.sabnzbd.org/command-line-parameters\"\u003eSABnzbd command line parameters\u003c/a\u003e there\u0026rsquo;s one option that looks like it\u0026rsquo;s what I want:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e-p\u0026ndash;pauseStart in paused mode\u003c/p\u003e\n\u003c/blockquote\u003e","title":"SABnzbd: Start daemon in paused mode"},{"content":"First, you need to enable Click\u0026amp;Load link submittion from external hosts (Config-\u0026gt;Plugins-\u0026gt;ClickAndLoad-\u0026gt;Allow external link adding).\nAfter that, simply add the forwarding rule using an elevated command prompt:\n1 netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=9666 connectaddress=\u0026lt;nasip\u0026gt; connectport=9666 ","permalink":"https://christian.blog.pakiheim.de/posts/2013-02-17_synology-pyload-click-amp-load-from-a-remote-host/","summary":"\u003cp\u003eFirst, you need to enable Click\u0026amp;Load link submittion from external hosts (Config-\u0026gt;Plugins-\u0026gt;ClickAndLoad-\u0026gt;Allow external link adding).\u003c/p\u003e\n\u003cp\u003eAfter that, simply add the forwarding rule using an elevated command prompt:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-batch\" data-lang=\"batch\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enetsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=9666 connectaddress=\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003enasip\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e connectport=9666\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Synology: pyLoad - Clickundamp;Load from a remote host"},{"content":"My VPN provider isn\u0026rsquo;t being supported by the Synology VPN client (because they aren\u0026rsquo;t using the standard port 1194, instead 1195). After tinkering with the ovpn files the Synology VPN client uses to store the connection settings (and failing), I just installed openvpn with ipkg.\nHowever after tinkering around with the init-script provided by the openvpn ipkg from the NSLU2 feed, I got tired and just rewrote the damn thing:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 #!/bin/sh case $1 in start) # Enable ipv4_forwarding echo 1 \u0026gt; /proc/sys/net/ipv4/ip_forward # Create the necessary file structure for /dev/net/tun if ( [ ! -c /dev/net/tun ] ); then if ( [ ! -d /dev/net ] ); then mkdir -m 755 /dev/net fi mknod /dev/net/tun c 10 200 fi # Load the tun module if not already loaded if ( !(lsmod | grep -q \u0026#34;^tun\u0026#34;) ); then insmod /lib/modules/tun.ko fi # Start the openvpn service /opt/sbin/openvpn --daemon --cd /opt/etc/openvpn --config openvpn.conf --writepid /var/run/openvpn.pid echo \u0026#34;Started Optware openvpn-client\u0026#34; ;; stop) # Kill the openvpn service if [ -f /var/run/openvpn.pid ] ; then # Compare the pidfile and the current pid [ \u0026#34;`cat /var/run/openvpn.pid`\u0026#34; == \u0026#34;`pidof openvpn`\u0026#34; ] \u0026amp;\u0026amp; kill -TERM `pidof openvpn` else echo \u0026#34;Stopping Optware openvpn-client: No pidfile found\u0026#34; fi # Unload the tun module if ( (lsmod | grep -q \u0026#34;^tun\u0026#34;) ); then rmmod -f tun fi echo \u0026#34;Stopping Optware openvpn-client\u0026#34; ;; status) # Check the status if [ -f /var/run/openvpn.pid ] ; then [ \u0026#34;`cat /var/run/openvpn.pid`\u0026#34; == \u0026#34;`pidof openvpn`\u0026#34; ] \u0026amp;\u0026amp; echo \u0026#34;openvpn-client is running\u0026#34; else echo \u0026#34;openvpn-client is stopped\u0026#34; fi ;; reload) if [ -f /var/run/openvpn.pid ] ; then [ \u0026#34;`cat /var/run/openvpn.pid`\u0026#34; == \u0026#34;`pidof openvpn`\u0026#34; ] \u0026amp;\u0026amp; kill -HUP `pidof openvpn` echo \u0026#34;Reloading Optware openvpn-client\u0026#34; fi ;; restart) $0 stop sleep 4 $0 start ;; esac Place the file in /opt/etc/init.d/S20openvpn, and the client daemon will start on boot.\n","permalink":"https://christian.blog.pakiheim.de/posts/2013-02-06_synology-new-openvpn-init-script/","summary":"\u003cp\u003eMy VPN provider isn\u0026rsquo;t being supported by the Synology VPN client (because they aren\u0026rsquo;t using the standard port 1194, instead 1195). After tinkering with the ovpn files the Synology VPN client uses to store the connection settings (and failing), I just installed openvpn with ipkg.\u003c/p\u003e\n\u003cp\u003eHowever after tinkering around with the init-script provided by the openvpn ipkg from the NSLU2 feed, I got tired and just rewrote the damn thing:\u003c/p\u003e","title":"Synology: New openvpn init script"},{"content":"As so often, I wanted a script, that\u0026rsquo;ll crawl my filers and regenerate the configuration if there are any new volumes/snapvaults/snapmirrors or if one of them has been removed.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 #!/bin/bash FAS_HOSTS=\u0026#34;$( ls /etc/nagios/objects/hosts/san/fas*{a,b}.cfg | cut -d/ -f7 | cut -d. -f1 )\u0026#34; for host in $FAS_HOSTS; do OUTPUT_FILE=/etc/nagios/objects/hosts/san/$host-vol.cfg # Clear the output file echo \u0026#34;\u0026#34; \u0026gt; $OUTPUT_FILE # Get the volume list for volume in `ssh $host vol status | awk \u0026#39;{ print $1 }\u0026#39; | grep ^vol | sort -u | grep -v vol0$`; do user=\u0026#34;$( grep \u0026#34;USER=\u0026#34; /etc/netapp-sdk/$host | cut -d= -f2 )\u0026#34; pass=\u0026#34;$( grep \u0026#34;PASS=\u0026#34; /etc/netapp-sdk/$host | cut -d= -f2 )\u0026#34; #\techo \u0026#34;define service {\u0026#34; #\techo \u0026#34;\tuse\tgeneric-service\u0026#34; #\techo \u0026#34;\u0026#34; #\techo \u0026#34;\tcheck_command\tcheck_netapp-volfree!$user!$pass!${volume}!92!98\u0026#34; #\techo \u0026#34;\tcheck_interval\t5\u0026#34; #\techo \u0026#34;\thost_name\t${host}\u0026#34; #\techo \u0026#34;\tnotifications_enabled\t0\u0026#34; #\techo \u0026#34;\tnotification_interval\t720\u0026#34; #\techo \u0026#34;\tservice_description\tVOLSPACE ${volume}\u0026#34; #\techo \u0026#34;}\u0026#34; echo echo \u0026#34;define service {\u0026#34; echo \u0026#34;\tuse\tgeneric-service-san-perfdata\u0026#34; echo \u0026#34;\u0026#34; echo \u0026#34;\tcheck_command\tcheck_netapp-lunspace!$user!$pass!${volume}\u0026#34; echo \u0026#34;\tcheck_interval\t5\u0026#34; echo \u0026#34;\thost_name\t${host}\u0026#34; echo \u0026#34;\tnotifications_enabled\t0\u0026#34; echo \u0026#34;\tnotification_interval\t720\u0026#34; echo \u0026#34;\tservice_description\tLUNSPACE ${volume}\u0026#34; echo \u0026#34;}\u0026#34; echo SR=\u0026#34;$( ssh $host snap reserve $volume | cut -d -f7 )\u0026#34; if [ \u0026#34;$SR\u0026#34; != \u0026#34;0%\u0026#34; ] ; then echo \u0026#34;define service {\u0026#34; echo \u0026#34;\tuse\tgeneric-service-san-perfdata\u0026#34; echo \u0026#34;\u0026#34; echo \u0026#34;\tcheck_command\tcheck_netapp-snapreserve!$user!$pass!${volume}\u0026#34; echo \u0026#34;\tcheck_interval\t10\u0026#34; echo \u0026#34;\thost_name\t${host}\u0026#34; echo \u0026#34;\tnotifications_enabled\t0\u0026#34; echo \u0026#34;\tnotification_interval\t720\u0026#34; echo \u0026#34;\t# SR:\t$SR\u0026#34; echo \u0026#34;\tservice_description\tSNAPRESERVE ${volume}\u0026#34; echo \u0026#34;}\u0026#34; echo fi done | tee -a $OUTPUT_FILE # Check snapvault foo for sv in `ssh $host snapvault status -l 2\u0026gt;/dev/null | awk \u0026#39;{ print $2 }\u0026#39; | grep vol`; do # only do the checks on sv_secondary if [ \u0026#34;$( echo $sv | grep $host | cut -d: -f1 )\u0026#34; == \u0026#34;${host}\u0026#34; ]; then vol=\u0026#34;$( echo $sv | cut -d/ -f3 )\u0026#34; user=\u0026#34;$( grep \u0026#34;USER=\u0026#34; /etc/netapp-sdk/$host | cut -d= -f2 )\u0026#34; pass=\u0026#34;$( grep \u0026#34;PASS=\u0026#34; /etc/netapp-sdk/$host | cut -d= -f2 )\u0026#34; echo \u0026#34;define service {\u0026#34; echo \u0026#34;\tuse\tgeneric-service-san-perfdata\u0026#34; echo \u0026#34;\u0026#34; echo \u0026#34;\tcheck_command\tcheck_netapp-snapvault!$user!$pass!$vol!38!42!\u0026#34; echo \u0026#34;\tcheck_interval\t60\u0026#34; echo \u0026#34;\thost_name\t${host}\u0026#34; echo \u0026#34;\tnotifications_enabled\t0\u0026#34; echo \u0026#34;\tnotification_interval\t720\u0026#34; echo \u0026#34;\tservice_description\tSNAPVAULT ${vol}\u0026#34; echo \u0026#34;}\u0026#34; echo fi done | tee -a $OUTPUT_FILE # Check snapmirror foo for sm in `ssh $host snapmirror status 2\u0026gt;/dev/null | awk \u0026#39;{ print $2 }\u0026#39; | grep vol | grep $host`; do # only do the checks on sm_secondary if [ \u0026#34;$( echo $sm | grep $host | cut -d: -f1 )\u0026#34; == \u0026#34;${host}\u0026#34; ]; then vol=\u0026#34;$( echo $sm | cut -d/ -f3 | cut -d: -f2 )\u0026#34; user=\u0026#34;$( grep \u0026#34;USER=\u0026#34; /etc/netapp-sdk/$host | cut -d= -f2 )\u0026#34; pass=\u0026#34;$( grep \u0026#34;PASS=\u0026#34; /etc/netapp-sdk/$host | cut -d= -f2 )\u0026#34; echo \u0026#34;define service {\u0026#34; echo \u0026#34;\tuse\tgeneric-service-san-perfdata\u0026#34; echo \u0026#34;\u0026#34; echo \u0026#34;\tcheck_command\tcheck_netapp-snapmirror!$user!$pass!$vol!38!42!\u0026#34; echo \u0026#34;\tcheck_interval\t60\u0026#34; echo \u0026#34;\thost_name\t${host}\u0026#34; echo \u0026#34;\tnotifications_enabled\t0\u0026#34; echo \u0026#34;\tnotification_interval\t720\u0026#34; echo \u0026#34;\tservice_description\tSNAPMIRROR ${vol}\u0026#34; echo \u0026#34;}\u0026#34; echo fi done | tee -a $OUTPUT_FILE done ","permalink":"https://christian.blog.pakiheim.de/posts/2013-02-05_generate-nagios-config-for-check-netapp-api-pl/","summary":"\u003cp\u003eAs so often, I wanted a script, that\u0026rsquo;ll crawl my filers and regenerate the configuration if there are any new volumes/snapvaults/snapmirrors or if one of them has been removed.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e44\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-45\"\u003e45\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-46\"\u003e46\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-47\"\u003e47\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-48\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-48\"\u003e48\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-49\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-49\"\u003e49\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-50\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-50\"\u003e50\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-51\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-51\"\u003e51\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-52\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-52\"\u003e52\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-53\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-53\"\u003e53\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-54\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-54\"\u003e54\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-55\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-55\"\u003e55\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-56\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-56\"\u003e56\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-57\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-57\"\u003e57\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-58\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-58\"\u003e58\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-59\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-59\"\u003e59\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-60\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-60\"\u003e60\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-61\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-61\"\u003e61\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-62\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-62\"\u003e62\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-63\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-63\"\u003e63\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-64\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-64\"\u003e64\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-65\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-65\"\u003e65\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-66\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-66\"\u003e66\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-67\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-67\"\u003e67\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-68\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-68\"\u003e68\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-69\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-69\"\u003e69\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-70\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-70\"\u003e70\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-71\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-71\"\u003e71\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-72\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-72\"\u003e72\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-73\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-73\"\u003e73\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-74\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-74\"\u003e74\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-75\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-75\"\u003e75\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-76\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-76\"\u003e76\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-77\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-77\"\u003e77\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-78\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-78\"\u003e78\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-79\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-79\"\u003e79\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-80\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-80\"\u003e80\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-81\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-81\"\u003e81\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-82\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-82\"\u003e82\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-83\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-83\"\u003e83\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-84\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-84\"\u003e84\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-85\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-85\"\u003e85\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-86\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-86\"\u003e86\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-87\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-87\"\u003e87\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-88\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-88\"\u003e88\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-89\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-89\"\u003e89\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-90\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-90\"\u003e90\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-91\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-91\"\u003e91\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-92\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-92\"\u003e92\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-93\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-93\"\u003e93\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-94\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-94\"\u003e94\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-95\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-95\"\u003e95\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-96\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-96\"\u003e96\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eFAS_HOSTS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e ls /etc/nagios/objects/hosts/san/fas*\u003cspan class=\"o\"\u003e{\u003c/span\u003ea,b\u003cspan class=\"o\"\u003e}\u003c/span\u003e.cfg \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d/ -f7 \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d. -f1 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e host in \u003cspan class=\"nv\"\u003e$FAS_HOSTS\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"nv\"\u003eOUTPUT_FILE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/etc/nagios/objects/hosts/san/\u003cspan class=\"nv\"\u003e$host\u003c/span\u003e-vol.cfg\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"c1\"\u003e# Clear the output file\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e \u0026gt; \u003cspan class=\"nv\"\u003e$OUTPUT_FILE\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"c1\"\u003e# Get the volume list\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"k\"\u003efor\u003c/span\u003e volume in \u003cspan class=\"sb\"\u003e`\u003c/span\u003essh \u003cspan class=\"nv\"\u003e$host\u003c/span\u003e vol status \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $1 }\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep ^vol \u003cspan class=\"p\"\u003e|\u003c/span\u003e sort -u \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep -v vol0$\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"nv\"\u003euser\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep \u003cspan class=\"s2\"\u003e\u0026#34;USER=\u0026#34;\u003c/span\u003e /etc/netapp-sdk/\u003cspan class=\"nv\"\u003e$host\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d\u003cspan class=\"o\"\u003e=\u003c/span\u003e -f2 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"nv\"\u003epass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep \u003cspan class=\"s2\"\u003e\u0026#34;PASS=\u0026#34;\u003c/span\u003e /etc/netapp-sdk/\u003cspan class=\"nv\"\u003e$host\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d\u003cspan class=\"o\"\u003e=\u003c/span\u003e -f2 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\t\techo \u0026#34;define service {\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\t\techo \u0026#34;\tuse\t\t\t\tgeneric-service\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\t\techo \u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\t\techo \u0026#34;\tcheck_command\t\t\tcheck_netapp-volfree!$user!$pass!${volume}!92!98\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\t\techo \u0026#34;\tcheck_interval\t\t\t5\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\t\techo \u0026#34;\thost_name\t\t\t${host}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\t\techo \u0026#34;\tnotifications_enabled\t\t0\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\t\techo \u0026#34;\tnotification_interval\t\t720\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\t\techo \u0026#34;\tservice_description\t\tVOLSPACE ${volume}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\t\techo \u0026#34;}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;define service {\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tuse\t\t\t\tgeneric-service-san-perfdata\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tcheck_command\t\t\tcheck_netapp-lunspace!\u003c/span\u003e\u003cspan class=\"nv\"\u003e$user\u003c/span\u003e\u003cspan class=\"s2\"\u003e!\u003c/span\u003e\u003cspan class=\"nv\"\u003e$pass\u003c/span\u003e\u003cspan class=\"s2\"\u003e!\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003evolume\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tcheck_interval\t\t\t5\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\thost_name\t\t\t\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003ehost\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tnotifications_enabled\t\t0\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tnotification_interval\t\t720\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tservice_description\t\tLUNSPACE \u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003evolume\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"nv\"\u003eSR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e ssh \u003cspan class=\"nv\"\u003e$host\u003c/span\u003e snap reserve \u003cspan class=\"nv\"\u003e$volume\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d  -f7 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$SR\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e !\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;0%\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;define service {\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tuse\t\t\t\tgeneric-service-san-perfdata\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tcheck_command\t\t\tcheck_netapp-snapreserve!\u003c/span\u003e\u003cspan class=\"nv\"\u003e$user\u003c/span\u003e\u003cspan class=\"s2\"\u003e!\u003c/span\u003e\u003cspan class=\"nv\"\u003e$pass\u003c/span\u003e\u003cspan class=\"s2\"\u003e!\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003evolume\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tcheck_interval\t\t\t10\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\thost_name\t\t\t\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003ehost\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tnotifications_enabled\t\t0\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tnotification_interval\t\t720\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\t# SR:\t\t\t\t\u003c/span\u003e\u003cspan class=\"nv\"\u003e$SR\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tservice_description\t\tSNAPRESERVE \u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003evolume\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"k\"\u003edone\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e tee -a \u003cspan class=\"nv\"\u003e$OUTPUT_FILE\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"c1\"\u003e# Check snapvault foo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"k\"\u003efor\u003c/span\u003e sv in \u003cspan class=\"sb\"\u003e`\u003c/span\u003essh \u003cspan class=\"nv\"\u003e$host\u003c/span\u003e snapvault status -l 2\u0026gt;/dev/null \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $2 }\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep vol\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"c1\"\u003e# only do the checks on sv_secondary\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$sv\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep \u003cspan class=\"nv\"\u003e$host\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d: -f1 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003ehost\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nv\"\u003evol\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$sv\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d/ -f3 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nv\"\u003euser\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep \u003cspan class=\"s2\"\u003e\u0026#34;USER=\u0026#34;\u003c/span\u003e /etc/netapp-sdk/\u003cspan class=\"nv\"\u003e$host\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d\u003cspan class=\"o\"\u003e=\u003c/span\u003e -f2 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nv\"\u003epass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep \u003cspan class=\"s2\"\u003e\u0026#34;PASS=\u0026#34;\u003c/span\u003e /etc/netapp-sdk/\u003cspan class=\"nv\"\u003e$host\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d\u003cspan class=\"o\"\u003e=\u003c/span\u003e -f2 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;define service {\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tuse\t\t\t\tgeneric-service-san-perfdata\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tcheck_command\t\t\tcheck_netapp-snapvault!\u003c/span\u003e\u003cspan class=\"nv\"\u003e$user\u003c/span\u003e\u003cspan class=\"s2\"\u003e!\u003c/span\u003e\u003cspan class=\"nv\"\u003e$pass\u003c/span\u003e\u003cspan class=\"s2\"\u003e!\u003c/span\u003e\u003cspan class=\"nv\"\u003e$vol\u003c/span\u003e\u003cspan class=\"s2\"\u003e!38!42!\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tcheck_interval\t\t\t60\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\thost_name\t\t\t\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003ehost\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tnotifications_enabled\t\t0\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tnotification_interval\t\t720\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tservice_description\t\tSNAPVAULT \u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003evol\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"k\"\u003edone\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e tee -a \u003cspan class=\"nv\"\u003e$OUTPUT_FILE\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"c1\"\u003e# Check snapmirror foo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"k\"\u003efor\u003c/span\u003e sm in \u003cspan class=\"sb\"\u003e`\u003c/span\u003essh \u003cspan class=\"nv\"\u003e$host\u003c/span\u003e snapmirror status 2\u0026gt;/dev/null \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $2 }\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep vol \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep \u003cspan class=\"nv\"\u003e$host\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"c1\"\u003e# only do the checks on sm_secondary\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$sm\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep \u003cspan class=\"nv\"\u003e$host\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d: -f1 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003ehost\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nv\"\u003evol\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$sm\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d/ -f3 \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d: -f2 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nv\"\u003euser\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep \u003cspan class=\"s2\"\u003e\u0026#34;USER=\u0026#34;\u003c/span\u003e /etc/netapp-sdk/\u003cspan class=\"nv\"\u003e$host\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d\u003cspan class=\"o\"\u003e=\u003c/span\u003e -f2 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nv\"\u003epass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep \u003cspan class=\"s2\"\u003e\u0026#34;PASS=\u0026#34;\u003c/span\u003e /etc/netapp-sdk/\u003cspan class=\"nv\"\u003e$host\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d\u003cspan class=\"o\"\u003e=\u003c/span\u003e -f2 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;define service {\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tuse\t\t\t\tgeneric-service-san-perfdata\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tcheck_command\t\t\tcheck_netapp-snapmirror!\u003c/span\u003e\u003cspan class=\"nv\"\u003e$user\u003c/span\u003e\u003cspan class=\"s2\"\u003e!\u003c/span\u003e\u003cspan class=\"nv\"\u003e$pass\u003c/span\u003e\u003cspan class=\"s2\"\u003e!\u003c/span\u003e\u003cspan class=\"nv\"\u003e$vol\u003c/span\u003e\u003cspan class=\"s2\"\u003e!38!42!\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tcheck_interval\t\t\t60\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\thost_name\t\t\t\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003ehost\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tnotifications_enabled\t\t0\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tnotification_interval\t\t720\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\tservice_description\t\tSNAPMIRROR \u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003evol\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;}\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"k\"\u003edone\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e tee -a \u003cspan class=\"nv\"\u003e$OUTPUT_FILE\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Generate Nagios config for check_netapp-api-pl"},{"content":"In order to change the XFS label, you need to complete the following steps:\n1 2 3 umount /mnt/xfs_vol # only if the volume is mounted by label xfsadmin -L newlabel /dev/md/aggr2 mount /dev/disk/by-label/newlabel /mnt/xfs_vol ","permalink":"https://christian.blog.pakiheim.de/posts/2013-01-31_xfs-change-fs-label/","summary":"\u003cp\u003eIn order to change the XFS label, you need to complete the following steps:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eumount /mnt/xfs_vol \u003cspan class=\"c1\"\u003e# only if the volume is mounted by label\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003exfsadmin -L newlabel /dev/md/aggr2\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emount /dev/disk/by-label/newlabel /mnt/xfs_vol\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"XFS: Change FS label"},{"content":"Well, as it turns out if have \u0026ldquo;special\u0026rdquo; hard disks \u0026hellip; the WD20* disks are susceptible to misalignment issues due to them having a logical sector size of 512 byte \u0026hellip;\nSo here we go:\n1 2 3 4 5 6 7 8 parted --alignment optimal /dev/sdx mklabel msdos print # now figure out how big you want the disks. make sure you # don\u0026#39;t use the whole space, as a replacement disk # might have ~20 sectors less mkpart primary 1 -1800 quit Now, dump the partition layout to a file:\n1 sfdisk -d /dev/sdx \u0026gt; sdx.part ","permalink":"https://christian.blog.pakiheim.de/posts/2013-01-27_mdadm-prepare-partitions-for-raid/","summary":"\u003cp\u003eWell, as it turns out if have \u0026ldquo;special\u0026rdquo; hard disks \u0026hellip; the WD20* disks are susceptible to misalignment issues due to them having a logical sector size of 512 byte \u0026hellip;\u003c/p\u003e\n\u003cp\u003eSo here we go:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e8\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eparted --alignment optimal /dev/sdx\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emklabel msdos\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eprint\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# now figure out how big you want the disks. make sure you\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# don\u0026#39;t use the whole space, as a replacement disk\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# might have ~20 sectors less\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkpart primary \u003cspan class=\"m\"\u003e1\u003c/span\u003e -1800\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003equit\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eNow, dump the partition layout to a file:\u003c/p\u003e","title":"mdadm: Prepare partitions for RAID"},{"content":" 1 e2label /dev/md/aggr0 vol1 ","permalink":"https://christian.blog.pakiheim.de/posts/2013-01-10_extfs-change-fs-label/","summary":"\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ee2label /dev/md/aggr0 vol1\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"extfs: Change FS label"},{"content":" 1 2 3 mdadm --stop /dev/md127 mdadm --assemble /dev/md127 --name=charon:aggr0 --update=name /dev/sdb1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sda1 ","permalink":"https://christian.blog.pakiheim.de/posts/2013-01-10_mdadm-update-md-name/","summary":"\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emdadm --stop /dev/md127\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emdadm --assemble /dev/md127 --name\u003cspan class=\"o\"\u003e=\u003c/span\u003echaron:aggr0 --update\u003cspan class=\"o\"\u003e=\u003c/span\u003ename\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    /dev/sdb1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sda1\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"mdadm: Update md name"},{"content":"At some point in the last few weeks, I repeatedly had to recreate my Nagios config for currently six filers. After doing that a few times, I ended up (like sooo often) writing a short Bash script, that\u0026rsquo;ll do this for me - without any fuss.\nThe only thing the script needs, is that the filers and the filers are registered in DNS \u0026hellip; Here\u0026rsquo;s an example:\n1 2 3 4 fas3240a IN A 172.31.76.150 fas3240a-sp IN A 172.31.74.150 fas3240b IN A 172.31.76.151 fas3240b-sp IN A 172.31.74.151 With that done, the script will create the necessary Nagios config for those filers.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #!/bin/bash -f #set -x for host in $@; do echo \u0026#34;define host{\u0026#34; | tee /etc/nagios/objects/hosts/san/$host.cfg echo -e \u0026#34;thost_namettt$host\u0026#34; | tee -a /etc/nagios/objects/hosts/san/$host.cfg echo -e \u0026#34;tusettttgeneric-host-perfdata\u0026#34; | tee -a /etc/nagios/objects/hosts/san/$host.cfg echo \u0026#34;\u0026#34; | tee -a /etc/nagios/objects/hosts/san/$host.cfg echo -e \u0026#34;taddresstttt$( dig +short $host.home.barfoo.org )\u0026#34; | tee -a /etc/nagios/objects/hosts/san/$host.cfg echo -e \u0026#34;taliastttt$host.home.barfoo.org\u0026#34; | tee -a /etc/nagios/objects/hosts/san/$host.cfg echo -e \u0026#34;tdisplay_namettt$host.home.barfoo.org\u0026#34; | tee -a /etc/nagios/objects/hosts/san/$host.cfg echo -e \u0026#34;thostgroupstttnetapp-fas-fc\u0026#34; | tee -a /etc/nagios/objects/hosts/san/$host.cfg echo -e \u0026#34;t_DOTSPtt$( dig +short $host-sp.home.barfoo.org )\u0026#34; | tee -a /etc/nagios/objects/hosts/san/$host.cfg echo \u0026#34;}\u0026#34; | tee -a /etc/nagios/objects/hosts/san/$host.cfg echo | tee -a /etc/nagios/objects/hosts/san/$host.cfg done #set +x ","permalink":"https://christian.blog.pakiheim.de/posts/2013-01-01_generate-nagios-config-for-netapp-filers/","summary":"\u003cp\u003eAt some point in the last few weeks, I repeatedly had to recreate my Nagios config for currently six filers. After doing that a few times, I ended up (like sooo often) writing a short Bash script, that\u0026rsquo;ll do this for me - without any fuss.\u003c/p\u003e\n\u003cp\u003eThe only thing the script needs, is that the filers and the filers are registered in DNS \u0026hellip; Here\u0026rsquo;s an example:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efas3240a      IN   A     172.31.76.150\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efas3240a-sp   IN   A     172.31.74.150\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efas3240b      IN   A     172.31.76.151\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efas3240b-sp   IN   A     172.31.74.151\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eWith that done, the script will create the necessary Nagios config for those filers.\u003c/p\u003e\n","title":"Generate Nagios config for NetApp filers"},{"content":"After figuring out the SnapVault stuff, I needed to implement a whole bunch of SnapMirror relations. As I am lazy (as in click-lazy), I ended up writing a somewhat short Bash script, that\u0026rsquo;ll either establish a bunch of SnapMirror relations (for a single host) or just for a single volume.\nThe script expects, that SSH public key authentification has been set up, and that the source for the SnapMirror exists and is online/not-restricted.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 #!/bin/bash -f # Create a SnapMirror relation between two volumes # 1) create volume on target, if it doesn\u0026#39;t exist # 2) set snapshot reserve on target # 3) start the snapmirror relationship KEY_FILE=\u0026#34;/root/.ssh/netapp.dsa\u0026#34; SSH_OPTS=\u0026#34;/root/.ssh/netapp-ssh_config\u0026#34; usage() { echo \u0026#34;Usage: fas-snapmirror-start.sh \u0026lt;MODE\u0026gt; \u0026lt;VOLUME|HOSTNAME\u0026gt; \u0026lt;SM_PRIMARY\u0026gt; \u0026lt;SM_SECONDARY\u0026gt; [SM_RATE_LIMIT]\u0026#34; echo \u0026#34;\u0026#34; if [ -n \u0026#34;$1\u0026#34; ] ; then echo \u0026#34;$1\u0026#34; echo \u0026#34;\u0026#34; fi echo \u0026#34;Required parameters:\u0026#34; echo \u0026#34;\u0026#34; echo \u0026#34; - MODE: Either host or volume (case sensitive).\u0026#34; echo \u0026#34;\u0026#34; echo \u0026#34; - VOLUME: Volume for which to configure SnapMirror (if mode is set to volume)\u0026#34; echo \u0026#34; - HOSTNAME: Host for which to configure SnapMirror (if mode is set to host)\u0026#34; echo \u0026#34; - SM_SECONDARY: Hostname of the SnapMirror Secondary\u0026#34; echo \u0026#34; - SM_PRIMARY: Hostname of the SnapMirror Primary\u0026#34; echo \u0026#34;\u0026#34; echo \u0026#34;Optional parameters:\u0026#34; echo \u0026#34;\u0026#34; echo \u0026#34; - SM_RATE_LIMIT: Limit the SnapMirror transfer to xx kb, may help on busy systems.\u0026#34; echo \u0026#34; Defaults to no limit at all, may cause harm to already busy FAS\u0026#34; echo \u0026#34; controllers.\u0026#34; echo \u0026#34;\u0026#34; exit 1 } ssh_fas() { # $@: commands for Data ONTAP COMMANDS=\u0026#34;$@\u0026#34; /usr/bin/ssh -i $KEY_FILE -l root -F $SSH_OPTS $COMMANDS } snapmirror_setup() { if [ \u0026#34;$#\u0026#34; -lt 4 ] ; then break fi # $1: sm_secondary # $2: sm_primary # $4: volume # $6: sm_rate_limit sm_secondary=$1 sm_primary=$2 volume=$3 sm_rate_limit=$4 # Check if snapmirror access is configured correctly sm_secondary_ip=\u0026#34;$( ssh_fas $sm_secondary rdfile /etc/hosts | grep $sm_secondary-e0a | awk \u0026#39;{ print $1 }\u0026#39; )\u0026#34; sm_access=\u0026#34;$( ssh_fas $sm_primary options snapmirror.access | grep $sm_secondary_ip )\u0026#34; if [ -z \u0026#34;$sm_access\u0026#34; ] ; then echo \u0026#34;Please make sure, that SnapMirror access is correctly\u0026#34; echo \u0026#34;configured on $sm_primary, so that $sm_secondary\u0026#34; echo \u0026#34;can access it using snapmirror.\u0026#34; echo echo \u0026#34;Hint: options snapmirror.access should look like this:\u0026#34; echo \u0026#34; options snapmirror.access host=$sm_secondary_ip\u0026#34; echo exit 1 fi # Get FlexVol size from SM_PRIMARY (SnapMirror destination has the same # size as the SnapMirror source) VOL_SIZE=\u0026#34;$( ssh_fas $sm_primary vol size $volume | awk \u0026#39;{ print $8 }\u0026#39; | sed \u0026#34;s,.,,\u0026#34; )\u0026#34; # Check if the is a qtree on SM_PRIMARY QTREE=\u0026#34;$( ssh_fas $sm_primary qtree status | grep $volume | cut -d -f2 | sed \u0026#39;/^$/d\u0026#39; )\u0026#34; if [ -z \u0026#34;$QTREE\u0026#34; ] ; then echo echo \u0026#34;SnapDrive only supports Qtree to Qtree relations!\u0026#34; echo \u0026#34;Please create a qtree (qtree create /vol/${volume}/sv\u0026#34; echo exit 1 fi # Assume to always use aggr1 on SM_SECONDARY echo \u0026#34;SnapMirror operations for FlexVol: $volume\u0026#34; echo \u0026#34; - Creating FlexVol\u0026#34; ssh_fas $sm_secondary vol create $volume -s none aggr1 $VOL_SIZE \u0026amp;\u0026gt;/dev/null echo \u0026#34; - Disabling Unicode/atime/automatic snapshotting\u0026#34; ssh_fas $sm_secondary vol options $volume fractional_reserve 100 ssh_fas $sm_secondary vol options $volume no_atime_update on ssh_fas $sm_secondary vol options $volume create_ucode off ssh_fas $sm_secondary vol options $volume nosnap on ssh_fas $sm_secondary vol options $volume convert_ucode off ssh_fas $sm_secondary vol autosize $volume off \u0026amp;\u0026gt;/dev/null ssh_fas $sm_secondary snap reserve $volume $SNAP_RESERVE \u0026amp;\u0026gt;/dev/null echo \u0026#34; - Restricting volume on $sm_secondary\u0026#34; ssh_fas $sm_secondary vol restrict $volume \u0026amp;\u0026gt;/dev/null # Now create the SnapMirror relationship between SM_SECONDARY and SM_PRIMARY if [ -n $sm_rate_limit ] ; then smi_rate_limit=\u0026#34;-k $sm_rate_limit\u0026#34; smc_rate_limit=\u0026#34;kbs=$sm_rate_limit\u0026#34; else smc_rate_limit=\u0026#34;-\u0026#34; fi echo \u0026#34; - Starting SnapMirror relation between $sm_secondary and $sm_primary\u0026#34; ssh_fas $sm_secondary snapmirror initialize $smi_rate_limit -S $sm_primary-e0a:$volume $sm_secondary:$volume \u0026amp;\u0026gt;/dev/null echo \u0026#34; - Updating snapmirror.conf on $sm_secondary\u0026#34; smc_opts=\u0026#34;$sm_primary-e0a:$volume $sm_secondary:$volume $smc_rate_limit * 0-23/1 * *\u0026#34; ssh_fas $sm_secondary wrfile -a /etc/snapmirror.conf $smc_opts echo echo \u0026#34;You can monitor the SnapMirror initialization on the SnapMirror Secondary ($sm_secondary)\u0026#34; echo \u0026#34;by using the following command:\u0026#34; echo echo \u0026#34; \u0026#39;snapmirror status $volume\u0026#39;\u0026#34; echo } # Main script starts here. #set -x if [ \u0026#34;$#\u0026#34; -lt 4 ] ; then usage fi case $1 in host) MODE=\u0026#34;host\u0026#34;; HOST=$2 ;; volume) MODE=\u0026#34;volume\u0026#34;; VOLUME=$2 ;; *) usage \u0026#34;Invalid mode specified\u0026#34; esac SM_PRIMARY=$3 SM_SECONDARY=$4 SM_RATE_LIMIT=${5:-10000} if [ \u0026#34;$MODE\u0026#34; == \u0026#34;host\u0026#34; ] ; then # Get the LUN list VOLUME_LIST=\u0026#34;$( ssh_fas $SM_PRIMARY lun show | grep -i $HOST | grep -v windows_ | awk \u0026#39;{ print $1 }\u0026#39; | cut -d/ -f3 | sort -u | tr \u0026#39;n\u0026#39; \u0026#39; \u0026#39; | sort -u )\u0026#34; for vol in $VOLUME_LIST; do # Check if snapreserve is enabled SNAP=\u0026#34;$( ssh_fas $SM_PRIMARY snap reserve $vol | cut -d -f7 | sed \u0026#34;s,%,,\u0026#34; )\u0026#34; if [ $SNAP -ne \u0026#34;0\u0026#34; ] ; then snapmirror_setup $SM_SECONDARY $SM_PRIMARY $vol $SM_RATE_LIMIT else echo \u0026#34;No snap reserve configured for $vol\u0026#34; fi done elif [ \u0026#34;$MODE\u0026#34; == \u0026#34;volume\u0026#34; ] ; then SNAP=\u0026#34;$( ssh_fas $SM_PRIMARY snap reserve $VOLUME | cut -d -f7 | sed \u0026#34;s,%,,\u0026#34; )\u0026#34; if [ $SNAP -ne \u0026#34;0\u0026#34; ] ; then snapmirror_setup $SM_SECONDARY $SM_PRIMARY $VOLUME $SM_RATE_LIMIT else echo \u0026#34;No snap reserve configured for $vol\u0026#34; fi fi #set -x ","permalink":"https://christian.blog.pakiheim.de/posts/2012-12-31_netapp-establishing-snapmirror-relationships/","summary":"\u003cp\u003eAfter \u003ca href=\"http://christian.weblog.heimdaheim.de/2012/12/30/netapp-establishing-snapvault-relations/\" title=\"NetApp: Establishing SnapVault relations\"\u003efiguring out the SnapVault stuff\u003c/a\u003e, I needed to implement a whole bunch of SnapMirror relations. As I am lazy (as in click-lazy), I ended up writing a somewhat short Bash script, that\u0026rsquo;ll either establish a bunch of SnapMirror relations (for a single host) or just for a single volume.\u003c/p\u003e\n\u003cp\u003eThe script expects, that \u003ca href=\"http://christian.weblog.heimdaheim.de/2012/03/07/netapp-fasdata-ontap-public-key-authentification-with-cifsnfs-license/\" title=\"NetApp FAS/Data ONTAP public key authentification with CIFS/NFS license\"\u003eSSH public key authentification\u003c/a\u003e has been set up, and that the source for the SnapMirror exists and is online/not-restricted.\u003c/p\u003e\n","title":"NetApp: Establishing SnapMirror relationships"},{"content":"Well, the name says it pretty much. Once you rename the snapshot on the SnapVault destination from daily.0 to something else, the whole builtin SnapVault snapshot retention isn\u0026rsquo;t gonna work anymore.\nBack when I started all the code-writing, I wasn\u0026rsquo;t aware of this. One of my co-worker complained to me about it on Wednesday that there are an assfull of snapshots on the SnapVault destination (one snapshot each day since the end of October, meaning more than 50 snapshots per volume, in a total of 12 or so FlexVolumes, making the total about 500 snapshots).\nSo I took the time to write this little Bash script (yeah, I know I\u0026rsquo;m mixing a bunch of languages - I really like the KISS principle), which will get the necessary information from the filer (snapvault snap sched needs to be set) and then deletes the over-aged snapshots.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #!/bin/bash KEY_FILE=\u0026#34;/root/.ssh/netapp.dsa\u0026#34; SSH_OPTS=\u0026#34;/root/.ssh/netapp-ssh_config\u0026#34; CTRL=$1 ssh_fas() { # $@: commands for Data ONTAP COMMANDS=\u0026#34;$@\u0026#34; /usr/bin/ssh -i $KEY_FILE -l root -F $SSH_OPTS $COMMANDS } for volume in $( ssh_fas $CTRL snapvault status | awk \u0026#39;{ print $2 }\u0026#39; | grep vol | cut -d: -f2 | cut -d/ -f3 ); do # Get the snapvault snap sched for this volume SNAP_SCHED=\u0026#34;$( ssh_fas $CTRL snapvault snap sched ${volume} )\u0026#34; if [ \u0026#34;$SNAP_SCHED\u0026#34; != \u0026#34;No snapshots scheduled for volume ${volume}.\u0026#34; ] ; then SNAP_CLASS=\u0026#34;$( echo $SNAP_SCHED | awk \u0026#39;{ print $3 }\u0026#39; )\u0026#34; SNAP_RETENTION=\u0026#34;$( echo $SNAP_SCHED | awk \u0026#39;{ print $4 }\u0026#39; | cut -d@ -f1 )\u0026#34; # Now, check the snap list of the volume if there are snapshots named $SNAP_CLASS SNAP_LIST=\u0026#34;$( ssh_fas $CTRL snap list ${volume} | egrep -v \u0026#34;(snapvault|$SNAP_CLASS)\u0026#34; | sed \u0026#39;/^$/d\u0026#39; | egrep -v \u0026#34;(Volume|working|date|------------)\u0026#34; | cut -d: -f2 | awk \u0026#39;{ print $2 }\u0026#39; | wc -l )\u0026#34; if [ $SNAP_LIST -ne 0 ]; then TAIL=$((SNAP_LIST-SNAP_RETENTION)) SNAP_NAME=\u0026#34;$( ssh_fas $CTRL snap list ${volume} | egrep -v \u0026#34;(snapvault|$SNAP_CLASS)\u0026#34; | sed \u0026#39;/^$/d\u0026#39; | egrep -v \u0026#34;(Volume|working|date|------------)\u0026#34; | cut -d: -f2 | awk \u0026#39;{ print $2 }\u0026#39; | tail -$TAIL )\u0026#34; echo \u0026#34;Processing snapvault destination ${volume}\u0026#34; echo \u0026#34; - total amount of snapshots: $SNAP_LIST\u0026#34; echo \u0026#34; - snapshots to remove: $TAIL\u0026#34; for snap in $SNAP_NAME; do echo \u0026#34;Removing snapshot ${snap}\u0026#34; ssh_fas $CTRL snap delete ${volume} ${snap} | grep -v \u0026#34;deleting snapshot...\u0026#34; done fi fi echo done | mailx -r christian.heim@barfoo.org -s \u0026#34;SnapVault retention for $CTRL\u0026#34; christian.heim@barfoo.org ","permalink":"https://christian.blog.pakiheim.de/posts/2012-12-29_netapp-snapvault-snapshot-retention-for-non-standard-snapshot-names/","summary":"\u003cp\u003eWell, the name says it pretty much. Once you rename the snapshot on the SnapVault destination from daily.0 to something else, the whole builtin SnapVault snapshot retention isn\u0026rsquo;t gonna work anymore.\u003c/p\u003e\n\u003cp\u003eBack when I started all the code-writing, I wasn\u0026rsquo;t aware of this. One of my co-worker complained to me about it on Wednesday that there are an assfull of snapshots on the SnapVault destination (one snapshot each day since the end of October, meaning more than 50 snapshots per volume, in a total of 12 or so FlexVolumes, making the total about 500 snapshots).\u003c/p\u003e\n\u003cp\u003eSo I took the time to write this little Bash script (yeah, I know I\u0026rsquo;m mixing a bunch of languages - I really like the \u003ca href=\"http://en.wikipedia.org/wiki/KISS_principle\"\u003eKISS\u003c/a\u003e principle), which will get the necessary information from the filer (snapvault snap sched needs to be set) and then deletes the over-aged snapshots.\u003c/p\u003e\n","title":"NetApp: SnapVault snapshot retention for non-standard snapshot names"},{"content":"The MSSQL admins decided to dump the SMSQL Snapinfo stuff on a separate volume, that SMSQL also snapshots. Same as before, I need a PowerShell script that\u0026rsquo;ll archive the snapshot and rename it.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 # $HeadURL: https://svn.barfoo.org/svn/scripts/netapp/snapvault-archive-volume.ps1 $ # $Author: christian.th.heim $ # $Revision: 320 $ # $Date: 2012-12-27 14:56:06 +0100 (Do, 27 Dez 2012) $ $MOUNTPOINTS = $args $ARCHIVE = \u0026#34;daily\u0026#34; $OUTPATH=\u0026#34;C:ScriptsTEMP\u0026#34; $OUTFILE=\u0026#34;$( $OUTPATH )snapvault-archive-volume\u0026#34; $SMTP_HOST = \u0026#34;smtprelay.barfoo.org\u0026#34; $SMTP_SENDER = \u0026#34;christian.heim@barfoo.org\u0026#34; $SMTP_RECEIVER = \u0026#34;christian.heim@barfoo.org\u0026#34; $WAIT = 15 function clean-tempdir() { param( [string]$outputpath, [string]$outputfile ) # Sanatize the environment, check if OUTPATH exists, otherwise create it. # Check if OUTFILE is still there from a previous run, otherwise delete it. if ( !(Test-Path $outputpath) ) { New-Item $outputpath -type directory } if ( Test-Path $outputfile ) { Remove-Item $outputfile } } function sdcli-version-list() { # Get the sdcli version. Depending on this, adjust the SDCLI_WAIT (as 6.3.1R1 # takes about a minute to complete a snapvault archive) and adjust the $ARCHIVE param( [string] $opt ) $sdcli_version = (Get-Command \u0026#39;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#39;).FileVersionInfo.FileVersion $sdcli_version = $sdcli_version -replace \u0026#34; \u0026#34;,\u0026#34;\u0026#34; switch -wildcard ($sdcli_version) { \u0026#34;6.3*\u0026#34; { $SDCLI_WAIT = 10 $ARCHIVE_SEARCH = \u0026#34;$($ARCHIVE)\u0026#34; } \u0026#34;6.4*\u0026#34; { $SDCLI_WAIT = 120 $ARCHIVE_SEARCH = \u0026#34;$($ARCHIVE).0\u0026#34; } } switch ($opt) { \u0026#34;sdcli_wait\u0026#34; { return $SDCLI_WAIT } \u0026#34;archive_search\u0026#34; { return $ARCHIVE_SEARCH } } } function sdcli-snap-list() { # Get the snapshot for the selected mountpoint. Searches for a pattern, and # returns only the first one (the newest) param( [string] $mountpoint, [string] $search ) if ( $search ) { # Output of sdcli snap list -d $volume looks like this: # sqlsnap__vcsrv_10-22-2012_14.05.16 1% ( 1%) 0% ( 0%) Okt 22 14:05 Consistent snapshot copy # Thus, we need to emulate awk and just print the first row of this output $str = \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snap list -d $mountpoint | Select-String $search | Select -First 1 | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[0]; } } else { $str = \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snap list -d $mountpoint | Select -First 1 | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[0]; } } # Sadly the above returns the snapshot name beginning with a newline, # thus screwing the output. So we need to replace all carriage returns! $str = $str -replace \u0026#34;`t|`n|`r\u0026#34;,\u0026#34;\u0026#34; $str } function sdcli-vol-list() { # Get the controller and volume for a mountpoint. Needed for systems, where # more than one LUN are provisioned in the same volume, thus we would end # up calling snapvault archive more than once for the same volume, thus # running into an error, as the archive is already done. param ( [string] $mountpoint, [string] $outfile ) If ( ! ( Test-Path \u0026#34;$( $outfile ).dsk\u0026#34; ) ) { \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; disk list | Out-File \u0026#34;$( $outfile ).dsk\u0026#34; } $hash = \u0026#34;{0:D4}\u0026#34; -f (1..9999 | Get-Random) $hashfile = \u0026#34;$( $outfile )-$( $hash ).dsk\u0026#34; # Sadly, Select-String requires an escaped backslash (escaped by a backslash) # so we need to run a replace .. $mountpoint = $mountpoint -replace \u0026#34;\\\u0026#34;,\u0026#34;``\u0026#34; # Output from disk list looks like this: # Storage System: fas6210a # Storage System Path: /vol/vol001_vcsrv_lun03/sv/vcsrv_lun03 # Type: lun # Disk serial number: bfd4K8Cp7lvM # Backed by Snapshot Copy: # Shared: No # BootOrSystem Disk: No # SCSI port: 2 # Bus: 0 # Target: 1 # LUN: 1 # Readonly: No # Size: 5122 MB # Snapmirror Source: No # Snapvault Primary: Yes # Disk Partition Style: Master Boot Record (MBR) # Clone Split Restore status: Normal # DiskID: 1 # Volume Name: \\?Volume{68e8100e-8565-11e1-b4e9-0025b502004f} # Mount points: F:sql_dbdb_data1 Get-Content \u0026#34;$( $outfile ).dsk\u0026#34; | Select-String \u0026#34;$( $mountpoint )\u0026#34; ` -Context 19,0 | Out-File $hashfile # Get the Storage System and the Path from the output of sdcli disk list. $storage_volume = Get-Content $hashfile | Select-String \u0026#34;Storage System Path:\u0026#34; | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[12]; } $storage_volume = $storage_volume -replace \u0026#34;`t|`n|`r\u0026#34;,\u0026#34;\u0026#34; | %{ $_.Split(\u0026#39;/\u0026#39;)[2]; } return $storage_volume } function sdcli-fas-list() { # Get the controller and volume for a mountpoint. Needed for systems, where # more than one LUN are provisioned in the same volume, thus we would end # up calling snapvault archive more than once for the same volume, thus # running into an error, as the archive is already done. param ( [string] $mountpoint, [string] $outfile ) If ( ! ( Test-Path \u0026#34;$( $outfile ).dsk\u0026#34; ) ) { \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; disk list | Out-File \u0026#34;$( $outfile ).dsk\u0026#34; } $hash = \u0026#34;{0:D4}\u0026#34; -f (1..9999 | Get-Random) $hashfile = \u0026#34;$( $outfile )-$( $hash ).dsk\u0026#34; # Output from disk list looks like this: # Storage System: fas6210a # Storage System Path: /vol/vol001_vcsrv_lun03/sv/vcsrv_lun03 # Type: lun # Disk serial number: bfd4K8Cp7lvM # Backed by Snapshot Copy: # Shared: No # BootOrSystem Disk: No # SCSI port: 2 # Bus: 0 # Target: 1 # LUN: 1 # Readonly: No # Size: 5122 MB # Snapmirror Source: No # Snapvault Primary: Yes # Disk Partition Style: Master Boot Record (MBR) # Clone Split Restore status: Normal # DiskID: 1 # Volume Name: \\?Volume{68e8100e-8565-11e1-b4e9-0025b502004f} # Mount points: F:sql_dbdb_data1 # Sadly, Select-String requires an escaped backslash (escaped by a backslash) # so we need to run a replace .. $mountpoint = $mountpoint -replace \u0026#34;\\\u0026#34;,\u0026#34;``\u0026#34; Get-Content \u0026#34;$( $outfile ).dsk\u0026#34; | Select-String \u0026#34;$( $mountpoint )\u0026#34; -Context 19,0 | Out-File $hashfile # Get the Storage System and the Path from the output of sdcli disk list. $storage_controller = Get-Content $hashfile | ` Select-String \u0026#34;Storage System:\u0026#34; | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[15]; } $storage_controller = $storage_controller -replace \u0026#34;`t|`n|`r\u0026#34;,\u0026#34;\u0026#34; return $storage_controller } function sdcli-sv-archive() { # Starts the SnapVault archive to the SnapVault secondary. # Needs the archive class (specified on the controller by viewing snapvault snap sched), # the mountpoint, the snapshot name - all which are needed to trigger the snapvault # archive. param( [string] $archive, [string] $mountpoint, [string] $snapname, [string] $outfile ) \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snapvault archive -a $archive ` -DS $mountpoint $snapname } function sdcli-sv-snaplist() { # Retrieves the snapshot list on SV_SEC and only returns the last snapshot # that is already on the destination. param ( [string] $mountpoint, [string] $search ) if ( $search ) { $str = \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snapvault snap_list ` -d $mountpoint | Select-String $search | Select -First 1 | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[16]; } } else { $str = \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snapvault snap_list ` -d $mountpoint | Select -First 1 | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[16]; } } # Sadly the above returns the snapshot name beginning with a newline, # thus screwing the output. So we need to replace all carriage returns! $str = $str -replace \u0026#34;`t|`n|`r\u0026#34;,\u0026#34;\u0026#34; $str } function sdcli-sv-snaprename() { # Since the snapvault archive names the snapshot like the archive class # (in most cases \u0026#39;daily\u0026#39;), we need to rename the snapshot on the SV_SEC # to it\u0026#39;s original name. However we need to wait until the transport # to the SV_SEC is finished, in order to rename the snapshot. param( [string] $archive, [string] $mountpoint, [string] $snapshot ) \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snapvault snapshot_rename ` -o $archive -n $snapshot -d $mountpoint } function Write-CustomOut ($Details){ $LogDate = Get-Date -Format T Write-Output \u0026#34;$($LogDate) $Details\u0026#34; } # Call the cleanup. clean-tempdir $OUTPATH \u0026#34;$( $OUTFILE ).csv\u0026#34; clean-tempdir $OUTPATH \u0026#34;$( $OUTFILE ).tmp\u0026#34; clean-tempdir $OUTPATH \u0026#34;$( $OUTFILE )*.dsk\u0026#34; # Generate a csv-file containing all mountpoints and associated snapshot names Add-Content \u0026#34;$( $OUTFILE ).csv\u0026#34; \u0026#34;Controller;Volume;Mountpoint;Snapshot\u0026#34; foreach ($mountpoint in $MOUNTPOINTS) { $snapname = sdcli-snap-list $mountpoint \u0026#34;sql\u0026#34; $controller = sdcli-fas-list $mountpoint $OUTFILE $volume = sdcli-vol-list $mountpoint $OUTFILE Add-Content \u0026#34;$( $OUTFILE ).csv\u0026#34; \u0026#34;$( $controller );$( $volume );$( $mountpoint );$( $snapname )\u0026#34; } # Call the sdcli-version-list function, to adjust SDCLI_WAIT and $ARCHIVE_SEARCH $ARCHIVE_SEARCH = sdcli-version-list archive_search $SDCLI_WAIT = sdcli-version-list sdcli_wait Write-CustomOut \u0026#34;ARCHIVE_SEARCH: $($ARCHIVE_SEARCH)\u0026#34; Write-CustomOut \u0026#34;SDCLI_WAIT: $($SDCLI_WAIT)\u0026#34; if ( $ARCHIVE_SEARCH -notmatch $ARCHIVE ) { Write-CustomOut \u0026#34;`$ARCHIVE_SEARCH doesn\u0026#39;t match `$ARCHIVE. This breaks the script, so the script\u0026#34; Write-CustomOut \u0026#34;aborts at this point. Please look into it and fix it!\u0026#34; exit 128 } if ( $SDCLI_WAIT -lt 10 ) { Write-CustomOut \u0026#34;`$SDCLI_WAIT is less than 10. Currently 10 is the parameter for SnapDrive 6.3.1R1\u0026#34; Write-CustomOut \u0026#34;and anything below doesn\u0026#39;t make sense ... The script aborts at this point.\u0026#34; exit 128 } # Read the csv-file and sort it, and eliminate duplicate entries. # Separate the triggering of the snapvault and snapvault rename into two # separate loops, otherwise the first loop would have to wait each time # until the snapshot is on the SV_SEC. Write-CustomOut \u0026#34;Starting SnapVault backup\u0026#34; Import-CSV \u0026#34;$( $OUTFILE ).csv\u0026#34; -Delimiter \u0026#34;;\u0026#34; | Sort-Object Controller,Volume | Get-Unique -asstring | foreach { $controller = $_.Controller $volume = $_.Volume $mountpoint = $_.Mountpoint $snap = $_.Snapshot Write-CustomOut \u0026#34; - Creating SnapVault transfer task for $( $mountpoint ) - $( $snap )\u0026#34; if ( !( $snapvaulted | Select-String \u0026#34;$( $controller )-$( $volume )\u0026#34; -q ) ) { # Check if there is already an unrenamed snapshot on the destination and # abort, otherwise more stuff goes kablooey. $svsnap = sdcli-sv-snaplist $mountpoint \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; | Out-String Write-CustomOut $svsnap if ( $svsnap -Match \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; ) { Write-CustomOut \u0026#34; failed ($($ARCHIVE_SEARCH) already present - failed rename?)\u0026#34; $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - failed: $($ARCHIVE_SEARCH) present\u0026#34; ` -body $body ` -priority High -smtpServer $SMTP_HOST } else { # Call the sdcli-sv-archive function, copying the snapshot to our SV_SEC. $command = sdcli-sv-archive $ARCHIVE $mountpoint $snap | Out-String Write-CustomOut $command if ( $command -NotMatch \u0026#34;The operation completed successfully\u0026#34; ) { Write-CustomOut \u0026#34; failed (transfer)\u0026#34; $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )`n`nDebug output:`nOutput from `$command: $( $command )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - transfer failed (snapvault update)\u0026#34; ` -body $body ` -priority High -smtpServer $SMTP_HOST } else { Write-CustomOut \u0026#34; started (transfer)\u0026#34; $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )`n`nDebug output:`nOutput from `$command: $( $command )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - transfer started\u0026#34; ` -body $body ` -smtpServer $SMTP_HOST } } $snapvaulted += \u0026#34;$( $controller )-$( $volume )`n\u0026#34; Write-CustomOut \u0026#34; finished(volume)\u0026#34; } Write-CustomOut \u0026#34; finished(loop-volume)\u0026#34; } # Now, wait in this loop until the snapshot is on the SV_SEC, and then rename # the snapshot to it\u0026#39;s original name - making it more recognizable than \u0026#39;daily\u0026#39; Import-CSV \u0026#34;$( $OUTFILE ).csv\u0026#34; -Delimiter \u0026#34;;\u0026#34; | Sort-Object Controller,Volume | Get-Unique -asstring | foreach { $controller = $_.Controller $volume = $_.Volume $mountpoint = $_.Mountpoint $snap = $_.Snapshot Write-CustomOut \u0026#34; - Creating SnapVault rename task for $( $mountpoint ) - $( $snap )\u0026#34; if ( !( $snapvaulted_ren | Select-String \u0026#34;$( $controller )-$( $volume )\u0026#34; -q ) ) { # Since the snapvault archive names the destination snapshot like the archive # class (which is bullshit), wait till the snapshot is on the destination and # then rename the snapvault snapshot. Write-CustomOut \u0026#34; checking for snapshot $($ARCHIVE_SEARCH)\u0026#34; $svsnap = sdcli-sv-snaplist $mountpoint \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; Write-CustomOut $svsnap while ( $svsnap -ne \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; ) { Write-CustomOut \u0026#34; waiting for snapshot $($ARCHIVE_SEARCH)\u0026#34; sleep $SDCLI_WAIT $svsnap = sdcli-sv-snaplist $mountpoint \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; Write-CustomOut $svsnap $count++ } if ( $count -gt $WAIT ) { $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )`n`nDebug output:`nOutput from `$command: $( $command )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - transfer skipped\u0026#34; ` -body $body ` -priority High -smtpServer $SMTP_HOST } else { Write-CustomOut \u0026#34; snapshot $($ARCHIVE_SEARCH) present\u0026#34; $command = sdcli-sv-snaprename \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; $mountpoint $snap | Out-String Write-CustomOut $command if ( $command -NotMatch \u0026#34;The operation completed successfully\u0026#34; ) { $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )`n`nDebug output:`nOutput from `$command: $( $command )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - transfer failed (snapvault rename)\u0026#34; ` -body $body ` -priority High -smtpServer $SMTP_HOST } else { $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )`n`nDebug output:`nOutput from `$command: $( $command )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - transfer completed\u0026#34; ` -body $body ` -smtpServer $SMTP_HOST } } $snapvaulted_ren += \u0026#34;$( $controller )-$( $volume )`n\u0026#34; Write-CustomOut \u0026#34; finished(volume)\u0026#34; } Write-CustomOut \u0026#34; finished(loop-volume)\u0026#34; } Write-CustomOut \u0026#34;all done!\u0026#34; Write-CustomOut \u0026#34;\u0026#34; ","permalink":"https://christian.blog.pakiheim.de/posts/2012-12-29_netapp-archive-snapmanager-sql-snapinfo/","summary":"The MSSQL admins decided to dump the SMSQL Snapinfo stuff on a separate volume, that SMSQL also snapshots. \u003ca href=\"http://christian.weblog.heimdaheim.de/2012/12/29/netapp-archive-snapmanager-sql-snapshots/\" title=\"NetApp: Archive SnapManager SQL snapshots\"\u003eSame as before\u003c/a\u003e, I need a PowerShell script that\u0026rsquo;ll archive the snapshot and rename it.","title":"NetApp: Archive SnapManager SQL Snapinfo"},{"content":"And here\u0026rsquo;s the script for SMO. However, since different people administrate the Oracle Databases, they don\u0026rsquo;t want me to tinker with the database like the MSSQL admins. They give me a CSV-list of volumes, that should be backed up and I work with that.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 # $HeadURL: https://svn.barfoo.org/svn/scripts/netapp/snapvault-archive-oracle.ps1 $ # $Author: christian.th.heim $ # $Revision: 326 $ # $Date: 2012-12-27 21:20:00 +0100 (Do, 27 Dez 2012) $ $ARCHIVE = \u0026#34;daily\u0026#34; $OUTPATH=\u0026#34;C:ScriptsTEMP\u0026#34; $OUTFILE=\u0026#34;$( $OUTPATH )snapvault-archive-oracle\u0026#34; $SMTP_HOST = \u0026#34;smtprelay.barfoo.org\u0026#34; $SMTP_SENDER = \u0026#34;christian.heim@barfoo.org\u0026#34; $SMTP_RECEIVER = \u0026#34;christian.heim@barfoo.org\u0026#34; $WAIT = 15 function clean-tempdir() { param( [string]$outputpath, [string]$outputfile ) # Sanatize the environment, check if OUTPATH exists, otherwise create it. # Check if OUTFILE is still there from a previous run, otherwise delete it. if ( !(Test-Path $outputpath) ) { New-Item $outputpath -type directory } if ( Test-Path $outputfile ) { Remove-Item $outputfile } } function sdcli-version-list() { # Get the sdcli version. Depending on this, adjust the SDCLI_WAIT (as 6.3.1R1 # takes about a minute to complete a snapvault archive) and adjust the $ARCHIVE param( [string] $opt ) $sdcli_version = (Get-Command \u0026#39;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#39;).FileVersionInfo.FileVersion $sdcli_version = $sdcli_version -replace \u0026#34; \u0026#34;,\u0026#34;\u0026#34; switch -wildcard ($sdcli_version) { \u0026#34;6.3*\u0026#34; { $SDCLI_WAIT = 10 $ARCHIVE_SEARCH = \u0026#34;$($ARCHIVE)\u0026#34; } \u0026#34;6.4*\u0026#34; { $SDCLI_WAIT = 120 $ARCHIVE_SEARCH = \u0026#34;$($ARCHIVE).0\u0026#34; } } switch ($opt) { \u0026#34;sdcli_wait\u0026#34; { return $SDCLI_WAIT } \u0026#34;archive_search\u0026#34; { return $ARCHIVE_SEARCH } } } function sdcli-snap-list() { # Get the snapshot for the selected mountpoint. Searches for a pattern, and # returns only the first one (the newest) param( [string] $mountpoint, [string] $search ) if ( $search ) { # Output of sdcli snap list -d $volume looks like this: # sqlsnap__vcsrv_10-22-2012_14.05.16 1% ( 1%) 0% ( 0%) Okt 22 14:05 Consistent snapshot copy # Thus, we need to emulate awk and just print the first row of this output $str = \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snap list -d $mountpoint | Select-String $search | Select -First 1 | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[0]; } } else { $str = \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snap list -d $mountpoint | Select -First 1 | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[0]; } } # Sadly the above returns the snapshot name beginning with a newline, # thus screwing the output. So we need to replace all carriage returns! $str = $str -replace \u0026#34;`t|`n|`r\u0026#34;,\u0026#34;\u0026#34; $str } function sdcli-vol-list() { # Get the controller and volume for a mountpoint. Needed for systems, where # more than one LUN are provisioned in the same volume, thus we would end # up calling snapvault archive more than once for the same volume, thus # running into an error, as the archive is already done. param ( [string] $mountpoint, [string] $outfile ) If ( ! ( Test-Path \u0026#34;$( $outfile ).dsk\u0026#34; ) ) { \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; disk list | Out-File \u0026#34;$( $outfile ).dsk\u0026#34; } $hash = \u0026#34;{0:D4}\u0026#34; -f (1..9999 | Get-Random) $hashfile = \u0026#34;$( $outfile )-$( $hash ).dsk\u0026#34; # Sadly, Select-String requires an escaped backslash (escaped by a backslash) # so we need to run a replace .. $mountpoint = $mountpoint -replace \u0026#34;\\\u0026#34;,\u0026#34;``\u0026#34; # Output from disk list looks like this: # Storage System: fas6210a # Storage System Path: /vol/vol001_vcsrv_lun03/sv/vcsrv_lun03 # Type: lun # Disk serial number: bfd4K8Cp7lvM # Backed by Snapshot Copy: # Shared: No # BootOrSystem Disk: No # SCSI port: 2 # Bus: 0 # Target: 1 # LUN: 1 # Readonly: No # Size: 5122 MB # Snapmirror Source: No # Snapvault Primary: Yes # Disk Partition Style: Master Boot Record (MBR) # Clone Split Restore status: Normal # DiskID: 1 # Volume Name: \\?Volume{68e8100e-8565-11e1-b4e9-0025b502004f} # Mount points: F:sql_dbdb_data1 Get-Content \u0026#34;$( $outfile ).dsk\u0026#34; | Select-String \u0026#34;$( $mountpoint )\u0026#34; ` -Context 19,0 | Out-File $hashfile # Get the Storage System and the Path from the output of sdcli disk list. $storage_volume = Get-Content $hashfile | Select-String \u0026#34;Storage System Path:\u0026#34; | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[12]; } $storage_volume = $storage_volume -replace \u0026#34;`t|`n|`r\u0026#34;,\u0026#34;\u0026#34; | %{ $_.Split(\u0026#39;/\u0026#39;)[2]; } return $storage_volume } function sdcli-fas-list() { # Get the controller and volume for a mountpoint. Needed for systems, where # more than one LUN are provisioned in the same volume, thus we would end # up calling snapvault archive more than once for the same volume, thus # running into an error, as the archive is already done. param ( [string] $mountpoint, [string] $outfile ) If ( ! ( Test-Path \u0026#34;$( $outfile ).dsk\u0026#34; ) ) { \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; disk list | Out-File \u0026#34;$( $outfile ).dsk\u0026#34; } $hash = \u0026#34;{0:D4}\u0026#34; -f (1..9999 | Get-Random) $hashfile = \u0026#34;$( $outfile )-$( $hash ).dsk\u0026#34; # Output from disk list looks like this: # Storage System: fas6210a # Storage System Path: /vol/vol001_vcsrv_lun03/sv/vcsrv_lun03 # Type: lun # Disk serial number: bfd4K8Cp7lvM # Backed by Snapshot Copy: # Shared: No # BootOrSystem Disk: No # SCSI port: 2 # Bus: 0 # Target: 1 # LUN: 1 # Readonly: No # Size: 5122 MB # Snapmirror Source: No # Snapvault Primary: Yes # Disk Partition Style: Master Boot Record (MBR) # Clone Split Restore status: Normal # DiskID: 1 # Volume Name: \\?Volume{68e8100e-8565-11e1-b4e9-0025b502004f} # Mount points: F:sql_dbdb_data1 # Sadly, Select-String requires an escaped backslash (escaped by a backslash) # so we need to run a replace .. $mountpoint = $mountpoint -replace \u0026#34;\\\u0026#34;,\u0026#34;``\u0026#34; Get-Content \u0026#34;$( $outfile ).dsk\u0026#34; | Select-String \u0026#34;$( $mountpoint )\u0026#34; -Context 19,0 | Out-File $hashfile # Get the Storage System and the Path from the output of sdcli disk list. $storage_controller = Get-Content $hashfile | ` Select-String \u0026#34;Storage System:\u0026#34; | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[15]; } $storage_controller = $storage_controller -replace \u0026#34;`t|`n|`r\u0026#34;,\u0026#34;\u0026#34; return $storage_controller } function sdcli-sv-transferstatus() { param( [string] $mountpoint ) $search = \u0026#34;SnapVaultStatus\u0026#34; $str = \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snapvault ` relationship_status -d $mountpoint | Select-String $search | Select -First 1 | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[11]; } return $str } function sdcli-sv-archive() { # Starts the SnapVault archive to the SnapVault secondary. # Needs the archive class (specified on the controller by viewing snapvault snap sched), # the mountpoint, the snapshot name - all which are needed to trigger the snapvault # archive. param( [string] $archive, [string] $mountpoint, [string] $snapname, [string] $outfile ) \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snapvault archive -a $archive ` -DS $mountpoint $snapname } function sdcli-sv-snaplist() { # Retrieves the snapshot list on SV_SEC and only returns the last snapshot # that is already on the destination. param ( [string] $mountpoint, [string] $search ) if ( $search ) { $str = \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snapvault snap_list ` -d $mountpoint | Select-String $search | Select -First 1 | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[16]; } } else { $str = \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snapvault snap_list ` -d $mountpoint | Select -First 1 | Out-String | %{ $_.Split(\u0026#39; \u0026#39;)[16]; } } # Sadly the above returns the snapshot name beginning with a newline, # thus screwing the output. So we need to replace all carriage returns! $str = $str -replace \u0026#34;`t|`n|`r\u0026#34;,\u0026#34;\u0026#34; $str } function sdcli-sv-snaprename() { # Since the snapvault archive names the snapshot like the archive class # (in most cases \u0026#39;daily\u0026#39;), we need to rename the snapshot on the SV_SEC # to it\u0026#39;s original name. However we need to wait until the transport # to the SV_SEC is finished, in order to rename the snapshot. param( [string] $archive, [string] $mountpoint, [string] $snapshot ) \u0026amp;\u0026#34;C:Program FilesNetAppSnapDrivesdcli.exe\u0026#34; snapvault snapshot_rename ` -o $archive -n $snapshot -d $mountpoint } function Write-CustomOut ($Details){ $LogDate = Get-Date -Format T Write-Output \u0026#34;$($LogDate) $Details\u0026#34; } # Call the cleanup. clean-tempdir $OUTPATH \u0026#34;$( $OUTFILE ).csv\u0026#34; clean-tempdir $OUTPATH \u0026#34;$( $OUTFILE ).tmp\u0026#34; clean-tempdir $OUTPATH \u0026#34;$( $OUTFILE )*.dsk\u0026#34; if ( ! (Test-Path \u0026#34;$( $OUTPATH )db_mounts.csv\u0026#34; ) ) { Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;The SnapVault job failed on $( $env:COMPUTERNAME ) - db_mounts.csv missing\u0026#34; ` -smtpServer $SMTP_HOST exit 1 } if ( $ARCHIVE_SEARCH -notmatch $ARCHIVE ) { Write-CustomOut \u0026#34;`$ARCHIVE_SEARCH doesn\u0026#39;t match `$ARCHIVE. This breaks the script, so the script\u0026#34; Write-CustomOut \u0026#34;aborts at this point. Please look into it and fix it!\u0026#34; exit 128 } if ( $SDCLI_WAIT -lt 10 ) { Write-CustomOut \u0026#34;`$SDCLI_WAIT is less than 10. Currently 10 is the parameter for SnapDrive 6.3.1R1\u0026#34; Write-CustomOut \u0026#34;and anything below doesn\u0026#39;t make sense ... The script aborts at this point.\u0026#34; exit 128 } # Generate a csv-file containing all mountpoints and associated snapshot names Add-Content \u0026#34;$( $OUTFILE ).csv\u0026#34; \u0026#34;Controller;Volume;Mountpoint;Snapshot\u0026#34; Import-CSV \u0026#34;$( $OUTPATH )db_mounts.csv\u0026#34; -Delimiter \u0026#34;;\u0026#34; -Header \u0026#34;Mountpoint\u0026#34; | Select -Skip 1 | Get-Unique -asstring | foreach { $mountpoint = $_.Mountpoint $snapname = sdcli-snap-list $mountpoint \u0026#34;smo\u0026#34; $controller = sdcli-fas-list $mountpoint $OUTFILE $volume = sdcli-vol-list $mountpoint $OUTFILE if ( $snapname ) { Add-Content \u0026#34;$( $OUTFILE ).csv\u0026#34; \u0026#34;$( $controller );$( $volume );$( $mountpoint );$( $snapname )\u0026#34; } else { $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - failed: no SMO snapshot present\u0026#34; ` -body $body ` -smtpServer $SMTP_HOST } } # Call the sdcli-version-list function, to adjust SDCLI_WAIT and $ARCHIVE_SEARCH $ARCHIVE_SEARCH = sdcli-version-list archive_search $SDCLI_WAIT = sdcli-version-list sdcli_wait Write-CustomOut \u0026#34;ARCHIVE_SEARCH: $($ARCHIVE_SEARCH)\u0026#34; Write-CustomOut \u0026#34;SDCLI_WAIT: $($SDCLI_WAIT)\u0026#34; # Read the csv-file and sort it, and eliminate duplicate entries. # Separate the triggering of the snapvault and snapvault rename into two # separate loops, otherwise the first loop would have to wait each time # until the snapshot is on the SV_SEC. Write-CustomOut \u0026#34;Starting SnapVault backup\u0026#34; Import-CSV \u0026#34;$( $OUTFILE ).csv\u0026#34; -Delimiter \u0026#34;;\u0026#34; | Sort-Object Controller,Volume | Get-Unique -asstring | foreach { $controller = $_.Controller $volume = $_.Volume $mountpoint = $_.Mountpoint $snap = $_.Snapshot Write-CustomOut \u0026#34; - Creating SnapVault transfer task for $( $mountpoint ) - $( $snap )\u0026#34; if ( !( $snapvaulted | Select-String \u0026#34;$( $controller )-$( $volume )\u0026#34; -q ) ) { # Check if there is already an unrenamed snapshot on the destination and # abort, otherwise more stuff goes kablooey. $svsnap = sdcli-sv-snaplist $mountpoint \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; | Out-String Write-CustomOut $svsnap if ( $svsnap -Match \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; ) { Write-CustomOut \u0026#34; failed ($($ARCHIVE_SEARCH) already present - failed rename?)\u0026#34; $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - failed: $($ARCHIVE_SEARCH) present\u0026#34; ` -body $body ` -priority High -smtpServer $SMTP_HOST } else { # Call the sdcli-sv-archive function, copying the snapshot to our SV_SEC. $command = sdcli-sv-archive $ARCHIVE $mountpoint $snap | Out-String Write-CustomOut $command if ( $command -NotMatch \u0026#34;The operation completed successfully\u0026#34; ) { Write-CustomOut \u0026#34; failed (transfer)\u0026#34; $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )`n`nDebug output:`nOutput from `$command: $( $command )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - transfer failed (snapvault update)\u0026#34; ` -body $body ` -priority High -smtpServer $SMTP_HOST } else { Write-CustomOut \u0026#34; started (transfer)\u0026#34; $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )`n`nDebug output:`nOutput from `$command: $( $command )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - transfer started\u0026#34; ` -body $body ` -smtpServer $SMTP_HOST } } $snapvaulted += \u0026#34;$( $controller )-$( $volume )`n\u0026#34; Write-CustomOut \u0026#34; finished(volume)\u0026#34; } Write-CustomOut \u0026#34; finished(loop-volume)\u0026#34; } # Now, wait in this loop until the snapshot is on the SV_SEC, and then rename # the snapshot to it\u0026#39;s original name - making it more recognizable than \u0026#39;\u0026#34;$($ARCHIVE).0\u0026#34;\u0026#39; Import-CSV \u0026#34;$( $OUTFILE ).csv\u0026#34; -Delimiter \u0026#34;;\u0026#34; | Sort-Object Controller,Volume | Get-Unique -asstring | foreach { $controller = $_.Controller $volume = $_.Volume $mountpoint = $_.Mountpoint $snap = $_.Snapshot Write-CustomOut \u0026#34; - Creating SnapVault rename task for $( $mountpoint ) - $( $snap )\u0026#34; # Check if the snapshot already exists on the destination if ( sdcli-sv-snaplist $mountpoint $snap ) { $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )`n`nDebug output:`nOutput from `$command: $( $command )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - snapshot already present on destination\u0026#34; ` -body $body ` -priority High -smtpServer $SMTP_HOST } else { if ( !( $snapvaulted_ren | Select-String \u0026#34;$( $controller )-$( $volume )\u0026#34; -q ) ) { # Since the snapvault archive names the destination snapshot like the archive # class (which is bullshit), wait till the snapshot is on the destination and # then rename the snapvault snapshot. Write-CustomOut \u0026#34; checking for snapshot $($ARCHIVE_SEARCH)\u0026#34; $svsnap = sdcli-sv-snaplist $mountpoint \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; Write-CustomOut $svsnap while ( $svsnap -ne \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; ) { Write-CustomOut \u0026#34; waiting for snapshot $($ARCHIVE_SEARCH)\u0026#34; sleep $SDCLI_WAIT $svsnap = sdcli-sv-snaplist $mountpoint \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; Write-CustomOut $svsnap $count++ } if ( $count -gt $WAIT ) { $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )`n`nDebug output:`nOutput from `$command: $( $command )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - transfer skipped\u0026#34; ` -body $body ` -priority High -smtpServer $SMTP_HOST } else { Write-CustomOut \u0026#34; snapshot $($ARCHIVE_SEARCH) present\u0026#34; $command = sdcli-sv-snaprename \u0026#34;$($ARCHIVE_SEARCH)\u0026#34; $mountpoint $snap | Out-String Write-CustomOut $command if ( $command -NotMatch \u0026#34;The operation completed successfully\u0026#34; ) { $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )`n`nDebug output:`nOutput from `$command: $( $command )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - transfer failed (snapvault rename)\u0026#34; ` -body $body ` -priority High -smtpServer $SMTP_HOST } else { $body = \u0026#34; - Affected controller: $( $controller )`n - Affected volume: $( $volume )`n - Affected snapshot: $( $snap )`n - Affected mountpoint: $( $mountpoint )`n`nDebug output:`nOutput from `$command: $( $command )\u0026#34; Send-MailMessage -from $SMTP_SENDER -to $SMTP_RECEIVER ` -subject \u0026#34;SnapVault job $( $env:COMPUTERNAME ):$( $volume ) - transfer completed\u0026#34; ` -body $body ` -smtpServer $SMTP_HOST } } $snapvaulted_ren += \u0026#34;$( $controller )-$( $volume )`n\u0026#34; Write-CustomOut \u0026#34; finished(volume)\u0026#34; } } Write-CustomOut \u0026#34; finished(loop-volume)\u0026#34; } Write-CustomOut \u0026#34;all done!\u0026#34; Write-CustomOut \u0026#34;\u0026#34; Same as with the SnapManager SQL script, it\u0026rsquo;ll loop over the affected volume list (said CSV) and trigger a SnapVault Archive (using SDCLI.exe’s snapvault archive function) and then wait’s for the Snapshots to appear on the SnapVault destination.\nOnce the Snapshots are on the destination, it’ll rename the Snapshots to reflect the names of the originals.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-12-29_netapp-archive-snapmanager-oracle-snapshots/","summary":"And here\u0026rsquo;s the script for SMO. However, since different people administrate the Oracle Databases, they don\u0026rsquo;t want me to tinker with the database like the MSSQL admins. They give me a CSV-list of volumes, that should be backed up and I work with that.","title":"NetApp: Archive SnapManager Oracle Snapshots"},{"content":"Well,\nup till now I\u0026rsquo;ve been using du -sh * | grep G, however that didn\u0026rsquo;t quite do what I wanted. So I looked at the manpage of find a little bit today, and I found this:\n1 find . -type f -size +20000k -exec ls {} ; | sort ","permalink":"https://christian.blog.pakiheim.de/posts/2012-12-15_finding-files-bigger-than-20mib/","summary":"\u003cp\u003eWell,\u003c/p\u003e\n\u003cp\u003eup till now I\u0026rsquo;ve been using \u003cem\u003edu -sh * | grep G\u003c/em\u003e, however that didn\u0026rsquo;t quite do what I wanted. So I looked at the manpage of find a little bit today, and I found this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efind . -type f -size +20000k -exec ls {} ; | sort\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Finding files bigger than 20MiB"},{"content":"Well, you might have noticed that barfoo.org hasn\u0026rsquo;t been available for the last week or so \u0026hellip; I had to change the DNS provider (thanks at this point again to Bene from xnull.de for putting me up as long as he did).\nSadly my new provider, when purchasing the domain hosting, doesn\u0026rsquo;t allow sub-domains. So after opening a service ticket with them, they switched me into a webhosting contract which allows sub-domains (wtf\u0026hellip;).\nAnd since today, everything should be available again. If you notice something missing/not working give me a holler.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-11-28_recent-downtime/","summary":"\u003cp\u003eWell, you might have noticed that barfoo.org hasn\u0026rsquo;t been available for the last week or so \u0026hellip; I had to change the DNS provider (thanks at this point again to Bene from \u003ca href=\"http://bb.xnull.de/\"\u003exnull.de\u003c/a\u003e for putting me up as long as he did).\u003c/p\u003e\n\u003cp\u003eSadly my new provider, when purchasing the domain hosting, doesn\u0026rsquo;t allow sub-domains. So after opening a service ticket with them, they switched me into a webhosting contract which allows sub-domains (wtf\u0026hellip;).\u003c/p\u003e","title":"Recent downtime"},{"content":"After rebuilding two MDS9148, I wanted them to correctly switch the summer/winter time for my time zone. Currently I\u0026rsquo;m in CET (or CEST during the summer), so I googled for that. The search came up with Cisco-FAQ, however that needed a slight adjustment.\nApparently the NXOS doesn\u0026rsquo;t support the feature \u0026ldquo;recurring\u0026rdquo; in the clock configuration. So I had to slightly adapt the configuration line:\n1 2 clock timezone MET 2 0 clock summer-time MET 5 Sun Mar 02:00 5 Sun Oct 03:00 60 ","permalink":"https://christian.blog.pakiheim.de/posts/2012-10-17_mds9000-setting-summer-time-for-cet/","summary":"\u003cp\u003eAfter rebuilding two MDS9148, I wanted them to correctly switch the summer/winter time for my time zone. Currently I\u0026rsquo;m in CET (or CEST during the summer), so I googled for that. The search came up with \u003ca href=\"http://www.cisco-faq.com/128/configuring_time_zone_dst.html\"\u003eCisco-FAQ\u003c/a\u003e, however that needed a slight adjustment.\u003c/p\u003e\n\u003cp\u003eApparently the NXOS doesn\u0026rsquo;t support the feature \u0026ldquo;recurring\u0026rdquo; in the clock configuration. So I had to slightly adapt the configuration line:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eclock timezone MET 2 0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eclock summer-time MET 5 Sun Mar 02:00 5 Sun Oct 03:00 60\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"MDS9000: Setting summer time for CET"},{"content":"Well, yesterday I got pissed of those Virtual Storage Console custom attributes.\nCurrently we don\u0026rsquo;t use the Provisioning \u0026amp; Cloning feature of the VSC, thus we don\u0026rsquo;t need the custom attributes. After poking around, I decided to write a short PowerCLI script to do the task.\nIt\u0026rsquo;s really rather simple, so here goes:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 param( [string] $vCenter ) # Add the VI-Snapin if it isn\u0026#39;t loaded already if ( (Get-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; -ErrorAction SilentlyContinue) -eq $null ) { Add-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; } If ( !($vCenter) ) { Write-Host Write-Host \u0026#34;vcenter-remove-vsc-attributes: \u0026lt;vcenter-server\u0026gt;\u0026#34; Write-Host Write-Host \u0026#34; \u0026lt;vcenter-server\u0026gt; - DNS name of your vCenter server.\u0026#34; Write-Host exit 1 } Connect-VIServer -Server $vCenter Remove-CustomAttribute -CustomAttribute \u0026#34;PnC.CustSpec\u0026#34;, \u0026#34;PnC.Deployed\u0026#34;, \u0026#34;PnC.GroupID\u0026#34;, \u0026#34;PnC.Source\u0026#34; -Confirm:$false Disconnect-VIServer -server $vCenter -Confirm:$false ","permalink":"https://christian.blog.pakiheim.de/posts/2012-10-17_vcenter-removing-vsc-custom-attributes/","summary":"\u003cp\u003eWell, yesterday I got pissed of those Virtual Storage Console custom attributes.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/uploads/2012/10/vcenter-custom-attributes.png\"\u003e\u003cimg loading=\"lazy\" src=\"/uploads/2012/10/vcenter-custom-attributes.png\"\u003e\u003c/a\u003e Currently we don\u0026rsquo;t use the Provisioning \u0026amp; Cloning feature of the VSC, thus we don\u0026rsquo;t need the custom attributes. After poking around, I decided to write a short PowerCLI script to do the task.\u003c/p\u003e\n\u003cp\u003eIt\u0026rsquo;s really rather simple, so here goes:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eparam\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evCenter\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Add the VI-Snapin if it isn\u0026#39;t loaded already\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ePSSnapin\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eName\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;VMware.VimAutomation.Core\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eErrorAction\u003c/span\u003e \u003cspan class=\"n\"\u003eSilentlyContinue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eeq\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eAdd\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ePSSnapin\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eName\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;VMware.VimAutomation.Core\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eIf\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"o\"\u003e!\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evCenter\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;vcenter-remove-vsc-attributes: \u0026lt;vcenter-server\u0026gt;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;   \u0026lt;vcenter-server\u0026gt;  - DNS name of your vCenter server.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eexit\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eConnect\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVIServer\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eServer\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evCenter\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eRemove\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eCustomAttribute\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eCustomAttribute\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;PnC.CustSpec\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;PnC.Deployed\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;PnC.GroupID\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;PnC.Source\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eConfirm\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"bp\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eDisconnect\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVIServer\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eserver\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evCenter\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eConfirm\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"bp\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"vCenter: Removing VSC custom attributes"},{"content":"I\u0026rsquo;m working on a project right now, providing a SnapVault target for our \u0026ldquo;big\u0026rdquo; NetApp. So we moved our 3240 to it\u0026rsquo;s target location, I spent most of my time yesterday doing the cabling (SAS and ACP, as well as power).\nI\u0026rsquo;m still not finished, I still need to \u0026quot; beautify\u0026quot; the power cables, need to fix the network cables (currently I don\u0026rsquo;t have none \u0026hellip;.) and some other minor stuff. But lemme skip back a bit.\nThe 3240 initially had only two shelfs, one with the ID 10 and the other with the ID 50. When reimplementing the thing, I wanted to do two things:\nMake the shelfs \u0026ldquo;proper\u0026rdquo; (i.e. adjacent shelf IDs) Make sure it\u0026rsquo;s done right So, I ended up googling the topic (or rather NetApping, since the NOW page isn\u0026rsquo;t being indexed), and found a NetApp Community post. As I already did a complete wipe/cleanconfig of both filers, I was left with this:\nHalt both controllers (don\u0026rsquo;t power them off!) Change the shelf ID using the front panel of the DS4243 Power-cycle each shelf Wait at least 30 seconds Boot both controllers And that actually did it, my HA controllers are up and running, with the new shelf ID\u0026rsquo;s.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-10-11_netapp-changing-ds4243-shelf-id/","summary":"\u003cp\u003eI\u0026rsquo;m working on a project right now, providing a SnapVault target for our \u0026ldquo;big\u0026rdquo; NetApp. So we moved our 3240 to it\u0026rsquo;s target location, I spent most of my time yesterday doing the cabling (SAS and ACP, as well as power).\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;m still not finished, I still need to \u0026quot; \u003cem\u003ebeautify\u003c/em\u003e\u0026quot; the power cables, need to fix the network cables (currently I don\u0026rsquo;t have none \u0026hellip;.) and some other minor stuff. But lemme skip back a bit.\u003c/p\u003e","title":"NetApp: Changing DS4243 shelf ID"},{"content":"Well, I\u0026rsquo;m in a situation, where I need to move all volumes from one controller to two others. So I looked at the ways I had available:\nFreshly implementing everything: No option at all! vol copy: Is rather slow, thus no option ndmpcopy: That\u0026rsquo;s exactly what I needed! ndmpcopy is a great way to copy over a whole volume including it\u0026rsquo;s files (thus FCP luns) to another volume/controller.\nFirst I threw in a crossover cable, since at around 6 PM our backup system starts it\u0026rsquo;s daily run, and everything else running via IP in between 6 PM and 6 AM is seriously impaired by this. Configured the additional ports on all three controllers (picked a private, not-routed range just in case) and then kicked of a simple bash script that ran the following:\n1 2 ssh fas03 ndmpcopy -sa ndmp:ndmppass -da ndmp:ndmppass 192.168.2.30:/vol/vol_xen_boot 192.168.2.40:/vol/vol_xen_boot Now, that in itself worked like a charm as you can see from the output below.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Ndmpcopy: Starting copy [ 32 ] ... Ndmpcopy: 192.168.2.30: Notify: Connection established Ndmpcopy: 192.168.2.40: Notify: Connection established Ndmpcopy: 192.168.2.30: Connect: Authentication successful Ndmpcopy: 192.168.2.40: Connect: Authentication successful Ndmpcopy: 192.168.2.30: Log: DUMP: creating \u0026#34;/vol/vol_xen_boot/../snapshot_for_backup.17\u0026#34; snapshot. Ndmpcopy: 192.168.2.30: Log: DUMP: Using Full Volume Dump Ndmpcopy: 192.168.2.30: Log: DUMP: Date of this level 0 dump: Fri Oct 5 23:41:47 2012. Ndmpcopy: 192.168.2.30: Log: DUMP: Date of last level 0 dump: the epoch. Ndmpcopy: 192.168.2.30: Log: DUMP: Dumping /vol/vol_xen_boot to NDMP connection Ndmpcopy: 192.168.2.30: Log: DUMP: mapping (Pass I)[regular files] Ndmpcopy: 192.168.2.30: Log: DUMP: mapping (Pass II)[directories] Ndmpcopy: 192.168.2.30: Log: DUMP: estimated 14916204 KB. Ndmpcopy: 192.168.2.30: Log: DUMP: dumping (Pass III) [directories] Ndmpcopy: 192.168.2.30: Log: DUMP: dumping (Pass IV) [regular files] Ndmpcopy: 192.168.2.40: Log: RESTORE: Fri Oct 5 23:41:53 2012: Begin level 0 restore Ndmpcopy: 192.168.2.40: Log: RESTORE: Fri Oct 5 23:41:53 2012: Reading directories from the backup Ndmpcopy: 192.168.2.40: Log: RESTORE: Fri Oct 5 23:41:55 2012: Creating files and directories. Ndmpcopy: 192.168.2.40: Log: RESTORE: Fri Oct 5 23:41:55 2012: Writing data to files. Ndmpcopy: 192.168.2.30: Log: DUMP: dumping (Pass V) [ACLs] Ndmpcopy: 192.168.2.30: Log: DUMP: 14857192 KB Ndmpcopy: 192.168.2.30: Log: DUMP: DUMP IS DONE Ndmpcopy: 192.168.2.30: Log: DUMP: Deleting \u0026#34;/vol/vol_xen_boot/../snapshot_for_backup.17\u0026#34; snapshot. Ndmpcopy: 192.168.2.40: Log: RESTORE: Fri Oct 5 23:44:52 2012: Restoring NT ACLs. Ndmpcopy: 192.168.2.40: Log: RESTORE: RESTORE IS DONE Ndmpcopy: 192.168.2.40: Log: RESTORE: The destination path is /vol/vol_xen_boot/ Ndmpcopy: 192.168.2.30: Notify: dump successful Ndmpcopy: 192.168.2.40: Notify: restore successful Ndmpcopy: Transfer successful [ 3 minutes 10 seconds ] Ndmpcopy: Done However, once I switched the UCS into the correct VSAN and modified the Boot Policy, the XenServer would boot, but didn\u0026rsquo;t find any Storage Repository. So I went ahead and looked at the CLI of the XenServer, looked at /var/log/messages and saw that apparently the PBD\u0026rsquo;s weren\u0026rsquo;t there yet (for whatever reason).\nPoked around in /dev/disk/by-id, looked at the output of xe pbd-list and found that the SCSI-IDs used in the PBD\u0026rsquo;s we\u0026rsquo;re actually not present yet. So I was like wtf for a moment, however then took a quick peek at the output of lun show -v /vol/vol_xen_boot on both NetApp controllers and found the cause for my troubles:\n1 2 3 4 5 6 7 8 9 10 11 FAS03\u0026gt; lun show -v /vol/vol_xen_boot/xen01_lun00 /vol/vol_xen_boot/xen01_lun00 15g (16106127360) (r/w, online, mapped) Comment: \u0026#34;xen01_lun00\u0026#34; Serial#: dnNtFoiCJH1c Share: none Space Reservation: disabled Multiprotocol Type: linux Maps: XEN01=0 Occupied Size: 3.3g (3571474432) Creation Time: Mon Feb 13 10:26:16 CET 2012 Cluster Shared Volume Information: 0x0 1 2 3 4 5 6 7 8 9 10 11 FAS01\u0026gt; lun show -v /vol/vol_xen_boot/xen01_lun00 /vol/vol_xen_boot/xen01_lun00 15g (16106127360) (r/w, online, mapped) Comment: \u0026#34;xen01_lun00\u0026#34; Serial#: dfb8c4mpKwd9 Share: none Space Reservation: disabled Multiprotocol Type: linux Maps: XEN01=0 Occupied Size: 3.3g (3571474432) Creation Time: Mon Feb 13 10:26:16 CET 2012 Cluster Shared Volume Information: 0x0 As you can see, the lun itself is available and mapped with the correct LUN ID. However, if you look closely at the serial of both LUNs you might notice what I noticed. So it turns out, ndmpcopy does the copy-process, however you need to adjust the LUN serial on the destination controller to match the one from the source controller, otherwise it\u0026rsquo;ll throw any system out of whack.\nAfter adjusting that, everything came up just fine. And I\u0026rsquo;m finished with my first XenServer environment, only the big one is still copying.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-10-06_netapp-migrating-fcp-luns-with-ndmpcopy-to-another-controller/","summary":"\u003cp\u003eWell, I\u0026rsquo;m in a situation, where I need to move all volumes from one controller to two others. So I looked at the ways I had available:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eFreshly implementing everything: No option at all!\u003c/li\u003e\n\u003cli\u003evol copy: Is rather slow, thus no option\u003c/li\u003e\n\u003cli\u003endmpcopy: That\u0026rsquo;s exactly what I needed!\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003endmpcopy is a great way to copy over a whole volume including it\u0026rsquo;s files (thus FCP luns) to another volume/controller.\u003c/p\u003e\n\u003cp\u003eFirst I threw in a crossover cable, since at around 6 PM our backup system starts it\u0026rsquo;s daily run, and everything else running via IP in between 6 PM and 6 AM is seriously impaired by this. Configured the additional ports on all three controllers (picked a private, not-routed range just in case) and then kicked of a simple bash script that ran the following:\u003c/p\u003e","title":"NetApp: Migrating FCP luns with ndmpcopy to another controller"},{"content":"Well, as you might know I\u0026rsquo;ve been tinkering with a NetApp FAS at work. The last few months, I\u0026rsquo;ve been trying to figure out a few things, which I actually did.\nOne \u0026ldquo;error\u0026rdquo; I ran into with creating the lun\u0026rsquo;s and volumes by hand was that the volumes were running out of space. Even if the volume was a bit larger than the LUN. After that happened a few times, I decided to see how to fix that. As it turns out, the GUI \u0026ldquo;fixes\u0026rdquo; that already in a way I wouldn\u0026rsquo;t have expected.\nThe GUI wizard for creating a new LUN simply enlarges the hosting volume by three percent (that\u0026rsquo;s 3%!). So if you create a 300GiB LUN, the GUI will create a volume with 309GiB (well about that - the GUI calculates in KiB thus you\u0026rsquo;ll see something like 324009984k in the output of vol size).\nI also wrote a short script, which will sum up the space of all LUNs contained inside a volume and then based on your snap reserve and the actual LUN space give you the current vol size and the vol size it should be. I\u0026rsquo;ll post the script later on.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-09-20_netapp-lun-creation-vol-sizing/","summary":"\u003cp\u003eWell, as you might know I\u0026rsquo;ve been tinkering with a NetApp FAS at work. The last few months, I\u0026rsquo;ve been trying to figure out a few things, which I actually did.\u003c/p\u003e\n\u003cp\u003eOne \u0026ldquo;error\u0026rdquo; I ran into with creating the lun\u0026rsquo;s and volumes by hand was that the volumes were running out of space. Even if the volume was a bit larger than the LUN. After that happened a few times, I decided to see how to fix that. As it turns out, the GUI \u0026ldquo;fixes\u0026rdquo; that already in a way I wouldn\u0026rsquo;t have expected.\u003c/p\u003e","title":"NetApp LUN creation/vol sizing"},{"content":"Well, I have yet another weird UCS problem. I have a single blade, that has trouble with it\u0026rsquo;s primary fabric attachment.\nThe problem get\u0026rsquo;s even more weird, if you look at the details.\nAfter looking at the IO modules, the error doesn\u0026rsquo;t become any clearer:\nSo far, I have tried nearly everything. I\u0026rsquo;ve tried resetting the active and passive Connectivity of the vNIC, I tried resetting the DCE adapter for the vNIC, but nothing. I even tried resetting the vHBA that\u0026rsquo;s associated with this fabric, but that didn\u0026rsquo;t result to anything. Not even the usual flogi (fibre channel login) errors, that you get when either booting/resetting the blade.\nWell, I opened a TAC case and the Cisco engineer looked over the CLI of my fabric interconnects, hacked away at the thousand logs the UCS keeps, and asked me if I could switch the blade to another slot. However, since I don\u0026rsquo;t have any slots to spare - the five chassis are full - he said he\u0026rsquo;d start the RMA process for the MK81R mezzanine card.\nThe new MK81R arrived a few days later, however the issue still persisted. So the TAC engineer suggested I\u0026rsquo;d pull the IO module and plug in a \u0026ldquo;new\u0026rdquo; one (one that I knew was working). So I picked a Friday afternoon for the maintainance window (since I didn\u0026rsquo;t know if the blades would survive a IO module failover) and pulled one from my newly arrived chassis and reseated the one I knew to be faulty.\nGuess what: after swapping the IO modules, the error is completely gone \u0026hellip;. \u0026#x1f937; I don\u0026rsquo;t have a clue how this error happened or why it was fixed by pulling and plugging the IO module. Guess another error for the odd category.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-09-17_ucs-5108-vif-down/","summary":"\u003cp\u003eWell, I have yet another weird UCS problem. I have a single blade, that has trouble with it\u0026rsquo;s primary fabric attachment.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2012/08/ucs-1.png\" width=\"500\"/\u003e \n\u003c/figure\u003e\n\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2012/08/ucs-2.png\" width=\"500\"/\u003e \n\u003c/figure\u003e\n\n\u003cp\u003eThe problem get\u0026rsquo;s even more weird, if you look at the details.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2012/08/ucs-3.png\" width=\"500\"/\u003e \n\u003c/figure\u003e\n\n\u003cp\u003eAfter looking at the IO modules, the error doesn\u0026rsquo;t become any clearer:\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2012/08/ucs-4.png\" width=\"500\"/\u003e \n\u003c/figure\u003e\n\n\u003cp\u003eSo far, I have tried nearly everything. I\u0026rsquo;ve tried resetting the active and passive Connectivity of the vNIC, I tried resetting the DCE adapter for the vNIC, but nothing. I even tried resetting the vHBA that\u0026rsquo;s associated with this fabric, but that didn\u0026rsquo;t result to anything. Not even the usual flogi (fibre channel login) errors, that you get when either booting/resetting the blade.\u003c/p\u003e","title":"UCS 5108: VIF down"},{"content":"Well, I recently had yet another UCS display/I2C communication problem. Somehow one of my chassis\u0026rsquo; started to think, that the power redundancy was lost.\nAfter looking at it a bit deeper, it seems only the GUI or the chassis did notice this power glitch:\nAs you can see, all PSU\u0026rsquo;s still have power. Now, since I had a big maintainance window the last weekend anyhow (and I spent ~14 hours at work), I decided to restart the IO modules in that chassis. And guess what: The error is gone! Another weird I2C communication issue with the firmware release 2.0.2 \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-09-04_ucs-5108-power-problem/","summary":"\u003cp\u003eWell, I recently had yet another UCS display/I2C communication problem. Somehow one of my chassis\u0026rsquo; started to think, that the power redundancy was lost.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2012/08/ucs-6.png\" width=\"500\"/\u003e \n\u003c/figure\u003e\n\n\u003cp\u003eAfter looking at it a bit deeper, it seems only the GUI or the chassis did notice this power glitch:\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2012/08/ucs-5.png\" width=\"500\"/\u003e \n\u003c/figure\u003e\n\n\u003cp\u003eAs you can see, all PSU\u0026rsquo;s still have power. Now, since I had a big maintainance window the last weekend anyhow (and I spent ~14 hours at work), I decided to restart the IO modules in that chassis. And guess what: The error is gone! Another weird I2C communication issue with the firmware release 2.0.2 \u0026hellip;\u003c/p\u003e","title":"UCS 5108: Power problem"},{"content":"Well, I\u0026rsquo;ve been having issues with our SMT. Basically after the release of SLES11 SP2 in February, I\u0026rsquo;ve been waiting for the repositories to turn \u0026ldquo;mirrorable\u0026rdquo;, which they haven\u0026rsquo;t yet. So I wrote a mail to the EMEA customer support.\nAnd yesterday I got a reply, stating that my mirror credentials had been regenerated. And guess what ? I can mirror stuff again. So if you ever have any issues like the ones I described (or any of the people in the forum threads experienced), write a mail to your Novell customer support. \u0026#x1f61b;\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-08-30_smt-mirroring-troubles/","summary":"\u003cp\u003eWell, I\u0026rsquo;ve been having issues with our SMT. Basically after the release of SLES11 SP2 in \u003ca href=\"http://forums.suse.com/showthread.php?711-add-catalogs-to-SMT-for-%28not-yet-used%29-versions\"\u003eFebruary\u003c/a\u003e, I\u0026rsquo;ve been waiting for the \u003ca href=\"http://www.claudiokuenzler.com/blog/265/howto-add-sles-11-sp2-updates-novell-smt-mirror-repository-repoindex\"\u003erepositories\u003c/a\u003e to turn \u0026ldquo;mirrorable\u0026rdquo;, which they haven\u0026rsquo;t yet. So I wrote a mail to the EMEA customer support.\u003c/p\u003e\n\u003cp\u003eAnd yesterday I got a reply, stating that my mirror credentials had been regenerated. And guess what ? I can mirror stuff again. So if you ever have any issues like the ones I described (or any of the people in the forum threads experienced), write a mail to your Novell customer support. \u0026#x1f61b;\u003c/p\u003e","title":"SMT mirroring troubles"},{"content":"Well, we recently upgraded the SnapManager version on our test box to 6.4.1. Now however, after restarting the box the SnapManager service failed to start \u0026hellip; The error was something like this:\nNow, first I stumbled upon this NetApp Community post, which only contained the \u0026ldquo;solution\u0026rdquo; to increase the global! wait time for services. That didn\u0026rsquo;t sit well with me.\nSo after looking through NOW! for a bit, I actually found the correct way. The fix is described in KB2010835. Yet again, another certificate error. Why do vendors deploy SSL certificates, when they use untrusted ones, which defeats the purpose of SSL certs or at least \u0026ldquo;brings up\u0026rdquo; users to ignore any error message they get concerning SSL certificates ?\nAs the KB article describes, you need to remove the following settings:\nSnapManager for SQL Server: Internet Explorer fixes\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-08-30_snapmanager-for-sql-server-service-fails-to-respond-in-a-timely-fashin/","summary":"\u003cp\u003eWell, we recently upgraded the SnapManager version on our test box to 6.4.1. Now however, after restarting the box the SnapManager service failed to start \u0026hellip; The error was something like this:\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2012/08/event-id-7000\u0026#43;7009-snapmanager.png\" width=\"500\"/\u003e \n\u003c/figure\u003e\n\n\u003cp\u003eNow, first I stumbled upon this \u003ca href=\"https://communities.netapp.com/thread/17862\"\u003eNetApp Community post\u003c/a\u003e, which only contained the \u0026ldquo;solution\u0026rdquo; to increase the global! wait time for services. That didn\u0026rsquo;t sit well with me.\u003c/p\u003e\n\u003cp\u003eSo after looking through NOW! for a bit, I actually found the correct way. The fix is described in \u003ca href=\"https://kb.netapp.com/support/index?page=content\u0026amp;id=2010835\"\u003eKB2010835\u003c/a\u003e. Yet again, another certificate error. Why do vendors deploy SSL certificates, when they use untrusted ones, which defeats the purpose of SSL certs or at least \u0026ldquo;brings up\u0026rdquo; users to ignore any error message they get concerning SSL certificates ?\u003c/p\u003e","title":"SnapManager for SQL Server: Service fails to respond in a timely fashin"},{"content":"In a Total Commander file list press Shift+Alt+Enter to calculate the directory size of all sub-directories.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-08-07_total-commander-generate-the-sum-of-all-directories/","summary":"\u003cp\u003eIn a Total Commander file list press Shift+Alt+Enter to calculate the directory size of all sub-directories.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/uploads/2012/08/total-commander-dir-list.png\"\u003e\u003cimg loading=\"lazy\" src=\"/uploads/2012/08/total-commander-dir-list.png\"\u003e\u003c/a\u003e\u003c/p\u003e","title":"Total Commander: Generate the sum of all directories"},{"content":"Here\u0026rsquo;s an old script, that also uses the magic provided by pxe-menu-generation (the script I posted before), but for VMware ESX/ESXi.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 #!/bin/bash TFTP_DIR=/srv/tftp INSTSRC_DIR=/srv/instsrc if [ -z $@ ] ; then echo \u0026#34;Usage: register-vmware \u0026lt;path to iso-file\u0026gt; labelname\u0026#34; exit 1 fi #set -x ISO_FILE=$1 mkdir /mnt/loop mount -o loop $ISO_FILE /mnt/loop if [ -f /mnt/loop/packages.xml ] ; then # Determine ISO information OS_LABEL=\u0026#34;$( grep \u0026#34;\u0026lt;name\u0026gt;\u0026#34; /mnt/loop/packages.xml | sed -e \u0026#34;s,\u0026lt;name\u0026gt;,,\u0026#34; -e \u0026#34;s,\u0026lt;/name\u0026gt;,,\u0026#34; )\u0026#34; OS_NAME=\u0026#34;$( grep \u0026#34;\u0026lt;ProductLineId\u0026gt;\u0026#34; /mnt/loop/packages.xml | sed -e \u0026#34;s,\u0026lt;ProductLineId\u0026gt;,,\u0026#34; -e \u0026#34;s,\u0026lt;/ProductLineId\u0026gt;,,\u0026#34; )\u0026#34; OS_RELEASE=\u0026#34;$( grep \u0026#34;\u0026lt;version\u0026gt;\u0026#34; /mnt/loop/packages.xml | sed -e \u0026#34;s,\u0026lt;version\u0026gt;,,\u0026#34; -e \u0026#34;s,\u0026lt;/version\u0026gt;,,\u0026#34; )\u0026#34; OS_BUILD=\u0026#34;$( grep \u0026#34;\u0026lt;release\u0026gt;\u0026#34; /mnt/loop/packages.xml | sed -e \u0026#34;s,\u0026lt;release\u0026gt;,,\u0026#34; -e \u0026#34;s,\u0026lt;/release\u0026gt;,,\u0026#34; )\u0026#34; shopt -s extglob OS_LABEL=${OS_LABEL##*( )} OS_NAME=${OS_NAME##*( )} OS_RELEASE=${OS_RELEASE##*( )} OS_BUILD=${OS_BUILD##*( )} elif [ -f /mnt/loop/README.txt ] ; then OS_LABEL=\u0026#34;\u0026#34; OS_NAME=\u0026#34;\u0026#34; OS_RELEASE=\u0026#34;\u0026#34; OS_BUILD=\u0026#34;\u0026#34; fi # Create directories mkdir -p $TFTP_DIR/boot/$OS_NAME/$OS_RELEASE-$OS_BUILD mkdir -p $TFTP_DIR/pxelinux.cfg/$OS_NAME mkdir -p $INSTSRC_DIR/$OS_NAME/$OS_RELEASE-$OS_BUILD #set +x # Copy CD/DVD content rsync -av /mnt/loop/* $INSTSRC_DIR/$OS_NAME/$OS_RELEASE-$OS_BUILD # Copy the PXE boot file (initrd/kernel) cp $INSTSRC_DIR/$OS_NAME/$OS_RELEASE-$OS_BUILD/isolinux/initrd.img $TFTP_DIR/boot/$OS_NAME/$OS_RELEASE-$OS_BUILD/initrd.img cp $INSTSRC_DIR/$OS_NAME/$OS_RELEASE-$OS_BUILD/isolinux/vmlinuz $TFTP_DIR/boot/$OS_NAME/$OS_RELEASE-$OS_BUILD/vmlinuz # Create the PXE boot menu cat \u0026gt; $TFTP_DIR/pxelinux.cfg/$OS_NAME/$OS_NAME-$OS_RELEASE-$OS_BUILD.menu \u0026lt;\u0026lt; EOF #LABEL $OS_LABEL $OS_RELEASE - build $OS_BUILD #OSNAME $OS_NAME #OSARCH x86_64 MENU TITLE VMware Installservice MENU BACKGROUND addons/background-vmware.png MENU COLOR screen 37;40 #80ffffff #00000000 MENU COLOR border 0 #ffffffff #ee000000 std MENU COLOR title 0 #ffffffff #ee000000 std MENU COLOR unsel 0 #ffffffff #ee000000 std MENU COLOR sel 0 #ffffffff #85000000 std MENU COLOR scrollbar 30;44 #40000000 #00000000 MENU COLOR tabmsg 0 #ee000000 #ffffffff std MENU COLOR cmdmark 0 #ff00ff00 #00000000 std MENU COLOR cmdline 0 #ee000000 #ffffffff std MENU COLOR timeout_msg 0 #ee000000 #ffffffff std MENU COLOR timeout 0 #ee000000 #ffffffff std MENU COLOR disabled 0 #ffffffff #ee000000 std MENU COLOR pwdheader 0 #ff000000 #99ffffff rev MENU COLOR pwdborder 0 #ff000000 #99ffffff rev MENU COLOR pwdentry 0 #ff000000 #99ffffff rev MENU COLOR hotkey 0 #ff00ff00 #ee000000 std MENU COLOR hotsel 0 #ffffffff #85000000 std LABEL DESC MENU LABEL $OS_LABEL $OS_RELEASE MENU DISABLE MENU SEPARATOR LABEL kickstart MENU LABEL ^Kickstart Installation KERNEL boot/$OS_NAME/$OS_RELEASE-$OS_BUILD/vmlinuz APPEND initrd=boot/$OS_NAME/$OS_RELEASE-$OS_BUILD/initrd.img vmkopts=debugLogToSerial:1 mem=512M ks=http://install.home.barfoo.org/kickstart/$OS_NAME-$OS_RELEASE-$OS_BUILD.cfg HOSTNAME= IAPPEND 1 TEXT HELP Es ist zu beachten, das mit TAB der Hostname angepasst werden muss! ENDTEXT LABEL netinst MENU LABEL ^Netzwerkbasierte Installation KERNEL boot/$OS_NAME/$OS_RELEASE-$OS_BUILD/vmlinuz APPEND initrd=boot/$OS_NAME/$OS_RELEASE-$OS_BUILD/initrd.img vmkopts=debugLogToSerial:1 mem=512M url=http://install.home.barfoo.org/instsrc/$OS_NAME/$OS_RELEASE-$OS_BUILD IAPPEND 1 MENU SEPARATOR LABEL back MENU LABEL \u0026lt;-- ^Vorherige Ansicht KERNEL addons/vesamenu.c32 APPEND pxelinux.cfg/$OS_NAME.menu EOF umount /mnt/loop rmdir /mnt/loop ","permalink":"https://christian.blog.pakiheim.de/posts/2012-07-24_installserver-publish-a-vmware-esx-iso-register-vmware/","summary":"\u003cp\u003eHere\u0026rsquo;s an old script, that also uses the magic \u003ca href=\"/posts/2014-08-08_installserver-regenerate-pxe-base-menu\" title=\"Installserver: Regenerate PXE base menu\"\u003eprovided by pxe-menu-generation\u003c/a\u003e (the script I posted before), but for VMware ESX/ESXi.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e  1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e  2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e  3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e  4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e  5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e  6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e  7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e  8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e  9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e 10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e 11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e 12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e 13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e 14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e 15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e 16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e 17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e 18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e 19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e 20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e 21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e 22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e 23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e 24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e 25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e 26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e 27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e 28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e 29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e 30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e 31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e 32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e 33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e 34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e 35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e 36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e 37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e 38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e 39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e 40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e 41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e 42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e 43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e 44\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-45\"\u003e 45\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-46\"\u003e 46\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-47\"\u003e 47\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-48\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-48\"\u003e 48\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-49\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-49\"\u003e 49\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-50\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-50\"\u003e 50\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-51\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-51\"\u003e 51\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-52\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-52\"\u003e 52\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-53\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-53\"\u003e 53\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-54\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-54\"\u003e 54\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-55\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-55\"\u003e 55\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-56\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-56\"\u003e 56\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-57\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-57\"\u003e 57\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-58\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-58\"\u003e 58\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-59\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-59\"\u003e 59\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-60\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-60\"\u003e 60\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-61\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-61\"\u003e 61\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-62\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-62\"\u003e 62\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-63\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-63\"\u003e 63\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-64\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-64\"\u003e 64\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-65\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-65\"\u003e 65\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-66\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-66\"\u003e 66\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-67\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-67\"\u003e 67\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-68\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-68\"\u003e 68\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-69\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-69\"\u003e 69\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-70\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-70\"\u003e 70\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-71\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-71\"\u003e 71\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-72\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-72\"\u003e 72\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-73\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-73\"\u003e 73\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-74\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-74\"\u003e 74\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-75\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-75\"\u003e 75\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-76\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-76\"\u003e 76\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-77\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-77\"\u003e 77\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-78\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-78\"\u003e 78\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-79\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-79\"\u003e 79\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-80\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-80\"\u003e 80\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-81\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-81\"\u003e 81\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-82\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-82\"\u003e 82\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-83\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-83\"\u003e 83\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-84\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-84\"\u003e 84\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-85\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-85\"\u003e 85\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-86\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-86\"\u003e 86\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-87\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-87\"\u003e 87\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-88\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-88\"\u003e 88\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-89\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-89\"\u003e 89\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-90\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-90\"\u003e 90\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-91\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-91\"\u003e 91\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-92\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-92\"\u003e 92\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-93\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-93\"\u003e 93\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-94\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-94\"\u003e 94\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-95\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-95\"\u003e 95\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-96\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-96\"\u003e 96\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-97\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-97\"\u003e 97\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-98\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-98\"\u003e 98\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-99\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-99\"\u003e 99\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-100\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-100\"\u003e100\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-101\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-101\"\u003e101\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-102\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-102\"\u003e102\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-103\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-103\"\u003e103\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-104\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-104\"\u003e104\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-105\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-105\"\u003e105\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-106\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-106\"\u003e106\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-107\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-107\"\u003e107\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-108\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-108\"\u003e108\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-109\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-109\"\u003e109\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-110\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-110\"\u003e110\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-111\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-111\"\u003e111\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eTFTP_DIR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/srv/tftp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eINSTSRC_DIR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/srv/instsrc\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -z \u003cspan class=\"nv\"\u003e$@\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Usage: register-vmware \u0026lt;path to iso-file\u0026gt; labelname\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#set -x\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eISO_FILE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir /mnt/loop\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emount -o loop \u003cspan class=\"nv\"\u003e$ISO_FILE\u003c/span\u003e /mnt/loop\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -f /mnt/loop/packages.xml \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# Determine ISO information\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOS_LABEL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;name\u0026gt;\u0026#34;\u003c/span\u003e /mnt/loop/packages.xml \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed -e \u003cspan class=\"s2\"\u003e\u0026#34;s,\u0026lt;name\u0026gt;,,\u0026#34;\u003c/span\u003e -e \u003cspan class=\"s2\"\u003e\u0026#34;s,\u0026lt;/name\u0026gt;,,\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOS_NAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;ProductLineId\u0026gt;\u0026#34;\u003c/span\u003e /mnt/loop/packages.xml \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed -e \u003cspan class=\"s2\"\u003e\u0026#34;s,\u0026lt;ProductLineId\u0026gt;,,\u0026#34;\u003c/span\u003e -e \u003cspan class=\"s2\"\u003e\u0026#34;s,\u0026lt;/ProductLineId\u0026gt;,,\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOS_RELEASE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;version\u0026gt;\u0026#34;\u003c/span\u003e /mnt/loop/packages.xml \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed -e \u003cspan class=\"s2\"\u003e\u0026#34;s,\u0026lt;version\u0026gt;,,\u0026#34;\u003c/span\u003e -e \u003cspan class=\"s2\"\u003e\u0026#34;s,\u0026lt;/version\u0026gt;,,\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOS_BUILD\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;release\u0026gt;\u0026#34;\u003c/span\u003e /mnt/loop/packages.xml \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed -e \u003cspan class=\"s2\"\u003e\u0026#34;s,\u0026lt;release\u0026gt;,,\u0026#34;\u003c/span\u003e -e \u003cspan class=\"s2\"\u003e\u0026#34;s,\u0026lt;/release\u0026gt;,,\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eshopt\u003c/span\u003e -s extglob\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOS_LABEL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eOS_LABEL\u003c/span\u003e\u003cspan class=\"p\"\u003e##*( )\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOS_NAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eOS_NAME\u003c/span\u003e\u003cspan class=\"p\"\u003e##*( )\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOS_RELEASE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eOS_RELEASE\u003c/span\u003e\u003cspan class=\"p\"\u003e##*( )\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOS_BUILD\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eOS_BUILD\u003c/span\u003e\u003cspan class=\"p\"\u003e##*( )\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eelif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -f /mnt/loop/README.txt \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOS_LABEL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOS_NAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOS_RELEASE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOS_BUILD\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create directories\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir -p \u003cspan class=\"nv\"\u003e$TFTP_DIR\u003c/span\u003e/boot/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e-\u003cspan class=\"nv\"\u003e$OS_BUILD\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir -p \u003cspan class=\"nv\"\u003e$TFTP_DIR\u003c/span\u003e/pxelinux.cfg/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir -p \u003cspan class=\"nv\"\u003e$INSTSRC_DIR\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e-\u003cspan class=\"nv\"\u003e$OS_BUILD\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#set +x\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Copy CD/DVD content\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ersync -av /mnt/loop/* \u003cspan class=\"nv\"\u003e$INSTSRC_DIR\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e-\u003cspan class=\"nv\"\u003e$OS_BUILD\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Copy the PXE boot file (initrd/kernel)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecp \u003cspan class=\"nv\"\u003e$INSTSRC_DIR\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e-\u003cspan class=\"nv\"\u003e$OS_BUILD\u003c/span\u003e/isolinux/initrd.img\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003e$TFTP_DIR\u003c/span\u003e/boot/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e-\u003cspan class=\"nv\"\u003e$OS_BUILD\u003c/span\u003e/initrd.img\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecp \u003cspan class=\"nv\"\u003e$INSTSRC_DIR\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e-\u003cspan class=\"nv\"\u003e$OS_BUILD\u003c/span\u003e/isolinux/vmlinuz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003e$TFTP_DIR\u003c/span\u003e/boot/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e-\u003cspan class=\"nv\"\u003e$OS_BUILD\u003c/span\u003e/vmlinuz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create the PXE boot menu\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecat \u0026gt; \u003cspan class=\"nv\"\u003e$TFTP_DIR\u003c/span\u003e/pxelinux.cfg/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e-\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e-\u003cspan class=\"nv\"\u003e$OS_BUILD\u003c/span\u003e.menu \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; EOF\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e#LABEL $OS_LABEL $OS_RELEASE - build $OS_BUILD\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e#OSNAME $OS_NAME\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e#OSARCH x86_64\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU TITLE VMware Installservice\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU BACKGROUND addons/background-vmware.png\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR screen       37;40  #80ffffff #00000000\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR border           0  #ffffffff #ee000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR title            0  #ffffffff #ee000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR unsel            0  #ffffffff #ee000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR sel              0  #ffffffff #85000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR scrollbar    30;44  #40000000 #00000000\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR tabmsg           0  #ee000000 #ffffffff std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR cmdmark          0  #ff00ff00 #00000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR cmdline          0  #ee000000 #ffffffff std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR timeout_msg      0  #ee000000 #ffffffff std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR timeout          0  #ee000000 #ffffffff std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR disabled         0  #ffffffff #ee000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR pwdheader        0  #ff000000 #99ffffff rev\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR pwdborder        0  #ff000000 #99ffffff rev\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR pwdentry         0  #ff000000 #99ffffff rev\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR hotkey           0  #ff00ff00 #ee000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR hotsel           0  #ffffffff #85000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eLABEL DESC\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU LABEL $OS_LABEL $OS_RELEASE\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU DISABLE\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU SEPARATOR\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eLABEL kickstart\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU LABEL ^Kickstart Installation\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eKERNEL boot/$OS_NAME/$OS_RELEASE-$OS_BUILD/vmlinuz\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eAPPEND initrd=boot/$OS_NAME/$OS_RELEASE-$OS_BUILD/initrd.img vmkopts=debugLogToSerial:1 mem=512M ks=http://install.home.barfoo.org/kickstart/$OS_NAME-$OS_RELEASE-$OS_BUILD.cfg HOSTNAME=\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eIAPPEND 1\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eTEXT HELP\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eEs ist zu beachten, das mit TAB der Hostname angepasst werden muss!\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eENDTEXT\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eLABEL netinst\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU LABEL ^Netzwerkbasierte Installation\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eKERNEL boot/$OS_NAME/$OS_RELEASE-$OS_BUILD/vmlinuz\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eAPPEND initrd=boot/$OS_NAME/$OS_RELEASE-$OS_BUILD/initrd.img vmkopts=debugLogToSerial:1 mem=512M url=http://install.home.barfoo.org/instsrc/$OS_NAME/$OS_RELEASE-$OS_BUILD\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eIAPPEND 1\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU SEPARATOR\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eLABEL back\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU LABEL \u0026lt;-- ^Vorherige Ansicht\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eKERNEL addons/vesamenu.c32\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eAPPEND pxelinux.cfg/$OS_NAME.menu\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eEOF\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eumount /mnt/loop\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ermdir /mnt/loop\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Installserver: Publish a VMware ESX ISO - register-vmware"},{"content":"Well, I\u0026rsquo;ve been tinkering with a way to \u0026ldquo;unify\u0026rdquo; the way we deploy new OpenSUSE/SLES ISOs onto our installation server, once they are released. So here, I\u0026rsquo;ll show you the script I came up with:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 #!/bin/bash TFTP_DIR=/srv/tftpboot INSTSRC_DIR=/srv/instsrc if [ -z $@ ] ; then echo \u0026#34;Usage: register-suse \u0026lt;path to iso-file\u0026gt; labelname\u0026#34; exit 1 fi ISO_FILE=$1 mkdir /mnt/loop mount -o loop $ISO_FILE /mnt/loop # Determine ISO information OS_LABEL=\u0026#34;$( grep \u0026#39;^LABEL\u0026#39; /mnt/loop/content | cut -d -f10- )\u0026#34; if [ -z \u0026#34;$OS_LABEL\u0026#34; ] ; then OS_LABEL=\u0026#34;$( grep \u0026#39;^LABEL\u0026#39; /mnt/loop/content | cut -d -f2- | head -n1 )\u0026#34; fi OS_NAME=\u0026#34;$( grep \u0026#39;^DISTRIBUTION\u0026#39; /mnt/loop/content | cut -d -f3- | tr \u0026#39;[:upper:]\u0026#39; \u0026#39;[:lower:]\u0026#39; )\u0026#34; if [ -z \u0026#34;$OS_NAME\u0026#34; ] ; then OS_NAME=\u0026#34;$( grep \u0026#39;^PRODUCT\u0026#39; /mnt/loop/content | cut -d -f2- | cut -d_ -f1-2 | tr \u0026#39;[:upper:]\u0026#39; \u0026#39;[:lower:]\u0026#39; )\u0026#34; fi case \u0026#34;$OS_NAME\u0026#34; in suse_sle|suse_sles) OS_NAME=sles;; esac OS_RELEASE=\u0026#34;$( grep ^VERSION /mnt/loop/content | awk \u0026#39;{ print $2 }\u0026#39; | cut -d- -f1 )\u0026#34; if [ \u0026#34;$( echo $OS_LABEL | grep -i vmware )\u0026#34; != \u0026#34;\u0026#34; ] ; then OS_RELEASE=\u0026#34;$OS_RELEASE-vmware\u0026#34; fi OS_ARCH=\u0026#34;$( grep ^BASEARCHS /mnt/loop/content | awk \u0026#39;{ print $2 }\u0026#39; )\u0026#34; if [ -z \u0026#34;$OS_ARCH\u0026#34; ] ; then OS_ARCH=\u0026#34;$( grep ^DEFAULTBASE /mnt/loop/content | awk \u0026#39;{ print $2 }\u0026#39; )\u0026#34; fi OS_SHORTLABEL=\u0026#34;$( grep ^SHORTLABEL /mnt/loop/content | awk \u0026#39;{ print $2 }\u0026#39; | cut -d( -f1 | sed -e \u0026#34;s,SLES-,SLES,\u0026#34; -e \u0026#34;s,-, ,g\u0026#34; )\u0026#34; case \u0026#34;$OS_ARCH\u0026#34; in i*86) OS_ARCH=x86;; x86_64) OS_ARCH=x64;; esac # Create directories mkdir -p $TFTP_DIR/boot/$OS_NAME/$OS_RELEASE/$OS_ARCH mkdir -p $TFTP_DIR/pxelinux.cfg/$OS_NAME mkdir -p $INSTSRC_DIR/$OS_NAME/$OS_RELEASE/$OS_ARCH # Copy CD/DVD content rsync -av /mnt/loop/* $INSTSRC_DIR/$OS_NAME/$OS_RELEASE/$OS_ARCH/ # Create the info file cat \u0026gt; $INSTSRC_DIR/$OS_NAME/$OS_RELEASE/$OS_ARCH/info \u0026lt;\u0026lt;EOF Language: en_US Keytable: de-lat1-nd Install: http://install.home.barfoo.org/{INSTSRC_DIR//srv/}/$OS_NAME/$OS_RELEASE/$OS_ARCH/ Autoyast: http://install.home.barfoo.org/autoyast/ Textmode: 1 EOF # Copy the PXE boot file (initrd/kernel) cp $INSTSRC_DIR/$OS_NAME/$OS_RELEASE/$OS_ARCH/boot/*/loader/initrd $TFTP_DIR/boot/$OS_NAME/$OS_RELEASE/$OS_ARCH/initrd cp $INSTSRC_DIR/$OS_NAME/$OS_RELEASE/$OS_ARCH/boot/*/loader/linux $TFTP_DIR/boot/$OS_NAME/$OS_RELEASE/$OS_ARCH/linux # Create the PXE boot menu cat \u0026gt; $TFTP_DIR/pxelinux.cfg/$OS_NAME/$OS_NAME-$OS_RELEASE-$OS_ARCH.menu \u0026lt;\u0026lt; EOF #LABEL $OS_SHORTLABEL #OSNAME $OS_NAME #OSARCH $OS_ARCH MENU TITLE Linux Installationservices MENU BACKGROUND addons/background-suse.png MENU COLOR screen 37;40 #80ffffff #00000000 MENU COLOR border 0 #ffffffff #ee000000 std MENU COLOR title 0 #ffffffff #ee000000 std MENU COLOR unsel 0 #ffffffff #ee000000 std MENU COLOR sel 0 #ffffffff #85000000 std MENU COLOR scrollbar 30;44 #40000000 #00000000 MENU COLOR tabmsg 0 #ee000000 #ffffffff std MENU COLOR cmdmark 0 #ff00ff00 #00000000 std MENU COLOR cmdline 0 #ee000000 #ffffffff std MENU COLOR timeout_msg 0 #ee000000 #ffffffff std MENU COLOR timeout 0 #ee000000 #ffffffff std MENU COLOR disabled 0 #ffffffff #ee000000 std MENU COLOR pwdheader 0 #ff000000 #99ffffff rev MENU COLOR pwdborder 0 #ff000000 #99ffffff rev MENU COLOR pwdentry 0 #ff000000 #99ffffff rev MENU COLOR hotkey 0 #ff00ff00 #ee000000 std MENU COLOR hotsel 0 #ffffffff #85000000 std LABEL DESC MENU LABEL $OS_LABEL ($OS_ARCH) MENU DISABLE MENU SEPARATOR LABEL autoyast MENU LABEL ^Automatisierte Installation KERNEL boot/$OS_NAME/$OS_RELEASE/$OS_ARCH/linux APPEND initrd=boot/$OS_NAME/$OS_RELEASE/$OS_ARCH/initrd info=http://install.home.barfoo.org/${INSTSRC_DIR//srv/}/$OS_NAME/$OS_RELEASE/$OS_ARCH/info splash=native ramdisk_size=65535 vga=791 barrier=off LABEL netinst MENU LABEL ^Netzwerkbasierte Installation KERNEL boot/$OS_NAME/$OS_RELEASE/$OS_ARCH/linux APPEND initrd=boot/$OS_NAME/$OS_RELEASE/$OS_ARCH/initrd install=http://install.home.barfoo.org/${INSTSRC_DIR//srv/}/$OS_NAME/$OS_RELEASE/$OS_ARCH/ splash=native ramdisk_size=65535 vga=791 barrier=off MENU SEPARATOR LABEL back MENU LABEL \u0026lt;-- ^Vorherige Ansicht KERNEL addons/vesamenu.c32 APPEND pxelinux.cfg/$OS_NAME.menu EOF umount /mnt/loop rmdir /mnt/loop This also needs a second script, as this will only create a menu entry, not the menu itself. You\u0026rsquo;ll find the script in the next post!\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-07-24_installserver-publish-a-sles-opensuse-iso-register-suse/","summary":"\u003cp\u003eWell, I\u0026rsquo;ve been tinkering with a way to \u0026ldquo;unify\u0026rdquo; the way we deploy new OpenSUSE/SLES ISOs onto our installation server, once they are released. So here, I\u0026rsquo;ll show you the script I came up with:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e  1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e  2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e  3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e  4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e  5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e  6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e  7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e  8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e  9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e 10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e 11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e 12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e 13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e 14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e 15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e 16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e 17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e 18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e 19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e 20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e 21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e 22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e 23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e 24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e 25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e 26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e 27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e 28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e 29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e 30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e 31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e 32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e 33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e 34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e 35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e 36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e 37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e 38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e 39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e 40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e 41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e 42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e 43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e 44\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-45\"\u003e 45\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-46\"\u003e 46\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-47\"\u003e 47\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-48\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-48\"\u003e 48\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-49\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-49\"\u003e 49\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-50\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-50\"\u003e 50\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-51\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-51\"\u003e 51\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-52\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-52\"\u003e 52\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-53\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-53\"\u003e 53\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-54\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-54\"\u003e 54\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-55\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-55\"\u003e 55\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-56\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-56\"\u003e 56\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-57\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-57\"\u003e 57\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-58\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-58\"\u003e 58\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-59\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-59\"\u003e 59\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-60\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-60\"\u003e 60\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-61\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-61\"\u003e 61\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-62\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-62\"\u003e 62\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-63\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-63\"\u003e 63\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-64\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-64\"\u003e 64\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-65\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-65\"\u003e 65\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-66\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-66\"\u003e 66\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-67\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-67\"\u003e 67\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-68\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-68\"\u003e 68\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-69\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-69\"\u003e 69\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-70\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-70\"\u003e 70\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-71\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-71\"\u003e 71\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-72\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-72\"\u003e 72\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-73\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-73\"\u003e 73\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-74\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-74\"\u003e 74\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-75\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-75\"\u003e 75\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-76\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-76\"\u003e 76\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-77\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-77\"\u003e 77\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-78\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-78\"\u003e 78\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-79\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-79\"\u003e 79\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-80\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-80\"\u003e 80\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-81\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-81\"\u003e 81\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-82\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-82\"\u003e 82\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-83\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-83\"\u003e 83\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-84\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-84\"\u003e 84\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-85\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-85\"\u003e 85\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-86\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-86\"\u003e 86\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-87\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-87\"\u003e 87\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-88\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-88\"\u003e 88\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-89\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-89\"\u003e 89\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-90\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-90\"\u003e 90\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-91\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-91\"\u003e 91\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-92\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-92\"\u003e 92\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-93\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-93\"\u003e 93\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-94\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-94\"\u003e 94\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-95\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-95\"\u003e 95\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-96\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-96\"\u003e 96\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-97\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-97\"\u003e 97\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-98\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-98\"\u003e 98\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-99\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-99\"\u003e 99\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-100\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-100\"\u003e100\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-101\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-101\"\u003e101\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-102\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-102\"\u003e102\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-103\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-103\"\u003e103\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-104\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-104\"\u003e104\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-105\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-105\"\u003e105\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-106\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-106\"\u003e106\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-107\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-107\"\u003e107\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-108\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-108\"\u003e108\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-109\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-109\"\u003e109\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-110\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-110\"\u003e110\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-111\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-111\"\u003e111\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-112\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-112\"\u003e112\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-113\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-113\"\u003e113\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-114\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-114\"\u003e114\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-115\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-115\"\u003e115\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-116\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-116\"\u003e116\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-117\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-117\"\u003e117\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-118\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-118\"\u003e118\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-119\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-119\"\u003e119\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-120\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-120\"\u003e120\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-121\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-121\"\u003e121\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-122\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-122\"\u003e122\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-123\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-123\"\u003e123\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-124\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-124\"\u003e124\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-125\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-125\"\u003e125\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-126\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-126\"\u003e126\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-127\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-127\"\u003e127\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-128\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-128\"\u003e128\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eTFTP_DIR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/srv/tftpboot\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eINSTSRC_DIR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/srv/instsrc\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -z \u003cspan class=\"nv\"\u003e$@\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Usage: register-suse \u0026lt;path to iso-file\u0026gt; labelname\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eISO_FILE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir /mnt/loop\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emount -o loop \u003cspan class=\"nv\"\u003e$ISO_FILE\u003c/span\u003e /mnt/loop\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Determine ISO information\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eOS_LABEL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep \u003cspan class=\"s1\"\u003e\u0026#39;^LABEL\u0026#39;\u003c/span\u003e /mnt/loop/content \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d  -f10- \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -z \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$OS_LABEL\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOS_LABEL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep \u003cspan class=\"s1\"\u003e\u0026#39;^LABEL\u0026#39;\u003c/span\u003e /mnt/loop/content \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d  -f2- \u003cspan class=\"p\"\u003e|\u003c/span\u003e head -n1 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eOS_NAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep \u003cspan class=\"s1\"\u003e\u0026#39;^DISTRIBUTION\u0026#39;\u003c/span\u003e /mnt/loop/content \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d  -f3- \u003cspan class=\"p\"\u003e|\u003c/span\u003e tr \u003cspan class=\"s1\"\u003e\u0026#39;[:upper:]\u0026#39;\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;[:lower:]\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -z \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOS_NAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep \u003cspan class=\"s1\"\u003e\u0026#39;^PRODUCT\u0026#39;\u003c/span\u003e /mnt/loop/content \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d  -f2- \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d_ -f1-2 \u003cspan class=\"p\"\u003e|\u003c/span\u003e tr \u003cspan class=\"s1\"\u003e\u0026#39;[:upper:]\u0026#39;\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;[:lower:]\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  suse_sle\u003cspan class=\"p\"\u003e|\u003c/span\u003esuse_sles\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"nv\"\u003eOS_NAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003esles\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eesac\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eOS_RELEASE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep ^VERSION /mnt/loop/content \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $2 }\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d- -f1 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$OS_LABEL\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep -i vmware \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e !\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOS_RELEASE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e\u003cspan class=\"s2\"\u003e-vmware\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eOS_ARCH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep ^BASEARCHS /mnt/loop/content \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $2 }\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -z \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$OS_ARCH\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOS_ARCH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep ^DEFAULTBASE /mnt/loop/content \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $2 }\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eOS_SHORTLABEL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep ^SHORTLABEL /mnt/loop/content \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $2 }\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d\u003cspan class=\"o\"\u003e(\u003c/span\u003e -f1 \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed -e \u003cspan class=\"s2\"\u003e\u0026#34;s,SLES-,SLES,\u0026#34;\u003c/span\u003e -e \u003cspan class=\"s2\"\u003e\u0026#34;s,-, ,g\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$OS_ARCH\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  i*86\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"nv\"\u003eOS_ARCH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ex86\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  x86_64\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"nv\"\u003eOS_ARCH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ex64\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eesac\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create directories\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir -p \u003cspan class=\"nv\"\u003e$TFTP_DIR\u003c/span\u003e/boot/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_ARCH\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir -p \u003cspan class=\"nv\"\u003e$TFTP_DIR\u003c/span\u003e/pxelinux.cfg/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir -p \u003cspan class=\"nv\"\u003e$INSTSRC_DIR\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_ARCH\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Copy CD/DVD content\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ersync -av /mnt/loop/* \u003cspan class=\"nv\"\u003e$INSTSRC_DIR\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_ARCH\u003c/span\u003e/\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create the info file\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecat \u0026gt; \u003cspan class=\"nv\"\u003e$INSTSRC_DIR\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_ARCH\u003c/span\u003e/info \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt;EOF\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eLanguage: en_US\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eKeytable: de-lat1-nd\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eInstall: http://install.home.barfoo.org/{INSTSRC_DIR//srv/}/$OS_NAME/$OS_RELEASE/$OS_ARCH/\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eAutoyast: http://install.home.barfoo.org/autoyast/\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eTextmode: 1\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eEOF\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Copy the PXE boot file (initrd/kernel)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecp \u003cspan class=\"nv\"\u003e$INSTSRC_DIR\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_ARCH\u003c/span\u003e/boot/*/loader/initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003e$TFTP_DIR\u003c/span\u003e/boot/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_ARCH\u003c/span\u003e/initrd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecp \u003cspan class=\"nv\"\u003e$INSTSRC_DIR\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_ARCH\u003c/span\u003e/boot/*/loader/linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003e$TFTP_DIR\u003c/span\u003e/boot/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_ARCH\u003c/span\u003e/linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create the PXE boot menu\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecat \u0026gt; \u003cspan class=\"nv\"\u003e$TFTP_DIR\u003c/span\u003e/pxelinux.cfg/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e/\u003cspan class=\"nv\"\u003e$OS_NAME\u003c/span\u003e-\u003cspan class=\"nv\"\u003e$OS_RELEASE\u003c/span\u003e-\u003cspan class=\"nv\"\u003e$OS_ARCH\u003c/span\u003e.menu \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt; EOF\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e#LABEL $OS_SHORTLABEL\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e#OSNAME $OS_NAME\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e#OSARCH $OS_ARCH\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU TITLE Linux Installationservices\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU BACKGROUND addons/background-suse.png\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR screen       37;40  #80ffffff #00000000\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR border           0  #ffffffff #ee000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR title            0  #ffffffff #ee000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR unsel            0  #ffffffff #ee000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR sel              0  #ffffffff #85000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR scrollbar    30;44  #40000000 #00000000\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR tabmsg           0  #ee000000 #ffffffff std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR cmdmark          0  #ff00ff00 #00000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR cmdline          0  #ee000000 #ffffffff std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR timeout_msg      0  #ee000000 #ffffffff std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR timeout          0  #ee000000 #ffffffff std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR disabled         0  #ffffffff #ee000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR pwdheader        0  #ff000000 #99ffffff rev\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR pwdborder        0  #ff000000 #99ffffff rev\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR pwdentry         0  #ff000000 #99ffffff rev\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR hotkey           0  #ff00ff00 #ee000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU COLOR hotsel           0  #ffffffff #85000000 std\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eLABEL DESC\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e  MENU LABEL $OS_LABEL ($OS_ARCH)\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e  MENU DISABLE\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU SEPARATOR\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eLABEL autoyast\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e  MENU LABEL ^Automatisierte Installation\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e  KERNEL boot/$OS_NAME/$OS_RELEASE/$OS_ARCH/linux\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e  APPEND initrd=boot/$OS_NAME/$OS_RELEASE/$OS_ARCH/initrd info=http://install.home.barfoo.org/${INSTSRC_DIR//srv/}/$OS_NAME/$OS_RELEASE/$OS_ARCH/info splash=native ramdisk_size=65535 vga=791 barrier=off\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eLABEL netinst\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e  MENU LABEL ^Netzwerkbasierte Installation\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e  KERNEL boot/$OS_NAME/$OS_RELEASE/$OS_ARCH/linux\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e  APPEND initrd=boot/$OS_NAME/$OS_RELEASE/$OS_ARCH/initrd install=http://install.home.barfoo.org/${INSTSRC_DIR//srv/}/$OS_NAME/$OS_RELEASE/$OS_ARCH/ splash=native ramdisk_size=65535 vga=791 barrier=off\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eMENU SEPARATOR\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eLABEL back\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e  MENU LABEL \u0026lt;-- ^Vorherige Ansicht\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e  KERNEL addons/vesamenu.c32\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e  APPEND pxelinux.cfg/$OS_NAME.menu\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eEOF\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eumount /mnt/loop\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ermdir /mnt/loop\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThis also needs a second script, as this will only create a menu entry, not the menu itself. You\u0026rsquo;ll \u003ca href=\"/posts/2014-08-08_installserver-regenerate-pxe-base-menu\" title=\"Installserver: Regenerate PXE base menu\"\u003efind the script in the next post\u003c/a\u003e!\u003c/p\u003e","title":"Installserver: Publish a SLES/OpenSUSE ISO - register-suse"},{"content":"Well, I\u0026rsquo;m back at work after three weeks of vacation (some pictures to follow) and the provider hosting our disaster datacenter had their annual (or is it monthly now?) SAN maintainance, so we shut down everything over there by 9:00 am.\nAfter things were back up around 5pm, I booted the ESX hosts, however the VMs we\u0026rsquo;re all displaying the alert state - as if either the VMs had an HA event or we\u0026rsquo;re using to much CPU time. It didn\u0026rsquo;t matter whether or not the VM was running or not, the state persisted.\nvCenter - VM in alarm state\nLucky me, someone else already ran into this issue. So, after simply vMotion\u0026rsquo;ing the VMs to another host and the VM would no longer be in that alert state.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-07-22_vms-in-alarm-state-after-scheduled-maintainance/","summary":"\u003cp\u003eWell, I\u0026rsquo;m back at work after three weeks of vacation (some pictures to follow) and the provider hosting our disaster datacenter had their annual (or is it monthly now?) SAN maintainance, so we shut down everything over there by 9:00 am.\u003c/p\u003e\n\u003cp\u003eAfter things were back up around 5pm, I booted the ESX hosts, however the VMs we\u0026rsquo;re all displaying the alert state - as if either the VMs had an HA event or we\u0026rsquo;re using to much CPU time. It didn\u0026rsquo;t matter whether or not the VM was running or not, the state persisted.\u003c/p\u003e","title":"VMs in Alarm state after scheduled maintainance"},{"content":"As might have noticed, I haven\u0026rsquo;t posted anything in the last week. Well, as you might have figured, (oh I don\u0026rsquo;t know - maybe from the blog title) I\u0026rsquo;m enjoying a three week long vacation.\nI\u0026rsquo;m staying with my parents, doing day trips and getting a tan (I\u0026rsquo;m working pretty hard on that!). I still have two weeks left (well, actually only 11 days - makes it one week and change), as I\u0026rsquo;m leaving for Stuttgart next Friday.\nSo far, cheerio.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-06-25_vacation/","summary":"\u003cp\u003eAs might have noticed, I haven\u0026rsquo;t posted anything in the last week. Well, as you might have figured, (oh I don\u0026rsquo;t know - maybe from the blog title) I\u0026rsquo;m enjoying a three week long vacation.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2012/06/IMG_0005.jpg\" width=\"500\"/\u003e \n\u003c/figure\u003e\n\n\u003cp\u003eI\u0026rsquo;m staying with my parents, doing day trips and getting a tan (I\u0026rsquo;m working pretty hard on that!). I still have two weeks left (well, actually only 11 days - makes it one week and change), as I\u0026rsquo;m leaving for Stuttgart next Friday.\u003c/p\u003e","title":"Vacation"},{"content":"As promised in the earlier post, for completeness sake, here\u0026rsquo;s the counterpart for removing the LUNs in the first place.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #!/bin/bash KEY_FILE=\u0026#34;/root/.ssh/netapp.dsa\u0026#34; SSH_OPTS=\u0026#34;/root/.ssh/netapp-ssh_config\u0026#34; if [ $# -ne 2 ] ; then echo \u0026#34;fas-remove-lunmap: FAS_CONTROLLER TARGET_IGROUP\u0026#34; echo echo \u0026#34;Remove every mapped lun from the target igroup (for example reinstallation)\u0026#34; echo echo \u0026#34; Usage:\u0026#34; echo \u0026#34; - FAS_CONTROLLER: Hostname/IP-adress of the DATA ONTAP controller\u0026#34; echo \u0026#34; - TARGET_IGROUP: igroup that is actually modified\u0026#34; echo exit 1 fi FAS_CTRL=$1 TARGET=$2 ssh_fas() { # $@: commands for Data ONTAP COMMANDS=\u0026#34;$@\u0026#34; /usr/bin/ssh -i $KEY_FILE -l root -F $SSH_OPTS $COMMANDS } # Get the hostname of the controller, necessary for the reporting CTRL_HOSTNAME=\u0026#34;$( ssh_fas $FAS_CTRL rdfile /etc/rc | grep ^hostname | cut -d -f2 | tr \u0026#39;a-z\u0026#39; \u0026#39;A-Z\u0026#39; )\u0026#34; #set -x # Get the lun list. for lun in $( ssh_fas $FAS_CTRL lun show -g $SOURCE | awk \u0026#39;{ print $1 }\u0026#39; | sort -u ); do # If the LUN id is 0, skip otherwise we would remove the boot LUN if [ \u0026#34;$LUN_ID\u0026#34; != \u0026#34;0\u0026#34; ] ; then # Actually remove the mapping to our host echo \u0026#34;Removing $lun from $TARGET\u0026#34; ssh_fas $FAS_CTRL lun unmap $lun $TARGET fi done #set +x With that, you can simply run it against a NetApp controller and remove every LUN map except the one with LUN ID 0 (which is pretty handy when installing/reinstalling ESX servers).\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-06-15_netapp-remove-lun-mappings/","summary":"\u003cp\u003eAs \u003ca href=\"/posts/2012-06-15_netapp-remove-lun-mappings\" title=\"NetApp – Copy LUN mappings\"\u003epromised in the earlier post\u003c/a\u003e, for completeness sake, here\u0026rsquo;s the counterpart for removing the LUNs in the first place.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e41\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c1\"\u003e#!/bin/bash\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eKEY_FILE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/root/.ssh/netapp.dsa\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eSSH_OPTS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/root/.ssh/netapp-ssh_config\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$#\u003c/span\u003e -ne \u003cspan class=\"m\"\u003e2\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;fas-remove-lunmap: FAS_CONTROLLER TARGET_IGROUP\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Remove every mapped lun from the target igroup (for example reinstallation)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;  Usage:\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;    - FAS_CONTROLLER:   Hostname/IP-adress of the DATA ONTAP controller\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;    - TARGET_IGROUP:    igroup that is actually modified\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eFAS_CTRL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eTARGET\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003essh_fas\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"c1\"\u003e# $@: commands for Data ONTAP\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"nv\"\u003eCOMMANDS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$@\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e /usr/bin/ssh -i \u003cspan class=\"nv\"\u003e$KEY_FILE\u003c/span\u003e -l root -F \u003cspan class=\"nv\"\u003e$SSH_OPTS\u003c/span\u003e \u003cspan class=\"nv\"\u003e$COMMANDS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Get the hostname of the controller, necessary for the reporting\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eCTRL_HOSTNAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e ssh_fas \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e rdfile /etc/rc \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep ^hostname \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d  -f2 \u003cspan class=\"p\"\u003e|\u003c/span\u003e tr \u003cspan class=\"s1\"\u003e\u0026#39;a-z\u0026#39;\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;A-Z\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#set -x\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Get the lun list.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e lun in \u003cspan class=\"k\"\u003e$(\u003c/span\u003e ssh_fas \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e lun show -g \u003cspan class=\"nv\"\u003e$SOURCE\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $1 }\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sort -u \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# If the LUN id is 0, skip otherwise we would remove the boot LUN\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$LUN_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e !\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;0\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# Actually remove the mapping to our host\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Removing \u003c/span\u003e\u003cspan class=\"nv\"\u003e$lun\u003c/span\u003e\u003cspan class=\"s2\"\u003e from \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TARGET\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ssh_fas \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e lun unmap \u003cspan class=\"nv\"\u003e$lun\u003c/span\u003e \u003cspan class=\"nv\"\u003e$TARGET\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#set +x\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eWith that, you can simply run it against a NetApp controller and remove every LUN map except the one with LUN ID 0 (which is pretty handy when installing/reinstalling ESX servers).\u003c/p\u003e","title":"NetApp - Remove LUN mappings"},{"content":"Well, after figuring things out (and realizing that if you create a LUN in the same size as the volume it\u0026rsquo;ll break), I decided to write yet another script to figure out which LUNs needed fixing.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 #!/bin/bash KEY_FILE=\u0026#34;/root/.ssh/netapp.dsa\u0026#34; SSH_OPTS=\u0026#34;/root/.ssh/netapp-ssh_config\u0026#34; FAS_CTRL=$1 ssh_fas() { # $@: commands for Data ONTAP COMMANDS=\u0026#34;$@\u0026#34; /usr/bin/ssh -i $KEY_FILE -l root -F $SSH_OPTS $COMMANDS } for volume in $( ssh_fas $FAS_CTRL vol status | grep \u0026#34;vol.* online\u0026#34; | awk \u0026#39;{ print $1 }\u0026#39; ); do VOL_SIZE=\u0026#34;$( ssh_fas $FAS_CTRL vol size $volume | awk \u0026#39;{ print $8 }\u0026#39; | sed \u0026#34;s,.,,\u0026#34; )\u0026#34; VOL_UNIT_PARAM=\u0026#34;$( echo \u0026#34;${#VOL_SIZE} - 1\u0026#34; | bc )\u0026#34; VOL_UNIT=\u0026#34;${VOL_SIZE:$VOL_UNIT_PARAM:1}\u0026#34; case $VOL_UNIT in k) CONV=\u0026#34;1024\u0026#34;;; m) CONV=\u0026#34;1024 * 1024\u0026#34;;; g) CONV=\u0026#34;1024 * 1024 * 1024\u0026#34;;; esac VOL_SIZE=\u0026#34;$( echo \u0026#34;scale=0; ${VOL_SIZE/$VOL_UNIT/} * $CONV\u0026#34; | bc )\u0026#34; # Subtract the snap reserve (if any) SNAP=\u0026#34;$( ssh_fas $FAS_CTRL snap reserve $volume | cut -d -f7 | sed \u0026#34;s,%,,\u0026#34; )\u0026#34; if [ $SNAP -gt 0 ] ; then SNAP_SIZE=\u0026#34;$( echo \u0026#34;$VOL_SIZE * $SNAP / 100\u0026#34; | bc )\u0026#34; REMAINING_VOL_SIZE=\u0026#34;$( echo \u0026#34;$VOL_SIZE - $SNAP_SIZE\u0026#34; | bc )\u0026#34; else SNAP_SIZE=0 REMAINING_VOL_SIZE=$VOL_SIZE fi # Get the luns created inside the volume LUN_SIZE_TOTAL=0 for lunsize in $( ssh_fas $FAS_CTRL lun show -l ${volume} | awk \u0026#39;{ print $3 }\u0026#39; | sed -e \u0026#34;s,(,,\u0026#34; -e \u0026#34;s,),,\u0026#34; ); do LUN_SIZE_TOTAL=\u0026#34;$( echo \u0026#34;$LUN_SIZE_TOTAL + $lunsize\u0026#34; | bc )\u0026#34; REMAINING_VOL_SIZE=\u0026#34;$( echo \u0026#34;$REMAINING_VOL_SIZE - $lunsize\u0026#34; | bc )\u0026#34; done # Get the estimated space necessary. VOL_RESERVE=\u0026#34;$( echo \u0026#34;$VOL_SIZE * 3 / 100\u0026#34; | bc )\u0026#34; echo \u0026#34; VOL_NAME: $volume\u0026#34; echo \u0026#34; VOLUME_SIZE: $( echo \u0026#34;scale=2; $VOL_SIZE / 1024 / 1024 / 1024\u0026#34; | bc )G\u0026#34; echo \u0026#34; - SNAP_SIZE: $( echo \u0026#34;scale=2; $SNAP_SIZE / 1024 / 1024 / 1024\u0026#34; | bc )G\u0026#34; echo \u0026#34; SUB_TOTAL: $( echo \u0026#34;scale=2; ($VOL_SIZE - $SNAP_SIZE) / 1024 / 1024 / 1024\u0026#34; | bc )G\u0026#34; echo echo \u0026#34; - TOTAL_LUN_SIZE: $( echo \u0026#34;scale=2; $LUN_SIZE_TOTAL / 1024 / 1024 / 1024\u0026#34; | bc )G\u0026#34; echo \u0026#34; SUB_TOTAL: $( echo \u0026#34;scale=2; ($VOL_SIZE - $SNAP_SIZE - $LUN_SIZE_TOTAL) / 1024 / 1024 / 1024\u0026#34; | bc )G\u0026#34; echo echo \u0026#34; MISSING_SPACE:\u0026#34; DIFFERENCE_VOL_LUN=\u0026#34;$( echo \u0026#34;scale=2; ($VOL_SIZE - $SNAP_SIZE - $LUN_SIZE_TOTAL)\u0026#34; | bc | sed \u0026#34;s,-,,\u0026#34; )\u0026#34; echo \u0026#34; DIFFERENCE_VOL_LUN: $( echo \u0026#34;scale=2; $DIFFERENCE_VOL_LUN / 1024 / 1024 / 1024\u0026#34; | bc )G\u0026#34; echo \u0026#34; + VOL_RESERVE: $( echo \u0026#34;scale=2; $VOL_RESERVE / 1024 / 1024 / 1024\u0026#34; | bc )G\u0026#34; echo \u0026#34; SUB_TOTAL: $( echo \u0026#34;scale=2; ($DIFFERENCE_VOL_LUN + $VOL_RESERVE) / 1024 / 1024 / 1024\u0026#34; | bc )G\u0026#34; echo echo echo done And with that you have a list of volumes, with the amount of space they need to resized in order to accomodate the contained LUNs and the snapshots.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-06-08_netapp-get-a-list-of-volumes-containing-too-much-luns/","summary":"\u003cp\u003eWell, after figuring things out (and realizing that if you create a LUN in the same size as the volume it\u0026rsquo;ll break), I decided to write yet another script to figure out which LUNs needed fixing.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e44\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-45\"\u003e45\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-46\"\u003e46\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-47\"\u003e47\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-48\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-48\"\u003e48\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-49\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-49\"\u003e49\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-50\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-50\"\u003e50\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-51\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-51\"\u003e51\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-52\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-52\"\u003e52\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-53\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-53\"\u003e53\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-54\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-54\"\u003e54\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-55\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-55\"\u003e55\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-56\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-56\"\u003e56\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-57\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-57\"\u003e57\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-58\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-58\"\u003e58\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-59\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-59\"\u003e59\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-60\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-60\"\u003e60\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-61\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-61\"\u003e61\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-62\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-62\"\u003e62\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eKEY_FILE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/root/.ssh/netapp.dsa\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eSSH_OPTS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/root/.ssh/netapp-ssh_config\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eFAS_CTRL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003essh_fas\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# $@: commands for Data ONTAP\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eCOMMANDS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$@\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  /usr/bin/ssh -i \u003cspan class=\"nv\"\u003e$KEY_FILE\u003c/span\u003e -l root -F \u003cspan class=\"nv\"\u003e$SSH_OPTS\u003c/span\u003e \u003cspan class=\"nv\"\u003e$COMMANDS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e volume in \u003cspan class=\"k\"\u003e$(\u003c/span\u003e ssh_fas \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e vol status \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep \u003cspan class=\"s2\"\u003e\u0026#34;vol.* online\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $1 }\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eVOL_SIZE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e ssh_fas \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e vol size \u003cspan class=\"nv\"\u003e$volume\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $8 }\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s2\"\u003e\u0026#34;s,.,,\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eVOL_UNIT_PARAM\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${#\u003c/span\u003e\u003cspan class=\"nv\"\u003eVOL_SIZE\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e - 1\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eVOL_UNIT\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eVOL_SIZE\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nv\"\u003e$VOL_UNIT_PARAM\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"nv\"\u003e1\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nv\"\u003e$VOL_UNIT\u003c/span\u003e in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    k\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"nv\"\u003eCONV\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;1024\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    m\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"nv\"\u003eCONV\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;1024 * 1024\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    g\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"nv\"\u003eCONV\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;1024 * 1024 * 1024\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eesac\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eVOL_SIZE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;scale=0; \u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eVOL_SIZE\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$VOL_UNIT\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e * \u003c/span\u003e\u003cspan class=\"nv\"\u003e$CONV\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# Subtract the snap reserve (if any)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eSNAP\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e ssh_fas \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e snap reserve \u003cspan class=\"nv\"\u003e$volume\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d  -f7 \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s2\"\u003e\u0026#34;s,%,,\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$SNAP\u003c/span\u003e -gt \u003cspan class=\"m\"\u003e0\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eSNAP_SIZE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$VOL_SIZE\u003c/span\u003e\u003cspan class=\"s2\"\u003e * \u003c/span\u003e\u003cspan class=\"nv\"\u003e$SNAP\u003c/span\u003e\u003cspan class=\"s2\"\u003e / 100\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eREMAINING_VOL_SIZE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$VOL_SIZE\u003c/span\u003e\u003cspan class=\"s2\"\u003e - \u003c/span\u003e\u003cspan class=\"nv\"\u003e$SNAP_SIZE\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eSNAP_SIZE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eREMAINING_VOL_SIZE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$VOL_SIZE\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# Get the luns created inside the volume\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eLUN_SIZE_TOTAL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003efor\u003c/span\u003e lunsize in \u003cspan class=\"k\"\u003e$(\u003c/span\u003e ssh_fas \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e lun show -l \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003evolume\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $3 }\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed -e \u003cspan class=\"s2\"\u003e\u0026#34;s,(,,\u0026#34;\u003c/span\u003e -e \u003cspan class=\"s2\"\u003e\u0026#34;s,),,\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eLUN_SIZE_TOTAL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$LUN_SIZE_TOTAL\u003c/span\u003e\u003cspan class=\"s2\"\u003e + \u003c/span\u003e\u003cspan class=\"nv\"\u003e$lunsize\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eREMAINING_VOL_SIZE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$REMAINING_VOL_SIZE\u003c/span\u003e\u003cspan class=\"s2\"\u003e - \u003c/span\u003e\u003cspan class=\"nv\"\u003e$lunsize\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# Get the estimated space necessary.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eVOL_RESERVE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$VOL_SIZE\u003c/span\u003e\u003cspan class=\"s2\"\u003e * 3 / 100\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;              VOL_NAME: \u003c/span\u003e\u003cspan class=\"nv\"\u003e$volume\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;           VOLUME_SIZE: \u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;scale=2; \u003c/span\u003e\u003cspan class=\"nv\"\u003e$VOL_SIZE\u003c/span\u003e\u003cspan class=\"s2\"\u003e / 1024 / 1024 / 1024\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003eG\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;           - SNAP_SIZE: \u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;scale=2; \u003c/span\u003e\u003cspan class=\"nv\"\u003e$SNAP_SIZE\u003c/span\u003e\u003cspan class=\"s2\"\u003e / 1024 / 1024 / 1024\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003eG\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;             SUB_TOTAL: \u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;scale=2; (\u003c/span\u003e\u003cspan class=\"nv\"\u003e$VOL_SIZE\u003c/span\u003e\u003cspan class=\"s2\"\u003e - \u003c/span\u003e\u003cspan class=\"nv\"\u003e$SNAP_SIZE\u003c/span\u003e\u003cspan class=\"s2\"\u003e) / 1024 / 1024 / 1024\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003eG\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;      - TOTAL_LUN_SIZE: \u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;scale=2; \u003c/span\u003e\u003cspan class=\"nv\"\u003e$LUN_SIZE_TOTAL\u003c/span\u003e\u003cspan class=\"s2\"\u003e / 1024 / 1024 / 1024\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003eG\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;             SUB_TOTAL: \u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;scale=2; (\u003c/span\u003e\u003cspan class=\"nv\"\u003e$VOL_SIZE\u003c/span\u003e\u003cspan class=\"s2\"\u003e - \u003c/span\u003e\u003cspan class=\"nv\"\u003e$SNAP_SIZE\u003c/span\u003e\u003cspan class=\"s2\"\u003e - \u003c/span\u003e\u003cspan class=\"nv\"\u003e$LUN_SIZE_TOTAL\u003c/span\u003e\u003cspan class=\"s2\"\u003e) / 1024 / 1024 / 1024\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003eG\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;         MISSING_SPACE:\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eDIFFERENCE_VOL_LUN\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;scale=2; (\u003c/span\u003e\u003cspan class=\"nv\"\u003e$VOL_SIZE\u003c/span\u003e\u003cspan class=\"s2\"\u003e - \u003c/span\u003e\u003cspan class=\"nv\"\u003e$SNAP_SIZE\u003c/span\u003e\u003cspan class=\"s2\"\u003e - \u003c/span\u003e\u003cspan class=\"nv\"\u003e$LUN_SIZE_TOTAL\u003c/span\u003e\u003cspan class=\"s2\"\u003e)\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"p\"\u003e|\u003c/span\u003e sed \u003cspan class=\"s2\"\u003e\u0026#34;s,-,,\u0026#34;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;    DIFFERENCE_VOL_LUN: \u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;scale=2; \u003c/span\u003e\u003cspan class=\"nv\"\u003e$DIFFERENCE_VOL_LUN\u003c/span\u003e\u003cspan class=\"s2\"\u003e / 1024 / 1024 / 1024\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003eG\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;         + VOL_RESERVE: \u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;scale=2; \u003c/span\u003e\u003cspan class=\"nv\"\u003e$VOL_RESERVE\u003c/span\u003e\u003cspan class=\"s2\"\u003e / 1024 / 1024 / 1024\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003eG\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;             SUB_TOTAL: \u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;scale=2; (\u003c/span\u003e\u003cspan class=\"nv\"\u003e$DIFFERENCE_VOL_LUN\u003c/span\u003e\u003cspan class=\"s2\"\u003e + \u003c/span\u003e\u003cspan class=\"nv\"\u003e$VOL_RESERVE\u003c/span\u003e\u003cspan class=\"s2\"\u003e) / 1024 / 1024 / 1024\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003eG\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAnd with that you have a list of volumes, with the amount of space they need to resized in order to accomodate the contained LUNs and the snapshots.\u003c/p\u003e","title":"NetApp - Get a list of volumes containing too much LUNs"},{"content":"Well, we had some issues with XenServers \u0026ldquo;automated\u0026rdquo; metadata backup, so I decided - with the help of one of our consultants - to automate it on our own to an external target.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 #!/bin/bash # Crontab entry for each server: # 02 5 * * * root /usr/local/sbin/xen-pool-backup.sh # Get the pool name POOL_NAME=\u0026#34;$( xe pool-list | grep name-label | awk \u0026#39;{ print $4 }\u0026#39; )\u0026#34; HOST_UUID=\u0026#34;$( xe host-list hostname=`hostname` | grep \u0026#34;uuid ( RO)\u0026#34; | awk \u0026#39;{ print $5 }\u0026#39; )\u0026#34; DAILY_GENERATIONS=7 WEEKLY_GENERATIONS=4 NFS_MOUNT=\u0026#34;nfs.home.barfoo.org:/srv/xenbackup\u0026#34; NFS_LOCAL=\u0026#34;/tmp/backup-mount/$POOL_NAME\u0026#34; # Figure out if we\u0026#39;re the pool master POOL_MASTER=\u0026#34;$( xe pool-list | grep master | awk \u0026#39;{ print $4 }\u0026#39; )\u0026#34; if [ \u0026#34;$POOL_MASTER\u0026#34; == \u0026#34;$HOST_UUID\u0026#34; ] ; then # Only the pool master should backup the pool database, as this is the only # one who has a authoritive pool database # Create the necessary directory and mount the NFS volume mkdir -p ${NFS_LOCAL%/*} mount -t nfs $NFS_MOUNT ${NFS_LOCAL%/*} mkdir -p $NFS_LOCAL if [ -f $NFS_LOCAL/daily.$DAILY_GENERATIONS.gz ]; then rm -f $NFS_LOCAL/daily.$DAILY_GENERATIONS.gz fi OLD_DAILY=\u0026#34;$( echo \u0026#34;scale=0; $DAILY_GENERATIONS - 1\u0026#34; | bc )\u0026#34; for OLD in $( seq $OLD_DAILY -1 1 ); do if [ -f $NFS_LOCAL/daily.$OLD.gz ] ; then NEW=\u0026#34;$( echo \u0026#34;scale=0; $OLD+1\u0026#34; | bc )\u0026#34; # Save the time stamp somewhere touch $NFS_LOCAL/.timestamp -r $NFS_LOCAL/daily.$OLD.gz mv $NFS_LOCAL/daily.$OLD.gz $NFS_LOCAL/daily.$NEW.gz # Restore the date touch $NFS_LOCAL/daily.$NEW.gz -r $NFS_LOCAL/.timestamp fi done [ -f $NFS_LOCAL/daily.0.gz ] \u0026amp;\u0026amp; mv $NFS_LOCAL/daily.0.gz $NFS_LOCAL/daily.1.gz xe pool-dump-database file-name=$NFS_LOCAL/daily.0 gzip -9 $NFS_LOCAL/daily.0 [ -f $NFS_LOCAL/.timestamp ] \u0026amp;\u0026amp; rm $NFS_LOCAL/.timestamp umount ${NFS_LOCAL%/*} rm -rf ${NFS_LOCAL%/*} fi With that, I have at least a daily backup - and in combination with our daily TSM backup, I have at least month long history of metadata backups.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-06-05_xenserver-automation-metdata-backups/","summary":"\u003cp\u003eWell, we had some issues with XenServers \u0026ldquo;automated\u0026rdquo; metadata backup, so I decided - with the help of one of our consultants - to automate it on our own to an external target.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e44\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-45\"\u003e45\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-46\"\u003e46\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-47\"\u003e47\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-48\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-48\"\u003e48\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-49\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-49\"\u003e49\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-50\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-50\"\u003e50\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-51\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-51\"\u003e51\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-52\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-52\"\u003e52\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-53\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-53\"\u003e53\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-54\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-54\"\u003e54\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-55\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-55\"\u003e55\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-56\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-56\"\u003e56\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-57\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-57\"\u003e57\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Crontab entry for each server:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 02 5 * * * root /usr/local/sbin/xen-pool-backup.sh\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Get the pool name\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ePOOL_NAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e xe pool-list \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep name-label \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $4 }\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eHOST_UUID\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e xe host-list \u003cspan class=\"nv\"\u003ehostname\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003ehostname\u003cspan class=\"sb\"\u003e`\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep \u003cspan class=\"s2\"\u003e\u0026#34;uuid ( RO)\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $5 }\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eDAILY_GENERATIONS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e7\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eWEEKLY_GENERATIONS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e4\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eNFS_MOUNT\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;nfs.home.barfoo.org:/srv/xenbackup\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eNFS_LOCAL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/tmp/backup-mount/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$POOL_NAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Figure out if we\u0026#39;re the pool master\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ePOOL_MASTER\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e xe pool-list \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep master \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $4 }\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$POOL_MASTER\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$HOST_UUID\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# Only the pool master should backup the pool database, as this is the only\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# one who has a authoritive pool database\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# Create the necessary directory and mount the NFS volume\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  mkdir -p \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eNFS_LOCAL\u003c/span\u003e\u003cspan class=\"p\"\u003e%/*\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  mount -t nfs \u003cspan class=\"nv\"\u003e$NFS_MOUNT\u003c/span\u003e \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eNFS_LOCAL\u003c/span\u003e\u003cspan class=\"p\"\u003e%/*\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  mkdir -p \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -f \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.\u003cspan class=\"nv\"\u003e$DAILY_GENERATIONS\u003c/span\u003e.gz \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    rm -f \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.\u003cspan class=\"nv\"\u003e$DAILY_GENERATIONS\u003c/span\u003e.gz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOLD_DAILY\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;scale=0; \u003c/span\u003e\u003cspan class=\"nv\"\u003e$DAILY_GENERATIONS\u003c/span\u003e\u003cspan class=\"s2\"\u003e - 1\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003efor\u003c/span\u003e OLD in \u003cspan class=\"k\"\u003e$(\u003c/span\u003e seq \u003cspan class=\"nv\"\u003e$OLD_DAILY\u003c/span\u003e -1 \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -f \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.\u003cspan class=\"nv\"\u003e$OLD\u003c/span\u003e.gz \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nv\"\u003eNEW\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;scale=0; \u003c/span\u003e\u003cspan class=\"nv\"\u003e$OLD\u003c/span\u003e\u003cspan class=\"s2\"\u003e+1\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"c1\"\u003e# Save the time stamp somewhere\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      touch \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/.timestamp -r \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.\u003cspan class=\"nv\"\u003e$OLD\u003c/span\u003e.gz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      mv \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.\u003cspan class=\"nv\"\u003e$OLD\u003c/span\u003e.gz \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.\u003cspan class=\"nv\"\u003e$NEW\u003c/span\u003e.gz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"c1\"\u003e# Restore the date\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      touch \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.\u003cspan class=\"nv\"\u003e$NEW\u003c/span\u003e.gz -r \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/.timestamp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e[\u003c/span\u003e -f \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.0.gz \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e mv \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.0.gz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.1.gz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  xe pool-dump-database file-name\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  gzip -9 \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e[\u003c/span\u003e -f \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/.timestamp \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e rm \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/.timestamp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  umount \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eNFS_LOCAL\u003c/span\u003e\u003cspan class=\"p\"\u003e%/*\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  rm -rf \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eNFS_LOCAL\u003c/span\u003e\u003cspan class=\"p\"\u003e%/*\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eWith that, I have at least a daily backup - and in combination with our daily TSM backup, I have at least month long history of metadata backups.\u003c/p\u003e","title":"XenServer - Automation Metdata backups"},{"content":"Well, we had some issues with XenServer and its Metadata Backup in the past, thus I decided to write my own crontab-able script, which is installed/running on each XenServer.\n1#!/bin/bash 2# Crontab entry for each server: 3# 02 5 * * * root /usr/local/sbin/xen-pool-backup.sh 4 5# Get the pool name 6POOL_NAME=\u0026#34;$( xe pool-list | grep name-label | awk \u0026#39;{ print $4 }\u0026#39; )\u0026#34; 7HOST_UUID=\u0026#34;$( xe host-list hostname=`hostname` | grep \u0026#34;uuid ( RO)\u0026#34; | awk \u0026#39;{ print $5 }\u0026#39; )\u0026#34; 8 9DAILY_GENERATIONS=7 10WEEKLY_GENERATIONS=4 11NFS_MOUNT=\u0026#34;10.76.5.10:/srv/backup\u0026#34; 12NFS_LOCAL=\u0026#34;/tmp/backup-mount/$POOL_NAME\u0026#34; 13 14# Figure out if we\u0026#39;re the pool master 15POOL_MASTER=\u0026#34;$( xe pool-list | grep master | awk \u0026#39;{ print $4 }\u0026#39; )\u0026#34; 16 17if [ \u0026#34;$POOL_MASTER\u0026#34; == \u0026#34;$HOST_UUID\u0026#34; ] ; then 18 # Only the pool master should backup the pool database, as this is the only 19 # one who has a authoritive pool database 20 21 # Create the necessary directory and mount the NFS volume 22 mkdir -p ${NFS_LOCAL%/*} 23 mount -t nfs $NFS_MOUNT ${NFS_LOCAL%/*} 24 mkdir -p $NFS_LOCAL 25 26 if [ -f $NFS_LOCAL/daily.$DAILY_GENERATIONS.gz ]; then 27 rm -f $NFS_LOCAL/daily.$DAILY_GENERATIONS.gz 28 fi 29 30 OLD_DAILY=\u0026#34;$( echo \u0026#34;scale=0; $DAILY_GENERATIONS - 1\u0026#34; | bc )\u0026#34; 31 32 for OLD in $( seq $OLD_DAILY -1 1 ); do 33 if [ -f $NFS_LOCAL/daily.$OLD.gz ] ; then 34 NEW=\u0026#34;$( echo \u0026#34;scale=0; $OLD+1\u0026#34; | bc )\u0026#34; 35 # Save the time stamp somewhere 36 touch $NFS_LOCAL/.timestamp -r $NFS_LOCAL/daily.$OLD.gz 37 mv $NFS_LOCAL/daily.$OLD.gz $NFS_LOCAL/daily.$NEW.gz 38 # Restore the date 39 touch $NFS_LOCAL/daily.$NEW.gz -r $NFS_LOCAL/.timestamp 40 fi 41 done 42 43 [ -f $NFS_LOCAL/daily.0.gz ] \u0026amp;\u0026amp; mv $NFS_LOCAL/daily.0.gz $NFS_LOCAL/daily.1.gz 44 45 xe pool-dump-database file-name=$NFS_LOCAL/daily.0 46 gzip -9 $NFS_LOCAL/daily.0 47 48 [ -f $NFS_LOCAL/.timestamp ] \u0026amp;\u0026amp; rm $NFS_LOCAL/.timestamp 49 50 umount ${NFS_LOCAL%/*} 51 rm -rf ${NFS_LOCAL%/*} 52fi ","permalink":"https://christian.blog.pakiheim.de/articles/xenserver-metadata-backup/","summary":"\u003cp\u003eWell, we had some issues with XenServer and its Metadata Backup in the past, thus I decided to write my own crontab-able script, which is installed/running on each XenServer.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Crontab entry for each server:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 02 5 * * * root /usr/local/sbin/xen-pool-backup.sh\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Get the pool name\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ePOOL_NAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e xe pool-list \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep name-label \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $4 }\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eHOST_UUID\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e xe host-list \u003cspan class=\"nv\"\u003ehostname\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003ehostname\u003cspan class=\"sb\"\u003e`\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep \u003cspan class=\"s2\"\u003e\u0026#34;uuid ( RO)\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $5 }\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eDAILY_GENERATIONS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e7\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eWEEKLY_GENERATIONS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e4\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eNFS_MOUNT\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;10.76.5.10:/srv/backup\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eNFS_LOCAL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/tmp/backup-mount/\u003c/span\u003e\u003cspan class=\"nv\"\u003e$POOL_NAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Figure out if we\u0026#39;re the pool master\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003ePOOL_MASTER\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e xe pool-list \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep master \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $4 }\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$POOL_MASTER\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$HOST_UUID\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# Only the pool master should backup the pool database, as this is the only\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# one who has a authoritive pool database\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# Create the necessary directory and mount the NFS volume\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  mkdir -p \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eNFS_LOCAL\u003c/span\u003e\u003cspan class=\"p\"\u003e%/*\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  mount -t nfs \u003cspan class=\"nv\"\u003e$NFS_MOUNT\u003c/span\u003e \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eNFS_LOCAL\u003c/span\u003e\u003cspan class=\"p\"\u003e%/*\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  mkdir -p \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -f \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.\u003cspan class=\"nv\"\u003e$DAILY_GENERATIONS\u003c/span\u003e.gz \u003cspan class=\"o\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e    rm -f \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.\u003cspan class=\"nv\"\u003e$DAILY_GENERATIONS\u003c/span\u003e.gz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eOLD_DAILY\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;scale=0; \u003c/span\u003e\u003cspan class=\"nv\"\u003e$DAILY_GENERATIONS\u003c/span\u003e\u003cspan class=\"s2\"\u003e - 1\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003efor\u003c/span\u003e OLD in \u003cspan class=\"k\"\u003e$(\u003c/span\u003e seq \u003cspan class=\"nv\"\u003e$OLD_DAILY\u003c/span\u003e -1 \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e -f \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.\u003cspan class=\"nv\"\u003e$OLD\u003c/span\u003e.gz \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nv\"\u003eNEW\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;scale=0; \u003c/span\u003e\u003cspan class=\"nv\"\u003e$OLD\u003c/span\u003e\u003cspan class=\"s2\"\u003e+1\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e bc \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"c1\"\u003e# Save the time stamp somewhere\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e      touch \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/.timestamp -r \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.\u003cspan class=\"nv\"\u003e$OLD\u003c/span\u003e.gz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e      mv \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.\u003cspan class=\"nv\"\u003e$OLD\u003c/span\u003e.gz \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.\u003cspan class=\"nv\"\u003e$NEW\u003c/span\u003e.gz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e38\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"c1\"\u003e# Restore the date\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e39\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e      touch \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.\u003cspan class=\"nv\"\u003e$NEW\u003c/span\u003e.gz -r \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/.timestamp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e40\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e41\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e42\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e43\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e[\u003c/span\u003e -f \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.0.gz \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e mv \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.0.gz \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.1.gz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e44\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-45\"\u003e45\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  xe pool-dump-database file-name\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-46\"\u003e46\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  gzip -9 \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/daily.0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-47\"\u003e47\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-48\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-48\"\u003e48\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e[\u003c/span\u003e -f \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/.timestamp \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e rm \u003cspan class=\"nv\"\u003e$NFS_LOCAL\u003c/span\u003e/.timestamp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-49\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-49\"\u003e49\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-50\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-50\"\u003e50\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  umount \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eNFS_LOCAL\u003c/span\u003e\u003cspan class=\"p\"\u003e%/*\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-51\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-51\"\u003e51\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e  rm -rf \u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eNFS_LOCAL\u003c/span\u003e\u003cspan class=\"p\"\u003e%/*\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"ln\" id=\"hl-0-52\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-52\"\u003e52\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"XenServer - Metadata Backup"},{"content":"Well, I had another task for today \u0026hellip; I have an amount of FlexVolumes (sixty currently per controller), and I didn\u0026rsquo;t know if we had any, that didn\u0026rsquo;t have any LUNs on them. Now I thought there was a command for that since my co-worker mentioned something like that. However, once again \u0026hellip; there isn\u0026rsquo;t.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #!/bin/bash MAILTO=\u0026#34;san@barfoo.org\u0026#34; KEY_FILE=\u0026#34;/root/.ssh/netapp.dsa\u0026#34; SSH_OPTS=\u0026#34;/root/.ssh/netapp-ssh_config\u0026#34; FAS_CTRL=$1 TMPDIR=\u0026#34;$( mktemp -d )\u0026#34; ssh_fas() { # $@: commands for Data ONTAP COMMANDS=\u0026#34;$@\u0026#34; /usr/bin/ssh -i $KEY_FILE -l root -F $SSH_OPTS $COMMANDS } # Get the hostname of the controller, necessary for the reporting CTRL_HOSTNAME=\u0026#34;$( ssh_fas $FAS_CTRL rdfile /etc/rc | grep ^hostname | cut -d -f2 | tr \u0026#39;a-z\u0026#39; \u0026#39;A-Z\u0026#39; )\u0026#34; # Get a list of all volumes / luns VOL_LIST=\u0026#34;$( ssh_fas $FAS_CTRL vol status | grep ^vol | egrep -v \u0026#39;(nfs|cifs)\u0026#39; | awk \u0026#39;{ print $1 }\u0026#39; )\u0026#34; LUN_LIST=\u0026#34;$( ssh_fas $FAS_CTRL lun show | grep \u0026#39;/vol\u0026#39; | awk \u0026#39;{ print $1 }\u0026#39; )\u0026#34; for lun in $LUN_LIST; do VOL_EXTRACT=\u0026#34;$( echo $lun | cut -d/ -f3 )\u0026#34; VOL_LIST=${VOL_LIST/${VOL_EXTRACT}/} done for vol in $VOL_LIST; do echo \u0026#34;Empty Flex Volume: $vol.\u0026#34; done \u0026gt; $TMPDIR/mailcontent if [ \u0026#34;$( grep Flex $TMPDIR/mailcontent )\u0026#34; ] ; then cat $TMPDIR/mailcontent | mailx -r $MAILTO -s \u0026#34;$CTRL_HOSTNAME: Empty volume check\u0026#34; $MAILTO fi rm -r $TMPDIR ","permalink":"https://christian.blog.pakiheim.de/posts/2012-05-30_netapp-get-a-list-of-all-volumes-not-being-used/","summary":"\u003cp\u003eWell, I had another task for today \u0026hellip; I have an amount of FlexVolumes (sixty currently per controller), and I didn\u0026rsquo;t know if we had any, that didn\u0026rsquo;t have any LUNs on them. Now I thought there was a command for that since my co-worker mentioned something like that. However, once again \u0026hellip; there isn\u0026rsquo;t.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e39\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eMAILTO\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;san@barfoo.org\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eKEY_FILE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/root/.ssh/netapp.dsa\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eSSH_OPTS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/root/.ssh/netapp-ssh_config\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eFAS_CTRL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eTMPDIR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e mktemp -d \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003essh_fas\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# $@: commands for Data ONTAP\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eCOMMANDS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$@\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  /usr/bin/ssh -i \u003cspan class=\"nv\"\u003e$KEY_FILE\u003c/span\u003e -l root -F \u003cspan class=\"nv\"\u003e$SSH_OPTS\u003c/span\u003e \u003cspan class=\"nv\"\u003e$COMMANDS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Get the hostname of the controller, necessary for the reporting\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eCTRL_HOSTNAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e ssh_fas \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e rdfile /etc/rc \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep ^hostname \u003cspan class=\"p\"\u003e|\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  cut -d  -f2 \u003cspan class=\"p\"\u003e|\u003c/span\u003e tr \u003cspan class=\"s1\"\u003e\u0026#39;a-z\u0026#39;\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;A-Z\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Get a list of all volumes / luns\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eVOL_LIST\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e ssh_fas \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e vol status \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep ^vol \u003cspan class=\"p\"\u003e|\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  egrep -v \u003cspan class=\"s1\"\u003e\u0026#39;(nfs|cifs)\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $1 }\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eLUN_LIST\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e ssh_fas \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e lun show \u003cspan class=\"p\"\u003e|\u003c/span\u003e grep \u003cspan class=\"s1\"\u003e\u0026#39;/vol\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $1 }\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e lun in \u003cspan class=\"nv\"\u003e$LUN_LIST\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eVOL_EXTRACT\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$lun\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d/ -f3 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eVOL_LIST\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eVOL_LIST\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eVOL_EXTRACT\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"p\"\u003e/\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e vol in \u003cspan class=\"nv\"\u003e$VOL_LIST\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Empty Flex Volume: \u003c/span\u003e\u003cspan class=\"nv\"\u003e$vol\u003c/span\u003e\u003cspan class=\"s2\"\u003e.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e \u0026gt; \u003cspan class=\"nv\"\u003e$TMPDIR\u003c/span\u003e/mailcontent\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep Flex \u003cspan class=\"nv\"\u003e$TMPDIR\u003c/span\u003e/mailcontent \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  cat \u003cspan class=\"nv\"\u003e$TMPDIR\u003c/span\u003e/mailcontent \u003cspan class=\"p\"\u003e|\u003c/span\u003e mailx -r \u003cspan class=\"nv\"\u003e$MAILTO\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    -s \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$CTRL_HOSTNAME\u003c/span\u003e\u003cspan class=\"s2\"\u003e: Empty volume check\u0026#34;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$MAILTO\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erm -r \u003cspan class=\"nv\"\u003e$TMPDIR\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"NetApp - Get a list of all volumes not being used"},{"content":"Well, once again I was presented with a nice AutoSupport warning once I logged into my NOW account. Since we don\u0026rsquo;t have CIFS and/or NFS licensed on our filers, I wrote a cute little script that does the whole work for me.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 #!/bin/bash TMPDIR=\u0026#34;$( mktemp -d )\u0026#34; KEY_FILE=\u0026#34;/root/.ssh/netapp.dsa\u0026#34; SSH_OPTS=\u0026#34;/root/.ssh/netapp-ssh_config\u0026#34; FAS_CTRL=$1 QUALDEVICES=$2 ssh_fas() { # $@: commands for Data ONTAP COMMANDS=\u0026#34;$@\u0026#34; /usr/bin/ssh -i $KEY_FILE -l root -F $SSH_OPTS $COMMANDS } #set -x echo \u0026#34;Updating qual_devices on $FAS_CTRL\u0026#34; # Enable ftpd if it isn\u0026#39;t enabled already echo -n \u0026#34;Checking FTP subsystem\u0026#34; FTPD_INITIAL_STATE=\u0026#34;$( ssh_fas $FAS_CTRL options ftpd.enable | awk \u0026#39;{ print $2 }\u0026#39; )\u0026#34; if [ $FTPD_INITIAL_STATE == \u0026#34;off\u0026#34; ] ; then ssh_fas $FAS_CTRL options ftpd.enable on echo \u0026#34; .... ok\u0026#34; else echo \u0026#34; .... ok\u0026#34; fi echo read -s -p \u0026#34;Please supply the root password for $FAS_CTRL: \u0026#34; ROOT_PASSWD=$REPLY echo echo \u0026#34;Checking qual_devices:\u0026#34; echo -n \u0026#34; Running: \u0026#34; mkdir $TMPDIR/fas-version # Check the old version. ftp -n $FAS_CTRL \u0026gt;/dev/null \u0026lt;\u0026lt;END_SCRIPT prompt user root $ROOT_PASSWD lcd $TMPDIR/fas-version cd /etc mget qual_devices* quit END_SCRIPT FAS_VERSION=\u0026#34;$( grep Datecode $TMPDIR/fas-version/qual_devices_v3 | head -n1 | cut -d -f3 )\u0026#34; echo \u0026#34;$FAS_VERSION\u0026#34; # Unzip the qual_devices.zip file and compare it. ORIGPWD=$PWD mkdir $TMPDIR/new-version cd $TMPDIR/new-version unzip $QUALDEVICES \u0026gt;/dev/null echo -n \u0026#34; New: \u0026#34; NEW_VERSION=\u0026#34;$( grep Datecode $TMPDIR/new-version/qual_devices_v3 | head -n1 | cut -d -f3 )\u0026#34; echo \u0026#34;$NEW_VERSION\u0026#34; echo # Upload the supplied version if the new file doesn\u0026#39;t match the one running # on the controller if [ $NEW_VERSION != $FAS_VERSION ] ; then echo \u0026#34;Uploading qual_devices to $FAS_CTRL\u0026#34; ftp -n $FAS_CTRL \u0026gt;/dev/null \u0026lt;\u0026lt;END_SCRIPT prompt user root $ROOT_PASSWD lcd $TMPDIR/new-version cd /etc mput qual_devices* quit END_SCRIPT # Send an asup message, that the issue is corrected echo \u0026#34;Generating AutoSupport message\u0026#34; ssh_fas $FAS_CTRL options autosupport.doit qual_devices_fixed_$NEW_VERSION fi #set +x # Enable ftpd if [ $FTPD_INITIAL_STATE == \u0026#34;off\u0026#34; ] ; then ssh_fas $FAS_CTRL options ftpd.enable off fi rm -r $TMPDIR The whole thing is surly based, that FTP is configured ( as I described previously).\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-05-30_automating-qual-devices-updates/","summary":"\u003cp\u003eWell, once again I was presented with a nice AutoSupport warning once I logged into my NOW account. Since we don\u0026rsquo;t have CIFS and/or NFS licensed on our filers, I wrote a cute little script that does the whole work for me.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e44\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-45\"\u003e45\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-46\"\u003e46\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-47\"\u003e47\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-48\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-48\"\u003e48\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-49\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-49\"\u003e49\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-50\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-50\"\u003e50\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-51\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-51\"\u003e51\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-52\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-52\"\u003e52\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-53\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-53\"\u003e53\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-54\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-54\"\u003e54\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-55\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-55\"\u003e55\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-56\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-56\"\u003e56\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-57\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-57\"\u003e57\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-58\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-58\"\u003e58\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-59\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-59\"\u003e59\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-60\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-60\"\u003e60\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-61\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-61\"\u003e61\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-62\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-62\"\u003e62\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-63\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-63\"\u003e63\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-64\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-64\"\u003e64\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-65\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-65\"\u003e65\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-66\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-66\"\u003e66\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-67\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-67\"\u003e67\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-68\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-68\"\u003e68\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-69\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-69\"\u003e69\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-70\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-70\"\u003e70\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-71\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-71\"\u003e71\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-72\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-72\"\u003e72\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-73\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-73\"\u003e73\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-74\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-74\"\u003e74\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-75\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-75\"\u003e75\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-76\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-76\"\u003e76\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-77\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-77\"\u003e77\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-78\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-78\"\u003e78\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-79\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-79\"\u003e79\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-80\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-80\"\u003e80\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-81\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-81\"\u003e81\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-82\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-82\"\u003e82\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-83\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-83\"\u003e83\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-84\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-84\"\u003e84\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-85\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-85\"\u003e85\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-86\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-86\"\u003e86\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-87\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-87\"\u003e87\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-88\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-88\"\u003e88\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eTMPDIR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e mktemp -d \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eKEY_FILE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/root/.ssh/netapp.dsa\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eSSH_OPTS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/root/.ssh/netapp-ssh_config\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eFAS_CTRL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eQUALDEVICES\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003essh_fas\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# $@: commands for Data ONTAP\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eCOMMANDS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$@\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  /usr/bin/ssh -i \u003cspan class=\"nv\"\u003e$KEY_FILE\u003c/span\u003e -l root -F \u003cspan class=\"nv\"\u003e$SSH_OPTS\u003c/span\u003e \u003cspan class=\"nv\"\u003e$COMMANDS\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#set -x\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Updating qual_devices on \u003c/span\u003e\u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Enable ftpd if it isn\u0026#39;t enabled already\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e -n \u003cspan class=\"s2\"\u003e\u0026#34;Checking FTP subsystem\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eFTPD_INITIAL_STATE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e ssh_fas \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e options ftpd.enable \u003cspan class=\"p\"\u003e|\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  awk \u003cspan class=\"s1\"\u003e\u0026#39;{ print $2 }\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$FTPD_INITIAL_STATE\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;off\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  ssh_fas \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e options ftpd.enable on\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;   .... ok\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;   .... ok\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eread\u003c/span\u003e -s -p \u003cspan class=\"s2\"\u003e\u0026#34;Please supply the root password for \u003c/span\u003e\u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e\u003cspan class=\"s2\"\u003e: \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eROOT_PASSWD\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$REPLY\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Checking qual_devices:\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e -n \u003cspan class=\"s2\"\u003e\u0026#34;     Running: \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir \u003cspan class=\"nv\"\u003e$TMPDIR\u003c/span\u003e/fas-version\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Check the old version.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eftp -n \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e \u0026gt;/dev/null \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt;END_SCRIPT\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eprompt\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003euser root $ROOT_PASSWD\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003elcd $TMPDIR/fas-version\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003ecd /etc\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003emget qual_devices*\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003equit\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eEND_SCRIPT\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eFAS_VERSION\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep Datecode \u003cspan class=\"nv\"\u003e$TMPDIR\u003c/span\u003e/fas-version/qual_devices_v3 \u003cspan class=\"p\"\u003e|\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  head -n1 \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d  -f3 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$FAS_VERSION\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Unzip the qual_devices.zip file and compare it.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eORIGPWD\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PWD\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir \u003cspan class=\"nv\"\u003e$TMPDIR\u003c/span\u003e/new-version\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e \u003cspan class=\"nv\"\u003e$TMPDIR\u003c/span\u003e/new-version\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eunzip \u003cspan class=\"nv\"\u003e$QUALDEVICES\u003c/span\u003e \u0026gt;/dev/null\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e -n \u003cspan class=\"s2\"\u003e\u0026#34;         New: \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eNEW_VERSION\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e grep Datecode \u003cspan class=\"nv\"\u003e$TMPDIR\u003c/span\u003e/new-version/qual_devices_v3 \u003cspan class=\"p\"\u003e|\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  head -n1 \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d  -f3 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$NEW_VERSION\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Upload the supplied version if the new file doesn\u0026#39;t match the one running\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# on the controller\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$NEW_VERSION\u003c/span\u003e !\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nv\"\u003e$FAS_VERSION\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Uploading qual_devices to \u003c/span\u003e\u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  ftp -n \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e \u0026gt;/dev/null \u003cspan class=\"s\"\u003e\u0026lt;\u0026lt;END_SCRIPT\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eprompt\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003euser root $ROOT_PASSWD\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003elcd $TMPDIR/new-version\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003ecd /etc\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003emput qual_devices*\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003equit\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eEND_SCRIPT\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# Send an asup message, that the issue is corrected\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Generating AutoSupport message\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  ssh_fas \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e options autosupport.doit qual_devices_fixed_\u003cspan class=\"nv\"\u003e$NEW_VERSION\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#set +x\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Enable ftpd\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$FTPD_INITIAL_STATE\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;off\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  ssh_fas \u003cspan class=\"nv\"\u003e$FAS_CTRL\u003c/span\u003e options ftpd.enable off\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erm -r \u003cspan class=\"nv\"\u003e$TMPDIR\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThe whole thing is surly based, that FTP is configured ( \u003ca href=\"/posts/2014-08-08_netapp-fas-data-ontap-public-key-authentification-with-cifs-nfs-license\" title=\"NetApp FAS/Data ONTAP public key authentification with CIFS/NFS license\"\u003eas I described previously\u003c/a\u003e).\u003c/p\u003e","title":"Automating qual_devices updates"},{"content":"Well, I recently started backing up my not-copyrighted DVDs to hard drive; however the language is sometimes mixed up. In some English is the first, in others it\u0026rsquo;s German. So, I\u0026rsquo;ve come up with this little script which fixes it - and puts each file into order.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #!/bin/bash [ -x /usr/bin/bc ] || exit 1 [ -x /usr/bin/mkvmerge ] || exit 1 [ -x /usr/bin/mediainfo ] || exit 1 for file in $1/*.mkv; do # First, run mediainfo on the file. TRACK_ORDER=\u0026#34;$( mediainfo \u0026#39;--Output=Audio;%ID/String% %Language%x\u0026#39; $file | grep -v \u0026#39;^$\u0026#39; )\u0026#34; TRACK1_ID=\u0026#34;$( echo $TRACK_ORDER | cut -dx -f1 | cut -d\u0026amp;nbsp; -f1 )\u0026#34; TRACK1_LANG=\u0026#34;$( echo $TRACK_ORDER | cut -dx -f1 | cut -d\u0026amp;nbsp; -f2 )\u0026#34; TRACK2_ID=\u0026#34;$( echo $TRACK_ORDER | cut -dx -f2 | cut -d\u0026amp;nbsp; -f1 )\u0026#34; TRACK2_LANG=\u0026#34;$( echo $TRACK_ORDER | cut -dx -f2 | cut -d\u0026amp;nbsp; -f2 )\u0026#34; case $TRACK1_LANG in \u0026#34;de\u0026#34;) NEEDS_FIX=1 ;; *) NEEDS_FIX=0 ;; esac if [ $NEEDS_FIX -eq 1 ] ; then OPTS_1=\u0026#34;--language $TRACK1_ID:ger --track-name $TRACK1_ID:German\u0026#34; OPTS_2=\u0026#34;--default-track $TRACK1_ID:no --forced-track $TRACK1_ID:no\u0026#34; OPTS_3=\u0026#34;--language $TRACK2_ID:eng --track-name $TRACK2_ID:English\u0026#34; OPTS_4=\u0026#34;--default-track $TRACK2_ID:yes --forced-track $TRACK2_ID:no\u0026#34; OPTS_5=\u0026#34;--track-order 0:1,0:$TRACK2_ID,0:$TRACK1_ID\u0026#34; OPTS=\u0026#34;$OPTS_1 $OPTS_2 $OPTS_3 $OPTS_4 $OPTS_5\u0026#34; else OPTS_1=\u0026#34;--language $TRACK2_ID:ger --track-name $TRACK2_ID:German\u0026#34; OPTS_2=\u0026#34;--default-track $TRACK2_ID:no --forced-track $TRACK2_ID:no\u0026#34; OPTS_3=\u0026#34;--language $TRACK1_ID:eng --track-name $TRACK1_ID:English\u0026#34; OPTS_4=\u0026#34;--default-track $TRACK1_ID:yes --forced-track $TRACK1_ID:no\u0026#34; OPTS=\u0026#34;$OPTS_1 $OPTS_2 $OPTS_3 $OPTS_4\u0026#34; fi mkvmerge -o $file.new --language \u0026#34;1:eng\u0026#34; --default-track \u0026#34;1:yes\u0026#34; --forced-track \u0026#34;1:no\u0026#34; --audio-tracks \u0026#34;$TRACK1_ID,$TRACK2_ID\u0026#34; --video-tracks \u0026#34;1\u0026#34; --no-subtitles --no-track-tags --no-global-tags $OPTS $file done ","permalink":"https://christian.blog.pakiheim.de/posts/2012-05-27_mass-fix-language-order-of-matroska-files/","summary":"\u003cp\u003eWell, I recently started backing up my not-copyrighted DVDs to hard drive; however the language is sometimes mixed up. In some English is the first, in others it\u0026rsquo;s German. So, I\u0026rsquo;ve come up with this little script which fixes it - and puts each file into order.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e42\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#!/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e -x /usr/bin/bc \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e -x /usr/bin/mkvmerge \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e -x /usr/bin/mediainfo \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"nb\"\u003eexit\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003efor\u003c/span\u003e file in \u003cspan class=\"nv\"\u003e$1\u003c/span\u003e/*.mkv\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003edo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# First, run mediainfo on the file.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eTRACK_ORDER\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e mediainfo \u003cspan class=\"s1\"\u003e\u0026#39;--Output=Audio;%ID/String% %Language%x\u0026#39;\u003c/span\u003e \u003cspan class=\"nv\"\u003e$file\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    grep -v \u003cspan class=\"s1\"\u003e\u0026#39;^$\u0026#39;\u003c/span\u003e \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eTRACK1_ID\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$TRACK_ORDER\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -dx -f1 \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d\u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003enbsp\u003cspan class=\"p\"\u003e;\u003c/span\u003e -f1 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eTRACK1_LANG\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$TRACK_ORDER\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -dx -f1 \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d\u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003enbsp\u003cspan class=\"p\"\u003e;\u003c/span\u003e -f2 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eTRACK2_ID\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$TRACK_ORDER\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -dx -f2 \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d\u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003enbsp\u003cspan class=\"p\"\u003e;\u003c/span\u003e -f1 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nv\"\u003eTRACK2_LANG\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"nv\"\u003e$TRACK_ORDER\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -dx -f2 \u003cspan class=\"p\"\u003e|\u003c/span\u003e cut -d\u003cspan class=\"p\"\u003e\u0026amp;\u003c/span\u003enbsp\u003cspan class=\"p\"\u003e;\u003c/span\u003e -f2 \u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nv\"\u003e$TRACK1_LANG\u003c/span\u003e in\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;de\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"nv\"\u003eNEEDS_FIX\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    *\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"nv\"\u003eNEEDS_FIX\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e \u003cspan class=\"p\"\u003e;;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eesac\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e \u003cspan class=\"nv\"\u003e$NEEDS_FIX\u003c/span\u003e -eq \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"k\"\u003ethen\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eOPTS_1\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;--language \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK1_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e:ger --track-name \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK1_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e:German\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eOPTS_2\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;--default-track \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK1_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e:no --forced-track \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK1_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e:no\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eOPTS_3\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;--language \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK2_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e:eng --track-name \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK2_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e:English\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eOPTS_4\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;--default-track \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK2_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e:yes --forced-track \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK2_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e:no\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eOPTS_5\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;--track-order 0:1,0:\u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK2_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e,0:\u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK1_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eOPTS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$OPTS_1\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u003c/span\u003e\u003cspan class=\"nv\"\u003e$OPTS_2\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u003c/span\u003e\u003cspan class=\"nv\"\u003e$OPTS_3\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u003c/span\u003e\u003cspan class=\"nv\"\u003e$OPTS_4\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u003c/span\u003e\u003cspan class=\"nv\"\u003e$OPTS_5\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eOPTS_1\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;--language \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK2_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e:ger --track-name \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK2_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e:German\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eOPTS_2\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;--default-track \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK2_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e:no --forced-track \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK2_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e:no\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eOPTS_3\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;--language \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK1_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e:eng --track-name \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK1_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e:English\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eOPTS_4\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;--default-track \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK1_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e:yes --forced-track \u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK1_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e:no\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nv\"\u003eOPTS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$OPTS_1\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u003c/span\u003e\u003cspan class=\"nv\"\u003e$OPTS_2\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u003c/span\u003e\u003cspan class=\"nv\"\u003e$OPTS_3\u003c/span\u003e\u003cspan class=\"s2\"\u003e \u003c/span\u003e\u003cspan class=\"nv\"\u003e$OPTS_4\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003efi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  mkvmerge -o \u003cspan class=\"nv\"\u003e$file\u003c/span\u003e.new --language \u003cspan class=\"s2\"\u003e\u0026#34;1:eng\u0026#34;\u003c/span\u003e --default-track \u003cspan class=\"s2\"\u003e\u0026#34;1:yes\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --forced-track \u003cspan class=\"s2\"\u003e\u0026#34;1:no\u0026#34;\u003c/span\u003e --audio-tracks \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK1_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e,\u003c/span\u003e\u003cspan class=\"nv\"\u003e$TRACK2_ID\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --video-tracks \u003cspan class=\"s2\"\u003e\u0026#34;1\u0026#34;\u003c/span\u003e --no-subtitles --no-track-tags\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --no-global-tags \u003cspan class=\"nv\"\u003e$OPTS\u003c/span\u003e \u003cspan class=\"nv\"\u003e$file\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003edone\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Mass-fix language order of Matroska files"},{"content":"Well, we\u0026rsquo;ve been trying to come up with a decent way to backup NetApp snapshots to tape (SnapMirror To Tape), so we evaluated all the available methods of using NDMP backups.\nThere\u0026rsquo;s Image Backup in two different variants - FULL and DIFFerntial There\u0026rsquo;s SnapMirror To Tape So the Image Backup is one of the ways. However the DIFFerntial backup only works for CIFS and NFS shares (which we don\u0026rsquo;t use). We only have FC luns (or rather FCoE luns), so there\u0026rsquo;s only a single (or in case of the boot luns more than one) file in each volume. With that however, each run of the Image Backup with the DIFFerential option, it\u0026rsquo;s gonna backup the full size of the volume (plus the deduplicated amount).\nThe SnapMirror To Tape option presents another problem: We intend to use SnapManager for SQL/Oracle, which creates \u0026ldquo;consistent\u0026rdquo; snapshots of the database luns. However the SnapMirror To Tape backup doesn\u0026rsquo;t have an option to use an already existing snapshot, but creates another one. Which puts the whole SnapManager business down the curb. So we either do use a SnapMirror To Disk from one database lun to another controller and then run the SnapMirror To Tape from the second controller or come up with another way to back them up to TSM.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-05-27_tsm-and-netapp-another-quick-hint/","summary":"\u003cp\u003eWell, we\u0026rsquo;ve been trying to come up with a decent way to backup NetApp snapshots to tape (SnapMirror To Tape), so we evaluated all the available methods of using NDMP backups.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eThere\u0026rsquo;s Image Backup in two different variants - FULL and DIFFerntial\u003c/li\u003e\n\u003cli\u003eThere\u0026rsquo;s SnapMirror To Tape\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eSo the Image Backup is one of the ways. However the DIFFerntial backup only works for CIFS and NFS shares (which we don\u0026rsquo;t use). We only have FC luns (or rather FCoE luns), so there\u0026rsquo;s only a single (or in case of the boot luns more than one) file in each volume. With that however, each run of the Image Backup with the DIFFerential option, it\u0026rsquo;s gonna backup the full size of the volume (plus the deduplicated amount).\u003c/p\u003e","title":"TSM and NetApp - Another Quick Hint"},{"content":"Well, on Friday I had a short chat with someone from one of our application departments, stating he wanted a backup copy of a VM (ain\u0026rsquo;t to hard), but a) they don\u0026rsquo;t want any downtime and b) it has to be identical to the original.\nSo I sat down today, googled for a bit and actually found something that pretty much does what I want, though I had to fix it up a bit \u0026hellip; So find attached a script, which creates a hot-clone from a snapshot and then only if the latest clone was successful deletes the old one.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 param( [string] $vCenter ) # Add the VI-Snapin if it isn\u0026#39;t loaded already if ( (Get-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; -ErrorAction SilentlyContinue) -eq $null ) { Add-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; } if ( !($vCenter) ) { Write-Host \u0026#34;\u0026#34; Write-Host \u0026#34;vm-create-snapshot-clone: \u0026lt;vcenter\u0026gt; \u0026lt;VM-Name\u0026gt; \u0026lt;Target Datastore\u0026gt;\u0026#34; Write-Host \u0026#34; \u0026lt;vcenter\u0026gt; - Hostname of the vCenter Server instance for this script\u0026#34; Write-Host \u0026#34; to work on.\u0026#34; Write-Host \u0026#34;\u0026#34; exit 1 } # Based on http://www.simonlong.co.uk/blog/2010/05/05/powercli-a-simple-vm-backup-script/ # Import Backup CSV $backupinfo = Import-Csv C:ScriptsTEMPbackupvms.csv #Set Date format for clone names $date = Get-Date -Format \u0026#34;yyyyMMdd\u0026#34; #Set Date format for emails $time = (Get-Date -f \u0026#34;HH:MM\u0026#34;) #Connect to vCenter Connect-VIServer $vCenter foreach ($customer in $backupinfo) { $vm = Get-VM $customer.MasterVM $SCRIPTS = \u0026#34;C:ScriptsTEMP$( $customer.MasterVM ).txt\u0026#34; # Create new snapshot for clone $vm | New-Snapshot -Name \u0026#34;Clone Snapshot\u0026#34; -Description (get-date -format \u0026#34;\u0026#39;Created: \u0026#39;yyyy-MM-dd HH:mm\u0026#34;) # Get managed object view $vmView = $vm | Get-View # Get folder managed object reference $cloneFolder = $vmView.parent # Build clone specification $cloneSpec = new-object Vmware.Vim.VirtualMachineCloneSpec $cloneSpec.Snapshot = $vmView.Snapshot.CurrentSnapshot # Make linked disk specification $cloneSpec.Location = new-object Vmware.Vim.VirtualMachineRelocateSpec $cloneSpec.Location.Datastore = (Get-Datastore -Name $customer.BackupDS | Get-View).MoRef $cloneSpec.Location.Transform = [Vmware.Vim.VirtualMachineRelocateTransformation]::sparse $cloneName = \u0026#34;$vm-$date\u0026#34; # Create clone $vmView.CloneVM( $cloneFolder, $cloneName, $cloneSpec ) if (( Test-Path -Path $SCRIPTS) -ne $true ) { $cloneName | Out-File $SCRIPTS } else { $old_vm = Get-Content $SCRIPTS $cloneName | Out-File $SCRIPTS Get-VM $old_vm | Remove-VM -DeletePermanently -Confirm:$false } # Remove Snapshot created for clone Get-Snapshot -VM $vm -Name \u0026#34;Clone Snapshot\u0026#34; | Remove-Snapshot -confirm:$False } #Disconnect from vCenter Disconnect-VIServer -Server $vCenter -Confirm:$false The backupvms.csv looks pretty simple:\n1 2 3 MasterVM,BackupDS sles11-sp1,datastore2-nfs sles10-sp4,datastore1-nfs ","permalink":"https://christian.blog.pakiheim.de/posts/2012-04-30_vm-online-backup-another-day-another-powercli-script/","summary":"\u003cp\u003eWell, on Friday I had a short chat with someone from one of our application departments, stating he wanted a backup copy of a VM (ain\u0026rsquo;t to hard), but a) they don\u0026rsquo;t want any downtime and b) it has to be identical to the original.\u003c/p\u003e\n\u003cp\u003eSo I sat down today, googled for a bit and actually found something that pretty much does what I want, though I had to fix it up a bit \u0026hellip; So find attached a script, which creates a hot-clone from a snapshot and then only if the latest clone was successful deletes the old one.\u003c/p\u003e","title":"vm-online-backup - Another day, another PowerCLI script"},{"content":"Well, to save everyone else the trouble (since it isn\u0026rsquo;t documented anywhere - and I just spent about an hour finding the cause for this), if you need to configure NDMP on your NetApp Filer, make sure you also configure an interface other than e0M.\nApparently the necessary controlport for NDMP (10000) is being blocked on e0M, thus ndmp may be configured and running, however TSM is gonna complain that it is unable to connect to the specified data mover.\n1 2 3 4 ANR4728E Server connection to file server 172.31.76.100 failed. Please check the attributes of the file server specified during definition of the datamover. ANR2146E DEFINE DATAMOVER: Node NAS_DM is not registered. ANS8001I Return code 11. ","permalink":"https://christian.blog.pakiheim.de/posts/2012-04-25_tsm-and-netapp-quick-hint/","summary":"\u003cp\u003eWell, to save everyone else the trouble (since it isn\u0026rsquo;t documented anywhere - and I just spent about an hour finding the cause for this), if you need to configure NDMP on your NetApp Filer, make sure you also configure an interface other than e0M.\u003c/p\u003e\n\u003cp\u003eApparently the necessary controlport for NDMP (10000) is being blocked on e0M, thus ndmp may be configured and running, however TSM is gonna complain that it is unable to connect to the specified data mover.\u003c/p\u003e","title":"TSM and NetApp - Quick Hint"},{"content":"Well, after I scripted the installation the other day, I tried installing SLES11.1-Updates to the freshly installed systems. Guess what ? The thing broke. Initially (it was late Friday afternoon - like 6 PM - before my one week vacation) I didn\u0026rsquo;t have much time to debug the issue, so I sat down last week and looked at the issue.\nDuring the installation, when first starting multipath via command line, the scsi-mpatha device appears, and each and every occurance of this is subsequentially being used (and other stuff replaced by this actually) during the whole installation phase.\nBut what is this multipath-tools update doing ? No clue what exactly, however after installing the update the system is bricked. The system is basically looking for /dev/scsi/by-id/scsi-disk-mpatha and waiting for this device to appear. But since the update robbed the device, the system is no longer starting.\nSo I went ahead and digged around in the /dev/disk/by-id directory. Turns out /dev/disk/by-id/scsi- is actually pointing to the right device, and thus I ended up using it. So I rewrote all my scripts (profile and chroot/post-chroot adjustments) as you can see below, and for now at least, I have a working installation that lets you install updates! (careful it gots electrolytes)\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 #!/bin/bash cat \u0026lt;\u0026lt; EOF \u0026gt; /etc/multipath.conf defaults { user_friendly_names\tno bindings_file\t/etc/multipath_bindings } devices { device { vendor\t\u0026#34;NETAPP\u0026#34; product\t\u0026#34;LUN\u0026#34; getuid_callout\t\u0026#34;/lib/udev/scsi_id -g -u --device=/dev/%n\u0026#34; features\t\u0026#34;1 queue_if_no_path\u0026#34; hardware_handler\t\u0026#34;1 alua\u0026#34; path_checker\ttur path_selector\t\u0026#34;round-robin 0\u0026#34; path_grouping_policy\tgroup_by_prio failback\timmediate rr_weight\tuniform rr_min_io\t128 prio\talua max_fds\tmax } } EOF sleep 1 # Disable the resume kernel sed -e \u0026#34;s,resume=/dev/mapper/.*_part[0-9],noresume,g\u0026#34; -i /etc/sysconfig/bootloader /boot/grub/menu.lst # Figure out the multipath ID MD_ID=\u0026#34;$( /sbin/multipath -l | head -n1 | cut -d -f1 )\u0026#34; # Fix wrong root-path in /etc/fstab sed -i \u0026#34;s/mapper/.*_part/disk/by-id/scsi-${MD_ID}-part/\u0026#34; /etc/fstab # Fix grub root-path and wrong root-partition sed -i -e \u0026#34;s/mapper/.*_part/disk/by-id/scsi-${MD_ID}-part/\u0026#34; -e \u0026#34;s,scsi-${MD_ID}-part2,scsi-${MD_ID}-part3,\u0026#34; /boot/grub/menu.lst # Fix the device.map echo -e \u0026#34;(hd0)t/dev/disk/by-id/scsi-${MD_ID}\u0026#34; \u0026gt; /boot/grub/device.map sleep 1 mkinitrd -f multipath Now what\u0026rsquo;s left to do for tomorrow is \u0026ldquo;fixing\u0026rdquo; the already (previous to those changes) installed systems, so we can install security updates on those too!\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-04-07_sles11-1-and-updated-multipath-tools/","summary":"\u003cp\u003eWell, after I scripted the installation the other day, I tried installing SLES11.1-Updates to the freshly installed systems. Guess what ? The thing broke. Initially (it was late Friday afternoon - like 6 PM - before my one week vacation) I didn\u0026rsquo;t have much time to debug the issue, so I sat down last week and looked at the issue.\u003c/p\u003e\n\u003cp\u003eDuring the installation, when first starting multipath via command line, the scsi-mpatha device appears, and each and every occurance of this is subsequentially being used (and other stuff replaced by this actually) during the whole installation phase.\u003c/p\u003e","title":"SLES11-1 and updated multipath-tools"},{"content":"Well, I recently (last Wednesday) had a lot of trouble with Update Manager.\nFirst I thought, upgrading vCenter and modules to 5.0U1 would solve my troubles, however it did not. Update Manager was still complaining about something. Since neither in the vCenter Update Manager nor the vCenter log itself were having any useful information I enabled SSHd and the ESXi Shell via the vCenter client:\nSSH\u0026rsquo;ed into the ESX host and looked at /var/log/esxupdate.log, and found this particular log:\n1 2 3 4 5 6 7 8 9 10 11 12 13 2012-03-28T16:18:26Z esxupdate: HostImage: INFO: Attempting to download VIB vmware-fdm 2012-03-28T16:18:26Z esxupdate: esxupdate: ERROR: An esxupdate error exception was caught: 2012-03-28T16:18:26Z esxupdate: esxupdate: ERROR: Traceback (most recent call last): 2012-03-28T16:18:26Z esxupdate: esxupdate: ERROR: File \u0026#34;/usr/sbin/esxupdate\u0026#34;, line 216, in main 2012-03-28T16:18:26Z esxupdate: esxupdate: ERROR: cmd.Run() 2012-03-28T16:18:26Z esxupdate: esxupdate: ERROR: File \u0026#34;/build/mts/release/bora-515841/bora/build/esx/release/python-2.6-lib-zip-stage/515841/visor/pylib/python2.6/site-packages/vmware/esx5update/Cmdline.py\u0026#34;, line 144, in Run 2012-03-28T16:18:26Z esxupdate: esxupdate: ERROR: File \u0026#34;/build/mts/release/bora-515841/bora/build/esx/release/python-2.6-lib-zip-stage/515841/visor/pylib/python2.6/site-packages/vmware/esximage/Transaction.py\u0026#34;, line 243, in InstallVibsFromSources 2012-03-28T16:18:26Z esxupdate: esxupdate: ERROR: File \u0026#34;/build/mts/release/bora-515841/bora/build/esx/release/python-2.6-lib-zip-stage/515841/visor/pylib/python2.6/site-packages/vmware/esximage/Transaction.py\u0026#34;, line 345, in _installVibs 2012-03-28T16:18:26Z esxupdate: esxupdate: ERROR: File \u0026#34;/build/mts/release/bora-515841/bora/build/esx/release/python-2.6-lib-zip-stage/515841/visor/pylib/python2.6/site-packages/vmware/esximage/Transaction.py\u0026#34;, line 388, in _validateAndInstallProfile 2012-03-28T16:18:26Z esxupdate: esxupdate: ERROR: File \u0026#34;/build/mts/release/bora-515841/bora/build/esx/release/python-2.6-lib-zip-stage/515841/visor/pylib/python2.6/site-packages/vmware/esximage/HostImage.py\u0026#34;, line 630, in Stage 2012-03-28T16:18:26Z esxupdate: esxupdate: ERROR: File \u0026#34;/build/mts/release/bora-515841/bora/build/esx/release/python-2.6-lib-zip-stage/515841/visor/pylib/python2.6/site-packages/vmware/esximage/HostImage.py\u0026#34;, line 414, in _download_and_stage 2012-03-28T16:18:26Z esxupdate: esxupdate: ERROR: VibDownloadError: (\u0026lt;vmware.esximage.Vib.ArFileVib object at 0x86c79ac\u0026gt;, \u0026#39;Unable to download VIB from any of the URLs \u0026#39;) 2012-03-28T16:18:26Z esxupdate: esxupdate: DEBUG: \u0026lt;\u0026lt;\u0026lt; As you can see from the above log, for whatever reason, the Update Manager is trying to install an updated version of the VMware HA agent (vmware-fdm). Now, since that isn\u0026rsquo;t the job of Update Manager (afaik, vCenter handles that separately), I figured what the hell, let\u0026rsquo;s try and remove it as the ESX host was already in Maintainance Mode:\n1 esxcli software vib remove -n=vmware-fdm And guess what: after removing the package and then rerunning the Remediate task on the host, my troubles were gone.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-03-31_vmware-update-manager-issues/","summary":"\u003cp\u003eWell, I recently (last Wednesday) had a lot of trouble with Update Manager.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/uploads/2012/03/vcenter-update-manager-remediate-errors.png\"\u003e\u003cimg loading=\"lazy\" src=\"/uploads/2012/03/vcenter-update-manager-remediate-errors.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eFirst I thought, upgrading vCenter and modules to 5.0U1 would solve my troubles, however it did not. Update Manager was still complaining about something. Since neither in the vCenter Update Manager nor the vCenter log itself were having any useful information I enabled SSHd and the ESXi Shell via the vCenter client:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/uploads/2012/03/vcenter-esx-service-properties.png\"\u003e\u003cimg loading=\"lazy\" src=\"/uploads/2012/03/vcenter-esx-service-properties.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eSSH\u0026rsquo;ed into the ESX host and looked at /var/log/esxupdate.log, and found this particular log:\u003c/p\u003e","title":"VMware Update Manager issues"},{"content":"Well, I finally switched back to the official builds of XBMC (well, semi-official).\nNow, since my previous and my current media center doesn\u0026rsquo;t come with a remote like, say a Boxee box, I built myself a custom one using a Hama MCE Remote Control and a Logitech Harmony 300. After trying a bunch of things (it actually works like a standard mouse), I stumbled upon this Trac ticket.\nAfter first wrangling the sources into a patch, sometime ago when I switched to a new media center I started using the official builds as I mentioned earlier.\nOne disadvantage of the official builds is, that I can\u0026rsquo;t patch in the event client. Eventually I decided to write a small debian package containing everything the event client previously had.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-03-20_hama-mce-client-for-xbmc-on-ubuntu/","summary":"\u003cp\u003eWell, I finally switched back to the official builds of XBMC (well, \u003ca href=\"https://launchpad.net/~team-xbmc/+archive/unstable\" title=\"XBMC Unstable: Repository for pre-release versions of XBMC.\"\u003esemi-official\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eNow, since my previous and my current media center doesn\u0026rsquo;t come with a remote like, say a Boxee box, I built myself a custom one using a \u003ca href=\"http://www.amazon.de/Hama-00052451-MCE-Remote-Control/dp/B000X1EL4W/ref=sr_1_1?ie=UTF8\u0026amp;qid=1332263702\u0026amp;sr=8-1\"\u003eHama MCE Remote Control\u003c/a\u003e and a Logitech Harmony 300. After trying a bunch of things (it actually works like a standard mouse), I stumbled \u003ca href=\"http://trac.xbmc.org/ticket/8827\" title=\"XBMC: Hama MCE\"\u003eupon this Trac ticket\u003c/a\u003e.\u003c/p\u003e","title":"hama_mce client for XBMC on Ubuntu"},{"content":"I recently bought a replacement for my aging Acer Revo R1600. I decided to go with the HD-ID34, since I didn\u0026rsquo;t wanna fiddle with buying a bunch of components. Installed a copy of Windows 7 on it (just to try it out \u0026hellip;. \u0026#x1f61b;), and downloaded the Ubuntu 11.10 mini.iso. However the mini.iso apparently has issues (no clue which), basically it boots but gets stuck when bringing up the network connectivity (which is fucked up, since the mini.iso needs network connectivity to contiune the installation).\nSo I went a version back (11.04 - Natty Narwhal) and installed my stuff, however the audio didn\u0026rsquo;t work. So I kicked of a distribution upgrade, and about half an hour later that was finished. But still no audio \u0026hellip;\nThe SPDIF channels were muted (no surprise there) XBMC sent the audio do card 0, device 0 (which is basically /dev/null) After playing around with the audio output settings (and trying different devices without any luck), I finally found a post for OpenELEC for the ZBOX (for an older version, but non the less, it still applied) describing what I had to configure.\nAudio output = HDMI Speaker configuration = 7.1 (or the what your receiver is capable of)\nAudio output device = custom Custom audio device = plughw:1,7\nPassthrough output device = custom Custom passthrough device = plughw:1,7\nWhat\u0026rsquo;s just left now, is actually mounting the thing to the wall, since it looks just shabby sitting on my TV wall.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-03-08_running-xbmc-ubuntu-on-zotac-hd-id34/","summary":"\u003cp\u003eI recently bought a replacement for my aging Acer Revo R1600. I decided to go with the HD-ID34, since I didn\u0026rsquo;t wanna fiddle with buying a bunch of components. Installed a copy of Windows 7 on it (just to try it out \u0026hellip;. \u0026#x1f61b;), and downloaded the Ubuntu 11.10 mini.iso. However the mini.iso apparently has issues (no clue which), basically it boots but gets stuck when bringing up the network connectivity (which is fucked up, since the mini.iso needs network connectivity to contiune the installation).\u003c/p\u003e","title":"Running XBMC/Ubuntu on Zotac HD-ID34"},{"content":"Well, I recently stumbled upon another cute bug/feature with Windows Deployment Services. When you already have 32bit boot images (as we do) and then add an 64bit boot image (which we needed, since the drivers for UCS firmware v2.0 only support Windows Server 2008 R2) you still only see the 32bit images.\nWhy ? Because apparently the client (in my case a UCS blade) isn\u0026rsquo;t reporting it\u0026rsquo;s architecture correctly in the PXE phase. Microsoft actually has a KB article for this. You only need to enable architecture discovery.\n1 wdsutil /set-server /architecturediscovery:yes That\u0026rsquo;s it. Once you boot the next client via PXE, you\u0026rsquo;ll see the 64bit boot image.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-02-24_wds-and-multi-architecture-boot-images/","summary":"\u003cp\u003eWell, I recently stumbled upon another cute bug/feature with Windows Deployment Services. When you already have 32bit boot images (as we do) and then add an 64bit boot image (which we needed, since the drivers for UCS firmware v2.0 only support Windows Server 2008 R2) you still only see the 32bit images.\u003c/p\u003e\n\u003cp\u003eWhy ? Because apparently the client (in my case a UCS blade) isn\u0026rsquo;t reporting it\u0026rsquo;s architecture correctly in the PXE phase. Microsoft actually has a \u003ca href=\"http://support.microsoft.com/kb/932447/en-us\"\u003eKB article\u003c/a\u003e for this. You only need to enable architecture discovery.\u003c/p\u003e","title":"WDS and multi-architecture boot images"},{"content":"Well, I found a bunch of PDF documents on my disk today, which I wanted converted to JPEG. Now, Debian replaced ImageMagick in the past for GraphicsMagick, which is supposedly a bit faster and leaner than ImageMagick. So first you need to install graphicsmagick \u0026ndash; or rewrite the script to use /usr/bin/convert instead.\nThe script basically takes every .PDF you have in your current working directory, creates a sub-directory, and then extracts each page of the PDF into a single JPEG image in that subdirectory.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #!/bin/bash # Needs graphicsmagick [ ! -x /usr/bin/gm ] \u0026amp;\u0026amp; exit 1 for file in $PWD/*.pdf; do sudo mkdir $PWD/${file%*.pdf} sudo chown -R nobody.users $PWD/${file%*.pdf} sudo gm convert $PWD/$file JPEG:\u0026#34;$PWD/${file%*.pdf}/${file%*.pdf}%02d.jpg\u0026#34; number=\u0026#34;$( echo ${file%*.pdf} | cut -d. -f3 )\u0026#34; title=\u0026#34;$( echo ${file%*.pdf} | cut -d. -f4 | sed \u0026#34;s,., ,\u0026#34; )\u0026#34; series=\u0026#34;$( echo ${file%*.pdf} | cut -d. -f1-2 | sed \u0026#34;s,., ,\u0026#34; )\u0026#34; # Create the ComicInfo.xml file cat \u0026lt;\u0026lt; EOF | sudo tee ${file%*.pdf}/ComicInfo.xml \u0026amp;amp;\u0026gt;/dev/null \u0026lt;?xml version=\u0026#34;1.0\u0026#34;?\u0026gt; \u0026lt;ComicInfo xmlns:xsd=\u0026#34;http://www.w3.org/2001/XMLSchema\u0026#34; xmlns:xsi=\u0026#34;http://www.w3.org/2001/XMLSchema-instance\u0026#34;\u0026gt; \u0026lt;Series\u0026gt;$series\u0026lt;/Series\u0026gt; \u0026lt;Number\u0026gt;$number\u0026lt;/Number\u0026gt; \u0026lt;Title\u0026gt;$title\u0026lt;/Title\u0026gt; \u0026lt;/ComicInfo\u0026gt; EOF done What I had to google for was basically on how to actually pad the output number. According to the man-page of gm, you just put %02d (or %03d, depending on how much pages your PDFs have at the max) in the desired output file name.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-02-15_convert-a-bunch-of-pdf-documents-to-jpeg/","summary":"\u003cp\u003eWell, I found a bunch of PDF documents on my disk today, which I wanted converted to JPEG. Now, Debian replaced ImageMagick in the past for GraphicsMagick, which is supposedly a bit faster and leaner than ImageMagick. So first you need to install graphicsmagick \u0026ndash; or rewrite the script to use /usr/bin/convert instead.\u003c/p\u003e\n\u003cp\u003eThe script basically takes every .PDF you have in your current working directory, creates a sub-directory, and then extracts each page of the PDF into a single JPEG image in that subdirectory.\u003c/p\u003e","title":"Convert a bunch of PDF documents to JPEG"},{"content":"Well, once again the Microsoft Cluster on VMware bit my ass \u0026hellip; As you might know, MSCS on VMware is a particular kind of pain, with each upgrade you end up with the same problem over and over again (SCSI reservations on the RDM-LUNs being one, and the passive node not booting being the other).\nSo I opened up another support case with VMware, and the responded like this:\nPlease see this kb entry: http://kb.vmware.com/kb/1016106\nThis doesn\u0026rsquo;t completely fit my case, but since the only active cluster-node failed yesterday evening (it\u0026rsquo;s only our internal file-share server, thus no worries), I thought I\u0026rsquo;d try to set the options.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 param( [string] $vCenter, [string] $cluster, [string] $device_identifier ) \u0026amp;nbsp; # Add the VI-Snapin if it isn\u0026#39;t loaded already if ( (Get-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; -ErrorAction SilentlyContinue) -eq $null ) { Add-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; } if ( !($vCenter) -or !($cluster) -or !($device_identifier) ) { Write-Host `n \u0026#34;cluster-fix-mscs-lun: \u0026lt;vcenter\u0026gt; \u0026lt;cluster\u0026gt; \u0026lt;device_identifier\u0026gt;\u0026#34; `n Write-Host \u0026#34;cluster-fix-mscs-lun sets the specified device to be perennially reserved\u0026#34; Write-Host \u0026#34; thus a) the affected host(s) boot faster\u0026#34; Write-Host \u0026#34; and b) the affected passive nodes actually boots up\u0026#34; `n exit 1 } # Turn off Errors $ErrorActionPreference = \u0026#34;silentlycontinue\u0026#34; Connect-VIServer -Server $vCenter $VMhosts = Get-Cluster $cluster | Get-VMHost foreach ($vmhost in $VMhosts) { # Create the ESXCLI command line $esxcli = Get-ESXCLI -VMHost $vmhost # List settings for device $esxcli.storage.core.device.list($device_identifier) # Set the specified LUN to PerenniallyReserved $esxcli.storage.core.device.setconfig($false, $device_identifier, $true) # Print verification for the above action $esxcli.storage.core.device.list($device_identifier) } Disconnect-VIServer -server $vCenter -Confirm:$false And guess what ? My damn cluster works again \u0026#x1f604;\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-02-11_microsoft-cluster-on-vmware-and-devices/","summary":"\u003cp\u003eWell, once again the Microsoft Cluster on VMware bit my ass \u0026hellip; As you might know, MSCS on VMware is a particular kind of pain, with each upgrade you end up with the same problem over and over again (SCSI reservations on the RDM-LUNs being one, and the passive node not booting being the other).\u003c/p\u003e\n\u003cp\u003eSo I opened up another support case with VMware, and the responded like this:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ePlease see this kb entry: \u003ca href=\"http://kb.vmware.com/kb/1016106\"\u003ehttp://kb.vmware.com/kb/1016106\u003c/a\u003e\u003c/p\u003e","title":"Microsoft Cluster on VMware and Devices"},{"content":"I recently started reinstalling all my ESX hosts, so I wrote up a short script that is reconfiguring all hosts and sets the NTP configuration according to my wish:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 param( [string] $vcenter, [string] $ntpserver1, [string] $ntpserver2 ) # Add the VI-Snapin if it isn\u0026#39;t loaded already if ( (Get-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; -ErrorAction SilentlyContinue) -eq $null ) { Add-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; } If ( !($vcenter) -or !($ntpserver1) -or !($ntpserver2) ) { Write-Host `n \u0026#34;vcenter-ntp-reconfigure: \u0026lt;vcenter-server\u0026gt; \u0026lt;ntpserver1\u0026gt; \u0026lt;ntpserver2\u0026gt;\u0026#34; `n Write-Host \u0026#34;This script clears the NTP servers currently configured and\u0026#34; `n Write-Hsot \u0026#34;adds the ones supplied on the command line.\u0026#34; `n Write-Host \u0026#34; \u0026lt;vcenter-server\u0026gt; - DNS name of your vCenter server.\u0026#34; `n Write-Host \u0026#34; \u0026lt;ntpserver1\u0026gt; - NTP server #1\u0026#34; `n Write-Host \u0026#34; \u0026lt;ntpserver2\u0026gt; - NTP server #2\u0026#34; `n exit 1 } Connect-VIServer -Server $vcenter foreach ($esxhost in Get-VMHost) { Get-VMHost $esxhost | Remove-VMHostNtpServer -Confirm:$false -NtpServer (Get-VMHost $esxhost | ` Get-VMHostNtpServer) Get-VMHost $esxhost | Add-VMHostNtpServer -NtpServer $ntpserver1 Get-VMHost $esxhost | Add-VMHostNtpServer -NtpServer $ntpserver2 } Disconnect-VIServer -server $vcenter -Confirm:$false As you can see, the script takes the vCenter hostname and two NTP servers and basically applies it to each host in your vCenter environment.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-02-04_reconfiguring-ntp-settings-vcenter-wide/","summary":"\u003cp\u003eI recently started reinstalling all my ESX hosts, so I wrote up a short script that is reconfiguring all hosts and sets the NTP configuration according to my wish:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eparam\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evcenter\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003entpserver1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003entpserver2\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Add the VI-Snapin if it isn\u0026#39;t loaded already\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ePSSnapin\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eName\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;VMware.VimAutomation.Core\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eErrorAction\u003c/span\u003e \u003cspan class=\"n\"\u003eSilentlyContinue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eeq\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eAdd\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ePSSnapin\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eName\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;VMware.VimAutomation.Core\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eIf\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"o\"\u003e!\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evcenter\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"ow\"\u003eor\u003c/span\u003e \u003cspan class=\"o\"\u003e!\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003entpserver1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"ow\"\u003eor\u003c/span\u003e \u003cspan class=\"o\"\u003e!\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003entpserver2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;vcenter-ntp-reconfigure: \u0026lt;vcenter-server\u0026gt; \u0026lt;ntpserver1\u0026gt; \u0026lt;ntpserver2\u0026gt;\u0026#34;\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;This script clears the NTP servers currently configured and\u0026#34;\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHsot\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;adds the ones supplied on the command line.\u0026#34;\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;   \u0026lt;vcenter-server\u0026gt;  - DNS name of your vCenter server.\u0026#34;\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;   \u0026lt;ntpserver1\u0026gt;      - NTP server #1\u0026#34;\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;   \u0026lt;ntpserver2\u0026gt;      - NTP server #2\u0026#34;\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eexit\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eConnect\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVIServer\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eServer\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evcenter\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eforeach\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eesxhost\u003c/span\u003e \u003cspan class=\"ow\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVMHost\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVMHost\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eesxhost\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eRemove\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVMHostNtpServer\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eConfirm\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"bp\"\u003efalse\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eNtpServer\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVMHost\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eesxhost\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"err\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVMHostNtpServer\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVMHost\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eesxhost\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eAdd\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVMHostNtpServer\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eNtpServer\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003entpserver1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVMHost\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eesxhost\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eAdd\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVMHostNtpServer\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eNtpServer\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003entpserver2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eDisconnect\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVIServer\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eserver\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evcenter\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eConfirm\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"bp\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAs you can see, the script takes the vCenter hostname and two NTP servers and basically applies it to each host in your vCenter environment.\u003c/p\u003e","title":"Reconfiguring NTP settings vCenter-wide"},{"content":"As we\u0026rsquo;re finally at the point, where I only need to bother with HP hardware (which in itself is troublesome enough), I wanted to use HPs vibdeposit with our Update Manager. The whole purpose of the repository is the integration of HPs custom vibs (download able on each hardware under VMware ESXi 5.0) into the VMware Update Manager. That makes it easy to integrate, say the nmi-sourcing driver, into the VMware built ESXi images.\nSo basically what you do is, add the VIB repository to your vCenter Update Manager download list, and then create a dynamic baseline for everything \u0026ldquo;Hewlett-Packard\u0026rdquo; and attach that to the desired level of your environment (I did it at the root level, as I only have Hewlett-Packard). But I\u0026rsquo;ll show you.\nFirst, visit your Update Manager (you\u0026rsquo;ll find it under Solutions \u0026gt; Update Manager). We need to update the Configuration of Update Manager in two places. First under \u0026quot; Configuration\u0026quot;, the second is under \u0026quot; Baseline and Groups\u0026quot;. But lets start with \u0026quot; Configuration\u0026quot;, since you can\u0026rsquo;t add something to a baseline that isn\u0026rsquo;t there.\nNow, you want to add a new Update source:\nThe URL for that repository is http://vibsdepot.hp.com/index.xml. After that is done, you can click on \u0026quot; Apply\u0026quot; and \u0026quot; Download Now\u0026quot; to add the packages to your local software repository. After this, the VIB\u0026rsquo;s from HP just need to be applied to a set of hosts.\nNow, we\u0026rsquo;re going to \u0026quot; Baseline and groups\u0026quot;.\nAs I mentioned before, we need to create the baseline, otherwise you can\u0026rsquo;t apply the VIBs to your hosts. So we create a new Baseline named \u0026ldquo;HP Update Bundles\u0026rdquo; only containing updates/patches labeled \u0026ldquo;Host Patch\u0026rdquo;.\nNext we want to select the baseline type. Based on your requirements you may either select Fixed or Dynamic. Since I don\u0026rsquo;t want to update the baseline each time HP releases a new VIB, I chose \u0026ldquo;Dynamic\u0026rdquo;. Keep in mind if you select Fixed, you need to select the VIB\u0026rsquo;s in the dialog window.\nBut since I selected Dynamic, I just need to apply a filter criteria in this next dialog, telling the baseline to select only VIB\u0026rsquo;s originating from the vendor \u0026ldquo;Hewlett-Packard Company\u0026rdquo;.\nYou may also exclude specific patches from this baseline using this following dialog, which I decided not to do. Next we need to switch to a set of hosts (for me, it is the root level of the vCenter as I only operate HP hosts). So navigate to the desired folder, cluster, host and select the \u0026quot; Update Manager\u0026quot; tab on the upper right.\nSimply click on \u0026ldquo;Attach\u0026rdquo; and a new dialog opens from which you can select the newly created Baseline.\nAfter this the baseline is attached to the selected folder and when you Scan/Update your hosts, this baseline is being pulled in also and applied.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-02-04_using-hps-vibdeposit-with-vmware-update-manager/","summary":"\u003cp\u003eAs we\u0026rsquo;re finally at the point, where I only need to bother with HP hardware (which in itself is troublesome enough), I wanted to use HPs vibdeposit with our Update Manager. The whole purpose of the repository is the integration of HPs custom vibs (download able on each hardware under VMware ESXi 5.0) into the VMware Update Manager. That makes it easy to integrate, say the nmi-sourcing driver, into the VMware built ESXi images.\u003c/p\u003e","title":"Using HPs vibdeposit with VMware Update Manager"},{"content":" 1 2 3 adb reboot bootloader fastboot flash recovery recovery-solarnz-XXXXXX-XXXX.img fastboot reboot ","permalink":"https://christian.blog.pakiheim.de/howtos/xoom-install-clockworkrecovery/","summary":"\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eadb\u003c/span\u003e \u003cspan class=\"n\"\u003ereboot\u003c/span\u003e \u003cspan class=\"n\"\u003ebootloader\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efastboot\u003c/span\u003e \u003cspan class=\"n\"\u003eflash\u003c/span\u003e \u003cspan class=\"n\"\u003erecovery\u003c/span\u003e \u003cspan class=\"n\"\u003erecovery\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003esolarnz\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eXXXXXX\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eXXXX\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eimg\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efastboot\u003c/span\u003e \u003cspan class=\"n\"\u003ereboot\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Xoom: Install ClockWorkRecovery"},{"content":" 1 adb reboot fastboot 1 2 3 4 5 6 fastboot flash boot boot.img fastboot flash system system.img fastboot flash recovery recovery.img fastboot flash userdata userdata.img fastboot erase cache fastboot oem lock ","permalink":"https://christian.blog.pakiheim.de/howtos/xoom-restore-factory-firmware/","summary":"\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eadb reboot fastboot\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-1-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-6\"\u003e6\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efastboot flash boot boot.img\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efastboot flash system system.img\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efastboot flash recovery recovery.img\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efastboot flash userdata userdata.img\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efastboot erase cache\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efastboot oem lock\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Xoom: Restore factory firmware"},{"content":" 1 adb reboot bootloader Your XOOM will reboot into the bootloader showing \u0026ldquo;Starting Fastboot Protocol Support.\u0026rdquo;\n1 fastboot oem unlock Read the warning on your XOOM’s screen. You may have to tap Volume Down to switch it to \u0026ldquo;Accept.\u0026rdquo; Then press Volume Up to actually \u0026ldquo;Accept.\u0026rdquo; Once you accept, your XOOM will be unlocked and formatted. ","permalink":"https://christian.blog.pakiheim.de/howtos/xoom-unlocking/","summary":"\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eadb\u003c/span\u003e \u003cspan class=\"n\"\u003ereboot\u003c/span\u003e \u003cspan class=\"n\"\u003ebootloader\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eYour XOOM will reboot into the bootloader showing \u0026ldquo;Starting Fastboot Protocol Support.\u0026rdquo;\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-1-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efastboot oem unlock\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cul\u003e\n\u003cli\u003eRead the warning on your XOOM’s screen.\u003c/li\u003e\n\u003cli\u003eYou may have to tap Volume Down to switch it to \u0026ldquo;Accept.\u0026rdquo;\u003c/li\u003e\n\u003cli\u003eThen press Volume Up to actually \u0026ldquo;Accept.\u0026rdquo;\u003c/li\u003e\n\u003cli\u003eOnce you accept, your XOOM will be unlocked and formatted.\u003c/li\u003e\n\u003c/ul\u003e","title":"Xoom: Unlocking"},{"content":"Well, once again I hacked at the Powershell/PowerCLI the other day. Since we don\u0026rsquo;t yet have a Enterprise Plus license at work (which would support Datastore Maintaince and Storage DRS), I needed a way to empty one datastore and move all the content into another one, while enabling Thin-Provisioning.\nSo I googled for a bit, and actually found a few hints \u0026hellip; So without further yada-yada, here\u0026rsquo;s the script I came up with:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 param( [string] $vCenter, [string] $datastore_old, $datastore_new ) # Add the VI-Snapin if it isn\u0026#39;t loaded already if ( (Get-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; -ErrorAction SilentlyContinue) -eq $null ) { Add-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; } if ( !($vCenter) -or !($datastore_old) -or !($datastore_new) ) { Write-Host `n \u0026#34;datastore-massmigrate-vms: \u0026lt;vcenter\u0026gt; \u0026lt;datastore_old\u0026gt; \u0026lt;datastore_new\u0026gt;\u0026#34; `n Write-Host \u0026#34; datastore-massmigrate-vms moves all VMs residing on \u0026lt;datastore_old\u0026gt;\u0026#34; Write-Host \u0026#34; to the datastore named \u0026lt;datastore_new\u0026gt;.\u0026#34; `n exit 1 } # Turn off Errors $ErrorActionPreference = \u0026#34;silentlycontinue\u0026#34; Connect-VIServer -Server $vCenter Write-Host \u0026#34;Migrating VMs from datastore\u0026#34; $datastore_old \u0026#34;to\u0026#34; $datastore_new $vms = Get-VM -datastore $datastore_old foreach ($vm in $vms) { Write-Host \u0026#34;Moving\u0026#34; $vm \u0026#34;from\u0026#34; $datastore_old \u0026#34;to\u0026#34; $datastore_new Move-VM $vm -Datastore $datastore_new } Disconnect-VIServer -server $vCenter -Confirm:$false Initially I have something different, which was a bit shorter (based on Brian\u0026rsquo;s work), but it had a huge downside: If you have vRDMs (like I do), it converts every damn vRDM into a VMDK, so make sure you only run this script on a datastore on VMs that either have only pRDMs or VMs with only VMDKs.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-01-26_emptying-a-vmfs-datastore-with-powercli/","summary":"\u003cp\u003eWell, once again I hacked at the Powershell/PowerCLI the other day. Since we don\u0026rsquo;t yet have a Enterprise Plus license at work (which would support Datastore Maintaince and Storage DRS), I needed a way to empty one datastore and move all the content into another one, while enabling Thin-Provisioning.\u003c/p\u003e\n\u003cp\u003eSo I googled for a bit, and actually \u003ca href=\"http://thephuck.com/virtualization/mass-storage-migrations-using-vsphere-storage-vmotion-and-powercli/\"\u003efound a few hints\u003c/a\u003e \u0026hellip; So without further yada-yada, here\u0026rsquo;s the script I came up with:\u003c/p\u003e","title":"Emptying a VMFS datastore with PowerCLI"},{"content":"Ran into another weird problem the other day \u0026hellip; Had a few Windows boxens running out of space. Why ? Well, because TSM includes a System-State backup when creating the daily incremental. Now, apparently (as stated by the IBM support) it isn\u0026rsquo;t TSM\u0026rsquo;s job to keep track of the VSS snapshots but rather Windows\u0026rsquo;. Now by default, if you don\u0026rsquo;t click on the VSS properties of a Windows drive, there is no limit on the volume. Thus, VSS is slowly eating up all your space.\nThat isn\u0026rsquo;t the worst of it, but when you want to delete it all \u0026hellip; With Windows 2003 you would just this:\n1 run vssadmin delete shadows /for=C: However, as with everything Microsoft, Windows 2008 R2 does it a little bit different. As a matter of fact, it won\u0026rsquo;t allow you to delete application triggered snapshots (as you can see in the example below), so you\u0026rsquo;re basically shit-out-of-luck.\n1 2 Error: Snapshots were found, but they were outside of your allowed context. Try removing them with the backup application which created them. Well, not really \u0026hellip; diskshadow to the rescue. Simply running diskshadow with a simple script like this:\n1 2 diskshadow\u0026gt; delete shadows C: ...... Just for clarification this isn\u0026rsquo;t my own work, it was someone elses.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-01-26_doing-tsm-s-job-on-windows-server-2008/","summary":"\u003cp\u003eRan into another weird problem the other day \u0026hellip; Had a few Windows boxens running out of space. Why ? Well, because TSM includes a System-State backup when creating the daily incremental. Now, apparently (as stated by the IBM support) it isn\u0026rsquo;t TSM\u0026rsquo;s job to keep track of the VSS snapshots but rather Windows\u0026rsquo;. Now by default, if you don\u0026rsquo;t click on the VSS properties of a Windows drive, there is no limit on the volume. Thus, VSS is slowly eating up all your space.\u003c/p\u003e","title":"Doing TSM's job on Windows Server 2008"},{"content":"I\u0026rsquo;ve been meaning to post this, but never actually got around to doing that. When installing vCenter 5.0, an instance of ADAM is installed, which stores all the configration data for Linked Mode.\nIt basically boils down to running this script and rebooting the box:\n1 2 reg DELETE \u0026#34;HKLMSYSTEMCurrentControlSetservicesADAM_VMwareVCMSDSParameters\u0026#34; /v \u0026#34;Port SSL\u0026#34; /f reg ADD \u0026#34;HKLMSYSTEMCurrentControlSetservicesADAM_VMwareVCMSDSParameters\u0026#34; /v \u0026#34;Port SSL\u0026#34; /t REG_DWORD /d 0000027c /f This is no new invention of myself, just writing it down for myself from here or here.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-01-18_empty-port-ssl-after-adam-installation/","summary":"\u003cp\u003eI\u0026rsquo;ve been meaning to post this, but never actually got around to doing that. When installing vCenter 5.0, an instance of ADAM is installed, which stores all the configration data for Linked Mode.\u003c/p\u003e\n\u003cp\u003eIt basically boils down to running this script and rebooting the box:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-batch\" data-lang=\"batch\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ereg DELETE \u003cspan class=\"s2\"\u003e\u0026#34;HKLMSYSTEMCurrentControlSetservicesADAM_VMwareVCMSDSParameters\u0026#34;\u003c/span\u003e /v \u003cspan class=\"s2\"\u003e\u0026#34;Port SSL\u0026#34;\u003c/span\u003e /f\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ereg ADD \u003cspan class=\"s2\"\u003e\u0026#34;HKLMSYSTEMCurrentControlSetservicesADAM_VMwareVCMSDSParameters\u0026#34;\u003c/span\u003e /v \u003cspan class=\"s2\"\u003e\u0026#34;Port SSL\u0026#34;\u003c/span\u003e /t REG_DWORD /d 0000027c  /f\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThis is no new invention of myself, just writing it down for myself from \u003ca href=\"http://www.virtualserverguy.com/blog/2010/9/21/vcenter-41-adam_vmwarevcmsds-error.html\"\u003ehere\u003c/a\u003e or \u003ca href=\"http://www.vmwareinfo.com/2011/02/pesky-vcenter-adam-error.html\"\u003ehere\u003c/a\u003e.\u003c/p\u003e","title":"Empty Port SSL after ADAM installation"},{"content":"Since the Scheduled Tasks in vCenter ain\u0026rsquo;t exportable, I went ahead and wrote a rather simple script, which lets me do this in Windows own Task Scheduler. What this script does, is initiate a graceful shutdown and if the VM isn\u0026rsquo;t shutdown within 60 seconds (12 * 5 seconds) it simply powers the VM off and immediately after that powers it back on.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 param( [string] $vCenter, [string] $VMname ) # Add the VI-Snapin if it isn\u0026#39;t loaded already if ( (Get-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; -ErrorAction SilentlyContinue) -eq $null ) { Add-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; } If ( !($vCenter) -or !($VMname) ) { Write-Host Write-Host \u0026#34;vm-reboot: \u0026lt;vcenter-server\u0026gt; \u0026lt;VMname\u0026gt;\u0026#34; Write-Host Write-Host \u0026#34; \u0026lt;vcenter-server\u0026gt; - DNS name of your vCenter server.\u0026#34; Write-Host \u0026#34; \u0026lt;VMname\u0026gt; - Display name of the VM in this vCenter server.\u0026#34; Write-Host exit 1 } Connect-VIServer -Server $vCenter $VM = Get-VM $VMname # First, try shutting down the virtual machine gracefully Write-Host \u0026#34;Stopping VM $( $VM )\u0026#34; Write-Host \u0026#34; - Graceful shutdown\u0026#34; Shutdown-VMGuest -VM $VM -Confirm:$false $VM = Get-VM $VMname $i = 0 While ($VM.PowerState -ne \u0026#34;PoweredOff\u0026#34;) { # If that doesn\u0026#39;t work, break out the hammer and just kill it if ( $i -gt 12 ) { Write-Host \u0026#34; - Forced shutdown\u0026#34; Stop-VM -VM $VMname -Confirm:$false } Start-Sleep -Seconds 5 $VM = Get-VM $VMname $i++ } If ($VM.PowerState -eq \u0026#34;PoweredOff\u0026#34;) { Write-Host \u0026#34;Starting VM $( $VM )\u0026#34; Start-VM -VM $VM -Confirm:$false \u0026gt;$NULL } Disconnect-VIServer -server $vCenter -Confirm:$false Before this implementation in PowerCLI, I needed three tasks for each VM that was to be scheduled. And when migrating vCenters (and I usually do an empty install) vCenter\u0026rsquo;s scheduled tasks are not exportable, thus you need to re-create the tasks on the new vCenter by yourself again, which for more than four virtual machines is really a pain in the ass \u0026hellip;\nUpdate: well, found an error that caused shit not to work \u0026hellip; Basically Stop-VM also needs the object for $VMname, otherwise the whole point of waiting for the VM to be stopped is kinda moot (seeing as Stop-VM never stops obsessing about not having a Get-VM object or a VM name to work with).\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-01-16_rebooting-a-virtual-machine-via-task-scheduler/","summary":"\u003cp\u003eSince the Scheduled Tasks in vCenter ain\u0026rsquo;t exportable, I went ahead and wrote a rather simple script, which lets me do this in Windows own Task Scheduler. What this script does, is initiate a graceful shutdown and if the VM isn\u0026rsquo;t shutdown within 60 seconds (12 * 5 seconds) it simply powers the VM off and immediately after that powers it back on.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e44\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-45\"\u003e45\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-46\"\u003e46\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-47\"\u003e47\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-48\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-48\"\u003e48\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eparam\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evCenter\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eVMname\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Add the VI-Snapin if it isn\u0026#39;t loaded already\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ePSSnapin\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eName\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;VMware.VimAutomation.Core\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eErrorAction\u003c/span\u003e \u003cspan class=\"n\"\u003eSilentlyContinue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eeq\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eAdd\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ePSSnapin\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eName\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;VMware.VimAutomation.Core\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eIf\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"o\"\u003e!\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evCenter\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"ow\"\u003eor\u003c/span\u003e \u003cspan class=\"o\"\u003e!\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eVMname\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;vm-reboot: \u0026lt;vcenter-server\u0026gt; \u0026lt;VMname\u0026gt;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;   \u0026lt;vcenter-server\u0026gt;  - DNS name of your vCenter server.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;   \u0026lt;VMname\u0026gt;          - Display name of the VM in this vCenter server.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eexit\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eConnect\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVIServer\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eServer\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evCenter\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eVM\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVM\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eVMname\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# First, try shutting down the virtual machine gracefully\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Stopping VM $( $VM )\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;   - Graceful shutdown\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eShutdown\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVMGuest\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVM\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eVM\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eConfirm\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"bp\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eVM\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVM\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eVMname\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eWhile\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eVM\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePowerState\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ene\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;PoweredOff\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"c1\"\u003e# If that doesn\u0026#39;t work, break out the hammer and just kill it\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003egt\u003c/span\u003e \u003cspan class=\"mi\"\u003e12\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;  - Forced shutdown\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"n\"\u003eStop\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVM\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVM\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eVMname\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eConfirm\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"bp\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eStart\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eSleep\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eSeconds\u003c/span\u003e \u003cspan class=\"mi\"\u003e5\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eVM\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVM\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eVMname\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"o\"\u003e++\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eIf\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eVM\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ePowerState\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eeq\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;PoweredOff\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Starting VM $( $VM )\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eStart\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVM\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVM\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eVM\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eConfirm\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"bp\"\u003efalse\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;$\u003c/span\u003e\u003cspan class=\"n\"\u003eNULL\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eDisconnect\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVIServer\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eserver\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evCenter\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eConfirm\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"bp\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eBefore this implementation in PowerCLI, I needed three tasks for each VM that was to be scheduled. And when migrating vCenters (and I usually do an empty install) vCenter\u0026rsquo;s scheduled tasks are not exportable, thus you need to re-create the tasks on the new vCenter by yourself again, which for more than four virtual machines is really a pain in the ass \u0026hellip;\u003c/p\u003e","title":"Rebooting a virtual machine via Task scheduler"},{"content":"We recently had, after we migrated from vSphere 4 to vSphere 5, a memory limit in size of the configured memory on each and every VM. Since memory limits on VM level pretty much destroy performance, I went ahead an wrote this simple script to remove all memory limits on all VMs that don\u0026rsquo;t have \u0026ldquo;Unlimited\u0026rdquo; configured:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 param( [string] $vCenter ) # Add the VI-Snapin if it isn\u0026#39;t loaded already if ( (Get-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; -ErrorAction SilentlyContinue) -eq $null ) { Add-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; } If ( !($vCenter) ) { Write-Host Write-Host \u0026#34;cluster-remove-mem-limits: \u0026lt;vcenter-server\u0026gt;\u0026#34; Write-Host Write-Host \u0026#34; \u0026lt;vcenter-server\u0026gt; - DNS name of your vCenter server.\u0026#34; Write-Host exit 1 } Connect-VIServer -Server $vCenter Get-VM | Get-VMResourceConfiguration | Where-Object { $_.memlimitmb -ne \u0026#39;-1\u0026#39; } |` Set-VMResourceConfiguration -memlimitmb $null Disconnect-VIServer -server $vCenter -Confirm:$false This script is basically what the guy over at get-admin.com did, just only for memory limits.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-01-13_reoccurring-memory-limits-in-vcenter/","summary":"\u003cp\u003eWe recently had, after we migrated from vSphere 4 to vSphere 5, a memory limit in size of the configured memory on each and every VM. Since memory limits on VM level pretty much destroy performance, I went ahead an wrote this simple script to remove all memory limits on all VMs that don\u0026rsquo;t have \u0026ldquo;Unlimited\u0026rdquo; configured:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eparam\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003estring\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evCenter\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Add the VI-Snapin if it isn\u0026#39;t loaded already\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ePSSnapin\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eName\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;VMware.VimAutomation.Core\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eErrorAction\u003c/span\u003e \u003cspan class=\"n\"\u003eSilentlyContinue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eeq\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eAdd\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ePSSnapin\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eName\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;VMware.VimAutomation.Core\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eIf\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"o\"\u003e!\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evCenter\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;cluster-remove-mem-limits: \u0026lt;vcenter-server\u0026gt;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;   \u0026lt;vcenter-server\u0026gt;  - DNS name of your vCenter server.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eexit\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eConnect\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVIServer\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eServer\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evCenter\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVM\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVMResourceConfiguration\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eWhere\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"ne\"\u003eObject\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003e_\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ememlimitmb\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ene\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;-1\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e\u003cspan class=\"err\"\u003e`\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"n\"\u003eSet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVMResourceConfiguration\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ememlimitmb\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eDisconnect\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVIServer\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eserver\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evCenter\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eConfirm\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"bp\"\u003efalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThis script is basically what the guy over at \u003ca href=\"http://get-admin.com/blog/how-to/vmware/powershell-removing-vmware-cpumemory-resource-limits/\"\u003eget-admin.com\u003c/a\u003e did, just only for memory limits.\u003c/p\u003e","title":"Reoccurring memory limits in vCenter"},{"content":"Well, it\u0026rsquo;s been a while since I last blogged about anything. I\u0026rsquo;ve been real busy with work with the move from vSphere 4 to vSphere 5 (well planning takes a while \u0026hellip;), reorganizing our vSphere Clusters/Farms, a lot of PowerCLI voodoo (some of it, I\u0026rsquo;m gonna post), the usual Windows honky-donky (Windows group policy for certain stuff).\nBesides that, you know, I have some kind of personal life. That basically took all of my free time. So I\u0026rsquo;m gonna try to write some posts up in the next few weeks, with some PowerCLI scripts mostly, some Shell scripts for SVC-automation, as well as some NetApp foo, guess we\u0026rsquo;ll see.\n","permalink":"https://christian.blog.pakiheim.de/posts/2012-01-09_been-a-while/","summary":"\u003cp\u003eWell, it\u0026rsquo;s been a while since I last blogged about anything. I\u0026rsquo;ve been real busy with work with the move from vSphere 4 to vSphere 5 (well planning takes a while \u0026hellip;), reorganizing our vSphere Clusters/Farms, a lot of PowerCLI voodoo (some of it, I\u0026rsquo;m gonna post), the usual Windows honky-donky (Windows group policy for certain stuff).\u003c/p\u003e\n\u003cp\u003eBesides that, you know, I have some kind of personal life. That basically took all of my free time. So I\u0026rsquo;m gonna try to write some posts up in the next few weeks, with some PowerCLI scripts mostly, some Shell scripts for SVC-automation, as well as some NetApp foo, guess we\u0026rsquo;ll see.\u003c/p\u003e","title":"Been a while"},{"content":"Today I decided to upgrade all my boxes at home to Maverick Meercat. First I started with my Netbook, then followed my NAS and now the XBMC box (Acer Revo 3600).\nAs a base point, you\u0026rsquo;ll need a minimal installation of Maverick Meercat (simply put the mini.iso onto an usb pen drive and boot from it), which luckily is rather easy:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 # First we\u0026#39;ll need these tools on the box where we\u0026#39;re preparing the stick sudo aptitude install syslinux mbr mtools # Create a FAT16 partition on your USB stick sudo fdisk /dev/sdb # Format the partition as VFAT sudo mkfs.vfat /dev/sdb1 # Need to install the bootloader (syslinux) before doing anything else! sudo syslinux /dev/sdb1 # Now mount the mini.iso file as loop, copy the content to the usb stick sudo mkdir /media/usb; sudo mkdir /media/cdrom0 sudo mount -o loop ~/mini.iso /media/cdrom0; sudo mount /dev/sdb1 /media/usb sudo cp -r /media/cdrom0/* /media/usb # Rename the isolinux.cfg sudo mv /media/usb/isolinux.cfg /media/usb/syslinux.cfg sudo umount /media/usb /media/cdrom0 # Create a MBR on the usb stick sudo install-mbr /dev/sdb After that is done, boot your box with the USB stick. Make the minimal command line installation. After that finishes, switch to the adjacent console (i.e. tty2) hit ENTER, and install a few packages that we need for after the reboot:\n1 2 3 4 # Install important packages chroot /target /bin/bash --login aptitude install openssh-server wpasupplicant subversion git-core python-software-properties exit Now reboot the Revo. Once that\u0026rsquo;s done, we can start with prepping the real thing:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 # Need to blacklist the not working RAlink drivers cat \u0026lt;\u0026lt; EOF | sudo tee /etc/modprobe.d/blacklist-ralink.conf # The below drivers don\u0026#39;t work with the Atheros AR5001 # (Linksys WUSB600N) blacklist rt2800usb blacklist rt2x00usb EOF # Add the necessary PPA\u0026#39;s sudo add-apt-repository ppa:team-xbmc-svn/ppa # Install necessary prerequisites (like nvidia-glx for VDPAU rendering) # debhelper needs to be added, otherwise dkms is gonna fail. # I need nvidia-glx-180 because the -190 apparently brings # a large framedrop (as in I\u0026#39;m getting 18 FPS instead of 24) sudo aptitude install debhelper linux-sound-base alsa-base alsa-utils screen hal # Unmute the Master an PCM channels with alsamixer. Press ESC to quit sudo alsamixer sudo alsactl store 0 # Install XBMC as standalone (since we don\u0026#39;t want a full-blown desktop environment like GNOME) sudo aptitude install xbmc-standalone # Configure the Xserver sudo aptitude install pkg-config nvidia-glx-180 xinit sudo nvidia-xconfig # Add the init-script (no need for fancy tty login stuff) cat \u0026lt;\u0026lt; EOF | sudo tee /etc/init/xbmc.conf # xbmc description \u0026#34;XBMC\u0026#34; author \u0026#34;Christian Heim \u0026lt;christian.heim@barfoo.org\u0026gt;\u0026#34; console output start on (filesystem and started rsyslog) stop on runlevel [06] respawn respawn limit 10 300 expect fork emits starting-x starting-dm pre-start script # Need this ugly hack, since plymouth is still running, thus resulting # in an non-working xbmc/Xorg session. Sadly, there\u0026#39;s currently no # other way to do this (ie. \u0026#39;start on stopped plymouth\u0026#39;) for i in $( seq 1 5 ); do plymouth --has-active-vt [ $? -eq 0 ] \u0026amp;\u0026amp; break || sleep 1 done end script script exec xinit /usr/bin/xbmc --standalone \u0026amp; \u0026gt;/dev/null 2\u0026gt;\u0026amp;1 end script pre-stop script # Clean up the console before we switch to it, to avoid text flicker if [ -x /usr/bin/tput ] ; then tput -Tlinux reset \u0026gt; /dev/tty1 || true tput -Tlinux reset \u0026gt; /dev/tty8 || true fi rm -f /root/xbmc_crashlog* \u0026amp;\u0026gt;/dev/null || true end script EOF Since this is an \u0026ldquo;desktop\u0026rdquo; (well, more over I want it to look cool \u0026hellip; :P), I need to setup the XBMC bootsplash, which is being handled by plymouth:\n1 2 3 4 5 6 7 8 9 10 11 sudo aptitude install plymouth-label v86d wget http://excyle.nl/plymouth-theme-xbmc-logo.deb sudo dpkg -i plymouth-theme-xbmc-logo.deb echo FRAMEBUFFER=y | sudo tee -a /etc/initramfs-tools/conf.d/splash echo uvesafb mode_option=1280x1024-24 mtrr=3 scroll=ywrap | sudo tee -a /etc/initramfs-tools/modules sudo update-initramfs -u sudo sed -i \u0026#39;s|GRUB_CMDLINE_LINUX_DEFAULT=\u0026#34;splash quiet\u0026#34;|GRUB_CMDLINE_LINUX_DEFAULT=\u0026#34;splash quiet video=uvesafb:mode_option=1920x1080-24,mtrr=3,scroll=ywrap\u0026#34;|\u0026#39; /etc/default/grub sudo sed -i \u0026#39;s,GRUB_HIDDEN_TIMEOUT=0,#GRUB_HIDDEN_TIMEOUT=0,\u0026#39; /etc/default/grub sudo sed -i \u0026#39;s,#GRUB_GFXMODE=640x480,GRUB_GFXMODE=1920x1080,\u0026#39; /etc/default/grub sudo update-grub2 Since I\u0026rsquo;m using an Crystal HD device with my Acer Revo, I also need the \u0026ldquo;extra\u0026rdquo; dependecies needed for it to work.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 mkdir ~/checkout sudo aptitude install subversion autoconf svn checkout http://crystalhd-for-osx.googlecode.com/svn/trunk/crystalhd cd crystalhd cd linux_lib/libcrystalhd/ make sudo make install cd ../.. cd driver/linux autoconf ./configure make sudo make install Also, since I\u0026rsquo;m using a Hama MCE (well, or rather my Harmony One programmed to act like a Hama MCE), I also need the MCE Eventclient (in replacement for what a pain in the ass LIRC is, gladly):\n1 2 3 4 5 6 sudo aptitude install git-core cd ~/checkout git clone git://repo.or.cz/hama_mce-eventclient.git hama_mce-eventclient cd hama_mce make sudo make install Sadly, hal tries to grab the device and we need to blacklist it, so we end up with a working remote!\n1 2 3 4 5 6 7 8 9 10 11 12 cat \u0026lt;\u0026lt; EOF | sudo tee /etc/hal/fdi/preprobe/99_hama_mce.fdi \u0026lt;?xml version=\u0026#34;1.0\u0026#34; encoding=\u0026#34;UTF-8\u0026#34;?\u0026gt; \u0026lt;deviceinfo version=\u0026#34;0.2\u0026#34;\u0026gt; \u0026lt;device\u0026gt; \u0026lt;match key=\u0026#34;usb.vendor_id\u0026#34; int=\u0026#34;1444\u0026#34;\u0026gt; \u0026lt;match key=\u0026#34;usb.product_id\u0026#34; int=\u0026#34;39041\u0026#34;\u0026gt; \u0026lt;merge key=\u0026#34;info.ignore\u0026#34; type=\u0026#34;bool\u0026#34;\u0026gt;true\u0026lt;/merge\u0026gt; \u0026lt;/match\u0026gt; \u0026lt;/match\u0026gt; \u0026lt;/device\u0026gt; \u0026lt;/deviceinfo\u0026gt; EOF What\u0026rsquo;s now left, is just dropping the asoundrc in root\u0026rsquo;s $HOME.\n1 2 cd /root wget -O .asoundrc http://christian.blog.pakiheim.de/uploads/2009/06/asoundrc Now reboot the Revo one last time, and XBMC should come up just fine .. At least it does for me!\n","permalink":"https://christian.blog.pakiheim.de/howtos/acer-revoxbmc-installation-guide/","summary":"\u003cp\u003eToday I decided to upgrade all my boxes at home to Maverick Meercat. First I started with my Netbook, then followed my NAS and now the XBMC box (Acer Revo 3600).\u003c/p\u003e\n\u003cp\u003eAs a base point, you\u0026rsquo;ll need a minimal installation of Maverick Meercat (simply put the \u003ca href=\"https://help.ubuntu.com/community/Installation/MinimalCD\"\u003emini.iso\u003c/a\u003e onto an usb pen drive and boot from it), \u003ca href=\"http://www.func.nl/community/knowledgebase/how-install-ubuntu-usb-stick\"\u003ewhich luckily is rather easy\u003c/a\u003e:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# First we\u0026#39;ll need these tools on the box where we\u0026#39;re preparing the stick\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esudo\u003c/span\u003e \u003cspan class=\"n\"\u003eaptitude\u003c/span\u003e \u003cspan class=\"n\"\u003einstall\u003c/span\u003e \u003cspan class=\"n\"\u003esyslinux\u003c/span\u003e \u003cspan class=\"n\"\u003embr\u003c/span\u003e \u003cspan class=\"n\"\u003emtools\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create a FAT16 partition on your USB stick\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esudo\u003c/span\u003e \u003cspan class=\"n\"\u003efdisk\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edev\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003esdb\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Format the partition as VFAT\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esudo\u003c/span\u003e \u003cspan class=\"n\"\u003emkfs\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003evfat\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edev\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003esdb1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Need to install the bootloader (syslinux) before doing anything else!\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esudo\u003c/span\u003e \u003cspan class=\"n\"\u003esyslinux\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edev\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003esdb1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Now mount the mini.iso file as loop, copy the content to the usb stick\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esudo\u003c/span\u003e \u003cspan class=\"n\"\u003emkdir\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emedia\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eusb\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"n\"\u003esudo\u003c/span\u003e \u003cspan class=\"n\"\u003emkdir\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emedia\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ecdrom0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esudo\u003c/span\u003e \u003cspan class=\"n\"\u003emount\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eo\u003c/span\u003e \u003cspan class=\"n\"\u003eloop\u003c/span\u003e \u003cspan class=\"o\"\u003e~/\u003c/span\u003e\u003cspan class=\"n\"\u003emini\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eiso\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emedia\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ecdrom0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"n\"\u003esudo\u003c/span\u003e \u003cspan class=\"n\"\u003emount\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edev\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003esdb1\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emedia\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eusb\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esudo\u003c/span\u003e \u003cspan class=\"n\"\u003ecp\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003er\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emedia\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ecdrom0\u003c/span\u003e\u003cspan class=\"o\"\u003e/*\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emedia\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eusb\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Rename the isolinux.cfg\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esudo\u003c/span\u003e \u003cspan class=\"n\"\u003emv\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emedia\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eusb\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eisolinux\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecfg\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emedia\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eusb\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003esyslinux\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecfg\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esudo\u003c/span\u003e \u003cspan class=\"n\"\u003eumount\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emedia\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eusb\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emedia\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ecdrom0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create a MBR on the usb stick\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esudo\u003c/span\u003e \u003cspan class=\"n\"\u003einstall\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003embr\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edev\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003esdb\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAfter that is done, boot your box with the USB stick. Make the minimal command line installation. After that finishes, switch to the adjacent console (i.e. tty2) hit ENTER,\nand install a few packages that we need for after the reboot:\u003c/p\u003e","title":"Acer Revo/XBMC installation guide"},{"content":"Well it took me exactly two full Windows reinstallations till I figured that one out, thanks to Google. Basically the Creative Suite 3 installs an mDNSresponder as system service (named \u0026quot; ##Id_String2.6844F930_1628_4223_B5CC_5BB94B879762##\u0026quot; -- don't ask me why the cryptic name), which basically screws up your Windows! It lays another physical network on top of the current one and once you reboot the system you\u0026rsquo;re gonna sit there and try and figure out, why the fuck you ain\u0026rsquo;t getting a DHCP address on boot. And since a simple deactivate/activate of the nic fixes it \u0026#x1f937;\nSo I typed some random words that came to mind into Google, and quickly found this discussion on Microsoft\u0026rsquo;s ITPro forum:\nSolution to all my troubles\nSo, after disabling the pseudo Bonjour service, everything is fine \u0026#x1f937; Guess that\u0026rsquo;s what you get by using \u0026ldquo;old\u0026rdquo; software \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2011-07-17_adobe-cs3-on-windows-7/","summary":"\u003cp\u003eWell it took me exactly two full Windows reinstallations till I figured that one out, thanks to Google. Basically the Creative Suite 3 installs an \u003ca href=\"http://kb2.adobe.com/cps/400/kb400982.html\"\u003emDNSresponder as system service\u003c/a\u003e (named \u0026quot; \u003ccode\u003e##Id_String2.6844F930_1628_4223_B5CC_5BB94B879762##\u0026quot; -- don't ask me why the cryptic name)\u003c/code\u003e, which basically screws up your Windows! It lays another physical network on top of the current one and once you reboot the system you\u0026rsquo;re gonna sit there and try and figure out, why the fuck you ain\u0026rsquo;t getting a DHCP address on boot. And since a simple deactivate/activate of the nic fixes it \u0026#x1f937;\u003c/p\u003e","title":"Adobe CS3 on Windows 7"},{"content":"Today I had to install PowerCLI on my workstation. When I tried launching it for the first time, it simply opened and closed again instantly. After browsing the VMware community for this error and not finding a useful solution, I ended up googling the error. As it turns out, this only happens when you did set the \u0026quot; Number of recent items to display in jump lists\u0026quot; to something less than 4.\n/uploads/2011/07/jump-list-zero.png\n(http://social.technet.microsoft.com/Forums/en/winserverpowershell/thread/ecf0a798-46d5-4925-8174-4f47dd5d332e) to something greater than 4, it just works. This appears to be a Powershell bug.\n","permalink":"https://christian.blog.pakiheim.de/posts/2011-07-05_powercli-amp-windows-jump-list-for-recent-items-set-to-zero/","summary":"\u003cp\u003eToday I had to install PowerCLI on my workstation. When I tried launching it for the first time, it simply opened and closed again instantly. After \u003ca href=\"http://communities.vmware.com/thread/282140\"\u003ebrowsing the VMware community\u003c/a\u003e for this error and not finding a useful solution, I ended up googling the error. As it turns out, this only happens when you did set the \u0026quot; \u003cem\u003eNumber of recent items to display in jump lists\u003c/em\u003e\u0026quot; to something less than 4.\u003c/p\u003e","title":"PowerCLI undamp; Windows jump list for recent items set to zero"},{"content":"I recently reinstalled the vCenter Server at work, and in my never ending wisdom cough, I decided to do that on new hardware. That entitled using the same host name plus the appendix _NEW. Now, I know this isn\u0026rsquo;t conforming with DNS naming schemes (iirc underscore isn\u0026rsquo;t a valid DNS char), however it worked \u0026hellip;\nSo once I had everything installed on the new hardware, I switched the ESX servers from the old vCenter to the freshly installed one. Once that was finished, I shut down the old vCenter server, changed IP address and host name of the new one and rebooted. That basically worked, even though suddenly every ESX in my inventory was disconnected. After reconnecting all ESX servers everything was back online.\nThen I tried sorting the list of All VMs in my vCenter and got the error message \u0026ldquo;Unable to look up vcenter_NEW.home.barfoo.org\u0026rdquo; when doing so .. I was like WTF, searched the registry found a few ones, and after a quick reboot tried again \u0026hellip; No luck, still the same error. After looking through the VMware Knowledgebase, I actually found one that worked for me, even if it didn\u0026rsquo;t apply to my environment 100 percent (we don\u0026rsquo;t use Linked Mode) \u0026hellip;\nAfter fixing the vmw-vc-URL in each property, the sorting actually works!\n","permalink":"https://christian.blog.pakiheim.de/posts/2011-06-01_changing-the-vcenter-hostname/","summary":"\u003cp\u003eI recently reinstalled the vCenter Server at work, and in my never ending wisdom \u003cem\u003ecough\u003c/em\u003e, I decided to do that on new hardware. That entitled using the same host name plus the appendix _NEW. Now, I know this isn\u0026rsquo;t conforming with DNS naming schemes (iirc underscore isn\u0026rsquo;t a valid DNS char), however it worked \u0026hellip;\u003c/p\u003e\n\u003cp\u003eSo once I had everything installed on the new hardware, I switched the ESX servers from the old vCenter to the freshly installed one. Once that was finished, I shut down the old vCenter server, changed IP address and host name of the new one and rebooted. That basically worked, even though suddenly every ESX in my inventory was disconnected. After reconnecting all ESX servers everything was back online.\u003c/p\u003e","title":"Changing the vCenter hostname"},{"content":"Some of you out there may know, I am using Ember MM to scrape my movies and TV episodes. One thing about that is, that Ember MM is kinda stupid doing so.\nAfter the 9.10-release of XMBC, they apparently changed the XML format, introducting durationinseconds, which is basically like duration, just \u0026hellip; yeah you guessed right, in seconds.\nNow Ember MM doesn\u0026rsquo;t know that, and still writes the old duration-tag. Now, everytime when something goes kaboom! with my library, I do have to rescrape all my episodes and movies, which isn\u0026rsquo;t a big deal since the NFO\u0026rsquo;s are still on disk. However, since I didn\u0026rsquo;t watch them (as Ember doesn\u0026rsquo;t know about the lastplayed-tag) XBMC is not showing any runtime in the GUI. Now this isn\u0026rsquo;t annoying per se, but it was just bugging me (and since I got lots of spare time, due to being chained to the sofa).\nSo I ended up comparing exports of movie databases before and after playing back an episode and came up with a smallish shell script to do the rescanning and replacing of stuff for me.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #!/bin/bash if [ \u0026#34;$1\u0026#34; = \u0026#34;--force\u0026#34; ] ; then RESCAN_ALL=1 fi IFS=\u0026#34; \u0026#34; if [ $RESCAN_ALL ] ; then FILES=\u0026#34;`grep -rl \u0026#39;episodedetails\u0026#39; */*/*.nfo`\u0026#34; else # Get a list of all NFO files having incorrect information FILES=\u0026#34;`egrep -rli \u0026#39;((|0)|duration\u0026amp;gt;)\u0026#39; */*/*.nfo`\u0026#34; fi for episode in $FILES; do # figure out the episode file extension tvepisode=\u0026#34;`ls ${episode%.*}.* | egrep -i \u0026#39;(mkv|avi|mp4)\u0026#39;`\u0026#34; runtime=\u0026#34;`mediainfo --Inform=\u0026#39;Video;%Duration%\u0026#39; ${tvepisode} | cut -d -f1-2`\u0026#34; runtime_in_s=`echo \u0026#34;scale=0; $runtime/1000\u0026#34; | bc` # Get the old duration if possible old_line=\u0026#34;`grep duration $episode | cut -d -f9- | tail -n1`\u0026#34; new_line=\u0026#34;$runtime_in_s\u0026#34; shopt -q -s extglob echo \u0026#34;Updating episode information in $episode\u0026#34; if [ -z $old_line ] ; then sudo sed -i \u0026#34;s,0,$new_line,\u0026#34; $episode sudo sed -i \u0026#34;s,,$new_line,\u0026#34; $episode else sudo sed -i \u0026#34;s,${old_line##+([[:space:]])},$new_line,g\u0026#34; $episode fi shopt -q -u extglob done Since Ember doesn\u0026rsquo;t provide anything like hooks or \u0026ldquo;post-scraping\u0026rdquo;, this is the only way I can think of doing this. If anyone has a smarter idea, I\u0026rsquo;m all ears.\n","permalink":"https://christian.blog.pakiheim.de/posts/2011-02-22_ember-mm-xbmc-and-0s-video-duration/","summary":"\u003cp\u003eSome of you out there may know, I am using \u003ca href=\"http://sourceforge.net/projects/emm-r\"\u003eEmber MM\u003c/a\u003e to scrape my movies and TV episodes. One thing about that is, that Ember MM is kinda stupid doing so.\u003c/p\u003e\n\u003cp\u003eAfter the 9.10-release of XMBC, they apparently changed the XML format, introducting \u003cem\u003edurationinseconds\u003c/em\u003e, which is basically like \u003cem\u003eduration\u003c/em\u003e, just \u0026hellip; yeah you guessed right, in seconds.\u003c/p\u003e\n\u003cp\u003eNow Ember MM doesn\u0026rsquo;t know that, and still writes the old \u003cem\u003eduration\u003c/em\u003e-tag. Now, everytime when something goes \u003cstrong\u003ekaboom!\u003c/strong\u003e with my library, I do have to rescrape all my episodes and movies, which isn\u0026rsquo;t a big deal since the NFO\u0026rsquo;s are still on disk. However, since I didn\u0026rsquo;t watch them (as Ember doesn\u0026rsquo;t know about the \u003cem\u003elastplayed\u003c/em\u003e-tag) XBMC is not showing any runtime in the GUI. Now this isn\u0026rsquo;t annoying per se, but it was just bugging me (and since I got lots of spare time, due to being chained to the sofa).\u003c/p\u003e","title":"Ember MM, XBMC and 0s Video Duration"},{"content":"We recently received a shipment of Hewlett Packards all-new DL580 G7. While I\u0026rsquo;m impressed with what they did with the iLO3, I\u0026rsquo;m quite disappointed with what they did to the PXE-ROM.\nSure, gPXE may be the future and is offering more possibilites than \u0026ldquo;normal\u0026rdquo; PXE, however breaking customers deployment option(s) \u0026ndash; at least for Windows that is \u0026ndash; really wouldn\u0026rsquo;t be an option.\nNow for the long story, we needed to install a temporary Windows on this DL580 (one with testing purposes). That said, we tried for three days to actually make this work (trying different things with the boot image), but it kept ending with the same result.\nWDSClient: there was a problem initializing wds mode\nAs you can see from the screenshot, the error message isn\u0026rsquo;t exactly clear as day. However, after pressing SHIFT + F10, working my way into X:WINDOWSPanther, digging around in the logs I saw a message that the WDS environment wasn\u0026rsquo;t getting information from the boot controller (like IP address and subnet mask, which is apparently passed on from the controller). So I opened a case with Hewlett-Packard, and guess what they said \u0026hellip;\nExactly right, please open up a case with Microsoft, since this is a problem with WDS .. then again, I don\u0026rsquo;t have the luxury of opening a case with Microsoft since we don\u0026rsquo;t exactly have Microsoft support \u0026hellip; \u0026#x1f61b; So in the end, we installed them DL580\u0026rsquo;s with the addon NC362t network adapters, since that works.\n","permalink":"https://christian.blog.pakiheim.de/posts/2011-01-15_wds-and-dl580-g7/","summary":"\u003cp\u003eWe recently received a shipment of Hewlett Packards all-new DL580 G7. While I\u0026rsquo;m impressed with what they did with the iLO3, I\u0026rsquo;m quite disappointed with what they did to the PXE-ROM.\u003c/p\u003e\n\u003cp\u003eSure, gPXE may be the future and is offering more possibilites than \u0026ldquo;normal\u0026rdquo; PXE, however breaking customers deployment option(s) \u0026ndash; at least for Windows that is \u0026ndash; really wouldn\u0026rsquo;t be an option.\u003c/p\u003e\n\u003cp\u003eNow for the long story, we needed to install a temporary Windows on this DL580 (one with testing purposes). That said, we tried for three days to actually make this work (trying different things with the boot image), but it kept ending with the same result.\u003c/p\u003e","title":"WDS and DL580 G7"},{"content":"Today we had (once again) hardware troubles. We ended up replacing a lot of things, but in the end it was a) the HBA and b) apparently some memory DIMMs. Now, that isn\u0026rsquo;t SVC related. However, we built in another HBA (from our Standby hardware), which apparently already had been assigned to a host.\nNow, since you can\u0026rsquo;t search for a WWPN (at least not that I know of), I ended up writing a little script (yup, AGAIN) in order to do that for me!\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #!/bin/bash svc_cluster_ip=10.0.0.10 svc_priv_dsa=~/.ssh/id_dsa if [ ! -f $svc_priv_dsa ] ; then echo \u0026#34; ${0##*/} is missing the SSH DSA private key\u0026#34; echo \u0026#34; needed to access the SAN Volume controller.\u0026#34; echo \u0026#34; Please specify the correct path!\u0026#34; fi if [ -z $1 ] ; then echo echo \u0026#34; ${0##*/} [ WWPN ]\u0026#34; echo echo \u0026#34; WWPN - WWPN, or part of WWPN that is being searched.\u0026#34; echo \u0026#34; Should be entered in continous format (ie. no dash (-) or colon (:))!\u0026#34; echo exit 1; fi WWPN=$1 list_wwpn_by_host() { local _host=$1 if [ ! -z $_host ] ; then ssh -i $svc_priv_dsa admin@$svc_cluster_ip svcinfo lshost -delim : $_host | grep ^WWPN | sed \u0026#34;s,WWPN:,,\u0026#34; fi } #set -x HOST_LIST=\u0026#34;$( ssh -i $svc_priv_dsa admin@$svc_cluster_ip svcinfo lshost -delim : -nohdr | cut -d: -f2 )\u0026#34; for HOST in $HOST_LIST; do echo -n \u0026#34;$HOST: \u0026#34; echo `list_wwpn_by_host $HOST` done | grep $WWPN #set +x ","permalink":"https://christian.blog.pakiheim.de/posts/2010-11-15_svc-find-wwpn/","summary":"\u003cp\u003eToday we had (once again) hardware troubles. We ended up replacing a lot of things, but in the end it was a) the HBA and b) apparently some memory DIMMs. Now, that isn\u0026rsquo;t SVC related. However, we built in another HBA (from our Standby hardware), which apparently already had been assigned to a host.\u003c/p\u003e\n\u003cp\u003eNow, since you can\u0026rsquo;t search for a WWPN (at least not that I know of), I ended up writing a little script (yup, \u003cstrong\u003eAGAIN\u003c/strong\u003e) in order to do that for me!\u003c/p\u003e","title":"SVC: Find WWPN"},{"content":"As you might have noticed, I\u0026rsquo;m using jQuery.Syntax as my Syntax Highlighting engine. As I recently started writing PowerShell scripts, I wanted syntax hightlighting for it.\nSince I knew, someone already wrote syntax highlighting for GeSHi for PowerShell (I am lazy after all!), I simply took the color scheme (shame on me), and made hacked ahead. After about three hours (yeah, I had some trouble with editing the wrong damn file), I came up with this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 Syntax.register(\u0026#39;powershell\u0026#39;, function(brush) { // PowerShell Cmdlets var cmdlets = [ \u0026#34;Add-Content\u0026#34;, \u0026#34;Add-History\u0026#34;, \u0026#34;Add-Member\u0026#34;, \u0026#34;Add-PSSnapin\u0026#34;, \u0026#34;Clear-Content\u0026#34;, \u0026#34;Clear-Item\u0026#34;, \u0026#34;Clear-ItemProperty\u0026#34;, \u0026#34;Clear-Variable\u0026#34;, \u0026#34;Compare-Object\u0026#34;, \u0026#34;ConvertFrom-SecureString\u0026#34;, \u0026#34;Convert-Path\u0026#34;, \u0026#34;ConvertTo-Html\u0026#34;, \u0026#34;ConvertTo-SecureString\u0026#34;, \u0026#34;Copy-Item\u0026#34;, \u0026#34;Copy-ItemProperty\u0026#34;, \u0026#34;Export-Alias\u0026#34;, \u0026#34;Export-Clixml\u0026#34;, \u0026#34;Export-Console\u0026#34;, \u0026#34;Export-Csv\u0026#34;, \u0026#34;ForEach-Object\u0026#34;, \u0026#34;Format-Custom\u0026#34;, \u0026#34;Format-List\u0026#34;, \u0026#34;Format-Table\u0026#34;, \u0026#34;Format-Wide\u0026#34;, \u0026#34;Get-Acl\u0026#34;, \u0026#34;Get-Alias\u0026#34;, \u0026#34;Get-AuthenticodeSignature\u0026#34;, \u0026#34;Get-ChildItem\u0026#34;, \u0026#34;Get-Command\u0026#34;, \u0026#34;Get-Content\u0026#34;, \u0026#34;Get-Credential\u0026#34;, \u0026#34;Get-Culture\u0026#34;, \u0026#34;Get-Date\u0026#34;, \u0026#34;Get-EventLog\u0026#34;, \u0026#34;Get-ExecutionPolicy\u0026#34;, \u0026#34;Get-Help\u0026#34;, \u0026#34;Get-History\u0026#34;, \u0026#34;Get-Host\u0026#34;, \u0026#34;Get-Item\u0026#34;, \u0026#34;Get-ItemProperty\u0026#34;, \u0026#34;Get-Location\u0026#34;, \u0026#34;Get-Member\u0026#34;, \u0026#34;Get-PfxCertificate\u0026#34;, \u0026#34;Get-Process\u0026#34;, \u0026#34;Get-PSDrive\u0026#34;, \u0026#34;Get-PSProvider\u0026#34;, \u0026#34;Get-PSSnapin\u0026#34;, \u0026#34;Get-Service\u0026#34;, \u0026#34;Get-TraceSource\u0026#34;, \u0026#34;Get-UICulture\u0026#34;, \u0026#34;Get-Unique\u0026#34;, \u0026#34;Get-Variable\u0026#34;, \u0026#34;Get-WmiObject\u0026#34;, \u0026#34;Group-Object\u0026#34;, \u0026#34;Import-Alias\u0026#34;, \u0026#34;Import-Clixml\u0026#34;, \u0026#34;Import-Csv\u0026#34;, \u0026#34;Invoke-Expression\u0026#34;, \u0026#34;Invoke-History\u0026#34;, \u0026#34;Invoke-Item\u0026#34;, \u0026#34;Join-Path\u0026#34;, \u0026#34;Measure-Command\u0026#34;, \u0026#34;Measure-Object\u0026#34;, \u0026#34;Move-Item\u0026#34;, \u0026#34;Move-ItemProperty\u0026#34;, \u0026#34;New-Alias\u0026#34;, \u0026#34;New-Item\u0026#34;, \u0026#34;New-ItemProperty\u0026#34;, \u0026#34;New-Object\u0026#34;, \u0026#34;New-PSDrive\u0026#34;, \u0026#34;New-Service\u0026#34;, \u0026#34;New-TimeSpan\u0026#34;, \u0026#34;New-Variable\u0026#34;, \u0026#34;Out-Default\u0026#34;, \u0026#34;Out-File\u0026#34;, \u0026#34;Out-Host\u0026#34;, \u0026#34;Out-Null\u0026#34;, \u0026#34;Out-Printer\u0026#34;, \u0026#34;Out-String\u0026#34;, \u0026#34;Pop-Location\u0026#34;, \u0026#34;Push-Location\u0026#34;, \u0026#34;Read-Host\u0026#34;, \u0026#34;Remove-Item\u0026#34;, \u0026#34;Remove-ItemProperty\u0026#34;, \u0026#34;Remove-PSDrive\u0026#34;, \u0026#34;Remove-PSSnapin\u0026#34;, \u0026#34;Remove-Variable\u0026#34;, \u0026#34;Rename-Item\u0026#34;, \u0026#34;Rename-ItemProperty\u0026#34;, \u0026#34;Resolve-Path\u0026#34;, \u0026#34;Restart-Service\u0026#34;, \u0026#34;Resume-Service\u0026#34;, \u0026#34;Select-Object\u0026#34;, \u0026#34;Select-String\u0026#34;, \u0026#34;Set-Acl\u0026#34;, \u0026#34;Set-Alias\u0026#34;, \u0026#34;Set-AuthenticodeSignature\u0026#34;, \u0026#34;Set-Content\u0026#34;, \u0026#34;Set-Date\u0026#34;, \u0026#34;Set-ExecutionPolicy\u0026#34;, \u0026#34;Set-Item\u0026#34;, \u0026#34;Set-ItemProperty\u0026#34;, \u0026#34;Set-Location\u0026#34;, \u0026#34;Set-PSDebug\u0026#34;, \u0026#34;Set-Service\u0026#34;, \u0026#34;Set-TraceSource\u0026#34;, \u0026#34;Set-Variable\u0026#34;, \u0026#34;Sort-Object\u0026#34;, \u0026#34;Split-Path\u0026#34;, \u0026#34;Start-Service\u0026#34;, \u0026#34;Start-Sleep\u0026#34;, \u0026#34;Start-Transcript\u0026#34;, \u0026#34;Stop-Process\u0026#34;, \u0026#34;Stop-Service\u0026#34;, \u0026#34;Stop-Transcript\u0026#34;, \u0026#34;Suspend-Service\u0026#34;, \u0026#34;Tee-Object\u0026#34;, \u0026#34;Test-Path\u0026#34;, \u0026#34;Trace-Command\u0026#34;, \u0026#34;Update-FormatData\u0026#34;, \u0026#34;Update-TypeData\u0026#34;, \u0026#34;Where-Object\u0026#34;, \u0026#34;Write-Debug\u0026#34;, \u0026#34;Write-Error\u0026#34;, \u0026#34;Write-Host\u0026#34;, \u0026#34;Write-Output\u0026#34;, \u0026#34;Write-Progress\u0026#34;, \u0026#34;Write-Verbose\u0026#34;, \u0026#34;Write-Warning\u0026#34; ]; brush.push(cmdlets, {klass: \u0026#39;cmdlet\u0026#39;}); // Aliases var aliases = [ \u0026#34;ac\u0026#34;, \u0026#34;asnp\u0026#34;, \u0026#34;clc\u0026#34;, \u0026#34;cli\u0026#34;, \u0026#34;clp\u0026#34;, \u0026#34;clv\u0026#34;, \u0026#34;cpi\u0026#34;, \u0026#34;cpp\u0026#34;, \u0026#34;cvpa\u0026#34;, \u0026#34;diff\u0026#34;, \u0026#34;epal\u0026#34;, \u0026#34;epcsv\u0026#34;, \u0026#34;fc\u0026#34;, \u0026#34;fl\u0026#34;, \u0026#34;foreach\u0026#34;, \u0026#34;ft\u0026#34;, \u0026#34;fw\u0026#34;, \u0026#34;gal\u0026#34;, \u0026#34;gc\u0026#34;, \u0026#34;gci\u0026#34;, \u0026#34;gcm\u0026#34;, \u0026#34;gdr\u0026#34;, \u0026#34;ghy\u0026#34;, \u0026#34;gi\u0026#34;, \u0026#34;gl\u0026#34;, \u0026#34;gm\u0026#34;, \u0026#34;gp\u0026#34;, \u0026#34;gps\u0026#34;, \u0026#34;group\u0026#34;, \u0026#34;gsv\u0026#34;, \u0026#34;gsnp\u0026#34;, \u0026#34;gu\u0026#34;, \u0026#34;gv\u0026#34;, \u0026#34;gwmi\u0026#34;, \u0026#34;iex\u0026#34;, \u0026#34;ihy\u0026#34;, \u0026#34;ii\u0026#34;, \u0026#34;ipal\u0026#34;, \u0026#34;ipcsv\u0026#34;, \u0026#34;mi\u0026#34;, \u0026#34;mp\u0026#34;, \u0026#34;nal\u0026#34;, \u0026#34;ndr\u0026#34;, \u0026#34;ni\u0026#34;, \u0026#34;nv\u0026#34;, \u0026#34;oh\u0026#34;, \u0026#34;rdr\u0026#34;, \u0026#34;ri\u0026#34;, \u0026#34;rni\u0026#34;, \u0026#34;rnp\u0026#34;, \u0026#34;rp\u0026#34;, \u0026#34;rsnp\u0026#34;, \u0026#34;rv\u0026#34;, \u0026#34;rvpa\u0026#34;, \u0026#34;sal\u0026#34;, \u0026#34;sasv\u0026#34;, \u0026#34;sc\u0026#34;, \u0026#34;select\u0026#34;, \u0026#34;si\u0026#34;, \u0026#34;sl\u0026#34;, \u0026#34;sleep\u0026#34;, \u0026#34;sort\u0026#34;, \u0026#34;sp\u0026#34;, \u0026#34;spps\u0026#34;, \u0026#34;spsv\u0026#34;, \u0026#34;sv\u0026#34;, \u0026#34;tee\u0026#34;, \u0026#34;?\u0026#34;, \u0026#34;write\u0026#34;, \u0026#34;cat\u0026#34;, \u0026#34;cd\u0026#34;, \u0026#34;clear\u0026#34;, \u0026#34;cp\u0026#34;, \u0026#34;h\u0026#34;, \u0026#34;history\u0026#34;, \u0026#34;kill\u0026#34;, \u0026#34;lp\u0026#34;, \u0026#34;ls\u0026#34;, \u0026#34;mount\u0026#34;, \u0026#34;mv\u0026#34;, \u0026#34;popd\u0026#34;, \u0026#34;ps\u0026#34;, \u0026#34;pushd\u0026#34;, \u0026#34;pwd\u0026#34;, \u0026#34;r\u0026#34;, \u0026#34;rm\u0026#34;, \u0026#34;rmdir\u0026#34;, \u0026#34;echo\u0026#34;, \u0026#34;cls\u0026#34;, \u0026#34;chdir\u0026#34;, \u0026#34;copy\u0026#34;, \u0026#34;del\u0026#34;, \u0026#34;dir\u0026#34;, \u0026#34;erase\u0026#34;, \u0026#34;move\u0026#34;, \u0026#34;rd\u0026#34;, \u0026#34;ren\u0026#34;, \u0026#34;set\u0026#34;, \u0026#34;type\u0026#34; ]; brush.push(aliases, {klass: \u0026#39;alias\u0026#39;}); // Reserved words var keywords = [ \u0026#34;break\u0026#34;, \u0026#34;continue\u0026#34;, \u0026#34;do\u0026#34;, \u0026#34;for\u0026#34;, \u0026#34;foreach\u0026#34;, \u0026#34;exit\u0026#34;, \u0026#34;default\u0026#34;, \u0026#34;while\u0026#34;, \u0026#34;if\u0026#34;, \u0026#34;switch\u0026#34;, \u0026#34;until\u0026#34;, \u0026#34;where\u0026#34;, \u0026#34;function\u0026#34;, \u0026#34;filter\u0026#34;, \u0026#34;else\u0026#34;, \u0026#34;elseif\u0026#34;, \u0026#34;in\u0026#34;, \u0026#34;return\u0026#34;, \u0026#34;param\u0026#34;, \u0026#34;throw\u0026#34;, \u0026#34;trap\u0026#34; ]; brush.push(keywords, {klass: \u0026#39;keyword\u0026#39;}); // Options var options = [ \u0026#34;-Year\u0026#34;, \u0026#34;-Wrap\u0026#34;, \u0026#34;-Word\u0026#34;, \u0026#34;-Width\u0026#34;, \u0026#34;-WhatIf\u0026#34;, \u0026#34;-Wait\u0026#34;, \u0026#34;-View\u0026#34;, \u0026#34;-Verbose\u0026#34;, \u0026#34;-Verb\u0026#34;, \u0026#34;-Variable\u0026#34;, \u0026#34;-ValueOnly\u0026#34;, \u0026#34;-Value\u0026#34;, \u0026#34;-Unique\u0026#34;, \u0026#34;-UFormat\u0026#34;, \u0026#34;-TypeName\u0026#34;, \u0026#34;-Trace\u0026#34;, \u0026#34;-TotalCount\u0026#34;, \u0026#34;-Title\u0026#34;, \u0026#34;-TimestampServer\u0026#34;, \u0026#34;-TargetObject\u0026#34;, \u0026#34;-Syntax\u0026#34;, \u0026#34;-SyncWindow\u0026#34;, \u0026#34;-Sum\u0026#34;, \u0026#34;-String\u0026#34;, \u0026#34;-Strict\u0026#34;, \u0026#34;-Stream\u0026#34;, \u0026#34;-Step\u0026#34;, \u0026#34;-Status\u0026#34;, \u0026#34;-Static\u0026#34;, \u0026#34;-StartupType\u0026#34;, \u0026#34;-Start\u0026#34;, \u0026#34;-StackName\u0026#34;, \u0026#34;-Stack\u0026#34;, \u0026#34;-SourceId\u0026#34;, \u0026#34;-SimpleMatch\u0026#34;, \u0026#34;-ShowError\u0026#34;, \u0026#34;-Separator\u0026#34;, \u0026#34;-SecureString\u0026#34;, \u0026#34;-SecureKey\u0026#34;, \u0026#34;-SecondValue\u0026#34;, \u0026#34;-SecondsRemaining\u0026#34;, \u0026#34;-Seconds\u0026#34;, \u0026#34;-Second\u0026#34;, \u0026#34;-Scope\u0026#34;, \u0026#34;-Root\u0026#34;, \u0026#34;-Role\u0026#34;, \u0026#34;-Resolve\u0026#34;, \u0026#34;-RemoveListener\u0026#34;, \u0026#34;-RemoveFileListener\u0026#34;, \u0026#34;-Registered\u0026#34;, \u0026#34;-ReferenceObject\u0026#34;, \u0026#34;-Recurse\u0026#34;, \u0026#34;-RecommendedAction\u0026#34;, \u0026#34;-ReadCount\u0026#34;, \u0026#34;-Quiet\u0026#34;, \u0026#34;-Query\u0026#34;, \u0026#34;-Qualifier\u0026#34;, \u0026#34;-PSSnapin\u0026#34;, \u0026#34;-PSProvider\u0026#34;, \u0026#34;-PSHost\u0026#34;, \u0026#34;-PSDrive\u0026#34;, \u0026#34;-PropertyType\u0026#34;, \u0026#34;-Property\u0026#34;, \u0026#34;-Prompt\u0026#34;, \u0026#34;-Process\u0026#34;, \u0026#34;-PrependPath\u0026#34;, \u0026#34;-PercentComplete\u0026#34;, \u0026#34;-Pattern\u0026#34;, \u0026#34;-PathType\u0026#34;, \u0026#34;-Path\u0026#34;, \u0026#34;-PassThru\u0026#34;, \u0026#34;-ParentId\u0026#34;, \u0026#34;-Parent\u0026#34;, \u0026#34;-Parameter\u0026#34;, \u0026#34;-Paging\u0026#34;, \u0026#34;-OutVariable\u0026#34;, \u0026#34;-OutBuffer\u0026#34;, \u0026#34;-Option\u0026#34;, \u0026#34;-OnType\u0026#34;, \u0026#34;-Off\u0026#34;, \u0026#34;-Object\u0026#34;, \u0026#34;-Noun\u0026#34;, \u0026#34;-NoTypeInformation\u0026#34;, \u0026#34;-NoQualifier\u0026#34;, \u0026#34;-NoNewline\u0026#34;, \u0026#34;-NoElement\u0026#34;, \u0026#34;-NoClobber\u0026#34;, \u0026#34;-NewName\u0026#34;, \u0026#34;-Newest\u0026#34;, \u0026#34;-Namespace\u0026#34;, \u0026#34;-Name\u0026#34;, \u0026#34;-Month\u0026#34;, \u0026#34;-Minutes\u0026#34;, \u0026#34;-Minute\u0026#34;, \u0026#34;-Minimum\u0026#34;, \u0026#34;-Milliseconds\u0026#34;, \u0026#34;-Message\u0026#34;, \u0026#34;-MemberType\u0026#34;, \u0026#34;-Maximum\u0026#34;, \u0026#34;-LogName\u0026#34;, \u0026#34;-LiteralPath\u0026#34;, \u0026#34;-LiteralName\u0026#34;, \u0026#34;-ListenerOption\u0026#34;, \u0026#34;-List\u0026#34;, \u0026#34;-Line\u0026#34;, \u0026#34;-Leaf\u0026#34;, \u0026#34;-Last\u0026#34;, \u0026#34;-Key\u0026#34;, \u0026#34;-ItemType\u0026#34;, \u0026#34;-IsValid\u0026#34;, \u0026#34;-IsAbsolute\u0026#34;, \u0026#34;-InputObject\u0026#34;, \u0026#34;-IncludeEqual\u0026#34;, \u0026#34;-IncludeChain\u0026#34;, \u0026#34;-Include\u0026#34;, \u0026#34;-IgnoreWhiteSpace\u0026#34;, \u0026#34;-Id\u0026#34;, \u0026#34;-Hours\u0026#34;, \u0026#34;-Hour\u0026#34;, \u0026#34;-HideTableHeaders\u0026#34;, \u0026#34;-Head\u0026#34;, \u0026#34;-GroupBy\u0026#34;, \u0026#34;-Functionality\u0026#34;, \u0026#34;-Full\u0026#34;, \u0026#34;-Format\u0026#34;, \u0026#34;-ForegroundColor\u0026#34;, \u0026#34;-Force\u0026#34;, \u0026#34;-First\u0026#34;, \u0026#34;-FilterScript\u0026#34;, \u0026#34;-Filter\u0026#34;, \u0026#34;-FilePath\u0026#34;, \u0026#34;-Expression\u0026#34;, \u0026#34;-ExpandProperty\u0026#34;, \u0026#34;-Expand\u0026#34;, \u0026#34;-ExecutionPolicy\u0026#34;, \u0026#34;-ExcludeProperty\u0026#34;, \u0026#34;-ExcludeDifferent\u0026#34;, \u0026#34;-Exclude\u0026#34;, \u0026#34;-Exception\u0026#34;, \u0026#34;-Examples\u0026#34;, \u0026#34;-ErrorVariable\u0026#34;, \u0026#34;-ErrorRecord\u0026#34;, \u0026#34;-ErrorId\u0026#34;, \u0026#34;-ErrorAction\u0026#34;, \u0026#34;-End\u0026#34;, \u0026#34;-Encoding\u0026#34;, \u0026#34;-DisplayName\u0026#34;, \u0026#34;-DisplayHint\u0026#34;, \u0026#34;-DisplayError\u0026#34;, \u0026#34;-DifferenceObject\u0026#34;, \u0026#34;-Detailed\u0026#34;, \u0026#34;-Destination\u0026#34;, \u0026#34;-Description\u0026#34;, \u0026#34;-Descending\u0026#34;, \u0026#34;-Depth\u0026#34;, \u0026#34;-DependsOn\u0026#34;, \u0026#34;-Delimiter\u0026#34;, \u0026#34;-Debugger\u0026#34;, \u0026#34;-Debug\u0026#34;, \u0026#34;-Days\u0026#34;, \u0026#34;-Day\u0026#34;, \u0026#34;-Date\u0026#34;, \u0026#34;-CurrentOperation\u0026#34;, \u0026#34;-Culture\u0026#34;, \u0026#34;-Credential\u0026#34;, \u0026#34;-Count\u0026#34;, \u0026#34;-Container\u0026#34;, \u0026#34;-Confirm\u0026#34;, \u0026#34;-ComputerName\u0026#34;, \u0026#34;-Component\u0026#34;, \u0026#34;-Completed\u0026#34;, \u0026#34;-ComObject\u0026#34;, \u0026#34;-CommandType\u0026#34;, \u0026#34;-Command\u0026#34;, \u0026#34;-Column\u0026#34;, \u0026#34;-Class\u0026#34;, \u0026#34;-ChildPath\u0026#34;, \u0026#34;-Character\u0026#34;, \u0026#34;-Certificate\u0026#34;, \u0026#34;-CategoryTargetType\u0026#34;, \u0026#34;-CategoryTargetName\u0026#34;, \u0026#34;-CategoryReason\u0026#34;, \u0026#34;-CategoryActivity\u0026#34;, \u0026#34;-Category\u0026#34;, \u0026#34;-CaseSensitive\u0026#34;, \u0026#34;-Body\u0026#34;, \u0026#34;-BinaryPathName\u0026#34;, \u0026#34;-Begin\u0026#34;, \u0026#34;-BackgroundColor\u0026#34;, \u0026#34;-Average\u0026#34;, \u0026#34;-AutoSize\u0026#34;, \u0026#34;-Audit\u0026#34;, \u0026#34;-AsString\u0026#34;, \u0026#34;-AsSecureString\u0026#34;, \u0026#34;-AsPlainText\u0026#34;, \u0026#34;-As\u0026#34;, \u0026#34;-ArgumentList\u0026#34;, \u0026#34;-AppendPath\u0026#34;, \u0026#34;-Append\u0026#34;, \u0026#34;-Adjust\u0026#34;, \u0026#34;-Activity\u0026#34;, \u0026#34;-AclObject\u0026#34; ]; brush.push(options, {klass: \u0026#39;option\u0026#39;}); // Operators var operators = [ \u0026#34;-eq\u0026#34;, \u0026#34;-ne\u0026#34;, \u0026#34;-gt\u0026#34;, \u0026#34;-ge\u0026#34;, \u0026#34;-lt\u0026#34;, \u0026#34;-le\u0026#34;, \u0026#34;-ieq\u0026#34;, \u0026#34;-ine\u0026#34;, \u0026#34;-igt\u0026#34;, \u0026#34;-ige\u0026#34;, \u0026#34;-ilt\u0026#34;, \u0026#34;-ile\u0026#34;, \u0026#34;-ceq\u0026#34;, \u0026#34;-cne\u0026#34;, \u0026#34;-cgt\u0026#34;, \u0026#34;-cge\u0026#34;, \u0026#34;-clt\u0026#34;, \u0026#34;-cle\u0026#34;, \u0026#34;-like\u0026#34;, \u0026#34;-notlike\u0026#34;, \u0026#34;-match\u0026#34;, \u0026#34;-notmatch\u0026#34;, \u0026#34;-ilike\u0026#34;, \u0026#34;-inotlike\u0026#34;, \u0026#34;-imatch\u0026#34;, \u0026#34;-inotmatch\u0026#34;, \u0026#34;-clike\u0026#34;, \u0026#34;-cnotlike\u0026#34;, \u0026#34;-cmatch\u0026#34;, \u0026#34;-cnotmatch\u0026#34;, \u0026#34;-contains\u0026#34;, \u0026#34;-notcontains\u0026#34;, \u0026#34;-icontains\u0026#34;, \u0026#34;-inotcontains\u0026#34;, \u0026#34;-ccontains\u0026#34;, \u0026#34;-cnotcontains\u0026#34;, \u0026#34;-isnot\u0026#34;, \u0026#34;-is\u0026#34;, \u0026#34;-as\u0026#34;, \u0026#34;-replace\u0026#34;, \u0026#34;-ireplace\u0026#34;, \u0026#34;-creplace\u0026#34;, \u0026#34;-and\u0026#34;, \u0026#34;-or\u0026#34;, \u0026#34;-band\u0026#34;, \u0026#34;-bor\u0026#34;, \u0026#34;-not\u0026#34;, \u0026#34;-bnot\u0026#34;, \u0026#34;-f\u0026#34;, \u0026#34;-casesensitive\u0026#34;, \u0026#34;-exact\u0026#34;, \u0026#34;-file\u0026#34;, \u0026#34;-regex\u0026#34;, \u0026#34;-wildcard\u0026#34;, \u0026#34;+=\u0026#34;, \u0026#34;-=\u0026#34;, \u0026#34;*=\u0026#34;, \u0026#34;/=\u0026#34;, \u0026#34;%=\u0026#34;, \u0026#34;*\u0026#34;, \u0026#34;/\u0026#34;, \u0026#34;%\u0026#34;, \u0026#34;=\u0026#34;, \u0026#34;!\u0026#34; , \u0026#34;+\u0026#34;, \u0026#34;-\u0026#34; ]; brush.push(operators, {klass: \u0026#39;operator\u0026#39;}); // Symbols var symbols = [ \u0026#34;(\u0026#34;, \u0026#34;)\u0026#34;, \u0026#34;[\u0026#34;, \u0026#34;]\u0026#34;, \u0026#34;{\u0026#34;, \u0026#34;}\u0026#34;, \u0026#34;\u0026#34;, \u0026#34;|\u0026#34;, \u0026#34;\u0026amp;\u0026#34;, \u0026#34;@\u0026#34; ]; brush.push(symbols, {klass: \u0026#39;symbol\u0026#39;}); // Constants var constants = [ \u0026#34;SilentlyContinue\u0026#34; ]; brush.push(constants, {klass: \u0026#39;constant\u0026#39;}); // Variables brush.push({ pattern: /($|@|%)w+/gi, klass: \u0026#39;variable\u0026#39; }); // Comments brush.push(Syntax.lib.perlStyleComment); brush.push(Syntax.lib.webLink); // Strings brush.push(Syntax.lib.singleQuotedString); brush.push(Syntax.lib.doubleQuotedString); brush.push(Syntax.lib.stringEscape); // Numbers brush.push(Syntax.lib.decimalNumber); brush.push(Syntax.lib.hexNumber); // Functions brush.push(Syntax.lib.cStyleFunction); }); You\u0026rsquo;ll also need the fitting cascading style sheet for this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 .syntax .powershell .cmdlet, .syntax .powershell .alias { color: #008080; font-weight: bold; } .syntax .powershell .symbol { color: pink; } .syntax .powershell .variable { color: #800080; font-style: normal; font-weight: bold; } .syntax .powershell .constant { color: #ff3333; } .syntax .powershell .keyword { color: #0000FF; } .syntax .powershell .operator { color: #FF0000; } .syntax .powershell .option { color: #008080; font-style: italic; } .syntax .powershell .comment { color: #008000; font-style: normal; } .syntax .powershell .string { color: #800000; } .syntax .powershell .number { color: #000000; } I was also trying to create an \u0026quot; addon language\u0026quot; for PowerShell, PowerCLI. But that didn\u0026rsquo;t work right and I guess I\u0026rsquo;ll have to talk to the guy writing jQuery.Syntax on how to properly use Syntax.brushes.dependency.\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-11-05_powershell-brush-for-jquery-syntax/","summary":"\u003cp\u003eAs you might have noticed, I\u0026rsquo;m using \u003ca href=\"http://www.oriontransfer.co.nz/software/jquery-syntax/\"\u003ejQuery.Syntax\u003c/a\u003e as my Syntax Highlighting engine. As I recently started writing PowerShell scripts, I wanted syntax hightlighting for it.\u003c/p\u003e\n\u003cp\u003eSince I knew, someone already wrote syntax highlighting for \u003ca href=\"http://www.aarebrot.net/site/index.php/downloads/19-powershell-geshi-language-file\"\u003eGeSHi for PowerShell\u003c/a\u003e (I am lazy after all!), I simply took the color scheme (shame on me), and made hacked ahead. After about three hours (yeah, I had some trouble with editing the wrong damn file), I came up with this:\u003c/p\u003e","title":"PowerShell brush for jQuery-Syntax"},{"content":"Today I\u0026rsquo;ve been fighting with Solaris 10 and the SMF Manifest (others would call it init-script \u0026hellip;). Since I wanted to do it the proper way (I could have used a \u0026ldquo;old-style\u0026rdquo; init-script, but I didn\u0026rsquo;t wanna ..), I ended up combing the interweb for examples .. As it turns out, not even IBM has documented a way, on how to do this.\nIn the end this is what I\u0026rsquo;ve come up with:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 \u0026lt;?xml version=\u0026#39;1.0\u0026#39;?\u0026gt; \u0026lt;!DOCTYPE service_bundle SYSTEM \u0026#39;/usr/share/lib/xml/dtd/service_bundle.dtd.1\u0026#39;\u0026gt; \u0026lt;!-- mkdir /var/svc/manifest/application/dsmc chmod 755 /var/svc/manifest/application/dsmc chown root:bin /var/svc/manifest/application/dsmc \u0026lt;den inhalt dieser datei per vi nach /var/svc/manifest/application/dsmc/dsmc.xml importieren svcadm -v import /var/svc/manifest/application/dsmc/dsmc.xml svcadm enable application/dsmc --\u0026gt; \u0026lt;service_bundle type=\u0026#39;manifest\u0026#39; name=\u0026#39;TIVsmCba:dsmc\u0026#39;\u0026gt; \u0026lt;service name=\u0026#39;application/dsmc\u0026#39; type=\u0026#39;service\u0026#39; version=\u0026#39;0\u0026#39;\u0026gt; \u0026lt;create_default_instance enabled=\u0026#39;true\u0026#39;/\u0026gt; \u0026lt;single_instance/\u0026gt; \u0026lt;dependency name=\u0026#39;fs-local\u0026#39; grouping=\u0026#39;require_all\u0026#39; restart_on=\u0026#39;none\u0026#39; type=\u0026#39;service\u0026#39;\u0026gt; \u0026lt;service_fmri value=\u0026#39;svc:/system/filesystem/local\u0026#39;/\u0026gt; \u0026lt;/dependency\u0026gt; \u0026lt;dependency name=\u0026#39;net-physical\u0026#39; grouping=\u0026#39;require_all\u0026#39; restart_on=\u0026#39;none\u0026#39; type=\u0026#39;service\u0026#39;\u0026gt; \u0026lt;service_fmri value=\u0026#39;svc:/network/physical\u0026#39;/\u0026gt; \u0026lt;/dependency\u0026gt; \u0026lt;exec_method name=\u0026#39;start\u0026#39; type=\u0026#39;method\u0026#39; exec=\u0026#39;/opt/tivoli/tsm/client/ba/bin/dsmc.helper\u0026#39; timeout_seconds=\u0026#39;60\u0026#39;\u0026gt; \u0026lt;method_context working_directory=\u0026#39;/opt/tivoli/tsm/client/ba/bin\u0026#39;/\u0026gt; \u0026lt;/exec_method\u0026gt; \u0026lt;exec_method name=\u0026#39;stop\u0026#39; type=\u0026#39;method\u0026#39; exec=\u0026#39;/usr/bin/pkill dsmc\u0026#39; timeout_seconds=\u0026#39;60\u0026#39;\u0026gt; \u0026lt;method_context/\u0026gt; \u0026lt;/exec_method\u0026gt; \u0026lt;stability value=\u0026#39;Unstable\u0026#39;/\u0026gt; \u0026lt;template\u0026gt; \u0026lt;common_name\u0026gt; \u0026lt;loctext xml:lang=\u0026#39;C\u0026#39;\u0026gt;Tivoli Storage Manager Client Scheduler\u0026lt;/loctext\u0026gt; \u0026lt;/common_name\u0026gt; \u0026lt;/template\u0026gt; \u0026lt;/service\u0026gt; \u0026lt;/service_bundle\u0026gt; However, in order to get the scheduler client working on Solaris, I had to create a little helper script in /opt/tivoli/tsm/client/ba/bin named dsmc.helper:\n1 2 3 4 5 6 7 #!/bin/bash export DSM_DIR=\u0026#34;/opt/tivoli/tsm/client/ba/bin\u0026#34; export DSM_LOG=\u0026#34;/opt/tivoli/tsm/client/ba/bin\u0026#34; export DSM_CONFIG=\u0026#34;/usr/bin/dsm.opt\u0026#34; $DSM_DIR/dsmc sched \u0026amp;\u0026gt;/dev/null \u0026amp; With that, I was able to automate the TSM Scheduler Client startup on Solaris.\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-10-27_tsm-client-service-script-for-solaris-10/","summary":"\u003cp\u003eToday I\u0026rsquo;ve been fighting with Solaris 10 and the SMF Manifest (others would call it init-script \u0026hellip;). Since I wanted to do it the proper way (I could have used a \u0026ldquo;old-style\u0026rdquo; init-script, but I didn\u0026rsquo;t wanna ..), I ended up combing the interweb for examples .. As it turns out, not even IBM has documented a way, on how to do this.\u003c/p\u003e\n\u003cp\u003eIn the end this is what I\u0026rsquo;ve come up with:\u003c/p\u003e","title":"TSM Client: Service Script for Solaris 10"},{"content":"We\u0026rsquo;ve been dealing with authentification issues on newly delivered HP Proliant BL460c G6 blade servers. Most threads on HPs customer forum, suggests changing the NIC driver, embedded within the WDS boot image.\nWe tried that, but still were getting the following error:\nWDS: installation issues\nAs it turns out, it ain\u0026rsquo;t really so damn hard .. we tried several times changing various things within the boot image, but it still didn\u0026rsquo;t change anything. Somehow it was rather easy.\nA quick look at the date/time on the blade turned up a surprising fact:\nWDS image: correcting time\n)\u0026gt;}}\nThe current time/date is way off. No clue why, and apparently there\u0026rsquo;s no NTP client (in any variant - no VBS, no command line) to fix this.\nSo a simple date, followed by time fixed the issue. Afterwards the boot image is able to logon with the passed credentials.\nWDS installation - issues fixed\nHowever, this change isn\u0026rsquo;t just limited to the ProLiant BL460c G6, it\u0026rsquo;s applicable to any system being installed through a WDS that authenticates against Active Directory and is brand new (as in the system time is still waaay off!).\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-10-22_install-issues-with-proliant-bl460c-g6-and-windows-deployment-services/","summary":"\u003cp\u003eWe\u0026rsquo;ve been dealing with authentification issues on newly delivered HP Proliant BL460c G6 blade servers. Most threads on HPs customer forum, suggests changing the NIC driver, embedded within the WDS boot image.\u003c/p\u003e\n\u003cp\u003eWe tried that, but still were getting the following error:\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"%28/uploads/2010/10/wds-installation-issues.png\"\n         alt=\"WDS: installation issues\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eWDS: installation issues\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eAs it turns out, it ain\u0026rsquo;t really so damn hard .. we tried several times changing various things within the boot image, but it still didn\u0026rsquo;t change anything. Somehow it was rather easy.\u003c/p\u003e","title":"Install issues with Proliant BL460c G6 and Windows Deployment Services"},{"content":"We\u0026rsquo;re currently thinking about automating Windows Updates and the involved disaster snapshot-copy to a degree, where we don\u0026rsquo;t need to intervene anymore.\nRight now, we already have a rudimentary scheduler in place, which does the reboots for some (200 ..) systems already. Now, we\u0026rsquo;d like to extend it to also cover the bi-weekly Windows Update spree.\nSince PowerShell (and PowerCLI) work quite well with vSphere automation, I cooked up the below script to first shutdown a virtual machine (for snapshot consistency reasons), then take a snapshot and power on the virtual machine again afterwards.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 # LICENSE: GNU General Public License v2 # COPYRIGHT: Copyright 2010 Christian Heim if ($args.length -lt 1) { Write-Host Write-Host \u0026#34; OfflineSnapshot.ps1 \u0026#34; Write-Host Write-Host \u0026#34; - Name of the virtual machine.\u0026#34; Write-Host \u0026#34; Please be aware: This script uses the supplied name to shutdown a virtual machine.\u0026#34; Write-Host \u0026#34; Make sure, that a) the name is unique before using this script and b) don\u0026#39;t blame me\u0026#34; Write-Host exit 1 } $vcenter = \u0026#34;vcenter.home.barfoo.org\u0026#34; # Add the VI-Snapin if it isn\u0026#39;t loaded already if ( (Get-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; -ErrorAction SilentlyContinue) -eq $null ) { Add-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; } Connect-VIServer -server $vcenter \u0026gt;$NULL 2\u0026gt;\u0026amp;1 $VMname = $args[0] $VMname = \u0026#34;$VMname*\u0026#34; $VM = Get-VM $VMname Shutdown-VMGuest -VM $VM -Confirm:$false \u0026gt;$NULL 2\u0026gt;\u0026amp;1 $VM = Get-VM $VMname # Need to loop here, since Shutdown-VMGuest is asynchronous, meaning it returns after # the command has been sent, instead of returning when the VM is powered off! While ($VM.PowerState -ne \u0026#34;PoweredOff\u0026#34;) { Start-Sleep -Seconds 5 $VM = Get-VM $VMname } $fulltime = Get-Date -f \u0026#34;F\u0026#34; $VM | New-Snapshot -Name ( Get-Date -f \u0026#34;d\u0026#34; ) -Description \u0026#34;Automatic snapshot for Windows-Updates, dated $fulltime\u0026#34; \u0026gt;$NULL Start-Sleep -Seconds 5 \u0026gt;$NULL Start-VM -VM $VM -Confirm:$false \u0026gt;$NULL ","permalink":"https://christian.blog.pakiheim.de/posts/2010-10-22_create-an-offline-snapshot-of-a-vm/","summary":"\u003cp\u003eWe\u0026rsquo;re currently thinking about automating Windows Updates and the involved disaster snapshot-copy to a degree, where we don\u0026rsquo;t need to intervene anymore.\u003c/p\u003e\n\u003cp\u003eRight now, we already have a rudimentary scheduler in place, which does the reboots for some (200 ..) systems already. Now, we\u0026rsquo;d like to extend it to also cover the bi-weekly Windows Update spree.\u003c/p\u003e\n\u003cp\u003eSince PowerShell (and PowerCLI) work quite well with vSphere automation, I cooked up the below script to first shutdown a virtual machine (for snapshot consistency reasons), then take a snapshot and power on the virtual machine again afterwards.\u003c/p\u003e","title":"Create an offline snapshot of a VM"},{"content":"Once again, I had the task of locking down Firefox, so users couldn\u0026rsquo;t use it to do any harm on a terminal server. Thankfully there\u0026rsquo;s the guide over at the Faculty of Engineering of the University of Waterloo (by David Collie), who shows which parts to modify.\nHowever, finding the particular part in the Javascript is rather hindersome, so here a short Unix-Diff (for thos who\u0026rsquo;re able to read unified diffs) as well as the whole file.\n1 2 3 4 5 6 7 8 9 10 11 12 --- browser.orig.js +++ browser.js @@ -3770,6 +3770,9 @@ onLocationChange: function (aWebProgress, aRequest, aLocationURI) { var location = aLocationURI ? aLocationURI.spec : \u0026#34;\u0026#34;; + if (location.match(/^file:/) || location.match(/^//) || location.match(/^resource:/) || (!location.match(/^about:blank/) \u0026amp;\u0026amp; location.match(/^about:/))) { + loadURI(\u0026#34;about:blank\u0026#34;); + } this._hostChanged = true; if (document.tooltipNode) { And here is the whole file: browser.js\nThis method however has three disadvantages:\nDisplay of local HTML files is disabled You need to replace the chrome/browser.jar each time, you update your Firefox It doesn\u0026rsquo;t work with Firefox 4! ","permalink":"https://christian.blog.pakiheim.de/posts/2010-10-12_locking-down-firefox/","summary":"\u003cp\u003eOnce again, I had the task of locking down Firefox, so users couldn\u0026rsquo;t use it to do any harm on a terminal server. Thankfully there\u0026rsquo;s the guide over at the \u003ca href=\"http://www.engineering.uwaterloo.ca/twiki/bin/view/Linux/FirefoxLockdown\"\u003eFaculty of Engineering of the University of Waterloo\u003c/a\u003e (by David Collie), who shows which parts to modify.\u003c/p\u003e\n\u003cp\u003eHowever, finding the particular part in the Javascript is rather hindersome, so here a short Unix-Diff (for thos who\u0026rsquo;re able to read unified diffs) as well as the whole file.\u003c/p\u003e","title":"Locking down Firefox"},{"content":"Well, PowerCLI makes my life a little bit easier. Believe it or not, each of us vCenter infrastructure admins has one of these: a Windows admin, thinking a snapshot is also a backup. Thankfully, Alan Renouf over at virtu-al.net wrote the SnapReminder, which already helped me a lot! However, occasionally the script isn\u0026rsquo;t finding the snapshot author (for whatever reason).\nSince I want a notification in that case, I modified the script a little bit to suit my needs.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 # - SnapReminder V1.0 By Virtu-Al - http://virtu-al.net # # Please use the below variables to define your settings before use # $smtpServer = \u0026#34;smtp.home.barfoo.org\u0026#34; $MailFrom = \u0026#34;vcenter@barfoo.org\u0026#34; $adminmail = \u0026#34;christian.heim@barfoo.org\u0026#34; $VISRV = \u0026#34;vcenter.home.barfoo.org\u0026#34; # Add the VI-Snapin if it isn\u0026#39;t loaded already if ( (Get-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; -ErrorAction SilentlyContinue) -eq $null ) { Add-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; } function Find-User ($username){ if ($username -ne $null) { $usr = (($username.split(\u0026#34;\u0026#34;))[1]) $root = [ADSI]\u0026#34;\u0026#34; $filter = (\u0026#34;(\u0026amp;(objectCategory=user)(samAccountName=$Usr))\u0026#34;) $ds = new-object system.DirectoryServices.DirectorySearcher($root,$filter) $ds.PageSize = 1000 $ds.FindOne() } } function Get-SnapshotTree{ param($tree, $target) $found = $null foreach($elem in $tree){ if($elem.Snapshot.Value -eq $target.Value){ $found = $elem continue } } if($found -eq $null -and $elem.ChildSnapshotList -ne $null){ $found = Get-SnapshotTree $elem.ChildSnapshotList $target } return $found } function Get-SnapshotExtra ($snap){ $guestName = $snap.VM # The name of the guest $tasknumber = 999 # Windowsize of the Task collector $taskMgr = Get-View TaskManager # Create hash table. Each entry is a create snapshot task $report = @{} $filter = New-Object VMware.Vim.TaskFilterSpec $filter.Time = New-Object VMware.Vim.TaskFilterSpecByTime $filter.Time.beginTime = (($snap.Created).AddSeconds(-5)) $filter.Time.timeType = \u0026#34;startedTime\u0026#34; $collectionImpl = Get-View ($taskMgr.CreateCollectorForTasks($filter)) $dummy = $collectionImpl.RewindCollector $collection = $collectionImpl.ReadNextTasks($tasknumber) while($collection -ne $null){ $collection | where {$_.DescriptionId -eq \u0026#34;VirtualMachine.createSnapshot\u0026#34; -and $_.State -eq \u0026#34;success\u0026#34; -and $_.EntityName -eq $guestName} | %{ $row = New-Object PsObject $row | Add-Member -MemberType NoteProperty -Name User -Value $_.Reason.UserName $vm = Get-View $_.Entity $snapshot = Get-SnapshotTree $vm.Snapshot.RootSnapshotList $_.Result $key = $_.EntityName + \u0026#34;\u0026amp;\u0026#34; + ($snapshot.CreateTime.ToString()) $report[$key] = $row } $collection = $collectionImpl.ReadNextTasks($tasknumber) } $collectionImpl.DestroyCollector() # Get the guest\u0026#39;s snapshots and add the user $snapshotsExtra = $snap | % { $key = $_.vm.Name + \u0026#34;\u0026amp;\u0026#34; + ($_.Created.ToString()) if($report.ContainsKey($key)){ $_ | Add-Member -Force -MemberType NoteProperty -Name Creator -Value $report[$key].User } $_ } $snapshotsExtra } Function SnapMail ($Mailto, $snapshot) { $msg = new-object Net.Mail.MailMessage $smtp = new-object Net.Mail.SmtpClient($smtpServer) $msg.From = $MailFrom $msg.ReplyTo = $adminmail if (!$mailto) { $msg.To.Add($adminmail) } else { $msg.To.Add($mailto) $msg.CC.Add($adminmail) } $msg.Subject = \u0026#34;Snapshot Reminder for $($snapshot.VM)\u0026#34; $MailText = @\u0026#34; There is an existing snapshot for the VM $($snapshot.VM) wurde am $($snapshot.Created.ToString(\u0026#34;dddd, d. MMMM yyyy um HH:mm:ss\u0026#34;)). Please check, whether this snapshot is still needed, otherwise please delete it! Just a short reminder: A snapshot doesn\u0026#39;t replace a backup! Name: $($snapshot.Name) Description: $($snapshot.Description) Snapshot size: $([math]::Round($snapshot.SizeMB * 1MB / 1GB))GB \u0026#34;@ $msg.Body = $MailText $smtp.Send($msg) } Connect-VIServer $VISRV foreach ($snap in (Get-VM | Get-Snapshot | Where {$_.Created -lt ((Get-Date).AddDays(-5))})){ Get-SnapshotExtra $snap $SnapshotInfo = Get-SnapshotExtra $snap $mailto = ((Find-User $SnapshotInfo.Creator).Properties.mail) SnapMail $mailto $SnapshotInfo } ","permalink":"https://christian.blog.pakiheim.de/posts/2010-10-08_modified-snapreminder/","summary":"\u003cp\u003eWell, PowerCLI makes my life a little bit easier. Believe it or not, each of us vCenter infrastructure admins has one of these: a Windows admin, thinking a snapshot is also a backup. Thankfully, Alan Renouf over at \u003ca href=\"http://www.virtu-al.net/\"\u003evirtu-al.net\u003c/a\u003e wrote the \u003ca href=\"http://www.virtu-al.net/2009/06/22/powercli-snapreminder/\"\u003eSnapReminder\u003c/a\u003e, which already helped me a lot! However, occasionally the script isn\u0026rsquo;t finding the snapshot author (for whatever reason).\u003c/p\u003e\n\u003cp\u003eSince I want a notification in that case, I modified the script a little bit to suit my needs.\u003c/p\u003e","title":"Modified SnapReminder"},{"content":"These last few weeks, I\u0026rsquo;ve been toying with PowerCLI (and PowerShell for that matter). One thing I do have to say, is that Microsoft finally did it right! It\u0026rsquo;s a useable, program-able command line interface for Windows after all! Thanks to Ivo Beerens and his post \u0026quot; Best practices for HP EVA, vSphere 4 and Round Robin multi-pathing\u0026quot;, I was able to come up with the below:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 # LICENSE: GNU General Public License v2. (see LICENSE.txt) # COPYRIGHT: Copyright 2010 Christian Heim \u0026lt;christian.heim@barfoo.org\u0026gt; # Add the VI-Snapin if it isn\u0026#39;t loaded already if ( (Get-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; -ErrorAction SilentlyContinue) -eq $null ) { Add-PSSnapin -Name \u0026#34;VMware.VimAutomation.Core\u0026#34; } if ($args.length -lt 2) { Write-Host Write-Host \u0026#34;fix_multipathing: \u0026#34; Write-Host \u0026#34; - Display-Name of the vCenter cluster, we should check all LUNs\u0026#34; Write-Host \u0026#34; on all available Hosts, and set the Path Selection Policy\u0026#34; Write-Host \u0026#34; to the selected one.\u0026#34; Write-Host \u0026#34;\u0026#34; Write-Host \u0026#34; - Path Selection Policy\u0026#34; Write-Host \u0026#34; Possible:\u0026#34; Write-Host \u0026#34; - RoundRobin (VMW_PSP_RR, Round Robin)\u0026#34; Write-Host \u0026#34; - Fixed (VMW_PSP_FIXED, Fixed)\u0026#34; Write-Host \u0026#34; - MostRecentlyUsed (VMW_PSP_MRU , Most Recently Used)\u0026#34; Write-Host exit 1 } $vcserver = \u0026#34;vcenter.home.barfoo.org\u0026#34; $cluster = $args[0] $target_policy = $args[1] # Since I do have only SVC-Disks connected to my hosts, I limit the search to those $canonical_name = \u0026#34;naa.6005076801808021*\u0026#34; Write-Host \u0026#34;Target vCenter Cluster: \u0026#34; $cluster Write-Host \u0026#34;Target PSP: \u0026#34; $target_policy Write-Host switch ($target_policy) { RoundRobin { $display_policy = \u0026#34;VMW_PSP_RR\u0026#34;; } MostRecentlyUsed { $display_policy = \u0026#34;VMW_PSP_MRU\u0026#34;; } Fixed { $display_policy = \u0026#34;VMW_PSP_FIXED\u0026#34;; } default { Write-Warning \u0026#34;Unknown PSP selected! Please consult the help and try again.\u0026#34;; exit } } Connect-VIServer $vcserver \u0026gt;/dev/null 2\u0026gt;\u0026amp;1 Write-Host \u0026#34;Found \u0026#34;@(Get-VMHost -location ( get-cluster $cluster ) | Get-ScsiLun -CanonicalName $canonical_name -LunType \u0026#34;disk\u0026#34; | where {$_.MultipathPolicy -ne $target_policy }).Count\u0026#34; LUNs in \u0026#34;$cluster\u0026#34; not using Path Selection Policy \u0026#34;$display_policy Get-VMHost -location ( get-cluster $cluster ) | Get-ScsiLun -CanonicalName $canonical_name -LunType \u0026#34;disk\u0026#34; | where {$_.MultipathPolicy -ne $target_policy } | Set-ScsiLun -MultipathPolicy $target_policy \u0026gt;/dev/null 2\u0026gt;\u0026amp;1 This works great, however you could make it work on the whole vCenter inventory, which I don\u0026rsquo;t want. We usually add LUNs to a single cluster at one time. Only thing you might need to change, is the canonical name. Mine simply says \u0026ldquo;find all SVC LUNs\u0026rdquo; and you might need to change it, if you\u0026rsquo;re using a different storage.\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-10-07_fix-path-selection-policy-for-a-whole-vcenter-cluster/","summary":"\u003cp\u003eThese last few weeks, I\u0026rsquo;ve been toying with PowerCLI (and PowerShell for that matter). One thing I do have to say, is that Microsoft finally did it right! It\u0026rsquo;s a useable, program-able command line interface for Windows after all! Thanks to \u003ca href=\"http://www.ivobeerens.nl/\"\u003eIvo Beerens\u003c/a\u003e and his post \u0026quot; \u003ca href=\"http://www.ivobeerens.nl/?p=465\"\u003eBest practices for HP EVA, vSphere 4 and Round Robin multi-pathing\u003c/a\u003e\u0026quot;, I was able to come up with the below:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e44\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-45\"\u003e45\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-46\"\u003e46\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-47\"\u003e47\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# LICENSE:     GNU General Public License v2. (see LICENSE.txt)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# COPYRIGHT:   Copyright 2010 Christian Heim \u0026lt;christian.heim@barfoo.org\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Add the VI-Snapin if it isn\u0026#39;t loaded already\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ePSSnapin\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eName\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;VMware.VimAutomation.Core\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eErrorAction\u003c/span\u003e \u003cspan class=\"n\"\u003eSilentlyContinue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eeq\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eAdd\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ePSSnapin\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eName\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;VMware.VimAutomation.Core\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elength\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003elt\u003c/span\u003e \u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;fix_multipathing:  \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;     - Display-Name of the vCenter cluster, we should check all LUNs\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;                     on all available Hosts, and set the Path Selection Policy\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;                     to the selected one.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;              - Path Selection Policy\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;                     Possible:\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;                        - RoundRobin (VMW_PSP_RR, Round Robin)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;                        - Fixed (VMW_PSP_FIXED, Fixed)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;                        - MostRecentlyUsed (VMW_PSP_MRU , Most Recently Used)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eexit\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evcserver\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;vcenter.home.barfoo.org\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ecluster\u003c/span\u003e  \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etarget_policy\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Since I do have only SVC-Disks connected to my hosts, I limit the search to those\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ecanonical_name\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;naa.6005076801808021*\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Target vCenter Cluster: \u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ecluster\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Target PSP: \u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etarget_policy\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eswitch\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etarget_policy\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eRoundRobin\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003edisplay_policy\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;VMW_PSP_RR\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eMostRecentlyUsed\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003edisplay_policy\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;VMW_PSP_MRU\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eFixed\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003edisplay_policy\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;VMW_PSP_FIXED\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003edefault\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eWarning\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Unknown PSP selected! Please consult the help and try again.\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"n\"\u003eexit\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eConnect\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVIServer\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003evcserver\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;/\u003c/span\u003e\u003cspan class=\"n\"\u003edev\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e \u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u0026amp;\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eWrite\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHost\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Found \u0026#34;\u003c/span\u003e\u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVMHost\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003elocation\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ecluster\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ecluster\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eScsiLun\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eCanonicalName\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ecanonical_name\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eLunType\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;disk\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003ewhere\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003e_\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eMultipathPolicy\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ene\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etarget_policy\u003c/span\u003e \u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCount\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34; LUNs in \u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ecluster\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34; not using Path Selection Policy \u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003edisplay_policy\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVMHost\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003elocation\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e \u003cspan class=\"n\"\u003eget\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ecluster\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ecluster\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eGet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eScsiLun\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eCanonicalName\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ecanonical_name\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eLunType\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;disk\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e  \u003cspan class=\"n\"\u003ewhere\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003e_\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eMultipathPolicy\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ene\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etarget_policy\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"n\"\u003eSet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eScsiLun\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eMultipathPolicy\u003c/span\u003e \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etarget_policy\u003c/span\u003e  \u003cspan class=\"o\"\u003e\u0026gt;/\u003c/span\u003e\u003cspan class=\"n\"\u003edev\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e \u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u0026amp;\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThis works great, however you could make it work on the whole vCenter inventory, which I don\u0026rsquo;t want. We usually add LUNs to a single cluster at one time. Only thing you might need to change, is the canonical name. Mine simply says \u0026ldquo;find all SVC LUNs\u0026rdquo; and you might need to change it, if you\u0026rsquo;re using a different storage.\u003c/p\u003e","title":"Fix Path Selection Policy for a whole vCenter Cluster"},{"content":"As you can see, the blog is finally back! I haven\u0026rsquo;t been visiting the blog on a daily basis (actually, I haven\u0026rsquo;t been here for some time), so it apparently took me ten days to figure that the wp_posts table of my wordpress installation was marked as crashed.\nTo repair that, I had to take down the MySQL instance and use myisamchk on the .MYI file. Once again, it\u0026rsquo;s back now, only one draft has disappeared into thin air (well, that ain\u0026rsquo;t so bad), but that\u0026rsquo;s a minor loss.\nI still have some stuff I wanna share, but that needs me to be at work (which I obviously ain\u0026rsquo;t right now, hehe). So I guess either tomorrow or on Saturday (which I\u0026rsquo;m at work \u0026ndash; again!), I\u0026rsquo;m gonna draft up some of the stuff I\u0026rsquo;ve been meaning to publish \u0026hellip; maybe \u0026#x1f604;\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-09-30_blog-is-back/","summary":"\u003cp\u003eAs you can see, the blog is finally back! I haven\u0026rsquo;t been visiting the blog on a daily basis (actually, I haven\u0026rsquo;t been here for some time), so it apparently took me ten days to figure that the wp_posts table of my wordpress installation was marked as crashed.\u003c/p\u003e\n\u003cp\u003eTo repair that, I had to take down the MySQL instance and use myisamchk on the .MYI file. Once again, it\u0026rsquo;s back now, only one draft has disappeared into thin air (well, that ain\u0026rsquo;t so bad), but that\u0026rsquo;s a minor loss.\u003c/p\u003e","title":"Blog is back!"},{"content":"We do have some customers, who get charged on a monthly basis for their SAN usage. We already had \u0026ldquo;reporting\u0026rdquo; in place, but that wasn\u0026rsquo;t very flexible. So I went ahead and rewrote the current reporting script from scratch, and this is what I\u0026rsquo;ve come up with:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 #/bin/bash # LICENSE: GNU General Public License v2. (see LICENSE.txt) # COPYRIGHT: Copyright 2010 Christian Heim \u0026lt;christian.heim@barfoo.org\u0026gt; svc_sshkey=\u0026#34;~/.ssh/svc-id_dsa\u0026#34; svc_addr=\u0026#34;10.144.0.150\u0026#34; svc_user=\u0026#34;admin\u0026#34; if [ -z $1 ] ; then echo \u0026#34;Please rerun this script with some kind of filter value\u0026#34; echo \u0026#34;(for example \u0026#39;$0 NAS\u0026#39;)\u0026#34; exit 1 else filter=$1 fi IFS=\u0026#34; \u0026#34; DISK=\u0026#34;$( ssh -i $svc_sshkey -l $svc_user $svc_addr svcinfo lsvdisk -nohdr -bytes -delim : | egrep -i \u0026#34;V.*$filter\u0026#34; | cut -d: -f2,8 | sort )\u0026#34; # Get a unique list of systems SYSTEMS=\u0026#34;$( echo $DISK | sed \u0026#34;s, ,n,g\u0026#34; | cut -d -f1 | sed \u0026#39;s,^V,,\u0026#39; | cut -d_ -f1 | sort -u )\u0026#34; for system in $SYSTEMS ; do VDISKS=\u0026#34;$( echo $DISK | sed \u0026#34;s, ,n,g\u0026#34; | grep $system | sed \u0026#34;s,:,: ,\u0026#34; )\u0026#34; SYSTEM_TOTAL=\u0026#34;$( echo $DISK | sed \u0026#34;s, ,n,g\u0026#34; | grep $system | cut -d: -f2 | awk \u0026#39;{SUM += $1} END { printf \u0026#34;%.2f\u0026#34;, SUM }\u0026#39; )\u0026#34; for vdisk in $VDISKS ; do NAME=\u0026#34;$( echo $vdisk | cut -d: -f1 )\u0026#34; SIZE=\u0026#34;$( echo $vdisk | cut -d: -f2 | sed \u0026#34;s,^ ,,\u0026#34; )\u0026#34; GB_SIZE=\u0026#34;$( echo \u0026#34;$SIZE / 1024 / 1024 / 1024\u0026#34; | bc )\u0026#34; if [ $GB_SIZE -eq 0 ] ; then GB_SIZE=\u0026#34;$( echo \u0026#34;scale=2; $SIZE / 1024 / 1024 / 1024\u0026#34; | bc )\u0026#34; GB_SIZE=\u0026#34;${GB_SIZE/./0.}\u0026#34; fi echo \u0026#34;$NAME: ${GB_SIZE/./,} GB\u0026#34; done SUB_TOTAL_SYSTEM=\u0026#34;$( echo \u0026#34;scale=2; $SYSTEM_TOTAL / 1024 / 1024 / 1024\u0026#34; | bc )\u0026#34; echo \u0026#34;SUB TOTAL: ${SUB_TOTAL_SYSTEM/./,} GB\u0026#34; echo done TOTAL=\u0026#34;$( echo $DISK | sed \u0026#34;s, ,n,g\u0026#34; | cut -d: -f2 | awk \u0026#39;{SUM += $1} END { printf \u0026#34;%.2f\u0026#34;, SUM }\u0026#39; )\u0026#34; TOTAL=\u0026#34;$( echo \u0026#34;scale=2; $TOTAL / 1024 / 1024 / 1024\u0026#34; | bc ) GB\u0026#34; echo \u0026#34;------------------------------------------------\u0026#34; echo $TOTAL exit 0 I gotta say, once again I learned a lot \u0026hellip; two new things about awk!\nI know the report itself doesn\u0026rsquo;t look that pretty, but it serves a purpose!\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-08-20_san-reporting/","summary":"\u003cp\u003eWe do have some customers, who get charged on a monthly basis for their SAN usage. We already had \u0026ldquo;reporting\u0026rdquo; in place, but that wasn\u0026rsquo;t very flexible. So I went ahead and rewrote the current reporting script from scratch, and this is what I\u0026rsquo;ve come up with:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e44\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-45\"\u003e45\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-46\"\u003e46\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-47\"\u003e47\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-48\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-48\"\u003e48\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-49\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-49\"\u003e49\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-50\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-50\"\u003e50\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-51\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-51\"\u003e51\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e#/bin/bash\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# LICENSE:     GNU General Public License v2. (see LICENSE.txt)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# COPYRIGHT:   Copyright 2010 Christian Heim \u0026lt;christian.heim@barfoo.org\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esvc_sshkey=\u0026#34;~/.ssh/svc-id_dsa\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esvc_addr=\u0026#34;10.144.0.150\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esvc_user=\u0026#34;admin\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eif [ -z $1 ] ; then\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  echo \u0026#34;Please rerun this script with some kind of filter value\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  echo \u0026#34;(for example \u0026#39;$0 NAS\u0026#39;)\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  exit 1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eelse\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  filter=$1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efi\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eIFS=\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eDISK=\u0026#34;$( ssh -i $svc_sshkey -l $svc_user $svc_addr svcinfo lsvdisk -nohdr -bytes -delim :\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          | egrep -i \u0026#34;V.*$filter\u0026#34; | cut -d: -f2,8 | sort )\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# Get a unique list of systems\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSYSTEMS=\u0026#34;$( echo $DISK | sed \u0026#34;s, ,n,g\u0026#34; | cut -d  -f1 | sed \u0026#39;s,^V,,\u0026#39; | cut -d_ -f1 | sort -u )\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efor system in $SYSTEMS ; do\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  VDISKS=\u0026#34;$( echo $DISK | sed \u0026#34;s, ,n,g\u0026#34; | grep $system | sed \u0026#34;s,:,: ,\u0026#34; )\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  SYSTEM_TOTAL=\u0026#34;$( echo $DISK | sed \u0026#34;s, ,n,g\u0026#34; | grep $system | cut -d: -f2 | awk \u0026#39;{SUM += $1} END { printf \u0026#34;%.2f\u0026#34;, SUM }\u0026#39; )\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  for vdisk in $VDISKS ; do\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    NAME=\u0026#34;$( echo $vdisk | cut -d: -f1 )\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    SIZE=\u0026#34;$( echo $vdisk | cut -d: -f2 | sed \u0026#34;s,^ ,,\u0026#34; )\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    GB_SIZE=\u0026#34;$( echo \u0026#34;$SIZE / 1024 / 1024 / 1024\u0026#34; | bc )\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    if [ $GB_SIZE -eq 0 ] ; then\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      GB_SIZE=\u0026#34;$( echo \u0026#34;scale=2; $SIZE / 1024 / 1024 / 1024\u0026#34; | bc )\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      GB_SIZE=\u0026#34;${GB_SIZE/./0.}\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    fi\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    echo \u0026#34;$NAME: ${GB_SIZE/./,} GB\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  done\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  SUB_TOTAL_SYSTEM=\u0026#34;$( echo \u0026#34;scale=2; $SYSTEM_TOTAL / 1024 / 1024 / 1024\u0026#34; | bc )\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  echo \u0026#34;SUB TOTAL: ${SUB_TOTAL_SYSTEM/./,} GB\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  echo\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edone\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eTOTAL=\u0026#34;$( echo $DISK | sed \u0026#34;s, ,n,g\u0026#34; | cut -d: -f2  | awk \u0026#39;{SUM += $1} END { printf \u0026#34;%.2f\u0026#34;, SUM }\u0026#39; )\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eTOTAL=\u0026#34;$( echo \u0026#34;scale=2; $TOTAL / 1024 / 1024 / 1024\u0026#34; | bc ) GB\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eecho \u0026#34;------------------------------------------------\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eecho $TOTAL\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eexit 0\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eI gotta say, once again I learned a lot \u0026hellip; two \u003ca href=\"http://www.sunsite.ualberta.ca/Documentation/Gnu/gawk-3.1.0/html_chapter/gawk_14.html#SEC192\"\u003enew\u003c/a\u003e \u003ca href=\"http://www.commandlinefu.com/commands/view/1497/using-awk-to-sumcount-a-column-of-numbers.\"\u003ethings\u003c/a\u003e about awk!\u003c/p\u003e","title":"SAN reporting"},{"content":"It\u0026rsquo;s been one of these days (yeah, I know \u0026hellip; AGAIN). I was scheduled to depart from Stuttgart (STR) to Rostock - Laage (RLG) on 16:45 on Sunday. Well, if you know me, I did actually miss that flight the check-in for that flight by 15 minutes. 15 FUCKING minutes! Immediately called my Taxi (that is my parents) and told them to turn around, since they already had left to collect me from the airport ..\nI walked back outside, through the revolving door, and while inside the door decided to get back to the ticketing counter. I ended up booking another flight (paying another 30€ for the chanced flight), and landed three hours later in Berlin Tegel (TXL). Thanks to my parents (who collected me from Tegel, and spared me the three hour train travel \u0026ndash; like I did back in February), I was finally home around 1:00 AM the next day \u0026hellip;\nBut guess what, another lesson(s) learnt!\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-07-26_me-flying-chaos/","summary":"\u003cp\u003eIt\u0026rsquo;s been one of these days (yeah, I know \u0026hellip; \u003cstrong\u003eAGAIN\u003c/strong\u003e). I was scheduled to depart from Stuttgart (STR) to Rostock - Laage (RLG) on 16:45 on Sunday. Well, if you know me, I did actually miss that flight the check-in for that flight by 15 minutes. 15 \u003cstrong\u003eFUCKING\u003c/strong\u003e minutes! Immediately called my Taxi (that is my parents) and told them to turn around, since they already had left to collect me from the airport ..\u003c/p\u003e","title":"me + flying = chaos!"},{"content":"On all our servers in the basement, we do have bginfo installed, in order to quickly get certain information. Now as I was struggling with a big Service Pack roll out, I looked into making bginfo also display the OS architecture. But apparently it isn\u0026rsquo;t that easy \u0026hellip; At least bginfo doesn\u0026rsquo;t provide it by default.\nAfter (yet another hour in front of Google), I finally found what I was looking for. At first I didn\u0026rsquo;t limit the query on a specific CPU, but that turned out to be shitty (x32 being displayed twice, once for each CPU). But after limiting it to DeviceID=\u0026lsquo;CPU0\u0026rsquo; it works like a charm \u0026#x1f609;\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-06-18_displaying-windows-architecture-with-bginfo/","summary":"\u003cp\u003eOn all our servers in the basement, we do have \u003ca href=\"http://technet.microsoft.com/de-de/sysinternals/bb897557.aspx\"\u003ebginfo\u003c/a\u003e installed, in order to quickly get certain information. Now as I was struggling with a big Service Pack roll out, I looked into making bginfo also display the OS architecture. But apparently it isn\u0026rsquo;t that easy \u0026hellip; At least bginfo doesn\u0026rsquo;t provide it by default.\u003c/p\u003e\n\u003cp\u003eAfter (yet another hour in front of Google), I finally found what I was \u003ca href=\"http://stackoverflow.com/questions/1413409/how-to-determine-os-platform-with-wmi\"\u003elooking for\u003c/a\u003e. At first I didn\u0026rsquo;t limit the query on a specific CPU, but that turned out to be shitty (x32 being displayed twice, once for each CPU). But after limiting it to DeviceID=\u0026lsquo;CPU0\u0026rsquo; it works like a charm \u0026#x1f609;\u003c/p\u003e","title":"Displaying Windows Architecture with bginfo"},{"content":"It\u0026rsquo;s just past the first game of our national team, and the vuvuzela\u0026rsquo;s are actually getting on my nerves. It\u0026rsquo;s not really the vuvuzela\u0026rsquo;s per se, it\u0026rsquo;s just this one kid running around with it all day long. At first I was like \u0026ldquo;wtf kind of animal is this ?\u0026rdquo; Until I saw him running around with this weird instrument \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-06-13_vuvuzela-s-should-be-banned/","summary":"\u003cp\u003eIt\u0026rsquo;s just past the first game of our national team, and the vuvuzela\u0026rsquo;s are actually getting on my nerves. It\u0026rsquo;s not really the vuvuzela\u0026rsquo;s per se, it\u0026rsquo;s just this one kid running around with it all day long. At first I was like \u0026ldquo;wtf kind of animal is this ?\u0026rdquo; Until I saw him running around with this weird instrument \u0026hellip;\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"Vuvuzela\" loading=\"lazy\" src=\"http://upload.wikimedia.org/wikipedia/commons/3/37/Vuvuzela_red.jpg\"\u003e\u003c/p\u003e","title":"Vuvuzela's should be banned!"},{"content":"Well, we\u0026rsquo;ve been discussing our swap partitioning the last few days at work, and I finally got around to implementing it. Again, it proved to be kinda hard, basically because AutoYAST decides to do things differently. After trying different things, I came up with this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 \u0026lt;rule\u0026gt; \u0026lt;memsize\u0026gt; \u0026lt;match\u0026gt;32767\u0026lt;/match\u0026gt; \u0026lt;match_type\u0026gt;greater\u0026lt;/match_type\u0026gt; \u0026lt;/memsize\u0026gt; \u0026lt;result\u0026gt; \u0026lt;profile\u0026gt;system/swap/32G.xml\u0026lt;/profile\u0026gt; \u0026lt;continue config:type=\u0026#34;boolean\u0026#34;\u0026gt;false\u0026lt;/continue\u0026gt; \u0026lt;dont_merge config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;element\u0026gt;partition\u0026lt;/element\u0026gt; \u0026lt;/dont_merge\u0026gt; \u0026lt;/result\u0026gt; \u0026lt;/rule\u0026gt; \u0026lt;rule\u0026gt; \u0026lt;memsize\u0026gt; \u0026lt;match\u0026gt;16383\u0026lt;/match\u0026gt; \u0026lt;match_type\u0026gt;greater\u0026lt;/match_type\u0026gt; \u0026lt;/memsize\u0026gt; \u0026lt;result\u0026gt; \u0026lt;profile\u0026gt;system/swap/16G.xml\u0026lt;/profile\u0026gt; \u0026lt;continue config:type=\u0026#34;boolean\u0026#34;\u0026gt;false\u0026lt;/continue\u0026gt; \u0026lt;dont_merge config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;element\u0026gt;partition\u0026lt;/element\u0026gt; \u0026lt;/dont_merge\u0026gt; \u0026lt;/result\u0026gt; \u0026lt;/rule\u0026gt; \u0026lt;rule\u0026gt; \u0026lt;memsize\u0026gt; \u0026lt;match\u0026gt;8191\u0026lt;/match\u0026gt; \u0026lt;match_type\u0026gt;greater\u0026lt;/match_type\u0026gt; \u0026lt;/memsize\u0026gt; \u0026lt;result\u0026gt; \u0026lt;profile\u0026gt;system/swap/8G.xml\u0026lt;/profile\u0026gt; \u0026lt;continue config:type=\u0026#34;boolean\u0026#34;\u0026gt;false\u0026lt;/continue\u0026gt; \u0026lt;dont_merge config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;element\u0026gt;partition\u0026lt;/element\u0026gt; \u0026lt;/dont_merge\u0026gt; \u0026lt;/result\u0026gt; \u0026lt;/rule\u0026gt; \u0026lt;rule\u0026gt; \u0026lt;memsize\u0026gt; \u0026lt;match\u0026gt;4095\u0026lt;/match\u0026gt; \u0026lt;match_type\u0026gt;greater\u0026lt;/match_type\u0026gt; \u0026lt;/memsize\u0026gt; \u0026lt;result\u0026gt; \u0026lt;profile\u0026gt;system/swap/4G.xml\u0026lt;/profile\u0026gt; \u0026lt;continue config:type=\u0026#34;boolean\u0026#34;\u0026gt;false\u0026lt;/continue\u0026gt; \u0026lt;dont_merge config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;element\u0026gt;partition\u0026lt;/element\u0026gt; \u0026lt;/dont_merge\u0026gt; \u0026lt;/result\u0026gt; \u0026lt;/rule\u0026gt; \u0026lt;rule\u0026gt; \u0026lt;memsize\u0026gt; \u0026lt;match\u0026gt;2047\u0026lt;/match\u0026gt; \u0026lt;match_type\u0026gt;greater\u0026lt;/match_type\u0026gt; \u0026lt;/memsize\u0026gt; \u0026lt;result\u0026gt; \u0026lt;profile\u0026gt;system/swap/2G.xml\u0026lt;/profile\u0026gt; \u0026lt;continue config:type=\u0026#34;boolean\u0026#34;\u0026gt;false\u0026lt;/continue\u0026gt; \u0026lt;dont_merge config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;element\u0026gt;partition\u0026lt;/element\u0026gt; \u0026lt;/dont_merge\u0026gt; \u0026lt;/result\u0026gt; \u0026lt;/rule\u0026gt; \u0026lt;rule\u0026gt; \u0026lt;memsize\u0026gt; \u0026lt;match\u0026gt;1023\u0026lt;/match\u0026gt; \u0026lt;match_type\u0026gt;greater\u0026lt;/match_type\u0026gt; \u0026lt;/memsize\u0026gt; \u0026lt;result\u0026gt; \u0026lt;profile\u0026gt;system/swap/1G.xml\u0026lt;/profile\u0026gt; \u0026lt;continue config:type=\u0026#34;boolean\u0026#34;\u0026gt;false\u0026lt;/continue\u0026gt; \u0026lt;dont_merge config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;element\u0026gt;partition\u0026lt;/element\u0026gt; \u0026lt;/dont_merge\u0026gt; \u0026lt;/result\u0026gt; \u0026lt;/rule\u0026gt; \u0026lt;rule\u0026gt; \u0026lt;memsize\u0026gt; \u0026lt;match\u0026gt;1023\u0026lt;/match\u0026gt; \u0026lt;match_type\u0026gt;lower\u0026lt;/match_type\u0026gt; \u0026lt;/memsize\u0026gt; \u0026lt;result\u0026gt; \u0026lt;profile\u0026gt;system/swap/default.xml\u0026lt;/profile\u0026gt; \u0026lt;continue config:type=\u0026#34;boolean\u0026#34;\u0026gt;false\u0026lt;/continue\u0026gt; \u0026lt;dont_merge config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;element\u0026gt;partition\u0026lt;/element\u0026gt; \u0026lt;/dont_merge\u0026gt; \u0026lt;/result\u0026gt; \u0026lt;/rule\u0026gt; The content of a profile looks like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 \u0026lt;partitioning config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;drive\u0026gt; \u0026lt;partitions config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;partition\u0026gt; \u0026lt;create config:type=\u0026#34;boolean\u0026#34;\u0026gt;true\u0026lt;/create\u0026gt; \u0026lt;crypt_fs config:type=\u0026#34;boolean\u0026#34;\u0026gt;false\u0026lt;/crypt_fs\u0026gt; \u0026lt;filesystem config:type=\u0026#34;symbol\u0026#34;\u0026gt;swap\u0026lt;/filesystem\u0026gt; \u0026lt;filesystem_id config:type=\u0026#34;integer\u0026#34;\u0026gt;130\u0026lt;/filesystem_id\u0026gt; \u0026lt;format config:type=\u0026#34;boolean\u0026#34;\u0026gt;true\u0026lt;/format\u0026gt; \u0026lt;loop_fs config:type=\u0026#34;boolean\u0026#34;\u0026gt;false\u0026lt;/loop_fs\u0026gt; \u0026lt;mount\u0026gt;swap\u0026lt;/mount\u0026gt; \u0026lt;mountby config:type=\u0026#34;symbol\u0026#34;\u0026gt;device\u0026lt;/mountby\u0026gt; \u0026lt;partition_id config:type=\u0026#34;integer\u0026#34;\u0026gt;130\u0026lt;/partition_id\u0026gt; \u0026lt;partition_nr config:type=\u0026#34;integer\u0026#34;\u0026gt;2\u0026lt;/partition_nr\u0026gt; \u0026lt;resize config:type=\u0026#34;boolean\u0026#34;\u0026gt;false\u0026lt;/resize\u0026gt; \u0026lt;size\u0026gt;16G\u0026lt;/size\u0026gt; \u0026lt;/partition\u0026gt; \u0026lt;/partitions\u0026gt; \u0026lt;/drive\u0026gt; \u0026lt;/partitioning\u0026gt; So basically what I did, was creating different classes, and depending on the size of the available RAM, AutoYAST selects the profile.\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-06-03_autoyast-and-custom-swap-partitioning/","summary":"Well, we\u0026rsquo;ve been discussing our swap partitioning the last few days at work, and I finally got around to implementing it. Again, it proved to be kinda hard, basically because AutoYAST decides to do things differently.","title":"AutoYAST and custom swap partitioning"},{"content":"Well, as I mentioned in my earlier post, I had some trouble during the week. I was having issues with SLES10 installations not finishing during the bootloader installation phase. After trying out different flavors (as in 10SP2 x64/x86, \u0026hellip;), and not having any luck with this, I went searching on Google as a last effort try. Guess what, yet again Google helped me out!\nIt was pretty simple. Putting /dev/cciss/c0d0 into /boot/grub/device.map as (hd0) made the grub-installer finish. Now, figuring out how to transfer those information during the installation proved difficult. I was just about to give up, while reading through the AutoYAST documentation, when it struck me. There is even an extra chapter for this stuff, so simply putting the following into my profile solved my issues:\n1 2 3 4 5 6 7 8 \u0026lt;bootloader\u0026gt; \u0026lt;device_map config:type=\u0026#34;list\u0026#34;\u0026gt; \u0026lt;device_map_entry\u0026gt; \u0026lt;firmware\u0026gt;hd0\u0026lt;/firmware\u0026gt; \u0026lt;linux\u0026gt;/dev/cciss/c0d0\u0026lt;/linux\u0026gt; \u0026lt;/device_map_entry\u0026gt; \u0026lt;/device_map\u0026gt; \u0026lt;/bootloader\u0026gt; ","permalink":"https://christian.blog.pakiheim.de/posts/2010-06-03_sles10-not-installing-boot-loader-in-mbr/","summary":"\u003cp\u003eWell, \u003ca href=\"/posts/2014-08-08_reset-master-boot-record-mbr\" title=\"Reset Master Boot Record (MBR)\"\u003eas I mentioned in my earlier post\u003c/a\u003e, I had some trouble during the week. I was having issues with SLES10 installations not finishing during the bootloader installation phase. After trying out different flavors (as in 10SP2 x64/x86, \u0026hellip;), and not having any luck with this, I went searching on Google as a last effort try. Guess what, yet again Google \u003ca href=\"http://www.issociate.de/board/post/489385/Configuring_grub.html\"\u003ehelped me out\u003c/a\u003e!\u003c/p\u003e\n\u003cp\u003eIt was pretty simple. Putting /dev/cciss/c0d0 into /boot/grub/device.map as (hd0) made the grub-installer finish. Now, figuring out how to transfer those information during the installation proved difficult. I was just about to give up, while reading through the \u003ca href=\"http://www.suse.com/~ug/autoyast_doc/index.html\"\u003eAutoYAST documentation\u003c/a\u003e, \u003ca href=\"http://users.suse.com/~ug/autoyast_doc/configuration.html#id306587\"\u003ewhen it struck me\u003c/a\u003e. There is even an extra chapter for this stuff, so simply putting the following into my profile solved my issues:\u003c/p\u003e","title":"SLES10 not installing boot loader in MBR"},{"content":"Since I didn\u0026rsquo;t have any time to actually maintain my own repository of RPMs, as well as I don\u0026rsquo;t have any need for the RPMs contained within (simply I don\u0026rsquo;t use them at work anymore), the whole shebang is going away!\nI know a few people actually still use it, so I\u0026rsquo;m gonna put in a disclaimer and let some time pass before completely removing it. Just be warned, it\u0026rsquo;s going away! Again:\ndistributions.barfoo.org is going away! ","permalink":"https://christian.blog.pakiheim.de/posts/2010-06-03_distributions-barfoo-org-going-away/","summary":"\u003cp\u003eSince I didn\u0026rsquo;t have any time to actually maintain my own repository of RPMs, as well as I don\u0026rsquo;t have any need for the RPMs contained within (simply I don\u0026rsquo;t use them at work anymore), the whole shebang is going away!\u003c/p\u003e\n\u003cp\u003eI know a few people actually still use it, so I\u0026rsquo;m gonna put in a disclaimer and let some time pass before completely removing it. Just be warned, it\u0026rsquo;s going away! Again:\u003c/p\u003e","title":"distributions-barfoo-org going away"},{"content":"As the title says, I\u0026rsquo;ve been playing with vCB (inside a VM) and the TSM integration with newer (\u0026gt;6.0) clients for work. Result of all this work should be a feasibility study. We\u0026rsquo;re currently thinking about replacing our VMware server(s) with ESXi. But as most of you know, if you install ESXi, you simply can\u0026rsquo;t install anything (well, you can .. on ~100KB of disk space, which is compared to a TSM client weighing roughly 120MB nothing!). As we would like the possibility to backup VMs on image-level, I went looking at solutions.\nVMware Data Recovery VMware Consolidated Backup vRanger, \u0026hellip;\u0026hellip; As I was looking for something that wouldn\u0026rsquo;t cost us any money (thus excluding the third), I took a look at vDR and vCB. One point I do have to give to vDR is, that it\u0026rsquo;s damn fast. Only bad thing about vDR is that it doesn\u0026rsquo;t integrate at all with TSM, and it ain\u0026rsquo;t supported to install a TSM client inside the vDR VM. So vDR was also done for.\nOnly remaining thing was vCB. I remember way back when TSM didn\u0026rsquo;t support vCB directly, at which time it was quite the hassle to configure. But with newer TSM clients (as in the newer 6.x ones), IBM decided to integrate support for it. Which makes setting things up quite easy. You may think at least.\nSince I wanted to use \u0026ldquo;hotadd\u0026rdquo; as transport mode for the vmdk\u0026rsquo;s (which is basically creating a snapshot of the vmdk and assigning that snapshot to the vCB VM), I did have to tinker around with some JavaScript files in %ProgramFiles%VMwareVMware Consolidated Backup. Sure, it isn\u0026rsquo;t supported by VMware (which is a bit lame since they announced the EOL for vCB with the upcoming vSphere version), but I didn\u0026rsquo;t want to open a support request. I\u0026rsquo;m lazy, yep:\nChange DEFAULT_TRANSPORT_MODE in utils.js from \u0026quot; san\u0026quot; to \u0026quot; hotadd\u0026quot;. But apparently this only solved the backup method for vmdk-level, but not for file-level backups. The file-level is still gonna use nbd (network block device), which kinda sucks since the backup is going out via network.\nAfter doing that, the hotadd mode is still gonna fail, since apparently the denoted \u0026quot; VMware Consolidated Backup User\u0026quot; ( vcb-user in my case) also needs permissions onto the datastore. The permissions the handbook sets for the user are okay, you just need to apply that role to your datastore(s) containing the VMs you want to backup too! Otherwise vcbMounter is gonna fail with a rather cryptic error telling you that it doesn\u0026rsquo;t have sufficient rights to create a linked clone.\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-03-18_vmware-consolidated-backup-and-transport-mode-hotadd/","summary":"\u003cp\u003eAs the title says, I\u0026rsquo;ve been playing with vCB (inside a VM) and the TSM integration with newer (\u0026gt;6.0) clients for work. Result of all this work should be a feasibility study. We\u0026rsquo;re currently thinking about replacing our VMware server(s) with ESXi. But as most of you know, if you install ESXi, you simply can\u0026rsquo;t install anything (well, you can .. on ~100KB of disk space, which is compared to a TSM client weighing roughly 120MB nothing!). As we would like the possibility to backup VMs on image-level, I went looking at solutions.\u003c/p\u003e","title":"VMware Consolidated Backup and TRANSPORT_MODE=hotadd"},{"content":"I had myself a lot of fun today. I ended up patching a Windows Server 2003 x64 SP1, where the Task Manager wouldn\u0026rsquo;t start anymore. It simply failed (or in case of right clicking on the task bar wouldn\u0026rsquo;t even appear), so I went downstairs and pulled a hard disk out of the RAID1 array, just to be sure.\nReally weird Windows error\nI went ahead, installed SP2 (as you can see on the above picture) while having the jitters. Also installed the VirusScan I was scheduled to install, and the system came back online. Phewww.\nAfter my maintenance window was over, I looked into this issue a bit deeper. First tried copying over a taskmgr.exe (both 32bit and 64bit) from another Windows Server 2003 x64 SP2 system with no luck. The next step, was looking at PATH. As it turns out it has something to do with that \u0026hellip;.\n1 2 3 4 5 6 7 C:\u0026gt;echo %PATH% C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem C:\u0026gt;taskmgr The system cannot execute the specified program. C:\u0026gt;set PATH=C:WINDOWSSysWOW64;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem C:\u0026gt;taskmgr C:\u0026gt; As you can see, after fixing up the PATH environment variable, it works apparently .. Weirdly though, this issue doesn\u0026rsquo;t come up on another (identical) system, same PATH modifications, main difference: calling taskmgr.exe from the Run dialog works .. while it doesn\u0026rsquo;t on this particular system.\n\u0026#x1f937; Gonna have to talk to my SAP guys tomorrow \u0026hellip; \u0026#x1f604;\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-02-25_windows-server-2003-taskmgr-giving-logon-failure/","summary":"\u003cp\u003eI had myself a lot of fun today. I ended up patching a Windows Server 2003 x64 SP1, where the Task Manager wouldn\u0026rsquo;t start anymore. It simply failed (or in case of right clicking on the task bar wouldn\u0026rsquo;t even appear), so I went downstairs and pulled a hard disk out of the RAID1 array, just to be sure.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"%28/uploads/2010/02/weird-windows-error.png\"\n         alt=\"Really weird Windows error\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eReally weird Windows error\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eI went ahead, installed SP2 (as you can see on the above picture) while having the jitters. Also installed the VirusScan I was scheduled to install, and the system came back online. Phewww.\u003c/p\u003e","title":"Windows Server 2003: taskmgr giving Logon failure"},{"content":"Yesterday out of a sudden, the sound on my Acer Revo stopped working. Don\u0026rsquo;t ask me why, I didn\u0026rsquo;t update anything in between New Years eve and today. Just no sound. Tried removing my .asoundrc, tried rebooting, tried powering off; but nothing worked.\nSince the Revo was running Jaunty Jackalope, I decided to reinstall the box (yeah, yet again) \u0026ndash; but this time with Karmic Koala. Took this forums post and this blog entry as pointer (ie what needed to be installed), and started from there. And guess what \u0026hellip; after finishing all that, changing the settings in XBMC \u0026ndash; tada sound works. After finishing, I turned the box off and then back on, booted to the \u0026ldquo;old\u0026rdquo; installation \u0026ndash; guess what .. Sound is working again. I really don\u0026rsquo;t have a single clue as to why the heck the sound stopped working and the started working without any doing, but I\u0026rsquo;m glad :-P\nAs a pointer to myself, here\u0026rsquo;s a complete list of commands that need to be done to get a working installation of XBMC. Requirement for this is a minimal installation of Jaunty Jackalope/Karmic Koala.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 # I need to blacklist the internal WLAN device, since I\u0026#39;m using an external one cat \u0026lt;\u0026lt; EOF | sudo tee -a /etc/modprobe.d/blacklist-ath_pci.conf blacklist ath5k EOF # Also need to blacklist the not working RAlink drivers cat \u0026lt;\u0026lt; EOF | sudo tee /etc/modprobe.d/blacklist-ralink.conf # The below drivers don\u0026#39;t work with the Atheros AR5001 # (Linksys WUSB600N) blacklist rt2800usb blacklist rt2x00usb EOF # Add the necessary PPA\u0026#39;s cat \u0026lt;\u0026lt; EOF | sudo tee -a /etc/apt/sources.list.d/xbmc.list deb http://ppa.launchpad.net/nvidia-vdpau/ppa/ubuntu karmic main deb-src http://ppa.launchpad.net/nvidia-vdpau/ppa/ubuntu karmic main deb http://ppa.launchpad.net/team-xbmc-svn/ppa/ubuntu karmic main deb-src http://ppa.launchpad.net/team-xbmc-svn/ppa/ubuntu karmic main EOF # Add the GPG keys to the APT keyring sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 64234534 40618B66 CEC06767 318C7509 91E7EE5E 64234534 sudo aptitude update # Install necessary prerequisites (like nvidia-glx # for VDPAU rendering) # debhelper needs to be added, otherwise dkms is gonna fail. # I need nvidia-glx-180 because the -190 apparently brings # a large framedrop (as in I\u0026#39;m getting 18 FPS instead of 24) sudo aptitude install nvidia-glx-180 debhelper linux-sound-base alsa-base alsa-utils # unmute the Master an PCM channels with alsamixer. Press ESC to quit sudo alsamixer sudo alsactl store 0 # Install XBMC as standalone (i.e. no desktop environment like GNOME) sudo aptitude install xbmc-standalone # Configure the Xserver sudo nvidia-xconfig # Add the init-script (no need for fancy tty login stuff) cat \u0026lt;\u0026lt; EOF | sudo tee -a /etc/init.d/xbmc #!/bin/sh ### BEGIN INIT INFO # Provides: inputlirc # Required-Start: $network # Required-Stop: $network $remote_fs # Should-Start: $syslog udev # Should-Stop: $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Starts XBMC standalone ### END INIT INFO PATH=/usr/sbin:/usr/bin:/sbin:/bin test -d /var/run || exit 0 test -x /usr/bin/xbmc || exit 0 . /lib/lsb/init-functions case \u0026#34;$1\u0026#34; in start) xinit /usr/bin/xbmc --standalone \u0026amp; ;; stop) killall xbmc \u0026amp;\u0026gt;/dev/null ;; esac exit 0 EOF sudo update-rc.d xbmc defaults # Install usplash, configure our resolution and # regenerate the initramfs sudo aptitude install usplash usplash-theme-ubuntu cat \u0026lt;\u0026lt; EOF | sudo tee -a /etc/usplash.conf resx=1920 resy=1080 EOF sudo update-initramfs -u # Install lirc sudo aptitude install lirc inputlirc lirc-modules-source cat \u0026lt;\u0026lt; EOF | sudo tee -a /etc/lirc/lircd.conf # # this config file was automatically generated # using lirc-0.7.1pre2(any) on Mon Jul 4 22:11:52 2005 # # contributed by # # brand: Technisat # model no. of remote control: TTS35AI # devices being controlled by this remote: Skystar 2.6D # begin remote name Technisat_TTS35AI.conf bits 13 flags RC5|CONST_LENGTH eps 30 aeps 100 one 882 803 zero 882 803 plead 905 gap 112766 toggle_bit 2 begin codes Power 0x1A8C Mute 0x1A8D 1 0x1281 2 0x1A82 3 0x1283 4 0x1A84 5 0x1285 6 0x1A86 7 0x1287 8 0x1A88 9 0x1289 0 0x1A80 -/-- 0x128A A/B 0x1AA3 Red 0x0AAB Green 0x02AC Yellow 0x0AAD Blue 0x02AE Ok 0x0A97 Up 0x12A0 Down 0x1AA1 Left 0x1291 Right 0x1A90 SFI 0x12AF Back 0x1AA2 Info 0x028F # Prog+ 0x1AA0 # Prog- 0x12A1 TV/Radio 0x0293 # Volume+ 0x1A90 # Volume- 0x1291 Menu 0x0A92 Hilfe 0x1A8F TXT 0x12BC STOP 0x1AA9 EXT 0x12B8 HILFE2 0x0AB6 end codes end remote EOF sudo sed -i -e \u0026#39;s,REMOTE=\u0026#34;\u0026#34;,REMOTE=\u0026#34;TechnoTrend USB IR receiver\u0026#34;,\u0026#39; -e \u0026#39;s,REMOTE_MODULES=\u0026#34;\u0026#34;,REMOTE_MODULES=\u0026#34;lirc_serial\u0026#34;,\u0026#39; -e \u0026#39;s,REMOTE_DEVICE=\u0026#34;\u0026#34;,REMOTE_DEVICE=\u0026#34;/dev/lirc0\u0026#34;,\u0026#39; -e \u0026#39;s,START_LIRCD=\u0026#34;false\u0026#34;,START_LIRCD=\u0026#34;true\u0026#34;,\u0026#39; /etc/lirc/hardware.conf sudo sed -i -e \u0026#39;s,EVENTS=\u0026#34;\u0026#34;,EVENTS=\u0026#34;/dev/input/by-id/usb-Formosa21_USB_IR_Receiver-event-mouse\u0026#34;,\u0026#39; -e \u0026#39;s,OPTIONS=\u0026#34;\u0026#34;,OPTIONS=\u0026#34;-g -m 0\u0026#34;,\u0026#39; /etc/default/inputlirc cat \u0026lt;\u0026lt; EOF | sudo tee /usr/share/xbmc/system/scrapers/video/nfo-file-scaper.xml \u0026lt;?xml version=\u0026#34;1.0\u0026#34; encoding=\u0026#34;utf-8\u0026#34;?\u0026gt; \u0026lt;!-- Forces XBMC to gather the settings, that are on disk (ie no downloading of content information --\u0026gt; \u0026lt;scraper framework=\u0026#34;1.0\u0026#34; date=\u0026#34;2010-01-02\u0026#34; name=\u0026#34;NFO File Scarper\u0026#34; content=\u0026#34;movies\u0026#34; language=\u0026#34;en\u0026#34; /\u0026gt; EOF # Reboot the system sudo reboot Now we just need to configure the audio output to pipe everything through HDMI. For that change the settings in Settings -\u0026gt; System -\u0026gt; Audio Output like this:\nXBMC Audio Output Settings\nOr if you like messing with ~/.xbmc/userdata/guisettings.xml:\n1 2 3 4 5 6 7 8 9 10 11 12 13 \u0026lt;audiooutput\u0026gt; \u0026lt;ac3passthrough\u0026gt;false\u0026lt;/ac3passthrough\u0026gt; \u0026lt;audiodevice\u0026gt;alsa:plug:hdmi\u0026lt;/audiodevice\u0026gt; \u0026lt;customdevice\u0026gt;\u0026lt;/customdevice\u0026gt; \u0026lt;custompassthrough\u0026gt;\u0026lt;/custompassthrough\u0026gt; \u0026lt;downmixmultichannel\u0026gt;true\u0026lt;/downmixmultichannel\u0026gt; \u0026lt;dtspassthrough\u0026gt;false\u0026lt;/dtspassthrough\u0026gt; \u0026lt;mode\u0026gt;1\u0026lt;/mode\u0026gt; \u0026lt;passthroughdevice\u0026gt;alsa:hdmi\u0026lt;/passthroughdevice\u0026gt; \u0026lt;sep1\u0026gt;\u0026lt;/sep1\u0026gt; \u0026lt;sep2\u0026gt;\u0026lt;/sep2\u0026gt; \u0026lt;sep3\u0026gt;\u0026lt;/sep3\u0026gt; \u0026lt;/audiooutput\u0026gt; As for the changed device names of the input device (ie usb-Formosa21_USB_IR_Receiver-event-ir (Jaunty) vs. usb-Formosa21_USB_IR_Receiver-event-mouse (Karmic), just take the Lircmap.xml from here, and change the remote-Line accordingly.\n","permalink":"https://christian.blog.pakiheim.de/howtos/xbmc-installation-guide/","summary":"\u003cp\u003eYesterday out of a sudden, the sound on my Acer Revo stopped working. Don\u0026rsquo;t ask me why, I didn\u0026rsquo;t update anything in between New Years eve and today. Just no sound. Tried removing my .asoundrc, tried rebooting, tried powering off; but nothing worked.\u003c/p\u003e\n\u003cp\u003eSince the Revo was running Jaunty Jackalope, I decided to reinstall the box (yeah, yet again) \u0026ndash; but this time with Karmic Koala. Took this \u003ca href=\"http://xbmc.org/forum/showthread.php?t=53812\"\u003eforums post\u003c/a\u003e and this \u003ca href=\"http://www.springydevelopment.co.uk/2009/11/08/minimal-install-of-xbmc-on-ubuntu-karmic-koala/\"\u003eblog entry\u003c/a\u003e as pointer (ie what needed to be installed), and started from there. And guess what \u0026hellip; after finishing all that, changing the settings in XBMC \u0026ndash; tada sound works. After finishing, I turned the box off and then back on, booted to the \u0026ldquo;old\u0026rdquo; installation \u0026ndash; guess what .. Sound is working again. I really don\u0026rsquo;t have a single clue as to why the heck the sound stopped working and the started working without any doing, but I\u0026rsquo;m glad :-P\u003c/p\u003e","title":"XBMC installation Guide"},{"content":"Well, it\u0026rsquo;s another day another fight. As we started migrating our VM\u0026rsquo;s from the old VMware ESX farms to the new environment, and upgraded the hardware suddenly the network devices were hot-plug-able, thus they did turn up in the \u0026ldquo;Safely Remove\u0026rdquo; dialog.\nI myself don\u0026rsquo;t have any trouble with that. The trouble I do have is the people working with those VM\u0026rsquo;s and their possibly hazardous \u0026ldquo;uuuh, what\u0026rsquo;s this ? I don\u0026rsquo;t need this! \u0026lt;click-click, network-device unplugged\u0026gt;\u0026rdquo;\nSo I went googling (why isn\u0026rsquo;t that a dictionary term by now ?) and found something. Simple solution is to disable the hot plugging of hardware in the VM\u0026rsquo;s settings.\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-02-23_vmware-vsphere-safely-remove-network-controller/","summary":"\u003cp\u003eWell, it\u0026rsquo;s another day another fight. As we started migrating our VM\u0026rsquo;s from the old VMware ESX farms to the new environment, and upgraded the hardware suddenly the network devices were hot-plug-able, thus they did turn up in the \u0026ldquo;Safely Remove\u0026rdquo; dialog.\u003c/p\u003e\n\u003cp\u003eI myself don\u0026rsquo;t have any trouble with that. The trouble I do have is the people working with those VM\u0026rsquo;s and their possibly hazardous \u0026ldquo;uuuh, what\u0026rsquo;s this ? I don\u0026rsquo;t need this! \u0026lt;click-click, network-device unplugged\u0026gt;\u0026rdquo;\u003c/p\u003e","title":"VMware vSphere: Safely remove network controller"},{"content":"After some more crunching on my VBscript, I think I finally have a working script that runs through a csv-list I point it to and walk onto each system (by ip-address only sadly) and query the os and the Service Pack that is installed. The CSV may look like this:\n1 2 3 Hostname;IP;Model;Description;OS;Service-Pack;BL;Priority epimetheus;10.0.0.2;VMware guest;File-Server hades;10.0.0.1;VMware guest;Core-Router After saving that one, and running a cscript //NoLogo win_sp_level.vbs you should find a completed list like this:\n1 2 3 Hostname;IP;Model;Description;OS;Service-Pack;BL;Priority epimetheus;10.0.0.2;VMware guest;File-Server;Windows Server 2003 Standard x64 Edition; SP1;; hades;10.0.0.1;VMware guest;Core-Router;Windows Server 2003 Enterprise Edition; SP0;; The final script looks like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 On Error Resume Next Set objFSO = CreateObject(\u0026#34;Scripting.FileSystemOBject\u0026#34;) If objFSO.FileExists(\u0026#34;Rollout_SP2.csv\u0026#34;) = 0 Then CleanUp() Wscript.Quit End If Set CSVin = objFSO.OpenTextFile(\u0026#34;Rollout_SP2.csv\u0026#34;, 1) CSVin_read = CSVin.ReadLine Set objFile = objFSO.CreateTextFile(\u0026#34;Rollout_SP2_result.csv\u0026#34;) Set objFile = nothing Set CSVout = objFSO.OpenTextFile(\u0026#34;Rollout_SP2_result.csv\u0026#34;, 8) CSVout.WriteLine(\u0026#34;Hostname;IP;Model;Description;OS;Service-Pack;BL;Priority\u0026#34;) Do While CSVin.AtEndofStream \u0026lt;\u0026gt; True Dim os, servicepack Dim user, password os = nothing servicepack = nothing user = vars(1) \u0026amp; \u0026#34;chrischie\u0026#34; password = \u0026#34;hah-this-password-is-easy\u0026#34; current_line = CSVin.ReadLine vars = Split(current_line, \u0026#34;;\u0026#34;) Set objSWbemLocator = CreateObject(\u0026#34;WbemScripting.SWbemLocator\u0026#34;) Set objSWbemServices = objSWbemLocator.ConnectServer _ (vars(1), \u0026#34;rootcimv2\u0026#34;, user, password, \u0026#34;MS_409\u0026#34;,, 128) objSWbemServices.Security_.ImpersonationLevel = 3 Set colOperatingSystems = objSWbemServices.ExecQuery _ (\u0026#34;Select * from Win32_OperatingSystem\u0026#34;) \u0026#39; The set returns an Err.Number of 91 on success \u0026#39; Don\u0026#39;t ask me why though. If Err.Number \u0026lt;\u0026gt; 91 Then CSVout.WriteLine(vars(0) \u0026amp; \u0026#34;;\u0026#34; \u0026amp; vars(1) \u0026amp; \u0026#34;;\u0026#34; \u0026amp; vars(2) \u0026amp; \u0026#34;;\u0026#34; \u0026amp; vars(3) \u0026amp; \u0026#34;;NA;SP?;;\u0026#34;) Else For Each objOperatingSystem in colOperatingSystems os = objOperatingSystem.Caption servicepack = objOperatingSystem.ServicePackMajorVersion Next CSVout.WriteLine(vars(0) \u0026amp; \u0026#34;;\u0026#34; \u0026amp; vars(1) \u0026amp; \u0026#34;;\u0026#34; \u0026amp; vars(2) \u0026amp; \u0026#34;;\u0026#34; \u0026amp; vars(3) _ \u0026amp; \u0026#34;;\u0026#34; \u0026amp; os \u0026amp; \u0026#34;; SP\u0026#34; \u0026amp; servicepack \u0026amp; \u0026#34;;;\u0026#34;) End If Loop The only thing I still need to improve is the error handling (as in notify when a system is being skipped due to RPC being unavailable).\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-02-15_vbscript-query-remote-os-and-sp-info-continued/","summary":"\u003cp\u003eAfter some more crunching on \u003ca href=\"/posts/2010-02-15_vbscript-query-remote-os-and-sp-info-continued\" title=\"VBscript: Query remote OS and SP info\"\u003emy VBscript\u003c/a\u003e, I think I finally have a working script that runs through a csv-list I point it to and walk onto each system (by ip-address only sadly) and query the os and the Service Pack that is installed. The CSV may look like this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eHostname;IP;Model;Description;OS;Service-Pack;BL;Priority\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eepimetheus;10.0.0.2;VMware guest;File-Server\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehades;10.0.0.1;VMware guest;Core-Router\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAfter saving that one, and running a cscript //NoLogo win_sp_level.vbs you should find a completed list like this:\u003c/p\u003e","title":"VBscript: Query remote OS and SP info (continued)"},{"content":"We received a preinstalled customer server the other day, for which we had declared \u0026ldquo;as-is\u0026rdquo; support only, since it is running Lucid Lynx. Now today, I started getting the TSM client to work. Was kinda weird, since at first dsmc was reporting something like this:\n# ./dsmc: no such file or directory\nAfter fiddling with it a bit more, here are the control files, as well as the prerm and postinst-scripts for TIVSM-API, TIVSM-API64 and TIVSM-BA:\ntivsm-api/debian/control:\n1 2 3 4 5 6 7 8 9 Source: tivsm-api Section: non-free Priority: extra Maintainer: root \u0026lt;root@localhost\u0026gt; Package: tivsm-api Architecture: all Depends: ${shlibs:Depends} Description: IBM Tivoli Storage Manager API tivsm-api/debian/tivsm-api.postinst:\n1 2 3 4 5 6 7 8 9 for library in /opt/tivoli/tsm/client/api/bin/*.so; do ln -s $library /usr/lib/${library##*/} done # Automatically added by dh_makeshlibs if [ \u0026#34;$1\u0026#34; = \u0026#34;configure\u0026#34; ]; then ldconfig fi # End automatically added section tivsm-api/debian/tivsm-api.prerm:\n1 2 3 for library in /opt/tivoli/tsm/client/api/bin/*.so; do rm -f /usr/lib/${library##*/} done tivsm-api64/debian/control:\n1 2 3 4 5 6 7 8 9 Source: tivsm-api64 Section: non-free Priority: extra Maintainer: root \u0026lt;root@localhost\u0026gt; Package: tivsm-api64 Architecture: amd64 Depends: ${shlibs:Depends} Description: IBM Tivoli Storage Manager API tivsm-api64/debian/postinst:\n1 2 3 4 5 6 7 8 9 for library in /opt/tivoli/tsm/client/api/bin64/*.so; do ln -s $library /usr/lib64/${library##*/} done # Automatically added by dh_makeshlibs if [ \u0026#34;$1\u0026#34; = \u0026#34;configure\u0026#34; ]; then ldconfig fi # End automatically added section tivsm-api64/debian/prerm:\n1 2 3 4 5 6 7 8 9 for library in /opt/tivoli/tsm/client/api/bin64/*.so; do rm -f /usr/lib64/${library##*/} done # Automatically added by dh_makeshlibs if [ \u0026#34;$1\u0026#34; = \u0026#34;configure\u0026#34; ]; then ldconfig fi # End automatically added section tivsm-ba/debian/control:\n1 2 3 4 5 6 7 8 9 Source: tivsm-ba Section: non-free Priority: extra Maintainer: root \u0026lt;root@localhost\u0026gt; Package: tivsm-ba Architecture: any Depends: ${shlibs:Depends}, lib32stdc++6 [amd64], libc6-i386 [amd64], lib32gcc1 [amd64] Description: IBM Tivoli Storage Manager Client tivsm-ba/debian/tivsm-ba.postinst:\n1 2 3 4 5 ln -s /opt/tivoli/tsm/client/lang/EN_US /opt/tivoli/tsm/client/ba/bin/EN_US for binary in dsmadmc dsmagent dsmc dsmcad dsmj dsmswitch dsmtca dsmtrace; do ln -s /opt/tivoli/tsm/client/ba/bin/$binary /usr/bin/$binary done tivsm-ba/debian/tivsm-ba.prerm:\n1 2 3 4 5 rm -f /opt/tivoli/tsm/client/ba/bin/EN_US for binary in dsmadmc dsmagent dsmc dsmcad dsmj dsmswitch dsmtca dsmtrace; do rm -f /usr/bin/$binary done All that was left to do, was simply adding a -n to the dh_makeshlibs call in each packages debian/rules file, otherwise dh_makeshlibs would overwrite my shiny postinst/prerm actions!\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-02-15_converting-tivsm-rpms-to-deb/","summary":"\u003cp\u003eWe received a preinstalled customer server the other day, for which we had declared \u0026ldquo;as-is\u0026rdquo; support only, since it is running Lucid Lynx. Now today, I started getting the TSM client to work. Was kinda weird, since at first dsmc was reporting something like this:\u003c/p\u003e\n\u003cp\u003e# ./dsmc: no such file or directory\u003c/p\u003e\n\u003cp\u003eAfter fiddling with it a bit more, here are the control files, as well as the prerm and postinst-scripts for TIVSM-API, TIVSM-API64 and TIVSM-BA:\u003c/p\u003e","title":"Converting TIVSM RPMs to deb"},{"content":"Last month I had this epiphany to fly home for a visit on my mother\u0026rsquo;s birthday. Well, the idea was great but the implementation kinda sucks.\nI started my trip around 12:00 AM from work to Stuttgart. Initially I had much more fear of the trip down to Stuttgart, since I have to drive on the A8 (which is kinda infamous for huge traffic jams), but as it turned out; those fears were without reason. It took me an hour to get to Stuttgart, which is fairly normal.\nI was at the airport at 2pm, which was still an hour till my flight would leave. So I waited another hour (I bought myself a book in preparation) until it was 2:55pm (that\u0026rsquo;s the original boarding time).\nAt that time, they announced that the plane would be approximately an hour late, since it got stuck in the snow in Warsaw. Okay, I waited another half hour, until they announced that the plane just landed and we could hopefully begin boarding within the next 15 minutes or so.\nAfter another half an hour, finally everyone finished boarding and we were rolling to the runway. After about an hour in the air, the captain announced we would be over Rostock, but we\u0026rsquo;d be in a holding pattern, because the ground crew in Rostock is trying to prepare the runway for the landing.\nAfter ten minutes, he announced yet again, we would be flying circles for another 15 minutes (which were like 40 minutes), after which he announced we\u0026rsquo;d be flying circles for another 15 minutes (which again were half an hour). He then explained that the ground crew in Rostock is yet again trying to de-ice the runway in order to make it possible, so the plane can safely land (I figure, a Airbus A319 needs one hell of a long strip to land and brake on ice with about 75t).\nSo after circling for another 15 minutes, he announced with regrets, that the ground crew wasn\u0026rsquo;t able to de-ice and de-snow the runway in order to make a safe landing. He also informed us, that we would be diverted to Berlin-Schönefeld and that we\u0026rsquo;d get more information once we are on the ground.\nAs we were touching down and rolling into parking position, he announced that we either had the possibility to be carried to Rostock via bus (that is a charter bus), or be on our own. For that, I do have to say the following: Berlin is about 190km afar, plus the autobahn was icy that night.\nHe also announced that we\u0026rsquo;d get more information at the check-in booth. So 159 angry people went bothering the people at the check-in booth (which were kinda stressed out). They handed every person a Deutsche Bahn ticket with another sheet of photo-copied paper, that did hold the travelling information.\nIn the end, I was home around 1:30 AM, where I planned on being home at 7:00 PM. Just nice. I\u0026rsquo;m just praying, that they\u0026rsquo;re actually gonna fly from Rostock today, since tomorrow just is another workday.\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-02-14_flying-home-with-germanwings/","summary":"\u003cp\u003eLast month I had this epiphany to fly home for a visit on my mother\u0026rsquo;s birthday. Well, the idea was great but the implementation kinda sucks.\u003c/p\u003e\n\u003cp\u003eI started my trip around 12:00 AM from work to Stuttgart. Initially I had much more fear of the trip down to Stuttgart, since I have to drive on the A8 (which is kinda infamous for huge traffic jams), but as it turned out; those fears were without reason. It took me an hour to get to Stuttgart, which is fairly normal.\u003c/p\u003e","title":"Flying home with GermanWings"},{"content":"My little brother bought himself this fancy netbook (it\u0026rsquo;s okay I guess, only the keyboard takes getting used to). A few days after he bought it, he told me he wanted something different on it than the shipped Windows XP.\nAt first, I favored a normal Ubuntu 9.10 Desktop. While thats okay, it simply isn\u0026rsquo;t the right thing for a netbook. Why ? For example, if the programs bar is larger than the vertical desktop resolution, it gets kinda tiring to work with this thing.\nTook me (and him) a while to notice that, but in the end I put the Netbook Remix of Karmic on this sweet little thing. Only trouble he had, was that while everything worked out of the box (even the Digital Motion Camera at the top end of the screen), his UMTS didn\u0026rsquo;t. That\u0026rsquo;s kinda shitty, since he bought this thing, in order to get online, even if he is at a hotel without actual internet connection (that is no DSL or LAN connectivity).\nHe already bothered the guys at his local T-Mobile shop, which told him he had to send it in to Samsung for repairs, since they don\u0026rsquo;t do warranty claims (which iirc they have to do, according to the HGB). Anyway, he sent the box my way, for me to take a look at it first, to avoid paying 70€ for a damn quotation for the repair of the defect UMTS modem.\nTurns out (as so often), it was just a simple software bug. The guy over at aptgetupdate, was kind enough to document the steps necessary to install a nightly build of NetworkManager (which Karmic uses to connect to any kind of network), which fixes this issue. As a proof, I\u0026rsquo;m writing this here blog post via the UMTS connection of the netbook!\nFor myself, here are the exact steps, in case I ever need to repeat them:\n1 2 3 4 5 6 7 8 cat \u0026lt;\u0026lt; EOF | sudo tee /etc/apt/sources.list.d/nm-nightly.list deb http://ppa.launchpad.net/network-manager/trunk/ubuntu karmic main EOF sudo apt-key adv --keyserver=wwwkeys.de.pgp.net --recv-key 248DD1EEBC8EBFE8 sudo aptitude update; sudo aptitude full-upgrade sudo service network-manager restart That\u0026rsquo;s it, that enables UMTS connections again.\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-01-07_samsung-nc10-anynet-hat2de-ubuntu-karmic-koala-and-umts/","summary":"\u003cp\u003eMy little brother bought himself this fancy netbook (it\u0026rsquo;s okay I guess, only the keyboard takes getting used to). A few days after he bought it, he told me he wanted something different on it than the shipped Windows XP.\u003c/p\u003e\n\u003cp\u003eAt first, I favored a normal Ubuntu 9.10 Desktop. While thats okay, it simply isn\u0026rsquo;t the right thing for a netbook. Why ? For example, if the programs bar is larger than the vertical desktop resolution, it gets kinda tiring to work with this thing.\u003c/p\u003e","title":"Samsung NC10 Anynet (HAT2DE), Ubuntu Karmic Koala and UMTS"},{"content":"I\u0026rsquo;ve been tinkering with VMware\u0026rsquo;s Data Recovery for the last two weeks (as in configured it some time before Christmas) and had it running all that time. I have to say the integration into the vCenter Client GUI is amazing, I\u0026rsquo;d love to see that for VCB also. The Changed Block Tracking is a neat way to minimize the amount backup data as well as your backup window (which is nearly zero anyhow due to vDR using snapshots).\nWhat I don\u0026rsquo;t like about Data Recovery is the fact that you ain\u0026rsquo;t allowed supported to install any kind of backup agent inside. I was looking into Data Recovery because I wanted to replace VCB\u0026rsquo;s functionality with something tightly integrated, that even our, well lets say \u0026ndash; not so vCenter centered workers \u0026ndash; could use (restoring a VM with vDR is real easy, just three clicks and you got a previous version of your VM \u0026ndash; even if it has been deleted).\nI guess, we do have to stick to Consolidated Backup for now, until VMware redesigns vDR or polishes VCB.\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-01-05_vmware-data-recovery/","summary":"\u003cp\u003eI\u0026rsquo;ve been tinkering with VMware\u0026rsquo;s Data Recovery for the last two weeks (as in configured it some time before Christmas) and had it running all that time. I have to say the integration into the vCenter Client GUI is amazing, I\u0026rsquo;d love to see that for VCB also. The \u003ca href=\"http://kb.vmware.com/selfservice/microsites/search.do?language=en_US\u0026amp;cmd=displayKC\u0026amp;externalId=1020128\"\u003eChanged Block Tracking\u003c/a\u003e is a neat way to minimize the amount backup data as well as your backup window (which is nearly zero anyhow due to vDR using snapshots).\u003c/p\u003e","title":"VMware Data Recovery"},{"content":"Yesterday out of a sudden, the sound on my Acer Revo stopped working. Don\u0026rsquo;t ask me why, I didn\u0026rsquo;t update anything in between New Years eve and today. Just no sound. Tried removing my .asoundrc, tried rebooting, tried powering off; but nothing worked.\nSince the Revo was running Jaunty Jackalope, I decided to reinstall the box (yeah, yet again) \u0026ndash; but this time with Karmic Koala. Took this forums post and this blog entry as pointer (ie what needed to be installed), and started from there. And guess what \u0026hellip; after finishing all that, changing the settings in XBMC \u0026ndash; tada sound works. After finishing, I turned the box off and then back on, booted to the \u0026ldquo;old\u0026rdquo; installation \u0026ndash; guess what .. Sound is working again. I really don\u0026rsquo;t have a single clue as to why the heck the sound stopped working and the started working without any doing, but I\u0026rsquo;m glad \u0026#x1f61b;\nAs a pointer to myself, here\u0026rsquo;s a complete list of commands that need to be done to get a working installation of XBMC. Requirement for this is a minimal installation of Jaunty Jackalope/Karmic Koala.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 # I need to blacklist the internal WLAN device, since I\u0026#39;m using an external one cat \u0026lt;\u0026lt; EOF | sudo tee -a /etc/modprobe.d/blacklist-ath_pci.conf blacklist ath5k EOF # Also need to blacklist the not working RAlink drivers cat \u0026lt;\u0026lt; EOF | sudo tee /etc/modprobe.d/blacklist-ralink.conf # The below drivers don\u0026#39;t work with the Atheros AR5001 # (Linksys WUSB600N) blacklist rt2800usb blacklist rt2x00usb EOF # Add the necessary PPA\u0026#39;s cat \u0026lt;\u0026lt; EOF | sudo tee -a /etc/apt/sources.list.d/xbmc.list deb http://ppa.launchpad.net/nvidia-vdpau/ppa/ubuntu karmic main deb-src http://ppa.launchpad.net/nvidia-vdpau/ppa/ubuntu karmic main deb http://ppa.launchpad.net/team-xbmc-svn/ppa/ubuntu karmic main deb-src http://ppa.launchpad.net/team-xbmc-svn/ppa/ubuntu karmic main EOF # Add the GPG keys to the APT keyring sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 64234534 40618B66 CEC06767 318C7509 91E7EE5E 64234534 sudo aptitude update # Install necessary prerequisites (like nvidia-glx # for VDPAU rendering) # debhelper needs to be added, otherwise dkms is gonna fail. # I need nvidia-glx-180 because the -190 apparently brings # a large framedrop (as in I\u0026#39;m getting 18 FPS instead of 24) sudo aptitude install nvidia-glx-180 debhelper linux-sound-base alsa-base alsa-utils # unmute the Master an PCM channels with alsamixer. Press ESC to quit sudo alsamixer sudo alsactl store 0 # Install XBMC as standalone (i.e. no desktop environment like GNOME) sudo aptitude install xbmc-standalone # Configure the Xserver sudo nvidia-xconfig # Add the init-script (no need for fancy tty login stuff) cat \u0026lt;/dev/null ;; esac exit 0 EOF sudo update-rc.d xbmc defaults # Install usplash, configure our resolution and # regenerate the initramfs sudo aptitude install usplash usplash-theme-ubuntu cat \u0026lt;\u0026lt; EOF | sudo tee -a /etc/usplash.conf resx=1920 resy=1080 EOF sudo update-initramfs -u # Install lirc sudo aptitude install lirc inputlirc lirc-modules-source cat \u0026lt;\u0026lt; EOF | sudo tee -a /etc/lirc/lircd.conf # # this config file was automatically generated # using lirc-0.7.1pre2(any) on Mon Jul 4 22:11:52 2005 # # contributed by # # brand: Technisat # model no. of remote control: TTS35AI # devices being controlled by this remote: Skystar 2.6D # begin remote name Technisat_TTS35AI.conf bits 13 flags RC5|CONST_LENGTH eps 30 aeps 100 one 882 803 zero 882 803 plead 905 gap 112766 toggle_bit 2 begin codes Power 0x1A8C Mute 0x1A8D 1 0x1281 2 0x1A82 3 0x1283 4 0x1A84 5 0x1285 6 0x1A86 7 0x1287 8 0x1A88 9 0x1289 0 0x1A80 -/-- 0x128A A/B 0x1AA3 Red 0x0AAB Green 0x02AC Yellow 0x0AAD Blue 0x02AE Ok 0x0A97 Up 0x12A0 Down 0x1AA1 Left 0x1291 Right 0x1A90 SFI 0x12AF Back 0x1AA2 Info 0x028F # Prog+ 0x1AA0 # Prog- 0x12A1 TV/Radio 0x0293 # Volume+ 0x1A90 # Volume- 0x1291 Menu 0x0A92 Hilfe 0x1A8F TXT 0x12BC STOP 0x1AA9 EXT 0x12B8 HILFE2 0x0AB6 end codes end remote EOF sudo sed -i -e \u0026#39;s,REMOTE=\u0026#34;\u0026#34;,REMOTE=\u0026#34;TechnoTrend USB IR receiver\u0026#34;,\u0026#39; -e \u0026#39;s,REMOTE_MODULES=\u0026#34;\u0026#34;,REMOTE_MODULES=\u0026#34;lirc_serial\u0026#34;,\u0026#39; -e \u0026#39;s,REMOTE_DEVICE=\u0026#34;\u0026#34;,REMOTE_DEVICE=\u0026#34;/dev/lirc0\u0026#34;,\u0026#39; -e \u0026#39;s,START_LIRCD=\u0026#34;false\u0026#34;,START_LIRCD=\u0026#34;true\u0026#34;,\u0026#39; /etc/lirc/hardware.conf sudo sed -i -e \u0026#39;s,EVENTS=\u0026#34;\u0026#34;,EVENTS=\u0026#34;/dev/input/by-id/usb-Formosa21_USB_IR_Receiver-event-mouse\u0026#34;,\u0026#39; -e \u0026#39;s,OPTIONS=\u0026#34;\u0026#34;,OPTIONS=\u0026#34;-g -m 0\u0026#34;,\u0026#39; /etc/default/inputlirc cat \u0026lt;\u0026lt; EOF | sudo tee /usr/share/xbmc/system/scrapers/video/nfo-file-scaper.xml EOF # Reboot the system sudo reboot Now we just need to configure the audio output to pipe everything through HDMI. For that change the settings in Settings -\u0026gt; System -\u0026gt; Audio Output like this:\nXBMC Audio Output Settings\nOr if you like messing with ~/.xbmc/userdata/guisettings.xml:\n1 2 3 4 5 6 7 8 false alsa:plug:hdmi true false 1 alsa:hdmi As for the changed device names of the input device (ie usb-Formosa21_USB_IR_Receiver-event-ir (Jaunty) vs. usb-Formosa21_USB_IR_Receiver-event-mouse (Karmic), just take the Lircmap.xml from here, and change the remote-Line accordingly.\n","permalink":"https://christian.blog.pakiheim.de/posts/2010-01-02_howto-installing-xbmc-on-a-acer-revo-r3600-with-ubuntu-jaunty-karmic/","summary":"\u003cp\u003eYesterday out of a sudden, the sound on my Acer Revo stopped working. Don\u0026rsquo;t ask me why, I didn\u0026rsquo;t update anything in between New Years eve and today. Just no sound. Tried removing my .asoundrc, tried rebooting, tried powering off; but nothing worked.\u003c/p\u003e\n\u003cp\u003eSince the Revo was running Jaunty Jackalope, I decided to reinstall the box (yeah, yet again) \u0026ndash; but this time with Karmic Koala. Took this \u003ca href=\"http://xbmc.org/forum/showthread.php?t=53812\"\u003eforums post\u003c/a\u003e and this \u003ca href=\"http://www.springydevelopment.co.uk/2009/11/08/minimal-install-of-xbmc-on-ubuntu-karmic-koala/\"\u003eblog entry\u003c/a\u003e as pointer (ie what needed to be installed), and started from there. And guess what \u0026hellip; after finishing all that, changing the settings in XBMC \u0026ndash; tada sound works. After finishing, I turned the box off and then back on, booted to the \u0026ldquo;old\u0026rdquo; installation \u0026ndash; guess what .. Sound is working again. I really don\u0026rsquo;t have a single clue as to why the heck the sound stopped working and the started working without any doing, but I\u0026rsquo;m glad :-P\u003c/p\u003e\n","title":"HOWTO: Installing XBMC on a Acer Revo R3600 with Ubuntu Jaunty/Karmic"},{"content":"I\u0026rsquo;ve been learning for my VCP-410 exam the last week or so, and what can I say ? It helped \u0026hellip; 463 points of a total of 500 points ain\u0026rsquo;t that bad at all (considering I spend twenty minutes doing it).\nSure, I could have spent more time, and do better than 92,6%, but then again: why should I ?\nThe achieved points (nor the percentage) don\u0026rsquo;t appear on the certificate (or at least it didn\u0026rsquo;t on the old one), so why bother. Anyway, that was my christmas present to myself, it that light; happy christmas ya\u0026rsquo;ll.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-12-24_vcp410-exam/","summary":"\u003cp\u003eI\u0026rsquo;ve been learning for my VCP-410 exam the last week or so, and what can I say ? It helped \u0026hellip; 463 points of a total of 500 points ain\u0026rsquo;t that bad at all (considering I spend twenty minutes doing it).\u003c/p\u003e\n\u003cp\u003eSure, I could have spent more time, and do better than \u003cstrong\u003e92,6%\u003c/strong\u003e, but then again: why should I ?\u003c/p\u003e\n\u003cp\u003eThe achieved points (nor the percentage) don\u0026rsquo;t appear on the certificate (or at least it didn\u0026rsquo;t on the old one), so why bother. Anyway, that was my christmas present to myself, it that light; happy christmas ya\u0026rsquo;ll.\u003c/p\u003e","title":"VCP410 exam"},{"content":"Some of you may know, that VMware released vSphere 4.0 Update 1 yesterday. I took this as a reason, to finally wrap my head around booting the VMware ESXi installer from my PXE/TFTP box. Since VMware was kind enough to provide (a somewhat worthless) document, that explains how to extract the necessary files on Windows. But that quite doesn\u0026rsquo;t work with Linux \u0026ndash; and VMware just states that you should be using mount and it\u0026rsquo;s option offset.\nLuckily there are smart people around. Cameron shows exactly as to how you\u0026rsquo;d mount the dd-image. If the dd-image is mounted, you just need to copy over cim.vgz, license.tgz, oem.tgz, sys.vgz, vmk.gz and vmkboot.gz. After doing so, you should add a section to your pxelinux.cfg that kinda looks like this:\n1 2 3 4 5 LABEL 3 MENU LABEL VMware ESX^i 4.0 installieren KERNEL addons/mboot.c32 APPEND boot/esxi/4.0/vmkboot.gz --- boot/esxi/4.0/vmk.gz --- boot/esxi/4.0/sys.vgz --- boot/esxi/4.0/cim.vgz --- boot/esxi/4.0/oem.tgz --- boot/esxi/4.0/license.tgz IAPPEND 2 Just make sure, everything following APPEND and before IAPPEND is in a single line.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-11-20_pxeboot-the-vmware-esxi-installer/","summary":"\u003cp\u003eSome of you may know, that VMware released vSphere 4.0 Update 1 yesterday. I took this as a reason, to finally wrap my head around booting the VMware ESXi installer from my PXE/TFTP box. Since VMware was kind enough \u003ca href=\"http://www.vmware.com/pdf/vsp_4_pxe_boot_esxi.pdf\"\u003eto provide\u003c/a\u003e (a somewhat worthless) document, that explains how to extract the necessary files on Windows. But that quite doesn\u0026rsquo;t work with Linux \u0026ndash; and VMware just states that you should be using mount and it\u0026rsquo;s option offset.\u003c/p\u003e","title":"PXEBoot the VMware ESXi installer"},{"content":"If you intend to use a custom Keymap.xml with XBMC you might need to be aware of a change that recently happened. Up till now the Keymap.xml was placed in ~/.xbmc/keymaps. Recently (not exactly sure, which svn revision it changed) although it changed.\nSince r21442 (that\u0026rsquo;s after the current 9.04.1 release), the default keymapping files are stored in the system/keymaps/ subfolder of your installation. To alter the default keymapping simply add one or more xml-files in the Userdata/keymaps/ folder with the changes you wish to make. If the keymaps folder doesn\u0026rsquo;t exist, create it. For backwards compatibily, Userdata/Keymap.xml is still read.\nIf you place the Keymap.xml in ~/.xbmc/keymaps you\u0026rsquo;re gonna see weird things happening. Basically, most commands work however not everything. Once you move the keymap.xml to ~/.xbmc/userdata/keymaps, everything magically starts working again.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-11-15_custom-keymap-xml-with-xbmc/","summary":"\u003cp\u003eIf you intend to use a \u003ca href=\"/uploads/2009/06/Keymap.xml\"\u003ecustom Keymap.xml\u003c/a\u003e with XBMC you might need to be aware of a change that recently happened. Up till now the Keymap.xml was placed in ~/.xbmc/keymaps. Recently (not exactly sure, which svn revision it changed) although it changed.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eSince r21442 (that\u0026rsquo;s after the current 9.04.1 release), the default keymapping files are stored in the system/keymaps/ subfolder of your installation. To alter the default keymapping simply add one or more xml-files in the Userdata/keymaps/ folder with the changes you wish to make. If the keymaps folder doesn\u0026rsquo;t exist, create it. For backwards compatibily, Userdata/Keymap.xml is still read.\u003c/p\u003e","title":"Custom Keymap-xml with XBMC"},{"content":"Since I recently moved, I also needed to make a few changes to my home setup. Up till now, I always had a wall or a border where I could hide the CAT5/CAT6 cable for my boxen. But my new flat has doors everywhere. So I decided to buy two Linksys WUSB600N for my XBMC-box as well as for the NAS-box.\nThe setup was pretty straight forward, I didn\u0026rsquo;t have to fiddle with it too long. The only thing I had to do, was setup wpa_supplicant in /etc/network/interfaces, as the router supplied by my provider comes with WPA2 enabled (which is a good thing).\n1 2 3 4 5 auto ra0 iface ra0 inet dhcp wpa-ssid home-barfoo wpa-psk ahthaeb2ni0pool7eiheesaereephapef8viehai4echei8shaekim2aec0eechah wpa-bssid 00:12:09:C8:B2:58 Additionally, I just reinstalled my NAS-box with Karmic Koala. That gave me a bit of trouble, since apparently since Jaunty they included new drivers for the ralink-devices (namely rt2800usb and rt2x00usb). These two sadly don\u0026rsquo;t work with the WUSB600N, so I had to blacklist them (/etc/modprobe.d/blacklist-ralink.conf in my case).\n1 2 blacklist rt2800usb blacklist rt2x00usb ","permalink":"https://christian.blog.pakiheim.de/posts/2009-11-15_linksys-wusb600n-on-ubuntu/","summary":"\u003cp\u003eSince I recently moved, I also needed to make a few changes to my home setup. Up till now, I always had a wall or a border where I could hide the CAT5/CAT6 cable for my boxen. But my new flat has doors everywhere. So I decided to buy two Linksys WUSB600N for my XBMC-box as well as for the NAS-box.\u003c/p\u003e\n\u003cp\u003eThe setup was pretty straight forward, I didn\u0026rsquo;t have to fiddle with it too long. The only thing I had to do, was setup wpa_supplicant in /etc/network/interfaces, as the router supplied by my provider comes with WPA2 enabled (which is a good thing).\u003c/p\u003e","title":"Linksys WUSB600N on Ubuntu"},{"content":"Since I\u0026rsquo;m running check_zypper via nrpe (which in turn runs as nobody), I need to set up sudo. In order for the plugin to work, we need to add the following line to /etc/sudoers (by means of visudo):\n1 nobody ALL = NOPASSWD: /usr/bin/zypper sl, /usr/bin/zypper --non-interactive --no-gpg-checks --terse list-updates (Keep in mind this needs to be a single line \u0026hellip;)\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-11-12_configuring-nagios-plugins-zypper/","summary":"\u003cp\u003eSince I\u0026rsquo;m running check_zypper via nrpe (which in turn runs as nobody), I need to set up sudo. In order for the plugin to work, we need to add the following line to /etc/sudoers (by means of visudo):\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enobody ALL = NOPASSWD: /usr/bin/zypper sl, /usr/bin/zypper --non-interactive --no-gpg-checks --terse list-updates\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003e(Keep in mind this needs to be a single line \u0026hellip;)\u003c/p\u003e","title":"Configuring nagios-plugins-zypper"},{"content":"I just googled again for a Gigabyte to Blocks converter when I stumbled upon this:\n1 echo \u0026#34;(15*1024*1024*1024)/512\u0026#34; | bc Easy to use and yet handy.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-11-02_linux-convert-gigabyte-into-blocks/","summary":"\u003cp\u003eI just googled again for a \u003ca href=\"http://www.unitconversion.org/data-storage/gigabits-to-blocks-conversion.html\"\u003eGigabyte to Blocks\u003c/a\u003e converter when I stumbled upon \u003ca href=\"http://www.unix.com/aix/120651-converting-blocks-megabytes-gigabytes.html#post302359376\"\u003ethis\u003c/a\u003e:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eecho \u0026#34;(15*1024*1024*1024)/512\u0026#34; | bc\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eEasy to use and yet handy.\u003c/p\u003e","title":"Linux: Convert Gigabyte into Blocks"},{"content":"Out of necessity, another SVC shell script was just born. If you ever need to migrate a whole MDisk group onto another, you quickly discover the limited application of the SVC GUI. Now, you could query the VDisks using your original MDisk Group and then copy and paste the VDisk\u0026rsquo;s name (or the VDisk ID) into a command line and simply reuse that svctask migratevdisk command over and over.\nLuckily IBM blessed the SVC with an SSH interface. So again, we can write a (kinda) simple shell script which may look like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 #!/bin/bash svc_cluster_ip=10.0.0.10 svc_priv_dsa=~/.ssh/id_dsa if [ -z $2 ] ; then echo echo \u0026#34; ${0##*/} [ original_mdiskgrp | target_mdiskgrp | (threads) ]\u0026#34; echo echo \u0026#34; mdiskgrp_old - The MDisk Group which currently contains\u0026#34; echo \u0026#34; the VDisks.\u0026#34; echo \u0026#34; mdiskgrp_new - The MDisk Group you wish to migrate the\u0026#34; echo \u0026#34; VDisks migrated to.\u0026#34; echo \u0026#34; threads - Number of processes to use for the migration.\u0026#34; echo \u0026#34; By default, `migratevdisk` uses 2.\u0026#34; echo exit 1; fi if [ ! -f $svc_priv_dsa ] ; then echo \u0026#34; ${0##*/} is missing the SSH DSA private key\u0026#34; echo \u0026#34; needed to access the SAN Volume controller.\u0026#34; echo \u0026#34; Please specify the correct path!\u0026#34; fi mdiskgrp_old=$1 mdiskgrp_new=$2 threads=$3 : ${threads:=2} check_running_migrations() { # Get the number of already running migrations. The SVC is currently # able to run 32 migrations at the same time. running=\u0026#34;$( ssh -i $svc_priv_dsa admin@$svc_cluster_ip svcinfo lsmigrate | grep progress | wc -l )\u0026#34; if [ $running -ge 32 ] ; then echo echo \u0026#34; The SVC is already running the maximum amount of migrations\u0026#34; echo \u0026#34; at this time. Please retry, once the running migrations\u0026#34; echo \u0026#34; finished.\u0026#34; echo exit 1 fi } check_running_migrations if [ \u0026#34;$( ssh -i $svc_priv_dsa admin@$svc_cluster_ip svcinfo lsmdiskgrp $mdiskgrp_new \u0026amp;\u0026gt;/dev/null ; echo $? )\u0026#34; = 1 ] ; then echo \u0026#34;${0##*/}: The MDisk Group ($mdiskgrp_new) doesn\u0026#39;t existent!\u0026#34; exit 1 fi echo \u0026#34;Legend:\u0026#34; echo echo -e \u0026#34; 33[0;32m*33[0m VDisk migration started successfully\u0026#34; echo -e \u0026#34; 33[0;36m*33[0m VDisk migration skipped (already running?)\u0026#34; echo -e \u0026#34; 33[0;31m*33[0m VDisk migration failed to start (wrong name?)\u0026#34; echo echo \u0026#34;Starting the tasks to migrate VDisks of $mdiskgrp_old to $mdiskgrp_new\u0026#34; for vdisk in $( ssh -i $svc_priv_dsa admin@$svc_cluster_ip svcinfo lsvdisk -nohdr -delim : -filtervalue mdisk_grp_name=$mdiskgrp_old ); do vdisk_id=\u0026#34;$( echo $vdisk | cut -d: -f1 )\u0026#34; vdisk_name=\u0026#34;$( echo $vdisk | cut -d: -f2 )\u0026#34; # Check if there\u0026#39;s already a migration running for this vdisk if [ \u0026#34;$( ssh -i $svc_priv_dsa admin@$svc_cluster_ip svcinfo lsmigrate | grep \u0026#34;migrate_source_vdisk_index $vdisk_id$\u0026#34; )\u0026#34; != \u0026#34;\u0026#34; ] ; then echo -e \u0026#34; 33[0;36m*33[0m VDisk $vdisk_name ($vdisk_id)\u0026#34; continue fi check_running_migrations ssh -i $svc_priv_dsa admin@$svc_cluster_ip svctask migratevdisk -mdiskgrp $mdiskgrp_new -threads $threads -vdisk $vdisk_name \u0026amp;\u0026gt;/dev/null response=$? [ $response -eq 0 ] \u0026amp;\u0026amp; echo -e \u0026#34; 33[0;32m*33[0m VDisk $vdisk_name ($vdisk_id)\u0026#34; || echo -e \u0026#34; 33[0;31m*33[0m VDisk $vdisk_name ($vdisk_id)\u0026#34; running=$((running+1)) done echo And the execution would look like this:\n1 2 3 4 svc-mgmt ~ # svctask_migratemdiskgrp DS3400_146G_R1 DS4700_500G_R6 4 The SVC is already running the maximum amount of migrations at this time. Please retry, once the running migrations finished. Or maybe:\n1 2 3 4 5 6 7 8 9 10 11 svc-mgmt ~ # svctask_migratemdiskgrp DS3400_146G_R1 DS4700_500G_R6 4 Legend: * VDisk migration started successfully * VDisk migration skipped (already running?) * VDisk migration failed to start (wrong name?) Starting the tasks to migrate VDisks from DS3400_146G_R1 to DS4700_500G_R6 * VDisk V_ATLAS_C_01 (25) * VDisk V_AETHER_D_01 (13) * VDisk V_DEIMOS_ROOT ","permalink":"https://christian.blog.pakiheim.de/posts/2009-10-29_svc-migrate-vdisks-off-a-mdisk-group-onto-another/","summary":"\u003cp\u003eOut of necessity, another SVC shell script was just born. If you ever need to migrate a whole MDisk group onto another, you quickly discover the limited application of the SVC GUI. Now, you could query the VDisks using your original MDisk Group and then copy and paste the VDisk\u0026rsquo;s name (or the VDisk ID) into a command line and simply reuse that svctask migratevdisk command over and over.\u003c/p\u003e\n\u003cp\u003eLuckily IBM blessed the SVC with an SSH interface. So again, we can write a (kinda) simple shell script which may look like this:\u003c/p\u003e","title":"SVC: Migrate VDisks off a MDisk Group onto another"},{"content":"I\u0026rsquo;m just tracing some troubles I\u0026rsquo;m having with a backup server and two (independent) network adapter ports (as in two ports on two different dual-port nics). If I enable the port and set it to auto configuration, it\u0026rsquo;ll get 100MBit/Half-Duplex, but the Portgroup becomes unavailable.\nIn order to get the connection back, I need to logon on the console (thank god even the backup server got an iLO2), and manually (as in esxcfg-nics -s 1000 -d full vmnic1) configure the adapter to 1GBit/s and full-duplex.\nSince I didn\u0026rsquo;t want to go downstairs and trace the damn cables, I figured I could use the CDP features included in ESX. Turn the NICs on as 100MBit/Half-Duplex and run:\n1 2 3 4 vmware-vim-cmd hostsvc/net/query_networkhint --pnic-names=vmnic1 | egrep \u0026#34;(address|portId)\u0026#34; address = \u0026#34;10.0.0.35\u0026#34;, portId = \u0026#34;GigabitEthernet0/28\u0026#34;, That\u0026rsquo;s all the networking guys should need. Switch\u0026rsquo;s IP-address and the Switch Port where the card is connected to. Tada.\nUpdate: with ESXi 5.1, it\u0026rsquo;s just vim-cmd \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-10-29_esx-query-cdp-information-from-the-command-line/","summary":"\u003cp\u003eI\u0026rsquo;m just tracing some troubles I\u0026rsquo;m having with a backup server and two (independent) network adapter ports (as in two ports on two different dual-port nics). If I enable the port and set it to auto configuration, it\u0026rsquo;ll get 100MBit/Half-Duplex, but the Portgroup becomes unavailable.\u003c/p\u003e\n\u003cp\u003eIn order to get the connection back, I need to logon on the console (thank god even the backup server got an iLO2), and manually (as in esxcfg-nics -s 1000 -d full vmnic1) configure the adapter to 1GBit/s and full-duplex.\u003c/p\u003e","title":"ESX: Query CDP information from the command line"},{"content":"Since I end up googling it each time I need this, it\u0026rsquo;s about time I write it down \u0026hellip; If you want to query a specific RPM for information (Requires/Information/\u0026hellip;) you\u0026rsquo;ll need to use the \u0026ndash;package/-p option.\n-p \u0026lt;file\u0026gt; — Query a Specific RPM Package File Up to now, every means of specifying a package to an RPM query focused on packages that had already been installed. While it\u0026rsquo;s certainly very useful to be able to dredge up information about packages that are already on your system, what about packages that haven\u0026rsquo;t yet been installed? The -p option can do that for you.\nSo, if I wanted to show the Requires of my vmware-tools-kmp:\n1 rpm -qR -p vmware-tools-kmp-default-3.5.0_184236_2.6.16.60_0.21-0.5.i586.rpm ","permalink":"https://christian.blog.pakiheim.de/posts/2009-10-28_rpm-query-a-specific-rpm-file-for-information/","summary":"\u003cp\u003eSince I end up googling it each time I need this, it\u0026rsquo;s about time I write it down \u0026hellip; If you want to query a specific RPM for information (Requires/Information/\u0026hellip;) you\u0026rsquo;ll need to use the \u0026ndash;package/-p option.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch3 id=\"-p---query-a-specific-rpm-package-file\"\u003e\u003cstrong\u003e-p \u003ccode\u003e\u0026lt;file\u0026gt;\u003c/code\u003e\u003c/strong\u003e — Query a Specific RPM Package File\u003c/h3\u003e\n\u003cp\u003eUp to now, every means of specifying a package to an RPM query focused on packages that had already been installed. While it\u0026rsquo;s certainly very useful to be able to dredge up information about packages that are already on your system, what about packages that haven\u0026rsquo;t yet been installed? The \u003cstrong\u003e-p\u003c/strong\u003e option can do that for you.\u003c/p\u003e","title":"RPM: Query a specific rpm-file for information"},{"content":"There might be reasons, you\u0026rsquo;d wish you could make the kernel module package do other things. Two already pop into my head: 1) The mpp-Image upgrades for the ibm-rdac kernel module packages and 2) the \u0026quot; adjustments\u0026quot; which need to be done post install for the VMware kernel module package in /etc/vmware-tools/locations.\nWhat you basically do is this:\nAdd the new subpkg template to your sources list Call the %suse_kernel_module_package macro with the option -s and then add your source number For me this looks like this:\n1 2 3 4 5 6 ... Source4: vmxnet.tar Source5: preamble Source6: subpkg ... %suse_kernel_module_package -p %{S:5} -s %{S:6} um After that, you just need to copy over /usr/lib/rpm/rpm-suse-kernel-module-subpackage to /usr/src/packages/SOURCES/subpkg and make your adjustments to that copy.\nFor example the diff between those two could look like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 --- /usr/lib/rpm/rpm-suse-kernel-module-subpackage +++ /usr/src/packages/SOURCES/subpkg @@ -20,8 +20,8 @@ \u0026#39; $spec ) Provides: %{-n*} = %(echo %{-v*}-%3 | tr - _) -Requires: kernel-%1 -AutoReqProv: on +Requires: kernel-%1 = %( echo %2 | sed \u0026#34;s,-%1,,\u0026#34; ) +AutoReqProv: off %{-p:%{expand:%(cd %_sourcedir; cat %{-p*})}} %description -n %{-n*}-%1 %( @@ -77,6 +77,21 @@ done fi fi +if [ -f /etc/vmware-tools/locations ] ; then + for kmodule in ${modules[@]}; do + echo \u0026#34;file $kmodule $( stat -c %Y $kmodule )\u0026#34; + \u0026gt;\u0026gt; /etc/vmware-tools/locations + echo \u0026#34;file $( echo $kmodule | + sed -e \u0026#34;s,.ko,.o,\u0026#34; -e \u0026#34;s,updates,misc,\u0026#34; )\u0026#34; + \u0026gt;\u0026gt; /etc/vmware-tools/locations + echo \u0026#34;answer $( echo ${kmodule##*/} | sed -e \u0026#34;s,.ko,,\u0026#34; | + tr \u0026#39;[:lower:]\u0026#39; \u0026#39;[:upper:]\u0026#39; )_CONFED yes\u0026#34; + \u0026gt;\u0026gt; /etc/vmware-tools/locations + done + + [ -f /etc/vmware-tools/not_configured ] \u0026amp;\u0026amp; + rm -f /etc/vmware-tools/not_configured +fi %{-i:%{expand:%(cd %_sourcedir; cat %{-i*})}} %preun -n %{-n*}-%1 version=%(echo %{-v*}-%3 | tr - _) @@ -116,8 +131,29 @@ done fi fi +if [ -f /etc/vmware-tools/locations ] ; then + for kmodule in ${modules[@]}; do + MOD=\u0026#34;$( echo ${kmodule##*/} | sed -e \u0026#34;s,.ko,,\u0026#34; | + tr \u0026#39;[:lower:]\u0026#39; \u0026#39;[:upper:]\u0026#39; )_CONFED yes\u0026#34; + [ -n \u0026#34;$( grep \u0026#34;$MOD\u0026#34; /etc/vmware-tools/locations )\u0026#34; ] \u0026amp;\u0026amp; + sed -i \u0026#34;/$MOD/d\u0026#34; /etc/vmware-tools/locations + + [ -n \u0026#34;$( grep \u0026#34;file $kmodule\u0026#34; /etc/vmware-tools/locations )\u0026#34; ] \u0026amp;\u0026amp; + sed -i \u0026#34;/file ${kmodule////\\/}.*/d\u0026#34; /etc/vmware-tools/locations + + MOD=\u0026#34;$( echo $kmodule | sed -e \u0026#34;s,.ko,.o,\u0026#34; -e \u0026#34;s,updates,misc,\u0026#34; )\u0026#34; + [ -n \u0026#34;$( grep \u0026#34;file $MOD\u0026#34; /etc/vmware-tools/locations )\u0026#34; ] \u0026amp;\u0026amp; + sed -i \u0026#34;/file $( echo $MOD | sed -e \u0026#34;s,/,\\/,g\u0026#34; )/d\u0026#34; + /etc/vmware-tools/locations + done + + [ ! -f /etc/vmware-tools/not_configured ] \u0026amp;\u0026amp; + touch /etc/vmware-tools/not_configured +fi %{-u:%{expand:%(cd %_sourcedir; cat %{-u*})}} %files -n %{-n*}-%1 %{-f:%{expand:%(cd %_sourcedir; cat %{-f*})}} %{!-f:%defattr (-,root,root)} %{!-f:/lib/modules/%2} + +# vim: set syntax=on ft=sh : This is my final version of the subpkg template and I hopefully demonstrated how powerful a customized subpkg template can be!\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-10-24_kmp-define-a-new-subpkg-template/","summary":"\u003cp\u003eThere might be reasons, you\u0026rsquo;d wish you could make the kernel module package do other things. Two already pop into my head: 1) The mpp-Image upgrades for the ibm-rdac kernel module packages and 2) the \u0026quot; \u003cem\u003eadjustments\u003c/em\u003e\u0026quot; which need to be done post install for the VMware kernel module package in /etc/vmware-tools/locations.\u003c/p\u003e\n\u003cp\u003eWhat you basically do is this:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eAdd the new subpkg template to your sources list\u003c/li\u003e\n\u003cli\u003eCall the %suse_kernel_module_package macro with the option -s and then add your source number\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eFor me this looks like this:\u003c/p\u003e","title":"KMP: Define a new subpkg template"},{"content":"Today I got this report from my SMT:\n1 2 3 4 5 WARNING: The following repositories cannot be mirrored. Maybe you have not enough permissions to download these repositories? * SLES10-SP2-Pool sles-10-x86_64 * SLES10-SP2-Pool sles-10-i586 However, if you try and disable that repository with smt-catalogs -d, SMT is gonna quit your action with \u0026quot; 0 repositories disabled\u0026quot;. Since I didn\u0026rsquo;t want the error to show up again, here\u0026rsquo;s a quick way on how to disable it.\nOpen up a mysql shell (mysql -u root -p preferably) and enter those queries:\n1 2 use smt; UPDATE Catalogs SET domirror=\u0026#39;N\u0026#39; WHERE DOMIRROR=\u0026#39;Y\u0026#39; AND MIRRORABLE=\u0026#39;N\u0026#39;; Afterwards, if you rerun smt-mirror the warning message should be gone.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-10-24_smt-disable-unmirrorable-catalogs/","summary":"\u003cp\u003eToday I got this report from my SMT:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eWARNING\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eThe\u003c/span\u003e \u003cspan class=\"n\"\u003efollowing\u003c/span\u003e \u003cspan class=\"n\"\u003erepositories\u003c/span\u003e \u003cspan class=\"n\"\u003ecannot\u003c/span\u003e \u003cspan class=\"n\"\u003ebe\u003c/span\u003e \u003cspan class=\"n\"\u003emirrored\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eMaybe\u003c/span\u003e \u003cspan class=\"n\"\u003eyou\u003c/span\u003e \u003cspan class=\"n\"\u003ehave\u003c/span\u003e \u003cspan class=\"ow\"\u003enot\u003c/span\u003e \u003cspan class=\"n\"\u003eenough\u003c/span\u003e \u003cspan class=\"n\"\u003epermissions\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003edownload\u003c/span\u003e \u003cspan class=\"n\"\u003ethese\u003c/span\u003e \u003cspan class=\"n\"\u003erepositories\u003c/span\u003e\u003cspan class=\"err\"\u003e?\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"n\"\u003eSLES10\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eSP2\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ePool\u003c/span\u003e \u003cspan class=\"n\"\u003esles\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e10\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ex86_64\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"n\"\u003eSLES10\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eSP2\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ePool\u003c/span\u003e \u003cspan class=\"n\"\u003esles\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e10\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ei586\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eHowever, if you try and disable that repository with smt-catalogs -d, SMT is gonna quit your action with \u0026quot; \u003cem\u003e0 repositories disabled\u003c/em\u003e\u0026quot;. Since I didn\u0026rsquo;t want the error to show up again, here\u0026rsquo;s a quick way on how to disable it.\u003c/p\u003e\n\u003cp\u003eOpen up a mysql shell (mysql -u root -p preferably) and enter those queries:\u003c/p\u003e","title":"SMT: Disable unmirrorable catalogs"},{"content":"I spent some time yesterday figuring out ways on how to assign custom (as in self-built) RPMs to a installation using SMT. First you obviously need a \u0026quot; external\u0026quot; repository, that can be integrated into the SMT.\nSo we need to create repository someplace, where the SMT can go and grab it. I ain\u0026rsquo;t gonna cover the sharing part, since that is your job! I\u0026rsquo;m just gonna cover the steps on how to create the custom repository and how to integrate it into the SMT.\n1 2 3 4 5 6 7 mkdir -p /srv/www/htdocs/custom-rpms/sles10-addons/rpm/{i586,x86_64,src} # copy some RPMs into the respective arch directories cd /srv/www/htdocs/custom-rpms/sles10-addons/ createrepo -o $PWD . gpg --genkey gpg -a --detach-sign --default-key \u0026lt;keyid\u0026gt; repodata/repomd.xml gpg -a --export \u0026lt;keyid\u0026gt; \u0026gt; repodata/repomd.xml.key That\u0026rsquo;s it, you just created a RPM-repository which you could use with YaST/zypper \u0026hellip; But since you already invested time into getting SMT up and running, you might want to assign this repository based on the product that is being installed.\nSay we have RPMs for SLES10 SP1/SP2/SP3 in this repository for the architectures i586 and x86_64. First you would take a look at the output of smt-list-products and get the ID for the products/architecture you want to assign this to. But since we\u0026rsquo;re lazy, you could just use this:\n1 2 3 4 5 6 smt-setup-custom-repos $( for i in $( smt-list-products -f csv | egrep \u0026#34;SUSE-Linux-Enterprise-Server.*(i(.*)86|x86_64)\u0026#34; | cut -d, -f1 | sed \u0026#39;s,\u0026#34;,,g\u0026#39; ); do echo -n \u0026#34;--productid $i \u0026#34;; done ) --name \u0026#39;SLE10-Addons\u0026#39; --description \u0026#39;Additional RPMs not part of SLES10 (i586/x86_64)\u0026#39; --exturl \u0026#39;http://smt.home.barfoo.org/custom-rpms/sle-10-addons\u0026#39; And likewise for SLES11:\n1 2 3 4 5 6 smt-setup-custom-repos $( for i in $( smt-list-products -f csv | egrep \u0026#34;SUSE_SLES.*(i(.*)86|x86_64)\u0026#34; | cut -d, -f1 | sed \u0026#39;s,\u0026#34;,,g\u0026#39; ); do echo -n \u0026#34;--productid $i \u0026#34;; done ) --name \u0026#39;SLE11-Addons\u0026#39; --description \u0026#39;Additional RPMs not part of SLES11 (i586/x86_64)\u0026#39; --exturl \u0026#39;http://smt.home.barfoo.org/custom-rpms/sle-11-addons/\u0026#39; Now, after smt-mirror has been executed the next time (either by yourself or via the predefined crontab entry), SMT is able to assign this repository to clients. While this isn\u0026rsquo;t completely true \u0026ndash; SMT is able to assign this custom catalog before running smt-mirror, but it just doesn\u0026rsquo;t make sense, since it doesn\u0026rsquo;t contain any data \u0026ndash; it still works.\nNow, once you install the next SLES10/SLES11 (hopefully you enabled suseRegister, that actually gathers the channels), SMT will assign this \u0026ldquo;update channel\u0026rdquo; (jesus, why does Novell use so many words for the same damn thing ?), on top of all the others, to your system.\nThe only trouble with this is, that if you want to install packages from this repository during setup, it\u0026rsquo;s not gonna work. That\u0026rsquo;s because YaST (or AutoYaST) first install packages, preps the environment and after prebooting the new system, then runs suseRegister/customer_center \u0026hellip; Screwed. Again.\nGuess the only way is to add the original repository (no need to automatically assign this, since we can\u0026rsquo;t install during setup) into the add-ons section of my AutoYaST file.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-10-22_creating-a-custom-rpm-repository-for-smt/","summary":"\u003cp\u003eI spent some time yesterday figuring out ways on how to assign custom (as in self-built) RPMs to a installation using SMT. First you obviously need a \u0026quot; \u003cem\u003eexternal\u003c/em\u003e\u0026quot; repository, that can be integrated into the SMT.\u003c/p\u003e\n\u003cp\u003eSo we need to create repository someplace, where the SMT can go and grab it. I ain\u0026rsquo;t gonna cover the sharing part, since that is your job! I\u0026rsquo;m just gonna cover the steps on how to create the custom repository and how to integrate it into the SMT.\u003c/p\u003e","title":"Creating a custom RPM repository for SMT"},{"content":"I recently \u0026ldquo;redesigned\u0026rdquo; the PXE-installation server, which comes with a Samba service to easily move files on/off the box. The old one had the restriction, you need to create local user accounts. Since I also did an distribution upgrade, I wanted to try the integration of SLES11 into Active Directory.\nAnd as it turns out, it really is simple. Just follow the steps outlined in the handbook.\nOpen the Windows Domain Membership module, yast samba-client (or yast, then Network Services -\u0026gt; Windows Domain Membership) and enter your Domain information Open the Samba Server Module, yast samba-server (or yast, then Network Services -\u0026gt; Samba Server) and also enter your Domain information Just make sure, you also check the box labeled Also Use SMB Information for Linux Authentication, otherwise it won\u0026rsquo;t work \u0026ndash; don\u0026rsquo;t ask me why \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-10-21_active-directory-authentification-for-samba-on-sles11/","summary":"\u003cp\u003eI recently \u0026ldquo;redesigned\u0026rdquo; the PXE-installation server, which comes with a Samba service to easily move files on/off the box. The old one had the restriction, you need to create local user accounts. Since I also did an distribution upgrade, I wanted to try the integration of SLES11 into Active Directory.\u003c/p\u003e\n\u003cp\u003eAnd as it turns out, it really is simple. Just follow the steps \u003ca href=\"http://www.suse.com/documentation/sles11/book_sle_admin/data/sec_samba_adnet.html\"\u003eoutlined in the handbook\u003c/a\u003e.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eOpen the Windows Domain Membership module, yast samba-client (or yast, then Network Services -\u0026gt; Windows Domain Membership) and enter your Domain information\u003c/li\u003e\n\u003cli\u003eOpen the Samba Server Module, yast samba-server (or yast, then Network Services -\u0026gt; Samba Server) and also enter your Domain information\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eJust make sure, you also check the box labeled \u003cem\u003e\u003cstrong\u003eAlso Use SMB Information for Linux Authentication\u003c/strong\u003e\u003c/em\u003e, otherwise it won\u0026rsquo;t work \u0026ndash; don\u0026rsquo;t ask me why \u0026hellip;\u003c/p\u003e","title":"Active Directory authentification for Samba on SLES11"},{"content":"My home NAS, powered by a (used) 3ware 9550SXU-8LP, started behaving weird during the weekend. The box would boot one time, but if you\u0026rsquo;d reboot it again it wouldn\u0026rsquo;t come back up. Now, since I don\u0026rsquo;t have a monitor attached to it (I didn\u0026rsquo;t take the monitor with me when I moved), I needed to borrow one from work \u0026ndash; I\u0026rsquo;m gonna buy a DVI-D to HDMI-adapter soon, since the 42\u0026quot; LCD-TV is right besides the NAS.\nAfter looking at it yesterday, the 3ware boots up the first time, but when I rebooted the system it would look like this:\n1 2 Waiting for 3ware Controller to Initialize... There is no response from the firmware Please hit a key to continue. The firmware is incompatible with BIOS. After hitting the any key, the system would continue to boot just fine, but without the 2,6TB RAID5 array hosted on the 3ware.\nI opened the box up, looked into the case but couldn\u0026rsquo;t find anything obvious \u0026hellip; The controller card was sitting just fine in the PCI-X slot. After powering down the box, I removed the card out of suspicion, blew into the slot, and reseated the card again into that same slot .. guess what ?\nIt works \u0026hellip; been running the system ever since that, without any troubles \u0026#x2757;\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-10-21_3ware-9550sxu-8lp-trouble/","summary":"\u003cp\u003eMy home NAS, powered by a (used) 3ware 9550SXU-8LP, started behaving weird during the weekend. The box would boot one time, but if you\u0026rsquo;d reboot it again it wouldn\u0026rsquo;t come back up. Now, since I don\u0026rsquo;t have a monitor attached to it (I didn\u0026rsquo;t take the monitor with me when I moved), I needed to borrow one from work \u0026ndash; I\u0026rsquo;m gonna buy a DVI-D to HDMI-adapter soon, since the 42\u0026quot; LCD-TV is right besides the NAS.\u003c/p\u003e","title":"3ware 9550SXU-8LP trouble"},{"content":"VMware built an kickstart generator into ESX 3.5. You just need to enable it, simply by editing an XML configuration and restarting the webAccess service. Simply edit /usr/lib/vmware/webAccess/tomcat/apache-tomcat-5.5.26/webapps/ui/WEB-INF/struts-config.xml and look for the line saying:\n1 \u0026lt;action path=\u0026#34;/scriptedInstall\u0026#34; type=\u0026#34;org.apache.struts.actions.ForwardAction\u0026#34; parameter=\u0026#34;/WEB-INF/jsp/scriptedInstall/disabled.jsp\u0026#34; /\u0026gt; This line needs to be commented out (\u0026lt;\u0026ndash; and \u0026ndash;\u0026gt;) and the lines following, having those comment marks around them needs to be removed.\n1 2 3 4 5 6 7 8 9 10 11 \u0026lt;!-- \u0026lt;action path=\u0026#34;/scriptedInstall\u0026#34; type=\u0026#34;com.vmware.webcenter.scripted.ProcessAction\u0026#34;\u0026gt; \u0026lt;forward name=\u0026#34;scriptedInstall.form1\u0026#34; path=\u0026#34;/WEB-INF/jsp/scriptedInstall/form1.jsp\u0026#34; /\u0026gt; \u0026lt;forward name=\u0026#34;scriptedInstall.form2\u0026#34; path=\u0026#34;/WEB-INF/jsp/scriptedInstall/form2.jsp\u0026#34; /\u0026gt; \u0026lt;forward name=\u0026#34;scriptedInstall.form3\u0026#34; path=\u0026#34;/WEB-INF/jsp/scriptedInstall/form3.jsp\u0026#34; /\u0026gt; \u0026lt;forward name=\u0026#34;scriptedInstall.form4\u0026#34; path=\u0026#34;/WEB-INF/jsp/scriptedInstall/form4.jsp\u0026#34; /\u0026gt; \u0026lt;forward name=\u0026#34;scriptedInstall.form5\u0026#34; path=\u0026#34;/WEB-INF/jsp/scriptedInstall/form5.jsp\u0026#34; /\u0026gt; \u0026lt;forward name=\u0026#34;scriptedInstall.form6\u0026#34; path=\u0026#34;/WEB-INF/jsp/scriptedInstall/form6.jsp\u0026#34; /\u0026gt; \u0026lt;forward name=\u0026#34;scriptedInstall.form7\u0026#34; path=\u0026#34;/WEB-INF/jsp/scriptedInstall/form7.jsp\u0026#34; /\u0026gt; \u0026lt;/action\u0026gt; --\u0026gt; After doing that, you should be able to restart the webAccess service, and after that access your ESX host.\n1 2 3 4 5 # service vmware-webAccess restart Stopping VMware ESX Server webAccess: VMware ESX Server webAccess [FAILED] Starting VMware ESX Server webAccess: VMware ESX Server webAccess [ OK ] If that worked, you should see the Login to Script Installer link on the Dashboard of the Web interface.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-10-14_using-the-integrated-kickstart-generator/","summary":"\u003cp\u003eVMware built an kickstart generator into ESX 3.5. \u003ca href=\"http://pubs.vmware.com/vi35u2/install/wwhelp/wwhimpl/common/html/wwhelp.htm?context=install\u0026amp;file=install_remote_scripted.11.3.html#957177\"\u003eYou just need to enable it\u003c/a\u003e, simply by editing an XML configuration and restarting the webAccess service. Simply edit /usr/lib/vmware/webAccess/tomcat/apache-tomcat-5.5.26/webapps/ui/WEB-INF/struts-config.xml and look for the line saying:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026lt;action path=\u0026#34;/scriptedInstall\u0026#34; type=\u0026#34;org.apache.struts.actions.ForwardAction\u0026#34; parameter=\u0026#34;/WEB-INF/jsp/scriptedInstall/disabled.jsp\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThis line needs to be commented out (\u0026lt;\u0026ndash; and \u0026ndash;\u0026gt;) and the lines following, having those comment marks around them needs to be removed.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-1-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026lt;!--\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026lt;action path=\u0026#34;/scriptedInstall\u0026#34; type=\u0026#34;com.vmware.webcenter.scripted.ProcessAction\u0026#34;\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u0026lt;forward name=\u0026#34;scriptedInstall.form1\u0026#34; path=\u0026#34;/WEB-INF/jsp/scriptedInstall/form1.jsp\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u0026lt;forward name=\u0026#34;scriptedInstall.form2\u0026#34; path=\u0026#34;/WEB-INF/jsp/scriptedInstall/form2.jsp\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u0026lt;forward name=\u0026#34;scriptedInstall.form3\u0026#34; path=\u0026#34;/WEB-INF/jsp/scriptedInstall/form3.jsp\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u0026lt;forward name=\u0026#34;scriptedInstall.form4\u0026#34; path=\u0026#34;/WEB-INF/jsp/scriptedInstall/form4.jsp\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u0026lt;forward name=\u0026#34;scriptedInstall.form5\u0026#34; path=\u0026#34;/WEB-INF/jsp/scriptedInstall/form5.jsp\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u0026lt;forward name=\u0026#34;scriptedInstall.form6\u0026#34; path=\u0026#34;/WEB-INF/jsp/scriptedInstall/form6.jsp\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u0026lt;forward name=\u0026#34;scriptedInstall.form7\u0026#34; path=\u0026#34;/WEB-INF/jsp/scriptedInstall/form7.jsp\u0026#34; /\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026lt;/action\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e--\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAfter doing that, you should be able to restart the webAccess service, and after that access your ESX host.\u003c/p\u003e","title":"Using the integrated kickstart generator"},{"content":"As I wrote before, I have been working on our AutoYaST setup. That entitles determining whether or not we\u0026rsquo;re currently inside a VMware environment. AutoYaST rules wise, that\u0026rsquo;s pretty easy (even though the MAC-tag is empty \u0026#x1f633;):\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \u0026lt;!-- Addons: Install VMware Tools / KMP --\u0026gt; \u0026lt;rule\u0026gt; \u0026lt;custom1\u0026gt; \u0026lt;script\u0026gt; if ip a | grep \u0026#34;link/ether 00:50:56\u0026#34; \u0026gt;/dev/null ; then echo -n vmware fi; \u0026lt;/script\u0026gt; \u0026lt;match\u0026gt;*\u0026lt;/match\u0026gt; \u0026lt;match_type\u0026gt;exact\u0026lt;/match_type\u0026gt; \u0026lt;/custom1\u0026gt; \u0026lt;result\u0026gt; \u0026lt;profile\u0026gt;addons/@custom1@.xml\u0026lt;/profile\u0026gt; \u0026lt;/result\u0026gt; \u0026lt;/rule\u0026gt; The hard part is figuring out ways, to make the VMware Tools installation as pain free as possible. One thing I can\u0026rsquo;t do, is running vmware-config-tools.pl \u0026hellip;\nSince I already install my VMware-Tools Kernel modules package, I really don\u0026rsquo;t need to. I just needed to find out, what exactly the configuration script does in order to enable the loading of the modules through the init-script.\nFinding that out is rather easy, just copy /etc/vmware-tools/locations to locations.orig on a freshly installed system, run vmware-config-tools.pl and then run a diff of those two files.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 --- /etc/vmware-tools/locations.orig +++ /etc/vmware-tools/locations @@ -68,3 +68,110 @@ file /usr/bin/vmware-hgfsclient remove_file /sbin/mount.vmhgfs file /sbin/mount.vmhgfs +file /lib/modules/2.6.27.19-5-pae/misc/vmmemctl.o 1255413193 +file /lib/modules/2.6.27.19-5-pae/misc/vmmemctl.ko +answer VMMEMCTL_CONFED yes +file /lib/modules/2.6.27.19-5-pae/misc/vmhgfs.o 1255413195 +file /lib/modules/2.6.27.19-5-pae/misc/vmhgfs.ko +answer VMHGFS_CONFED yes +file /lib/modules/2.6.27.19-5-pae/misc/vmxnet.o 1255413196 +file /lib/modules/2.6.27.19-5-pae/misc/vmxnet.ko +answer VMXNET_CONFED yes +file /lib/modules/2.6.27.19-5-pae/misc/vmblock.o 1255413196 +file /lib/modules/2.6.27.19-5-pae/misc/vmblock.ko +answer VMBLOCK_CONFED yes +file /etc/vmware-tools/tools.conf 1255413196 +file /etc/vmware-tools/xautostart.conf 1255413196 There is a lot more within that diff, but the important part about those changes are the CONFED parts. Apparently it\u0026rsquo;s completely enough (at least for the VMware Tools of ESX 3.5u4) to add those to the locations file. Tada\nOnce you start /etc/init.d/vmware-tools the next time, it\u0026rsquo;ll load the modules.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-10-13_autoinstalling-vmware-tools/","summary":"\u003cp\u003eAs I \u003ca href=\"/posts/2014-08-08_sles11-and-autoyast\" title=\"SLES11 and AutoYaST\"\u003ewrote before\u003c/a\u003e, I have been working on our AutoYaST setup. That entitles determining whether or not we\u0026rsquo;re currently inside a VMware environment. AutoYaST rules wise, that\u0026rsquo;s pretty easy (even though the MAC-tag is empty \u0026#x1f633;):\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u0026lt;!-- Addons: Install VMware Tools / KMP --\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026lt;rule\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u0026lt;custom1\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u0026lt;script\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eif ip a | grep \u0026#34;link/ether 00:50:56\u0026#34; \u0026gt;/dev/null ; then\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  echo -n vmware\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efi;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u0026lt;/script\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u0026lt;match\u0026gt;*\u0026lt;/match\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u0026lt;match_type\u0026gt;exact\u0026lt;/match_type\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u0026lt;/custom1\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u0026lt;result\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u0026lt;profile\u0026gt;addons/@custom1@.xml\u0026lt;/profile\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u0026lt;/result\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026lt;/rule\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThe hard part is figuring out ways, to make the VMware Tools installation as pain free as possible. One thing I can\u0026rsquo;t do, is running vmware-config-tools.pl \u0026hellip;\u003c/p\u003e","title":"Autoinstalling VMware-Tools"},{"content":"A week ago (September 02nd), I received a mail detailing the release of IBM\u0026rsquo;s new multipathing device driver for the DS4x00 series, which finally works with SLES11 (the available software up till now doesn\u0026rsquo;t \u0026ndash; as in fails with kernels \u0026gt; 2.6.26 iirc).\nESC+ notification detailing the release\nThere wouldn\u0026rsquo;t be any trouble, if IBM (or rather the vendor providing the driver \u0026ndash; LSI) would actually release the driver \u0026hellip; up till today, I have yet to see the new version appear on the download page. I already tried to notify IBM about the trouble, but as usual there is lack of ways to actually get this to the right person.\nWell, IBM just replied to my feedback and apparently the download is available (it is right now, after two weeks hah \u0026ndash; finally).\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-09-09_new-ibm-rdac-version-or-not/","summary":"\u003cp\u003eA week ago (September 02nd), I received a mail detailing the release of IBM\u0026rsquo;s new multipathing device driver for the DS4x00 series, which finally works with SLES11 (the available software up till now doesn\u0026rsquo;t \u0026ndash; as in fails with kernels \u0026gt; 2.6.26 iirc).\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2009/09/ibm-rdac-new-version.png\"\n         alt=\"ESC\u0026#43; notification detailing the release\" width=\"450\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eESC+ notification detailing the release\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eThere wouldn\u0026rsquo;t be any trouble, if IBM (or rather the vendor providing the driver \u0026ndash; LSI) would actually release the driver \u0026hellip; up till today, I have yet to see the new version appear on the \u003ca href=\"http://www.lsi.com/rdac/ds4000.html\"\u003edownload page\u003c/a\u003e. I already tried to notify IBM about the trouble, but as usual there is lack of ways to actually get this to the right person.\u003c/p\u003e","title":"New IBM RDAC version (or not)"},{"content":"I spent yesterday afternoon upgrading our TS7530, and in my fad I also upgraded TSM to 5.5.3. Now, once I started TSM it quickly started complaining about the paths to the drives.\n1 2 3 4 5 6 7 8 9 ANR8873E The path from source TSM1 to destination VTL1_DR03 (/dev/lin_tape/IBMtape03) is taken offline. ANR8873E The path from source TSM1 to destination VTL1_DR03 (/dev/lin_tape/IBMtape03) is taken offline. HBA_LoadLibrary: previously unfreed libraries exist, call HBA_FreeLibrary(). ANR8873E The path from source TSM1 to destination VTL1_DR07 (/dev/lin_tape/IBMtape07) is taken offline. ANR8873E The path from source TSM1 to destination VTL1_DR07 (/dev/lin_tape/IBMtape-07) is taken offline. I thought maybe this is a mere device problem (we have had them before), so I rebooted the boxes. But still no luck and I went home after about an hour of trying without any luck. In the morning, my co-worker called our trustworthy IBM service partner, and the TSM consultant said he had the exact, same problem yesterday. We would have two options:\nEnable the option SANDISCOVERY, with the ( completely undocumented) Passive setting (setopt SANDISCOVERY PASSIVE) Downgrade back to 5.5.2 For now, we implemented the first option, in the hope that\u0026rsquo;ll solve our troubles. And it actually does.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-08-28_tivoli-storage-manager-server-5-5-3/","summary":"\u003cp\u003eI spent yesterday afternoon upgrading our TS7530, and in my fad I also upgraded TSM to 5.5.3. Now, once I started TSM it quickly started complaining about the paths to the drives.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e9\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eANR8873E The path from source TSM1 to destination VTL1_DR03\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(/dev/lin_tape/IBMtape03) is taken offline.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eANR8873E The path from source TSM1 to destination VTL1_DR03\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(/dev/lin_tape/IBMtape03) is taken offline.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eHBA_LoadLibrary: previously unfreed libraries exist, call HBA_FreeLibrary().\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eANR8873E The path from source TSM1 to destination VTL1_DR07\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(/dev/lin_tape/IBMtape07) is taken offline.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eANR8873E The path from source TSM1 to destination VTL1_DR07\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(/dev/lin_tape/IBMtape-07) is taken offline.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eI thought maybe this is a mere device problem (we have had them before), so I rebooted the boxes. But still no luck and I went home after about an hour of trying without any luck. In the morning, my co-worker called our trustworthy IBM service partner, and the TSM consultant said he had the \u003ca href=\"http://www.ibm.com/developerworks/forums/thread.jspa?threadID=270799\u0026amp;tstart=0\"\u003eexact\u003c/a\u003e, \u003ca href=\"http://www.adsm.org/forum/showthread.php?p=74331\"\u003esame\u003c/a\u003e problem yesterday. We would have two options:\u003c/p\u003e","title":"Tivoli Storage Manager Server 5-5-3"},{"content":"If you remember back to July, I looked into some troubles I had with the IBM RSA II adapter\u0026rsquo;s Java interface and the latest JRE updates. I just noticed, that IBM released a new firmware yesterday for the RSA. The ChangeLog states this:\nVersion 1.13, GFEP35A Problem(s) Fixed:\n* Suggested o Fix for Remote Control General Exception in JRE 1.6 update 12 and above. o Corrected a problem that DHCP renew/release may fail after a long time. o Corrected a problem that remote control preference link disapears after creating new key buttons. o Corrected a problem that cause event number shows only from 0 to 255 when views RSA log via telnet session.\nAs you can see, IBM finally decided that it isn\u0026rsquo;t a Sun problem but rather their own! Finally, after about 4 months a fix, yay!\nEven if the fix is just for the x3550 for now, but that puts a light to the end of the tunnel and puts up hope, that they are gonna fix it for the other RSA adapters too!\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-08-19_ibm-rsa-ii-adapter-and-java-re-fini/","summary":"\u003cp\u003eIf you remember back to July, \u003ca href=\"/posts/2009-08-19_ibm-rsa-ii-adapter-and-java-re-fini\" title=\"IBM RSA II adapter and Java RE\"\u003eI looked into some troubles\u003c/a\u003e I had with the IBM RSA II adapter\u0026rsquo;s Java interface and the latest JRE updates. I just noticed, that IBM released a \u003ca href=\"http://www-947.ibm.com/support/entry/portal/docdisplay?brand=5000008\u0026amp;lndocid=MIGR-5081602\"\u003enew firmware\u003c/a\u003e yesterday for the RSA. The ChangeLog states this:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eVersion 1.13, GFEP35A\u003c/strong\u003e\nProblem(s) Fixed:\u003c/p\u003e\n\u003cp\u003e* Suggested\no Fix for Remote Control General Exception in JRE 1.6 update 12 and above.\no Corrected a problem that DHCP renew/release may fail after a long time.\no Corrected a problem that remote control preference link disapears after creating new key buttons.\no Corrected a problem that cause event number shows only from 0 to 255 when views RSA log via telnet session.\u003c/p\u003e","title":"IBM RSA II adapter and Java RE (fini)"},{"content":"One problem gone, another one turns up. When rpc.statd (nfs-common) tries to start before portmap, it\u0026rsquo;s gonna result in failure. Now, the logfile (/var/log/daemon.log) is gonna print a rather cryptic error message:\n1 2 Aug 4 15:54:25 xen2 rpc.statd[3419]: Version 1.1.2 Starting Aug 4 15:54:25 xen2 rpc.statd[3419]: unable to register (statd, 1, udp). After fixing the start order (I really hate SUSE/Debian* for not having init-script dependencies \u0026ndash; like Gentoo\u0026rsquo;s baselayout/Roy\u0026rsquo;s openrc does have), everything is like it should be and I\u0026rsquo;m able to put the /srv/xen mount into the fstab \u0026hellip;\n1 2 3 for i in /etc/rc2.d/ /etc/rc3.d/ /etc/rc4.d/ /etc/rc5.d/; do cd $i; rm S20nfs-common; ln -s ../init.d/nfs-common S21nfs-common; done ","permalink":"https://christian.blog.pakiheim.de/posts/2009-08-04_rpc-statd-starting-before-portmap/","summary":"\u003cp\u003e\u003ca href=\"/posts/2014-08-08_portmap-hanging-on-shutdown\" title=\"portmap hanging on shutdown\"\u003eOne problem gone\u003c/a\u003e, another one turns up. When rpc.statd (nfs-common) tries to start before portmap, it\u0026rsquo;s gonna result in failure. Now, the logfile (/var/log/daemon.log) is gonna print a rather cryptic error message:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAug  4 15:54:25 xen2 rpc.statd[3419]: Version 1.1.2 Starting\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAug  4 15:54:25 xen2 rpc.statd[3419]: unable to register (statd, 1, udp).\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAfter fixing the start order (I really hate \u003cem\u003eSUSE\u003c/em\u003e/Debian* for not having init-script dependencies \u0026ndash; like Gentoo\u0026rsquo;s baselayout/Roy\u0026rsquo;s \u003ca href=\"http://roy.marples.name/projects/openrc\"\u003eopenrc\u003c/a\u003e does have), everything is like it should be and I\u0026rsquo;m able to put the /srv/xen mount into the fstab \u0026hellip;\u003c/p\u003e","title":"rpc-statd starting before portmap"},{"content":"As I mentioned yesterday, I\u0026rsquo;m currently doing some project work. Said project includes InfiniBand technology.\nApparently we bought a \u0026ldquo;cheap\u0026rdquo; InfiniBand switch, which comes without a subnet manager. So, in order to communicate between the nodes, you need to install the subnet manager (opensm in my case) on each node.\n1 2 3 4 echo \u0026#39;deb http://pkg-ofed.alioth.debian.org/apt/ofed ./\u0026#39; \u0026gt; /etc/apt/sources.list.d/openfabrics.list; aptitude update; aptitude install opensm In order to utilize the InfiniBand interface you need to do a few things first though:\nObviously install the opensm package Add ib_umad and ib_ipoib to /etc/modules After installing opensm on the host as well as the NFS root, opensm comes up just fine and the network starts automatically. Only trouble right now is, that ISC\u0026rsquo;s DHCP doesn\u0026rsquo;t support InfiniBand, otherwise I could even utilize DHCP to distribute the IP addresses.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-08-04_ofed-packages-for-debian/","summary":"\u003cp\u003e\u003ca href=\"/posts/2014-08-08_xen-dom0-failing-with-kernel-panic\" title=\"Xen dom0 failing with kernel panic\"\u003eAs I mentioned yesterday\u003c/a\u003e, I\u0026rsquo;m currently doing some project work. Said project includes InfiniBand technology.\u003c/p\u003e\n\u003cp\u003eApparently we bought a \u0026ldquo;cheap\u0026rdquo; InfiniBand switch, which comes without a subnet manager. So, in order to communicate between the nodes, you need to install the subnet manager (\u003ca href=\"http://pkg-ofed.alioth.debian.org/\"\u003eopensm\u003c/a\u003e in my case) on each node.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eecho \u0026#39;deb http://pkg-ofed.alioth.debian.org/apt/ofed ./\u0026#39; \u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  /etc/apt/sources.list.d/openfabrics.list;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  aptitude update;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  aptitude install opensm\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eIn order to utilize the InfiniBand interface you need to do a few things first though:\u003c/p\u003e","title":"OFED packages for Debian"},{"content":"Today, I had a rather troublesome morning. Once I got to work, Nagios was already complaining about the lin_taped on one of our TSM servers, which apparently failed due to too many SCSI resets. Additionally, I can\u0026rsquo;t login using the VE console (I can login however using SSH) so I ended up opening up a IBM Electronic Service Call (ESC+).\nUsing SSH, I can get some information on the VE\u0026rsquo;s status:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 vetapeservice@VTL-A:~\u0026gt; sudo /ve/bin/ve status IBM VE for Tape Server v3.00 (Build 1465) Copyright (c) 2001-2008 FalconStor Software. All Rights Reserved. Status of VE for Tape SNMPD Module [RUNNING] Status of VE for Tape Configuration Module [RUNNING] Status of VE for Tape Base Module [RUNNING] Status of VE for Tape HBA Module [RUNNING] Status of VE for Tape Authentication Module [RUNNING] Status of VE for Tape Server (Compression) Module [RUNNING] Status of VE for Tape Server (Hifn HW Compression) Module [RUNNING] Status of VE for Tape Server (Application Upcall) Module [RUNNING] Status of VE for Tape Server (FSNBase) Module [RUNNING] Status of VE for Tape Server (Upcall) Module [RUNNING] Status of VE for Tape Server (Application) Module [RUNNING] Status of VE for Tape Server (Application IOCTL) Module [RUNNING] Status of VE for Tape Server (User) [STOPPED] Status of VE for Tape Target Module [RUNNING] Status of VE for Tape Server IMA Daemon [RUNNING] Status of VE for Tape Server RDE Daemon [RUNNING] Status of VE for Tape Communication Module [RUNNING] Status of VE for Tape Logger Module [RUNNING] Status of VE for Tape Call Home Module [RUNNING] Status of VE for Tape Local Client (VBDI) [RUNNING] Status of VE for Tape Self Monitor Module [RUNNING] Status of VE for Tape Failover Module [RUNNING] vetapeservice@VTL-B:~\u0026gt; sudo /ve/bin/ve status IBM VE for Tape Server v3.00 (Build 1465) Copyright (c) 2001-2008 FalconStor Software. All Rights Reserved. Status of VE for Tape SNMPD Module [RUNNING] Status of VE for Tape Configuration Module [RUNNING] Status of VE for Tape Base Module [RUNNING] Status of VE for Tape HBA Module [RUNNING] Status of VE for Tape Authentication Module [RUNNING] Status of VE for Tape Server (Compression) Module [RUNNING] Status of VE for Tape Server (Hifn HW Compression) Module [RUNNING] Status of VE for Tape Server (Application Upcall) Module [RUNNING] Status of VE for Tape Server (FSNBase) Module [RUNNING] Status of VE for Tape Server (Upcall) Module [RUNNING] Status of VE for Tape Server (Application) Module [RUNNING] Status of VE for Tape Server (Application IOCTL) Module [RUNNING] Status of VE for Tape Server (User) [RUNNING] Status of VE for Tape Target Module [RUNNING] Status of VE for Tape Server IMA Daemon [RUNNING] Status of VE for Tape Server RDE Daemon [RUNNING] Status of VE for Tape Communication Module [RUNNING] Status of VE for Tape Logger Module [RUNNING] Status of VE for Tape Call Home Module [RUNNING] Status of VE for Tape Local Client (VBDI) [RUNNING] Status of VE for Tape Self Monitor Module [RUNNING] Status of VE for Tape Failover Module [RUNNING] After looking a bit deeper, it seems that none of the two TSM server is able to see the IBMchanger devices for the first VTL. The second is perfectly visible, just not the first. After putting both VE nodes into suspended failover, gathering support data for the IBM support from both VE\u0026rsquo;s and the Brocade SAN switches, apparently everything works again. I guess the library does have \u0026quot; self healing\u0026quot; properties.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-08-01_ts7530-authentification-failure/","summary":"\u003cp\u003eToday, I had a rather troublesome morning. Once I got to work, Nagios was already complaining about the lin_taped on one of our TSM servers, which apparently failed due to too \u003ca href=\"/uploads/2009/07/messages\"\u003emany SCSI resets\u003c/a\u003e. Additionally, I can\u0026rsquo;t login using the VE console (I can login however using SSH) so I ended up opening up a IBM Electronic Service Call (ESC+).\u003c/p\u003e\n\u003cp\u003eUsing SSH, I can get some information on the VE\u0026rsquo;s status:\u003c/p\u003e","title":"TS7530 authentification failure"},{"content":"I just converted one of my (old) templates, as I wanted to refresh the updates and the virus scanner. After converting, I was asked about the UUID (no clue why), and expected to be done with it. But after looking at the console, I got the following, completely cryptic message:\nUnable to connect to MKS\nAfter digging a bit deeper (that is looking at the vmware.log of the virtual machine, since the message of the GUI is real cryptic), I\u0026rsquo;m a bit wiser:\n1 2 3 4 5 6 Jul 31 08:25:16.637: vmx| [msg.svgaUI.badLimits] Insufficient video RAM. The maximum resolution of the virtual machine will be limited to 1176x885 at 16 bits per pixel. To use the configured maximum resolution of 2360x1770 at 16 bits per pixel, increase the amount of video RAM allocated to this virtual machine by setting svga.vramSize=\u0026#34;16708800\u0026#34; in the virtual machine\u0026#39;s configuration file. After softly shutting the VM down, and the powering the VM back up everything is back to working order.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-07-31_vmware-vsphere-and-templates/","summary":"\u003cp\u003eI just converted one of my (old) templates, as I wanted to refresh the updates and the virus scanner. After converting, I was asked about the UUID (no clue why), and expected to be done with it. But after looking at the console, I got the following, completely cryptic message:\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2009/07/win-xp_template-error.png\"\n         alt=\"Unable to connect to MKS\" width=\"400\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eUnable to connect to MKS\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eAfter digging a bit deeper (that is looking at the vmware.log of the virtual machine, since the message of the GUI is \u003cem\u003e\u003cstrong\u003ereal\u003c/strong\u003e\u003c/em\u003e cryptic), I\u0026rsquo;m a bit wiser:\u003c/p\u003e","title":"VMware vSphere and templates"},{"content":"I just had yet another support call with IBM, concerning the Tape Console (or VE console, courtesy of Falconstor). My basic problem was/is, that I, as a german person, do have a german Windows Server 2003 installation. Now, if you do have german decimal number format selected in the regional settings, the display is gonna be kinda impaired and you\u0026rsquo;re gonna see something like this:\nVE console with german decimal number format\nAnd now compared to the english decimal number format:\nVE console with english decimal number format\nThis time, the IBM support was quite fast in answering to my ESC, more or less to my satisfaction. Basic statement from IBM is: The VTL console isn\u0026rsquo;t supported on any german Windows OS. It\u0026rsquo;s only supported on a english Windows OS.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-07-31_ibm-ts7530-and-the-virtualization-engine-for-tape-console/","summary":"\u003cp\u003eI just had yet another support call with \u003ca href=\"http://www.ibm.com/us/en/\"\u003eIBM\u003c/a\u003e, concerning the Tape Console (or VE console, courtesy of \u003ca href=\"http://www.falconstor.com\"\u003eFalconstor\u003c/a\u003e). My basic problem was/is, that I, as a german person, do have a german Windows Server 2003 installation. Now, if you do have german decimal number format selected in the regional settings, the display is gonna be kinda impaired and you\u0026rsquo;re gonna see something like this:\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2009/07/ve_console-german.png\"\n         alt=\"VE console with german decimal number format\" width=\"400\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eVE console with german decimal number format\u003c/p\u003e","title":"IBM TS7530 and the Virtualization Engine for Tape Console"},{"content":"Tobi recently finished writing yet another book, which he also talked about in a blog post. Shortly after, I asked him a rather curious question. What exactly is the plant or animal on the cover of the book ? He was kind enough to send a voucher copy of the book my way.\nPraxisbuch Nagios\nHe actually mentions it in the credits at the beginning of the book. Turns out it is an animal, a sea pen or sea feather (I\u0026rsquo;m guessing at Pennatula aculeata).\nNow as for the content of the book itself, I do have to admit that I haven\u0026rsquo;t read the whole book. I just picked a few topics (SNMP-Traps with Nagios, notifications) which I did find rather well written. My (soon ex-) trainee, Michel, however already bugged Tobias about some errors in the book itself, or rather some changes which happened after 3.0.3 (that\u0026rsquo;s the Nagios version the book is based on).\nAll in all, I guess I can congratulate Tobias on yet another good written book!\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-07-25_praxisbuch-nagios-by-tobias-scherbaum/","summary":"\u003cp\u003eTobi recently finished writing yet another book, which he also talked about \u003ca href=\"http://blog.scherbaum.info/2009/06/22/endlich-fertig/\"\u003ein a blog post\u003c/a\u003e. Shortly after, I \u003ca href=\"http://blog.scherbaum.info/2009/06/22/endlich-fertig/#129719\"\u003easked him\u003c/a\u003e a rather curious question. What exactly is the plant or animal on the cover of the book ? He was kind enough to send a voucher copy of the book my way.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2009/07/datgutepraxisbuchnagiosundvonvorne.png\"\n         alt=\"Praxisbuch Nagios\" width=\"441\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003ePraxisbuch Nagios\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eHe actually mentions it in the credits at the beginning of the book. Turns out it is an animal, a sea pen or sea feather (I\u0026rsquo;m guessing at \u003ca href=\"http://en.wikipedia.org/wiki/Sea_pen\"\u003ePennatula aculeata\u003c/a\u003e).\u003c/p\u003e","title":"Praxisbuch Nagios by Tobias Scherbaum"},{"content":"Damn tar is kinda weird .. usually, you specifiy excludes in the manner of \u0026ndash;exclude=\u0026quot;/path/to/exclude\u0026quot;. But tar needs to do things differently.\n1 2 tar -cvpf /xen-dom0.tar --exclude \u0026#34;/proc/*\u0026#34; --exclude \u0026#34;/sys/*\u0026#34; --exclude \u0026#34;/dev/*\u0026#34; --exclude \u0026#34;/xen-dom0.tar\u0026#34; / ","permalink":"https://christian.blog.pakiheim.de/posts/2009-07-24_exclude-a-directory-from-tar/","summary":"\u003cp\u003eDamn tar is kinda weird .. usually, you specifiy excludes in the manner of \u0026ndash;exclude=\u0026quot;/path/to/exclude\u0026quot;. But tar needs to do things differently.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etar -cvpf /xen-dom0.tar --exclude \u0026#34;/proc/*\u0026#34; --exclude \u0026#34;/sys/*\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --exclude \u0026#34;/dev/*\u0026#34; --exclude \u0026#34;/xen-dom0.tar\u0026#34; /\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Exclude a directory from tar"},{"content":"Finally, after about 6 months (I last talked about that on February 25th, when Virtual Center 2.5U4 was released) our troubles with our \u0026quot; custom\u0026quot; certificates seems to be resolved! As it turns out, it really was our fault and not VMware\u0026rsquo;s.\nWhen generating the pfx from the signed certificate and the key-file, you need to supply a password, otherwise the vCenter service is unable to utilize the private key of the pfx, since it\u0026rsquo;s unable to access the PFX with the default password ( testpassword is the default for Virtual Center as well as vSphere).\nAs noted in the Replacing VirtualCenter Server Certificates document for Virtual Infrastructure 3, as well as through our Customer support, you need to specify the password when exporting the signed crt/Private key into the pfx:\n1 2 openssl pkcs12 -export -in rui.crt -inkey rui.key -name rui -passout pass:testpassword -out rui.pfx After successfully doing so, you just need to replace the original files (hopefully move them away beforehand) with the ones generated. And afterwards, you should be able to utilize your new certificates! When you now try to clone a template and customize it using an existing customization spec, you\u0026rsquo;re gonna see this:\nvCenter: Cannot decrypt password\nAfter clicking on \u0026quot; OK\u0026quot;, you\u0026rsquo;re gonna get the normal customization specification edit frame, where you should be able to skip ahead to \u0026quot; Workgroup or Domain\u0026quot;, where you\u0026rsquo;re gonna have to reenter the domain administrator password.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-07-24_custom-certificates-in-vmware-vsphere/","summary":"\u003cp\u003eFinally, \u003ca href=\"/posts/2014-08-08_vmware-new-virtualcenter-2-5-update-4\" title=\"VMware: New VirtualCenter 2.5 Update 4\"\u003eafter about 6 months\u003c/a\u003e (I last talked about that on February 25th, when Virtual Center 2.5U4 was released) our troubles with our \u0026quot; \u003cem\u003ecustom\u003c/em\u003e\u0026quot; certificates seems to be resolved! As it turns out, it really was our fault and not VMware\u0026rsquo;s.\u003c/p\u003e\n\u003cp\u003eWhen generating the pfx from the signed certificate and the key-file, you need to supply a password, otherwise the vCenter service is unable to utilize the private key of the pfx, since it\u0026rsquo;s unable to access the PFX with the default password ( \u003cstrong\u003etestpassword\u003c/strong\u003e is the default for Virtual Center as well as vSphere).\u003c/p\u003e","title":"Custom certificates in VMware vSphere"},{"content":"Today a error message reappeared I thought I wouldn\u0026rsquo;t see again. We use Wyse Thin Clients and 2X running on two terminal servers, to provide the thin clients with applications. Now, once a while one of the thin clients (not all at once, just a single one) refuse to connect to the terminal server jabbing about this:\n1 The remote computer disconnected the session because of an error in the licensing protocol. The error message you get from the 2X client ain\u0026rsquo;t the slightest bit more helpful.\n1 2 Die Remote-Sitzung wurde unterbrochen, da kein Terminalserver-Lizenz Server zur Bereitstellung einer Lizenz verfügbar ist. I remember the solution being not so trivial with the thin clients. As it turns out, Microsoft does have a solution for that kind of problem.\n\u0026quot; Simply\u0026quot; open up the registry, and clean out HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSLicensing. That is the place where the remote desktop client saves the obtained terminal server licensing key.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-07-23_windows-xp-e-refusing-to-connect-to-a-terminal-server/","summary":"\u003cp\u003eToday a error message reappeared I thought I wouldn\u0026rsquo;t see again. We use Wyse Thin Clients and 2X running on two terminal servers, to provide the thin clients with applications. Now, once a while one of the thin clients (not all at once, just a single one) refuse to connect to the terminal server jabbing about this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThe remote computer disconnected the session because of an error in the licensing protocol.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThe error message you get from the 2X client ain\u0026rsquo;t the slightest bit more helpful.\u003c/p\u003e","title":"Windows XP(e) refusing to connect to a terminal server"},{"content":"After the last reinstallation of Windows (both at home and at work), I decided that from this day forth, I\u0026rsquo;d be working as unprivileged user (ie not as local administrator). Now, working as unprivileged user is some kind of relief (since not every program is able to wreak havoc within your computer), but also somewhat of a burden.\nUp until now, I had serious troubles burning CDs and/or DVDs as unprivileged user. Basically InfraRecorder refused to work at all. Only way that I had left, was copying the ISO to my local disk and then use runas in conjunction with InfraRecorder, to execute as Administrator.\nYesterday, I sat down and searched the Net for any kind of information. After a short while, I stumbled upon this:\nExecute secpol.msc as Administrator. You can configure this security setting by opening the appropriate policy and expanding the console tree as such: \u0026quot; Computer ConfigurationWindows SettingsSecurity SettingsLocal PoliciesSecurity Options\u0026quot;. Toggle \u0026quot; Devices: Restrict CD-ROM access to locally logged-on user only\u0026quot; to enabled. After logging of and logging back on, you should be allowed to use the CD-drive as unprivileged user.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-07-21_burning-cd-dvds-as-unprivileged-user/","summary":"\u003cp\u003eAfter the last reinstallation of Windows (both at home and at work), I decided that from this day forth, I\u0026rsquo;d be working as unprivileged user (ie not as local administrator). Now, working as unprivileged user is some kind of relief (since not every program is able to wreak havoc within your computer), but also somewhat of a burden.\u003c/p\u003e\n\u003cp\u003eUp until now, I had serious troubles burning CDs and/or DVDs as unprivileged user. Basically InfraRecorder refused to work at all. Only way that I had left, was copying the ISO to my local disk and then use runas in conjunction with InfraRecorder, to execute as Administrator.\u003c/p\u003e","title":"Burning CD/DVDs as unprivileged user"},{"content":"In the past I had toyed with the thought of setting up a VPN-Server at home, so that I could do stuff from elsewhere. Now, I finally got around doing so. First obstacle ? How exactly would I be doing that ?\nGet the DD-WRT VPN flavor of course! Configure the VPN server Now, the second part seems to be a bit harder. There is a wiki article on how to configure OpenVPN in the DD-WRT wiki, but not for v24 SP1. Lucky me, someone already made himself the work of writing somewhat of a guide down. But, guess according to Murphy\u0026rsquo;s law, things ain\u0026rsquo;t ever gonna be easy. As I\u0026rsquo;m running Ubuntu Karmic on my workbook, the commands ain\u0026rsquo;t matching the current openvpn package being delivered with Karmic. So here is, intended only as a guide, the list of steps one has to do in order to get the certs \u0026hellip;\n1 2 3 4 5 6 7 8 9 10 sudo su - cd /usr/share/doc/openvpn/examples/easy-rsa/2.0 # Change KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, # KEY_ORG and KEY_EMAIL with a editor of your choosing $EDITOR vars source ./vars ./build-dh ./pkitool --initca ./pkitool --server barfoo.org ./pkitool workbook.home.barfoo.org That\u0026rsquo;s it \u0026hellip; all that\u0026rsquo;s remaining, is copy \u0026amp; pasting those certs into the Web GUI of your OpenVPN router and setting up your client according to the OpenVPN documentation.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-07-18_setting-up-a-openvpn-server-with-dd-wrt/","summary":"\u003cp\u003eIn the past I had toyed with the thought of setting up a VPN-Server at home, so that I could do stuff from elsewhere. Now, I finally got around doing so. First obstacle ? How exactly would I be doing that ?\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eGet the DD-WRT VPN flavor of course!\u003c/li\u003e\n\u003cli\u003eConfigure the VPN server\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eNow, the second part seems to be a bit harder. There is a \u003ca href=\"http://www.dd-wrt.com/wiki/index.php/OpenVPN\"\u003ewiki article on how to configure OpenVPN\u003c/a\u003e in the DD-WRT wiki, but not for v24 SP1. Lucky me, someone already made himself the work of writing \u003ca href=\"http://www.dd-wrt.com/phpBB2/viewtopic.php?t=35689\"\u003esomewhat of a guide\u003c/a\u003e down. But, guess according to Murphy\u0026rsquo;s law, things ain\u0026rsquo;t ever gonna be easy. As I\u0026rsquo;m running Ubuntu Karmic on my workbook, the commands ain\u0026rsquo;t matching the current openvpn package being delivered with Karmic. So here is, intended only as a guide, the list of steps one has to do in order to get the certs \u0026hellip;\u003c/p\u003e","title":"Setting up a OpenVPN server with DD-WRT"},{"content":"Well, after a day or so my lighttpd troubles reappeared. But this time, the lighttpd process would simply put out this:\n1 2 3 4 (mod_fastcgi.c.2913) backend is overloaded; we\u0026#39;ll disable it for 2 seconds and send the request to another backend instead: reconnects: 0 load: 131 (mod_fastcgi.c.2668) fcgi-server re-enabled: 0 /var/run/lighttpd/lighttpd-fastcgi-php-17242.socket (mod_fastcgi.c.2913) backend is overloaded; we\u0026#39;ll disable it for 2 seconds and send the request to another backend instead: reconnects: 0 load: 131 (mod_fastcgi.c.2668) fcgi-server re-enabled: 0 /var/run/lighttpd/lighttpd-fastcgi-php-17242.socket And as the message says, PHP (or rather mod_fastcgi?) would simply stop to process requests. In the end, I tuned some of the lighttpd/mod_fastcgi parameters.\n1 2 3 4 5 6 \u0026#34;max-procs\u0026#34; =\u0026gt; 2 \u0026#34;idle-timeout\u0026#34; =\u0026gt; 20, \u0026#34;socket\u0026#34; =\u0026gt; \u0026#34;/tmp/php.socket-\u0026#34; + var.PID, \u0026#34;bin-path\u0026#34; =\u0026gt; \u0026#34;/usr/bin/php-cgi\u0026#34;, \u0026#34;bin-environment\u0026#34; =\u0026gt; ( \u0026#34;PHP_FCGI_CHILDREN\u0026#34; =\u0026gt; \u0026#34;6\u0026#34;, \u0026#34;PHP_FCGI_MAX_REQUESTS\u0026#34; =\u0026gt; \u0026#34;7000\u0026#34; ) Up till now (I made the change on July 14th), these changes seem to have fixed the issue, guess I\u0026rsquo;m still hoping (with the saying \u0026ldquo;Hope dies last\u0026rdquo; in mind) it\u0026rsquo;s gonna fix my problems once and for all.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-07-16_my-neverending-lighttpd-troubles/","summary":"\u003cp\u003eWell, after a day or so my lighttpd \u003ca href=\"/posts/2014-08-08_lighttpd-issues\" title=\"Lighttpd issues\"\u003etroubles\u003c/a\u003e reappeared. But this time, the lighttpd process would simply put out this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emod_fastcgi\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ec\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e2913\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"n\"\u003ebackend\u003c/span\u003e \u003cspan class=\"n\"\u003eis\u003c/span\u003e \u003cspan class=\"n\"\u003eoverloaded\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"n\"\u003ewe\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;ll disable it for 2 seconds and send the request to another backend instead: reconnects: 0 load: 131\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emod_fastcgi\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ec\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e2668\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"n\"\u003efcgi\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eserver\u003c/span\u003e \u003cspan class=\"n\"\u003ere\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eenabled\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e  \u003cspan class=\"mi\"\u003e0\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"k\"\u003evar\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003erun\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003elighttpd\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003elighttpd\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003efastcgi\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ephp\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e17242.\u003c/span\u003e\u003cspan class=\"n\"\u003esocket\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emod_fastcgi\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ec\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e2913\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"n\"\u003ebackend\u003c/span\u003e \u003cspan class=\"n\"\u003eis\u003c/span\u003e \u003cspan class=\"n\"\u003eoverloaded\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e \u003cspan class=\"n\"\u003ewe\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;ll disable it for 2 seconds and send the request to another backend instead: reconnects: 0 load: 131\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emod_fastcgi\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ec\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e2668\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"n\"\u003efcgi\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eserver\u003c/span\u003e \u003cspan class=\"n\"\u003ere\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eenabled\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e  \u003cspan class=\"mi\"\u003e0\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"k\"\u003evar\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003erun\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003elighttpd\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003elighttpd\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003efastcgi\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ephp\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e17242.\u003c/span\u003e\u003cspan class=\"n\"\u003esocket\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAnd as the message says, PHP (or rather mod_fastcgi?) would simply stop to process requests. In the end, I tuned some of the lighttpd/mod_fastcgi parameters.\u003c/p\u003e","title":"My neverending lighttpd troubles"},{"content":"Well, out of boredom I stated on Friday that I\u0026rsquo;d gonna go look for a hammock, since the beach chair quite isn\u0026rsquo;t enough. I went through every DIY superstore in Stralsund, but none of them had anything like I wanted (basically I wanted a wooden hammock, which would be able to carry me). Thanks to the Internet though, I was quite fast at a point where I found something (Amazon rules!)\nAt first I picked only a mat which I canceled right after I got the confirmation mail. After about 10 minutes I finally found a hammock with frame, which actually suited what I had in mind. Now, the excerpt on the Web page tells something about \u0026quot; Usually ready for dispatch in 6 till 10 days\u0026quot;. On Tuesday the hauler\u0026rsquo;s office called me at work (I completely forgot, that I supplied my work phone number as number during the day \u0026ndash; which completely surprised me), they would like to deliver the hammock on Wednesday.\nOn Wednesday, they delivered the ~70 kg heavy crate, which we ferried with the wheel barrow to the rear part of the lot. Yesterday, my dad and I put the thing together and I had a first sun bath test.\nHammock with frame\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-07-10_hammock/","summary":"\u003cp\u003eWell, out of boredom I stated on Friday that I\u0026rsquo;d gonna go look for a hammock, since the beach chair quite isn\u0026rsquo;t enough. I went through every DIY superstore in Stralsund, but none of them had anything like I wanted (basically I wanted a wooden hammock, which would be able to carry me). Thanks to the Internet though, I was quite fast at a point where I found something (Amazon rules!)\u003c/p\u003e","title":"Hammock"},{"content":"Well, if you\u0026rsquo;re gonna update a SLES10 (or even a SLES11) VM, you created with Virtual Infrastructure, you\u0026rsquo;re gonna run into a snag (like I do). Grub (or rather the kernel itself) is gonna barf.\nNow, I searched for a while and didn\u0026rsquo;t find anything specific on the net, so I\u0026rsquo;m gonna write it down. Up till 3.5U4 the maximal resolution you\u0026rsquo;d be able to enter within a virtual machine was vga=0x32d (at least for my 19\u0026quot; TFT\u0026rsquo;s at work). But now, after the upgrade to vSphere that isn\u0026rsquo;t working anymore.\nPopped in a SLES10 install-cd selected the maximal resolution from the menu and switched to a terminal soon after it entered the graphical installer. A short cat /proc/cmdline revealed this: vga=0x334.\nAfter switching these parameters in grub\u0026rsquo;s menu.lst, everything is back in working order and not waiting 30 seconds on boot \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-07-08_updating-a-linux-vm-from-virtual-infrastructure-to-vsphere/","summary":"\u003cp\u003eWell, if you\u0026rsquo;re gonna update a SLES10 (or even a SLES11) VM, you created with Virtual Infrastructure, you\u0026rsquo;re gonna run into a snag (like I do). Grub (or rather the kernel itself) is gonna barf.\u003c/p\u003e\n\u003cp\u003eNow, I searched for a while and didn\u0026rsquo;t find anything specific on the net, so I\u0026rsquo;m gonna write it down. Up till 3.5U4 the maximal resolution you\u0026rsquo;d be able to enter within a virtual machine was vga=0x32d (at least for my 19\u0026quot; TFT\u0026rsquo;s at work). But now, after the upgrade to vSphere that isn\u0026rsquo;t working anymore.\u003c/p\u003e","title":"Updating a Linux VM from Virtual Infrastructure to vSphere"},{"content":"Well, I had the pleasure of flying with Germanwings on Friday and Sunday. As it turns out, if you fly with Germanwings you should plan some more time. On Friday, we were scheduled for departure at 17:00 (that\u0026rsquo;s 5 P.M.). Around 6 P.M. the flight assistant(s) guarding the gate announced that the flight is being delayed for a unspecified amount of time due to maintenance. At 7 P.M. they announced that again.\nAt 7:30 P.M. they announced that they\u0026rsquo;re very sorry, but the machine standing in front of the terminal was being replaced by a replacement plane leaving from Stuttgart and is arriving around 10 P.M. and leaving for Stuttgart at 10:30 P.M. So they pushed this one back to the repair hangar \u0026hellip;\nBroken A-319\nSo, after five hours of waiting and about one hour flight time, we finally arrived at Stuttgart, just ten minutes till the airport had to close (remember, at most airports there is a ban on night flights). After another thirty minutes I was finally able to take the looooong awaited nap!\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-07-02_germanwings-travels/","summary":"\u003cp\u003eWell, I had the pleasure of flying with Germanwings on Friday and Sunday. As it turns out, if you fly with Germanwings you should plan some more time. On Friday, we were scheduled for departure at 17:00 (that\u0026rsquo;s 5 P.M.). Around 6 P.M. the flight assistant(s) guarding the gate announced that the flight is being delayed for a unspecified amount of time due to maintenance. At 7 P.M. they announced that again.\u003c/p\u003e","title":"GermanWings travels"},{"content":"I recently ordered a Intel X25-M Solid State Disk as a replacement for the oldish SATA 2,5\u0026quot; disk powering my Fujitsu Celisus M250 (called workbook). I figured it\u0026rsquo;d be a bit faster as compared to running from the old hard disk, but I didn\u0026rsquo;t figure it be that fast!\nSince it is blazing fast, my trainee figured he\u0026rsquo;d install bootchart and see how the disk/the whole notebook performed.\nbootchart map of the X25-M\nAs you can deduce from the bootchart map, the whole system took eight seconds (as in 8 or one 7.5th part of a minute) till GDM was started and prompting for username and password.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-06-11_intel-x25-m-powering-ubuntu-karmic/","summary":"\u003cp\u003eI recently ordered a Intel X25-M Solid State Disk as a replacement for the oldish SATA 2,5\u0026quot; disk powering my Fujitsu Celisus M250 (called workbook). I figured it\u0026rsquo;d be a bit faster as compared to running from the old hard disk, but I didn\u0026rsquo;t figure it be \u003cstrong\u003ethat\u003c/strong\u003e fast!\u003c/p\u003e\n\u003cp\u003eSince it is blazing fast, my trainee figured he\u0026rsquo;d install bootchart and see how the disk/the whole notebook performed.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2009/06/workbook-karmic-20090611-1.png\"\n         alt=\"bootchart map of the X25-M\" width=\"400\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003ebootchart map of the X25-M\u003c/p\u003e","title":"Intel X25-M powering Ubuntu Karmic"},{"content":"After I had the initial stuff done, I spent some time yesterday (roughly one hour) figuring out, why Play/Pause/Stop aren\u0026rsquo;t working any longer (they worked at some point).\nAfter looking at the XBMC debug log for some time, I went back and looked at my Lircmap.xml. As it turns out, you can\u0026rsquo;t map one Lirckey to two functions (in my case, I mapped KEY_7 to as well as ). XBMC doesn\u0026rsquo;t like that, and in return quits functioning for those keys.\nAfter removing the number declarations ( through ), my keys are back to working order and I\u0026rsquo;m completely pleased with my media center Acer \u0026#x1f609;\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-06-11_xbmc-keymap/","summary":"\u003cp\u003eAfter \u003ca href=\"/posts/2010-01-02_howto-installing-xbmc-on-a-acer-revo-r3600-with-ubuntu-jaunty-karmic\" title=\"XBMC on the Acer Revo\"\u003eI had the initial stuff done\u003c/a\u003e, I spent some time yesterday (roughly one hour) figuring out, why Play/Pause/Stop aren\u0026rsquo;t working any longer (they worked at some point).\u003c/p\u003e\n\u003cp\u003eAfter looking at the XBMC debug log for some time, I went back and looked at my Lircmap.xml. As it turns out, you can\u0026rsquo;t map one Lirckey to two functions (in my case, I mapped \u003cem\u003eKEY_7\u003c/em\u003e to \u003cem\u003e\u003c!-- raw HTML omitted --\u003e\u003c/em\u003e as well as \u003cem\u003e\u003c!-- raw HTML omitted --\u003e\u003c/em\u003e). XBMC doesn\u0026rsquo;t like that, and in return quits functioning for those keys.\u003c/p\u003e","title":"XBMC Keymap"},{"content":"Disclaimer: I don\u0026rsquo;t take any responsibility for faults within the software, I just provide the RPM\u0026rsquo;s! Feel free to ask me about stuff concerning these RPM\u0026rsquo;s, but I ain\u0026rsquo;t accountable if your stuff goes kaboom! Oh, and those RPM\u0026rsquo;s aren\u0026rsquo;t recommended or supported by VMware!\nSince we recently upgraded our VMware Infrastructure to VMware vSphere, I finally had a chance to refresh the RPM\u0026rsquo;s for the KMP for 2.6.16.60-0.39.3-0.1 and 2.6.27.21-0.1. You can find the source RPM here.\nvmware-tools-kmp-bigsmp (SLES10: i586) vmware-tools-kmp-debug (SLES10: i586/x86_64; SLES11: i586/x86_64) vmware-tools-kmp-default (SLES10: i586/x86_64; SLES11: i586/x86_64) vmware-tools-kmp-kdump (SLES10: i586/x86_64) vmware-tools-kmp-kdumppae (SLES10: i586) vmware-tools-kmp-pae (SLES11: i586) vmware-tools-kmp-smp (SLES10: i586/x86_64) vmware-tools-kmp-trace (SLES11: i586/x86_64) vmware-tools-kmp-vmi (SLES10: i586; SLES11: i586) vmware-tools-kmp-vmipae (SLES10: i586) vmware-tools-kmp-xen (SLES10: i586/x86_64; SLES11: i586/x86_64) vmware-tools-kmp-xenpae (SLES10: i586) Just a heads-up: while the modules itself work, VMware did something to the init-script which prevents it to load the modules unless you run vmware-config-tools.pl. I\u0026rsquo;m still in the process of sorting that out.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-06-10_new-vmware-tools-kmp/","summary":"\u003cp\u003e\u003cstrong\u003eDisclaimer:\u003c/strong\u003e I don\u0026rsquo;t take \u003cem\u003eany responsibility\u003c/em\u003e for faults within the software, I just provide the RPM\u0026rsquo;s! Feel free to ask me about stuff concerning these RPM\u0026rsquo;s, but I ain\u0026rsquo;t accountable if your stuff goes \u003cstrong\u003ekaboom\u003c/strong\u003e! Oh, and those RPM\u0026rsquo;s aren\u0026rsquo;t \u003cstrong\u003erecommended\u003c/strong\u003e or \u003cstrong\u003esupported\u003c/strong\u003e by VMware!\u003c/p\u003e\n\u003cp\u003eSince we recently upgraded our VMware Infrastructure to VMware vSphere, I finally had a chance to refresh the RPM\u0026rsquo;s for the KMP for \u003cem\u003e2.6.16.60-0.39.3-0.1\u003c/em\u003e and \u003cem\u003e2.6.27.21-0.1\u003c/em\u003e. You can find the source RPM \u003ca href=\"http://distributions.barfoo.org/SLES10/src/vmware-tools-4.0.0_164009-0.1.src.rpm\"\u003ehere\u003c/a\u003e.\u003c/p\u003e","title":"New vmware-tools-kmp"},{"content":"Well, after I finished my first OCF agent back in October 2008, we have it running in production now for about ten months. During that time, we found quite a few points in which we\u0026rsquo;d like to improve the behaviour with that Linux-HA should handle TSM.\nShutdown TSM nicely if possible (Cancel client sessions, cancel running processes and dismount mounted volumes) Better error handling So, after another week of writing and testing with a small instance, I present the new OCF agent for Tivoli Storage Manager. It still has one or two weak points, but they are negligible. I still need to write the documentation for it, but the script should just work \u0026hellip;\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 #!/bin/sh # Copyright 2009 christian.heim@barfoo.org . ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs tsm_check() { local exit_val=\u0026#34;\u0026#34; case \u0026#34;$1\u0026#34; in validate) exit_val=\u0026#34;$OCF_ERR_ARGS\u0026#34; ;; *) exit_val=\u0026#34;$OCF_NOT_RUNNING\u0026#34; ;; esac : ${OCF_RESKEY_dsmserv_dir:=/opt/tivoli/tsm/server/bin} : ${OCF_RESKEY_dsmclient_dir:=/opt/tivoli/tsm/client/ba/bin} : ${OCF_RESKEY_tsm_retries:=5} : ${OCF_RESKEY_tsm_timeout:=5} : ${OCF_RESKEY_tsm_logdir:=/var/log/tsm} : ${OCF_RESKEY_tsm_gloves:=1} case \u0026#34;$OCF_RESKEY_single_instance\u0026#34; in 0|false) single_instance=0 if $TEST -z $OCF_RESKEY_instance_name -o -z $OCF_RESKEY_instance_prefix ; then ocf_log err \u0026#34;TSM: You didn\u0026#39;t specify an instance_name nor a prefix\u0026#34; ocf_log err \u0026#34;TSM: yet you specified that this isn\u0026#39;t a single instance!\u0026#34; ocf_log err \u0026#34;TSM: Please check your configuration.\u0026#34; exit $exit_val else if $TEST ! -d $OCF_RESKEY_instance_prefix -o ! -d $OCF_RESKEY_instance_prefix/$OCF_RESKEY_instance_name ; then ocf_log err \u0026#34;TSM: Either the directory specified as instance_prefix\u0026#34; ocf_log err \u0026#34;TSM: or as instance_name don\u0026#39;t exist!\u0026#34; ocf_log err \u0026#34;TSM: Please check your system.\u0026#34; exit $exit_val else instance_name=$OCF_RESKEY_instance_name instance_prefix=$OCF_RESKEY_instance_prefix instance_path=$OCF_RESKEY_instance_prefix/$OCF_RESKEY_instance_name fi fi ;; 1|true) single_instance=1 instance_prefix=/opt/tivoli/tsm/server instance_name=tsm instance_path=$instance_prefix/$instance_name if $TEST ! -d $instance_path ; then ocf_log err \u0026#34;TSM: The directory specified as TSM directory doesn\u0026#39;t exist!\u0026#34; ocf_log err \u0026#34;TSM: Please check your system.\u0026#34; exit $exit_val fi ;; *) ocf_log err \u0026#34;TSM: You didn\u0026#39;t specify single_instance!\u0026#34; exit $exit_val ;; esac if $TEST ! -d $OCF_RESKEY_dsmserv_dir -o ! -x $OCF_RESKEY_dsmserv_dir/dsmserv ; then ocf_log err \u0026#34;TSM: Either the specified directory $OCF_RESKEY_dsmserv_dir or the\u0026#34; ocf_log err \u0026#34;TSM: dsmserv executeable doesn\u0026#39;t exist!\u0026#34; ocf_log err \u0026#34;TSM: Please check your system.\u0026#34; exit $exit_val fi if $TEST ! -d $OCF_RESKEY_dsmclient_dir -o ! -x $OCF_RESKEY_dsmclient_dir/dsmadmc ; then ocf_log err \u0026#34;TSM: Either the specified directory $OCF_RESKEY_dsmclient_dir or the\u0026#34; ocf_log err \u0026#34;TSM: dsmadmc executeable doesn\u0026#39;t exist!\u0026#34; ocf_log err \u0026#34;TSM: Please check your system.\u0026#34; exit $exit_val fi if $TEST ! -d $OCF_RESKEY_tsm_logdir ; then ocf_log err \u0026#34;TSM: The logging dir specified ($OCF_RESKEY_tsm_logdir) doesn\u0026#39;t exist!\u0026#34; ocf_log err \u0026#34;TSM: Please check your system.\u0026#34; exit $exit_val fi if $TEST ! -f $instance_path/dsmserv.opt -o ! -f $instance_path/dsmserv.dsk ; then ocf_log err \u0026#34;TSM: Either $instance_path/dsmserv.opt\u0026#34; ocf_log err \u0026#34;TSM: or $instance_path/dsmserv.dsk don\u0026#39;t exist!\u0026#34; ocf_log err \u0026#34;TSM: Please check your configuration.\u0026#34; exit $exit_val fi # We need to test the dsm.opt/dsm.sys for correct information, since it\u0026#39;s # needed for the graceful shutdown. if $TEST $OCF_RESKEY_tsm_gloves -a -f $OCF_RESKEY_dsmclient_dir/dsm.sys -a -f $OCF_RESKEY_dsmclient_dir/dsm.opt; then if $TEST -z $OCF_RESKEY_cluster_dns -o -z $OCF_RESKEY_cluster_address -o -z $OCF_RESKEY_cluster_port ; then ocf_log err \u0026#34;TSM: You are missing a configuration value:\u0026#34; ocf_log err \u0026#34;TSM: either cluster_dns, cluster_address or cluster_port isn\u0026#39;t set!\u0026#34; ocf_log err \u0026#34;TSM: Please recheck your configuration!\u0026#34; exit $exit_val fi if $TEST \u0026#34;$( $EGREP \u0026#34;^ServerName.*$OCF_RESKEY_cluster_dns\u0026#34; $OCF_RESKEY_dsmclient_dir/dsm.sys )\u0026#34; = \u0026#34;\u0026#34; ; then # We need to construct the dsm.sys ocf_log err \u0026#34;TSM: You are lacking the proper entry for this TSM server.\u0026#34; ocf_log err \u0026#34;TSM: You need to check your $OCF_RESKEY_dsmclient_dir/dsm.sys\u0026#34; ocf_log err \u0026#34;TSM: and set it up properly!\u0026#34; ocf_log info \u0026#34;TSM: If in doubt, copy \u0026amp; paste this server stanza:\u0026#34; ocf_log info \u0026#34;ServerName $OCF_RESKEY_cluster_dns\u0026#34; ocf_log info \u0026#34;TCPServerAddress $OCF_RESKEY_cluster_address\u0026#34; ocf_log info \u0026#34;TCPPORT $OCF_RESKEY_cluster_port\u0026#34; ocf_log info \u0026#34;CommMethod TCPIP\u0026#34; exit $exit_val fi fi case \u0026#34;$OCF_RESKEY_tsm_gloves\u0026#34; in 0|1);; true) OCF_RESKEY_tsm_gloves=1;; false) OCF_RESKEY_tsm_gloves=0;; *) ocf_log err \u0026#34;You specified an invalid value for tsm_gloves.\u0026#34; ocf_log err \u0026#34;tsm_gloves should be either 0 or 1, or not set at all.\u0026#34; ;; esac return $OCF_SUCCESS } tsm_pid() { # Check whether or not the selected TSM instance is still running if $TEST -f $instance_path/dsmserv.lock ; then pid=\u0026#34;$( $AWK --source \u0026#39;{ print $4 }\u0026#39; $instance_path/dsmserv.lock 2\u0026gt;/dev/null )\u0026#34; kill -0 $pid \u0026amp;\u0026gt;/dev/null case \u0026#34;$?\u0026#34; in 0) # Process is up and running export OCF_RETURNVAL_PID=$OCF_SUCCESS export OCF_TSM_PID=$pid return $OCF_SUCCESS ;; 1) # Stale pid-file detected export OCF_RETURNVAL_PID=$OCF_ERR_GENERIC unset OCF_TSM_PID return $OCF_ERR_GENERIC ;; esac else # Process is not running export OCF_RETURNVAL_PID=$OCF_NOT_RUNNING unset OCF_TSM_PID return $OCF_NOT_RUNNING fi } tsm_monitor() { tsm_check tsm_pid } tsm_start() { unset OCF_RETURNVAL_PID unset OCF_TSM_PID tsm_monitor if $TEST $OCF_RETURNVAL_PID -eq 7 ; then # Prepping the environment export DSMSERV_DIR=$OCF_RESKEY_dsmserv_dir export DSMSERV_CONFIG=$instance_path/dsmserv.opt cd ${DSMSERV_CONFIG%/*} $DSMSERV_DIR/dsmserv \u0026gt;\u0026gt; ${OCF_RESKEY_tsm_logdir}/$instance_name.log 2\u0026gt;\u0026amp;1 \u0026amp; if $TEST $? -ne 0 ; then ocf_log err \u0026#34;dsmserv failed to start up correctly and returned $?\u0026#34; exit $OCF_ERR_GENERIC fi unset DSMSERV_CONFIG DSMSERV_DIR ocf_log info \u0026#34;TSM: Started instance $instance_name.\u0026#34; fi return $OCF_SUCCESS } tsm_stop() { unset OCF_RETURNVAL_PID unset OCF_TSM_PID tsm_monitor # In order to stop TSM there are two ways: # o Gracefully shutting it down by stopping running sessions, disconnecting # nodes and cancelling pending/running processes and issueing \u0026#39;halt\u0026#39; # o Simply killing the process with -9 (which is sometimes considered harmful # # If not explicitly wished, first try using the supplemented userid/password # to shutdown the TSM instance. if $TEST -n $OCF_RESKEY_tsm_user -a -n $OCF_RESKEY_tsm_password -a -n $OCF_RESKEY_cluster_address -a -n $OCF_RESKEY_cluster_port -a -n $OCF_RESKEY_cluster_dns -a $OCF_RESKEY_tsm_gloves -a $OCF_RETURNVAL_PID -eq 0 ; then local cmd=\u0026#34;$OCF_RESKEY_dsmclient_dir/dsmadmc -noconfirm -displaymode=list -id=$OCF_RESKEY_tsm_user -password=$OCF_RESKEY_tsm_password -server=$OCF_RESKEY_cluster_dns\u0026#34; local logfile=${OCF_RESKEY_tsm_logdir}/dsmadmc.log # dsmadmc is kinda limited, since it only write the logfile to the current PWD cd $OCF_RESKEY_tsm_logdir echo $( date ) 1\u0026gt;\u0026gt; dsmadmc.log 2\u0026gt;/dev/null ocf_log info \u0026#34;TSM: Trying soft shutdown.\u0026#34; local i=1 while $TEST $i -le ${OCF_RESKEY_tsm_retries} ; do process_list=\u0026#34;$( $cmd query process | $EGREP \u0026#39;Process Number: .*\u0026#39; | $AWK -F \u0026#39;: \u0026#39; \u0026#39;{ print $2 }\u0026#39; )\u0026#34; ocf_log debug \u0026#34;TSM(tsm_stop): ($i) Process list during shutdown: $process_list\u0026#34; if $TEST -n $process_list ; then for process in $process_list ; do ocf_log debug \u0026#34;TSM(tsm_stop): ($i) Cancelling TSM process $process\u0026#34; $cmd cancel process $process \u0026gt;\u0026gt; $logfile 2\u0026gt;\u0026amp;1 done skip_process=0 else skip_process=1 fi session_list=\u0026#34;$( $cmd query sessions | $EGREP \u0026#39;Sess Number: .*\u0026#39; | $AWK -F \u0026#39;: \u0026#39; \u0026#39;{ print $2 }\u0026#39; | sed \u0026#34;s/,//\u0026#34; )\u0026#34; ocf_log debug \u0026#34;TSM(tsm_stop: ($i) Session list during shutdown: $session_list\u0026#34; if $TEST -n $session_list ; then for session in $session_list ; do ocf_log debug \u0026#34;TSM(tsm_stop): ($i) Cancelling TSM session $session\u0026#34; $cmd cancel session $session \u0026gt;\u0026gt; $logfile 2\u0026gt;\u0026amp;1 done skip_session=0 else skip_session=1 fi mount_list=\u0026#34;$( $cmd query mount | $EGREP \u0026#39;LTO volume .* is mounted\u0026#39; | $AWK -F \u0026#39; \u0026#39; \u0026#39;{ print $4 }\u0026#39; )\u0026#34; ocf_log debug \u0026#34;TSM(tsm_stop): ($i) Mount list during shutdown: $mount_list\u0026#34; if $TEST -n $mount_list ; then for mount in $mount_list ; do ocf_log debug \u0026#34;TSM(tsm_stop): ($i) Cancelling TSM mount $mount\u0026#34; $cmd dismount volume $mount \u0026gt;\u0026gt; $logfile 2\u0026gt;\u0026amp;1 done skip_mount=0 else skip_mount=1 fi if $TEST $skip_process -a $skip_session -a $skip_mount ; then ocf_log debug \u0026#34;TSM(tsm_stop): Skipping the remaining $((${OCF_RESKEY_tsm_retries}-$i)) tries, no activity in instance $instance_name (pid: $pid)\u0026#34; break fi i=$(($i+1)) done ocf_log info \u0026#34;TSM: Halting instance $instance_name (pid: $OCF_TSM_PID)\u0026#34; ocf_log info \u0026#34;TSM: issuing $cmd halt\u0026#34; $cmd halt \u0026gt;\u0026gt; $logfile 2\u0026gt;\u0026amp;1 local i=1 while $TEST $i -le $OCF_RESKEY_tsm_retries ; do sleep $OCF_RESKEY_tsm_timeout # Break out of the while, if tsm is stopped. Saves us some time # (i*20 by default) when waiting for shutdown. unset OCF_RETURNVAL_PID unset OCF_TSM_PID tsm_monitor ocf_log info \u0026#34;TSM return value (290, pid: $OCF_TSM_PID): $OCF_RETURNVAL_PID\u0026#34; if $TEST \u0026#34;$OCF_RETURNVAL_PID\u0026#34; -eq \u0026#34;$OCF_NOT_RUNNING\u0026#34; ; then break fi i=$(($i+1)) done unset OCF_RETURNVAL_PID unset OCF_TSM_PID tsm_monitor ocf_log info \u0026#34;TSM return value (301, pid: $OCF_TSM_PID): $OCF_RETURNVAL_PID\u0026#34; case \u0026#34;$OCF_RETURNVAL_PID\u0026#34; in 0) ocf_log info \u0026#34;TSM(tsm_stop): Graceful shutdown for instance $instance_name (pid: $OCF_TSM_PID) failed, thus continuing with not-so-graceful shutdown!\u0026#34; success=1 ;; 1) ocf_log info \u0026#34;TSM: Graceful shutdown for instance $instance_name (pid: $OCF_TSM_PID) completed.\u0026#34; success=0 ;; esac elif $TEST $OCF_RESKEY_tsm_gloves -eq 0 -a $OCF_RETURNVAL_PID -eq 0 ; then success=1 else success=0 fi if $TEST \u0026#34;$success\u0026#34; -eq \u0026#34;1\u0026#34; ; then ocf_log info \u0026#34;TSM: Trying not-so-graceful shutdown.\u0026#34; ocf_log debug \u0026#34;TSM(tsm_stop): issuing SIGTERM to instance $instance_name (pid: $OCF_TSM_PID)\u0026#34; kill -TERM $OCF_TSM_PID 2\u0026gt;/dev/null if $TEST $? -ne 0 ; then ocf_log info \u0026#34;TSM: Instance $instance_name (pid: $OCF_TSM_PID) failed to shutdown with SIGTERM.\u0026#34; ocf_log debug \u0026#34;TSM(tsm_stop): issuing SIGKILL to instance $instance_name (pid: $OCF_TSM_PID)\u0026#34; kill -KILL $OCF_TSM_PID 2\u0026gt;/dev/null if $TEST $? -ne 0 ; then ocf_log err \u0026#34;TSM: Instance $instance_name (pid: $OCF_TSM_PID) failed to shutdown with SIGKILL.\u0026#34; ocf_log err \u0026#34;TSM: There\u0026#39;s nothing we can do, so die gracefully.\u0026#34; ocf_log err \u0026#34;TSM: User interaction is required!\u0026#34; return $OCF_ERR_GENERIC fi fi ocf_log info \u0026#34;TSM: Successfully halted instance $instance_name (pid: $OCF_TSM_PID)\u0026#34; fi return $OCF_SUCCESS } tsm_metadata() { cat \u0026lt;\u0026lt;END \u0026lt;?xml version=\u0026#34;1.0\u0026#34;?\u0026gt; \u0026lt;!DOCTYPE resource-agent SYSTEM \u0026#34;ra-api-1.dtd\u0026#34;\u0026gt; \u0026lt;resource-agent name=\u0026#34;TSM\u0026#34;\u0026gt; \u0026lt;version\u0026gt;1.0\u0026lt;/version\u0026gt; \u0026lt;longdesc lang=\u0026#34;en\u0026#34;\u0026gt; This script manages a single/or multiple instances of Tivoli Storage Manager. Please be aware, that in order to run your Tivoli Storage Manager server via Heartbeat, you need to prepare each instance according to the Storage Manager Installation handbook. \u0026lt;/longdesc\u0026gt; \u0026lt;shortdesc lang=\u0026#34;en\u0026#34;\u0026gt;OCF Resource Agent compliant TSM script.\u0026lt;/shortdesc\u0026gt; \u0026lt;parameters\u0026gt; \u0026lt;parameter name=\u0026#34;single_instance\u0026#34; required=\u0026#34;1\u0026#34; unique=\u0026#34;0\u0026#34;\u0026gt; \u0026lt;longdesc lang=\u0026#34;en\u0026#34;\u0026gt; Is your setup a single instance, or are you running multiple instances \u0026lt;/longdesc\u0026gt; \u0026lt;shortdesc lang=\u0026#34;en\u0026#34;\u0026gt;Toggles changes for single/multiple instances\u0026lt;/shortdesc\u0026gt; \u0026lt;content type=\u0026#34;boolean\u0026#34; /\u0026gt; \u0026lt;/parameter\u0026gt; \u0026lt;/parameters\u0026gt; \u0026lt;actions\u0026gt; \u0026lt;action name=\u0026#34;start\u0026#34; timeout=\u0026#34;90s\u0026#34; /\u0026gt; \u0026lt;action name=\u0026#34;stop\u0026#34; timeout=\u0026#34;100s\u0026#34; /\u0026gt; \u0026lt;action name=\u0026#34;monitor\u0026#34; depth=\u0026#34;10\u0026#34; timeout=\u0026#34;30s\u0026#34; interval=\u0026#34;60s\u0026#34; start-delay=\u0026#34;300s\u0026#34; /\u0026gt; \u0026lt;action name=\u0026#34;meta-data\u0026#34; timeout=\u0026#34;5s\u0026#34; /\u0026gt; \u0026lt;action name=\u0026#34;status\u0026#34; timeout=\u0026#34;30s\u0026#34; /\u0026gt; \u0026lt;/actions\u0026gt; \u0026lt;/resource-agent\u0026gt; END return $OCF_SUCCESS } case \u0026#34;$1\u0026#34; in start) tsm_start;; stop) tsm_stop;; monitor) tsm_monitor;; meta-data) tsm_metadata;; validate-all) tsm_check validate;; notify|demote|promote|migrate_to|migrate_from|reload|recover|*) exit $OCF_ERR_UNIMPLEMENTED;; esac # vim: set tabstop=2 shiftwidth=2 softtabstop=2 expandtab : ","permalink":"https://christian.blog.pakiheim.de/posts/2009-06-05_ocf-agent-for-tivoli-storage-manager-redux/","summary":"\u003cp\u003eWell, after I finished my \u003ca href=\"http://christian.weblog.heimdaheim.de/2008/10/05/linux-ha-and-tivoli-storage-manager-finito/\" title=\"Linux-HA and Tivoli Storage Manager (Finito!)\"\u003efirst OCF agent back in October 2008\u003c/a\u003e, we have it running in production now for about ten months. During that time, we found quite a few points in which we\u0026rsquo;d like to improve the behaviour with that Linux-HA should handle TSM.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eShutdown TSM nicely if possible (Cancel client sessions, cancel running processes and dismount mounted volumes)\u003c/li\u003e\n\u003cli\u003eBetter error handling\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eSo, after another week of writing and testing with a small instance, I present the new OCF agent for Tivoli Storage Manager. It still has one or two weak points, but they are negligible. I still need to write the documentation for it, but the script should just work \u0026hellip;\u003c/p\u003e\n","title":"OCF agent for Tivoli Storage Manager: redux"},{"content":"Well, after yesterday\u0026rsquo;s episode with our tape library today continued to be a taxing day. After restarting a few exports that were hanging yesterday due to our library problems, something similar returned. TSM was unable to locate a few (two to be exact) tapes in the library.\n1 2 3 4 5 6 7 8 9 ANR8300E I/O error on library LIB3584 (OP=00006C03, CC=314, KEY=05, ASC=3B, ASCQ=0E, SENSE=70.00.05.00.00.00.00.0A.00.00.00.00.3B.0E.00.C0.00-.04., Description=The source slot or drive was empty in an attempt to move a volume). Refer to Appendix C in the \u0026#39;Messages\u0026#39; manual for recommended action. ANR8312E Volume 000400 could not be located in library LIB3584. ANR8358E Audit operation is required for library LIB3584. ANR8381E LTO volume 000400 could not be mounted in drive DR6 (/dev/rmt0). ANR1402W Mount request denied for volume 000400 - volume unavailable. ANR1410W Access mode for volume 000400 now set to \u0026#34;unavailable\u0026#34;. Yet the library reported the tapes were still inventoried. \u0026#x1f937; Here we are again, looking completely baffled. After a short while trying to figure out what to do, we went through the Data Cartridge inventory again. As it turns out, through putting the library in \u0026ldquo;Pause\u0026rdquo;-Mode and restarting TSM multiple times, TSM apparently completely forgot that it had these tapes put into drives.\nAfter manually moving the tapes back to their home slot via the management interface of the TS3500 and setting the volume access mode back to read-write, everything is fine now I could finish my pending exports!\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-06-03_weird-ts3500-problem-redux/","summary":"\u003cp\u003eWell, after \u003ca href=\"/posts/2009-06-03_weird-ts3500-problem-redux\" title=\"Weird TS3500 problem\"\u003eyesterday\u0026rsquo;s episode with our tape library\u003c/a\u003e today continued to be a taxing day. After restarting a few exports that were hanging yesterday due to our library problems, something similar returned. TSM was unable to locate a few (two to be exact) tapes in the library.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e9\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eANR8300E I/O error on library LIB3584 (OP=00006C03, CC=314, KEY=05, ASC=3B,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eASCQ=0E, SENSE=70.00.05.00.00.00.00.0A.00.00.00.00.3B.0E.00.C0.00-.04.,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eDescription=The source slot or drive was empty in an attempt to move a\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evolume). Refer to Appendix C in the \u0026#39;Messages\u0026#39; manual for recommended action.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eANR8312E Volume 000400 could not be located in library LIB3584.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eANR8358E Audit operation is required for library LIB3584.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eANR8381E LTO volume 000400 could not be mounted in drive DR6 (/dev/rmt0).\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eANR1402W Mount request denied for volume 000400 - volume unavailable.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eANR1410W Access mode for volume 000400 now set to \u0026#34;unavailable\u0026#34;.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eYet the library reported the tapes were still inventoried. \u0026#x1f937; Here we are again, looking completely baffled. After a short while trying to figure out what to do, we went through the Data Cartridge inventory again. As it turns out, through putting the library in \u0026ldquo;Pause\u0026rdquo;-Mode and restarting TSM multiple times, TSM apparently completely forgot that it had these tapes put into drives.\u003c/p\u003e","title":"Weird TS3500 problem: redux"},{"content":"Well, Laura Kedziora (Marketing Manager) from Rove contacted me about two months ago, whether or not I\u0026rsquo;d be willing to write up a review about their upcoming release of Mobile Admin supporting Nagios!\nAt first, I didn\u0026rsquo;t even know what \u0026quot; Mobile Admin\u0026quot; was .. though I heard some good things about Rove. After playing with it in a VM, I do have to admit that it\u0026rsquo;s a real neat piece of software.\nYou can cover the whole (well, pretty much everything) shebang dealing with Nagios with the cell phone. But not just that. I could also manage our VMware Infrastructure (or vCenter) with it, as well as a SCCM environment (if we had any that is). Since I only have a shitty-old Nokia (not the required Nokia 6xxx), I ended up borrowing my brothers BlackBerry to take some photos.\nThese are the interfaces I\u0026rsquo;m wanted to cover:\nMobile Admin server Nagios (since this was the initial point they asked me to review Mobile Admin) Windows (RDP, EventLog, Services, AD interface) Linux/Unix (SSH) To introduce, I do have to say I had some trouble figuring out a way to actually test this with the BlackBerry. Though it has nothing to do with Rove or Mobile Admin, but rather with the way I setup the tests. I did all this in my lab (you could call it that, it\u0026rsquo;s a single box running ESX, running ~20 or so virtual machines) at home, but since these services didn\u0026rsquo;t have a public address I had to play around with incoming NAT on our router. This all, because the BlackBerry Flip my brother owns is too stupid to associate with my wireless network.\n1. To start, I wanted to see whether or not I was able to view the Mobile Admin server\u0026rsquo;s interface via the cell phone.\nPicture 1: Viewing the Mobile Admin Server AuditLog on a BlackBerry\nAs you can see above on Picture 1, I was able to view browse through the Mobile Admin server\u0026rsquo;s inventory, and I ended up showing the AuditLog.\n2. Next test on the list was interfacing with my Nagios installation.\nPicture 2: Viewing the Nagios TAC on a BlackBerry\nAs you can see on Picture 2, the Nagios interface that the Mobile Admin Client features, is able to view the Nagios TAC. But it doesn\u0026rsquo;t stop there. The client also enables you, to reschedule checks, acknowledge checks, disable/enable notifications, \u0026hellip; The list goes on quite a while. It basically features all the options you\u0026rsquo;d have with a normal browser.\n3. I also wanted to see whether or not, I was able to utilize the various features Mobile Admin has regarding Windows administration.\nPicture 3: Opening an RDP session on a BlackBerry\nAs Picture 3 shows, opening a Remote Desktop session to a Windows box is quite easy, even though you do have to use the round gizmo on the keypad (what is that called anyway ? A trackball ?).\n4. Next two items on my list were accessing the most important Windows control panels (well, that\u0026rsquo;s my opinion - yours may differ - but that\u0026rsquo;s the good thing about opinions).\nPicture 4: Viewing services.msc on a BlackBerry\nPicture 5: Viewing eventvwr.msc on a BlackBerry\nAnd that is exactly, what Picture 4 and Picture 5 show us. Administering a Windows box with the cell phone becomes quite easy with Mobile Admin. Only requirement for those two is that the SAM-account you\u0026rsquo;re using to access the box, isn\u0026rsquo;t limited to a certain list that doesn\u0026rsquo;t include your cell phone.\n5. Last, but not least I wanted how usable the SSH-interface was. This was about the most important feature I needed, since I do run quite a few Linux/Unix boxen at home and at work.\nPicture 6: Opening a SSH session on a BlackBerry\nAnd Picture 6 shows exactly that. Opening a SSH session from the BlackBerry gets as easy as calling someone.\nSumming-up, I do have to say I\u0026rsquo;m quite pleased with what Rove provided. The installation of the Mobile Admin server, as well as the cell phone client is quite easy. What\u0026rsquo;s even more astonishing, is how easy it gets to interface your various systems with the Mobile Admin client. It took about 10 (as in ten!) minutes to actually test the initial list of things I had on my plate. Sure, I ended up doing some extended playing with it, since it actually is fun to use (which I can\u0026rsquo;t say about that much software \u0026ndash; just look at Tivoli, that\u0026rsquo;s a real mean software).\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-06-01_reviewing-mobile-admin-by-rove/","summary":"\u003cp\u003eWell, Laura Kedziora (Marketing Manager) from Rove contacted me about two months ago, whether or not I\u0026rsquo;d be willing to write up a review about their upcoming release of Mobile Admin supporting Nagios!\u003c/p\u003e\n\u003cp\u003eAt first, I didn\u0026rsquo;t even know what \u0026quot; \u003cem\u003eMobile Admin\u003c/em\u003e\u0026quot; was .. though I heard some good things about \u003ca href=\"http://www.roveit.com/\"\u003eRove\u003c/a\u003e. After playing with it in a VM, I do have to admit that it\u0026rsquo;s a real neat piece of software.\u003c/p\u003e\n\u003cp\u003eYou can cover the whole (well, pretty much everything) shebang dealing with Nagios with the cell phone. But not just that. I could also manage our VMware Infrastructure (or vCenter) with it, as well as a SCCM environment (if we had any that is). Since I only have a shitty-old Nokia (not the required Nokia 6xxx), I ended up borrowing my brothers BlackBerry to take some photos.\u003c/p\u003e\n","title":"Reviewing Mobile Admin by Rove"},{"content":"Well, if you remember back to last December, I had some severe troubles with this fake ass RAID controller. At the time I posted my last problem (or rather, my conclusion) I already bought a 3WARE Escalade 9550SXU-8LP on EBay (used, since I didn\u0026rsquo;t want to spend ~400 EUR). Now after the controller arrived in mid-January, I ended up buying a new main-board, processor, memory, \u0026hellip; in order to put the 3WARE card to use; initially I thought the 3WARE card would fit into my A7N8X-X, but apparently that only had a 16bit PCI-slot.\nNow, after reinstalling the box, and a short while in the 3WARE controller BIOS, I ended up with a 2,9TiB RAID5 array. That\u0026rsquo;s it for this lovely DawiControl crap. If anyone needs one, I still have the one I bought at work (lying around in a shelf), holler me.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-05-10_dawicontrol-sil3114/","summary":"\u003cp\u003eWell, if you remember back to last December, I had some severe troubles with this \u003ca href=\"/posts/2014-08-08_sil-3114-barfing\" title=\"SIL 3114 barfing\"\u003efake ass\u003c/a\u003e \u003ca href=\"/posts/2008-12-29_md-multiple-devices-weirdness\" title=\"MD (Multiple Devices) weirdness\"\u003eRAID controller\u003c/a\u003e. At the time I posted my last problem (or rather, my conclusion) I already bought a 3WARE Escalade 9550SXU-8LP on EBay (used, since I didn\u0026rsquo;t want to spend ~400 EUR). Now after the controller arrived in mid-January, I ended up buying a new main-board, processor, memory, \u0026hellip; in order to put the 3WARE card to use; initially I thought the 3WARE card would fit into my A7N8X-X, but apparently that only had a 16bit PCI-slot.\u003c/p\u003e","title":"DawiControl SIL3114"},{"content":"Disclaimer: I don\u0026rsquo;t take any responsibility for faults within the software, I just provide the RPM\u0026rsquo;s! Feel free to ask me about stuff concerning these RPM\u0026rsquo;s, but I ain\u0026rsquo;t accountable if your stuff goes kaboom \u0026hellip; Oh, and those RPM\u0026rsquo;s aren\u0026rsquo;t recommended or supported by Novell or IBM!\nAfter working with the novell-kmp solution, I think it\u0026rsquo;s actually rather easy to create a \u0026quot; Kernel Module Package\u0026quot;. In the end, I created two additional KMP\u0026rsquo;s, one for the tools component of the VMware-Tools shipped with VMware ESX, and another for the lin_tape SCSI driver, used by our IBM TS3400 as well as the IBM TS7530.\nSome parts (especially the build system used within the VMware kernel modules) took some figuring out/playing around, but I actually got it working. Now each time I update the VMware-Tools I just need to install the new RPM, tada! No need for a fully fledged build environment on every box.\nSUSE Linux Enterprise Server 10:\nibm-lin_tape-1.24.0_2.6.16.60_0.37_f594963d-0.1 (i586, x86_64, SRPM)\nibm-lin_tape-kmp-bigsmp (i586) ibm-lin_tape-kmp-debug (i586, x86_64) ibm-lin_tape-kmp-default (i586, x86_64) ibm-lin_tape-kmp-kdump (i586, x86_64) ibm-lin_tape-kmp-kdumppae (i586) ibm-lin_tape-kmp-smp (i586, x86_64) ibm-lin_tape-kmp-vmi (i586) ibm-lin_tape-kmp-vmipae (i586) vmware-tools-kmp-3.5.0_153875_2.6.16.60_0.37_f594963d-0.1 (SRPM)\nvmware-tools-kmp-bigsmp (i586) vmware-tools-kmp-debug (i586, x86_64) vmware-tools-kmp-default (i586, x86_64) vmware-tools-kmp-kdump (i586, x86_64) vmware-tools-kmp-kdumppae (i586) vmware-tools-kmp-smp (i586, x86_64) vmware-tools-kmp-vmi (i586) vmware-tools-kmp-vmipae (i586) vmware-tools-kmp-xen (i586, x86_64) vmware-tools-kmp-xenpae (i586) SUSE Linux Enterprise Server 11:\nibm-lin_tape-1.24.0_2.6.27.21_0.1-0.1 (i586, x86_64, SRPM)\nibm-lin_tape-kmp-debug (i586, x86_64) ibm-lin_tape-kmp-default (i586, x86_64) ibm-lin_tape-kmp-pae (i586) ibm-lin_tape-kmp-trace (i586) ibm-lin_tape-kmp-vm (i586, x86_64) vmware-tools-kmp-3.5.0_153875_2.6.27.21_0.1-0.1 (SRPM)\nvmware-tools-kmp-debug (i586, x86_64) vmware-tools-kmp-default (i586, x86_64) vmware-tools-kmp-pae (i586) vmware-tools-kmp-trace (i586, x86_64) vmware-tools-kmp-vmi (i586) vmware-tools-kmp-xen (i586, x86_64) ","permalink":"https://christian.blog.pakiheim.de/posts/2009-05-10_novell-kmp-vmware-tools-kmp-and-ibm-lin-tape-kmp/","summary":"\u003cp\u003e\u003cstrong\u003eDisclaimer:\u003c/strong\u003e I don\u0026rsquo;t take \u003cem\u003eany responsibility\u003c/em\u003e for faults within the software, I just provide the RPM\u0026rsquo;s! Feel free to ask me about stuff concerning these RPM\u0026rsquo;s, but I ain\u0026rsquo;t accountable if your stuff goes \u003cstrong\u003ekaboom\u003c/strong\u003e \u0026hellip; Oh, and those RPM\u0026rsquo;s aren\u0026rsquo;t \u003cstrong\u003erecommended\u003c/strong\u003e or \u003cstrong\u003esupported\u003c/strong\u003e by Novell or IBM!\u003c/p\u003e\n\u003cp\u003eAfter \u003ca href=\"/posts/2014-08-08_novell-kmp-useable-version-of-ibm-rdac-ds4000\" title=\"Novell KMP: Useable version of ibm-rdac-ds4000\"\u003eworking with the novell-kmp solution\u003c/a\u003e, I think it\u0026rsquo;s actually rather easy to create a \u0026quot; \u003cem\u003eKernel Module Package\u003c/em\u003e\u0026quot;. In the end, I created two additional KMP\u0026rsquo;s, one for the tools component of the VMware-Tools shipped with VMware ESX, and another for the lin_tape SCSI driver, used by our IBM TS3400 as well as the IBM TS7530.\u003c/p\u003e","title":"Novell KMP: vmware-tools-kmp and ibm-lin_tape-kmp"},{"content":"Well, as I wrote last year, I spent some time with my brother on Spiekeroog (that\u0026rsquo;s where he\u0026rsquo;s currently living and working). As I left on December 4th, it started snowing like crazy ..\nIf you read the old article, you might remember that I mentioned Spiekeroog is 100% free of fossil fueled vehicles. That being said, let\u0026rsquo;s continue with the story I\u0026rsquo;m about to tell.\nAnyway, my brother was walking me back to the hotel boat and we waited a bit in the harbour since we were a bit early. Now, every item is delivered by ship to the island, since there\u0026rsquo;s no other way (besides by air, which is kinda expensive ..). Anyway, them dockworkers ain\u0026rsquo;t stupid. They needed some snow-free space, and they started clearing the snow. But how ?\nWell, again, them ain\u0026rsquo;t stupid \u0026hellip; You take a forklift and a euro-pallet and you got what ? Exactly, a snow plow!\nSpiekeroogish snow plow\nI know, the images are kinda grainy, sadly I only had my cell phone to take the photo (left the digital camera at home). C\u0026rsquo;est la vie ..\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-05-04_winter-on-spiekeroog/","summary":"\u003cp\u003eWell, as I \u003ca href=\"/posts/2014-08-08_short-vacation\" title=\"Short vacation\"\u003ewrote last year\u003c/a\u003e, I spent some time with my brother on Spiekeroog (that\u0026rsquo;s where he\u0026rsquo;s currently living and working). As I left on December 4th, it started snowing like crazy ..\u003c/p\u003e\n\u003cp\u003eIf you read the old article, you might remember that I mentioned Spiekeroog is 100% free of fossil fueled vehicles. That being said, let\u0026rsquo;s continue with the story I\u0026rsquo;m about to tell.\u003c/p\u003e\n\u003cp\u003eAnyway, my brother was walking me back to the hotel boat and we waited a bit in the harbour since we were a bit early. Now, every item is delivered by ship to the island, since there\u0026rsquo;s no other way (besides by air, which is kinda expensive ..). Anyway, them dockworkers ain\u0026rsquo;t stupid. They needed some snow-free space, and they started clearing the snow. But how ?\u003c/p\u003e","title":"Winter on Spiekeroog"},{"content":"Well, I am an enthusiastic user of Xmarks (or Foxmarks) and played with this again and again. So this weekend, I finally decided to do it properly. I sat down, recreated the whole WebDAV stuff (even if I cheated of this HowtoForge article).\nAlways redirect traffic to HTTPS, since transmitting username and passwords via HTTP ain\u0026rsquo;t that secure (MITM)\nOkay, so here are the shortended setup instructions:\nEnable mod_access, mod_auth, mod_redirect and mod_webdav in /etc/lighttpd/lighttpd.conf Create the necessary directories Create the htpasswd-file Configure the redirections 1 2 3 mkdir -p /var/www/dav/{web,auth,sql} chown -R lighttpd:lighttpd/var/www/dav/{web,sql} htpasswd -c /var/www/dav/auth/htpasswd chrischie Since we just created the necessary directories, as well as a htpasswd-file containing a user we should be able to change the configuration now:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 $SERVER[\u0026#34;socket\u0026#34;] == \u0026#34;:80\u0026#34; { $HTTP[\u0026#34;host\u0026#34;] == \u0026#34;dav\u0026#34; { url.redirect = ( \u0026#34;^/(.*)\u0026#34; =\u0026gt; \u0026#34;https://%1/$1\u0026#34; ) } } $SERVER[\u0026#34;socket\u0026#34;] == \u0026#34;:443\u0026#34; { $HTTP[\u0026#34;host\u0026#34;] == \u0026#34;dav\u0026#34; { webdav.activate = \u0026#34;enable\u0026#34; webdav.is-readonly = \u0026#34;disable\u0026#34; webdav.sqlite-db-name = \u0026#34;/var/www/dav/sql/sqlite.db\u0026#34; auth.backend = \u0026#34;htpasswd\u0026#34; auth.backend.htpasswd.userfile = \u0026#34;/var/www/dav/auth/htaccess\u0026#34; auth.require = ( \u0026#34;\u0026#34; =\u0026gt; ( \u0026#34;method\u0026#34; =\u0026gt; \u0026#34;basic\u0026#34;, \u0026#34;realm\u0026#34; =\u0026gt; \u0026#34;webdav\u0026#34;, \u0026#34;require\u0026#34; =\u0026gt; \u0026#34;valid-user\u0026#34; ) ) } } Now, just restart the lighttpd service and watch your WebDAV shine. Seriously, there are a couple of things you should be aware of:\nWhen using a home-grown WebDAV server with HTTPS (meaning, custom certificate), Firefox is gonna be blocking the site at first (and Xmarks is gonna fail with a rather cryptic \u0026quot; Error 8172\u0026quot;). Navigate to the URL manually and add an Exception for the certificate. Before changing the URL\u0026rsquo;s in Xmarks, I made the error and manually created directories named \u0026ldquo;bookmarks\u0026rdquo; and \u0026ldquo;passwords\u0026rdquo;, which I then entered in the respective dialogboxes in the settings window. That however made Xmarks cry horribly when running the synchronization. 1 2 3 4 5 6 7 8 ------ Xmarks/3.1.0 (/Places) starting upload with https://dav ------ \u0026gt;\u0026gt;\u0026gt; PUT https://chrischie@dav/xmarks/bookmarks \u0026gt;\u0026gt;\u0026gt; Body is: {\u0026#34;commands\u0026#34;:[{\u0026#34;action\u0026#34;:\u0026#34;insert\u0026#34;,\u0026#34;nid\u0026#34;:\u0026#34;ROOT\u0026#34;,\u0026#34;args\u0026#34;:... \u0026gt;\u0026gt;\u0026gt; Callback ({status:403, errormsg:\u0026#34;\u0026#34;}) Got a 403 False alarm? ({status:403, errormsg:\u0026#34;\u0026#34;, auth:(void 0)}) Returned error: Forbidden(403) Will retry at Sun May 03 2009 16:25:41 GMT+0200 After deleting the folders, it works just fine.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-05-03_firefox-hosting-xmarks-formerly-foxmarks-on-lighttpd/","summary":"\u003cp\u003eWell, I am an enthusiastic user of Xmarks (or Foxmarks) and played with this again and again. So this weekend, I finally decided to do it properly. I sat down, recreated the whole WebDAV stuff (even if I cheated of this \u003ca href=\"http://www.howtoforge.com/setting-up-webdav-with-lighttpd-debian-etch\"\u003eHowtoForge article\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eAlways redirect traffic to HTTPS, since transmitting username and passwords via HTTP ain\u0026rsquo;t that secure (MITM)\u003c/p\u003e\n\u003cp\u003eOkay, so here are the shortended setup instructions:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eEnable mod_access, mod_auth, mod_redirect and mod_webdav in /etc/lighttpd/lighttpd.conf\u003c/li\u003e\n\u003cli\u003eCreate the necessary directories\u003c/li\u003e\n\u003cli\u003eCreate the htpasswd-file\u003c/li\u003e\n\u003cli\u003eConfigure the redirections\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emkdir\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"k\"\u003evar\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ewww\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edav\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003eweb\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003eauth\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003esql\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003echown\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eR\u003c/span\u003e \u003cspan class=\"n\"\u003elighttpd\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003elighttpd\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"k\"\u003evar\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ewww\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edav\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"n\"\u003eweb\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003esql\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ehtpasswd\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ec\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"k\"\u003evar\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ewww\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edav\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eauth\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ehtpasswd\u003c/span\u003e \u003cspan class=\"n\"\u003echrischie\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eSince we just created the necessary directories, as well as a htpasswd-file containing a user we should be able to change the configuration now:\u003c/p\u003e","title":"Firefox: Hosting Xmarks (formerly Foxmarks) on lighttpd"},{"content":"Well, my co-worker just called on my cell (it\u0026rsquo;s Friday, 16:00), and asked me which start-up script he needed to change in order to restore the database. My first response was, \u0026ldquo;ummm, that\u0026rsquo;s gonna be hard, we\u0026rsquo;re using heartbeat\u0026rdquo;.\nOkay, so after a bit of asking I got out of him what he wanted to achieve by changing the start-up script. Apparently he did something to crash Tivoli Storage Manager (or rather repeatedly crash it) and wanted to restore the database. He talked to one of the systems partner we do have (and I\u0026rsquo;m happy we have them most of the time), who in return told him how to do it, but forgot a minute after he hung up the phone.\nSo, I went digging while he still was telling me how he got Tivoli to kick his own ass \u0026hellip; After a bit, I thought \u0026ldquo;hrrrrrm, shouldn\u0026rsquo;t this be covered in the Tivoli documentation ?\u0026rdquo;, and surprisingly it\u0026rsquo;s actually covered in the documentation.\nIt\u0026rsquo;s actually rather simple.\nStop the dsmserv Linux-HA cluster service (tsm-control ha stop tsm1) Setup the environment (since we\u0026rsquo;re running multiple instances of Tivoli Storage Manager - export DSMSERV_DIR, export DSMSERV_CONFIG) Enter the path of the server Run dsmserv restore db Wait some time (took about half an hour to restore the 95G database and the 10G recovery log) Start the dsmserv Linux-HA cluster service (tsm-control ha start tsm1) Update the server-to-server communication, since the restore db changes the communication verification token 1 2 3 4 5 6 7 8 9 \u0026gt; tsm-control ha stop tsm1 - tsm1 (dsmserv) -\u0026gt; ha: [ OK ] \u0026gt; export DSMSERV_DIR=/opt/tivoli/tsm/server/bin \u0026gt; export DSMSERV_CONFIG=/opt/tivoli/tsm/server/tsm1/dsmserv.opt \u0026gt; cd /opt/tivoli/tsm/server/tsm1 \u0026gt; /opt/tivoli/tsm/server/bin/dsmserv restore db todate=TODAY totime=08:00:00 source=dbbackup preview=no .... wait some time .... \u0026gt; tsm-control ha start tsm1 - tsm1 (dsmserv) -\u0026gt; ha: [ OK ] ","permalink":"https://christian.blog.pakiheim.de/posts/2009-04-24_tsm-restoring-the-database-recovery-log-to-a-point-in-time/","summary":"\u003cp\u003eWell, my co-worker just called on my cell (it\u0026rsquo;s Friday, 16:00), and asked me which start-up script he needed to change in order to restore the database. My first response was, \u0026ldquo;ummm, that\u0026rsquo;s gonna be hard, we\u0026rsquo;re using heartbeat\u0026rdquo;.\u003c/p\u003e\n\u003cp\u003eOkay, so after a bit of asking I got out of him what he wanted to achieve by changing the start-up script. Apparently he did something to crash Tivoli Storage Manager (or rather repeatedly crash it) and wanted to restore the database. He talked to one of the systems partner we do have (and I\u0026rsquo;m happy we have them most of the time), who in return told him how to do it, but forgot a minute after he hung up the phone.\u003c/p\u003e","title":"TSM: Restoring the database/recovery log to a point-in-time"},{"content":"Well, I just stumbled upon something .. My Nagios at work wasn\u0026rsquo;t working anymore, and I went looking.\n1 2 3 4 5 6 7 8 9 10 11 nagios3 ~ [0] \u0026gt; tail -f /var/log/nagios/nagios.log [1238658394] Error: Unable to save status file: No space left on device [1238658403] Error: Unable to save status file: No space left on device [1238658413] Error: Unable to save status file: No space left on device [1238658423] SERVICE ALERT: tsm1;POWER WARN;OK;SOFT;4;-u OK - 0 [1238658423] Error: Unable to save status file: No space left on device [1238658433] SERVICE ALERT: tsm2;LOAD;WARNING;SOFT;1;WARNING - load average: 6.25, 5.72, 5.36 [1238658433] Error: Unable to save status file: No space left on device [1238658443] Error: Unable to save status file: No space left on device [1238658453] Error: Unable to save status file: No space left on device [1238658463] Error: Unable After that, zip - nada. Next thing, check whether or not the device is really full \u0026hellip; Okay, df ..\n1 2 3 4 5 nagios3 ~ [130] \u0026gt; df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 3.5G 1.2G 2.1G 37% / udev 506M 88K 506M 1% /dev /dev/sdb1 7.9G 7.7G 0 100% /var So, it is actually completely filled up. So, now we need to find who\u0026rsquo;s hogging the space. Since I had a assumption (pnp4nagios), I went straight for /var/lib \u0026hellip;\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 nagios3 lib [0] \u0026gt; du -sh * 16K CAM 1.1M YaST2 8.0K acpi 4.0K apache2 28K autoinstall 16K dhcpcd 4.0K empty 96K hardware 4.0K logrotate.status 8.0K misc 78M mysql 2.1M nagios 4.0K net-snmp 4.0K news 24K nfs 8.0K nobody 36K ntp 4.0K pam_devperm 824K php5 359M pnp4nagios 22M rpm 28K scpm 4.0K smpppd 4.0K sshd 4.0K support 8.0K suseRegister 4.0K uniconf 4.0K update-messages 4.0K wwwrun 33M zmd 14M zypp That wasn\u0026rsquo;t it .. so heading to the next place, that\u0026rsquo;s suspicious most of the time, /var/log.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 nagios3 log [0] \u0026gt; du -sh * 5.2G YaST2 4.0K acpid 1.4G apache2 28K boot.msg 28K boot.omsg 4.0K cups 4.0K dsmerror.log 148K dsmsched.log 4.0K faillog 4.0K krb5 12K lastlog 4.0K localmessages 16K mail 16K mail.info 198M messages 0 mysqld.log 14M nagios 0 ntp 4.0K pnp4nagios 4.0K sa 8.0K scpm 4.0K vmdesched.log 16K vmware-imc 4.0K vmware-tools-guestd 82M warn 348K wtmp 115M zmd-backend.log 24M zmd-messages.log I was like \u0026ldquo;WTF ? 5.2G for YaST2 logs ?\u0026rdquo; when I initially saw that output \u0026hellip; As of now, I got a crontab emptying /var/log/YaST2 every 24 hours \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-04-03_sles10-zypper-log/","summary":"\u003cp\u003eWell, I just stumbled upon something .. My Nagios at work wasn\u0026rsquo;t working anymore, and I went looking.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003enagios3\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003etail\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ef\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"k\"\u003evar\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"nb\"\u003elog\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003enagios\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003enagios\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elog\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1238658394\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003eError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eUnable\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003esave\u003c/span\u003e \u003cspan class=\"n\"\u003estatus\u003c/span\u003e \u003cspan class=\"n\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eNo\u003c/span\u003e \u003cspan class=\"n\"\u003espace\u003c/span\u003e \u003cspan class=\"n\"\u003eleft\u003c/span\u003e \u003cspan class=\"n\"\u003eon\u003c/span\u003e \u003cspan class=\"n\"\u003edevice\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1238658403\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003eError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eUnable\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003esave\u003c/span\u003e \u003cspan class=\"n\"\u003estatus\u003c/span\u003e \u003cspan class=\"n\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eNo\u003c/span\u003e \u003cspan class=\"n\"\u003espace\u003c/span\u003e \u003cspan class=\"n\"\u003eleft\u003c/span\u003e \u003cspan class=\"n\"\u003eon\u003c/span\u003e \u003cspan class=\"n\"\u003edevice\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1238658413\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003eError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eUnable\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003esave\u003c/span\u003e \u003cspan class=\"n\"\u003estatus\u003c/span\u003e \u003cspan class=\"n\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eNo\u003c/span\u003e \u003cspan class=\"n\"\u003espace\u003c/span\u003e \u003cspan class=\"n\"\u003eleft\u003c/span\u003e \u003cspan class=\"n\"\u003eon\u003c/span\u003e \u003cspan class=\"n\"\u003edevice\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1238658423\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003eSERVICE\u003c/span\u003e \u003cspan class=\"n\"\u003eALERT\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003etsm1\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"n\"\u003ePOWER\u003c/span\u003e \u003cspan class=\"n\"\u003eWARN\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"n\"\u003eOK\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"n\"\u003eSOFT\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eu\u003c/span\u003e \u003cspan class=\"n\"\u003eOK\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1238658423\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003eError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eUnable\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003esave\u003c/span\u003e \u003cspan class=\"n\"\u003estatus\u003c/span\u003e \u003cspan class=\"n\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eNo\u003c/span\u003e \u003cspan class=\"n\"\u003espace\u003c/span\u003e \u003cspan class=\"n\"\u003eleft\u003c/span\u003e \u003cspan class=\"n\"\u003eon\u003c/span\u003e \u003cspan class=\"n\"\u003edevice\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1238658433\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003eSERVICE\u003c/span\u003e \u003cspan class=\"n\"\u003eALERT\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003etsm2\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"n\"\u003eLOAD\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"n\"\u003eWARNING\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"n\"\u003eSOFT\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"n\"\u003eWARNING\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"nb\"\u003eload\u003c/span\u003e \u003cspan class=\"n\"\u003eaverage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mf\"\u003e6.25\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mf\"\u003e5.72\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"mf\"\u003e5.36\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1238658433\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003eError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eUnable\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003esave\u003c/span\u003e \u003cspan class=\"n\"\u003estatus\u003c/span\u003e \u003cspan class=\"n\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eNo\u003c/span\u003e \u003cspan class=\"n\"\u003espace\u003c/span\u003e \u003cspan class=\"n\"\u003eleft\u003c/span\u003e \u003cspan class=\"n\"\u003eon\u003c/span\u003e \u003cspan class=\"n\"\u003edevice\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1238658443\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003eError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eUnable\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003esave\u003c/span\u003e \u003cspan class=\"n\"\u003estatus\u003c/span\u003e \u003cspan class=\"n\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eNo\u003c/span\u003e \u003cspan class=\"n\"\u003espace\u003c/span\u003e \u003cspan class=\"n\"\u003eleft\u003c/span\u003e \u003cspan class=\"n\"\u003eon\u003c/span\u003e \u003cspan class=\"n\"\u003edevice\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1238658453\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003eError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eUnable\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"n\"\u003esave\u003c/span\u003e \u003cspan class=\"n\"\u003estatus\u003c/span\u003e \u003cspan class=\"n\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eNo\u003c/span\u003e \u003cspan class=\"n\"\u003espace\u003c/span\u003e \u003cspan class=\"n\"\u003eleft\u003c/span\u003e \u003cspan class=\"n\"\u003eon\u003c/span\u003e \u003cspan class=\"n\"\u003edevice\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"mi\"\u003e1238658463\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"n\"\u003eError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eUnable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAfter that, zip - nada. Next thing, check whether or not the device is really full \u0026hellip; Okay, df ..\u003c/p\u003e","title":"SLES10: zypper-log"},{"content":"Well, after some poking around I finally found some OID\u0026rsquo;s for the RSA\u0026rsquo;s (only through these two links: check_rsa_fan and check_rsa_temp).\nFor Nagios, I dismissed the fans, since the fan speed is only passed on in percent values. So I only added this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 define hostgroup{ hostgroup_name rsa-snmp alias Remote Supervisor Adapter (allowing SNMP connections) } define service{ use generic-perfdata check_command check_rsa_snmpv1_public!.1.3.6.1.4.1.2.3.51.1.2.1.2.1.1!45!60!°C!Temperature CPU0! hostgroup_name rsa-snmp service_description TEMP CPU0 } define service{ use generic-perfdata check_command check_rsa_snmpv1_public!.1.3.6.1.4.1.2.3.51.1.2.1.2.2.1!45!60!°C!Temperature CPU1! hostgroup_name rsa-snmp service_description TEMP CPU1 } define service{ use generic-perfdata check_command check_rsa_snmpv1_public!.1.3.6.1.4.1.2.3.51.1.2.1.5.1.0!29!35!°C!Temperature Ambient! hostgroup_name rsa-snmp service_description TEMP AMBIENT } Oh, and if anyone else is curious like me, here\u0026rsquo;s the list with the OID\u0026rsquo;s, courtesy of Gerhard Gschlad and Leonardo Calamai.\nFor the fans:\n1 2 3 4 5 6 7 8 9 10 11 12 Fan1: .1.3.6.1.4.1.2.3.51.1.2.3.1.0 Fan2: .1.3.6.1.4.1.2.3.51.1.2.3.2.0 Fan3: .1.3.6.1.4.1.2.3.51.1.2.3.3.0 Fan4: .1.3.6.1.4.1.2.3.51.1.2.3.4.0 Fan5: .1.3.6.1.4.1.2.3.51.1.2.3.5.0 Fan6: .1.3.6.1.4.1.2.3.51.1.2.3.6.0 Fan7: .1.3.6.1.4.1.2.3.51.1.2.3.7.0 Fan8: .1.3.6.1.4.1.2.3.51.1.2.3.8.0 Fan9: .1.3.6.1.4.1.2.3.51.1.2.3.9.0 Fan10: .1.3.6.1.4.1.2.3.51.1.2.3.10.0 Fan11: .1.3.6.1.4.1.2.3.51.1.2.3.11.0 Fan12: .1.3.6.1.4.1.2.3.51.1.2.3.12.0 And for the temperatures:\n1 2 3 4 5 CPU1: .1.3.6.1.4.1.2.3.51.1.2.1.2.1.1 CPU2: .1.3.6.1.4.1.2.3.51.1.2.1.2.2.1 CPU3: .1.3.6.1.4.1.2.3.51.1.2.1.2.3.1 CPU4: .1.3.6.1.4.1.2.3.51.1.2.1.2.4.1 Ambient: .1.3.6.1.4.1.2.3.51.1.2.1.5.1.0 I just found a proper list of OID\u0026rsquo;s for the IBM RSA adapter. That\u0026rsquo;s rather nice, since I really was looking for the OID\u0026rsquo;s for the VRM failure OID and other warning/critical events.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-04-01_nagios-snmp-oid-s-for-ibm-s-rsa-ii-adapter/","summary":"\u003cp\u003eWell, after some poking around I finally found some OID\u0026rsquo;s for the RSA\u0026rsquo;s (only through these two links: \u003ca href=\"http://www.monitoringexchange.org/inventory/Check-Plugins/Hardware/Server-%2528Manufacturer%2529/IBM/RSA---RSA-II-FAN-SPEED\"\u003echeck_rsa_fan\u003c/a\u003e and \u003ca href=\"http://www.monitoringexchange.org/inventory/Check-Plugins/Hardware/Server-%2528Manufacturer%2529/IBM/RSA---RSA-II-TEMPERATURE\"\u003echeck_rsa_temp\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eFor Nagios, I dismissed the fans, since the fan speed is only passed on in percent values. So I only added this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edefine hostgroup{\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  hostgroup_name                  rsa-snmp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  alias                           Remote Supervisor Adapter (allowing SNMP connections)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edefine service{\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  use                             generic-perfdata\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  check_command                   check_rsa_snmpv1_public!.1.3.6.1.4.1.2.3.51.1.2.1.2.1.1!45!60!°C!Temperature CPU0!\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  hostgroup_name                  rsa-snmp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  service_description             TEMP CPU0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edefine service{\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  use                             generic-perfdata\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  check_command                   check_rsa_snmpv1_public!.1.3.6.1.4.1.2.3.51.1.2.1.2.2.1!45!60!°C!Temperature CPU1!\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  hostgroup_name                  rsa-snmp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  service_description             TEMP CPU1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edefine service{\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  use                             generic-perfdata\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  check_command                   check_rsa_snmpv1_public!.1.3.6.1.4.1.2.3.51.1.2.1.5.1.0!29!35!°C!Temperature Ambient!\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  hostgroup_name                  rsa-snmp\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  service_description             TEMP AMBIENT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eOh, and if anyone else is curious like me, here\u0026rsquo;s the list with the OID\u0026rsquo;s, courtesy of Gerhard Gschlad and Leonardo Calamai.\u003c/p\u003e","title":"Nagios: SNMP OID's for IBM's RSA II adapter"},{"content":"Well, I\u0026rsquo;m sitting again here grinding my head on how to fix up a certain package. Now, I had to look it up again, so this time I\u0026rsquo;m writing it down!\n1 2 3 Source1: ${name}.initd ... install -o root -g root -m 755 %{S:1} $RPM_BUILD_ROOT/etc/init.d/ndo2db ","permalink":"https://christian.blog.pakiheim.de/posts/2009-03-26_rpm-spec-installing-a-custom-init-script/","summary":"\u003cp\u003eWell, I\u0026rsquo;m sitting again here grinding my head on how to fix up a certain package. Now, I had to look it up again, so this time I\u0026rsquo;m writing it down!\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSource1: ${name}.initd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003einstall -o root -g root -m 755 %{S:1} $RPM_BUILD_ROOT/etc/init.d/ndo2db\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"RPM spec: Installing a custom init-script"},{"content":"Well, the title is kinda misleading since you need administrator privileges to run msconfig in it\u0026rsquo;s full scope. But this is just a hint to myself on how to execute msconfig without logging out and then logging in as administrator.\n1 runas /user:Administrator C:WINDOWSpchealthhelpctrbinariesmsconfig.exe ","permalink":"https://christian.blog.pakiheim.de/posts/2009-03-25_windows-running-msconfig-as-non-privileged-user/","summary":"\u003cp\u003eWell, the title is kinda misleading since you need administrator privileges to run msconfig in it\u0026rsquo;s full scope. But this is just a hint to myself on how to execute msconfig without logging out and then logging in as administrator.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erunas /user:Administrator C:WINDOWSpchealthhelpctrbinariesmsconfig.exe\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Windows: Running msconfig as non privileged user"},{"content":"Well, recently I stepped up to watch our cluster environments \u0026hellip; Michael has a good howto on how to watch Windows Cluster environments in the NSclient++ wiki.\nNow, this has it\u0026rsquo;s own perks \u0026hellip; Which I stumbled upon when trying to write a Linux-HA OCF resource agent for the Nagios NRPE server. Combining that Linux-HA with SLES10 is a good thing generally, but using startproc in that resource agent is not such a good idea.\nApparently Novell (or SuSE GmbH) thought it might be wise to include some additional logic into the wrapper. startproc, checkproc and killproc do check for the name of the executable. So if you try to start an additional process with the same name, you need to dig a bit deeper.\nFor this to work, you need two additional things (quotations directly from man 8 startproc):\n-p pid_file (Former option -f changed due to the LSB specification.) Use an alternate pid file instead of the default (/var/run/ .pid). The pid read from this file is being matched against the pid of running processes that have an executable with specified path of the program. In order to avoid confusion with stale pid files, a not up-to-date pid will be ignored.\nNow, then apparently this isn\u0026rsquo;t enough. startproc is still refusing to start a second process.\n-i ignore_file The pid found in this file is used as session id of the same binary program which should be ignored by startproc.\nNow, we need to construct a proper command for this:\n1 2 startproc -p /var/run/nrpe.pid -i \u0026#34;/var/run/nrpe*.pid\u0026#34; /usr/bin/nrpe -c /etc/nagios/nrpe.cfg -d This works quite fine from the command line, but just doesn\u0026rsquo;t work from within the OCF resource agent.\nI tried for about half an hour figuring out, why the heck this wasn\u0026rsquo;t working from within the OCF resource and then gave up for some brainstorming with my trainee. It all boiled down to \u0026quot; Why exactly do I need to cluster the daemon ?\u0026quot;\nThe main issue is that if you have a multiple node cluster, you do not know which one is active at any given time. If you monitor both nodes using Nagios, one will always be critical while the other is not. This is not a good situation. The cleanest solution is to cluster the NSClient++ daemon, so that it is always running on the active node.\nThat is only partly true. Usually each cluster group has at least one dedicated IP address. NRPE as well as NSclient++ is listening to all available IP addresses.\nThat means, if you run NRPE or NSclient++ on all available cluster nodes, you don\u0026rsquo;t need to cluster the daemon. That\u0026rsquo;s one huge hassle you don\u0026rsquo;t need to worry about anymore.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-03-19_nagios-watching-clustered-environments-the-other-way/","summary":"\u003cp\u003eWell, recently I stepped up to watch our cluster environments \u0026hellip; Michael has a good howto on how to watch Windows Cluster environments in the \u003ca href=\"http://nsclient.com/nscp/wiki/TipsAndTrick\"\u003eNSclient++ wiki\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eNow, this has it\u0026rsquo;s own perks \u0026hellip; Which I stumbled upon when trying to write a Linux-HA OCF resource agent for the Nagios NRPE server. Combining that Linux-HA with SLES10 is a good thing generally, but using startproc in that resource agent is not such a good idea.\u003c/p\u003e\n\u003cp\u003eApparently Novell (or SuSE GmbH) thought it might be wise to include some additional logic into the wrapper. startproc, checkproc and killproc do check for the name of the executable. So if you try to start an additional process with the same name, you need to dig a bit deeper.\u003c/p\u003e\n\u003cp\u003eFor this to work, you need two additional things (quotations directly from \u003cstrong\u003eman 8 startproc\u003c/strong\u003e):\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e-p\u003c/strong\u003e pid_file\n(Former option \u003cstrong\u003e-f\u003c/strong\u003e changed due to the LSB specification.) Use an alternate pid file instead of the default (/var/run/ \u003cstrong\u003e\u003c!-- raw HTML omitted --\u003e\u003c/strong\u003e.pid). The pid read from this file is being matched against the pid of running processes that have an executable with specified path of the program. In order to avoid confusion with stale pid files, a not up-to-date pid will be ignored.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eNow, then apparently this isn\u0026rsquo;t enough. startproc is still refusing to start a second process.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e-i\u003c/strong\u003e ignore_file\nThe pid found in this file is used as session id of the same binary program which should be ignored by \u003cstrong\u003estartproc\u003c/strong\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n","title":"Nagios: Watching Clustered environments (the other way)"},{"content":"I just looked over the slides of a presentation one of my trainees bought back from Chemnitz, and there was this nifty one-line command, with which you can generate a random sha1sum for your authkeys file.\nNow, since I\u0026rsquo;m a bit lazy here\u0026rsquo;s the full command line to fill /etc/ha.d/authkeys for you:\n1 2 node2 ~ [0] \u0026gt; echo \u0026#34;auth 1 1 sha1 $( dd if=/dev/urandom count=4 2\u0026gt; /dev/null | openssl dgst -sha1 )\u0026#34; ","permalink":"https://christian.blog.pakiheim.de/posts/2009-03-18_linux-ha-creating-a-random-authkey/","summary":"\u003cp\u003eI just looked over the slides of a presentation \u003ca href=\"https://blog.devnu11.net/\"\u003eone of my trainees\u003c/a\u003e bought back from Chemnitz, and there was this nifty one-line command, with which you can generate a random sha1sum for your authkeys file.\u003c/p\u003e\n\u003cp\u003eNow, since I\u0026rsquo;m a bit lazy here\u0026rsquo;s the full command line to fill \u003cstrong\u003e\u003cem\u003e/etc/ha.d/authkeys\u003c/em\u003e\u003c/strong\u003e for you:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enode2 ~ [0] \u0026gt; echo \u0026#34;auth 1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1 sha1 $( dd if=/dev/urandom count=4  2\u0026gt; /dev/null | openssl dgst -sha1 )\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Linux-HA: Creating a random authkey"},{"content":"In the past, I always had problems with SLES and our Tivoli Storage Manager client\u0026rsquo;s when backing up files with german umlauts. Well, today I looked a bit harder, and quite quickly found a solution.\n1 2 sles9 root [0] \u0026gt; env | grep ^LC LC_CTYPE=de_DE.UTF-8 As you can see from the above, SLES9/10 ain\u0026rsquo;t setting LANG or LC_ALL (which I searched for first), but is setting LC_CTYPE.\nSo, simply changing the LC_CTYPE in the init-script and/or prepending the dsmc command line with a new LC_CTYPE fixes my umlauts problems!\n1 sles9 root [0] \u0026gt; LC_CTYPE=\u0026#34;en_US\u0026#34; dsmc incr Well, I had a long\u0026rsquo;ish talk with one of my trustworthy IBM senior consultants the day after writing this \u0026hellip;\nHe told me something along the lines of this:\nIf you would like to back up files with names containing characters with a code \u0026gt; 127 please ensure that you have chosen a SBCS character set for your locale. The default code page C or the code page POSIX supports characters up to 127 only. Files whose names contain special characters will be skipped if C or POSIX is used. It is strongly recommended to perform a system backup by using a SBCS character set to prevent any file or directory from being skipped. This behavior for different locales is intended.\nAnd this:\nThe UTF-8 locale is default on some Linux platforms. However, TSM Client currently does not support running under UTF-8 locales (such as en_US.UTF-8 and ja_JP.UTF-\u0026#x1f60e;. Export your LANG and LC_ALL environment variables to the iso8859-1 or EUC versions of your locale and then start a new xterm (or mlterm) session prior to running TSM Client.\nThat basically means, at least for using the TSM Client Java Interface (dsmj) and the scheduler/client acceptor daemon you have to switch your locales to something _ not_ UTF-8 capable.\nHe also mentioned, that IBM doesn\u0026rsquo;t have a real solution for this problem, as well that there is no real workaround. You need to invest some time into figuring out the \u0026quot; right\u0026quot; locale setting for your system(s), since after writing the above I came to the result that it ain\u0026rsquo;t enough ..\nYou need to do the following:\n1 2 3 4 lang=\u0026#34;de_DE@euro\u0026#34; export LC_CTYPE=\u0026#34;$lang\u0026#34; export LANG=\u0026#34;$lang\u0026#34; export LC_ALL=\u0026#34;$lang\u0026#34; After doing so, the scheduler and the command-line client works \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-03-02_tsm-client-backing-up-files-with-umlauts-on-sles/","summary":"\u003cp\u003eIn the past, I always had problems with SLES and our Tivoli Storage Manager client\u0026rsquo;s when backing up files with german umlauts. Well, today I looked a bit harder, and quite quickly found a solution.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esles9 root [0] \u0026gt; env | grep ^LC\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eLC_CTYPE=de_DE.UTF-8\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAs you can see from the above, SLES9/10 ain\u0026rsquo;t setting \u003cem\u003eLANG\u003c/em\u003e or \u003cem\u003eLC_ALL\u003c/em\u003e (which I searched for first), but is setting \u003cem\u003eLC_CTYPE\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003eSo, simply changing the \u003cem\u003eLC_CTYPE\u003c/em\u003e in the init-script and/or prepending the dsmc command line with a new \u003cem\u003eLC_CTYPE\u003c/em\u003e fixes my umlauts problems!\u003c/p\u003e","title":"TSM client: Backing up files with umlauts on SLES"},{"content":"Well, today I had to grind my head again, regarding the way check_snmp handles WARNING and CRITICAL events. From my point of view, check_snmp is really just retarded sometimes.\nAs you know, all the other plugins accept WARNING and CRITICAL-thresholds based on the calculation, if the return integer is above this threshold it reached WARNING/CRITICAL state. But check_snmp doesn\u0026rsquo;t play that way.\nIt expects only ranges, which are NOT gonna result in warning or critical events. Which is kinda stupid, since you gotta rethink twice about the thresholds \u0026#x1f61b;\n1 2 3 4 5 6 7 8 9 10 define service { use generic-service host_name ibm-bc1-mgmt service_description Chassis Cooling - Bay 1 check_command check_snmpv1_public!.1.3.6.1.4.1.2.3.51.2.2.3.20.0! 1900:8000!1900:0,10000:8000! RPM!Chassis Cooling - Bay 1 action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } All in all, another lesson learned \u0026#x1f62f;\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-02-27_nagios-check-snmp-again/","summary":"\u003cp\u003eWell, today I had to grind my head again, regarding the way check_snmp handles WARNING and CRITICAL events. From my point of view, check_snmp is really just retarded sometimes.\u003c/p\u003e\n\u003cp\u003eAs you know, all the other plugins accept WARNING and CRITICAL-thresholds based on the calculation, if the return integer is above this threshold it reached WARNING/CRITICAL state. But check_snmp doesn\u0026rsquo;t play that way.\u003c/p\u003e\n\u003cp\u003eIt expects only ranges, which are \u003cstrong\u003eNOT\u003c/strong\u003e gonna result in warning or critical events. Which is kinda stupid, since you gotta rethink twice about the thresholds \u0026#x1f61b;\u003c/p\u003e","title":"Nagios: check_snmp again"},{"content":"Well, most of you already know that I\u0026rsquo;m a Nagios fanatic. I like to watch as many aspects as I possibly can. So, yesterday I started figuring out ways to watch our different cluster groups (housing a bunch \u0026ndash; try above 20.000 \u0026ndash; of file shares).\nNow, my first tries failed horribly. I brought down a complete cluster group, resulting in a major annoyance. Now, today I went at it a bit smarter \u0026#x1f61b; I cloned myself two VM\u0026rsquo;s off my Windows Server 2003 Enterprise R2 template, created a new cluster.\nAfter that, I tried it on the test cluster again, same result. The resource is successfully created, but once I try to take it online, it breaks and moves the whole cluster group to the other node (as cyclic moving between the cluster nodes with no end).\nAfter that, I figured something has to be wrong with the command I\u0026rsquo;m trying to use, the one as instructed by the NSClient++ wiki. I then tried the command on the command line, but as soon as hitting (oooold bash habit \u0026#x1f61b; ), it completed the path, but put quotes around it \u0026hellip; Don\u0026rsquo;t ask me.\nIf I try the path without the quotes, no-joy at all. Once you put quotes around it, everything becomes honky-dory and the resource comes online without the slightest trouble!\nHint to self: When creating a NSClient++ cluster resource (or any application resource using a command that needs switches for that matter), use a quoted command line along the lines of this:\n1 \u0026#34;Q:_nsclientnsclient.exe\u0026#34; /test ","permalink":"https://christian.blog.pakiheim.de/posts/2009-02-26_nagios-nsclient-in-a-clustered-environment/","summary":"\u003cp\u003eWell, most of you already know that I\u0026rsquo;m a Nagios fanatic. I like to watch as many aspects as I possibly can. So, yesterday I started figuring out ways to watch our different cluster groups (housing a bunch \u0026ndash; try above 20.000 \u0026ndash; of file shares).\u003c/p\u003e\n\u003cp\u003eNow, my first tries failed horribly. I brought down a complete cluster group, resulting in a major annoyance. Now, today I went at it a bit smarter \u0026#x1f61b; I cloned myself two VM\u0026rsquo;s off my \u003cem\u003eWindows Server 2003 Enterprise R2 template\u003c/em\u003e, created a new cluster.\u003c/p\u003e","title":"Nagios: NSclient++ in a clustered Environment"},{"content":"Well, I just glazed again over my my.cnf for our web-cluster because I just moved a database from one cluster to another and getting quite different performance from it. So, as I expected, there is a slight difference between both configuration files:\n1 2 3 4 5 @@ -55,8 +58,6 @@ innodb_log_group_home_dir = /var/lib/mysql/db innodb_log_file_size = 512M innodb_thread_concurrency = 8 -sync_binlog = 1 And apparently, according to the MySQL Performance Blog that\u0026rsquo;s really, really bad (as well, we\u0026rsquo;re currently running without write caching, as the battery module of the storage is dead).\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-02-23_mysql-beware-of-sync-binlog-on-ext3/","summary":"\u003cp\u003eWell, I just glazed again over my my.cnf for our web-cluster because I just moved a database from one cluster to another and getting quite different performance from it. So, as I expected, there is a slight difference between both configuration files:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e@@\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mi\"\u003e55\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mi\"\u003e8\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003cspan class=\"mi\"\u003e58\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"mi\"\u003e6\u003c/span\u003e \u003cspan class=\"err\"\u003e@@\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003einnodb_log_group_home_dir\u003c/span\u003e       \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"k\"\u003evar\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003elib\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emysql\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edb\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003einnodb_log_file_size\u003c/span\u003e            \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e512\u003c/span\u003e\u003cspan class=\"n\"\u003eM\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003einnodb_thread_concurrency\u003c/span\u003e       \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e8\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003esync_binlog\u003c/span\u003e                     \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAnd apparently, \u003ca href=\"http://www.mysqlperformanceblog.com/2009/01/21/beware-ext3-and-sync-binlog-do-not-play-well-together/\"\u003eaccording to the MySQL Performance Blog\u003c/a\u003e that\u0026rsquo;s really, really bad (as well, we\u0026rsquo;re currently running without write caching, as the battery module of the storage is dead).\u003c/p\u003e","title":"MySQL: Beware of sync_binlog on EXT3"},{"content":"As you might recall from my first article about this topic, I had some troubles with the Microsoft Cluster Services and the registration replication. Now, today as we tried switching the TSM-Server for some resources, we ran into this again.\nWe were using the service install tool (dsmcutil install scheduler) to set the new password as well as the GUI. Now, as we brought the resource online with the local service manager, everything was honky dory. But as soon as we brought it online using the Cluster Manager, it failed horribly. Why ?\nWell, as I read the Microsoft KB the last time, I started remembering something about the replication.\nWhen the resource goes online, the registry keys are updated with the previously checkpointed information. When the resource is brought offline, all the checkpoints associated with this resource are saved. If you manually update these registry keys while the application or service is offline, the changes may not be replicated or may be lost. To prevent this from happening, make any manual changes while the service or application resource is online.\nSimply put, when you toggle the resource offline, the cluster saves the registry from the currently running node onto the quorum (checkpoints). As we changed those settings while the resource was offline, it discarded them, as we toggled it back online with the Cluster Manager.\nSimple solution: just remove the registry replication parameter when the resource is offline (and click \u0026quot; Apply\u0026quot; and \u0026quot; OK\u0026quot; afterwards). After that update the registry on the cluster node currently owning the physical disk drive (either using the GUI or dsmcutil). Afterwards, re-add the registration key and you should be able to \u0026quot; force\u0026quot; the Microsoft Cluster into thinking that the registry you have on this cluster node is the valid one.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-02-16_tivoli-storage-manager-client-and-microsoft-cluster-services-continued/","summary":"\u003cp\u003eAs you might recall \u003ca href=\"/posts/2009-02-16_tivoli-storage-manager-client-and-microsoft-cluster-services-continued\" title=\"Tivoli Storage Manager Client and Microsoft Cluster Services\"\u003efrom my first article about this topic\u003c/a\u003e, I had some troubles with the Microsoft Cluster Services and the registration replication. Now, today as we tried switching the TSM-Server for some resources, we ran into this again.\u003c/p\u003e\n\u003cp\u003eWe were using the service install tool (dsmcutil install scheduler) to set the new password as well as the GUI. Now, as we brought the resource online with the local service manager, everything was honky dory. But as soon as we brought it online using the Cluster Manager, it failed horribly. Why ?\u003c/p\u003e","title":"Tivoli Storage Manager Client and Microsoft Cluster Services (continued)"},{"content":"Yeah, yeah .. I know, it\u0026rsquo;s weekend. But I usually can think much better when no one is rattling my cage. So I had another look at my replication problems.\nDon\u0026rsquo;t you never ever change InnoDB settings when migrating between hardware, because InnoDB is rather sensitive regarding those parameters. When you\u0026rsquo;re setting up the replication (don\u0026rsquo;t ask me why) and copying over the database to the second replication partner, be aware if you\u0026rsquo;re using wild cards you\u0026rsquo;re gonna get seriously bitten in the back. Now, let\u0026rsquo;s look at the constellation.\nmysql-nodes\nAs you can see on the graph above (hah, sometimes Visio is rather useful \u0026#x1f61b; ), we do have two MySQL nodes, each serving as master (as in we\u0026rsquo;re doing \u0026ldquo;normal\u0026rdquo; master-master replication).\nHere\u0026rsquo;s what we\u0026rsquo;re gonna do first:\nSetup the user mysql_repl for mysql%.home.barfoo.org, granting REPLICATION SLAVE. Setup the user mysql_slave for mysql1.home.barfoo.org and mysql2.home.barfoo.org, also granting REPLICATION SLAVE. Afterwards, we\u0026rsquo;re gonna copy the mysql database (either via tar and scp, or just via rssh \u0026ndash; which is rsync via ssh) to both nodes.\n1 2 3 4 5 6 mysql1\u0026gt; GRANT REPLICATION SLAVE ON *.* TO \u0026#39;mysql_slave\u0026#39;@\u0026#39;mysql1.home.barfoo.org\u0026#39; IDENTIFIED BY \u0026#39;hans\u0026#39;; mysql1\u0026gt; GRANT REPLICATION SLAVE ON *.* TO \u0026#39;mysql_slave\u0026#39;@\u0026#39;mysql2.home.barfoo.org\u0026#39; IDENTIFIED BY \u0026#39;hans\u0026#39;; mysql1\u0026gt; GRANT REPLICATION SLAVE ON *.* TO \u0026#39;mysql_repl\u0026#39;@\u0026#39;mysql%.home.barfoo.org\u0026#39; IDENTIFIED BY \u0026#39;hans\u0026#39;; Now, then lets copy the database over to the second node, and start the MySQL daemon there too.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 mysql1\u0026gt; show master statusG; *************************** 1. row *************************** File: binlog.000001 Position: 354 Binlog_Do_DB: Binlog_Ignore_DB: 1 row in set (0.00 sec) ERROR: No query specified mysql2\u0026gt; show master statusG; *************************** 1. row *************************** File: binlog.000005 Position: 354 Binlog_Do_DB: Binlog_Ignore_DB: 1 row in set (0.00 sec) ERROR: No query specified Ok, we need these statements to start the replication.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 mysql1\u0026gt; CHANGE MASTER TO MASTER_HOST=\u0026#34;mysql2.home.barfoo.org\u0026#34;, MASTER_PORT=3306, MASTER_USER=\u0026#34;mysql_slave\u0026#34;, MASTER_PASSWORD=\u0026#39;hans\u0026#39;, MASTER_LOG_FILE=\u0026#39;binlog.000005\u0026#39;, MASTER_LOG_POS=354; mysql1\u0026gt; START SLAVE; mysql1\u0026gt; SHOW SLAVE STATUSG; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: mysql2.home.barfoo.org Master_User: mysql_slave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: binlog.000005 Read_Master_Log_Pos: 354 Relay_Log_File: relay.000002 Relay_Log_Pos: 232 Relay_Master_Log_File: binlog.000005 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 354 Relay_Log_Space: 232 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 1 row in set (0.00 sec) ERROR: No query specified As you can see, the replication started without errors and didn\u0026rsquo;t fail. The log also confirms this:\n1 2 3 4 5 6 090216 9:08:30 [Note] Slave SQL thread initialized, starting replication in log \u0026#39;binlog.000005\u0026#39; at position 354, relay log \u0026#39;/var/lib/mysql/slave3/relay.000001\u0026#39; position: 4 090216 9:08:30 [Note] Slave I/O thread: connected to master \u0026#39;mysql_slave@mysql2.home.barfoo.org:3306\u0026#39;, replication started in log \u0026#39;binlog.000005\u0026#39; at position 354 Now then, let\u0026rsquo;s try using the other replication user.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 mysql1\u0026gt; STOP SLAVE; mysql1\u0026gt; RESET SLAVE; mysql1\u0026gt; CHANGE MASTER TO MASTER_HOST=\u0026#34;mysql2.home.barfoo.org\u0026#34;, MASTER_PORT=3306, MASTER_USER=\u0026#34;mysql_repl\u0026#34;, MASTER_PASSWORD=\u0026#39;hans\u0026#39;, MASTER_LOG_FILE=\u0026#39;binlog.000005\u0026#39;, MASTER_LOG_POS=354; mysql1\u0026gt; START SLAVE; mysql1\u0026gt; SHOW SLAVE STATUSG; *************************** 1. row *************************** Slave_IO_State: Connecting to master Master_Host: mysql2.home.barfoo.org Master_User: mysql_repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: binlog.000001 Read_Master_Log_Pos: 354 Relay_Log_File: relay.000001 Relay_Log_Pos: 98 Relay_Master_Log_File: binlog.000001 Slave_IO_Running: No Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 354 Relay_Log_Space: 98 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULL 1 row in set (0.00 sec) ERROR: No query specified Now, again the log tells us why:\n1 2 3 4 090216 9:30:01 [ERROR] Slave I/O thread: error connecting to master \u0026#39;mysql_repl@mysql2.home.barfoo.org:3306\u0026#39;: Error: \u0026#39;Access denied for user \u0026#39;mysql_repl\u0026#39;@\u0026#39;mysql2.home.barfoo.org\u0026#39; (using password: YES)\u0026#39; errno: 1045 retry-time: 60 retries: 86400 At this point, I don\u0026rsquo;t have the slightest clue, why MySQL is behaving this way. I\u0026rsquo;m completely out of ideas, as to why so I\u0026rsquo;m just gonna do it using what I described in turn #1.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-02-15_mysql-replication-and-hostname-wild-cards/","summary":"\u003cp\u003eYeah, yeah .. I know, it\u0026rsquo;s weekend. But I usually can think much better when no one is rattling my cage. So I had another look at my replication problems.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eDon\u0026rsquo;t you \u003cstrong\u003enever \u003cem\u003eever\u003c/em\u003e\u003c/strong\u003e change InnoDB settings when migrating between hardware,\nbecause InnoDB is rather sensitive regarding those parameters.\u003c/li\u003e\n\u003cli\u003eWhen you\u0026rsquo;re setting up the replication (don\u0026rsquo;t ask me why) and copying over the database to the second replication partner, be aware if you\u0026rsquo;re using wild cards you\u0026rsquo;re gonna get seriously bitten in the back.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eNow, let\u0026rsquo;s look at the constellation.\u003c/p\u003e","title":"MySQL: Replication and hostname wild cards"},{"content":"You know, I\u0026rsquo;m not getting any younger. It\u0026rsquo;s getting harder remembering every damn command \u0026hellip; so here is how you get information out of your EXT3 filesystem:\n1 2 3 4 5 6 7 8 9 10 sles10sp2 ~ [0] \u0026gt; tune2fs -l /dev/sda2 | grep \u0026#34;^Filesystem\u0026#34; Filesystem volume name: \u0026lt;none\u0026gt; Filesystem UUID: 8eec8235-4d9e-4b58-acf9-3c68c977d5ea Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal resize_inode filetype needs_recovery sparse_super large_file Filesystem state: clean Filesystem OS type: Linux Filesystem created: Tue May 27 10:48:56 2008 ","permalink":"https://christian.blog.pakiheim.de/posts/2009-02-13_linux-getting-information-about-an-ext3-filesystem/","summary":"\u003cp\u003eYou know, I\u0026rsquo;m not getting any younger. It\u0026rsquo;s getting harder remembering every damn command \u0026hellip; so here is how you get information out of your EXT3 filesystem:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esles10sp2 ~ [0] \u0026gt; tune2fs -l /dev/sda2 | grep \u0026#34;^Filesystem\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFilesystem volume name:   \u0026lt;none\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFilesystem UUID:          8eec8235-4d9e-4b58-acf9-3c68c977d5ea\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFilesystem magic number:  0xEF53\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFilesystem revision #:    1 (dynamic)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFilesystem features:      has_journal resize_inode filetype\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                          needs_recovery sparse_super large_file\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFilesystem state:         clean\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFilesystem OS type:       Linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFilesystem created:       Tue May 27 10:48:56 2008\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Linux: Getting information about an EXT3 filesystem"},{"content":"For people, who are as click and point-lazy as me, here is how you restart the service without using the service management applet.\n1 2 net stop \u0026#34;NSClientpp (Nagios) 0.3.5.2 2008-09-24 w32\u0026#34; net start \u0026#34;NSClientpp (Nagios) 0.3.5.2 2008-09-24 w32\u0026#34; ","permalink":"https://christian.blog.pakiheim.de/posts/2009-02-11_restarting-the-nsclient-service-without-the-management-applet/","summary":"\u003cp\u003eFor people, who are as click and point-lazy as me, here is how you restart the service without using the service management applet.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enet stop \u0026#34;NSClientpp (Nagios) 0.3.5.2 2008-09-24 w32\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enet start \u0026#34;NSClientpp (Nagios) 0.3.5.2 2008-09-24 w32\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Restarting the NSclient++ service without the management applet"},{"content":"Well, since I had to brood about this (again I might add), I\u0026rsquo;m gonna write it down this time \u0026hellip;\nSetting up the InnoDB raw device isn\u0026rsquo;t that hard, just make sure the device has proper permissions (either add mysql to the disk group or create a udev rule).\n1 KERNEL=\u0026#34;sdb2\u0026#34;, OWNER=\u0026#34;mysql\u0026#34;, GROUP=\u0026#34;mysql\u0026#34; Now after that (and a reboot/udevcontrol reload_rules later), you should be able to initialize the InnoDB device. Yes, the InnoDB device needs initializing.\nWhen you create a new data file, you must put the keyword newraw immediately after the data file size in innodb_data_file_path.\nThe next time you start the server, InnoDB notices the newraw keyword and initializes the new partition.\nAfter that is done, you should be able to start the MySQL service for the first time. It is gonna fail (at least according to the init-script), but ultimatly if you take a closer look at /var/log/mysqld.log it\u0026rsquo;s gonna be successful.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 14:11:07 InnoDB: Setting file /dev/sdb2 size to 50200 MB InnoDB: Database physically writes the file full: wait... InnoDB: Progress in MB: 100 200 300 400 500 600 700 800 900 1000 ... 50200 14:21:26 InnoDB: Log file ib_logfile0 did not exist: new to be created InnoDB: Setting log file /var/lib/mysql/db/ib_logfile0 size to 512 MB InnoDB: Database physically writes the file full: wait... InnoDB: Progress in MB: 100 200 300 400 500 14:21:34 InnoDB: Log file ib_logfile1 did not exist: new to be created InnoDB: Setting log file ib_logfile1 size to 512 MB InnoDB: Database physically writes the file full: wait... InnoDB: Progress in MB: 100 200 300 400 500 InnoDB: Doublewrite buffer not found: creating new InnoDB: Doublewrite buffer created InnoDB: Creating foreign key constraint system tables InnoDB: Foreign key constraint system tables created 14:21:42 InnoDB: Started; log sequence number 0 0 After that, remove the \u0026ldquo;newraw\u0026rdquo; from your /etc/my.cnf. Otherwise, MySQL is gonna reinitialize the volume all over again, as the handbook states.\nHowever, do not create or change any InnoDB tables yet. Otherwise, when you next restart the server, InnoDB reinitializes the partition and your changes are lost.\nAfter InnoDB has initialized the new partition, stop the server, change newraw in the data file specification to raw.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-02-11_mysql-setting-up-an-innodb-raw-device/","summary":"\u003cp\u003eWell, since I had to brood about this (again I might add), I\u0026rsquo;m gonna write it down this time \u0026hellip;\u003c/p\u003e\n\u003cp\u003eSetting up the InnoDB raw device isn\u0026rsquo;t that hard, just make sure the device has proper permissions (either add \u003cem\u003emysql\u003c/em\u003e to the \u003cem\u003edisk\u003c/em\u003e group or create a udev rule).\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eKERNEL=\u0026#34;sdb2\u0026#34;, OWNER=\u0026#34;mysql\u0026#34;, GROUP=\u0026#34;mysql\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eNow after that (and a reboot/udevcontrol reload_rules later), you should be able to initialize the InnoDB device. Yes, the \u003ca href=\"http://dev.mysql.com/doc/refman/5.0/en/innodb-raw-devices.html\"\u003eInnoDB device needs initializing\u003c/a\u003e.\u003c/p\u003e","title":"MySQL: Setting up an InnoDB raw device"},{"content":"Today I ended up working out the details on what we want to monitor regarding our BladeCenter. The most interesting details (for us that is) are these:\nFan speeds for Chassis Cooling/Power Module Cooling Bay(s) Temperature Power Domain utilization It wasn\u0026rsquo;t * that* hard to implement. Only trouble(s) I ran into, were ( 1) IBM did a real shitty job with the MIB\u0026rsquo;s. If you look closely into the mmblade.mib, you\u0026rsquo;re gonna notice, that not a single OID is specified for the events. ( 2) As the MIB\u0026rsquo;s weren\u0026rsquo;t documented anywhere, I had to look them up via snmpwalk (which I had never used before). So as a reminder (to myself), here\u0026rsquo;s how it is done:\n1 snmpwalk -v1 -c public -O n 10.0.0.35 .1.3.6.1.4.1.2.3.51.2.2 This will get you a list, with a lot of output (5154 lines to be exact). Lucky me, the web interface of the management module/ssh interface is rather verbose, so all you need to do is compare those values with what you are looking for.\nSo for myself (and anyone interested) read ahead for the list of checks we are currently running on the management module.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 define command { command_name check_snmpv1 command_line /usr/lib/nagios/plugins/check_snmp -C public -H $HOSTADDRESS$ -o $ARG1$ -w $ARG2$ -c $ARG3$ -l $ARG5$ -u $ARG4$ } define host { use generic-network host_name bc-mgmt1 alias bc-mgmt1.home.barfoo.org address 10.0.0.35 parents uni-greif-05 } define service { use generic-service host_name bc-mgmt1 service_description Temperature check_command check_snmpv1!.1.3.6.1.4.1.2.3.51.2.2.1.5.1.0! 33!38!C!Input temperature action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } define service { use generic-service host_name bc-mgmt1 service_description Chassis Cooling - Bay 1 check_command check_snmpv1!.1.3.6.1.4.1.2.3.51.2.2.3.20.0! 1600:1200,2100:2600!1200:0,2600:3000!RPM! Chassis Cooling - Bay 1 action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } define service { use generic-service host_name bc-mgmt1 service_description Chassis Cooling - Bay 2 check_command check_snmpv1!.1.3.6.1.4.1.2.3.51.2.2.3.21.0! 1600:1200,2100:2600!1200:0,2600:3000!RPM! Chassis Cooling - Bay 2 action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } define service { use generic-service host_name bc-mgmt1 service_description Power Module Cooling - Bay 1 check_command check_snmpv1!.1.3.6.1.4.1.2.3.51.2.2.6.1.1.6.1! 6200:5400,6700:7000!5300:0,7000:7500!RPM! Power Module Cooling - Bay 1 action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } define service { use generic-service host_name bc-mgmt1 service_description Power Module Cooling - Bay 1 Fans check_command check_snmpv1!.1.3.6.1.4.1.2.3.51.2.2.6.1.1.4.1! 2:1!1:0!Fans present! Power Module Cooling - Bay 1 action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } define service { use generic-service host_name bc-mgmt1 service_description Power Module Cooling - Bay 2 check_command check_snmpv1!.1.3.6.1.4.1.2.3.51.2.2.6.1.1.6.2! 6200:5400,6700:7000!5300:0,7000:7500!RPM! Power Module Cooling - Bay 2 action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } define service { use generic-service host_name bc-mgmt1 service_description Power Module Cooling - Bay 2 Fans check_command check_snmpv1!.1.3.6.1.4.1.2.3.51.2.2.6.1.1.4.2! 2:1!1:0!Fans present! Power Module Cooling - Bay 2 action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } define service { use generic-service host_name bc-mgmt1 service_description Power Module Cooling - Bay 3 check_command check_snmpv1!.1.3.6.1.4.1.2.3.51.2.2.6.1.1.6.3! 6200:5400,6700:7000!5300:0,7000:7500!RPM! Power Module Cooling - Bay 3 action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } define service { use generic-service host_name bc-mgmt1 service_description Power Module Cooling - Bay 3 Fans check_command check_snmpv1!.1.3.6.1.4.1.2.3.51.2.2.6.1.1.4.3! 2:1!1:0!Fans present! Power Module Cooling - Bay 3 action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } define service { use generic-service host_name bc-mgmt1 service_description Power Module Cooling - Bay 4 check_command check_snmpv1!.1.3.6.1.4.1.2.3.51.2.2.6.1.1.6.2! 6200:5400,6700:7000!5300:0,7000:7500!RPM! Power Module Cooling - Bay 4 action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } define service { use generic-service host_name bc-mgmt1 service_description Power Module Cooling - Bay 4 Fans check_command check_snmpv1!.1.3.6.1.4.1.2.3.51.2.2.6.1.1.4.2! 2:1!1:0!Fans present! Power Module Cooling - Bay 4 action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } define service { use generic-service host_name bc-mgmt1 service_description Power Domain 1: Utilization check_command check_snmpv1!.1.3.6.1.4.1.2.3.51.2.2.10.1.1.1.10.1! 2600:2400!2880:2600!W! Power Domain 1: Utilization action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } define service { use generic-service host_name bc-mgmt1 service_description Power Domain 2: Utilization check_command check_snmpv1!.1.3.6.1.4.1.2.3.51.2.2.10.1.1.1.10.2! 2600:2400!2880:2600!W! Power Domain 2: Utilization action_url /pnp/index.php?host=$HOSTNAME$\u0026amp;srv=$SERVICEDESC$ notes View PNP RRD grap } ","permalink":"https://christian.blog.pakiheim.de/posts/2009-02-10_monitoring-the-ibm-bladecenter-chassis-with-nagios/","summary":"\u003cp\u003eToday I ended up working out the details on what we want to monitor regarding our BladeCenter. The most interesting details (for us that is) are these:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFan speeds for Chassis Cooling/Power Module Cooling Bay(s)\u003c/li\u003e\n\u003cli\u003eTemperature\u003c/li\u003e\n\u003cli\u003ePower Domain utilization\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIt wasn\u0026rsquo;t * \u003cstrong\u003ethat\u003c/strong\u003e* hard to implement. Only trouble(s) I ran into, were ( \u003cstrong\u003e1\u003c/strong\u003e) IBM did a real shitty job with the \u003ca href=\"http://www-947.ibm.com/systems/support/supportsite.wss/docdisplay?lndocid=MIGR-5078305\u0026amp;brandind=5000020\"\u003eMIB\u0026rsquo;s\u003c/a\u003e. If you look closely into the mmblade.mib, you\u0026rsquo;re gonna notice, that not a single OID is specified for the events. ( \u003cstrong\u003e2\u003c/strong\u003e) As the MIB\u0026rsquo;s weren\u0026rsquo;t documented anywhere, I had to look them up via \u003cem\u003esnmpwalk\u003c/em\u003e (which I had never used before). So as a reminder (to myself), here\u0026rsquo;s how it is done:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esnmpwalk -v1 -c public -O n 10.0.0.35 .1.3.6.1.4.1.2.3.51.2.2\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThis will get you a list, with a lot of output (5154 lines to be exact). Lucky me, the web interface of the management module/ssh interface is rather verbose, so all you need to do is compare those values with what you are looking for.\u003c/p\u003e\n\u003cp\u003eSo for myself (and anyone interested) read ahead for the list of checks we are currently running on the management module.\u003c/p\u003e\n","title":"Monitoring the IBM BladeCenter chassis with Nagios"},{"content":"In our current fight against the BladeCenter switches, we\u0026rsquo;re currently facing the problem that the blades ain\u0026rsquo;t able to send/receive DHCP-traffic.\nSo in order to move forward, we had to use static IP addresses. And since SLES10 ain\u0026rsquo;t straight forward on that, I had to look it up. Now, here\u0026rsquo;s for me (and everyone else tired of searching) how to do it:\n1 2 3 4 5 6 7 8 9 install=http://ftp.barfoo.org/install/SLES10-x64/CD1 netdevice=eth0 hostip=10.0.1.240 netmask=255.255.255.0 gateway=10.0.1.1 nameserver=10.0.1.2 domain=home.barfoo.org insmod=bnx2 splash=verbose ","permalink":"https://christian.blog.pakiheim.de/posts/2009-01-30_installing-sles10-via-network-with-no-dhcp-available/","summary":"\u003cp\u003eIn our current fight against the BladeCenter switches, we\u0026rsquo;re currently facing the problem that the blades ain\u0026rsquo;t able to send/receive DHCP-traffic.\u003c/p\u003e\n\u003cp\u003eSo in order to move forward, we had to use static IP addresses. And since SLES10 ain\u0026rsquo;t straight forward on that, I had to \u003ca href=\"/uploads/2009/01/linuxrc.html\"\u003elook it up\u003c/a\u003e. Now, here\u0026rsquo;s for me (and everyone else tired of searching) how to do it:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e9\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003einstall=http://ftp.barfoo.org/install/SLES10-x64/CD1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  netdevice=eth0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  hostip=10.0.1.240\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  netmask=255.255.255.0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  gateway=10.0.1.1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  nameserver=10.0.1.2\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  domain=home.barfoo.org\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  insmod=bnx2\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  splash=verbose\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Installing SLES10 via network with no DHCP available"},{"content":"Well, we finally had our maintenance window today, in which we planned the hardware exchange for our current Dell Blade Chassis (don\u0026rsquo;t ask!). The exchange went fine, but as we started exploring the components (like the IBM BladeCenter SAN switches \u0026ndash; which are in fact Cisco MDS 9100) we hit a few road blocks.\nFirst, the default user name/password combo for the Cisco MDS 9100 for the BladeCenter is USERID/PASSW0RD (just as the rest of the password combinations).\nNext, we started tinkering around with the Catalyst Switch modules. A hint to myself:\nWhenever setting up the switch via the WebGUI, make sure you setup both passwords. The password for the switch itself (when prompted by the WebGUI, enter \u0026ldquo;admin\u0026rdquo; as well as the password you just entered.\nNow, you should be able to connect to the switch with telnet and be able to access the EXEC mode (and unlike me who struggled ~30 minutes till one of my trainees told me to enter a switch password \u0026ndash; out of curiosity).\nNow, here the list of commands I needed to setup the switch\u0026rsquo;s \u0026ldquo;basics\u0026rdquo;:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 service password-encryption username admin privilege 15 password 0 \u0026lt;password\u0026gt; clock timezone CET 1 clock summer-time CET recurring last Sun Mar 2:00 last Sun Oct 3:00 ip domain-name home.barfoo.org ip name-server 10.0.0.2 ip name-server 10.0.0.1 line con 0 login local line vty 0 4 password \u0026lt;password\u0026gt; login local line vty 5 15 password \u0026lt;password\u0026gt; login ntp server 160.45.10.8 ","permalink":"https://christian.blog.pakiheim.de/posts/2009-01-30_setting-up-the-bladecenter-h/","summary":"\u003cp\u003eWell, we finally had our maintenance window today, in which we planned the hardware exchange for our current Dell Blade Chassis (don\u0026rsquo;t ask!). The exchange went fine, but as we started exploring the components (like the IBM BladeCenter SAN switches \u0026ndash; which are in fact Cisco MDS 9100) we hit a few road blocks.\u003c/p\u003e\n\u003cp\u003eFirst, the default user name/password combo for the Cisco MDS 9100 for the BladeCenter is USERID/PASSW0RD (just as the rest of the password combinations).\u003c/p\u003e","title":"Setting up the BladeCenter H"},{"content":"As I did some switching today (between the new lin_tape version by IBM and our own lin_tape version), I ended up writing those lines a dozen times. Here is (just for me, if you don\u0026rsquo;t care .. skip ahead) on how to generate a list of commands:\n1 2 3 4 5 6 for i in $( seq -w 1 32 ); do token=\u0026#34;${i/0/}\u0026#34; path_prefix=\u0026#34;/dev/lt/IBMtape12245775\u0026#34; echo \u0026#34;DELETE PATH TSM1 VTL1_DR$i SRCTYPE=SERVER DESTTYPE=DRIVE LIBRARY=VTL1\u0026#34; echo \u0026#34;DEFINE PATH TSM1 VTL1_DR$i SRCTYPE=SERVER DESTTYPE=DRIVE LIBRARY=VTL1 DEVICE=$path_prefix$((token+11))A1\u0026#34; done which should get you a list like this:\n1 2 3 4 ... DELETE PATH TSM1 VTL1_DR21 SRCTYPE=SERVER DESTTYPE=DRIVE LIBRARY=VTL1 DEFINE PATH TSM1 VTL1_DR21 SRCTYPE=SERVER DESTTYPE=DRIVE LIBRARY=VTL1 DEVICE=/dev/lt/IBMtape1224577532A1 ... ","permalink":"https://christian.blog.pakiheim.de/posts/2009-01-28_updating-path-information-for-tsm/","summary":"\u003cp\u003eAs I did some switching today (between the new lin_tape version by IBM and our own lin_tape version), I ended up writing those lines a dozen times. Here is (just for me, if you don\u0026rsquo;t care .. skip ahead) on how to generate a list of commands:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e6\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efor i in $( seq -w 1 32 ); do\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  token=\u0026#34;${i/0/}\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  path_prefix=\u0026#34;/dev/lt/IBMtape12245775\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  echo \u0026#34;DELETE PATH TSM1 VTL1_DR$i SRCTYPE=SERVER DESTTYPE=DRIVE LIBRARY=VTL1\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  echo \u0026#34;DEFINE PATH TSM1 VTL1_DR$i SRCTYPE=SERVER DESTTYPE=DRIVE LIBRARY=VTL1 DEVICE=$path_prefix$((token+11))A1\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edone\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003ewhich should get you a list like this:\u003c/p\u003e","title":"Updating path information for TSM"},{"content":"Well, I just stumbled about this again (and I don\u0026rsquo;t know right now whether or not this is documented inside a RedBook or not) today, so I thought maybe I\u0026rsquo;m gonna write it down.\nSlot-Amount Property of a Virtual Tape Library\nPlease keep in mind, when creating the virtual library to think hard about the amount of slots you might need. It ain\u0026rsquo;t that bad, you just can\u0026rsquo;t decrease the amount anymore. So if you think about creating 50 different virtual tape libraries with 500 slots each on your TS7530, think again. The current software level only supports 25.000 slots on a global level.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-01-27_sidenote-amount-of-slots-per-virtual-tape-library/","summary":"\u003cp\u003eWell, I just stumbled about this again (and I don\u0026rsquo;t know right now whether or not this is documented inside a RedBook or not) today, so I thought maybe I\u0026rsquo;m gonna write it down.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2009/01/ve-console-decreasing-slots.png\"\n         alt=\"Slot-Amount Property of a Virtual Tape Library\" width=\"312\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eSlot-Amount Property of a Virtual Tape Library\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003ePlease keep in mind, when creating the virtual library to think hard about the amount of slots you might need. It ain\u0026rsquo;t that bad, you just can\u0026rsquo;t decrease the amount anymore.  So if you think about creating 50 different virtual tape libraries with 500 slots each on your TS7530, think again. The current software level only supports 25.000 slots on a global level.\u003c/p\u003e","title":"Sidenote: Amount of Slots per Virtual Tape Library"},{"content":"Recently, we got the recommendation from our system partner to use static allocated tape cartridges instead of dynamic allocated ones. Apparently using dynamic allocating cartridges comes with a performance penalty if more than a few nodes are backing up a large amount of data at once.\nAnd yet again, I noticed that the IBM Virtualization Engine Console (aka Falconstor Software) is really error prone.\nIn order to change the allocation type, we had to shred the old cartridges first (500 x ~100M up till now), chance the allocation type at the virtual tape library level, and then recreate the 500 cartridges with a fixed size (500x 102400MB). Now, as I was kinda optimistic, I decided to create all 500 cartridges at once.\nFailure during the initiation of 500 virtual catridges\nSo I ended up creating the 500 cartridges in steps of 45. Which isn\u0026rsquo;t that big of a deal. But, as we do have two separate logical virtual tape libraries (basically the whole TS7530 is partitioned into two tape libraries), we had to do it for the second one too. But I told myself \u0026quot; Come on, try the maximum amount again!\u0026quot; \u0026hellip; And guess what:\nSuccessful initiation of 510 virtual catridges\nThat worked \u0026#x2753; Please, don\u0026rsquo;t ask me why the hell it\u0026rsquo;s working for one virtual tape library on the same system (well, different virtualization engine), but ain\u0026rsquo;t for the other one \u0026hellip; \u0026#x1f633;\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-01-27_working-with-ibm-s-virtualization-engine-console/","summary":"\u003cp\u003eRecently, we got the recommendation from our system partner to use static allocated tape cartridges instead of dynamic allocated ones. Apparently using dynamic allocating cartridges comes with a performance penalty if more than a few nodes are backing up a large amount of data at once.\u003c/p\u003e\n\u003cp\u003eAnd yet again, I noticed that the IBM Virtualization Engine Console (aka Falconstor Software) is really error prone.\u003c/p\u003e\n\u003cp\u003eIn order to change the allocation type, we had to shred the old cartridges first (500 x ~100M up till now), chance the allocation type at the virtual tape library level, and then recreate the 500 cartridges with a fixed size (500x 102400MB). Now, as I was kinda optimistic, I decided to create all 500 cartridges at once.\u003c/p\u003e","title":"Working with IBM's Virtualization Engine Console"},{"content":"Well, it\u0026rsquo;s yet again Sunday afternoon. And I had (again I might add) the urge to play around with all the stuff I have at home.\nSo at first, I \u0026ldquo;fixed\u0026rdquo; the ground wire off my NAS box.\nGround wire for the CPU fan\nAfterwards, I went back upstairs. Hooked my Philips up to my notebook and figured I really need a wireless keyboard. Because typing with the Windows on-screen keyboard is a huge pain in the ass (as well as a pain for the mouse-hand)!\nSamsung R70 hooked up to my Philips TFT\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-01-25_sunday-afternoon-playtime/","summary":"\u003cp\u003eWell, it\u0026rsquo;s yet again Sunday afternoon. And I had (again I might add) the urge to play around with all the stuff I have at home.\u003c/p\u003e\n\u003cp\u003eSo at first, I \u0026ldquo;fixed\u0026rdquo; the ground wire off my NAS box.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2009/01/IMG_1643.JPG\"\n         alt=\"Ground wire for the CPU fan\" width=\"430\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eGround wire for the CPU fan\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eAfterwards, I went back upstairs. Hooked my Philips up to my notebook and figured I \u003cem\u003e\u003cstrong\u003ereally\u003c/strong\u003e\u003c/em\u003e need a wireless keyboard. Because typing with the Windows on-screen keyboard is a huge pain in the ass (as well as a pain for the mouse-hand)!\u003c/p\u003e","title":"Sunday afternoon playtime"},{"content":"Just like I announced last week, my binary packages repository is now history. I\u0026rsquo;m gonna remove the redirections from lighttpd and DNS in a few.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-01-25_gentoo-packages-are-gone-now/","summary":"\u003cp\u003eJust like \u003ca href=\"/posts/2014-08-08_packages-barfoo-org-is-going-away\" title=\"packages.barfoo.org is going away\"\u003eI announced last week\u003c/a\u003e, my binary packages repository is now history. I\u0026rsquo;m gonna remove the redirections from lighttpd and DNS in a few.\u003c/p\u003e","title":"Gentoo packages are gone now!"},{"content":"Well, I recently (well, yesterday) built the opsview RPM\u0026rsquo;s for SLES10, and started fiddeling about with it today. Alex \u0026quot; recommended\u0026quot; I should rather look at Opsview instead of Centreon, but boy was there a surprise waiting for me \u0026hellip;\nOpsview has the advantage that it at least lets you use the package manager. But, it also needs a lot of handy work (just like Centreon, which I really dislike since it\u0026rsquo;s real error prone).\nI started doing the setup, but gave up halfway through \u0026hellip; \u0026#x2757; Dude, and they expect people to pay money for training ?!?\nI mean, come on .. you can do a better job at making this thing fit a bit better into the system, and even make the install a bit more straight forward.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-01-24_opsview-installation-reviewed/","summary":"\u003cp\u003eWell, I recently (well, yesterday) built the \u003ca href=\"/posts/2014-08-08_building-opsview-for-suse-linux-enterprise-10\" title=\"Building opsview for SUSE Linux Enterprise 10\"\u003eopsview RPM\u0026rsquo;s for SLES10\u003c/a\u003e, and started fiddeling about with it today. Alex \u0026quot; \u003cem\u003erecommended\u003c/em\u003e\u0026quot; I should rather look at Opsview instead of Centreon, but boy was there a surprise waiting for me \u0026hellip;\u003c/p\u003e\n\u003cp\u003eOpsview has the advantage that it at least lets you use the package manager. But, it also needs \u003cem\u003e\u003cstrong\u003ea lot\u003c/strong\u003e\u003c/em\u003e of handy work (just like Centreon, which I really dislike since it\u0026rsquo;s real error prone).\u003c/p\u003e","title":"Opsview installation reviewed"},{"content":"I had the problem, that the automatic update function of YaST doesn\u0026rsquo;t work like I want it to. I just wanted it to install only those updates, that ain\u0026rsquo;t interactive, don\u0026rsquo;t need a service restart and don\u0026rsquo;t need a reboot.\nYaST does only feature an online update that skips \u0026ldquo;interactive\u0026rdquo; updates (I\u0026rsquo;ve never even encountered an interactive update up till now). So I went ahead and wrote a (hackish) script, that achieves what I need.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 #!/bin/bash TMPDIR=\u0026#34;$( mktemp -d /tmp/autoupdate-XXXXXX )\u0026#34; # Wake up rug rug --quiet ping -a # Get the patchlist from rug rug --terse pch -u | grep \u0026#34;|Needed\u0026#34; | cut -d| -f2 | sed -e \u0026#34;s,sdkp2-,,\u0026#34; -e \u0026#34;s,slesp2-,,\u0026#34; | sort -u \u0026gt; $TMPDIR/patch-list for package in $( \u0026lt; $TMPDIR/patch-list ); do # Get the patch-details rug --terse patch-info slesp2-$package \u0026gt; $TMPDIR/patch-details # Parse those patch-details for \u0026#34;unwanted\u0026#34; interactions is_interactive=\u0026#34;$( cat $TMPDIR/patch-details | grep \u0026#34;^Interactive:\u0026#34; | cut -d \u0026#34; \u0026#34; -f2 )\u0026#34; needs_restart=\u0026#34;$( cat $TMPDIR/patch-details | grep \u0026#34;^Restart Required:\u0026#34; | cut -d \u0026#34; \u0026#34; -f3 )\u0026#34; needs_reboot=\u0026#34;$( cat $TMPDIR/patch-details | grep \u0026#34;^Reboot Required:\u0026#34; | cut -d \u0026#34; \u0026#34; -f3 )\u0026#34; if [ \u0026#34;$is_interactive\u0026#34; == \u0026#34;No\u0026#34; -a \u0026#34;$needs_restart\u0026#34; == \u0026#34;No\u0026#34; -a \u0026#34;$needs_reboot\u0026#34; == \u0026#34;No\u0026#34; ] ; then tmp_package=\u0026#34;$( cat $TMPDIR/patch-details | grep ^atom | cut -d -f2 | sed \u0026#39;:a;N;$!ba;s/n/ /g\u0026#39; )\u0026#34; for i in $tmp_package; do RPM_STATUS=$( rpm -qi $i ) if [ \u0026#34;$RPM_STATUS\u0026#34; != \u0026#34;package $i is not installed\u0026#34; -a \u0026#34;$( rug --terse lu | cut -d| -f4 | grep \u0026#34;$i$\u0026#34; )\u0026#34; ] ; then patch_list=\u0026#34;$patch_list $i\u0026#34; fi done fi done rug --quiet install --no-confirm $patch_list rug --quiet clean-cache trap \u0026#34;rm -rf \u0026#34;$TMPDIR\u0026#34; \u0026gt;/dev/null 2\u0026gt;\u0026amp;1\u0026#34; ERR EXIT INT TERM HUP # vim: set tw=80 ts=2 sw=2 et softtabstop=2 And just for me, the crontag entry:\n1 30 22 * * * root /usr/local/sbin/autoupdate ","permalink":"https://christian.blog.pakiheim.de/posts/2009-01-23_automatic-updates-on-suse-linux-enterprise-10/","summary":"\u003cp\u003eI had the problem, that the automatic update function of YaST doesn\u0026rsquo;t work like I want it to. I just wanted it to install only those updates, that ain\u0026rsquo;t interactive, don\u0026rsquo;t need a service restart and don\u0026rsquo;t need a reboot.\u003c/p\u003e\n\u003cp\u003eYaST does only feature an online update that skips \u0026ldquo;interactive\u0026rdquo; updates (I\u0026rsquo;ve never even encountered an interactive update up till now). So I went ahead and wrote a (hackish) script, that achieves what I need.\u003c/p\u003e","title":"Automatic updates on SUSE Linux Enterprise 10"},{"content":"The other day I had a closer look at the zypper logs (well, I was digging for a time-history of installed packages). First \u0026hellip; damn does zypper produce a lot of logs on a \u0026quot; productive\u0026quot; (or rather on a maintained - as in up-to-date) system.\nBut glazing over the logs, I found out something new about zypper. It actually has an internal list, which only purpose is to identify a trusted vendor \u0026hellip;\n1 2 3 4 5 6 7 8 9 10 [zypp::VendorAttr] VendorAttr.cc(VendorAttr):128 Trusted Vendors: { [zypp::VendorAttr] VendorAttr.cc(VendorAttr):128 ati technologies inc. [zypp::VendorAttr] VendorAttr.cc(VendorAttr):128 jpackage project [zypp::VendorAttr] VendorAttr.cc(VendorAttr):128 novell [zypp::VendorAttr] VendorAttr.cc(VendorAttr):128 nvidia [zypp::VendorAttr] VendorAttr.cc(VendorAttr):128 opensuse [zypp::VendorAttr] VendorAttr.cc(VendorAttr):128 sgi [zypp::VendorAttr] VendorAttr.cc(VendorAttr):128 silicon graphics [zypp::VendorAttr] VendorAttr.cc(VendorAttr):128 suse [zypp::VendorAttr] VendorAttr.cc(VendorAttr):128 } As you can see from the log, the list of trusted vendors is:\nati technologies inc. jpackage project novell nvidia opensuse sgi silicon graphics suse ","permalink":"https://christian.blog.pakiheim.de/posts/2009-01-19_trusted-vendors-in-suse-linux-enteprise-10/","summary":"\u003cp\u003eThe other day I had a closer look at the zypper logs (well, I was digging for a time-history of installed packages). First \u0026hellip; damn does zypper produce a \u003cem\u003e\u003cstrong\u003elot\u003c/strong\u003e\u003c/em\u003e of logs on a \u0026quot; \u003cem\u003eproductive\u003c/em\u003e\u0026quot; (or rather on a \u003cem\u003emaintained\u003c/em\u003e - as in up-to-date) system.\u003c/p\u003e\n\u003cp\u003eBut glazing over the logs, I found out something new about zypper. It actually has an internal list, which only purpose is to identify a trusted vendor \u0026hellip;\u003c/p\u003e","title":"Trusted vendors in SUSE Linux Enteprise 10"},{"content":"Well, I just looked into /tmp on one of our boxes and noticed that SSHd left behind some (try 400) directories .. Now, I could use a simple rm -rf /tmp/ssh-*, but I didn\u0026rsquo;t want to kill my current agent forward file.\nAfter looking at the man-page of find, I stumbled about -mtime. And that seems to work out quite well.\n1 find /tmp -name \u0026#34;ssh-*\u0026#34; -mtime +5 | xargs rm -rf ","permalink":"https://christian.blog.pakiheim.de/posts/2009-01-18_cleaning-up-tmp/","summary":"\u003cp\u003eWell, I just looked into \u003cem\u003e/tmp\u003c/em\u003e on one of our boxes and noticed that SSHd left behind some (try \u003cstrong\u003e400\u003c/strong\u003e) directories .. Now, I could use a simple \u003cem\u003erm -rf /tmp/ssh-*\u003c/em\u003e, but I didn\u0026rsquo;t want to kill my current agent forward file.\u003c/p\u003e\n\u003cp\u003eAfter looking at the man-page of find, I stumbled about \u003cem\u003e\u003cstrong\u003e-mtime\u003c/strong\u003e\u003c/em\u003e. And that seems to work out quite well.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efind /tmp -name \u0026#34;ssh-*\u0026#34; -mtime +5 | xargs rm -rf\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Cleaning up /tmp"},{"content":"Well, I just looked into using ` zypper up ` to update some of our boxen (I do have a script, which holds the boxen it needs to process in a variable and simply goes through them one by one) \u0026ndash; yes, I could activate auto-update, I just don\u0026rsquo;t want that at this point \u0026#x1f609;\nSo at first I tried just using zypper to automatically update that given list, but even if you pass \u0026ndash;no-confirm, zypper would still ask for your confirmation (which seems kinda stupid). After a short while thinking about it, a lesson from solar@gentoo.org came to mind. When working in a chroot, he simply used this:\n1 echo -5 | etc-update And analog to that, I simply tried this:\n1 echo y | zypper up And guess what: it worked \u0026#x1f609;\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-01-17_automating-zypper-updates/","summary":"\u003cp\u003eWell, I just looked into using ` \u003cem\u003ezypper up\u003c/em\u003e ` to update some of our boxen (I do have a script, which holds the boxen it needs to process in a variable and simply goes through them one by one) \u0026ndash; yes, I could activate auto-update, I just don\u0026rsquo;t want that at this point \u0026#x1f609;\u003c/p\u003e\n\u003cp\u003eSo at first I tried just using \u003cem\u003ezypper\u003c/em\u003e to automatically update that given list, but even if you pass \u003cstrong\u003e\u003cem\u003e\u0026ndash;no-confirm\u003c/em\u003e\u003c/strong\u003e, \u003cem\u003ezypper\u003c/em\u003e would still ask for your confirmation (which seems kinda stupid). After a short while thinking about it, a lesson from \u003ca href=\"mailto:solar@gentoo.org\"\u003esolar@gentoo.org\u003c/a\u003e came to mind. When working in a chroot, he simply used this:\u003c/p\u003e","title":"Automating zypper updates"},{"content":"Well, as I am in fact running a german Windows XP, the VI Client started displaying all menus and operations in German when I updated to 2.5u2. Normally, I wouldn\u0026rsquo;t have much of a problem with that, but recently it started to annoy me, since the translation is a bit off from the real meaning of much of the operations.\nSo today, in the morning I started looking for ways to revert the VI Client back to displaying everything in English. And guess what. There\u0026rsquo;s no way to switch the language from the VI Client itself. There\u0026rsquo;s just a workaround.\nSimply rename the folder in \u0026quot; %ProgramFiles%VMwareInfrastructureVirtual Infrastructure Client2.5\u0026quot;, %ProgramFiles%VMwareInfrastructureVIUpdate\u0026quot; \u0026quot; %ProgramFiles%VMwareInfrastructureVirtual Infrastructure ClientPluginsConverter Enterprise 4.0.2\u0026quot; and \u0026quot; %ProgramFiles%VMwareInfrastructureVirtual Infrastructure ClientPluginsUpdate Manager 1.0 Update3\u0026quot; named \u0026quot; de\u0026quot; to something else. Tada, your VI Client is back in English.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-01-14_vi-client-changing-the-language-from-the-system-default/","summary":"\u003cp\u003eWell, as I am in fact running a german Windows XP, the VI Client started displaying all menus and operations in German when I updated to 2.5u2. Normally, I wouldn\u0026rsquo;t have much of a problem with that, but recently it started to annoy me, since the translation is a bit off from the real meaning of much of the operations.\u003c/p\u003e\n\u003cp\u003eSo today, in the morning I started looking for ways to revert the VI Client back to displaying everything in English. And guess what. There\u0026rsquo;s no way to switch the language from the VI Client itself. There\u0026rsquo;s just a \u003ca href=\"http://communities.vmware.com/thread/159090\"\u003eworkaround\u003c/a\u003e.\u003c/p\u003e","title":"VI Client: Changing the language from the system default"},{"content":"Well, I was just a bit curious earlier what distribution might be running on our IBM TS7530 Virtualization engines .. well, I just had a look-see ..\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 vetapeservice@VTL-B:~\u0026gt; cat /etc/SuSE-release SUSE Linux Enterprise Server 10 (x86_64) VERSION = 10 PATCHLEVEL=1 vetapeservice@VTL-B:~\u0026gt; uname -a Linux VTL 2.6.16.46-229-smp #1 Sun Apr 13 05:21:49 UTC 2008 x86_64 GNU/Linux vetapeservice@VTL-B:~\u0026gt; free -m total used free shared buffers cached Mem: 4022 1378 2643 0 342 552 -/+ buffers/cache: 484 3537 Swap: 3815 0 3815 vetapeservice@VTL-B:~\u0026gt; cat /proc/cpuinfo processor : 1 vendor_id : AuthenticAMD cpu family : 15 model : 65 model name : Dual-Core AMD Opteron(tm) Processor 8218 stepping : 3 cpu MHz : 2600.186 cache size : 1024 KB physical id : 0 siblings : 2 core id : 1 cpu cores : 2 Main difference to a \u0026quot; normal\u0026quot; SUSE Linux Enterprise Server 10 installation (there\u0026rsquo;s about zip normal with that kind of installation, thus the quotes) thus far are:\nthe build for the VE uses busybox as init IBM stripped man/info they are running Xorg/Fluxbox on it Just don\u0026rsquo;t ask me why there\u0026rsquo;s a DE ( d esktop e nvironment) running, it ain\u0026rsquo;t even hooked up to a monitor. Only reason would be for the RSA\u0026rsquo; remote monitor stuff \u0026hellip; lala\nAlso, if anyone is interested in a full list of the used devices, that\u0026rsquo;s here:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 vetapeservice@VTL-B:~\u0026gt; hwinfo --short cpu: Dual-Core AMD Opteron(tm) Processor 8218, 2600 MHz Dual-Core AMD Opteron(tm) Processor 8218, 2600 MHz keyboard: /dev/input/event1 IBM RSA2 /dev/ttyS0 serial console mouse: /dev/input/mice IBM RSA2 monitor: Generic Monitor graphics card: IBM ES1000 515E storage: IBM HT1000 Legacy IDE controller IBM ServeRAID 8k/8k-l8 QLogic QLA2432 Fibre Channel Adapter QLogic QLA2432 Fibre Channel Adapter QLogic QLA2432 Fibre Channel Adapter QLogic QLA2432 Fibre Channel Adapter QLogic QLA2432 Fibre Channel Adapter QLogic QLA2432 Fibre Channel Adapter QLogic QLA2432 Fibre Channel Adapter QLogic QLA2432 Fibre Channel Adapter network: eth0 IBM NetXtreme II BCM5708 Gigabit Ethernet eth1 IBM NetXtreme II BCM5708 Gigabit Ethernet network interface: bond0 Ethernet network interface eth0 Ethernet network interface eth1 Ethernet network interface lo Loopback network interface sit0 Network Interface disk: /dev/disk/by-id/scsi-3600a0b80005002be0000048648c66dba IBM 1814 FAStT /dev/disk/by-id/scsi-3600a0b80005002be0000048d48c66e02 IBM 1814 FAStT partition: /dev/disk/by-id/scsi-3600a0b80005002be0000048648c66dba-part1 Partition /dev/disk/by-id/scsi-3600a0b80005002be0000048648c66dba-part2 Partition /dev/disk/by-id/scsi-3600a0b80005002be0000048648c66dba-part3 Partition /dev/disk/by-id/scsi-3600a0b80005002be0000048648c66dba-part4 Partition cdrom: /dev/disk/by-path/pci-0000:00:08.1-ide-0:0 UJDA780 DVD/CDRW usb controller: IBM HT1000 USB Controller IBM HT1000 USB Controller IBM HT1000 USB Controller bios: BIOS bridge: Broadcom HT1000 PCI/PCI-X bridge IBM HT1000 Legacy South Bridge IBM HT1000 LPC Bridge Broadcom PCI bridge Broadcom PCI bridge Broadcom PCI bridge Broadcom PCI bridge Broadcom PCI bridge AMD K8 [Athlon64/Opteron] HyperTransport Technology Configuration AMD K8 [Athlon64/Opteron] Address Map AMD K8 [Athlon64/Opteron] DRAM Controller AMD K8 [Athlon64/Opteron] Miscellaneous Control Broadcom PCI bridge Broadcom PCI bridge Broadcom HT1000 PCI/PCI-X bridge Broadcom PCI bridge Broadcom PCI bridge Broadcom PCI bridge Broadcom PCI bridge Broadcom PCI bridge NEC PCI bridge NEC PCI bridge NEC PCI bridge NEC PCI bridge NEC PCI bridge NEC PCI bridge NEC PCI bridge NEC PCI bridge hub: Linux 2.6.16.46-229-smp ohci_hcd OHCI Host Controller Linux 2.6.16.46-229-smp ohci_hcd OHCI Host Controller Linux 2.6.16.46-229-smp ehci_hcd EHCI Host Controller memory: Main Memory unknown: FPU DMA controller PIC Timer RTC Keyboard controller Hifn Encryption controller Serial controller ","permalink":"https://christian.blog.pakiheim.de/posts/2009-01-09_distribution-running-on-ibm-ts7530-virtualization-engine/","summary":"\u003cp\u003eWell, I was just a bit curious earlier what distribution might be running on our IBM TS7530 Virtualization engines .. well, I just had a look-see ..\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evetapeservice@VTL-B:~\u0026gt; cat /etc/SuSE-release\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSUSE Linux Enterprise Server 10 (x86_64)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eVERSION = 10\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePATCHLEVEL=1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evetapeservice@VTL-B:~\u0026gt; uname -a\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eLinux VTL 2.6.16.46-229-smp #1 Sun Apr 13 05:21:49 UTC 2008 x86_64 GNU/Linux\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evetapeservice@VTL-B:~\u0026gt; free -m\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e             total       used       free     shared    buffers     cached\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eMem:          4022       1378       2643          0        342        552\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-/+ buffers/cache:        484       3537\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSwap:         3815          0       3815\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evetapeservice@VTL-B:~\u0026gt; cat /proc/cpuinfo\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eprocessor       : 1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evendor_id       : AuthenticAMD\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecpu family      : 15\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emodel           : 65\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emodel name      : Dual-Core AMD Opteron(tm) Processor 8218\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003estepping        : 3\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecpu MHz         : 2600.186\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecache size      : 1024 KB\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ephysical id     : 0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esiblings        : 2\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecore id         : 1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecpu cores       : 2\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eMain difference to a \u0026quot; \u003cem\u003enormal\u003c/em\u003e\u0026quot; SUSE Linux Enterprise Server 10 installation (there\u0026rsquo;s about zip normal with that kind of installation, thus the quotes) thus far are:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003ethe build for the VE uses busybox as init\u003c/li\u003e\n\u003cli\u003eIBM stripped man/info\u003c/li\u003e\n\u003cli\u003ethey are running Xorg/Fluxbox on it\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eJust don\u0026rsquo;t ask me why there\u0026rsquo;s a DE ( \u003cstrong\u003ed\u003c/strong\u003e esktop \u003cstrong\u003ee\u003c/strong\u003e nvironment) running, it ain\u0026rsquo;t even hooked up to a monitor. Only reason would be for the RSA\u0026rsquo; remote monitor stuff \u0026hellip; \u003cem\u003e\u003cstrong\u003elala\u003c/strong\u003e\u003c/em\u003e\u003c/p\u003e\n","title":"Distribution running on IBM TS7530 Virtualization Engine"},{"content":"Here’s where I’m at currently with my progress to getting my VMware certifications.\nVMware Certified Professional on Virtual Infrastructure 3.5 - passed in 12/2008 VMware Certified Professional on vSphere 4 - passed in 12/2009 VMware Certified Professional certificate\n","permalink":"https://christian.blog.pakiheim.de/certifications/vmware/","summary":"\u003cp\u003eHere’s where I’m at currently with my progress to getting my VMware certifications.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eVMware Certified Professional on Virtual Infrastructure 3.5 - passed in \u003cstrong\u003e12/2008\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eVMware Certified Professional on vSphere 4 - passed in \u003cstrong\u003e12/2009\u003c/strong\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2009/12/VCP.png\"\n         alt=\"VMware Certified Professional certificate\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eVMware Certified Professional certificate\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e","title":"VMware"},{"content":"Here\u0026rsquo;s where I\u0026rsquo;m at currently with my progress to getting the MCSE - Messaging certification.\nCore exams on networking systems (0/4) Managing and Maintaining a Server 2003 Environment (70-290) - 04/2009 Implementing and Managing a Server 2003 Network Infrastructure (70-291) Planning and Maintaining a Server 2003 Network Infrastructure (70-293) Planning and Maintaining a Server 2003 AD Infrastructure (70-294) Core exams on client operating systems (1/1) Installing, Configuring, and Administering 2000 Professional (70-210) - 09/2003 Design exams (0/1) Designing Security for a Server 2003 Network (70-298) Messaging exams (0/2) Implementing and Managing Exchange Server 2003 (70-284) Designing a Exchange Server 2003 Organization (70-285) ","permalink":"https://christian.blog.pakiheim.de/certifications/microsoft/","summary":"\u003cp\u003eHere\u0026rsquo;s where I\u0026rsquo;m at currently with my progress to getting the \u003ca href=\"http://www.microsoft.com/learning/en/us/certification/mcse.aspx\"\u003eMCSE - Messaging certification\u003c/a\u003e.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eCore exams on networking systems (0/4)\n\u003cul\u003e\n\u003cli\u003eManaging and Maintaining a Server 2003 Environment (\u003ca href=\"http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-290\u0026amp;locale=en-us\"\u003e70-290\u003c/a\u003e) - \u003cstrong\u003e04/2009\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eImplementing and Managing a Server 2003 Network Infrastructure (\u003ca href=\"http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-291\u0026amp;locale=en-us\"\u003e70-291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePlanning and Maintaining a Server 2003 Network Infrastructure (\u003ca href=\"http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-293\u0026amp;locale=en-us\"\u003e70-293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePlanning and Maintaining a Server 2003 AD Infrastructure (\u003ca href=\"http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-294\u0026amp;locale=en-us\"\u003e70-294\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eCore exams on client operating systems (1/1)\n\u003cul\u003e\n\u003cli\u003eInstalling, Configuring, and Administering 2000 Professional (\u003ca href=\"http://www.microsoft.com/learning/en/us/exams/70-210.mspx\"\u003e70-210\u003c/a\u003e) - \u003cstrong\u003e09/2003\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eDesign exams (0/1)\n\u003cul\u003e\n\u003cli\u003eDesigning Security for a Server 2003 Network (\u003ca href=\"http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-298\u0026amp;locale=en-us\"\u003e70-298\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eMessaging exams (0/2)\n\u003cul\u003e\n\u003cli\u003eImplementing and Managing Exchange Server 2003 (\u003ca href=\"http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-284\u0026amp;locale=en-us\"\u003e70-284\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDesigning a Exchange Server 2003 Organization (\u003ca href=\"http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-285\u0026amp;locale=en-us\"\u003e70-285\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ol\u003e","title":"Microsoft"},{"content":"Well, since it\u0026rsquo;s yet another new year (oh, Happy new year! by the way ..), I decided to drop the old crybook and switch over to iNove, which I think looks quite good with a few additions.\nIf anyone finds something that ain\u0026rsquo;t working or looks just wrong, tell me please.\n","permalink":"https://christian.blog.pakiheim.de/posts/2009-01-04_new-theme/","summary":"\u003cp\u003eWell, since it\u0026rsquo;s yet another new year (oh, Happy new year! by the way ..), I decided to drop the old crybook and switch over to iNove, which I think looks quite good with a few additions.\u003c/p\u003e\n\u003cp\u003eIf anyone finds something that ain\u0026rsquo;t working or looks just wrong, tell me please.\u003c/p\u003e","title":"New Theme"},{"content":"Well, at last I\u0026rsquo;m getting somewhere with my troubles. This only seems to be happening when creating an RAID5 multiple device with four disks, this doesn\u0026rsquo;t happen with three.\nNow, the next thing I tried was to create a three disk array, and then adding the fourth disk as spare and then extending the array with that fourth disk. After that, all these errors seem to appear again yuck So I either possess rather faulty disks, or something else is fishy, since I\u0026rsquo;m having another four disk RAID5 array with the old disks \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-12-29_more-md-weirdness/","summary":"\u003cp\u003eWell, at last I\u0026rsquo;m getting somewhere with my troubles. This only seems to be happening when creating an RAID5 multiple device with four disks, this doesn\u0026rsquo;t happen with three.\u003c/p\u003e\n\u003cp\u003eNow, the next thing I tried was to create a three disk array, and then adding the fourth disk as spare and then extending the array with that fourth disk. After that, all these errors seem to appear again \u003cem\u003e\u003cstrong\u003eyuck\u003c/strong\u003e\u003c/em\u003e So I either possess rather faulty disks, or something else is fishy, since I\u0026rsquo;m having another four disk RAID5 array with the old disks \u0026hellip;\u003c/p\u003e","title":"More MD weirdness"},{"content":"Well, I don\u0026rsquo;t think my problem has anything to do with the DawiControl card anymore. I did a little experiment today. I created a 1TiB EXT3 file system on a single drive (one of the new 1TiB drives obviously) and started syncing data over to it (roughly 800MiB).\nNow, then I unmounted the drive(s), ran fsck -C -f /dev/sd${deviceletter}1 and it went through without any trouble. Then I removed the partition and created a 1GiB partition on each drive, which I then used to build a new device mapper RAID5 array (with EXT3 on top \u0026hellip;).\nAnd guess what happened after I copied the data over, unmounted the file system and ran fsck ? Sure, same thing as yesterday. Now, this means either it\u0026rsquo;s a mdadm bug, while creating the array or really MD\u0026rsquo;s fault (which I can rule out, since the same happens on 2.6.25 as well as on 2.6.28) \u0026hellip; \u0026#x1f937;\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-12-29_md-multiple-devices-weirdness/","summary":"\u003cp\u003eWell, I don\u0026rsquo;t think \u003ca href=\"/posts/2014-08-08_sil-3114-barfing\" title=\"SIL 3114 barfing\"\u003emy problem\u003c/a\u003e has anything to do with the DawiControl card anymore. I did a little experiment today. I created a 1TiB EXT3 file system on a single drive (one of the new 1TiB drives obviously) and started syncing data over to it (roughly 800MiB).\u003c/p\u003e\n\u003cp\u003eNow, then I unmounted the drive(s), ran fsck -C -f /dev/sd${deviceletter}1 and it went through without any trouble. Then I removed the partition and created a 1GiB partition on each drive, which I then used to build a new device mapper RAID5 array (with EXT3 on top \u0026hellip;).\u003c/p\u003e","title":"MD (Multiple Devices) weirdness"},{"content":"As I posted earlier, I tried working around some limitations in Microsoft\u0026rsquo;s Active Directory by teaching the script some intelligence.\nBut, since we recently started using Thin Clients, all the stuff I did with the fancy vbs was just a waste-of-time. Turns out, Windows XP Embedded doesn\u0026rsquo;t work quite the same as a \u0026quot; normal\u0026quot; Windows XP (that\u0026rsquo;s where I tested the script on), and it simply dies when running the WMI Query. Bollocks.\nSo I switched back, utilizing a shortcut in Startup, but pointing to the shortened vbs (see below) instead of the ugly batch file someone wrote.\n1 2 3 4 5 Set WshNetwork = CreateObject(\u0026#34;WScript.Network\u0026#34;) WshNetwork.AddWindowsPrinterConnection \u0026#34;\\nas.barfoo.orgKyocera FS-9100DN KX\u0026#34; \u0026#39; Set the default printer to something useful WshNetwork.SetDefaultPrinter \u0026#34;\\nas.barfoo.orgKyocera FS-9120DN KX\u0026#34; But even that doesn\u0026rsquo;t work all the time, I still have to figure out why.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-12-05_vbscript-amp-active-directory-and-printers-continued/","summary":"\u003cp\u003eAs I \u003ca href=\"/posts/2008-12-05_vbscript-amp-active-directory-and-printers-continued\" title=\"VBscript \u0026amp; Active Directory and printers ?\"\u003eposted earlier\u003c/a\u003e, I tried working around some limitations in Microsoft\u0026rsquo;s Active Directory by teaching the script some intelligence.\u003c/p\u003e\n\u003cp\u003eBut, since we recently started using Thin Clients, all the stuff I did with the fancy vbs was just a waste-of-time. Turns out, Windows XP Embedded doesn\u0026rsquo;t work quite the same as a \u0026quot; \u003cem\u003enormal\u003c/em\u003e\u0026quot; Windows XP (that\u0026rsquo;s where I tested the script on), and it simply dies when running the WMI Query. Bollocks.\u003c/p\u003e","title":"VBscript undamp; Active Directory and printers (continued)"},{"content":"Well, we had our TS7530 delivered in late September, the day after the IBM service guys came by to prep the VTL for our needs (IBM sells the thing as black box). Now, since that day; they fought with the Call Home functionality. The trouble was simply, that the Call Home Service running on the Virtualization Engines just didn\u0026rsquo;t start.\nAfter about 6 weeks of trial and error (and the IBM service guys popping in every second week), they finally found the cause of the Call Home Service not being able to start. Domain Name Resolution. Neither the IP addresses of the VE\u0026rsquo;s nor the VE console were registered in our DNS/or local host files.\nAfter I walked over to the networking department and had them register them IP addresses, everything is honky donkey.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-11-22_ibm-ts7530-and-dns/","summary":"\u003cp\u003eWell, we had our TS7530 delivered in late September, the day after the IBM service guys came by to prep the VTL for our needs (IBM sells the thing as black box). Now, since that day; they fought with the Call Home functionality. The trouble was simply, that the Call Home Service running on the Virtualization Engines just didn\u0026rsquo;t start.\u003c/p\u003e\n\u003cp\u003eAfter about 6 weeks of trial and error (and the IBM service guys popping in every second week), they finally found the cause of the Call Home Service not being able to start. Domain Name Resolution. Neither the IP addresses of the VE\u0026rsquo;s nor the VE console were registered in our DNS/or local host files.\u003c/p\u003e","title":"IBM TS7530 and DNS"},{"content":"As some people know, I previously \u0026quot; created\u0026quot; (mostly modified the check_swap plug-in to print RAM usage) check_ram in C. Now one of my problems for the past few months was putting the C plug-in as well as \u0026quot; supported\u0026quot; environment under the same hat. Today I had another look at the amount of available plug-ins in NagiosExchange. There are quite a few plug-ins available, but as I do have some experience with Python, I used the one written in Python.\nIt was rather easy hacking in support for performance data into it, as the below shows. Someone else already posted a non-unified diff for performance data support, but that ain\u0026rsquo;t quite right according to the Nagios plug-in development guidelines.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 --- check_ram.py.orig +++ check_ram.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # # Copyright Hari Sekhon 2007 +# Copyright Christian Heim 2008 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -64,27 +65,30 @@ total_used_megs = float(memtotal-memfree) / 1024 total_free_megs = float(total_free) / 1024 memtotal_megs = float(memtotal) / 1024 + + total_warning_threshold_megs = round(float(memtotal) * float(warning_threshold) / 100 / 1024) + total_critical_threshold_megs = round(float(memtotal) * float(critical_threshold) / 100 / 1024) if percent == True: percentage_free = int( float(total_free) / float(memtotal) * 100 ) if percentage_free \u0026lt; critical_threshold: - print \u0026#34;RAM CRITICAL: %d%% ram free (%d/%d MB used)\u0026#34; % (percentage_free,total_used_megs,memtotal_megs) + print \u0026#34;RAM CRITICAL - %d%% free (%d MB out of %d MB) |ram=%dMB;%d;%d;0;%d\u0026#34; % (percentage_free,total_free_megs,memtotal_megs,total_free_megs,total_warning_threshold_megs,total_critical_threshold_megs,memtotal_megs) return CRITICAL elif percentage_free \u0026lt; warning_threshold: - print \u0026#34;RAM WARNING: %d%% ram free (%d/%d MB used)\u0026#34; % (percentage_free,total_used_megs,memtotal_megs) + print \u0026#34;RAM WARNING - %d%% free (%d MB out of %d MB) |ram=%dMB;%d;%d;0;%d\u0026#34; % (percentage_free,total_free_megs,memtotal_megs,total_free_megs,total_warning_threshold_megs,total_critical_threshold_megs,memtotal_megs) return WARNING else: - print \u0026#34;RAM OK: %d%% ram free\u0026#34; % percentage_free + print \u0026#34;RAM OK - %d%% free (%d MB out of %d MB) |ram=%dMB;%d;%d;0;%d\u0026#34; % (percentage_free,total_free_megs,memtotal_megs,total_free_megs,total_warning_threshold_megs,total_critical_threshold_megs,memtotal_megs) return OK else: if total_free \u0026lt; critical_threshold: - print \u0026#34;RAM CRITICAL: %dMB ram free (%d/%d MB used)\u0026#34; % (total_free_megs,total_used_megs,memtotal_megs) + print \u0026#34;RAM CRITICAL - %d%% free (%d MB out of %d MB) |ram=%dMB;%d;%d;0;%d\u0026#34; % (percentage_free,total_free_megs,memtotal_megs,total_free_megs,total_warning_threshold_megs,total_critical_threshold_megs,memtotal_megs) return CRITICAL if total_free \u0026lt; warning_threshold: - print \u0026#34;RAM WARNING: %dMB ram free (%d/%d MB used)\u0026#34; % (total_free_megs,total_used_megs,memtotal_megs) + print \u0026#34;RAM WARNING - %d%% free (%d MB out of %d MB) |ram=%dMB;%d;%d;0;%d\u0026#34; % (percentage_free,total_free_megs,memtotal_megs,total_free_megs,total_warning_threshold_megs,total_critical_threshold_megs,memtotal_megs) return WARNING else: - print \u0026#34;RAM OK: %dMB ram free\u0026#34; % (total_free_megs) + print \u0026#34;RAM OK - %d%% free (%d MB out of %d MB) |ram=%dMB;%d;%d;0;%d\u0026#34; % (percentage_free,total_free_megs,memtotal_megs,total_free_megs,total_warning_threshold_megs,total_critical_threshold_megs,memtotal_megs) return OK Now, with that simple plug-in I can go ahead and package the thing separately, without the need to figure out a way to get them nagios-plugins to install some useful includes \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-11-14_nagios-and-check-ram-yet-again/","summary":"\u003cp\u003eAs some people know, I previously \u0026quot; \u003cem\u003ecreated\u003c/em\u003e\u0026quot; (mostly modified the check_swap plug-in to print RAM usage) check_ram in C. Now one of my problems for the past few months was putting the C plug-in as well as \u0026quot; \u003cem\u003esupported\u003c/em\u003e\u0026quot; environment under the same hat. Today I had another look at the amount of available plug-ins in \u003ca href=\"http://www.monitoringexchange.org/search?query=check_ram\"\u003eNagiosExchange\u003c/a\u003e. There are quite a few plug-ins available, but as I do have some experience with Python, I used the one \u003ca href=\"http://www.monitoringexchange.org/inventory/Check-Plugins/Operating-Systems/Linux/Check_Ram-on-Linux-32-bit-and-64-bit-systems\"\u003ewritten in Python\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eIt was rather easy hacking in support for performance data into it, as the below shows. Someone else already posted a non-unified diff for performance data support, but that ain\u0026rsquo;t quite right according to the \u003ca href=\"http://nagiosplug.sourceforge.net/developer-guidelines.html#AEN203\"\u003eNagios plug-in development guidelines\u003c/a\u003e.\u003c/p\u003e\n","title":"Nagios and check_ram yet again"},{"content":"Well, when they delivered the VTL about four weeks ago, nobody figured this thing would be such a mess. Apparently IBM hasn\u0026rsquo;t set up that much VTL\u0026rsquo;s with engine failover.\nPoint being, the VE\u0026rsquo;s have eight HBA ports (four inside, four outside the black box). Now, as they configured the VTL, the ports were all in initiator mode. And we needed the fourth port in target mode as well, as it\u0026rsquo;s better to have 4 independent paths to the VTL. The only problem was, the VE console didn\u0026rsquo;t think so.\nThere is no way in hell you can switch the darn HBA port to the target mode. \u0026ndash; Well, IBM just called and told us the solution.\nDisolve the Failover group, reconfigure the HBA port and then recreate the Failover group. Tada \u0026hellip;..\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-10-28_ibm-ts7530-engine-failover-and-hba-mode/","summary":"\u003cp\u003eWell, when they delivered the VTL about four weeks ago, nobody figured this thing would be such a mess. Apparently IBM hasn\u0026rsquo;t set up that much VTL\u0026rsquo;s with engine failover.\u003c/p\u003e\n\u003cp\u003ePoint being, the VE\u0026rsquo;s have eight HBA ports (four inside, four outside the black box). Now, as they configured the VTL, the ports were all in initiator mode. And we needed the fourth port in target mode as well, as it\u0026rsquo;s better to have 4 independent paths to the VTL. The only problem was, the VE console didn\u0026rsquo;t think so.\u003c/p\u003e","title":"IBM TS7530 engine failover and HBA mode"},{"content":"At first, as we prepped the zoning for the VTL, we did it WWN-based. Now the trouble with the HBA\u0026rsquo;s of the VTL is simply that it has different WWPN\u0026rsquo;s on the same WWN. And WWN-based zoning simply doesn\u0026rsquo;t allow access to that.\nSo off we went and switched to Switchport-based zoning, and see. It just works \u0026#x1f937;\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-10-27_ibm-ts7530-zoning/","summary":"\u003cp\u003eAt first, as we prepped the zoning for the VTL, we did it WWN-based. Now the trouble with the HBA\u0026rsquo;s of the VTL is simply that it has different WWPN\u0026rsquo;s on the same WWN. And WWN-based zoning simply doesn\u0026rsquo;t allow access to that.\u003c/p\u003e\n\u003cp\u003eSo off we went and switched to Switchport-based zoning, and see. It just works \u0026#x1f937;\u003c/p\u003e","title":"IBM TS7530 zoning"},{"content":"I just had another look at what I wrote the week before last (you know, being home-sick/on vacation has it\u0026rsquo;s advantages) and additionally read up on \u0026quot; OPTIMIZE TABLE\u0026quot; again. The comments in the manual mention \u0026quot; SHOW TABLE STATUS\u0026quot;, which gives you a complete list, but it doesn\u0026rsquo;t allow you to filter certain kinds of things out (like I only wanted to see MyISAM tables in the list, I only wanted database and table).\nSo I went ahead and looked around in MySQL\u0026rsquo;s own databases and if you look closely at information_schema, it\u0026rsquo;s got a list of all databases/tables with an additional pointer whether or not databases are fragmented, the row Data_free. I only found this, because I looked at how the mysqltuner figured whether or not you have fragmented tables.\nSo, without further ado, here\u0026rsquo;s the final script I\u0026rsquo;m gonna torture for the next week:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #!/bin/bash # Get a list of all fragmented tables FRAGMENTED_TABLES=\u0026#34;$( mysql -e \u0026#39;use information_schema; SELECT TABLE_SCHEMA,TABLE_NAME FROM TABLES WHERE TABLE_SCHEMA NOT IN (\u0026#34;information_schema\u0026#34;,\u0026#34;mysql\u0026#34;) AND Data_free \u0026gt; 0\u0026#39; | grep -v \u0026#34;^+\u0026#34; | sed \u0026#34;s,t,.,\u0026#34; )\u0026#34; for fragment in $FRAGMENTED_TABLES; do database=\u0026#34;$( echo $fragment | cut -d. -f1 )\u0026#34; table=\u0026#34;$( echo $fragment | cut -d. -f2 )\u0026#34; [ $fragment != \u0026#34;TABLE_SCHEMA.TABLE_NAME\u0026#34; ] \u0026amp;\u0026amp; mysql -e \u0026#34;USE $database; OPTIMIZE TABLE $table;\u0026#34; \u0026gt; /dev/null 2\u0026gt;\u0026amp;1 done # vim: set tw=80 ts=2 st=2 et : I know it ain\u0026rsquo;t completely bullet proof and it sure as hell isn\u0026rsquo;t neat, but I think it does the job. Also, if you don\u0026rsquo;t want to paste it, here\u0026rsquo;s the file download.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-10-16_defragmenting-all-fragmented-myisam-tables/","summary":"\u003cp\u003eI just had another look at what I wrote the week before last (you know, being home-sick/on vacation has it\u0026rsquo;s advantages) and additionally read up on \u0026quot; \u003cem\u003e\u003ca href=\"http://dev.mysql.com/doc/refman/5.0/en/optimize-table.html\"\u003eOPTIMIZE TABLE\u003c/a\u003e\u003c/em\u003e\u0026quot; again. The comments in the manual mention \u0026quot; \u003cem\u003e\u003ca href=\"http://dev.mysql.com/doc/refman/5.0/en/show-table-status.html\"\u003eSHOW TABLE STATUS\u003c/a\u003e\u003c/em\u003e\u0026quot;, which gives you a complete list, but it doesn\u0026rsquo;t allow you to filter certain kinds of things out (like I only wanted to see MyISAM tables in the list, I only wanted database and table).\u003c/p\u003e","title":"Defragmenting all fragmented MyISAM tables"},{"content":"Well, today I had a rather weird error. I was testing the adapter bonding on one of the boxen designated as Tivoli Storage Manager Server, when I noticed that the bonding wasn\u0026rsquo;t working as expected when simulating an error (that is unplugging one of the TP cables for the bond).\nNow, the bond had \u0026ldquo;mode=6 miimon=100\u0026rdquo; as options. After running \u0026ldquo;linux bond debug\u0026rdquo; through Google (which turned up nothing useful, besides one document on the Oracle Wiki about IOS/Linux adapter teaming), I figured \u0026ldquo;Hey, just lets test switching the arguments.\u0026rdquo; And guess what ?\nAfterwards, it just works when you unplug one of the cables of the bond, while it didn\u0026rsquo;t work before \u0026hellip; \u0026#x1f937;\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-10-16_adapter-bonding-on-linux/","summary":"\u003cp\u003eWell, today I had a rather weird error. I was testing the adapter bonding on one of the boxen designated as Tivoli Storage Manager Server, when I noticed that the bonding wasn\u0026rsquo;t working as expected when simulating an error (that is unplugging one of the TP cables for the bond).\u003c/p\u003e\n\u003cp\u003eNow, the bond had \u0026ldquo;mode=6 miimon=100\u0026rdquo; as options. After running \u0026ldquo;linux bond debug\u0026rdquo; through Google (which turned up nothing useful, besides one document on the Oracle Wiki about IOS/Linux adapter teaming), I figured \u0026ldquo;Hey, just lets test switching the arguments.\u0026rdquo; And guess what ?\u003c/p\u003e","title":"Adapter bonding on Linux"},{"content":"Well, once you thought you don\u0026rsquo;t have any more problems, another one just pops up. I\u0026rsquo;m currently bashing my head against the wall, why the hell the forwarded (or is it redirected ?) drives are not shown in the in the \u0026ldquo;My Computer\u0026rdquo; explorer view. I pretty sure have an idea why (basically, HKEY_CURRENT_USERS\\Software\\Classes isn\u0026rsquo;t writeable, but that\u0026rsquo;s where Windows, or rather the Terminal Services \u0026ndash; or whatever is creating the associations), just don\u0026rsquo;t know a clever way around/by it.\nIt\u0026rsquo;s basically a dead end. The user has no access to that particular subkey, and I can\u0026rsquo;t change the permissions by changing it in ntuser.dat apparently. Neither do the inherited permissions apply, so I\u0026rsquo;m basically stuck. \u0026#x1f979;\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-10-15_windows-server-2003-terminal-services/","summary":"\u003cp\u003eWell, once you thought you don\u0026rsquo;t have any more problems, another one just pops up. I\u0026rsquo;m currently bashing my head against the wall, why the hell the forwarded (or is it redirected ?) drives are not shown in the in the \u0026ldquo;My Computer\u0026rdquo; explorer view. I pretty sure have an idea why (basically, \u003ccode\u003eHKEY_CURRENT_USERS\\Software\\Classes\u003c/code\u003e isn\u0026rsquo;t writeable, but that\u0026rsquo;s where Windows, or rather the Terminal Services \u0026ndash; or whatever is creating the associations), just don\u0026rsquo;t know a clever way around/by it.\u003c/p\u003e","title":"Windows Server 2003 Terminal services"},{"content":"Well, initially I thought writing the OCF resource agent for Tivoli Storage Manager was the hard part. But as it turns out, it really ain\u0026rsquo;t. The hard part, is getting the resources into the heartbeat agent (or whatever you wanna call it). The worst part about it, is that the hb_gui is completely worthless if you want to do a configuration without quorum.\nFirst of all, we need to setup the main Linux-HA configuration file ( /etc/ha.d/ha.cf). Configuring that, is rather simple. For me, as I do have two network devices, over which both nodes see each other (one is an adapter bond of comprising of two simple, plain, old 1G copper ports; the other is the 1G fibre cluster port), the configuration looks like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 udpport 694 autojoin none crm true use_logd on debug false coredumps false auto_failback on ucast bond0 10.0.0.10 ucast bond0 10.0.0.20 ucast eth2 10.0.0.29 ucast eth2 10.0.0.30 node tsm1 node tsm2 respawn root /usr/lib64/heartbeat/pingd -m 100 -d 5s ping 10.0.0.1 respawn root /sbin/evmsd apiauth evms uid=hacluster,root After configuring the service itself is done, one just needs to start the heartbeat daemon on both nodes. Afterwards, we should be able to configure the cluster resources.\nI find it particularly easier to just update the corresponding sections with cibadmin (the man-page really has some good examples). So here are my configuration files for two resource groups ( crm_mon doesn\u0026rsquo;t difference between resources and grouped resources, it\u0026rsquo;ll just show you that you configured two resources).\ncrm_config.xml:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 \u0026lt;cluster_property_set id=\u0026#34;cib-bootstrap-options\u0026#34;\u0026gt; \u0026lt;attributes\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-symmetric-cluster\u0026#34; name=\u0026#34;symmetric-cluster\u0026#34; value=\u0026#34;true\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-no-quorum-policy\u0026#34; name=\u0026#34;no-quorum-policy\u0026#34; value=\u0026#34;stop\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-default-resource-stickiness\u0026#34; name=\u0026#34;default-resource-stickiness\u0026#34; value=\u0026#34;0\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-default-resource-failure-stickiness\u0026#34; name=\u0026#34;default-resource-failure-stickiness\u0026#34; value=\u0026#34;0\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-stonith-enabled\u0026#34; name=\u0026#34;stonith-enabled\u0026#34; value=\u0026#34;false\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-stonith-action\u0026#34; name=\u0026#34;stonith-action\u0026#34; value=\u0026#34;reboot\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-startup-fencing\u0026#34; name=\u0026#34;startup-fencing\u0026#34; value=\u0026#34;true\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-stop-orphan-resources\u0026#34; name=\u0026#34;stop-orphan-resources\u0026#34; value=\u0026#34;true\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-stop-orphan-actions\u0026#34; name=\u0026#34;stop-orphan-actions\u0026#34; value=\u0026#34;true\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-remove-after-stop\u0026#34; name=\u0026#34;remove-after-stop\u0026#34; value=\u0026#34;false\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-short-resource-names\u0026#34; name=\u0026#34;short-resource-names\u0026#34; value=\u0026#34;true\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-transition-idle-timeout\u0026#34; name=\u0026#34;transition-idle-timeout\u0026#34; value=\u0026#34;5min\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-default-action-timeout\u0026#34; name=\u0026#34;default-action-timeout\u0026#34; value=\u0026#34;20s\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-is-managed-default\u0026#34; name=\u0026#34;is-managed-default\u0026#34; value=\u0026#34;true\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-cluster-delay\u0026#34; name=\u0026#34;cluster-delay\u0026#34; value=\u0026#34;60s\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-pe-error-series-max\u0026#34; name=\u0026#34;pe-error-series-max\u0026#34; value=\u0026#34;-1\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-pe-warn-series-max\u0026#34; name=\u0026#34;pe-warn-series-max\u0026#34; value=\u0026#34;-1\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;cib-bootstrap-options-pe-input-series-max\u0026#34; name=\u0026#34;pe-input-series-max\u0026#34; value=\u0026#34;-1\u0026#34;/\u0026gt; \u0026lt;/attributes\u0026gt; \u0026lt;/cluster_property_set\u0026gt; This section is created by heartbeat on the first startup, so you don\u0026rsquo;t have to mess with it unless you want to tweak it. resources.xml:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 \u0026lt;group id=\u0026#34;tsm1_group\u0026#34;\u0026gt; \u0026lt;primitive class=\u0026#34;ocf\u0026#34; id=\u0026#34;10.0.0.70\u0026#34; provider=\u0026#34;heartbeat\u0026#34; type=\u0026#34;IPaddr2\u0026#34;\u0026gt; \u0026lt;operations\u0026gt; \u0026lt;op id=\u0026#34;ip_tsm1_mon\u0026#34; interval=\u0026#34;5s\u0026#34; name=\u0026#34;monitor\u0026#34; timeout=\u0026#34;5s\u0026#34;/\u0026gt; \u0026lt;/operations\u0026gt; \u0026lt;instance_attributes id=\u0026#34;ip_tsm1_inst_attr\u0026#34;\u0026gt; \u0026lt;attributes\u0026gt; \u0026lt;nvpair id=\u0026#34;ip_tsm1\u0026#34; name=\u0026#34;ip\u0026#34; value=\u0026#34;10.0.0.70\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;ip_tsm1_bcast\u0026#34; name=\u0026#34;broadcast\u0026#34; value=\u0026#34;10.0.0.255\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;ip_tsm1_device\u0026#34; name=\u0026#34;nic\u0026#34; value=\u0026#34;eth0\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;ip_tsm1_netmask\u0026#34; name=\u0026#34;cidr_netmask\u0026#34; value=\u0026#34;24\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;ip_tsm1_label\u0026#34; name=\u0026#34;iflabel\u0026#34; value=\u0026#34;tsm1\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;ip_tsm1_status\u0026#34; name=\u0026#34;target_role\u0026#34; value=\u0026#34;started\u0026#34;/\u0026gt; \u0026lt;/attributes\u0026gt; \u0026lt;/instance_attributes\u0026gt; \u0026lt;/primitive\u0026gt; \u0026lt;primitive class=\u0026#34;ocf\u0026#34; id=\u0026#34;/tsm/TSM1\u0026#34; provider=\u0026#34;heartbeat\u0026#34; type=\u0026#34;Filesystem\u0026#34;\u0026gt; \u0026lt;operations\u0026gt; \u0026lt;op id=\u0026#34;fs_1_tsm1_mon\u0026#34; interval=\u0026#34;5s\u0026#34; name=\u0026#34;monitor\u0026#34; timeout=\u0026#34;5s\u0026#34;/\u0026gt; \u0026lt;/operations\u0026gt; \u0026lt;instance_attributes id=\u0026#34;fs_1_tsm1_inst_attr\u0026#34;\u0026gt; \u0026lt;attributes\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_1_tsm1_dev\u0026#34; name=\u0026#34;device\u0026#34; value=\u0026#34;/dev/tsm1_server_dir\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_1_tsm1_mountpoint\u0026#34; name=\u0026#34;directory\u0026#34; value=\u0026#34;/tsm/TSM1\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_1_tsm1_fstype\u0026#34; name=\u0026#34;fstype\u0026#34; value=\u0026#34;ext3\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_1_tsm1_status\u0026#34; name=\u0026#34;target_role\u0026#34; value=\u0026#34;started\u0026#34;/\u0026gt; \u0026lt;/attributes\u0026gt; \u0026lt;/instance_attributes\u0026gt; \u0026lt;/primitive\u0026gt; \u0026lt;primitive class=\u0026#34;ocf\u0026#34; id=\u0026#34;/tsm/TSM1/db\u0026#34; provider=\u0026#34;heartbeat\u0026#34; type=\u0026#34;Filesystem\u0026#34;\u0026gt; \u0026lt;operations\u0026gt; \u0026lt;op id=\u0026#34;fs_2_tsm1_mon\u0026#34; interval=\u0026#34;5s\u0026#34; name=\u0026#34;monitor\u0026#34; timeout=\u0026#34;5s\u0026#34;/\u0026gt; \u0026lt;/operations\u0026gt; \u0026lt;instance_attributes id=\u0026#34;fs_2_tsm1_inst_attr\u0026#34;\u0026gt; \u0026lt;attributes\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_2_tsm1_dev\u0026#34; name=\u0026#34;device\u0026#34; value=\u0026#34;/dev/tsm1_db\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_2_tsm1_mountpoint\u0026#34; name=\u0026#34;directory\u0026#34; value=\u0026#34;/tsm/TSM1/db\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_2_tsm1_fstype\u0026#34; name=\u0026#34;fstype\u0026#34; value=\u0026#34;ext2\u0026#34;/\u0026gt; \u0026lt;/attributes\u0026gt; \u0026lt;/instance_attributes\u0026gt; \u0026lt;/primitive\u0026gt; \u0026lt;primitive class=\u0026#34;ocf\u0026#34; id=\u0026#34;/tsm/TSM1/db_mirror\u0026#34; provider=\u0026#34;heartbeat\u0026#34; type=\u0026#34;Filesystem\u0026#34;\u0026gt; \u0026lt;operations\u0026gt; \u0026lt;op id=\u0026#34;fs_3_tsm1_mon\u0026#34; interval=\u0026#34;5s\u0026#34; name=\u0026#34;monitor\u0026#34; timeout=\u0026#34;5s\u0026#34;/\u0026gt; \u0026lt;/operations\u0026gt; \u0026lt;instance_attributes id=\u0026#34;fs_3_tsm1_inst_attr\u0026#34;\u0026gt; \u0026lt;attributes\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_3_tsm1_dev\u0026#34; name=\u0026#34;device\u0026#34; value=\u0026#34;/dev/tsm1_db_mirror\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_3_tsm1_mountpoint\u0026#34; name=\u0026#34;directory\u0026#34; value=\u0026#34;/tsm/TSM1/db_mirror\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_3_tsm1_fstype\u0026#34; name=\u0026#34;fstype\u0026#34; value=\u0026#34;ext2\u0026#34;/\u0026gt; \u0026lt;/attributes\u0026gt; \u0026lt;/instance_attributes\u0026gt; \u0026lt;/primitive\u0026gt; \u0026lt;primitive class=\u0026#34;ocf\u0026#34; id=\u0026#34;/tsm/TSM1/log\u0026#34; provider=\u0026#34;heartbeat\u0026#34; type=\u0026#34;Filesystem\u0026#34;\u0026gt; \u0026lt;operations\u0026gt; \u0026lt;op id=\u0026#34;fs_4_tsm1_mon\u0026#34; interval=\u0026#34;5s\u0026#34; name=\u0026#34;monitor\u0026#34; timeout=\u0026#34;5s\u0026#34;/\u0026gt; \u0026lt;/operations\u0026gt; \u0026lt;instance_attributes id=\u0026#34;fs_4_tsm1_inst_attr\u0026#34;\u0026gt; \u0026lt;attributes\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_4_tsm1_dev\u0026#34; name=\u0026#34;device\u0026#34; value=\u0026#34;/dev/tsm1_log\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_4_tsm1_mountpoint\u0026#34; name=\u0026#34;directory\u0026#34; value=\u0026#34;/tsm/TSM1/log\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_4_tsm1_fstype\u0026#34; name=\u0026#34;fstype\u0026#34; value=\u0026#34;ext2\u0026#34;/\u0026gt; \u0026lt;/attributes\u0026gt; \u0026lt;/instance_attributes\u0026gt; \u0026lt;/primitive\u0026gt; \u0026lt;primitive class=\u0026#34;ocf\u0026#34; id=\u0026#34;/tsm/TSM1/log_mirror\u0026#34; provider=\u0026#34;heartbeat\u0026#34; type=\u0026#34;Filesystem\u0026#34;\u0026gt; \u0026lt;operations\u0026gt; \u0026lt;op id=\u0026#34;fs_5_tsm1_mon\u0026#34; interval=\u0026#34;5s\u0026#34; name=\u0026#34;monitor\u0026#34; timeout=\u0026#34;5s\u0026#34;/\u0026gt; \u0026lt;/operations\u0026gt; \u0026lt;instance_attributes id=\u0026#34;fs_5_tsm1_inst_attr\u0026#34;\u0026gt; \u0026lt;attributes\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_5_tsm1_dev\u0026#34; name=\u0026#34;device\u0026#34; value=\u0026#34;/dev/tsm1_log_mirror\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_5_tsm1_mountpoint\u0026#34; name=\u0026#34;directory\u0026#34; value=\u0026#34;/tsm/TSM1/log_mirror\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_5_tsm1_fstype\u0026#34; name=\u0026#34;fstype\u0026#34; value=\u0026#34;ext2\u0026#34;/\u0026gt; \u0026lt;/attributes\u0026gt; \u0026lt;/instance_attributes\u0026gt; \u0026lt;/primitive\u0026gt; \u0026lt;primitive class=\u0026#34;ocf\u0026#34; id=\u0026#34;TSM1: dsmserv\u0026#34; provider=\u0026#34;heartbeat\u0026#34; type=\u0026#34;dsmserv\u0026#34;\u0026gt; \u0026lt;operations\u0026gt; \u0026lt;op id=\u0026#34;dsmserv_tsm1_mon\u0026#34; interval=\u0026#34;5s\u0026#34; name=\u0026#34;monitor\u0026#34; timeout=\u0026#34;5s\u0026#34;/\u0026gt; \u0026lt;/operations\u0026gt; \u0026lt;instance_attributes id=\u0026#34;dsmserv_tsm1_inst_attr\u0026#34;\u0026gt; \u0026lt;attributes\u0026gt; \u0026lt;nvpair id=\u0026#34;dsmserv_tsm1_status\u0026#34; name=\u0026#34;target_role\u0026#34; value=\u0026#34;started\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;dsmserv_tsm1_prefix\u0026#34; name=\u0026#34;prefix\u0026#34; value=\u0026#34;/tsm\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;dsmserv_tsm1_instance\u0026#34; name=\u0026#34;instance\u0026#34; value=\u0026#34;TSM1\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;dsmserv_tsm1_userid\u0026#34; name=\u0026#34;id\u0026#34; value=\u0026#34;ha_client\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;dsmserv_tsm1_password\u0026#34; name=\u0026#34;password\u0026#34; value=\u0026#34;ha_client\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;dsmserv_tsm1_tcpaddress\u0026#34; name=\u0026#34;TCPAddress\u0026#34; value=\u0026#34;10.0.0.70\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;dsmserv_tsm1_tcpport\u0026#34; name=\u0026#34;TCPPort\u0026#34; value=\u0026#34;1500\u0026#34;/\u0026gt; \u0026lt;/attributes\u0026gt; \u0026lt;/instance_attributes\u0026gt; \u0026lt;/primitive\u0026gt; \u0026lt;/group\u0026gt; \u0026lt;group id=\u0026#34;tsm2_group\u0026#34;\u0026gt; \u0026lt;primitive class=\u0026#34;ocf\u0026#34; id=\u0026#34;10.0.0.80\u0026#34; provider=\u0026#34;heartbeat\u0026#34; type=\u0026#34;IPaddr2\u0026#34;\u0026gt; \u0026lt;operations\u0026gt; \u0026lt;op id=\u0026#34;ip_tsm2_mon\u0026#34; interval=\u0026#34;5s\u0026#34; name=\u0026#34;monitor\u0026#34; timeout=\u0026#34;5s\u0026#34;/\u0026gt; \u0026lt;/operations\u0026gt; \u0026lt;instance_attributes id=\u0026#34;ip_tsm2_inst_attr\u0026#34;\u0026gt; \u0026lt;attributes\u0026gt; \u0026lt;nvpair id=\u0026#34;ip_tsm2\u0026#34; name=\u0026#34;ip\u0026#34; value=\u0026#34;10.0.0.80\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;ip_tsm2_bcast\u0026#34; name=\u0026#34;broadcast\u0026#34; value=\u0026#34;10.0.0.255\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;ip_tsm2_device\u0026#34; name=\u0026#34;nic\u0026#34; value=\u0026#34;eth0\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;ip_tsm2_netmask\u0026#34; name=\u0026#34;cidr_netmask\u0026#34; value=\u0026#34;24\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;ip_tsm2_label\u0026#34; name=\u0026#34;iflabel\u0026#34; value=\u0026#34;tsm2\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;ip_tsm2_status\u0026#34; name=\u0026#34;target_role\u0026#34; value=\u0026#34;started\u0026#34;/\u0026gt; \u0026lt;/attributes\u0026gt; \u0026lt;/instance_attributes\u0026gt; \u0026lt;/primitive\u0026gt; \u0026lt;primitive class=\u0026#34;ocf\u0026#34; id=\u0026#34;/tsm/TSM2\u0026#34; provider=\u0026#34;heartbeat\u0026#34; type=\u0026#34;Filesystem\u0026#34;\u0026gt; \u0026lt;operations\u0026gt; \u0026lt;op id=\u0026#34;fs_1_tsm2_mon\u0026#34; interval=\u0026#34;5s\u0026#34; name=\u0026#34;monitor\u0026#34; timeout=\u0026#34;5s\u0026#34;/\u0026gt; \u0026lt;/operations\u0026gt; \u0026lt;instance_attributes id=\u0026#34;fs_1_tsm2_inst_attr\u0026#34;\u0026gt; \u0026lt;attributes\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_1_tsm2_dev\u0026#34; name=\u0026#34;device\u0026#34; value=\u0026#34;/dev/tsm2_server_dir\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_1_tsm2_mountpoint\u0026#34; name=\u0026#34;directory\u0026#34; value=\u0026#34;/tsm/TSM2\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_1_tsm2_fstype\u0026#34; name=\u0026#34;fstype\u0026#34; value=\u0026#34;ext3\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_1_tsm2_status\u0026#34; name=\u0026#34;target_role\u0026#34; value=\u0026#34;started\u0026#34;/\u0026gt; \u0026lt;/attributes\u0026gt; \u0026lt;/instance_attributes\u0026gt; \u0026lt;/primitive\u0026gt; \u0026lt;primitive class=\u0026#34;ocf\u0026#34; id=\u0026#34;/tsm/TSM2/db\u0026#34; provider=\u0026#34;heartbeat\u0026#34; type=\u0026#34;Filesystem\u0026#34;\u0026gt; \u0026lt;operations\u0026gt; \u0026lt;op id=\u0026#34;fs_2_tsm2_mon\u0026#34; interval=\u0026#34;5s\u0026#34; name=\u0026#34;monitor\u0026#34; timeout=\u0026#34;5s\u0026#34;/\u0026gt; \u0026lt;/operations\u0026gt; \u0026lt;instance_attributes id=\u0026#34;fs_2_tsm2_inst_attr\u0026#34;\u0026gt; \u0026lt;attributes\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_2_tsm2_dev\u0026#34; name=\u0026#34;device\u0026#34; value=\u0026#34;/dev/tsm2_db\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_2_tsm2_mountpoint\u0026#34; name=\u0026#34;directory\u0026#34; value=\u0026#34;/tsm/TSM2/db\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_2_tsm2_fstype\u0026#34; name=\u0026#34;fstype\u0026#34; value=\u0026#34;ext2\u0026#34;/\u0026gt; \u0026lt;/attributes\u0026gt; \u0026lt;/instance_attributes\u0026gt; \u0026lt;/primitive\u0026gt; \u0026lt;primitive class=\u0026#34;ocf\u0026#34; id=\u0026#34;/tsm/TSM2/db_mirror\u0026#34; provider=\u0026#34;heartbeat\u0026#34; type=\u0026#34;Filesystem\u0026#34;\u0026gt; \u0026lt;operations\u0026gt; \u0026lt;op id=\u0026#34;fs_3_tsm2_mon\u0026#34; interval=\u0026#34;5s\u0026#34; name=\u0026#34;monitor\u0026#34; timeout=\u0026#34;5s\u0026#34;/\u0026gt; \u0026lt;/operations\u0026gt; \u0026lt;instance_attributes id=\u0026#34;fs_3_tsm2_inst_attr\u0026#34;\u0026gt; \u0026lt;attributes\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_3_tsm2_dev\u0026#34; name=\u0026#34;device\u0026#34; value=\u0026#34;/dev/tsm2_db_mirror\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_3_tsm2_mountpoint\u0026#34; name=\u0026#34;directory\u0026#34; value=\u0026#34;/tsm/TSM2/db_mirror\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_3_tsm2_fstype\u0026#34; name=\u0026#34;fstype\u0026#34; value=\u0026#34;ext2\u0026#34;/\u0026gt; \u0026lt;/attributes\u0026gt; \u0026lt;/instance_attributes\u0026gt; \u0026lt;/primitive\u0026gt; \u0026lt;primitive class=\u0026#34;ocf\u0026#34; id=\u0026#34;/tsm/TSM2/log\u0026#34; provider=\u0026#34;heartbeat\u0026#34; type=\u0026#34;Filesystem\u0026#34;\u0026gt; \u0026lt;operations\u0026gt; \u0026lt;op id=\u0026#34;fs_4_tsm2_mon\u0026#34; interval=\u0026#34;5s\u0026#34; name=\u0026#34;monitor\u0026#34; timeout=\u0026#34;5s\u0026#34;/\u0026gt; \u0026lt;/operations\u0026gt; \u0026lt;instance_attributes id=\u0026#34;fs_4_tsm2_inst_attr\u0026#34;\u0026gt; \u0026lt;attributes\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_4_tsm2_dev\u0026#34; name=\u0026#34;device\u0026#34; value=\u0026#34;/dev/tsm2_log\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_4_tsm2_mountpoint\u0026#34; name=\u0026#34;directory\u0026#34; value=\u0026#34;/tsm/TSM2/log\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_4_tsm2_fstype\u0026#34; name=\u0026#34;fstype\u0026#34; value=\u0026#34;ext2\u0026#34;/\u0026gt; \u0026lt;/attributes\u0026gt; \u0026lt;/instance_attributes\u0026gt; \u0026lt;/primitive\u0026gt; \u0026lt;primitive class=\u0026#34;ocf\u0026#34; id=\u0026#34;/tsm/TSM2/log_mirror\u0026#34; provider=\u0026#34;heartbeat\u0026#34; type=\u0026#34;Filesystem\u0026#34;\u0026gt; \u0026lt;operations\u0026gt; \u0026lt;op id=\u0026#34;fs_5_tsm2_mon\u0026#34; interval=\u0026#34;5s\u0026#34; name=\u0026#34;monitor\u0026#34; timeout=\u0026#34;5s\u0026#34;/\u0026gt; \u0026lt;/operations\u0026gt; \u0026lt;instance_attributes id=\u0026#34;fs_5_tsm2_inst_attr\u0026#34;\u0026gt; \u0026lt;attributes\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_5_tsm2_dev\u0026#34; name=\u0026#34;device\u0026#34; value=\u0026#34;/dev/tsm2_log_mirror\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_5_tsm2_mountpoint\u0026#34; name=\u0026#34;directory\u0026#34; value=\u0026#34;/tsm/TSM2/log_mirror\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;fs_5_tsm2_fstype\u0026#34; name=\u0026#34;fstype\u0026#34; value=\u0026#34;ext2\u0026#34;/\u0026gt; \u0026lt;/attributes\u0026gt; \u0026lt;/instance_attributes\u0026gt; \u0026lt;/primitive\u0026gt; \u0026lt;primitive class=\u0026#34;ocf\u0026#34; id=\u0026#34;TSM2: dsmserv\u0026#34; provider=\u0026#34;heartbeat\u0026#34; type=\u0026#34;dsmserv\u0026#34;\u0026gt; \u0026lt;operations\u0026gt; \u0026lt;op id=\u0026#34;dsmserv_tsm2_mon\u0026#34; interval=\u0026#34;5s\u0026#34; name=\u0026#34;monitor\u0026#34; timeout=\u0026#34;5s\u0026#34;/\u0026gt; \u0026lt;/operations\u0026gt; \u0026lt;instance_attributes id=\u0026#34;dsmserv_tsm2_inst_attr\u0026#34;\u0026gt; \u0026lt;attributes\u0026gt; \u0026lt;nvpair id=\u0026#34;dsmserv_tsm2_status\u0026#34; name=\u0026#34;target_role\u0026#34; value=\u0026#34;started\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;dsmserv_tsm2_prefix\u0026#34; name=\u0026#34;prefix\u0026#34; value=\u0026#34;/tsm\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;dsmserv_tsm2_instance\u0026#34; name=\u0026#34;instance\u0026#34; value=\u0026#34;TSM2\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;dsmserv_tsm2_userid\u0026#34; name=\u0026#34;id\u0026#34; value=\u0026#34;ha_client\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;dsmserv_tsm2_password\u0026#34; name=\u0026#34;password\u0026#34; value=\u0026#34;ha_client\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;dsmserv_tsm2_tcpaddress\u0026#34; name=\u0026#34;TCPAddress\u0026#34; value=\u0026#34;10.0.0.80\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;dsmserv_tsm2_tcpport\u0026#34; name=\u0026#34;TCPPort\u0026#34; value=\u0026#34;1501\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;dsmserv_tsm2_max_retries\u0026#34; name=\u0026#34;max_retries\u0026#34; value=\u0026#34;2\u0026#34;/\u0026gt; \u0026lt;nvpair id=\u0026#34;dsmserv_tsm2_shutdown_timeout\u0026#34; name=\u0026#34;shutdown_timeout\u0026#34; value=\u0026#34;10\u0026#34;/\u0026gt; \u0026lt;/attributes\u0026gt; \u0026lt;/instance_attributes\u0026gt; \u0026lt;/primitive\u0026gt; \u0026lt;/group\u0026gt; constraints.xml:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 \u0026lt;rsc_location id=\u0026#34;tsm1_group_rsc_location\u0026#34; rsc=\u0026#34;tsm1_group\u0026#34;\u0026gt; \u0026lt;rule id=\u0026#34;tsm1_group:prefered_location:rule\u0026#34; score=\u0026#34;100\u0026#34;\u0026gt; \u0026lt;expression id=\u0026#34;tsm1_group:prefered_location:rule:expr\u0026#34; attribute=\u0026#34;#uname\u0026#34; operation=\u0026#34;eq\u0026#34; value=\u0026#34;tsm1\u0026#34;/\u0026gt; \u0026lt;/rule\u0026gt; \u0026lt;rule id=\u0026#34;tsm1_group:connected:rule\u0026#34; score=\u0026#34;-INFINITY\u0026#34; boolean_op=\u0026#34;or\u0026#34;\u0026gt; \u0026lt;expression id=\u0026#34;tsm1_group:connected:expr:not_defined\u0026#34; attribute=\u0026#34;pingd\u0026#34; operation=\u0026#34;not_defined\u0026#34; /\u0026gt; \u0026lt;expression id=\u0026#34;tsm1_group:connected:expr:zero\u0026#34; attribute=\u0026#34;pingd\u0026#34; operation=\u0026#34;lte\u0026#34; value=\u0026#34;0\u0026#34; /\u0026gt; \u0026lt;/rule\u0026gt; \u0026lt;/rsc_location\u0026gt; \u0026lt;rsc_location id=\u0026#34;tsm2_group_rsc_location\u0026#34; rsc=\u0026#34;tsm2_group\u0026#34;\u0026gt; \u0026lt;rule id=\u0026#34;tsm2_group:prefered_location:rule\u0026#34; score=\u0026#34;100\u0026#34;\u0026gt; \u0026lt;expression id=\u0026#34;tsm2_group:prefered_location:rule:expr\u0026#34; attribute=\u0026#34;#uname\u0026#34; operation=\u0026#34;eq\u0026#34; value=\u0026#34;tsm2\u0026#34;/\u0026gt; \u0026lt;/rule\u0026gt; \u0026lt;rule id=\u0026#34;tsm2_group:connected:rule\u0026#34; score=\u0026#34;-INFINITY\u0026#34; boolean_op=\u0026#34;or\u0026#34;\u0026gt; \u0026lt;expression id=\u0026#34;tsm2_group:connected:expr:not_defined\u0026#34; attribute=\u0026#34;pingd\u0026#34; operation=\u0026#34;not_defined\u0026#34; /\u0026gt; \u0026lt;expression id=\u0026#34;tsm2_group:connected:expr:zero\u0026#34; attribute=\u0026#34;pingd\u0026#34; operation=\u0026#34;lte\u0026#34; value=\u0026#34;0\u0026#34; /\u0026gt; \u0026lt;/rule\u0026gt; \u0026lt;/rsc_location\u0026gt; The nice thing about resource groups with Linux-HA is, that they are started in order as they are listed in the XML-file, and stopped in reverse as listed in the XML-file.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-10-01_setting-up-linux-ha/","summary":"\u003cp\u003eWell, initially I thought writing the \u003ca href=\"http://christian.weblog.heimdaheim.de/2008/09/26/linux-ha-and-tivoli-storage-manager/\" title=\"Linux-HA and Tivoli Storage Manager\"\u003eOCF resource agent for Tivoli Storage Manager\u003c/a\u003e was the hard part. But as it turns out, it really ain\u0026rsquo;t. The hard part, is getting the resources into the heartbeat agent (or whatever you wanna call it). The worst part about it, is that the hb_gui is completely worthless if you want to do a configuration without quorum.\u003c/p\u003e\n\u003cp\u003eFirst of all, we need to setup the main Linux-HA configuration file ( \u003cem\u003e/etc/ha.d/ha.cf\u003c/em\u003e). Configuring that, is rather simple. For me, as I do have two network devices, over which both nodes see each other (one is an adapter bond of comprising of two simple, plain, old 1G copper ports; the other is the 1G fibre cluster port), the configuration looks like this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eudpport 694\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eautojoin none\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecrm true\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003euse_logd on\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edebug false\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecoredumps false\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eauto_failback on\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eucast bond0 10.0.0.10\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eucast bond0 10.0.0.20\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eucast eth2  10.0.0.29\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eucast eth2  10.0.0.30\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enode tsm1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enode tsm2\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erespawn root /usr/lib64/heartbeat/pingd -m 100 -d 5s\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eping 10.0.0.1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erespawn root /sbin/evmsd\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eapiauth evms uid=hacluster,root\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAfter configuring the service itself is done, one just needs to start the heartbeat daemon on both nodes. Afterwards, we should be able to configure the cluster resources.\u003c/p\u003e\n\u003cp\u003eI find it particularly easier to just update the corresponding sections with \u003cem\u003ecibadmin\u003c/em\u003e (the man-page really has some good examples). So here are my configuration files for two resource groups ( \u003cem\u003ecrm_mon\u003c/em\u003e doesn\u0026rsquo;t difference between resources and grouped resources, it\u0026rsquo;ll just show you that you configured two resources).\u003c/p\u003e\n","title":"Setting up Linux-HA"},{"content":"Well, I just finished my wild-goose chase with Apache and subversion regarding a rather weird error. I recently reinstalled our subversion box, and ever since then I was unable to commit anything new to any of the repositories. Subversion told me this:\n1 2 3 svn-client admin-scripts [1] \u0026gt; svn ci -m \u0026#34;Directories for Tivoli Storage Manager Scripts.\u0026#34; svn: Commit failed (details follow): svn: MKACTIVITY of \u0026#39;/svn/admin-scripts/!svn/act/someid\u0026#39;: 302 Found Apache didn\u0026rsquo;t say much about it either, besides this particular line:\n1 [25/Sep/2008:09:22:43 +0200] \u0026#34;MKACTIVITY /svn/admin-scripts/!svn/act/someid HTTP/1.1\u0026#34; 302 331 Today I sat down and thought really hard, what exactly was different from before.\nInstalled Trac instead of Redmine, but that can\u0026rsquo;t have anything to do with the error Configured URL rewriting \u0026hellip; As it turns out, the following RewriteRule was the cause:\n1 2 3 4 ## mod_rewrite RewriteEngine On RewriteCond %{REQUEST_URI} !^/(projects|svn)* [NC] RewriteRule ^/ http://subversion.home.barfoo.org/projects [L,R] After changing the Rewrite Rule (as showed below, compare the difference yourself \u0026#x1f61b; ), it works just like a charm.\n1 2 3 4 ## mod_rewrite RewriteEngine On RewriteCond %{REQUEST_URI} !^/(projects|svn)/*$ [NC] RewriteRule ^/$ http://subversion.home.barfoo.org/projects [L,R] Hint to self: whenever encountering HTTP 302 in conjunction with Subversion, check the RewriteRule\u0026rsquo;s \u0026#x2757;\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-09-28_subversion-via-http-s-and-mod-rewrite/","summary":"\u003cp\u003eWell, I just finished my wild-goose chase with Apache and subversion regarding a rather weird error. I recently reinstalled our subversion box, and ever since then I was unable to commit anything new to any of the repositories.\nSubversion told me this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esvn-client admin-scripts [1] \u0026gt; svn ci -m \u0026#34;Directories for Tivoli Storage Manager Scripts.\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esvn: Commit failed (details follow):\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esvn: MKACTIVITY of \u0026#39;/svn/admin-scripts/!svn/act/someid\u0026#39;: 302 Found\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eApache didn\u0026rsquo;t say much about it either, besides this particular line:\u003c/p\u003e","title":"Subversion via HTTP(s) and mod_rewrite"},{"content":"Well, I bought myself a new TV last week (and it was finally delivered on Monday), which came with a HDM Interface. I also bought me a DVD player some time between New years eve and now (I don\u0026rsquo;t really remember when, I guess I could look at the invoice, but I\u0026rsquo;m lazy) with an HDM Interface.\nUp till now, I had a SCART cable to interface the DVD player with my TV (the old one was really old, didn\u0026rsquo;t have no other interface). So when my brother said he was gonna go shopping, I told him he should bring me a HDMI cable. And he did that without any whining or complaining. He only said, I owe him 40 EUR \u0026hellip;\nAt that point, I basically went WTF \u0026hellip; Forty euros for a FUCKING 2 meter cable ?! Even if it\u0026rsquo;s completely molded out of gold, it\u0026rsquo;s still rip-off.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-09-18_high-definition-multimedia-interface/","summary":"\u003cp\u003eWell, I bought myself a new TV last week (and it was finally delivered on Monday), which came with a HDM Interface. I also bought me a DVD player some time between New years eve and now (I don\u0026rsquo;t really remember when, I guess I could look at the invoice, but I\u0026rsquo;m lazy) with an HDM Interface.\u003c/p\u003e\n\u003cp\u003eUp till now, I had a SCART cable to interface the DVD player with my TV (the old one was really old, didn\u0026rsquo;t have no other interface). So when my brother said he was gonna go shopping, I told him he should bring me a HDMI cable. And he did that without any whining or complaining. He only said, I owe him 40 EUR \u0026hellip;\u003c/p\u003e","title":"High Definition Multimedia Interface"},{"content":"Some people might ask, \u0026quot; Gosh, what\u0026rsquo;s up with you ?\u0026quot; .. Well I\u0026rsquo;ve been incredibly busy with work the last month (sheeesh, another month already passed by). We finally finished the public tender; gonna get some of the components next week (that is the library extension, the LTO4 drives and cartridges, two brand new Cisco MDS9134 and some Fibre channel hard disks for the existing DS4700). After work, I made my usual visits in the gym and well, after I was home some relaxing, kicking up my feet and doing nothing (as in zip).\nI\u0026rsquo;ve visited Munich in late August for a job interview (though they handed me the \u0026quot; Dude, you\u0026rsquo;re good. But you only finished second\u0026quot; answer by now), had a long weekend for a change (as in five days), which I used to visit my aunt and my cousin in Stuttgart.\nSpent some more time figuring out TYPO3 stuff for work, made a terrible mistake (copied a vHost configuration and changed only the ServerName, left the ServerAlias\u0026rsquo;es in place). I\u0026rsquo;m currently writing a review (as well as a Nagios impacted howto) for the MessPC Ethernetbox, hopefully once I\u0026rsquo;m back at work I\u0026rsquo;ll be able to finish it.\nRight now, I\u0026rsquo;m home sick (yup, again) with a cold (or something similar, still having para nasal occlusion). Well, I guess I\u0026rsquo;m gonna be fine next week (at least I hope so \u0026hellip;). Cherio.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-09-16_what-s-up-dude/","summary":"\u003cp\u003eSome people might ask, \u0026quot; \u003cstrong\u003eGosh, what\u0026rsquo;s up with you ?\u003c/strong\u003e\u0026quot; .. Well I\u0026rsquo;ve been incredibly busy with work the last month (sheeesh, another month already passed by). We finally finished the public tender; gonna get some of the components next week (that is the library extension, the LTO4 drives and cartridges, two brand new Cisco MDS9134 and some Fibre channel hard disks for the existing DS4700). After work, I made my usual visits in the gym and well, after I was home some relaxing, kicking up my feet and doing nothing (as in zip).\u003c/p\u003e","title":"What's up, dude"},{"content":"Well, after some more refining I think I finally have a script I ain\u0026rsquo;t never gonna touch again (unless something breaks, which can happen quick as we all know).\nThe script now uses a sysconfig file for the common settings (like sender, receipents, categories to scan for), so it may be deployed en mass.\n/etc/sysconfig/zypper-update-report\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ## Type: string ## Default: root ## Config: \u0026#34;\u0026#34; # # Sender address for the update report FROM=\u0026#34;Yourupdatemonkey \u0026#34; ## Type: string ## Default: root ## Config: \u0026#34;\u0026#34; # # Receiver address for the update report #RECEIPENTS=\u0026#34;tehsysadmin@barfoo.org\u0026#34; ## Type: string ## Default: \u0026#34;securty recommended optional\u0026#34; ## Config: \u0026#34;\u0026#34; # # List of groups, to include in the report CLASSES=\u0026#34;security recommended optional\u0026#34; /usr/local/sbin/zypper-update-report\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 #!/bin/bash # Checks the output of `zypper pch` for security/recommended/optional updates # and prepares a detailed report to be mailed to the administrators [ -f /etc/sysconfig/update-report ] || exit 1 source /etc/sysconfig/update-report # Temporary files TMPDIR=\u0026#34;$( mktemp -d /tmp/update-report.XXXXXX )\u0026#34; ZYPP_LIST=\u0026#34;$TMPDIR/zypper-list\u0026#34; ZYPP_DETAILS=\u0026#34;$TMPDIR/zypper-details\u0026#34; ZYPP_REPORT=\u0026#34;$TMPDIR/zypper-report\u0026#34; zypper pch 2\u0026gt;/dev/null \u0026gt; $ZYPP_LIST # Figure out how much updates are still pending PENDING=\u0026#34;$( cat $ZYPP_LIST | grep \u0026#34;| Needed\u0026#34; | wc -l )\u0026#34; if [ $PENDING -eq 0 ] ; then exit 0 fi echo \u0026gt; $ZYPP_REPORT echo \u0026#34; Pending updates for $( domainname -f ) on $( date )\u0026#34; \u0026gt;\u0026gt; $ZYPP_REPORT for severity in $CLASSES; do PACKAGES=\u0026#34;$( cat $ZYPP_LIST | egrep \u0026#34;${severity}(.*)| Needed\u0026#34; | cut -d| -f2 | sed \u0026#34;s,^ ,,\u0026#34; | sort -u )\u0026#34; [ -n \u0026#34;$PACKAGES\u0026#34; ] \u0026amp;\u0026amp; echo [ -n \u0026#34;$PACKAGES\u0026#34; ] \u0026amp;\u0026amp; echo \u0026#34; Category: $severity\u0026#34; for package in $PACKAGES; do zypper patch-info $package 2\u0026gt;/dev/null \u0026gt; $ZYPP_DETAILS echo \u0026#34;\u0026#34; echo \u0026#34; * Patch: $package\u0026#34; echo \u0026#34; Needs reboot: $( cat $ZYPP_DETAILS | grep \u0026#34;Reboot Required:\u0026#34; | sed -e \u0026#34;s,Reboot Required: ,,\u0026#34; )\u0026#34; echo \u0026#34; Affected packages: \u0026#34; for atom in $( cat $ZYPP_DETAILS | grep \u0026#34;^atom:\u0026#34; | cut -d -f2 | sort ); do # Let\u0026#39;s check whether or not the package listed in atom is installed ... # If installed, echo the atom, otherwise don\u0026#39;t as we don\u0026#39;t need to update # the package. RPM_STATUS=$( rpm -qi $atom ) if [ \u0026#34;$RPM_STATUS\u0026#34; != \u0026#34;package $atom is not installed\u0026#34; ] ; then echo \u0026#34; - $atom \u0026#34; fi done done done \u0026gt;\u0026gt; $ZYPP_REPORT if [ -n \u0026#34;$RECEIPENTS\u0026#34; ] ; then cat $ZYPP_REPORT | mail -r \u0026#34;$FROM\u0026#34; -s \u0026#34;[$( date +%F )] Update report for $( domainname -f )\u0026#34; $RECEIPENTS fi trap \u0026#34;rm -rf \u0026#34;$TMPDIR\u0026#34; \u0026gt;/dev/null 2\u0026gt;\u0026amp;1\u0026#34; ERR EXIT # vim: set tw=80 ts=2 sw=2 et softtabstop=2 ","permalink":"https://christian.blog.pakiheim.de/posts/2008-09-09_zypper-update-report-was-patch2mail-for-sles10/","summary":"\u003cp\u003eWell, \u003ca href=\"/posts/2014-08-08_patch2mail-for-sles10\" title=\"patch2mail for SLES10\"\u003eafter some more refining\u003c/a\u003e I think I finally have a script I ain\u0026rsquo;t never gonna touch again (unless something breaks, which can happen quick as we all know).\u003c/p\u003e\n\u003cp\u003eThe script now uses a sysconfig file for the common settings (like sender, receipents, categories to scan for), so it may be deployed en mass.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e/etc/sysconfig/zypper-update-report\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e## Type: string\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e## Default: root\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e## Config: \u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e#\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# Sender address for the update report\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFROM=\u0026#34;Yourupdatemonkey \u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e## Type: string\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e## Default: root\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e## Config: \u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e#\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# Receiver address for the update report\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e#RECEIPENTS=\u0026#34;tehsysadmin@barfoo.org\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e## Type: string\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e## Default: \u0026#34;securty recommended optional\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e## Config: \u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e#\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# List of groups, to include in the report\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCLASSES=\u0026#34;security recommended optional\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e/usr/local/sbin/zypper-update-report\u003c/strong\u003e\u003c/p\u003e","title":"zypper-update-report (was: patch2mail for SLES10)"},{"content":"Well, I was playing with the hostgroup inheritance earlier. One problem with that is, if you define a duplicate service Nagios is really unpredictable or rather inconsistent. Now, as Thomas Guyot-Sionnest told me, I should try custom macros for the check definition. So what I did was the following:\ntemplates/host-windows.cfg\n1 2 3 4 5 define host { name generic-windows register 0 _RDPPORT 3389 } hostgroups/windows.cfg\n1 2 3 4 5 6 7 8 9 10 11 12 define hostgroup { hostgroup_name windows alias Windows Servers hostgroup_members windows-terminal } define service { use generic-service check_command check_tcp!$_HOSTRDPPORT$ service_description RDP hostgroup_name windows } hosts/terminal1.cfg\n1 2 3 4 5 6 7 8 9 define host { use generic-windows host_name terminal1 alias terminal1.barfoo.org address 10.0.0.250 parents barfoo-home hostgroups windows-terminal _RDPPORT 3390 } As you can see, the default RDP port is 3389 (as defined in the host template), but for some systems you might want to \u0026ldquo;change\u0026rdquo; the port (for example, if you\u0026rsquo;re having a Citrix farm and you changed the RDP port to something else and still want to be able to check whether or not the RDP service is active), thus the check using the macro, and a single host redefining the macro, thus having a bit more flexibility.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-08-16_custom-macros-in-host-definitions/","summary":"\u003cp\u003eWell, I was \u003ca href=\"/posts/2008-07-19_nagios-hostgroup-inheritance-continued\" title=\"Nagios Hostgroup Inheritance\"\u003eplaying with the hostgroup inheritance\u003c/a\u003e earlier. One problem with that is, if you define a duplicate service Nagios is really unpredictable or rather inconsistent. Now, as Thomas Guyot-Sionnest told me, I should try \u003ca href=\"http://nagios.sourceforge.net/docs/3_0/macros.html\"\u003ecustom macros\u003c/a\u003e for the check definition. So what I did was the following:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003etemplates/host-windows.cfg\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edefine host {\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  name         generic-windows\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  register     0\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  _RDPPORT     3389\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003e\u003cstrong\u003ehostgroups/windows.cfg\u003c/strong\u003e\u003c/p\u003e","title":"Custom macros in host definitions"},{"content":"Well, it\u0026rsquo;s 7pm. I\u0026rsquo;m sitting at home and thinking about why in gods name rug isn\u0026rsquo;t adding my update repository. I can add the service using yast inst_source, but when yast then syncs with ZenWorks, it tells me something like:\nFailed to get repomd/repodata.xml; Reason: 530 - Access denied\nSo my fellow co-worker turned on the debug-logging and we quickly found out why: rug isn\u0026rsquo;t using the command line credentials I was passing.\nNow I only need to find out, why rug isn\u0026rsquo;t using them, and how I\u0026rsquo;m able to pass username and password to rug .. Or not, after looking through the Novell community, I found bug 204741 in Novell\u0026rsquo;s bugzilla. Guess, what .. It\u0026rsquo;s marked WONTFIX (or whatever, I can\u0026rsquo;t view the duplicate bug).\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-08-15_debugging-rug/","summary":"\u003cp\u003eWell, it\u0026rsquo;s 7pm. I\u0026rsquo;m sitting at home and thinking about why in gods name rug isn\u0026rsquo;t adding my update repository. I can add the service using yast inst_source, but when yast then syncs with ZenWorks, it tells me something like:\u003c/p\u003e\n\u003cp\u003eFailed to get repomd/repodata.xml; Reason: 530 - Access denied\u003c/p\u003e\n\u003cp\u003eSo my fellow co-worker turned on the debug-logging and we quickly found out why: rug isn\u0026rsquo;t using the command line credentials I was passing.\u003c/p\u003e","title":"Debugging rug"},{"content":"Well, I just noticed a really weird thing, when you have command line arguments enabled.\nHere\u0026rsquo;s a snippet from my nrpe.cfg:\n1 2 dont_blame_nrpe=1 command[check_disk]=/usr/lib/nagios/plugins/check_disk -E -w $ARG1$ -c $ARG2$ -p $ARG3$ Now, if you\u0026rsquo;d check the free space for the root, it ain\u0026rsquo;t gonna show any inode percentage (that one isn\u0026rsquo;t what I\u0026rsquo;m talking about). But if you have to use bind mounts like I do (Tivoli needs a separate \u0026quot; domain\u0026quot; -- that is a separate mount point for each domain), you might wanna check the free space on the real device, rather than the free space on the bind mount (which is gonna show you the free space of the parent file system - in my case the root fs).\nLet\u0026rsquo;s take a look at what I\u0026rsquo;m talking about. If you use the check_disk locally like this:\n1 2 ./check_disk -w 20% -c 10% -p /apache/ DISK OK - free space: /apache 11090 MB (36% inode=36%);| /apache=19629MB;24575;27647;0;30719 Means, everything is okay, you have to pass the extra trailing slash to the \u0026ndash;partition argument, as otherwise it would pick up the bind mount at /backup.\nNow, if we do the above by means of NRPE, that\u0026rsquo;s gonna get you a different result. As I showed above, I have the check_disk command in my nrpe.cfg, I also specifically enabled command arguments during compile time.\n1 2 ./check_nrpe -H nagios.home.barfoo.org -c check_disk -a 20% 5% /apache/ DISK CRITICAL: /apache/ not found Now, why the hell isn\u0026rsquo;t it picking up the original mount point of the file system ? Guess why \u0026hellip; Because I added -E to the command, because it didn\u0026rsquo;t use the original mount point but rather the bind mount in /backup. Removing the -E and it picks up the original mount point without any trouble \u0026#x1f937;.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-08-10_suspected-nrpe-weirdness/","summary":"\u003cp\u003eWell, I just noticed a really weird thing, when you have command line arguments enabled.\u003c/p\u003e\n\u003cp\u003eHere\u0026rsquo;s a snippet from my \u003cem\u003enrpe.cfg\u003c/em\u003e:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edont_blame_nrpe=1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecommand[check_disk]=/usr/lib/nagios/plugins/check_disk -E -w $ARG1$ -c $ARG2$ -p $ARG3$\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eNow, if you\u0026rsquo;d check the free space for the root, it ain\u0026rsquo;t gonna show any inode percentage (that one isn\u0026rsquo;t what I\u0026rsquo;m talking about). But if you have to use bind mounts like I do (Tivoli needs a separate \u0026quot; \u003cem\u003edomain\u003c/em\u003e\u0026quot; -- that is a separate mount point for each domain), you might wanna check the free space on the \u003cem\u003e\u003cstrong\u003ereal\u003c/strong\u003e\u003c/em\u003e device, rather than the free space on the bind mount (which is gonna show you the free space of the parent file system - in my case the root fs).\u003c/p\u003e","title":"Suspected NRPE weirdness"},{"content":"As I wrote some time ago, I was trying to utilize Nagios 3.x\u0026rsquo;s neat feature of \u0026quot; nested\u0026quot; hostgroups. Well, as it turned out I thought it worked differently; basically like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 define hostgroup { hostgroup_name a-parent-hostgroup alias Our toplevel parent hostgroup } define service { use generic-service check_command check_dummy!0! service_description SSH hostgroup_name a-parent-hostgroup } define hostgroup { hostgroup_name a-child-hostgroup hostgroup_members a-parent-hostgroup alias Our child hostgroup } define service { use generic-service check_command check_dummy!0! service_description LOAD hostgroup_name a-child-hostgroup } As you can cleary see on line 14, I thought you define the relation between two hostgroups in the child hostgroup. The problem with it was basically (as I said in the earlier posts), that all the services defined for the child hostgroups are handed on upwards to the parent hostgroup(s).\nBut after talking to Tobi, I quickly found out, that the relation is in fact defined within the parent hostgroup. So if you simply put hostgroup_members within the parent hostgroup and define all child hostgroups which should inherit from the parent one, you should be just fine.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-08-08_nagios-3-and-hostgroup-inheritance/","summary":"\u003cp\u003eAs I wrote some \u003ca href=\"/posts/2008-07-19_nagios-hostgroup-inheritance-continued\" title=\"Nagios Hostgroup Inheritance\"\u003etime\u003c/a\u003e \u003ca href=\"/posts/2008-07-19_nagios-hostgroup-inheritance-continued\" title=\"Nagios Hostgroup Inheritance (continued)\"\u003eago\u003c/a\u003e, I was trying to utilize Nagios 3.x\u0026rsquo;s neat feature of \u0026quot; \u003cem\u003enested\u003c/em\u003e\u0026quot; hostgroups. Well, as it turned out I thought it worked differently; basically like this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edefine hostgroup {\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        hostgroup_name      a-parent-hostgroup\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        alias               Our toplevel parent hostgroup\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edefine service {\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       use                  generic-service\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       check_command        check_dummy!0!\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       service_description  SSH\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       hostgroup_name       a-parent-hostgroup\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edefine hostgroup {\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        hostgroup_name      a-child-hostgroup\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        hostgroup_members   a-parent-hostgroup\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        alias               Our child hostgroup\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edefine service {\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       use                  generic-service\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       check_command        check_dummy!0!\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       service_description  LOAD\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       hostgroup_name       a-child-hostgroup\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAs you can cleary see on line 14, I thought you define the relation between two hostgroups in the child hostgroup. The problem with it was basically (as I said in the earlier posts), that all the services defined for the child hostgroups are handed on upwards to the parent hostgroup(s).\u003c/p\u003e","title":"Nagios 3 and hostgroup inheritance"},{"content":"Recently we purchased a MessPC station for our server room, and my co-worker and myself had the wish it to be integrated within Nagios. Well, so far so good. The first I did was put both keywords into Google.\nThat pretty fast brought up the manufacturer\u0026rsquo;s page (sorry it\u0026rsquo;s German only) about the device supporting Nagios by means of either SNMP or a specific plugin called pcmeasure. So I went ahead and tried both ways.\nUsing SNMP has the advantage that it\u0026rsquo;s quickly integrated into Nagios and it doesn\u0026rsquo;t need a separate plugin for that to work. But it also has a huge disadvantage. check_snmp doesn\u0026rsquo;t support performance data, which is quite handy if you do want to do graphing from Nagios\u0026rsquo; results.\nNext I tried the pcmeasure plugin. At first it worked great (that is from plain command line), but then I tried to integrate it into Nagios (well, I did integrate it); but got \u0026ldquo;Plugin did not exit properly\u0026rdquo;.\nToday, after I had the plugin commented out for about two weeks, I finally had time to look at the issue again. First I thought, simply using utils.pm\u0026rsquo;s error values would be sufficient for ePN to quit yapping, but apparently it had real problems with the pod2usage used within.\nSo I basically rewrote the plugin (well, not really; it\u0026rsquo;s still the same - but without the pod2usage and working in Nagios 3.0.3).\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-08-07_nagios-3-x-and-check-pcmeasure-pl/","summary":"\u003cp\u003eRecently we purchased a MessPC station for our server room, and my co-worker and myself had the wish it to be integrated within Nagios. Well, so far so good. The first I did was put both keywords into Google.\u003c/p\u003e\n\u003cp\u003eThat pretty fast brought up the \u003ca href=\"http://www.messpc.de/nagios.php\"\u003emanufacturer\u0026rsquo;s page\u003c/a\u003e (sorry it\u0026rsquo;s German only) about the device supporting Nagios by means of either SNMP or a specific plugin called \u003ca href=\"http://linux.swobspace.net/projects/nagios-en/pcmeasure.html\"\u003epcmeasure\u003c/a\u003e. So I went ahead and tried both ways.\u003c/p\u003e","title":"Nagios 3-x and check_pcmeasure-pl"},{"content":"Well, today the support request came back. Seems one of the originally linked VMTN dicussions really is the only way:\nExport the customization specification Edit the XML file Import it again The related part inside the customization specification should then look like this:\n1 2 3 4 \u0026lt;type\u0026gt;vim.vm.customization.Password\u0026lt;/type\u0026gt; \u0026lt;plainText\u0026gt;true\u0026lt;/plainText\u0026gt; \u0026lt;value\u0026gt;Password01\u0026lt;/value\u0026gt; \u0026lt;/password\u0026gt; So if you ever think about switching the default VirtualCenter certificate (for whatever reason), make sure you use the above workaround. Otherwise VirtualCenter is gonna fail miserably during the customization phase of the cloning process.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-08-07_more-virtualcenter-troubles-fini/","summary":"\u003cp\u003eWell, today the \u003ca href=\"/posts/2008-08-07_more-virtualcenter-troubles-fini\" title=\"More VirtualCenter troubles\"\u003esupport request\u003c/a\u003e came back. Seems \u003ca href=\"http://communities.vmware.com/thread/54721\"\u003eone\u003c/a\u003e of the originally linked VMTN dicussions really is the only way:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eExport the customization specification\u003c/li\u003e\n\u003cli\u003eEdit the XML file\u003c/li\u003e\n\u003cli\u003eImport it again\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eThe related part inside the customization specification should then look like this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026lt;type\u0026gt;vim.vm.customization.Password\u0026lt;/type\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026lt;plainText\u0026gt;true\u0026lt;/plainText\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026lt;value\u0026gt;Password01\u0026lt;/value\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026lt;/password\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eSo if you ever think about switching the default VirtualCenter certificate (for whatever reason), make sure you use the above workaround. Otherwise VirtualCenter is gonna fail miserably during the customization phase of the cloning process.\u003c/p\u003e","title":"More VirtualCenter troubles (fini)"},{"content":"As I pointed out in my past posts, I was having some weird errors with SLES10 regarding mounting CD images inside the guest (as well, as it turned out, on the physical hardware).\nNow, finally, after about a week or so Novell finally released an updated kernel package today. So the error per se is fixed, I can use my CD drives again, as well as update my virtual machines by means of virtual center, without the trickery of copying the linux.iso from /vmimages/tools to the guest and mount it by means of mount -o loop.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-07-30_suse-linux-enterprise-server-10-on-vmware-esx-finished/","summary":"\u003cp\u003eAs I pointed out in my \u003ca href=\"/posts/2014-08-16_suse-linux-enterprise-server-10-on-vmware-esx-continued\" title=\"SUSE Linux Enterprise Server 10 on VMware ESX (continued)\"\u003epast\u003c/a\u003e \u003ca href=\"/posts/2008-07-30_suse-linux-enterprise-server-10-on-vmware-esx-finished\" title=\"SUSE Linux Enterprise Server 10 on VMware ESX\"\u003eposts\u003c/a\u003e, I was having some weird errors with SLES10 regarding mounting CD images inside the guest (as well, as it turned out, on the physical hardware).\u003c/p\u003e\n\u003cp\u003eNow, finally, after about a week or so Novell finally released an updated kernel package today. So the error per se is fixed, I can use my CD drives again, as well as update my virtual machines by means of virtual center, without the trickery of copying the \u003cem\u003elinux.iso\u003c/em\u003e from \u003cem\u003e/vmimages/tools\u003c/em\u003e to the guest and mount it by means of \u003cem\u003emount -o loop\u003c/em\u003e.\u003c/p\u003e","title":"SUSE Linux Enterprise Server 10 on VMware ESX (finished)"},{"content":"Today I was moving a pretty standard SLES10 virtual machine to another host, when the migration dialog showed me this:\nfault.MemorySizeNotRecommended\nAnd if you now think, the virtual machine is something special take a look at those settings:\nVirtual machine configuration\nI don\u0026rsquo;t know what to think about that error message. Googling for it doesn\u0026rsquo;t reveal that much about it. If anyone out there got an idea, I\u0026rsquo;m open for suggestions.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-07-30_yet-another-vmware-error/","summary":"\u003cp\u003eToday I was moving a pretty standard SLES10 virtual machine to another host, when the migration dialog showed me this:\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2008/07/faultmemorysizenotrecommended.png\"\n         alt=\"fault.MemorySizeNotRecommended\" width=\"500\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003efault.MemorySizeNotRecommended\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eAnd if you now think, the virtual machine is something special take a look at those settings:\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2008/07/vm-configuration.png\"\n         alt=\"Virtual machine configuration\" width=\"500\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eVirtual machine configuration\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eI don\u0026rsquo;t know what to think about that error message. Googling for it doesn\u0026rsquo;t reveal that much about it. If anyone out there got an idea, I\u0026rsquo;m open for suggestions.\u003c/p\u003e","title":"Yet another VMware error"},{"content":"Since I do happen to be in the situation pretty often where the kernel inside a VM is newer than what VMware currently has in their tools (as in the SUSE kernel is newer than the binary modules built by VMware), here\u0026rsquo;s a quick reminder for myself on how to to fix the .ko symlinks.\n1 2 3 4 5 for file in /lib/modules/$( uname -r )/misc/*.ko ; do rm $file \u0026amp;\u0026amp; ln -s /lib/modules/$( uname -r )/misc/${file/.ko/.o} $file done ","permalink":"https://christian.blog.pakiheim.de/posts/2008-07-30_fixing-vmkernel-symlinks/","summary":"\u003cp\u003eSince I do happen to be in the situation pretty often where the kernel inside a VM is newer than what VMware currently has in their tools (as in the SUSE kernel is newer than the binary modules built by VMware), here\u0026rsquo;s a quick reminder for myself on how to to fix the .ko symlinks.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efor file in /lib/modules/$( uname -r )/misc/*.ko ;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edo\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e rm $file \u0026amp;\u0026amp;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e ln -s /lib/modules/$( uname -r )/misc/${file/.ko/.o} $file\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edone\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Fixing vmkernel symlinks"},{"content":"There I was, enjoying our new patio and trying to get a tan outside (we had plenty great weather during the weekend).\nThe new patio\nNow, all of the sudden there was this weird noise I couldn\u0026rsquo;t classify (which I heard while listening to my iPod completely cranked up \u0026hellip;), so I stood up.\nCombine harvester mowing down rape\nThey were finally mowing the rape field behind our house \u0026hellip; hah!\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-07-28_relaxing-weekend/","summary":"\u003cp\u003eThere I was, enjoying our new patio and trying to get a tan outside (we had plenty great weather during the weekend).\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2008/08/img_1504.jpg\"\n         alt=\"The new patio\" width=\"500\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eThe new patio\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eNow, all of the sudden there was this \u003cem\u003e\u003cstrong\u003eweird\u003c/strong\u003e\u003c/em\u003e noise I couldn\u0026rsquo;t classify (which I heard while listening to my iPod completely cranked up \u0026hellip;), so I stood up.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2008/08/img_1496.jpg\"\n         alt=\"Combine harvester mowing down rape\" width=\"500\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eCombine harvester mowing down rape\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eThey were finally mowing the rape field behind our house \u0026hellip; hah!\u003c/p\u003e","title":"Relaxing weekend"},{"content":"If you think back, I talked about my problems with MSCS while utilizing the IBM RDAC Multipath driver for Windows.\nEveryone I talked to about this, including our IBM business partner and it\u0026rsquo;s systems engineers; as well as some IBM systems engineer (who in fact was an freelance guy hired by IBM), told me it had to do with how we did the zoning (stuffing every controller into a single zone), and that would be the reason why the x3650 was seeing that many drives.\nWhen the freelance SE came to visit us, we redid the zoning, separating each endpoint connection (each HBA port to each controller port) into a different zone.\nAdditionally he told me, that was the only IBM™ supported configuration.\nSAN Zoning (Overview)\nAs you can see, I had to create ten different zones for each single port of the dual port fibre channel HBA and it\u0026rsquo;s corresponding endpoint (I guess, I still have to create more, since the DS4700 is having two ports per controller).\nSAN Zoning (Detailed)\nAfter we finished that, we rebooted the x3650 and hoped that would have fixed. Afterwards the IBM SE was baffled. Still seeing ~112 devices. What the heck ? He ranted about how awful this was and did some mumbo jumbo with his notebook, uploaded the ds4?00 configuration files to some web interface, but shortly afterwards said the storage configuration seemed to be fine on the first glance.\nSo we had another look at the storage configuration and he quickly found, that the other cluster ports were set to \u0026quot; Windows Cluster 2003 (Supporting DMP)\u0026quot; in the port configuration and said that\u0026rsquo;d be the cause why stuff still ain\u0026rsquo;t working (I think he guessed wildly, since he had no clue either). After I told him, I just can\u0026rsquo;t change those ports right now (since the remaining part of the cluster is in full production), we agreed that I\u0026rsquo;d do it some other time and tell him about my results.\nAnyways, the next day my co-workers suggested, trying a newer Storage Manager version on the x3650, at the same level with the highest firmware version on the storages (thus being the DS4700 and v09.23). Now guess what ?\nThat fucking works. The cluster is still behaving weird sometimes (now the other boxen seem to have trouble bringing resources online, but only sometimes).\nSo here my hint: Always keep an old version of the Storage Manager around, you can\u0026rsquo;t get them from IBM anymore \u0026#x1f937;\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-07-26_microsoft-cluster-services-powered-by-ibm/","summary":"\u003cp\u003eIf you think back, I talked about \u003ca href=\"/posts/2014-08-16_windows-cluster-service-continued\" title=\"Windows Cluster Service (continued)\"\u003emy problems\u003c/a\u003e with \u003ca href=\"/posts/2014-08-16_ibm-rdac-and-windows-cluster-service\" title=\"IBM RDAC and Windows Cluster Service\"\u003eMSCS while utilizing the IBM RDAC Multipath\u003c/a\u003e driver for Windows.\u003c/p\u003e\n\u003cp\u003eEveryone I talked to about this, including our IBM business partner and it\u0026rsquo;s systems engineers; as well as some IBM systems engineer (who in fact was an freelance guy hired by IBM), told me it had to do with how we did the zoning (stuffing every controller into a single zone), and that would be the reason why the x3650 was seeing that many drives.\u003c/p\u003e","title":"Microsoft Cluster Services powered by IBM"},{"content":"Well, as one can read in about every damn post you can find for that topic, the /console switch is now silently ignored, as well as the rdp file option \u0026quot; connect to console:i:1\u0026quot;.\nNow, what you don\u0026rsquo;t find anywhere (only in some scenario explanation), that it is allowed to specify the mode (ie /console previously and now /admin) within the full address parameter.\nScenario: In the RDC client UI, you specify Computer_name /console in the Computer box (where Computer_name represents the name of the remote computer to which you want to connect), and then click Connect.\nBehavior: The /console switch is silently ignored. You will be connected to a session to remotely administer the server. (For more information about the Windows Server 2008 behavior, see the “Behavior when you connect to a server that does not have Terminal Server installed” section of this article.)\nSo my rdp connection file basically looks like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 screen mode id:i:1 desktopwidth:i:1152 desktopheight:i:864 session bpp:i:24 winposstr:s:0,1,0,0,1219,971 full address:s:ip-address /admin compression:i:1 keyboardhook:i:2 audiomode:i:0 redirectdrives:i:0 redirectprinters:i:0 redirectcomports:i:0 redirectsmartcards:i:0 displayconnectionbar:i:1 autoreconnection enabled:i:1 alternate shell:s: shell working directory:s: disable wallpaper:i:0 disable full window drag:i:0 disable menu anims:i:0 disable themes:i:0 disable cursor setting:i:0 bitmapcachepersistenable:i:1 redirectclipboard:i:1 redirectposdevices:i:0 drivestoredirect:s: authentication level:i:0 prompt for credentials:i:0 negotiate security layer:i:1 remoteapplicationmode:i:0 allow desktop composition:i:1 allow font smoothing:i:1 gatewayhostname:s: gatewayusagemethod:i:0 gatewaycredentialssource:i:4 gatewayprofileusagemethod:i:0 prompt for credentials:i:0 EnableCredSSPSupport:i:0 ","permalink":"https://christian.blog.pakiheim.de/posts/2008-07-23_connecting-to-a-remote-console-with-mstsc-6-0-6001/","summary":"\u003cp\u003eWell, as one can read in about every damn post you can find for that topic, the \u003cem\u003e/console\u003c/em\u003e switch is now silently ignored, as well as the rdp file option \u0026quot; \u003cem\u003econnect to console:i:1\u003c/em\u003e\u0026quot;.\u003c/p\u003e\n\u003cp\u003eNow, what you don\u0026rsquo;t find anywhere (only in some \u003ca href=\"http://theregime.wordpress.com/2007/12/27/changes-to-rdp-for-61/\"\u003escenario explanation\u003c/a\u003e), that it \u003cstrong\u003eis\u003c/strong\u003e allowed to specify the mode (ie \u003cem\u003e/console\u003c/em\u003e previously and now \u003cem\u003e/admin\u003c/em\u003e) within the full address parameter.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eScenario:\u003c/strong\u003e In the RDC client UI, you specify \u003cstrong\u003e\u003cem\u003eComputer_name\u003c/em\u003e /console\u003c/strong\u003e in the \u003cstrong\u003eComputer\u003c/strong\u003e box (where \u003cem\u003eComputer_name\u003c/em\u003e represents the name of the remote computer to which you want to connect), and then click \u003cstrong\u003eConnect\u003c/strong\u003e.\u003c/p\u003e","title":"Connecting to a remote console with MSTSC 6-0-6001"},{"content":"Well, it turns out that my thought was ultimativly flawed. When defining the hostgroup_members in the lower tiers, nagios is association the checks from the lower tier with the upper tiers. Thus propagandating all checks upwards, and me ending up with ~250 checks instead of ~150.\nGonna have to try to define the dependency backwards, maybe that\u0026rsquo;ll help. But that\u0026rsquo;s a topic for Monday. Guess I\u0026rsquo;ll finish viewing Ghost in the Shell - Stand Alone Complex first.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-07-19_nagios-hostgroup-inheritance-continued/","summary":"\u003cp\u003eWell, it turns out that \u003ca href=\"/posts/2008-07-19_nagios-hostgroup-inheritance-continued\" title=\"Nagios Hostgroup Inheritance\"\u003emy thought\u003c/a\u003e was ultimativly flawed. When defining the \u003cem\u003e\u003ca href=\"http://nagios.sourceforge.net/docs/3_0/objectdefinitions.html#hostgroup\"\u003ehostgroup_members\u003c/a\u003e\u003c/em\u003e in the lower tiers, nagios is association the checks from the lower tier with the upper tiers. Thus propagandating all checks upwards, and me ending up with ~250 checks instead of ~150.\u003c/p\u003e\n\u003cp\u003eGonna have to try to define the dependency backwards, maybe that\u0026rsquo;ll help. But that\u0026rsquo;s a topic for Monday. Guess I\u0026rsquo;ll finish viewing Ghost in the Shell - Stand Alone Complex first.\u003c/p\u003e","title":"Nagios Hostgroup Inheritance (continued)"},{"content":"Remember my last post about cpu masking ? Well, turns out that you can do it to a \u0026ldquo;template\u0026rdquo;.\nThe only point you don\u0026rsquo;t need to do, is to mark the VM as a \u0026quot; template\u0026quot;. You still can clone it and move it around and all that other stuff, but the good part is, that the cloned VM keeps the cpu mask set to the \u0026quot; template\u0026quot; \u0026#x1f937;\nI don\u0026rsquo;t know, why VMware didn\u0026rsquo;t include that feature into the templates, since it\u0026rsquo;s a real freaky way to do.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-07-14_extending-vmotion-compatiblity-continued/","summary":"\u003cp\u003eRemember my \u003ca href=\"/posts/2008-07-14_extending-vmotion-compatiblity-continued\" title=\"Extending vMotion compatiblity\"\u003elast post about cpu masking\u003c/a\u003e ? Well, turns out that you can do it to a \u0026ldquo;template\u0026rdquo;.\u003c/p\u003e\n\u003cp\u003eThe only point you don\u0026rsquo;t need to do, is to mark the \u003cstrong\u003eVM\u003c/strong\u003e as a \u0026quot; \u003cem\u003etemplate\u003c/em\u003e\u0026quot;. You still can clone it and move it around and all that other stuff, but the good part is, that the cloned VM keeps the cpu mask set to the \u0026quot; \u003cem\u003etemplate\u003c/em\u003e\u0026quot; \u0026#x1f937;\u003c/p\u003e","title":"Extending VMotion compatiblity (continued)"},{"content":"Well, it seems to be getting a \u0026ldquo;trend\u0026rdquo; for me, to integrate stuff into our Active Directory. Now that I know why, and how easy that is, I expect to add more stuff. The good thing about the integration is, that you only need to maintain a single source for authorization.\nThe bad thing about that is, that stuff becomes dependent on the Active Directory (we do have four domain controllers, so that should be fine).\nNow, here\u0026rsquo;s the ssl-(only) apache2 configuration file for my vhost:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 \u0026lt;VirtualHost *:80\u0026gt; ## mod_core DocumentRoot \u0026#34;/usr/share/nagios\u0026#34; ServerName nagios.barfoo.org ServerAlias nagios3.barfoo.org ServerAdmin nagiosadmin@barfoo.org ## mod_rewrite RewriteEngine On RewriteRule ^/(.*) https://nagios.barfoo.org/$1 [L,R] \u0026lt;/VirtualHost\u0026gt; \u0026lt;VirtualHost *:443\u0026gt; ## mod_core DocumentRoot \u0026#34;/usr/share/nagios\u0026#34; ServerName nagios.barfoo.org ServerAdmin nagiosadmin@barfoo.org ScriptAlias /nagios/cgi-bin /usr/lib/nagios/cgi Alias /nagios /usr/share/nagios Alias /pnp /usr/share/nagios/html/pnp4nagios \u0026lt;DirectoryMatch \u0026#34;/usr/(share/nagios|lib/nagios/cgi)\u0026#34;\u0026gt; AllowOverride None Order deny,allow Deny from all Allow from 10.0.0. Options None # Authorization AuthType Basic AuthName \u0026#34;Nagios Barfoo\u0026#34; # The authentification provider is mod_ldap AuthBasicProvider ldap # mod_ldap is our *only* authentification provider for this! AuthzLDAPAuthoritative on # Redirect the userfile requests to /dev/null AuthUserFile /dev/null # AD requires an authentication DN to access any records AuthLDAPBindDN \u0026#34;BARFOO\\ldap_nagios\u0026#34; AuthLDAPBindPassword \u0026#34;somethingrandom\u0026#34; # The URL to search in AuthLDAPURL \u0026#34;ldap://dc0.barfoo.org dc1.barfoo.org dc2.barfoo.org dc3.barfoo.org/OU=Users,dc=barfoo,dc=org?sAMAccountName?sub?(objectClass=*)\u0026#34; # Search the group membership in the specified group, otherwise it\u0026#39;s gonna # get searched at the binding DN\u0026#39;s location AuthLDAPGroupAttributeIsDN on Require ldap-group CN=gr_nagios,OU=Groups,DC=barfoo,DC=org \u0026lt;/DirectoryMatch\u0026gt; ## mod_log ErrorLog /var/log/apache2/nagios.barfoo.org.error_log TransferLog /var/log/apache2/nagios.barfoo.org.access_log CustomLog /var/log/apache2/nagios.barfoo.org.ssl_request_log ssl_combined ## mod_ssl SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile /etc/apache2/ssl.crt/nagios.barfoo.org.crt SSLCertificateKeyFile /etc/apache2/ssl.key/nagios.barfoo.org.key \u0026lt;Files ~ \u0026#34;.(cgi|shtml|phtml|php3|php?)$\u0026#34;\u0026gt; SSLOptions +StdEnvVars \u0026lt;/Files\u0026gt; SetEnvIf User-Agent \u0026#34;.*MSIE.*\u0026#34; nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 \u0026lt;/VirtualHost\u0026gt; As you can see, AuthLDAPUrl holds the four LDAP servers separated by spaces (that\u0026rsquo;s what the Apache2 documentation says about that), and that actually works.\nThe only additional thing I had to change from the nagios part is in /etc/nagios/cgi.cfg to allow everyone to issue system commands. Also, if you ever stumble upon extraneous chars in the check_nrpe output, update to a newer NRPE version, that fixed it for me (that is on the receiver side - as in the box running the NRPE agent).\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-07-14_nagios3-with-active-directory-authorization-on-sles10/","summary":"\u003cp\u003eWell, it seems to be getting a \u0026ldquo;trend\u0026rdquo; for me, to integrate stuff into our Active Directory. Now that I know why, and how easy that is, I expect to add more stuff. The good thing about the integration is, that you only need to maintain a single source for authorization.\u003c/p\u003e\n\u003cp\u003eThe bad thing about that is, that stuff becomes dependent on the Active Directory (we do have four domain controllers, so that should be fine).\u003c/p\u003e","title":"Nagios3 with Active Directory authorization on SLES10"},{"content":"Recently I got the task, to implement unixODBC/freetds on one (well, it\u0026rsquo;s really three) of our web servers, as someone wanted to use Microsoft SQL Server 2005 with PHP (without using the MSSQL functions, which PHP provides soo nicely; don\u0026rsquo;t ask me why).\nWith that I also got a set of \u0026quot; instructions\u0026quot; on how to install freetds from source (remember, I was a Gentoo dev, so I know my way around, when it comes to building from source), as well as a small set of instructions on how to create the connection.\nWell, after trying to figure out why the hell the connection ain\u0026rsquo;t working with unixODBC\u0026rsquo;s tsql and PHP\u0026rsquo;s odbc functions, and yet the plain connection using telnet works \u0026hellip; \u0026#x1f937; turns out it was a simple mistake \u0026hellip;\nThe \u0026quot; howto\u0026quot; said something like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [FreeTDS] Description = FreeTDS unixODBC Driver Driver = /usr/lib64/libtdsodbc.so Setup = /usr/lib64/libtdsodbc.so [ODBC Data Sources] mssql = Microsoft SQL Server 2005 [mssql] Driver = /usr/lib64/libtdsodbc.so Description = MSSQLServer Trace = No Database = Database TraceFile = /var/log/freetdssql-foobar.log Servername = sql.foobar.org Port = 2433 TDS_Version = 8.0 [Default] Driver = /usr/lib64/libtdsodbc.so 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [FreeTDS] Description = FreeTDS unixODBC Driver Driver = /usr/lib64/libtdsodbc.so Setup = /usr/lib64/libtdsodbc.so [ODBC Data Sources] mssql = Microsoft SQL Server 2005 [mssql] Driver = /usr/lib64/libtdsodbc.so Description = MSSQLServer Trace = No Database = Database TraceFile = /var/log/freetdssql-foobar.log Server = sql.foobar.org Port = 2433 TDS_Version = 8.0 [Default] Driver = /usr/lib64/libtdsodbc.so See the difference ? If not, I\u0026rsquo;ll show you a diff:\n1 2 3 4 5 6 7 8 9 10 --- odbc.ini.orig +++ odbc.ini @@ -12,7 +12,7 @@ Trace = No Database = Database TraceFile = /var/log/freetdssql-foobar.log -Servername = sql.barfoo.org +Server = sql.barfoo.org Port = 2433 TDS_Version = 8.0 Something as simple as adding another part of a word (as in \u0026quot; name\u0026quot;) to Server, makes the whole thing go wonko. Well, it ain\u0026rsquo;t going wonko per se, as Servername is different from the meaning of Server, at least when it comes to freetds.\nServername is the SQL-Server Instance name, while Server is the DNS name .. figures.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-07-03_managing-unixodbc-connections-on-sles10/","summary":"\u003cp\u003eRecently I got the task, to implement unixODBC/freetds on one (well, it\u0026rsquo;s really three) of our web servers, as someone wanted to use Microsoft SQL Server 2005 with PHP (without using the \u003ca href=\"http://de3.php.net/manual/en/ref.mssql.php\"\u003eMSSQL functions\u003c/a\u003e, which PHP provides soo nicely; don\u0026rsquo;t ask me why).\u003c/p\u003e\n\u003cp\u003eWith that I also got a set of \u0026quot; \u003cem\u003einstructions\u003c/em\u003e\u0026quot; on how to install freetds from source (remember, I was a Gentoo dev, so I know my way around, when it comes to building from source), as well as a small set of instructions on how to create the connection.\u003c/p\u003e","title":"Managing unixODBC connections on SLES10"},{"content":"Okay, so I ended up toying with subversion via WebDAV on SLES today (I know, I know .. it\u0026rsquo;s bloody Sunday). It wasn\u0026rsquo;t much of a hassle though, after reading this. Sure, I made a few errors at first (simply confused the logic behind \u0026quot; Location\u0026quot; and \u0026quot; Directory\u0026quot;), but after that plain subversion commits via WebDAV (thus utilizing Apache) worked fine.\nFor POC or as a hint to myself, here\u0026rsquo;s where and what I needed to add/change:\nAdd the following modules to APACHE_MODULES in /etc/sysconfig/apache2:\ndav_svn (dav_svn needs dav, thus the need to add it too) dav authnz_ldap (authnz_ldap needs ldap, so again we need that too!) ldap After that, we can add our repository (or our multi-repository folder) to /etc/apache2/conf.d/subversion.conf:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 \u0026lt;IfModule mod_dav_svn.c\u0026gt; \u0026lt;Location /svn\u0026gt; DAV svn SVNParentPath /srv/svn # Limit write permission to list of valid users. \u0026lt;LimitExcept GET PROPFIND OPTIONS REPORT\u0026gt; # Require SSL connection for password protection. # SSLRequireSSL AuthType Basic AuthName \u0026#34;Subversion repositories (Domänenzugangsdaten)\u0026#34; # The authentification provider is mod_ldap AuthBasicProvider ldap # mod_ldap is our *only* authentification provider for this! AuthzLDAPAuthoritative on # AD requires an authentication DN to access any records AuthLDAPBindDN \u0026#34;CN=LDAP Subversion,OU=anon_accounts,OU=Users,DC=foobar,DC=org\u0026#34; AuthLDAPBindPassword \u0026#34;somethingrandom\u0026#34; # The URL to search in AuthLDAPURL \u0026#34;ldap://dc0.foobar.org/ou=Users,dc=foobar,dc=org?sAMAccountName?sub?(objectClass=*)\u0026#34; # Search the group membership in the specified group, otherwise it\u0026#39;s gonna # get searched at the binding DN\u0026#39;s location AuthLDAPGroupAttributeIsDN on Require ldap-group CN=gr_subversion,OU=Groups,DC=foobar,DC=org \u0026lt;/LimitExcept\u0026gt; \u0026lt;/Location\u0026gt; Now, as you can see, my goal was to not rely on a separate authorization database, but to use our already existing Active Directory at work. Generally this works just fine, but it didn\u0026rsquo;t. I tried various things, like trying another user, changing the group (as in the \u0026quot; require ldap-group\u0026quot;) as well as changing my own password. Zip.\nAll I got was this line in the error_log of Apache:\n1 [warn] [client 10.0.0.148] [9486] auth_ldap authenticate: user foo authentication failed; URI /svn/admin-scripts/!svn/act/71f2b65f-d050-0410-b33c-3b31fbb94a00 [ldap_search_ext_s() for user failed][Operations error] Now, that itself does tell you what is happening, but not why. So again, I ended up googling till I found this:\nThe suggested step was to add \u0026quot; REFERRALS off\u0026quot; to /etc/ldap/ldap.conf. Surprise, the file don\u0026rsquo;t exist. Heck, there\u0026rsquo;s that one in /etc/ldap.conf. I did that, still zip.\nDid I get the wrong file ? Absolutely.\n/etc/ldap.conf is used by nsswitch and pam_ldap, but not by openldap2 (which is what Apache is using). So reading this comment, adding the line to /etc/openldap2/ldap.conf, and kaching! Works.\nNow I just need to install redmine (already installed ruby, rubygems and rubygem-rails from the SDK Addon), but I\u0026rsquo;ll leave that for tomorrow, today I\u0026rsquo;m gonna watch Band of Brothers.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-06-29_subversion-on-webdav-with-active-directory-authorization-on-sles10/","summary":"\u003cp\u003eOkay, so I ended up toying with subversion via WebDAV on SLES today (I know, I know .. it\u0026rsquo;s bloody Sunday). It wasn\u0026rsquo;t much of a hassle though, after reading this. Sure, I made a few errors at first (simply confused the logic behind \u0026quot; \u003cem\u003e\u003ca href=\"http://httpd.apache.org/docs/2.2/mod/core.html#location\"\u003eLocation\u003c/a\u003e\u003c/em\u003e\u0026quot; and \u0026quot; \u003cem\u003e\u003ca href=\"http://httpd.apache.org/docs/2.2/mod/core.html#directory\"\u003eDirectory\u003c/a\u003e\u003c/em\u003e\u0026quot;), but after that plain subversion commits via WebDAV (thus utilizing Apache) worked fine.\u003c/p\u003e\n\u003cp\u003eFor POC or as a hint to myself, here\u0026rsquo;s where and what I needed to add/change:\u003c/p\u003e","title":"subversion on WebDAV with Active Directory authorization on SLES10"},{"content":"Remember, I talked about building RPM\u0026rsquo;s on SLES10SP2 on ppc64 ? Well, turns out I was rather stupid .. and it was rather simple (don\u0026rsquo;t ask me why I didn\u0026rsquo;t think of that). I tried asking solar, I used Google (apparently with the wrong search parameters), nothing though. Not a clue.\nToday it bugged me again, so I used Google again. This time with \u0026quot; ppc64 suse rpmbuild\u0026quot;, and guess what I saw within the preview of the second hit ..\n1 rpmbuild -ba --target ppc64 myfile.spec And here I thought I was missing something, turns out I was really stupid though .. \u0026#x1f937; Building stuff like nagios works with that just fine ..\nUpdate: or not. It worked only a single time and is broken ever since again. Guess I\u0026rsquo;m gonna reload the box on Tuesday.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-06-26_the-clue-to-build-ppc64-rpm-s/","summary":"\u003cp\u003eRemember, I \u003ca href=\"/posts/2014-08-16_building-rpms-on-sles10sp2-ppc64\" title=\"Building RPMs on SLES10SP2-ppc64\"\u003etalked\u003c/a\u003e about building RPM\u0026rsquo;s on SLES10SP2 on ppc64 ? Well, turns out I was rather stupid .. and it was rather simple (don\u0026rsquo;t ask me why I didn\u0026rsquo;t think of that). I tried asking solar, I used Google (apparently with the wrong search parameters), nothing though. Not a clue.\u003c/p\u003e\n\u003cp\u003eToday it bugged me again, so I used Google again. This time with \u0026quot; \u003cem\u003e\u003ca href=\"http://www.google.de/search?q=ppc64+suse+rpmbuild\u0026amp;ie=utf-8\u0026amp;oe=utf-8\u0026amp;aq=t\u0026amp;rls=org.mozilla:de:official\u0026amp;client=firefox-a\"\u003eppc64 suse rpmbuild\u003c/a\u003e\u003c/em\u003e\u0026quot;, and guess what I saw within the preview of the second hit ..\u003c/p\u003e","title":"The clue to build ppc64 RPM's"},{"content":"Today I had to search again on how to remove newline special characters with sed. Thanks to Kamil over at linux.dsplabs.com.au, I found it again rather quickly.\nNow, this is just for my own safekeeping, so I don\u0026rsquo;t end up googling for it again \u0026hellip; \u0026#x1f937;\n1 echo -e \u0026#34;Line containing nnewlines!\u0026#34; | sed \u0026#39;:a;N;$!ba;s/n//g\u0026#39; ","permalink":"https://christian.blog.pakiheim.de/posts/2008-06-24_removing-newlines-n-with-sed/","summary":"\u003cp\u003eToday I had to search again on how to remove newline special characters with sed. Thanks to \u003ca href=\"http://kamil.dsplabs.com.au/resume/\"\u003eKamil\u003c/a\u003e over at \u003ca href=\"http://linux.dsplabs.com.au/\"\u003elinux.dsplabs.com.au\u003c/a\u003e, I found \u003ca href=\"http://linux.dsplabs.com.au/rmnl-remove-new-line-characters-tr-awk-perl-sed-c-cpp-bash-python-xargs-ghc-ghci-haskell-sam-ssam-p65/\"\u003eit\u003c/a\u003e again rather quickly.\u003c/p\u003e\n\u003cp\u003eNow, this is just for my own safekeeping, so I don\u0026rsquo;t end up googling for it again \u0026hellip; \u0026#x1f937;\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eecho -e \u0026#34;Line containing nnewlines!\u0026#34; | sed \u0026#39;:a;N;$!ba;s/n//g\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Removing newlines (n) with sed"},{"content":"Well, it\u0026rsquo;s been a loong time since I first thought about retiring (yes, I know that #-dev\u0026rsquo;s topic states \u0026quot; developer blogs\u0026quot; ain\u0026rsquo;t for announcing important things, but my blog has to do for this; if not, I don\u0026rsquo;t care anymore \u0026#x2757; ).\nBut I think it\u0026rsquo;s about time for me to leave. I haven\u0026rsquo;t done much lately, I\u0026rsquo;ve been soo damn busy with work these last months like I would never have imagined. I gave it some more thought, and I finally got to the point ( again I might add) where all just annoys and/or frustrates me.\nAll the damn bickering, the childish behaviour Josh talked about (\u0026quot; noooo, that\u0026rsquo;s my TOY!\u0026quot;), the constant abuse of power (hey #-chat, #-kde ops). I thought most of us would at least try and behave like the elderish people we are (well besides the few of us, who really are children by law\u0026rsquo;s definition - hey there welp, omp, keytoaster \u0026#x1f609; ). But I guess that\u0026rsquo;s just been an imaginary thought I had .. \u0026#x1f937;\nJust this last thing, I\u0026rsquo;m gonna say thank to you to the few of you I\u0026rsquo;ve been gotten around to call friends.\nThank you\nChristina Diego Joshua (tsunam) Joshua (nightmorph) Łukasz Jorge Markus Daniel (dsd) Gysbert Peter Christian (well, not me. But hoffie and opfer) Chris Mike (well, three of you. \u0026rsquo;taco, mpagano and vapier) solar Andrew Alex Raúl Tobias (dertobi) Tobias (klausman) Robert (rbu) Robin Shyam Brent Benedikt Homer It\u0026rsquo;s been a hell of a ride, and I thank all of you, deeply, from the bottom of my heart for the support, advice and resources you all gave me. This is it! This time, there\u0026rsquo;s no turning back, sorry Christina \u0026#x1f61b;\nSo, I\u0026rsquo;m gonna stick to my day job, pay more attention to my trainees and maybe put some effort into getting something better! So long, farewell people. If people need to reach me; my email addresses still are in ldap, so that shouldn\u0026rsquo;t be a problem. Hasta luego (or maybe not, we\u0026rsquo;ll see \u0026hellip;)\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-06-20_looong-time/","summary":"\u003cp\u003eWell, it\u0026rsquo;s been a loong time since I first thought about retiring (yes, I know that #-dev\u0026rsquo;s topic states \u0026quot; \u003cem\u003edeveloper blogs\u003c/em\u003e\u0026quot; ain\u0026rsquo;t for announcing important things, but my blog has to do for this; if not, I don\u0026rsquo;t care anymore :!: ).\u003c/p\u003e\n\u003cp\u003eBut I think it\u0026rsquo;s about time for me to leave. I haven\u0026rsquo;t done much lately, I\u0026rsquo;ve been soo damn busy with work these last months like I would never have imagined. I gave it some more thought, and I finally got to the point ( \u003cstrong\u003eagain\u003c/strong\u003e I might add) where all just annoys and/or frustrates me.\u003c/p\u003e\n\u003cp\u003eAll the damn bickering, the childish behaviour Josh talked about (\u0026quot; \u003cem\u003enoooo, that\u0026rsquo;s my TOY!\u003c/em\u003e\u0026quot;), the constant abuse of power (hey #-chat, #-kde ops). I thought most of us would at least try and behave like the elderish people we are (well besides the few of us, who really are children by law\u0026rsquo;s definition - hey there welp, omp, keytoaster ;-) ). But I guess that\u0026rsquo;s just been an imaginary thought I had .. * \u003cstrong\u003eshrug\u003c/strong\u003e*\u003c/p\u003e\n","title":"Looong time"},{"content":"As I was building the updated RPMs for SLES10, though needed to refresh my old patch. Also, I was getting strange messages from autotools and fixed these quirks, Now, I prepped a patch for it, and finished building new RPMs for i586 and x86_64.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-06-17_updated-check-ram-plugin/","summary":"\u003cp\u003eAs I was building the updated RPMs for SLES10, though needed to \u003ca href=\"/uploads/2008/06/nagios-plugins-1412-check_ram.patch\"\u003erefresh\u003c/a\u003e my old patch. Also, I was getting strange messages from autotools and fixed these \u003ca href=\"/uploads/2008/06/nagios-plugins-1412-autoconf-quirks.patch\"\u003equirks\u003c/a\u003e, Now, I prepped a patch for it, and finished building new RPMs for i586 and x86_64.\u003c/p\u003e","title":"Updated `check_ram' plugin"},{"content":"Well, to begin with we had this really weird problem that the thin clients as well as the terminal server would only load user based group policy if you are a member of the group of local administrators. While that\u0026rsquo;s ok for the thin clients (users can\u0026rsquo;t actually change something unless they log in as \u0026ldquo;Administrator\u0026rdquo; - don\u0026rsquo;t ask me why), it\u0026rsquo;s a real no-no on the terminal server.\nWe tried redoing everything (that is, starting with the domain, then terminal server and after that the thin clients) and yet nothing changed, it didn\u0026rsquo;t work either. That\u0026rsquo;s what I\u0026rsquo;ve been doing the last 2 weeks. Up till now, I always thought a user would have access to the ntuser.dat (that is HKEY_CURRENT_USER), if his NTFS permissions would be correct. But nooooooooooooooooooooo, Microsoft had to introduce another layer of permissions.\nOld permissions on HKEY_CURRENT_USER\nOnce you change it to be proper (as in remove the dead user entry and add a group that actually gets you somewhere), it\u0026rsquo;s all starting to work!\nNew permissions on HKEY_CURRENT_USER\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-06-05_gpo-behind-the-scenes/","summary":"\u003cp\u003eWell, to begin with we had this really weird problem that the \u003ca href=\"/posts/2008-06-04_windows-xp-embedded-windows-server-2003-and-gpo-settings-the-solution\" title=\"Windows XP Embedded and GPO settings\"\u003ethin clients\u003c/a\u003e as well as the terminal server would only load user based group policy if you are a \u003ca href=\"/posts/2014-08-16_windows-xp-embedded-and-gpo-settings-continued\" title=\"Windows XP Embedded and GPO settings (continued)\"\u003emember of the group of local administrators\u003c/a\u003e. While that\u0026rsquo;s ok for the thin clients (users can\u0026rsquo;t actually change something unless they log in as \u0026ldquo;Administrator\u0026rdquo; - don\u0026rsquo;t ask me why), it\u0026rsquo;s a real no-no on the terminal server.\u003c/p\u003e","title":"GPO (behind the scenes)"},{"content":"OK, so about an hour (yeah, yeah; I know .. I shouldn\u0026rsquo;t be working at that time, but it really gave me sleepless nights) ago, I finally figured out why the hell both my Windows XP Embedded thin clients as well as my Windows Server 2003 systems where showing this real weird behaviour when applying group policies, or more precise the user based configuration of a group policy.\nThe inspiration came to me after reading this and taking a look at regedit myself, where I noticed the entry \u0026quot; Permissions\u0026quot; for the first time ever since I\u0026rsquo;m using regedit. I also noticed, that the regedit permissions seem to be using the same groups, one would assign to NTFS resources.\nThat said, it really all boils down to the ntuser.dat (which IS HKEY_CURRENT_USER). As I created the profile with a different user than I am using it with (basically, I want ~12.000 users to use this one profile), I needed to change the permissions INSIDE regedit to include a group containing all these users. After that, any user could again merge the settings from ntuser.pol into HKEY_CURRENT_USERSoftwarePolicies, which in return gives you the joy of your fucking policies working again.\nTADAAAAAA! About two weeks worth of work spent for such a shitty thing, and noticing it when you\u0026rsquo;re off work \u0026ndash; priceless!\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-06-04_windows-xp-embedded-windows-server-2003-and-gpo-settings-the-solution/","summary":"\u003cp\u003eOK, so about an hour (yeah, yeah; I know .. I shouldn\u0026rsquo;t be working at that time, but it really gave me sleepless nights) ago, I finally figured out why the hell both my Windows XP Embedded thin clients as well as my Windows Server 2003 systems where showing this \u003ca href=\"/posts/2014-08-16_windows-xp-embedded-and-gpo-settings-continued\" title=\"Windows XP Embedded and GPO settings (continued)\"\u003ereal \u003cem\u003e\u003cstrong\u003eweird\u003c/strong\u003e\u003c/em\u003e behaviour\u003c/a\u003e when applying group policies, or more precise the user based configuration of a group policy.\u003c/p\u003e","title":"Windows XP Embedded, Windows Server 2003 and GPO settings (the solution)"},{"content":"Ok, so I ended up lying in bed for two hours, so I stood back up and searched for some stuff that floated my mind. The end result seems to be the following:\nVIA EPIA SN10000EG (199,30€) 2x Kingston ValueRAM SO-DIMM 2GB PC2-5300U CL5 (DDR2-667) (each 31,31€) Club 3D GeForce 7300 GT, 256MB DDR2, 2x DVI, TV-out, PCIe (CGNX-HG736) (55,00€) \u0026ndash; still need to find a riser card Transcend SSD/IDE 8GB (169,00€) 2x Samsung SyncMaster 204B, 20.1\u0026quot;, 1600x1200, VGA, DVI (LS20BRDBSQ) (each 309,00€) I still need to find a fitting power supply, but I\u0026rsquo;ll leave that for tomorrow. The above leads me with about 520,00€ for the \u0026ldquo;PC\u0026rdquo; and 680€ for the TFT\u0026rsquo;s (as I don\u0026rsquo;t have any). And that\u0026rsquo;ll give me a full silent (as in not a single moving part), quiet workstation for my desk.\nAnother thing I went looking, was the at the \u0026quot; Unquoted value\u0026quot; stuff repoman started printing. Thanks to GNi (and solar) I was able to compute a rather looooooong list quite fast \u0026hellip;\nFor my own remembrance, here\u0026rsquo;s the ( combined) command I used:\n1 2 3 4 5 6 $ for i in $( grep -i “unquoted variable” ~/repoman-full-$(date +%Y%m%d).log | cut -d -f4 |cut -d/ -f1-2 | sort -u ) do echo -n “$i ” echo “(herd:$(epkginfo $i | grep “Herd:” | cut -d: -f2 ), maintainer:$( epkginfo $i | grep “Maintainer:” | cut -d: -f2 | sed “s,@gentoo.org,,” ))” echo; grep -iE “$i/(.*)unquoted variable” repoman-full-$(date +%Y%m%d).log | sed -e “s,$i/,,” echo done \u0026gt; ~/repoman-quoting-$(date +%Y%m%d).log The real original (from `history`):\n1 2 3 $ repoman full 2\u0026gt;\u0026amp;1|tee ~/repoman-full-$(date +%Y%m%d).log $ grep -i “unquoted variable” ~/repoman-full-$(date +%Y%m%d).log | cut -d -f4 |cut -d/ -f1-2 | sort -u \u0026gt; ~/affected $ for i in $( repoman-quoting-$(date +%Y%m%d).log Oh, may come in handy too:\nrepoman-full-20080107.log (2,1M) as well as repoman-quoting-20080107.log (1,4M) ","permalink":"https://christian.blog.pakiheim.de/posts/2008-06-01_can-t-find-sheep-hsleep/","summary":"\u003cp\u003eOk, so I ended up lying in bed for two hours, so I stood back up and searched for some stuff that floated my mind. The end result seems to be the following:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eVIA EPIA SN10000EG (199,30€)\u003c/li\u003e\n\u003cli\u003e2x Kingston ValueRAM SO-DIMM 2GB PC2-5300U CL5 (DDR2-667) (each 31,31€)\u003c/li\u003e\n\u003cli\u003eClub 3D GeForce 7300 GT, 256MB DDR2, 2x DVI, TV-out, PCIe (CGNX-HG736) (55,00€) \u0026ndash; still need to find a riser card\u003c/li\u003e\n\u003cli\u003eTranscend SSD/IDE 8GB (169,00€)\u003c/li\u003e\n\u003cli\u003e2x Samsung SyncMaster 204B, 20.1\u0026quot;, 1600x1200, VGA, DVI (LS20BRDBSQ) (each 309,00€)\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eI still need to find a fitting power supply, but I\u0026rsquo;ll leave that for tomorrow. The above leads me with about 520,00€ for the \u0026ldquo;PC\u0026rdquo; and 680€ for the TFT\u0026rsquo;s (as I don\u0026rsquo;t have any). And that\u0026rsquo;ll give me a full silent (as in not a single moving part), quiet workstation for my desk.\u003c/p\u003e","title":"Can't find sheep^Hsleep"},{"content":"I\u0026rsquo;m not sure whether or not I blogged about this before, but here it is just for me to actually remember what, in which order I need to do. If you got the list in form of a csv file, simply do the following:\n1 2 3 4 wget -q http://tinyurl.com/4atkz7 -O - | grep \u0026#34;(\u0026#34; | cut -d\u0026#39;(\u0026#39; -f2 | cut -d\u0026#39;)\u0026#39; -f1 | awk \u0026#39;{ print tolower($1) }\u0026#39; \u0026gt; retirements for developer in $( \u0026lt; retirements ); do retire.py --metadata $developer /cvs/gentoo-x86/ | diffstat \u0026gt; ~/metadata.$developer done That\u0026rsquo;ll give you a detailed list of which metadata.xml need to be changed.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-05-28_retiring-people/","summary":"\u003cp\u003eI\u0026rsquo;m not sure whether or not I blogged about this before, but here it is just for me to actually remember what, in which order I need to do. If you got the list in form of a csv file, simply do the following:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewget -q http://tinyurl.com/4atkz7 -O - | grep \u0026#34;(\u0026#34; | cut -d\u0026#39;(\u0026#39; -f2 | cut -d\u0026#39;)\u0026#39; -f1 | awk \u0026#39;{ print tolower($1) }\u0026#39; \u0026gt; retirements\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efor developer in $( \u0026lt; retirements ); do\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   retire.py --metadata $developer /cvs/gentoo-x86/ | diffstat \u0026gt; ~/metadata.$developer\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edone\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThat\u0026rsquo;ll give you a detailed list of which metadata.xml need to be changed.\u003c/p\u003e","title":"Retiring people"},{"content":"One of my co-worker approached me today with a weird problem. Yesterday he had a disk in a 900GiB array failing which he replaced. After that, he run a rebuild/verification, fsck\u0026rsquo;ed the file system and tried to mount the volume again.\nApparently the mount produced a kernel oops (guess what, the 900GiB is running reiserfs), thus leaving the kernel tainted (or what do they call it ?). So he tried to reboot the box but it didn\u0026rsquo;t reboot. It started rebooting but then hung (as in not continuing the reboot). He tried to ssh back to the box, and it worked just fine.\nThis is where sysrq comes in handy.\n1 2 3 4 5 6 # This is gonna activate the sysrq echo 1 \u0026gt; /proc/sys/kernel/sysrq # Now, since we ain\u0026#39;t at a console, we can\u0026#39;t use the sysrq keys # (\u0026#34;b\u0026#34; for reboot, \u0026#34;o\u0026#34; for shutdown) echo b \u0026gt; /proc/sysrq-trigger That\u0026rsquo;ll restart the box, and cha-ching .. \u0026#x1f600;\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-05-24_rescuing-a-rebooting-machine-that-s-hanging/","summary":"\u003cp\u003eOne of my co-worker approached me today with a weird problem. Yesterday he had a disk in a 900GiB array failing which he replaced. After that, he run a rebuild/verification, fsck\u0026rsquo;ed the file system and tried to mount the volume again.\u003c/p\u003e\n\u003cp\u003eApparently the mount produced a kernel oops (guess what, the 900GiB is running reiserfs), thus leaving the kernel tainted (or what do they call it ?). So he tried to reboot the box but it didn\u0026rsquo;t reboot. It started rebooting but then hung (as in not continuing the reboot). He tried to ssh back to the box, and it worked just fine.\u003c/p\u003e","title":"Rescuing a rebooting machine that's hanging"},{"content":"Here I am, preparing our environment for the first (of hopefully many) tester for our upcoming VTL project. So I ended up installing the ISC and Administration Center for Tivoli Storage Manager on a 64bit guest (that is SLES10 for AMD64), just because I forgot to include support for later versions with our current running one. Guess what, na- na na na na. Exactly, didn\u0026rsquo;t work, the same errors I got while trying it before in a virtual environment. \u0026ldquo;Portlet is not available.\u0026rdquo;\nSo I ended up redoing the whole thing on a 32bit guest and guess what \u0026hellip; bada-bing. works \u0026hellip; \u0026#x1f937; I don\u0026rsquo;t know whether or not that\u0026rsquo;s a surprising thing .. but what surprises me, is that I do have a working 64bit Integrated Solutions Console and Administration Center running, only difference is that one is running on real hardware.\nAnyway, after looking on how the Integrated Solutions Console (that is the Websphere environment - yes yuck) did it\u0026rsquo;s own start up after boot (you know, I\u0026rsquo;d like to restart an application if it\u0026rsquo;s hanging without the need to reboot the whole box), I found this particular line of code:\n1 isc6:23:boot:/opt/tivoli/isc/PortalServer/bin/startISC.sh ISC_Portal And since I was lazy (and it was already Friday afternoon), I ended up writing a small init script which rids you of the need of such a ugly way to start a service.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 #!/bin/sh # # /etc/init.d/isc # ### BEGIN INIT INFO # Provides: isc # Required-Start: network # Should-Start: # Required-Stop: network # Default-Start: 2 3 5 # Default-Stop: # Description: Start the Tivoli Integrated Solutions console ### END INIT INFO . /etc/sysconfig/isc BINDIR=/sbin . /etc/rc.status rc_reset case \u0026#34;$1\u0026#34; in start) echo -n \u0026#34;Starting Tivoli Integrated Solutions Console server\u0026#34; startproc -p /var/run/tivoli-isc.pid $ISC_INSTALL/PortalServer/bin/startISC.sh ISC_Portal 2\u0026gt;\u0026amp;1 \u0026gt;/var/log/tivoli-isc.log # I know, this is *real* ugly PID=$( tail -n 1 /var/log/tivoli-isc.log | cut -d -f10 ) echo $PID \u0026gt;/var/run/tivoli-isc.pid rc_status -v ;; stop) echo -n \u0026#34;Stopping Tivoli Integrated Solutions Console server\u0026#34; $ISC_INSTALL/PortalServer/bin/stopISC.sh ISC_Portal $ISC_ADMIN $ISC_PASSWORD 2\u0026gt;\u0026amp;1 \u0026gt;/var/log/tivoli-isc.log rc_status -v ;; restart) $0 stop $0 start rc_status ;; status) echo -n \u0026#34;Tivoli Integrated Solutions Console server:\u0026#34; checkproc -p /var/run/tivoli-isc.pid $ISC_INSTALL/AppServer/java/bin/java rc_status -v ;; *) echo \u0026#34;Usage: $0 {start|stop|status|restart}\u0026#34; exit 1 ;; esac rc_exit And the corresponding sysconfig file:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ## Type: string ## Default: iscadmin ## Config: \u0026#34;\u0026#34; ## ServiceRestart: isc # # Adminstration user for the Portal ISC_ADMIN=\u0026#34;iscadmin\u0026#34; ## Type: string ## Default: iscadmin ## Config: \u0026#34;\u0026#34; ## ServiceRestart: isc # # Adminstration user password for the Portal ISC_PASSWORD=\u0026#34;iscadmin\u0026#34; ## Type: string ## Default: /opt/ISC/601 ## Config: \u0026#34;\u0026#34; ## ServiceRestart: isc # # Full path to the ISC Portal installation root directory ISC_INSTALL=\u0026#34;/opt/tivoli/isc\u0026#34; Et voilá, it\u0026rsquo;s done. Now just a ` chkconfig -a isc\u0026rsquo; and it\u0026rsquo;s gonna startup nice and easy (when it really should) via the normal service startup and not get spawned from the inittab.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-05-23_ibm-tivoli-integrated-solutions-console/","summary":"\u003cp\u003eHere I am, preparing our environment for the first (of hopefully many) tester for our upcoming VTL project. So I ended up installing the ISC and Administration Center for Tivoli Storage Manager on a 64bit guest (that is SLES10 for AMD64), just because I forgot to include support for later versions with our current running one. Guess what, \u003cem\u003ena\u003c/em\u003e- \u003cem\u003ena\u003c/em\u003e \u003cem\u003ena\u003c/em\u003e \u003cem\u003ena\u003c/em\u003e \u003cem\u003ena\u003c/em\u003e. Exactly, didn\u0026rsquo;t work, the same errors I got while trying it before in a virtual environment. \u0026ldquo;Portlet is not available.\u0026rdquo;\u003c/p\u003e","title":"IBM (Tivoli) Integrated Solutions Console"},{"content":"If you\u0026rsquo;re using a 2.6 based distribution, the FC HBA (or more correctly the corresponding driver) should create entries in /sys/class/scsi_host. Now you only need to get the host-number (basically the # of the host bus adapter) and you can get started ..\nSimply doing this, is going to tell the FC HBA \u0026ldquo;rescan\u0026rdquo; and discover new devices ..\n1 echo \u0026#34;1\u0026#34; \u0026gt; /sys/class/fc_host/host/issue_lip That should do the trick, and you should be able to get udev to recognize the new devices attached via FibreChannel without the need to reboot the whole box (which might be a bit tricky).\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-05-19_getting-a-fc-hba-to-rescan-it-s-attached-devices/","summary":"\u003cp\u003eIf you\u0026rsquo;re using a 2.6 based distribution, the FC HBA (or more correctly the corresponding driver) should create entries in \u003cem\u003e/sys/class/scsi_host\u003c/em\u003e. Now you only need to get the host-number (basically the # of the host bus adapter) and you can get started ..\u003c/p\u003e\n\u003cp\u003eSimply doing this, is going to tell the FC HBA \u0026ldquo;rescan\u0026rdquo; and discover new devices ..\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eecho \u0026#34;1\u0026#34; \u0026gt; /sys/class/fc_host/host/issue_lip\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThat should do the trick, and you should be able to get udev to recognize the new devices attached via FibreChannel without the need to reboot the whole box (which might be a bit tricky).\u003c/p\u003e","title":"Getting a FC HBA to rescan it's attached devices"},{"content":"Well, as some people already figured out; yesterday was my birthday. Chrissy noted it on my blog, as well as about every channel we\u0026rsquo;re together in (so did Chris); so thanks a lot for that \u0026#x1f609;\nAnyway, Saturday morning as I was forced to head downstairs due to my aunt calling (that was at 9am), my brother managed to take a shot at the presents as well as something else:\nCat\u0026rsquo;se ontop of presents\nWell, ain\u0026rsquo;t he cute ? He\u0026rsquo;s always been particularly fond of lying around on paper. Well, anyway I had a lil\u0026rsquo; birthday party planned in combination of myself and a friend of mine, so I invited some of my friends from work over to our place. Turns out, it was quite a nice gathering.\nThem benches!\nOur \u0026lsquo;hyper duper\u0026rsquo; barbeque grill\nI had lots of fun that evening (well, my birthday is the only day in the year I allow myself to get drunk!) apparently, so did all the others.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-04-20_april-19th/","summary":"\u003cp\u003eWell, as some people already figured out; yesterday was my birthday. Chrissy noted it on my blog, as well as about every channel we\u0026rsquo;re together in (so did Chris); so thanks a lot for that \u0026#x1f609;\u003c/p\u003e\n\u003cp\u003eAnyway, Saturday morning as I was forced to head downstairs due to my aunt calling (that was at 9am), my brother managed to take a shot at the presents as well as something else:\u003c/p\u003e","title":"April 19th"},{"content":"Well, after a loooong time of trying to get the modules and all the other stuff (read: init-script for the guest daemon and modules) working, I think I\u0026rsquo;m about there.\nI finally fixed a long-standing issue, with the postinst/prerm scripts, and the tools should be about ready. Gonna try and send it Daniel Baumann\u0026rsquo;s way (that is the Debian Maintainer), for proper inclusion into Lenny.\nI (successfully) tried splitting the Xorg parts from the \u0026quot; normal\u0026quot; open-vm-tools, as I usually don\u0026rsquo;t want Xorg installed on any of my virtual machines. Thus leaving me with open-vm-tools, open-vm-modules and open-vm-toolbox (and open-vm-source) as a list of packages one could install.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-04-20_open-vm-tools-for-debian-etch/","summary":"\u003cp\u003eWell, after a loooong time of trying to get the modules and all the other stuff (read: init-script for the guest daemon and modules) working, I think I\u0026rsquo;m about there.\u003c/p\u003e\n\u003cp\u003eI finally fixed a long-standing issue, with the postinst/prerm scripts, and the tools should be about ready. Gonna try and send it Daniel Baumann\u0026rsquo;s way (that is the Debian Maintainer), for proper inclusion into Lenny.\u003c/p\u003e\n\u003cp\u003eI (successfully) tried splitting the Xorg parts from the \u0026quot; \u003cem\u003enormal\u003c/em\u003e\u0026quot; open-vm-tools, as I usually don\u0026rsquo;t want Xorg installed on \u003cem\u003e\u003cstrong\u003eany\u003c/strong\u003e\u003c/em\u003e of my virtual machines. Thus leaving me with open-vm-tools, open-vm-modules and open-vm-toolbox (and open-vm-source) as a list of packages one could install.\u003c/p\u003e","title":"open-vm-tools for Debian Etch"},{"content":"\u0026hellip; I\u0026rsquo;d break a butterfly on a wheel \u0026hellip; I was coming out of the office, and found my car this way:\nUp close\nBirdie view\nWell happy me, I had some sort of cleanup detail for 20:00 local time (as in get all that birdie poooo of my damn roof!), and surprisingly once I was finished cleaning all the shit up, it started raining. Now, I\u0026rsquo;m never, * ever* gonna park below that dove/whateverdamndevilbirdyouare housing tree no more!\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-04-19_that-s-why/","summary":"\u003cp\u003e\u0026hellip; I\u0026rsquo;d break a butterfly on a wheel \u0026hellip; I was coming out of the office, and found my car this way:\u003c/p\u003e\n\u003cp\u003e\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2008/08/img_0902.jpg\"\n         alt=\"Up close\" width=\"500\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eUp close\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2008/08/img_0903.jpg\"\n         alt=\"Birdie view\" width=\"500\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eBirdie view\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\nWell happy me, I had some sort of cleanup detail for 20:00 local time (as in get all that birdie poooo of my damn roof!), and surprisingly once I was finished cleaning all the shit up, it started raining. Now, I\u0026rsquo;m never, * \u003cstrong\u003eever\u003c/strong\u003e* gonna park below that dove/whateverdamndevilbirdyouare housing tree no more!\u003c/p\u003e","title":"That's why ---"},{"content":"As Mike wrote about his experiences with hardware vendors, I\u0026rsquo;m gonna devote this here post to my favorite software company in the world. We recently bought two copies of a software called \u0026quot; 2X Application Server Enterprise Edition\u0026quot;. As one would think from reading the spe cs of the software, it\u0026rsquo;s near a Citrix solution (which it is, at least for a small part); but in return it\u0026rsquo;s faaaar away concerning the price. Just so you get an idea, about what I\u0026rsquo;m meaning with \u0026quot; faaar\u0026quot;:\n1 2 3 4 5 6 Windows Server 2003: Standard Edition: 2 * 91,00 CAL: 50 * 6,00 Terminal Server CAL: 50 * 17,00 ___________ 1.332,00 The above are fixed costs, you need them anyway as both Citrix as well as the 2X solution is only working * on top* of Windows Server 2003 Terminal Services.\nNow, here\u0026rsquo;s the real comparison between 2X Application Server \u0026amp; Loadbalancer and Citrix XenApp Platinum Edition:\n1 2 2X 2 * 1510,00 = 3.020,00 Citrix 50 * 393,00 = 19.650,00 While 2X is licensed per terminal server, XenApp is licensed per user. As you can see from the above prices, the 2X solution is roughly 1/6 of the Citrix XenApp solution.\nNow, as we had a slight problem with the 2X Application Client (first this weird error, \u0026quot; Error Code: [01/0000001E] The published application couldn\u0026rsquo;t be started.\u0026quot; which I admit was an error on our behalf, by copying the user registry into HKEY_LOCAL_MACHINE) I was already annoyed by their support.\nNow, when they released their version 6 of the 2X Application Server/Client software, I tried producing a proof-of-concept for our installation, which improved certain things (like finally having Single-Sign-On or SSO for those of you who like buzzwords), and I tested it out together with one of my trainees (who\u0026rsquo;s having the subject \u0026quot; thin clients and terminal services\u0026quot; for his final paper of his education).\nNow, I stumbled upon this great feature of the Microsoft Remote Desktop Console (mstsc) Version 6.0, called \u0026quot; Drives that I connect to later\u0026quot;, which is basically forwarding drives, which have been added to the computer, * after* the remote session has been established. Once you enable the check mark (before connecting to the remote session obviously), the drive is instantly forwarded to the remote session, and I figured why not try that with the 2X solution. Now, we tried and tried, reinstalled the terminal server and the 2X stuff along the way, and tried again with a plain machine, and it still wasn\u0026rsquo;t working. So I first tried mailing the German key account manager, which in turn told me, the software already supported it \u0026hellip;\u0026hellip; uhm, I just tried, and it doesn\u0026rsquo;t.\nSo, OK. We tried again. Reinstalled the terminal server, reinstalled the Windows XP workstation, installed 2X and stuff, and tried it again. And still didn\u0026rsquo;t work. OK, so I went ahead, asked again. The key account manager asked me which OS and version of the RDP we were using, and I told her we\u0026rsquo;d be using XPe and RDP 6.0.6000. She forwarded those to the technical support, opened a support request in their \u0026quot; Support center\u0026quot;, where one of the technical assistants in return told me * yet* again, it should be working.\nAdditionally he told me kindly, that I could add drives later, or else I should provide them with a detailed description of what exactly I imagined it doing. So I went ahead, and created a \u0026quot; demo\u0026quot; of some kind, using Adobe Captivate demonstrating them what I was seeing. I also told them, that I wanted the 2X client to simply support that feature. Additonally it works when using plain RDP, but doesn\u0026rsquo;t when using 2X, which in return should tell them that their software is at fault, and not my terminal server. OK, when I created the first demo, I had the USB drive still attached to my work computer, which in turn got forwarded to the remote session when establishing the connection. I guess that was a \u0026rsquo;lil bit embarrassing, so I created yet another demo.\nAs you can see from that demo, I launched three separate windows. One showing my local workplace, one the workplace of the terminal server launched in RDP, and one window showing the remote workplace launched via 2X. That apparently was a bit much for the 2X support guys, as they told me I\u0026rsquo;d be only showing the RDP window, but not the 2X window. * WTF* Didn\u0026rsquo;t I open just three windows, each showing something different ?\nAfter that I\u0026rsquo;ve been told, they couldn\u0026rsquo;t reproduce it with their 2X Client. The technical assistant also told me, that due to my dual screen layout (my complete screen resolution is something like 2560x1024) he could only see half of what I\u0026rsquo;m doing. So I went ahead, and created * yet* another demo (it\u0026rsquo;s actually a six-part flash video, due to Captivate switching to \u0026ldquo;Full-Motion\u0026rdquo; mode .. main, 1, 2, 3, 4, 5).\nAfter two separate tries to upload the 35M file to their support center, which failed due to only allowing 8M uploads, I uploaded it to my private user site. Some hours later, the technical assistant told me, I should press \u0026ldquo;F5\u0026rdquo; for a explorer refresh or View -\u0026gt; Refresh in the 2X Client. I told him, that after trying both the USB drive still isn\u0026rsquo;t showing up.\nAfter an hour he wrote me back, telling me that after extensive tests, that I should open notepad in the remote (2X) session and see whether or not the drive is appearing there.\nThat\u0026rsquo;s it so far. Initially I wanted to only post this if they couldn\u0026rsquo;t figure it out, and only * after* I talked to the key account manager again, but I\u0026rsquo;m rather tired. Maybe if they are reading this: I\u0026rsquo;m fscking TIRED!\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-04-14_software-support-and-key-account-managers/","summary":"\u003cp\u003eAs Mike wrote about his \u003ca href=\"http://blogs.gentoo.org/kingtaco/2008/03/18/a_tale_of_two_vendors\"\u003eexperiences with hardware vendors\u003c/a\u003e, I\u0026rsquo;m gonna devote this here post to my favorite software company in the world. We recently bought two copies of a software called \u0026quot; \u003cem\u003e2X Application Server Enterprise Edition\u003c/em\u003e\u0026quot;. As one would think from reading the \u003ca href=\"http://www.2x.com/applicationserver/\"\u003espe\u003c/a\u003e \u003ca href=\"http://www.2x.com/loadbalancer/\"\u003ecs\u003c/a\u003e of the software, it\u0026rsquo;s near a Citrix solution (which it is, at least for a small part); but in return it\u0026rsquo;s faaaar away concerning the price. Just so you get an idea, about what I\u0026rsquo;m meaning with \u0026quot; \u003cem\u003efaaar\u003c/em\u003e\u0026quot;:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e6\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eWindows Server 2003:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eStandard Edition:        2 * 91,00\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCAL:                    50 *  6,00\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eTerminal Server CAL:    50 * 17,00\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                       ___________\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                          1.332,00\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eThe above are fixed costs, you need them anyway as both Citrix as well as the 2X solution is only working * \u003cstrong\u003eon top\u003c/strong\u003e* of Windows Server 2003 Terminal Services.\u003c/p\u003e\n\u003cp\u003eNow, here\u0026rsquo;s the real comparison between \u003cem\u003e2X Application Server \u0026amp; Loadbalancer\u003c/em\u003e and \u003cem\u003eCitrix XenApp Platinum Edition\u003c/em\u003e:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-1-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2X               2 * 1510,00 =  3.020,00\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCitrix          50 *  393,00 = 19.650,00\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eWhile 2X is licensed per terminal server, \u003ca href=\"http://shop.mensys.nl/cgi-bin/db2www/mns_art2.d2w/report?catname=CitrixXenAppPlatinumEdition_LP\u0026amp;username=\u0026amp;i1=\u0026amp;o=\u0026amp;x=16:56:52\u0026amp;Search=XEN%20APP\u0026amp;C=250\"\u003eXenApp\u003c/a\u003e is licensed per user. As you can see from the above prices, the 2X solution is roughly 1/6 of the Citrix XenApp solution.\u003c/p\u003e\n","title":"Software support and key account managers"},{"content":"Well, we do appear to be having some strange load problems with our main TYPO3 box hosting several home pages of the local universities, as you can see below.\nLOAD on t3node1 between 05:00-19:00 on 2008/04/07\nWe repeatedly tried to figure out which of them was the one responsible, but neither I nor the other Unix sysadmin knew a better way to figure out the load each TYPO3 installation was causing (since there ain\u0026rsquo;t no phptop or something similar). But since today the new semester started, we figured it might be good to finally figure which one it was. And a few minutes (as in one or two) wouldn\u0026rsquo;t be much of a problem compared to the advantage we\u0026rsquo;re getting out of it.\nAs a comparison, here\u0026rsquo;s the \u0026quot; normal\u0026quot; load for the last week:\nLOAD on t3node1 between 2008/03/31 and 2008/04/07\nSo as a last resort (because of said load problems), we simply deactivated one vHost after another, until the load started to relax. Unsurprisingly it was one of the installations that had problems before. Let\u0026rsquo;s see whether or not the people over at said university are insightful or not \u0026hellip; \u0026#x1f606;\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-04-08_typo3-hogging/","summary":"\u003cp\u003eWell, we do appear to be having some strange load problems with our main TYPO3 box hosting several home pages of the local universities, as you can see below.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2008/08/t3node1_load_05-19_07_04_2008.png\"\n         alt=\"LOAD on t3node1 between 05:00-19:00 on 2008/04/07\" width=\"500\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eLOAD on t3node1 between 05:00-19:00 on 2008/04/07\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eWe repeatedly tried to figure out which of them was the one responsible, but neither I nor the other Unix sysadmin knew a better way to figure out the load each TYPO3 installation was causing (since there ain\u0026rsquo;t no phptop or something similar). But since today the new semester started, we figured it might be good to finally figure which one it was. And a few minutes (as in one or two) wouldn\u0026rsquo;t be much of a problem compared to the advantage we\u0026rsquo;re getting out of it.\u003c/p\u003e","title":"TYPO3 hogging"},{"content":"Well, it\u0026rsquo;s April. And usually when it\u0026rsquo;s April, there\u0026rsquo;s April\u0026rsquo;s weather. In the morning I was rather surprised by the weather.\nAnd after I picked up Michel, we some when arrived at work (that is one hour later), we had our own adventure park in front of the work place:\nCollapsed trees\nApparently, the trees in at the entrance collapsed (thanks to Michel for the pictures), so we had to make our way through somehow \u0026hellip; was rather funny way to start the day \u0026hellip; \u0026#x1f937;\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-04-08_april-weather/","summary":"\u003cp\u003eWell, it\u0026rsquo;s April. And usually when it\u0026rsquo;s April, there\u0026rsquo;s April\u0026rsquo;s weather. In the morning I was rather surprised by the weather.\u003c/p\u003e\n\u003cp\u003eAnd after I picked up Michel, we some when arrived at work (that is one hour later), we had our own adventure park in front of the work place:\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2008/08/dsc00302.jpg\"\n         alt=\"Collapsed trees\" width=\"500\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eCollapsed trees\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eApparently, the trees in at the entrance collapsed (thanks to \u003ca href=\"http://blog.devnu11.net\"\u003eMichel\u003c/a\u003e for the pictures), so we had to make our way through somehow \u0026hellip; was rather funny way to start the day \u0026hellip; \u0026#x1f937;\u003c/p\u003e","title":"April weather"},{"content":"Well, as we do have quite a few custom built RPM\u0026rsquo;s, I was searching for a new solution to manage the repo(s). Currently I do have a single repository per distribution.\nOne thing one needs to know about createrepo (from createrepo), it doesn\u0026rsquo;t support this type of thing in the first place. So I had to come up with another way of doing it. First, I created a proper layout (much like the Debian Official Repository layout):\ndists/ sle9/ (contains the repodata for SLES 9) sle10/ (contains the repodata for SLES 10) esx35/ (contains the repodata for VMware ESX 3.5) i586/ noarch/ ppc64/ src/ x86_64/ As you can see, this is gonna get tricky in regards to managing the RPMS in a single place, while keeping the distributions apart.\nSo I went ahead, rewrote the script that perviously managed our two repositories for SLES 9/10. The limitation I pointed out above (keeping the RPMS in a single place), is easily overcome by using bind-mounts (sure it looks messy).\nNow the only problem I\u0026rsquo;m still facing is that createrepo isn\u0026rsquo;t even looking at the excludes when it\u0026rsquo;s called by the script. But if I pass the raw command line the script is calling on a simple shell, it works like a charm .. So I don\u0026rsquo;t have the slightest clue right now, why in gods name it ain\u0026rsquo;t working \u0026hellip; \u0026#x1f61e;\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-04-02_creating-multi-distribution-rpm-xml-repositories/","summary":"\u003cp\u003eWell, as we do have quite a few custom built RPM\u0026rsquo;s, I was searching for a new solution to manage the repo(s). Currently I do have a single repository per distribution.\u003c/p\u003e\n\u003cp\u003eOne thing one needs to know about createrepo (from \u003ca href=\"http://linux.duke.edu/projects/metadata/\"\u003ecreaterepo\u003c/a\u003e), it doesn\u0026rsquo;t support this type of thing in the first place. So I had to come up with another way of doing it. First, I created a proper layout (much like the Debian Official Repository layout):\u003c/p\u003e","title":"Creating multi-distribution RPM/XML repositories"},{"content":"As I was kinda bored after work today, I had a closer look at what I saw during my fuckup in the morning. Well, Steve said, that when he looked at metadata.xml it\u0026rsquo;d be \u0026quot; really common\u0026quot; .. still that isn\u0026rsquo;t making it right ..\nThere is a reason we do have a herds.xml (exactly for the reason to associate people with packages, and that\u0026rsquo;s what the tag is for in metadata.xml) file. So after a preliminary look through the repository, here are the winners:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 700\t: perl 126\t: xemacs 63\t: haskell 47\t: sound 32\t: ha-cluster 31\t: crypto 19\t: desktop-misc 16\t: netmon 15\t: forensics 13\t: web-apps 8\t: mips 8\t: app-backup 7\t: kde 6\t: tcltk 6\t: net-im 6\t: media-tv 6\t: dev-embedded 5\t: voip 5\t: theology 5\t: samba 5\t: net-p2p 4\t: sparc 4\t: java 4\t: graphics 2\t: net-mail 2\t: kernel 2\t: fonts 2\t: embedded 2\t: cpp 1\t: x11 1\t: wxwidgets 1\t: www-servers 1\t: tex 1\t: shell-tools 1\t: sh 1\t: sgml 1\t: sci 1\t: python 1\t: proaudio 1\t: php 1\t: media-optical 1\t: kerberos 1\t: hp-cluster 1\t: gentopia 1\t: amd64 Don\u0026rsquo;t know how accurate that list is, but you can check it for yourself. The commands I\u0026rsquo;ve used are these:\n1 2 3 4 5 for i in $( \u0026lt; ../herds.list ); do grep --exclude=eclass --exclude=CVS --exclude=profiles --exclude=skel.* -R \u0026#34;$i@gentoo.org\u0026#34; /cvs/gentoo-x86/* ; done \u0026gt; redundant-metadata-xml.list 1 2 3 4 5 6 for i in $( \u0026lt; herds.list ); do echo -e \u0026#34; $( grep \u0026#34;$i@gentoo.org\u0026#34; ~/public_html/redundant-metadata-xml.list | wc -l )t: $i\u0026#34;; done | grep -v \u0026#34;^ 0\u0026#34; | sort -nr \u0026gt; public_html/redundant-metadata-xml.overview While herds.list holds a list (separated by n) with all the herds there are. The raw files are here and here and here. Knock yourself out!\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-03-15_metadata-xml-the-second/","summary":"\u003cp\u003eAs I was kinda bored after work today, I had a closer look at what I saw during my fuckup in the morning. Well, \u003ca href=\"http://wonkabar.org\"\u003eSteve\u003c/a\u003e \u003ca href=\"/posts/2008-03-14_metadata-xml-the-third\" title=\"metadata.xml\"\u003esaid\u003c/a\u003e, that when he looked at \u003cem\u003emetadata.xml\u003c/em\u003e it\u0026rsquo;d be \u0026quot; \u003cstrong\u003ereally common\u003c/strong\u003e\u0026quot; .. still that isn\u0026rsquo;t making it right ..\u003c/p\u003e\n\u003cp\u003eThere is a reason we do have a \u003cem\u003eherds.xml\u003c/em\u003e (exactly for the reason to associate people with packages, and that\u0026rsquo;s what the \u003c!-- raw HTML omitted --\u003e tag is for in metadata.xml) file. So after a preliminary look through the repository, here are the winners:\u003c/p\u003e","title":"metadata-xml (the second)"},{"content":"So Petteri came up with a nifty python script ( local), which in return spit out this. Which generated a rather complete list ( local), that looks like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 700: perl 569: maintainer-needed 128: media-video 126: xemacs 47: sound 32: ha-cluster 32: crypto 19: desktop-misc 16: netmon 15: forensics 13: web-apps 10: pam-bugs 8: vserver-devs 8: mips 8: embedded 8: app-backup 8: apache-bugs 8: alsa-bugs 7: net-im 7: kde 6: tcltk 6: media-tv 6: dev-embedded 5: voip 5: theology 5: samba 5: net-p2p 5: freedesktop-bugs 4: sparc 4: java 4: graphics 2: net-mail 2: ldap-bugs 2: kernel 2: fonts 2: cpp 1: x11 1: wxwidgets 1: www-servers 1: tex 1: shell-tools 1: sgml 1: sci 1: qmail-bugs 1: python 1: proaudio 1: media-optical 1: kerberos 1: hp-cluster 1: amd64 ","permalink":"https://christian.blog.pakiheim.de/posts/2008-03-14_metadata-xml-the-third/","summary":"\u003cp\u003eSo Petteri came up with a nifty python script ( \u003ca href=\"http://chrischie.users.barfoo.org/gentoo/QA/redundant-metadata/dP9gSU44.txt\"\u003elocal\u003c/a\u003e), which in return spit out this. Which generated a rather complete list ( \u003ca href=\"http://chrischie.users.barfoo.org/gentoo/QA/redundant-metadata/dxzdrF36.txt\"\u003elocal\u003c/a\u003e), that looks like this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-30\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-30\"\u003e30\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-31\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-31\"\u003e31\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-32\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-32\"\u003e32\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-33\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-33\"\u003e33\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-34\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-34\"\u003e34\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-35\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-35\"\u003e35\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-36\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-36\"\u003e36\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-37\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-37\"\u003e37\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-38\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-38\"\u003e38\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-39\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-39\"\u003e39\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-40\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-40\"\u003e40\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-41\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-41\"\u003e41\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-42\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-42\"\u003e42\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-43\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-43\"\u003e43\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-44\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-44\"\u003e44\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-45\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-45\"\u003e45\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-46\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-46\"\u003e46\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-47\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-47\"\u003e47\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-48\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-48\"\u003e48\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-49\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-49\"\u003e49\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-50\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-50\"\u003e50\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e700\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e     \u003cspan class=\"n\"\u003eperl\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e569\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e     \u003cspan class=\"n\"\u003emaintainer\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eneeded\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e128\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e     \u003cspan class=\"n\"\u003emedia\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003evideo\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e126\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e     \u003cspan class=\"n\"\u003exemacs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e47\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e      \u003cspan class=\"n\"\u003esound\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e32\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e      \u003cspan class=\"n\"\u003eha\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ecluster\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e32\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e      \u003cspan class=\"n\"\u003ecrypto\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e19\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e      \u003cspan class=\"n\"\u003edesktop\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003emisc\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e16\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e      \u003cspan class=\"n\"\u003enetmon\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e15\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e      \u003cspan class=\"n\"\u003eforensics\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e13\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e      \u003cspan class=\"n\"\u003eweb\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eapps\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e10\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e      \u003cspan class=\"n\"\u003epam\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ebugs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e8\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003evserver\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003edevs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e8\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003emips\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e8\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003eembedded\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e8\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ebackup\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e8\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003eapache\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ebugs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e8\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003ealsa\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ebugs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e7\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003enet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eim\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e7\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003ekde\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e6\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003etcltk\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e6\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003emedia\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003etv\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e6\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003edev\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eembedded\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003evoip\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003etheology\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003esamba\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003enet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ep2p\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003efreedesktop\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ebugs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003esparc\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003ejava\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003egraphics\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003enet\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003email\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003eldap\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ebugs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003ekernel\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003efonts\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003ecpp\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003ex11\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003ewxwidgets\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003ewww\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eservers\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003etex\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003eshell\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003etools\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003esgml\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003esci\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003eqmail\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ebugs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003epython\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003eproaudio\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003emedia\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eoptical\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003ekerberos\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003ehp\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ecluster\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e       \u003cspan class=\"n\"\u003eamd64\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"metadata-xml (the third)"},{"content":"\u0026hellip; that\u0026rsquo;s the question. I\u0026rsquo;ve been thinking lots and lots about my involvement with our \u0026quot; beloved\u0026quot; distribution.\nI talked to some of the users (that is Gordon), some fellow developers (hello Christina, Łukasz, solar, Jorge, Anders) about whether or not I\u0026rsquo;m actually still wanted and/or needed. Turns out, the collective opinion is, that I am fun to have around ( \u0026#x1f937; don\u0026rsquo;t ask me why, I don\u0026rsquo;t find myself particularly funny/amusing) and that\u0026rsquo;d I\u0026rsquo;d be the person to have around.\nThat being said, I still do have some things on my agenda (they haven\u0026rsquo;t changed .. like getting healthier - as in heading to the gym; getting a better paid job; getting my own life; getting some friends), which are going to jockey with those Gentoo interests.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-03-10_to-be-or-not-to-be/","summary":"\u003cp\u003e\u0026hellip; that\u0026rsquo;s the question. I\u0026rsquo;ve been thinking lots and lots about my involvement with our \u0026quot; \u003cem\u003ebeloved\u003c/em\u003e\u0026quot; distribution.\u003c/p\u003e\n\u003cp\u003eI talked to some of the users (that is Gordon), some fellow developers (hello Christina, Łukasz, solar, Jorge, Anders) about whether or not I\u0026rsquo;m actually still wanted and/or needed. Turns out, the collective opinion is, that I am fun to have around ( \u0026#x1f937; don\u0026rsquo;t ask me why, I don\u0026rsquo;t find myself particularly funny/amusing) and that\u0026rsquo;d I\u0026rsquo;d be the person to have around.\u003c/p\u003e","title":"To be or not to be ---"},{"content":"As the guys over at FreeWyseMonkeys demonstrated with JoinDomain.zip, it ain\u0026rsquo;t hard to integrate a Windows XP Embedded system into Active Directory.\nYou basically need this:\nA system powered by Windows XP Embedded netdom.exe (from any Windows XP - SP2 in your MUI language) some know-how, on how to use netdom to integrate it into your AD Everything else is already present on the Windows XP Embedded systems I\u0026rsquo;ve seen. Then let\u0026rsquo;s get it on !\nFirst, copy over the netdom.exe to your XPe, and then run the following command:\n1 2 3 4 5 6 netdom.exe join /d:barfoo.org /OU:\u0026#34;OU=Thinclients,OU=Computer,DC=barfoo,DC=org\u0026#34; %COMPUTERNAME% /ud:Administrator /pd:P@ssw0rd /uo:Administrator /po:P@ssw0rd /verbose Here as a note:\nud and pd is a User/Password inside your Active Directory with the permissions to create new computer accounts uo and po is a User/Password with administrative rights on the Windows XP Embedded device After that, you just need to reboot, Et Voilà! the system is present in your Active Directory. Just be aware, if you\u0026rsquo;re using a localized Windows XP Embedded by Wyse, make sure to contact your fellow Wyse Support, as the is a bug with the MUI stuff needed for the domain logon.\nAlso, as yet-another side note: The default Administator password is mentioned in this Knowledge Base entry.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-03-07_integrating-windows-xpe-into-active-directory/","summary":"\u003cp\u003eAs the guys over at \u003ca href=\"http://www.freewysemonkeys.com\"\u003eFreeWyseMonkeys\u003c/a\u003e demonstrated with JoinDomain.zip, it ain\u0026rsquo;t hard to integrate a Windows XP Embedded system into Active Directory.\u003c/p\u003e\n\u003cp\u003eYou basically need this:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eA system powered by Windows XP Embedded\u003c/li\u003e\n\u003cli\u003enetdom.exe (from any Windows XP - SP2 in your MUI language)\u003c/li\u003e\n\u003cli\u003esome know-how, on how to use netdom to integrate it into your AD\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eEverything else is already present on the Windows XP Embedded systems I\u0026rsquo;ve seen. Then let\u0026rsquo;s get it on !\u003c/p\u003e","title":"Integrating Windows XPe into Active Directory"},{"content":"Well some people apparently completely don\u0026rsquo;t understand the use of a backup client like dsmc, additionally they don\u0026rsquo;t seem to have the slightest clue on how to draw up a \u0026ldquo;clever\u0026rdquo; backup solution.\nLemme describe the situation for you. We do have two Solaris systems at work, housing our mailing system(s). Now apparently, people are unable to install the Tivoli Storage Manager Client on Solaris (or get it working properly - which people are blaming on the software not working).\nNow, they draw up this insane plan \u0026hellip; We do have about 900GiB of mail space, which is currently located on our SAN. So people decide, they don\u0026rsquo;t want the backup client on their system, as it\u0026rsquo;s slow (which I do agree to, dsmc is slow for large amounts of data - especially if it\u0026rsquo;s 900GiB in 15MiB parts).\nSo they think of something like this:\nAttach a second disk to the mail system The mail server then creates a tar file (at which iteration I can\u0026rsquo;t say, but from the size of the volume, I\u0026rsquo;d figure once a day) on the secondary disk The mail server exports said disk via NFS Another, semi-independent system then imports said disk via NFS, while also housing the Tivoli Storage Manager client, to backup that big tar-file \u0026hellip; So much for well planned backup solutions \u0026hellip;\u0026hellip;\u0026hellip; \u0026#x1f606;\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-03-07_backup-solutions/","summary":"\u003cp\u003eWell some people apparently completely \u003cem\u003e\u003cstrong\u003edon\u0026rsquo;t\u003c/strong\u003e\u003c/em\u003e understand the use of a backup client like dsmc, additionally they don\u0026rsquo;t seem to have the slightest clue on how to draw up a \u0026ldquo;clever\u0026rdquo; backup solution.\u003c/p\u003e\n\u003cp\u003eLemme describe the situation for you. We do have two Solaris systems at work, housing our mailing system(s). Now apparently, people are unable to install the Tivoli Storage Manager Client on Solaris (or get it working properly - which people are blaming on the software not \u003cstrong\u003eworking\u003c/strong\u003e).\u003c/p\u003e","title":"Backup solutions"},{"content":"OK, it turned out that said colleague wasn\u0026rsquo;t responsible at all. Turns out, the real trigger was me creating a new volume on our SAN, on the same array that houses the OCFS2 volume.\nApparently, during creation of an additional SAN volume, all other SAN volumes in this array are either read-only or delayed during that time, as you can see from the following log:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 kernel: (13,3):o2hb_write_timeout:242 ERROR: Heartbeat write timeout to device sdd1 after 12000 milliseconds kernel: Heartbeat thread (13) printing last 24 blocking operations (cur = 4): kernel: Heartbeat thread stuck at waiting for read completion, stuffing current time into that blocker (index 4) kernel: Index 5: took 0 ms to do submit_bio for read kernel: Index 6: took 0 ms to do waiting for read completion kernel: Index 7: took 0 ms to do bio alloc write kernel: Index 8: took 0 ms to do bio add page write kernel: Index 9: took 0 ms to do submit_bio for write kernel: Index 10: took 0 ms to do checking slots kernel: Index 11: took 0 ms to do waiting for write completion kernel: Index 12: took 2002 ms to do msleep kernel: Index 13: took 0 ms to do allocating bios for read kernel: Index 14: took 0 ms to do bio alloc read kernel: Index 15: took 0 ms to do bio add page read kernel: Index 16: took 0 ms to do submit_bio for read kernel: Index 17: took 0 ms to do waiting for read completion kernel: Index 18: took 0 ms to do bio alloc write kernel: Index 19: took 0 ms to do bio add page write kernel: Index 20: took 0 ms to do submit_bio for write kernel: Index 21: took 0 ms to do checking slots kernel: Index 22: took 0 ms to do waiting for write completion kernel: Index 23: took 2004 ms to do msleep kernel: Index 0: took 0 ms to do allocating bios for read kernel: Index 1: took 0 ms to do bio alloc read kernel: Index 2: took 0 ms to do bio add page read kernel: Index 3: took 0 ms to do submit_bio for read kernel: Index 4: took 9995 ms to do waiting for read completion kernel: (13,3):o2hb_stop_all_regions:1682 ERROR: stopping heartbeat on all active regions. kernel: Kernel panic - not syncing: *** ocfs2 is very sorry to be fencing this system by panicing *** ","permalink":"https://christian.blog.pakiheim.de/posts/2008-03-07_ocfs2-follow-up/","summary":"\u003cp\u003eOK, it turned out that said colleague wasn\u0026rsquo;t responsible at all. Turns out, the \u003cem\u003e\u003cstrong\u003ereal\u003c/strong\u003e\u003c/em\u003e trigger was me creating a new volume on our SAN, on the same array that houses the OCFS2 volume.\u003c/p\u003e\n\u003cp\u003eApparently, during creation of an additional SAN volume, all other SAN volumes in this array are either read-only or delayed during that time, as you can see from the following log:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-29\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-29\"\u003e29\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: (13,3):o2hb_write_timeout:242 ERROR: Heartbeat write timeout to device sdd1 after 12000 milliseconds\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Heartbeat thread (13) printing last 24 blocking operations (cur = 4):\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Heartbeat thread stuck at waiting for read completion, stuffing current time into that blocker (index 4)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 5: took 0 ms to do submit_bio for read\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 6: took 0 ms to do waiting for read completion\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 7: took 0 ms to do bio alloc write\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 8: took 0 ms to do bio add page write\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 9: took 0 ms to do submit_bio for write\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 10: took 0 ms to do checking slots\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 11: took 0 ms to do waiting for write completion\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 12: took 2002 ms to do msleep\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 13: took 0 ms to do allocating bios for read\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 14: took 0 ms to do bio alloc read\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 15: took 0 ms to do bio add page read\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 16: took 0 ms to do submit_bio for read\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 17: took 0 ms to do waiting for read completion\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 18: took 0 ms to do bio alloc write\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 19: took 0 ms to do bio add page write\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 20: took 0 ms to do submit_bio for write\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 21: took 0 ms to do checking slots\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 22: took 0 ms to do waiting for write completion\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 23: took 2004 ms to do msleep\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 0: took 0 ms to do allocating bios for read\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 1: took 0 ms to do bio alloc read\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 2: took 0 ms to do bio add page read\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 3: took 0 ms to do submit_bio for read\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Index 4: took 9995 ms to do waiting for read completion\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: (13,3):o2hb_stop_all_regions:1682 ERROR: stopping heartbeat on all active regions.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel: Kernel panic - not syncing: *** ocfs2 is very sorry to be fencing this system by panicing ***\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"OCFS2 follow-up"},{"content":"Turns out, that said colleague has been playing with NFS on one off the web nodes, thus apparently rendering the remaining nodes offline (or semi-offline).\nNow after all web nodes hung themselves, we had to hard reset them, now everything is tingly again .. yay for a great first day \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-03-06_ocfs2-fun/","summary":"\u003cp\u003eTurns out, that \u003ca href=\"/posts/2008-03-06_ocfs2-fun\" title=\"OCFS2 fun yet again\"\u003esaid colleague\u003c/a\u003e has been playing with NFS on one off the web nodes, thus apparently rendering the remaining nodes offline (or semi-offline).\u003c/p\u003e\n\u003cp\u003eNow after all web nodes hung themselves, we had to hard reset them, now everything is tingly again .. \u003cem\u003e\u003cstrong\u003eyay\u003c/strong\u003e\u003c/em\u003e for a great first day \u0026hellip;\u003c/p\u003e","title":"OCFS2 fun"},{"content":"Well, as for replacing my current fileserver (which I seriously need to consider replacing), I\u0026rsquo;ll just pick up these things:\n3WARE 9550SXU-8LP (that\u0026rsquo;s 399,00€) plus riser card VIA EPIA EK 8000EG (that\u0026rsquo;s 201,69€) Kingston ValueRAM DIMM 1 GB DDR-400 (that\u0026rsquo;s 57,00€) 4x Seagate ST31000340NS (that\u0026rsquo;s 279,00€ each - making a subtotal of 1.116,00€) So after browsing some more for a replacement for my current fileserver, I\u0026rsquo;d like to share the latest stages with you people. Thanks to Mike (who mentioned that binutils-2.18* already does the LDFLAGS=\u0026quot;-Wl,-z,relro\u0026quot; part) I replaced it with \u0026quot;-Wl,-O1\u0026quot;. Same old place, there\u0026rsquo;s fresh stages \u0026hellip; (and thanks again to Mike, with working util-linux-2.13-r2).\nI also tried getting a Gentoo/Hardened stage for PowerPC working, but that fails as due to \u0026gt;glibc-2.3 needing =gcc-4*. Though luck \u0026hellip;.\nOh, yeah. If anyone is looking for the specs, they are in my overlay.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-03-04_epia-fun/","summary":"\u003cp\u003eWell, as for replacing my current fileserver (which I seriously need to consider replacing), I\u0026rsquo;ll just pick up these things:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e3WARE 9550SXU-8LP (that\u0026rsquo;s 399,00€) plus riser card\u003c/li\u003e\n\u003cli\u003eVIA EPIA EK 8000EG (that\u0026rsquo;s 201,69€)\u003c/li\u003e\n\u003cli\u003eKingston ValueRAM DIMM 1 GB DDR-400 (that\u0026rsquo;s 57,00€)\u003c/li\u003e\n\u003cli\u003e4x Seagate ST31000340NS (that\u0026rsquo;s 279,00€ each - making a subtotal of 1.116,00€)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eSo after browsing some more for a replacement for my current fileserver, I\u0026rsquo;d like to share the latest \u003ca href=\"/posts/2014-08-16_stages\"\u003estages\u003c/a\u003e with you people. Thanks to Mike (who mentioned that binutils-2.18* already does the \u003cstrong\u003e\u003cem\u003eLDFLAGS=\u0026quot;-Wl,-z,relro\u0026quot;\u003c/em\u003e\u003c/strong\u003e part) I replaced it with \u003cstrong\u003e\u003cem\u003e\u0026quot;-Wl,-O1\u0026quot;\u003c/em\u003e\u003c/strong\u003e. Same old place, there\u0026rsquo;s fresh stages \u0026hellip; (and thanks again to Mike, with working \u003ca href=\"https://bugs.gentoo.org/show_bug.cgi?id=203711\"\u003eutil-linux-2.13-r2\u003c/a\u003e).\u003c/p\u003e","title":"EPIA fun"},{"content":"As I mentioned before, we decided against the Citrix Presentation Server solution in favour of the 2X LoadBalancer and ApplicationServer combination. You\u0026rsquo;re gonna say, but Citrix does the same and it\u0026rsquo;s only one \u0026quot; application frame\u0026quot;. 2X is exactly the same.\nCitrix Presentation Server features:\nApplication isolation Single-Sign-On Application-Level Load Distribution CPU management Memory optimization 2X Loadbalancer \u0026amp; Applicationserver:\nResource based load balancing Single-Sign-On (only with version 6.0) They both share common needs:\na configured Windows Terminal Server each client needs a Windows Terminal Server CAL (which is of course issued by the terminal license server) After we figured that out, it was rather easy for us to decide. The 2X solution is compared to the Citrix solution rather cheap (~ 5.000 EUR compared to \u0026gt; 20.000 EUR - that is already including educational discount and VAT).\nAfter more trial-and-error periods I can count, we finally got everything working (that is version 6.0) in combination with our Wyse V90 running Windows XP Embedded. First I tried setting up four different systems (as was outlined by some document by 2X describing various setups), two for the redundant Loadbalancers and two for the Windows Terminal Services.\nAfter a short fight with the German 2X Support, they made it clear quite fast, that this kind of setup (as the applications ain\u0026rsquo;t installed on the Loadbalancer) won\u0026rsquo;t work quite so good, as the ApplicationServer is doing the application publication and you can only publish applications on the Loadbalancer (I know, it\u0026rsquo;s kinda messy) \u0026hellip;\nSo we reinstalled the system, to only have two Terminal Servers which would act as 2X Loadbalancer at the same time. That way, we only had to care about two systems, not four \u0026hellip;\nAfter tuning the GPO a bit (to only allow applications which people are supposed to use), trying to get Mozilla Firefox working (and secure on the Terminal Server), some more trying and finally giving up on stream Mozilla from the Terminal Server (as you can\u0026rsquo;t prevent people from executing applications by browsing through file://C:/, even if you explicitly disabled access to it by GPO), we decided to simply publish the already present Internet Explorer, which is quite customizable by the present GPO\u0026rsquo;s.\nI only have one pending issue, which is related to the forwarding of local drives (RDP 6.0 has a neat feature, it allows forwarding of drives even if they weren\u0026rsquo;t plugged in when you opened the connection). It\u0026rsquo;s been open for some days, I\u0026rsquo;ll see whether or not they are gonna fix it \u0026hellip;\nTen-four!\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-02-21_getting-the-2x-service-up-and-running/","summary":"As I \u003ca href=\"http://christian.weblog.heimdaheim.de/2007/01/25/research-project/\" title=\"Research project\"\u003ementioned before\u003c/a\u003e, we decided against the Citrix Presentation Server solution in favour of the 2X LoadBalancer and ApplicationServer combination. You\u0026rsquo;re gonna say, but Citrix does the same and it\u0026rsquo;s only one \u0026quot; \u003cem\u003eapplication frame\u003c/em\u003e\u0026quot;. 2X is exactly the same.","title":"Getting the 2X service up and running"},{"content":"Well, I happen to be back at my favorite application. Today I stumbled upon a \u0026quot; nice\u0026quot; thing. If you turn on the Zend Optimizer (doesn\u0026rsquo;t matter whether it is 2.6.2 or 3.3.0), one of the TYPO3 back ends ain\u0026rsquo;t showing any content in the preview pane. Once you turn the Zend Optimizer stuff off, it works without a problem.\nO RLY ?\nAnd as Zend stated on their \u0026quot; Support Forum\u0026quot;, they don\u0026rsquo;t really support the Zend Optimizer stuff in the first place. Which is nice, what for do you need the Zend Guard shit in the first place ??\nWell, so I do have two options now:\nDisable the one plug-in, which really needs the Zend Optimizer (as it also features the Zend De Guard engine - or whatever you want to call it) or risk some other things breaking due to the Zend Optimizer engine not working ( correctly) with php-5.1.2 (which is rather old considering 5.3.0 is in development right now) But I will see about that tomorrow \u0026hellip;\nYA RLY!\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-02-19_zend-optimizer-again/","summary":"\u003cp\u003eWell, I happen to be back at my favorite application. Today I stumbled upon a \u0026quot; \u003cem\u003enice\u003c/em\u003e\u0026quot; thing. If you turn on the Zend Optimizer (doesn\u0026rsquo;t matter whether it is 2.6.2 or 3.3.0), one of the TYPO3 back ends ain\u0026rsquo;t showing \u003cem\u003e\u003cstrong\u003eany\u003c/strong\u003e\u003c/em\u003e content in the preview pane. Once you turn the Zend Optimizer stuff off, it works without a problem.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2008/08/o_rly001.jpg\"\n         alt=\"O RLY ?\" width=\"438\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eO RLY ?\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eAnd as Zend stated on their \u0026quot; \u003cem\u003eSupport Forum\u003c/em\u003e\u0026quot;, they don\u0026rsquo;t really support the Zend Optimizer stuff in the first place. Which is nice, what for do you need the Zend Guard shit in the first place ??\u003c/p\u003e","title":"Zend Optimizer again"},{"content":"Well, it\u0026rsquo;s been quite a while since most of the people last heard a word from me. The last few months I\u0026rsquo;ve been extremely busy with work-related tasks (and as a side-effect of that, didn\u0026rsquo;t want to spend much time in front of the computer after 9 hours of work). I also started spending more and more time in the gym, like nearly two hours every Tuesday and Thursday.\nI finally fixed our replication issues, we do now have a working! MySQL Multi-Master ( 1. Node, 2. Node -- bear in mind, this boxes are only serving MySQL and nothing else, so don\u0026rsquo;t use these configurations on mixed setups) Replication Setup as database back end for our TYPO3-vHosts. all the web nodes are now serving the content from a clustered, shared SAN volume (is that a good thing ? \u0026#x1f61b; - don\u0026rsquo;t know yet \u0026hellip;) our VI environment is getting more and more acceptance (even if you hear some complaints now and then, like \u0026ldquo;awww, damn that crap my 4GiB RAM, 2x3.0GHz Windows 2008 is running soooo choppy\u0026rdquo; - simple answer, don\u0026rsquo;t use Windows Server 2008 and/or Windows Vista!) I finished prepping our VM templates (at least the Windows ones) we\u0026rsquo;re still putting together the plans on whether or not invest into a VDI solution. The next few weeks are gonna be as frantic as the weeks before, I still have to migrate a lot of TYPO3 installations to our new cluster (which sadly needs time, as we need to wait for DNS changes to propagate). Honestly, I might be ending up extending the SAN volume for the MySQL data storage, as even with only three somewhat busy sites, the binary log of the last 5 days is about 2GiB in size. And we still have ~ 20 other busy sites on a separate box.\nLucky me, I created the MySQL data storage on a logical volume, so I can easily extend the volume in the san-manager semi-online (the fs needs to be unmounted and thus the MySQL process), then extend the physical volume (LVM2 PV) and the logical volume (LV) afterwards, and at last the underlying EXT3 file system.\nAs some of you know by now, I am on extended leave for now. I don\u0026rsquo;t have tree access (at my own request), though I\u0026rsquo;m gonna try to keep up with Chris and 2008.0 \u0026hellip; So long!\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-02-17_been-a-while/","summary":"\u003cp\u003eWell, it\u0026rsquo;s been quite a while since most of the people last heard a word from me. The last few months I\u0026rsquo;ve been extremely busy with work-related tasks (and as a side-effect of that, didn\u0026rsquo;t want to spend much time in front of the computer after 9 hours of work). I also started spending more and more time in the gym, like nearly two hours every Tuesday and Thursday.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eI finally \u003cstrong\u003efixed\u003c/strong\u003e our replication issues, we do now have a \u003cstrong\u003eworking\u003c/strong\u003e! MySQL Multi-Master ( \u003ca href=\"/uploads/2008/02/mycnf-node11.txt\"\u003e1. Node\u003c/a\u003e, \u003ca href=\"/uploads/2008/02/mycnf-node21.txt\"\u003e2. Node\u003c/a\u003e -- bear in mind, this boxes are \u003cem\u003e\u003cstrong\u003eonly\u003c/strong\u003e\u003c/em\u003e serving MySQL and nothing else, so don\u0026rsquo;t use these configurations on mixed setups) Replication Setup as database back end for our TYPO3-vHosts.\u003c/li\u003e\n\u003cli\u003eall the web nodes are now serving the content from a clustered, shared SAN volume (is that a good thing ? \u0026#x1f61b; - don\u0026rsquo;t know yet \u0026hellip;)\u003c/li\u003e\n\u003cli\u003eour VI environment is getting more and more acceptance (even if you hear some complaints now and then, like \u003cem\u003e\u0026ldquo;awww, damn that crap my 4GiB RAM, 2x3.0GHz Windows 2008 is running soooo choppy\u0026rdquo;\u003c/em\u003e - simple answer, don\u0026rsquo;t use Windows Server 2008 and/or Windows Vista!)\u003c/li\u003e\n\u003cli\u003eI finished prepping our VM templates (at least the Windows ones)\u003c/li\u003e\n\u003cli\u003ewe\u0026rsquo;re still putting together the plans on whether or not invest into a VDI solution.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe next few weeks are gonna be as frantic as the weeks before, I still have to migrate a lot of TYPO3 installations to our new cluster (which sadly needs time, as we need to wait for DNS changes to propagate). Honestly, I might be ending up extending the SAN volume for the MySQL data storage, as even with only three somewhat busy sites, the binary log of the last 5 days is about 2GiB in size. And we still have ~ \u003cstrong\u003e20\u003c/strong\u003e other busy sites on a separate box.\u003c/p\u003e","title":"Been a while"},{"content":"I just found a rather oldish picture of myself. The date says it\u0026rsquo;s from last year ( Fri Feb 9 22:33:06 2007 to be exact) \u0026hellip;\nMe with beard! (Or: WHO THE HELL IS THIS ?)\nOne year later, I can\u0026rsquo;t imagine having such a beard ever again \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-02-17_scaring-people/","summary":"\u003cp\u003eI just found a rather oldish picture of myself. The date says it\u0026rsquo;s from last year ( \u003cem\u003eFri Feb 9 22:33:06 2007\u003c/em\u003e to be exact) \u0026hellip;\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2008/08/dsc00076.jpg\"\n         alt=\"Me with beard! (Or with other words: WHO THE HELL IS THIS ?)\" width=\"375\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eMe with beard! (Or: WHO THE HELL IS THIS ?)\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eOne year later, I can\u0026rsquo;t imagine having such a beard ever again \u0026hellip;\u003c/p\u003e","title":"Scaring people"},{"content":"Well, as it is Saturday and I\u0026rsquo;m having lots of time (whereas I\u0026rsquo;d usually spend it working), I thought I\u0026rsquo;d give Windows Server 2008 a try. What interested me most, is the Windows Server 2008 \u0026quot; Server Core Installations\u0026quot;, as it\u0026rsquo;s supposed to lower the security risk (as there is no Internet Explorer, no Explorer nothing running by default, only a simply cmd.exe).\nAs one of my co-workers requested me to upload the Standard/Enterprise/Datacenter DVD (which he got through our Microsoft Select 6.0(?) agreement) to our ISO\u0026rsquo; VMFS, I had the DVD already at hand. As for that, I really love the feature set of VMware.\nDeploying a new VM (even if you have to reinstall it) is quite fast (took me about 20 minutes, which I used to get some breakfast - it was only 6:30am). That\u0026rsquo;s about when I figured, how damn greedy Windows Server 2008 is. 16GiB hard disk as default installation and 2GiB RAM for a simple server ? Damn.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-02-16_windows-server-2008/","summary":"\u003cp\u003eWell, as it is Saturday and I\u0026rsquo;m having lots of time (whereas I\u0026rsquo;d usually spend it working), I thought I\u0026rsquo;d give Windows Server 2008 a try. What interested me most, is the Windows Server 2008 \u003cem\u003e\u0026quot; \u003ca href=\"http://www.microsoft.com/windowsserver2008/en/us/r2-compare-core-installation.aspx\"\u003eServer Core Installations\u003c/a\u003e\u0026quot;\u003c/em\u003e, as it\u0026rsquo;s supposed to lower the security risk (as there is \u003cem\u003e\u003cstrong\u003eno\u003c/strong\u003e\u003c/em\u003e Internet Explorer, no Explorer nothing running by default, only a simply \u003cem\u003ecmd.exe\u003c/em\u003e).\u003c/p\u003e\n\u003cp\u003eAs one of my co-workers requested me to upload the Standard/Enterprise/Datacenter DVD (which he got through our Microsoft Select 6.0(?) agreement) to our ISO\u0026rsquo; VMFS, I had the DVD already at hand. As for that, I \u003cem\u003e\u003cstrong\u003ereally\u003c/strong\u003e\u003c/em\u003e love the feature set of VMware.\u003c/p\u003e","title":"Windows Server 2008"},{"content":"Well, apparently some people don\u0026rsquo;t have any value for other people\u0026rsquo;s property. It\u0026rsquo;s that way in big cities, but apparently it\u0026rsquo;s the same is this shitty, lil\u0026rsquo; village.\nScratch, top view\nScratch, side view\nWhoever did that had serious fun with a key or something else. Tough, if I ever gonna get that person, I\u0026rsquo;m gonna rip his arse apart. The painters tell me, I do have to expect to pay ~300 EUR, as to the scratch being up to the primer below the upper color layer. So they\u0026rsquo;ll either have to paint half the door, or the whole door which really pisses me off!\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-02-16_other-people-s-property/","summary":"\u003cp\u003eWell, apparently some people don\u0026rsquo;t have any value for other people\u0026rsquo;s property. It\u0026rsquo;s that way in big cities, but apparently it\u0026rsquo;s the same is this shitty, lil\u0026rsquo; village.\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2008/08/img_0168.jpg\"\n         alt=\"Scratch, top view\" width=\"500\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eScratch, top view\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2008/08/img_0170.jpg\"\n         alt=\"Scratch, side view\" width=\"500\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eScratch, side view\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003cp\u003eWhoever did that had serious fun with a key or something else. Tough, if I ever gonna get that person, I\u0026rsquo;m gonna rip his arse apart. The painters tell me, I do have to expect to pay ~300 EUR, as to the scratch being up to the primer below the upper color layer. So they\u0026rsquo;ll either have to paint half the door, or the whole door which \u003cem\u003e\u003cstrong\u003ereally\u003c/strong\u003e\u003c/em\u003e pisses me off!\u003c/p\u003e","title":"Other people's property"},{"content":"I\u0026rsquo;ve been looking for this over and over and over, until I had some inspiration today (thanks to Andew and Chris) .. this has one and only one sole purpose: safekeeping, so I don\u0026rsquo;t end up searching for it all over again \u0026hellip;\nTo free pagecache:\n1 # sync; echo 1 \u0026gt; /proc/sys/vm/drop_caches To free dentries and inodes:\n1 # sync; echo 2 \u0026gt; /proc/sys/vm/drop_caches To free pagecache, dentries and inodes:\n1 # sync; echo 3 \u0026gt; /proc/sys/vm/drop_caches Once that is done, you\u0026rsquo;ll see the memory (usually RAM) freeing up.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-02-05_flushing-the-disk-cache/","summary":"\u003cp\u003eI\u0026rsquo;ve been looking for this over and over and over, until I had some \u003ca href=\"http://www.webpronews.com/expertarticles/2007/01/10/invalidating-the-linux-buffer-cache\"\u003einspiration\u003c/a\u003e today (thanks to Andew and Chris) .. this has one and only one sole purpose: safekeeping, so I don\u0026rsquo;t end up searching for it all over again \u0026hellip;\u003c/p\u003e\n\u003cp\u003eTo free pagecache:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# sync; echo 1 \u0026gt; /proc/sys/vm/drop_caches\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eTo free dentries and inodes:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-1-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# sync; echo 2 \u0026gt; /proc/sys/vm/drop_caches\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eTo free pagecache, dentries and inodes:\u003c/p\u003e","title":"Flushing the disk cache"},{"content":"After blogging the last time about the PacketPro 450 LoadBalancer appliance, the guys over at teamix seem to have taken that to heart and implemented a rather nifty thing for their new release.\nIt\u0026rsquo;s called \u0026quot; Port forwarding\u0026quot;, which is basically what you\u0026rsquo;d figure from the name. It bounces ports around the load balancer, but saves you from creating a separate virtual server (and adding the physical servers to that one), but also saves you from modifying the syslog-ng configuration on the balanced servers.\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-01-15_packetpro-1-7-0/","summary":"\u003cp\u003eAfter \u003ca href=\"/posts/2014-08-16_bloody-cluster-solutions-continued\"\u003eblogging\u003c/a\u003e \u003ca href=\"/posts/2007-08-05_packetpro-450-and-ssh-checks\"\u003ethe last time\u003c/a\u003e about the PacketPro 450 LoadBalancer appliance, the guys over at \u003ca href=\"http://www.teamix.net/\"\u003eteamix\u003c/a\u003e seem to have taken that to heart and implemented a rather nifty thing for their new release.\u003c/p\u003e\n\u003cp\u003eIt\u0026rsquo;s called \u0026quot; \u003cem\u003ePort forwarding\u003c/em\u003e\u0026quot;, which is basically what you\u0026rsquo;d figure from the name. It bounces ports around the load balancer, but saves you from creating a separate virtual server (and adding the physical servers to that one), but also saves you from \u003ca href=\"/posts/2014-08-16_bloody-cluster-solutions-continued\"\u003emodifying\u003c/a\u003e the \u003ca href=\"/posts/2014-08-16_bloody-cluster-solutions-continued\"\u003esyslog-ng configuration\u003c/a\u003e on the balanced servers.\u003c/p\u003e","title":"PacketPro 1-7-0"},{"content":"Ok, so after my first day yesterday after a rather long vacation I today wanted to look at the problem that the Administrator password isn\u0026rsquo;t changed when using VirtulCenter\u0026rsquo;s clone customization functionality (which relies at least for Windows on sysprep).\nAfter a short googling, I stumbled upon this.\nSimple problem short \u0026hellip; Don\u0026rsquo;t specify an Administrator password for the template. Then you should be able to change the Administrator password when cloning the template. It\u0026rsquo;s \u0026quot; should\u0026quot;, as the VM\u0026rsquo;s are still updating.\nAnd it really works. After emptying the Administator password, the cloning works just fine. Damn sysprep bug \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2008-01-08_deploying-vm-templates/","summary":"\u003cp\u003eOk, so after my first day yesterday after a rather long vacation I today wanted to look at the problem that the Administrator password isn\u0026rsquo;t changed when using VirtulCenter\u0026rsquo;s clone customization functionality (which relies at least for Windows on sysprep).\u003c/p\u003e\n\u003cp\u003eAfter a short googling, I stumbled upon \u003ca href=\"http://www.rtfm-ed.co.uk/2006/01/20/sysprep-does-not-reset-administrator-password/\"\u003ethis\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eSimple problem short \u0026hellip; Don\u0026rsquo;t specify an Administrator password for the template. Then you should be able to change the Administrator password when cloning the template. It\u0026rsquo;s \u0026quot; \u003cem\u003eshould\u003c/em\u003e\u0026quot;, as the VM\u0026rsquo;s are still updating.\u003c/p\u003e","title":"Deploying VM templates"},{"content":"Well, it\u0026rsquo;s yet again New Year\u0026rsquo;s Eve. Yet again a whole year passed by blazing fast, I didn\u0026rsquo;t manage to get everything done like I wanted.\nThat includes the following things:\ngetting a better job (and probably better paid too!) getting a better life (well, it\u0026rsquo;s as it sounds like - my current life is rather unhealthy, and thanks to a friend I got the grip onto myself and started changing a few things - like doing a small workout every day, a bit more movement all over the day and so forth) Which also means I do have some resolutions for the next year \u0026hellip;\nBecome more active (like do a longer workout each day) Get a better paid job (even if that\u0026rsquo;s going to hurt some people) Fix my remaining health problems (like my foot, the back, \u0026hellip;) Now that sounds like I didn\u0026rsquo;t get anything done in the last 365 days, but that I sure did.\nI finally managed to make my way through the slackers list (Fabian accused me I\u0026rsquo;d be orphaning half the tree - if at all, it was 1/12), I did some major changes at work (though I still need to do some things - like fixing the MySQL replication with TYPO3). I do have the feeling that the next year is gonna get interesting real soon. I do have a project for the implementation of a VDI based class-room scheduled early next year (budget still pending - so it\u0026rsquo;s a maybe); we still do have to review the available possibilities (which includes Dell - who apparently implemented exactly this for some university/technical university in Brandenburg), as well as some other small purchases.\nGentoo wise I can\u0026rsquo;t tell yet whether or not I still want to be part of it. The last few months have been rather tough for me, I\u0026rsquo;ve been haunted by guilt for other things, so I couldn\u0026rsquo;t care much about Gentoo. I\u0026rsquo;ve put away some of the burdens I had, in order to focus on the fun aspects of our beloved distribution (there isn\u0026rsquo;t much left sadly).\nI\u0026rsquo;d like to thank those who had extra patience with me, thank those who took the time to talk to me, those who cheered me up when I needed it. It\u0026rsquo;s been a tough time, but thanks to a lot of amazing people (Norman, Michel, Christina, Alex, Diego, Ned, Chris, Robin, \u0026hellip;) I got through it and I\u0026rsquo;m still here - alive and kicking \u0026#x1f61b; !\nOh, and a happy new year !!\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-12-31_looking-back-yet-again/","summary":"\u003cp\u003eWell, it\u0026rsquo;s yet again New Year\u0026rsquo;s Eve. Yet again a whole year passed by blazing fast, I didn\u0026rsquo;t manage to get everything done like I wanted.\u003c/p\u003e\n\u003cp\u003eThat includes the following things:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003egetting a better job (and probably better paid too!)\u003c/li\u003e\n\u003cli\u003egetting a better life (well, it\u0026rsquo;s as it sounds like - my current life is rather unhealthy, and thanks to a friend I got the grip onto myself and started changing a few things - like doing a small workout every day, a bit more movement all over the day and so forth)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhich also means I do have some resolutions for the next year \u0026hellip;\u003c/p\u003e","title":"Looking back (yet again)"},{"content":"Actually there\u0026rsquo;s nothing to see here. It\u0026rsquo;s just to get it somewhere more obvious then my irc logs \u0026hellip;\n1 2 $ wget -q http://www.kernel.org/pub/linux/kernel/v2.6/incr/patch-2.6.23.8-9.gz -O - | gunzip | patch -p1 ","permalink":"https://christian.blog.pakiheim.de/posts/2007-12-10_nothing-to-see-here-wget-stdout/","summary":"\u003cp\u003eActually there\u0026rsquo;s nothing to see here. It\u0026rsquo;s just to get it somewhere more obvious then my irc logs \u0026hellip;\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ wget -q http://www.kernel.org/pub/linux/kernel/v2.6/incr/patch-2.6.23.8-9.gz -O - |\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       gunzip | patch -p1\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Nothing to see here - wget stdout"},{"content":"Well, some of you know I\u0026rsquo;m a bit clumsy. Ok, I went buying some stuff for Saint Nicholas for the ones I love, which came to me about ten minutes before the shops are closing. Navigated my butt into the car, drove the ~6km to the nearest store (which still had open, that was around 20:00).\nGot all I wanted, went back to my car (you know, this one) this and put the stuff into the trunk. When closing the trunk, I felt some opposition, so I closed it a bit harder. \u0026ldquo;Closed\u0026rdquo; I thought to myself and went back into my car. When turning on the ignition the onbord computer suddenly complained \u0026ldquo;trunk open\u0026rdquo;, so I went back out, trying to open the trunk. WTF .. I couldn\u0026rsquo;t get it open. So I tried again, still nothing.\nOkay I thought, since it was kinda closed and I couldn\u0026rsquo;t get it open with some brute force, I decided to go back home. On the way back home I remembered the parking lot of one of the DIY superstore\u0026rsquo;s had rather good lighting. So I went by.\nOn the parking lot, after parking my car, I went over the back seats below the trunk deck into the trunk, removed the trunk deck and saw that I somehow stuffed one of those plastic cooling bags into the lock of the trunk. I went WTF and tried brute force again opening the trunk. Still a no-no.\nRipped out the cooling bag (eventually everything of it), went back onto the back seats and tried to open the left rear door, but that didn\u0026rsquo;t work. Again WTF. Toggled the central locking system with the appropriate switch on the front panel. Still WTF it didn\u0026rsquo;t open. So I crawled onto the front seats, where I saw a tiny red light glowing, which is where I figured that the child safety lock for the rear doors was still on .. that at least explained why I couldn\u0026rsquo;t open the rear door from the inside.\nFinally back outside, I went around the car to the trunk, tried to open it. Nothing, again with some force, TADA and I got it open. Removed the remaining parts (what was left of the cooling bag), and finally could close the trunk like it\u0026rsquo;s supposed to close. pfew\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-12-05_life-as-god-it-wrote/","summary":"\u003cp\u003eWell, some of you know I\u0026rsquo;m a bit clumsy. Ok, I went buying some stuff for Saint Nicholas for the ones I love, which came to me about ten minutes before the shops are closing. Navigated my butt into the car, drove the ~6km to the nearest store (which still had open, that was around 20:00).\u003c/p\u003e\n\u003cp\u003eGot all I wanted, went back to my car (you know, this one)\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2007/05/IMG_0316.JPG\"\n         alt=\"new car\"/\u003e \u003cfigcaption\u003e\n            this\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n and put the stuff into the trunk. When closing the trunk, I felt some opposition, so I closed it a bit harder.\n\u0026ldquo;\u003cem\u003eClosed\u003c/em\u003e\u0026rdquo; I thought to myself and went back into my car. When turning on the ignition the onbord computer suddenly complained \u0026ldquo;\u003cstrong\u003etrunk open\u003c/strong\u003e\u0026rdquo;, so I went back out, trying to open the trunk. \u003cem\u003e\u003cstrong\u003eWTF\u003c/strong\u003e\u003c/em\u003e .. I couldn\u0026rsquo;t get it open. So I tried again, still nothing.\u003c/p\u003e","title":"Life as God it wrote"},{"content":"I stumbled upon a real weird problem. Apparently the terminal server licenses called \u0026quot; per Device\u0026quot; ain\u0026rsquo;t a real per device. From reading on it Microsoft states it like this:\nDevice-based versus User-based Terminal Server CALs\nTwo types of Terminal Server Client Access Licenses are available: TS Device CAL or TS User CAL.\nA TS Device CAL permits one device (used by any user) to conduct Windows Sessions on any of your servers. A TS User CAL permits one user (using any device) to conduct Windows Sessions on any of your servers. You may choose to use a combination of TS Device CALs and TS User CALs simultaneously with the server software.\nIf I take the above and take a closer look at my terminal server license server I\u0026rsquo;ll see something like this:\nTerminal services license manager\nAs you can see, I do have devices with more than a single license (in fact, several of them do have more then four), which from my understanding ain\u0026rsquo;t what Microsoft had in mind.\nAfter noticing this, I initially thought my terminal servers had the wrong license mode, but as you can see below, they are using \u0026quot; per Device\u0026quot;.\nTerminal service license settings\nWhich means, I am completely clueless at this point, as they really should be using just a single license, and not multiple ones.\nUpdate:\nOk, after experimenting a bit with it, it seems that a license seems to be tied to the SSID. Which would explain, why I see different CAL\u0026rsquo;s for a single device. We reflashed the thin clients in between (and within that process, the SSID is freshly generated), so that\u0026rsquo;d be the only explanation I\u0026rsquo;ve got for what I\u0026rsquo;m seeing.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-12-04_device-cal-s-ain-t-no-device-cal-s/","summary":"\u003cp\u003eI stumbled upon a \u003cem\u003e\u003cstrong\u003ereal\u003c/strong\u003e\u003c/em\u003e weird problem. Apparently the terminal server licenses called \u0026quot; \u003cem\u003eper Device\u003c/em\u003e\u0026quot; ain\u0026rsquo;t a real per device. From reading on it \u003ca href=\"http://www.microsoft.com/windowsserver2008/en/us/licensing-R2.aspx\"\u003eMicrosoft\u003c/a\u003e states it like this:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eDevice-based versus User-based Terminal Server CALs\u003c/p\u003e\n\u003cp\u003eTwo types of Terminal Server Client Access Licenses are available: TS Device CAL or TS User CAL.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eA TS Device CAL permits one device (used by any user) to conduct Windows Sessions on any of your servers.\u003c/li\u003e\n\u003cli\u003eA TS User CAL permits one user (using any device) to conduct Windows Sessions on any of your servers.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eYou may choose to use a combination of TS Device CALs and TS User CALs simultaneously with the server software.\u003c/p\u003e","title":"Device CAL's ain't no Device CAL's"},{"content":"Well, it\u0026rsquo;s been a full month since I last wrote something. Back then I had some problems with 2X, Windows Terminal Server and printing (I still have problems, but not those anymore - I resolved them).\nWork has been unusual frantic the last month, as well as I don\u0026rsquo;t pay much interest to all the things in Gentoo anymore (that was an advice from my shrink), as it just keeps putting on my anger/urge to do something nobody wants me to do even more. So I invested my time into doing other things (like baking or reading one of the many books that I buyed of Amazon and didn\u0026rsquo;t ever get a chance to read) I enjoy more.\nI haven\u0026rsquo;t been completely dormant when it comes to Gentoo work, I finally went through the slacker list of last month (resulting in some retirement bugs, some already resolved - others not). Also I\u0026rsquo;ve been working hard with Robin on getting the auto-synced userinfo.xml working, in order to get away from two different sources of data. So be advised, you should rather edit LDAP (you can edit most of your own record by now - besides gentooAccess of course).\nNow, my remaining task is, to get the missing data from people I mailed (most of them answered, others didn\u0026rsquo;t which is a real shame). Once that is done, we can simply lock the userinfo.xml in the gentoo/ repo, and then simply turn on a script to grab the userinfo.xml from LDAP and push it to the webnodes.\nAs for my personal life, it has improved at least a bit. I\u0026rsquo;ve been seeing a shrink to help me through some stuff (you know how life is - challenging), but also some of my friends helped me (heya there \u0026#x1f61b; Diego, Alex, Christina, Norman, \u0026hellip;\u0026hellip;)\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-12-01_frantic-work-private-life-friends/","summary":"\u003cp\u003eWell, it\u0026rsquo;s been a full month since I last wrote something. Back then I had some problems with 2X, Windows Terminal Server and printing (I still have problems, but not those anymore - I resolved them).\u003c/p\u003e\n\u003cp\u003eWork has been unusual frantic the last month, as well as I don\u0026rsquo;t pay much interest to all the things in Gentoo anymore (that was an advice from my shrink), as it just keeps putting on my anger/urge to do something nobody wants me to do even more. So I invested my time into doing other things (like baking or reading one of the many books that I buyed of Amazon and didn\u0026rsquo;t ever get a chance to read) I enjoy more.\u003c/p\u003e","title":"Frantic work, private life, friends"},{"content":"Yes, yes. I do list a lot of crappy products (go on, laugh; I don\u0026rsquo;t really care). Yesterday I had quite a struggle with Microsoft Windows Server 2003 and Terminal services (or more precisely with their way on how to deal with network printers).\nAs most of you know, there a two (possibly three) different ways on how to do network printers.\nwould be, to simply share a local connected printer by simply creating a share for the printer buy a smart printer with integrated print server a combination of 1. and 2. We luckily enough do have printers with integrated print servers, so that wouldn\u0026rsquo;t be a problem. But you get a problem if you\u0026rsquo;re trying to monitor the printer queue if you simply create a new TCP/IP connection from another target. You simply can\u0026rsquo;t tell who\u0026rsquo;s printing what.\nSo we tried to find a way to reuse the already shared printers. And there actually is. Simply create a new local printer (as you would if you\u0026rsquo;d use the TCP/IP way), but don\u0026rsquo;t select TCP/IP, select Local Port instead. That\u0026rsquo;s the whole catch (I\u0026rsquo;ve been trying to figure that out half the day yesterday). Then simply supply the location (it\u0026rsquo;s URI formatted like this.is.my.printer.servarYour shady Printer) and click through the dialog.\nThe only catch with this is, that you have to install any non-standard printer drivers locally. That\u0026rsquo;s why I tried reusing the already present network drivers, but Windows treats Printers and Network printers differently. The former is treated as a global object (as in visible to all users on the current machine), the latter is only visible to the current user.\nBabing\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-11-04_windows-terminal-services-amp-network-printers/","summary":"\u003cp\u003eYes, yes. I do list a lot of crappy products (go on, laugh; I don\u0026rsquo;t really care). Yesterday I had quite a struggle with Microsoft Windows Server 2003 and Terminal services (or more precisely with their way on how to deal with network printers).\u003c/p\u003e\n\u003cp\u003eAs most of you know, there a two (possibly three) different ways on how to do network printers.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003ewould be, to simply share a local connected printer by simply creating a share for the printer\u003c/li\u003e\n\u003cli\u003ebuy a smart printer with integrated print server\u003c/li\u003e\n\u003cli\u003ea combination of 1. and 2.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eWe luckily enough do have printers with integrated print servers, so that wouldn\u0026rsquo;t be a problem. \u003cem\u003e\u003cstrong\u003eBut\u003c/strong\u003e\u003c/em\u003e you get a problem if you\u0026rsquo;re trying to monitor the printer queue if you simply create a new TCP/IP connection from another target. You simply can\u0026rsquo;t tell who\u0026rsquo;s printing what.\u003c/p\u003e","title":"Windows terminal services undamp; network printers"},{"content":"OK, since I last posted about my problems with screen and irssi being unable to handle unicode chars, I got a lot of feedback (here or on IRC), and actually it was Alexander who pointed me into the right direction. LANG=C doesn\u0026rsquo;t seem to support UTF-8 characters. So after adding\n1 2 export LC_ALL=\u0026#34;en_US.UTF8\u0026#34; export LANG=\u0026#34;en_US.UTF8\u0026#34; to my environment everything is just fine \u0026hellip; \u0026#x1f633;\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-10-26_screen-and-utf-8-continued/","summary":"\u003cp\u003eOK, since I last posted about my \u003ca href=\"/posts/2014-08-16_screen-and-utf-8\" title=\"screen and UTF-8\"\u003eproblems with screen and irssi\u003c/a\u003e being unable to handle unicode chars, I got a lot of feedback (here or on IRC), and actually it was Alexander who pointed me into the right direction. \u003cem\u003eLANG=C\u003c/em\u003e doesn\u0026rsquo;t seem to support UTF-8 characters. So after adding\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eexport\u003c/span\u003e \u003cspan class=\"n\"\u003eLC_ALL\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;en_US.UTF8\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eexport\u003c/span\u003e \u003cspan class=\"n\"\u003eLANG\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;en_US.UTF8\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eto my environment \u003cem\u003e\u003cstrong\u003eeverything\u003c/strong\u003e\u003c/em\u003e is just fine \u0026hellip; \u0026#x1f633;\u003c/p\u003e","title":"screen and UTF-8 (continued)"},{"content":"As some of you know, the company I\u0026rsquo;m currently working for, recently acquired some thin clients to replace our old computers for the students to work on. Those PC\u0026rsquo;s are like P3 800 MHz with 512MB RAM and sadly don\u0026rsquo;t run Office 2007 anymore, so we replaced them with thin clients and are streaming those applications from a Windows Terminal Server cluster (created by and with 2X Application LoadBalancer).\nSo far so good, getting them to display the applications ain\u0026rsquo;t hard, the real hard part starts when you want additional things from this Windows XPe (Embedded), like lets say getting them to display a German language.\nFirst thing is, the management software for those terminals (Wyse Device Manager or WDM) uses it\u0026rsquo;s own scripting language (with pseudo abbreviations like DF or MR - D elete F ile and M erge R egistry - get it ?), which control the whole distribution of \u0026quot; packages\u0026quot;.\nThat ain\u0026rsquo;t necessarily a bad thing, it\u0026rsquo;s just an additional \u0026quot; language\u0026quot; you need to understand/learn. The initial threshold is rather low (it ain\u0026rsquo;t no C++ or C#) as it\u0026rsquo;s just a pseudo language, you just need to make sure you do things in a certain order (like use the auto login registry entry with a new administrator password after you changed the administrator password).\nWe had a lot of work at the beginning of the week (like getting all packages working), and I think we managed finishing all of them (besides some default icon foo, for which is plenty of time when them terminals are already in use).\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-10-12_customizing-thin-clients/","summary":"\u003cp\u003eAs some of you know, the company I\u0026rsquo;m currently working for, recently acquired some thin clients to replace our old computers for the students to work on. Those PC\u0026rsquo;s are like P3 800 MHz with 512MB RAM and sadly don\u0026rsquo;t run Office 2007 anymore, so we replaced them with thin clients and are streaming those applications from a Windows Terminal Server cluster (created by and with 2X Application LoadBalancer).\u003c/p\u003e\n\u003cp\u003eSo far so good, getting them to display the applications ain\u0026rsquo;t hard, the real hard part starts when you want additional things from this Windows XPe (Embedded), like lets say getting them to display a German language.\u003c/p\u003e","title":"Customizing Thin Clients"},{"content":"Since we started utilizing Nagios\u0026rsquo;s power two months ago, I finally came up with a C-based ram-plugin for nagios. The biggest problem I had with the python and perl based plugins, that some distributions (yes, SLES and Debian) don\u0026rsquo;t install either Python or Perl.\nSince I wanted a manageable setup (as in unified code base across all distributions), I wanted it to work without installing too much. So I took the swap plugin and basically removed what wasn\u0026rsquo;t necessary and voila!\nHere we go, yay ME!\nOnly thing I need to finish sometime soon, is getting the NSClient++ work on my Windows boxen (which I do have quite a few, the domain controllers, nas-cluster, \u0026hellip;)\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-10-06_nagios-amp-plugins/","summary":"\u003cp\u003eSince we started utilizing \u003ca href=\"http://www.nagios.org/\"\u003eNagios\u003c/a\u003e\u0026rsquo;s power two months ago, I finally came up with a C-based ram-plugin for nagios. The biggest problem I had with the python and perl based plugins, that some distributions (yes, SLES and Debian) don\u0026rsquo;t install either Python or Perl.\u003c/p\u003e\n\u003cp\u003eSince I wanted a manageable setup (as in unified code base across all distributions), I wanted it to work without installing too much. So I took the \u003ca href=\"http://nagiosplug.svn.sourceforge.net/viewvc/nagiosplug/nagiosplug/trunk/plugins/check_swap.c?view=markup\"\u003eswap plugin\u003c/a\u003e and basically removed what wasn\u0026rsquo;t necessary and \u003ca href=\"/uploads/2007/10/check_ram.patch\"\u003evoila\u003c/a\u003e!\u003c/p\u003e","title":"Nagios undamp; plugins"},{"content":"As some of you people know, we (as in the University) recently purchased some Thin Clients in order to replace some oldish\u0026rsquo; computers and solve the software management at the same time.\nThe Thin Clients ain\u0026rsquo;t bad, they are Wyse V90L\u0026rsquo;s and they (as in Wyse) use their own management software to manage and deploy those thin clients and software. The bad thing about that, is it\u0026rsquo;s using it\u0026rsquo;s own \u0026ldquo;Scripting Language\u0026rdquo; (if you can call it that way - it\u0026rsquo;s more pseudo scripting since you can\u0026rsquo;t do much with it besides some basic actions).\nThe Wyse Device Manager also introduces it\u0026rsquo;s own limitations. Up till now our DHCP had server options for thin clients in some other facility and thus was sending those to all subnets it\u0026rsquo;s acting on, thus overwriting (or disabling ?) the DHCP ACK send out by the WDM. But that\u0026rsquo;s only one.\nThe second one is that the WDM seems to use (or expect) the American date format internally. But how did I stumble upon that ? As you know, I\u0026rsquo;m living and working in Germany and we use a different time/date format than the American\u0026rsquo;s. Now, lets assume you want to deploy packages to you Thin Clients when no one\u0026rsquo;s using them anymore (like say - around midnight), you drag your package upon the devices and select \u0026quot; Specific Date/Time\u0026quot;. Now if you have the German date/time format, the WDM will simply tell you, \u0026quot; Deployment date can\u0026rsquo;t be less than the current system time.\u0026quot;\nInitially I was like WTF, didn\u0026rsquo;t I just enter a time in the future (~15 minutes in the future from where we at right now) ?\nFirst I looked through their Knowledgebase, but as nothing was documented there, I called their Support Hotline, where I briefly told \u0026rsquo;em what was going on and he immediately told me, that\u0026rsquo;d I was hitting that error, since the WDM is using _and_ expecting the American time/date format internally. But he told me that they\u0026rsquo;ll hopefully fix that with the next release since they get asked that quite often.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-10-06_thin-clients/","summary":"\u003cp\u003eAs some of you people know, we (as in the University) recently purchased some Thin Clients in order to replace some oldish\u0026rsquo; computers and solve the software management at the same time.\u003c/p\u003e\n\u003cp\u003eThe Thin Clients ain\u0026rsquo;t bad, they are \u003ca href=\"http://www.wyse.com/products/hardware/thinclients/V90L/index.asp\"\u003eWyse V90L\u003c/a\u003e\u0026rsquo;s and they (as in Wyse) use their own management software to manage and deploy those thin clients and software. The bad thing about that, is it\u0026rsquo;s using it\u0026rsquo;s own \u0026ldquo;Scripting Language\u0026rdquo; (if you can call it that way - it\u0026rsquo;s more pseudo scripting since you can\u0026rsquo;t do much with it besides some basic actions).\u003c/p\u003e","title":"Thin clients"},{"content":"Somehow, there still seem to exist honest people on this world \u0026hellip; I just found my drivers license in the mail, somehow the office responsible for the district I lost it in (it seems I lost it somewhere in Greifswald, since I got mail from the office in Landhagen) found it in their postbox and immediately mailed it to my address. YAY!\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-09-09_drivers-license/","summary":"\u003cp\u003eSomehow, there still seem to exist honest people on this world \u0026hellip; I just found my drivers license in the mail, somehow the office responsible for the district I lost it in (it seems I lost it somewhere in Greifswald, since I got mail from the office in Landhagen) found it in their postbox and immediately mailed it to my address. YAY!\u003c/p\u003e","title":"Drivers license"},{"content":"Apparently the TYPO3 version we are using, doesn\u0026rsquo;t play too nice with the MySQL MasterMaster replication.\nSometimes, something like this is going to happen:\n1 2 070826 0:44:32 [ERROR] Slave: Error \u0026#39;Duplicate entry \u0026#39;75-222419149\u0026#39; for key 1\u0026#39; on query. Default database: \u0026#39;t3nb\u0026#39;. Query: \u0026#39;INSERT INTO cache_pagesection 070826 0:44:32 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with \u0026#34;SLAVE START\u0026#34;. We stopped at log \u0026#39;dbc-mysql1.000192\u0026#39; position 611861372 Well, as you can see from the last line in the log, the Slave-SQL thread found a duplicate entry and thought it is smart to just turn off the thread instead of disregarding the just made entry. So from now on, both databases drift since there ain\u0026rsquo;t no replication anymore until someone kick starts the replication again (someone being me).\nAnyway, I think I finally traced the fucker down, supposedly one of the problematic cases is located in t3lib/class.t3lib_tstemplate.php on line 362.\n1 2 $GLOBALS[\u0026#39;TYPO3_DB\u0026#39;]-\u0026gt;exec_DELETEquery(\u0026#39;cache_pagesection\u0026#39;, \u0026#39;page_id=\u0026#39;.intval($GLOBALS[\u0026#39;TSFE\u0026#39;]-\u0026gt;id).\u0026#39; AND mpvar_hash=\u0026#39;.t3lib_div::md5int($GLOBALS[\u0026#39;TSFE\u0026#39;]-\u0026gt;MP)); $GLOBALS[\u0026#39;TYPO3_DB\u0026#39;]-\u0026gt;exec_INSERTquery(\u0026#39;cache_pagesection\u0026#39;, $insertFields); Basically what TYPO3 is doing is a DELETE and an INSERT right afterwards. But apparently, it doesn\u0026rsquo;t check whether the DELETE even succeeded. I hacked it for now, simply adding this:\n1 2 3 4 5 - $GLOBALS[\u0026#39;TYPO3_DB\u0026#39;]-\u0026gt;exec_INSERTquery(\u0026#39;cache_pagesection\u0026#39;, $insertFields); + // Only insert a new cache entry with the same value, if the DELETE succeeded + if ($GLOBALS[\u0026#39;TYPO3_DB\u0026#39;]-\u0026gt;sql_affected_rows() == 1) + $GLOBALS[\u0026#39;TYPO3_DB\u0026#39;]-\u0026gt;exec_INSERTquery(\u0026#39;cache_pagesection\u0026#39;, $insertFields); + Sadly, this looks more and more like a race-condition between the two boxes (as in the replication / UPDATE being too slow), when users visit a edited site, that hasn\u0026rsquo;t had it\u0026rsquo;s cache regenerated yet. Problem is, it ain\u0026rsquo;t just this single spot, but also the search indexing, image cache and the whole page cache. For now we switched the cluster to active/passive load balancing, till we have a chance to see if a newer TYPO3 fixes those issues.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-09-08_typo3-and-mysql-replication/","summary":"\u003cp\u003eApparently the TYPO3 version we are using, doesn\u0026rsquo;t play too nice with the MySQL MasterMaster replication.\u003c/p\u003e\n\u003cp\u003eSometimes, something like this is going to happen:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e070826  0:44:32 [ERROR] Slave: Error \u0026#39;Duplicate entry \u0026#39;75-222419149\u0026#39; for key 1\u0026#39; on query. Default database: \u0026#39;t3nb\u0026#39;. Query: \u0026#39;INSERT INTO cache_pagesection\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e070826  0:44:32 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with \u0026#34;SLAVE START\u0026#34;. We stopped at log \u0026#39;dbc-mysql1.000192\u0026#39; position 611861372\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eWell, as you can see from the last line in the log, the Slave-SQL thread found a duplicate entry and thought it is smart to just turn off the thread instead of disregarding the just made entry. So from now on, both databases drift since there ain\u0026rsquo;t no replication anymore until someone kick starts the replication again (someone being me).\u003c/p\u003e","title":"TYPO3 and MySQL replication"},{"content":"Well, the title nearly says everything .. I managed to loose my second pair of car keys, today I somehow found out that I was driving without a drivers license, so I have to go to the registration office and apply for a new one, hopefully should be done in about 4-6 weeks. Oh hell, and I have to spend about 40 € on it ..\nWell, live kinda sucks if you\u0026rsquo;re oblivious. Anyway, work is giving me a ass-load of fun right now, so I\u0026rsquo;m kinda happy, though it\u0026rsquo;s Saturday evening, I\u0026rsquo;m sitting back home, just lost all my custom build Debian packages (yes, I happen to use that at work, right after SLES) and listening to Hed PE.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-09-08_being-oblivious/","summary":"\u003cp\u003eWell, the title nearly says everything .. I managed to loose my second pair of car keys, today I somehow found out that I was driving without a drivers license, so I have to go to the registration office and apply for a new one, hopefully should be done in about \u003cstrong\u003e4-6 weeks\u003c/strong\u003e. Oh hell, and I have to spend about \u003cstrong\u003e40 €\u003c/strong\u003e on it ..\u003c/p\u003e\n\u003cp\u003eWell, live kinda sucks if you\u0026rsquo;re oblivious. Anyway, work is giving me a ass-load of fun right now, so I\u0026rsquo;m kinda happy, though it\u0026rsquo;s Saturday evening, I\u0026rsquo;m sitting back home, just lost all my custom build Debian packages (yes, I happen to use that at work, right after SLES) and listening to Hed PE.\u003c/p\u003e","title":"Being oblivious"},{"content":"OK, as Stephen recently asked why there is a double inclusion of in kernel/sysctl.c (and I asked Greg and Randy); I finally decided to write a patch to the LKML for possible inclusion.\nBut, git ain\u0026rsquo;t easy for people like me (who are used to the easiness of say - subversion or even cvs). So here\u0026rsquo;s what I did (thanks to Fernando for the help earlier today):\n1 2 3 4 5 6 7 8 9 $ vim kernel/sysctl.c // change something $ git checkout -b sysctl // create a new branch from your changes, based upon the master repository $ git commit -a -s // commit the changes to your newly created branch $ git format-patch master..sysctl // Enter a subject and then a separate description // and you should have a new file in the current working directory starting like 0001-*.patch Now you should have a mailable patch, ready to be sent upstream that looks like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 From 839ce261cf688d62bebd9ae3a0101dd672018940 Mon Sep 17 00:00:00 2001 From: Christian Heim Date: Sun, 19 Aug 2007 12:51:52 +0200 Subject: [PATCH] Remove double inclusion of linux/capability.h Remove the second inclusion of linux/capability.h, which has been introduced with \u0026#34;[PATCH] move capable() to capability.h\u0026#34; (or commit c59ede7b78db329949d9cdcd7064e22d357560ef). Signed-off-by: Christian Heim --- kernel/sysctl.c | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 8bdb8c0..9029690 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include -- 1.5.3.rc4 And if you wanna delete the branch afterwards again, just do this:\n1 2 3 4 $ git checkout master // Switch back to the master branch $ git branch -D sysctl // Delete the old branch named \u0026#34;sysctl\u0026#34; ","permalink":"https://christian.blog.pakiheim.de/posts/2007-08-16_git-lkml-for-stupid-people-like-me/","summary":"\u003cp\u003eOK, as \u003ca href=\"http://www.steev.net/\"\u003eStephen\u003c/a\u003e recently asked why there is a double inclusion of  in \u003ca href=\"http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=kernel/sysctl.c;hb=HEAD\"\u003ekernel/sysctl.c\u003c/a\u003e (and I asked Greg and Randy); I finally decided to write a patch to the LKML for possible inclusion.\u003c/p\u003e\n\u003cp\u003eBut, git ain\u0026rsquo;t easy for people like me (who are used to the easiness of say - subversion or even cvs). So here\u0026rsquo;s what I did (thanks to \u003ca href=\"http://blogs.gentoo.org/ferdy\"\u003eFernando\u003c/a\u003e for the help earlier today):\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e9\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ vim kernel/sysctl.c\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e// change something\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ git checkout -b sysctl\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e// create a new branch from your changes, based upon the master repository\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ git commit -a -s\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e// commit the changes to your newly created branch\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ git format-patch master..sysctl\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e// Enter a subject and then a separate description\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e// and you should have a new file in the current working directory starting like 0001-*.patch\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eNow you should have a mailable patch, ready to be sent upstream that looks like this:\u003c/p\u003e","title":"git-lkml for stupid people (like me)"},{"content":"Since my talk with Robin on Thursday regarding the autogenerated userinfo.xml, I finally found some time today to get all the info\u0026rsquo;s I need out of userinfo.xml.\nSince I don\u0026rsquo;t really want to manually enter all those mail addresses from userinfo into LDAP manually, I figured sed might be my best friend. BUT sed ain\u0026rsquo;t easy .. But thanks to Fabian and Gilles, I learned something new about sed today ..\nBasically I searched for a way to transform userinfo.xml into a datafile for ldapedit.\nAs most of you know, userinfo.xml would look like this:\n1 2 3 4 5 6 7 8 9 10 Christian Heim 0x9A9F68E6 phreak@gentoo.org 06 August 2005 vserver, openvz, kernel Germany, Stralsund So the first step would be to simply use egrep on userinfo.xm l to filter only the things I needed ..\n1 2 celsius roll-call [0] $ egrep \u0026#34;(username=|\u0026lt;email |)\u0026#34; userinfo.xml That looks more like a processable list to me. Now I only needed to convert the into dn, the into mail and be done with it.\nThis is what I applied on top of the above filter:\n1 2 3 4 5 celsius roll-call [0] $ egrep \u0026#34;(username=|\u0026lt;email |)\u0026#34; userinfo.xml | sed -e \u0026#34;s,.*$,,ou=devs,dc=gentoo,dc=orgnadd: mail,\u0026#34; -e \u0026#39;s,.*,mail: ,\u0026#39; -e \u0026#34;s,,,\u0026#34; -e \u0026#34;s, ,,\u0026#34; And that\u0026rsquo;s it, I just need to check the dn\u0026rsquo;s for all the users, and when I\u0026rsquo;m done with that, finito!\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-08-06_praise-teh-sed/","summary":"\u003cp\u003eSince my talk with \u003ca href=\"http://robbat2.livejournal.com/\"\u003eRobin\u003c/a\u003e on Thursday regarding the \u003ca href=\"https://bugs.gentoo.org/show_bug.cgi?id=129355\"\u003eautogenerated \u003cem\u003euserinfo.xml\u003c/em\u003e\u003c/a\u003e, I finally found some time today to get all the info\u0026rsquo;s I need out of \u003cem\u003euserinfo.xml\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003eSince I don\u0026rsquo;t really want to manually enter all those mail addresses from \u003cem\u003euserinfo\u003c/em\u003e into LDAP manually, I figured sed might be my best friend. \u003cem\u003e\u003cstrong\u003eBUT\u003c/strong\u003e\u003c/em\u003e \u003cem\u003esed\u003c/em\u003e ain\u0026rsquo;t easy .. But thanks to Fabian and Gilles, I learned something new about \u003cem\u003esed\u003c/em\u003e today ..\u003c/p\u003e\n\u003cp\u003eBasically I searched for a way to transform \u003cem\u003euserinfo.xml\u003c/em\u003e into a datafile for \u003cem\u003eldapedit\u003c/em\u003e.\u003c/p\u003e","title":"Praise teh sed"},{"content":"As apparently the guys at Teamix read my recent blog post about their cluster solution, someone of their technical support called me on friday at work \u0026#x1f633;\nAnd pointed out\nThat I\u0026rsquo;m free to express my thoughts about their product (which I recently did) That there is a better way to workaround this issue He also said, its something which they had asked multiple times. It\u0026rsquo;s as simple as editing the Virtual Server and changing the service inspection from \u0026ldquo;Connection\u0026rdquo; to \u0026ldquo;None\u0026rdquo; .. duh\nDon\u0026rsquo;t get me wrong, the previous rant simply originated from the logs filling up within three day. I still like the PacketPro.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-08-05_packetpro-450-and-ssh-checks/","summary":"\u003cp\u003eAs apparently the guys at Teamix read my recent blog post about their cluster solution, someone of their technical support called me on friday at work \u0026#x1f633;\u003c/p\u003e\n\u003cp\u003eAnd pointed out\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eThat I\u0026rsquo;m free to express my thoughts about their product (which I recently did)\u003c/li\u003e\n\u003cli\u003eThat there is a better way to workaround this issue\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eHe also said, its something which they had asked multiple times. It\u0026rsquo;s as simple as editing the \u003cstrong\u003eVirtual Server\u003c/strong\u003e and changing the \u003cstrong\u003eservice inspection\u003c/strong\u003e from \u003cem\u003e\u0026ldquo;Connection\u0026rdquo;\u003c/em\u003e to \u003cem\u003e\u0026ldquo;None\u0026rdquo;\u003c/em\u003e .. \u003cem\u003e\u003cstrong\u003eduh\u003c/strong\u003e\u003c/em\u003e\u003c/p\u003e","title":"PacketPro 450 and SSH checks"},{"content":"So we bought some Fujitsu Siemens P5916 Intel vPro back in January/February for the Boss and his secretary.\nThese boxes are quite nice, come with a Core 2 Duo (which is waaay to overrated for simple business applications like Word, Excel, Access and Outlook), but he insisted on having Windows Vista Ultimate ready PC\u0026rsquo;s.\nWe got them, as expected completely blank. Wasn\u0026rsquo;t so much of a problem though, since we have a Select 5.0 6.0 contract with M$. Only problem was, they refused to install Vista (as in freezing after preping the HDD). So I called our local vendor, who told me \u0026quot; Go, grab the latest BIOS from the support page and perform a BIOS update!\u0026quot; - Which I wasn\u0026rsquo;t so happy about to hear and to do \u0026hellip; That didn\u0026rsquo;t work, the box would freeze on boot now \u0026hellip;\nSo we reprimand our local vendor, who pushed the liability away from themselves and onto Fujitsu Siemens Computers (since they labeled these things Vista Ready). Next thing I know, I was talking to the sales person responsible for the R\u0026amp;D (F\u0026amp;L in german) in Mecklenburg-Vorpommern, claiming \u0026quot; It would have been bettar if you bought these with Vista preinstalled - eh ?\u0026quot;, which I doubted (and still doubt) since drivers can\u0026rsquo;t change if you can install Vista on it when Vista itself considers the BIOS \u0026quot; not ACPI compatible\u0026quot; \u0026hellip; \u0026#x1f47f;\nThat was about the time when I stopped listening and thought about buying Dell desktops from now on \u0026hellip; since I\u0026rsquo;m completely sick and tired of being treated like the last low-tech moron by a) sales representatives, b) vendors, c) lvl2 technical support and d) engineering.\nAnyway - I was trying to tell today\u0026rsquo;s story .. So the Boss called me in around 9\u0026rsquo;, asking me to take a look at his Outlook since it complained about \u0026quot; H:Outlook.pst\u0026quot; not being present ( H: is the drive for the roaming profiles and the private data for every employee). So I looked a bit further, into the Event log of this Vista box where I found something like \u0026ldquo;No Logon Server found, your last locally saved profile is being reused, please contact your administrator\u0026rdquo;. From there on, I was rather - err -puzzled about the way Windows Vista is handling Roaming profiles.\nOpened up a command prompt, tried ping\u0026lsquo;ing the router in the subnet and got a garblish response from ping (which I\u0026rsquo;ve never seen before). First I checked whether the cable was OK (it was), afterwards I went grabbing his computer back to the workroom, plugged in a separate NIC, which worked but Vista didn\u0026rsquo;t had drivers for. So plugged in the next one, googled for Vista drivers (which I luckily found), plugged in my pendrive and hoped they\u0026rsquo;d work with Vista .. but NOOOOOOOOOOOOOO.\nSo I pulled the NIC again, only to see that the model numbers differed in the second digit (I plugged in a 5 0 0TX while I had a 5 3 0TX in my hands to look at the model number). Plugged in the NIC in my hands, did the same game again .. and Voilà, \u0026quot; Houston, we have lifted off \u0026hellip;\u0026quot;.\nCarried the PC back into his office, plugged it in, told him he could try to login now \u0026hellip; and at finally around 10:30\u0026rsquo;ish he had his PC in a working condition back, and at least it seemed as if he was rather happy about it \u0026#x1f606;\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-07-12_fujitsu-siemens-onboard-nic-s-quality-assurance-and-vendors/","summary":"\u003cp\u003eSo we bought some Fujitsu Siemens P5916 Intel vPro back in January/February for the Boss and his secretary.\u003c/p\u003e\n\u003cp\u003eThese boxes are quite nice, come with a Core 2 Duo (which is waaay to overrated for simple business applications like Word, Excel, Access and Outlook), but he insisted on having Windows Vista Ultimate ready PC\u0026rsquo;s.\u003c/p\u003e\n\u003cp\u003eWe got them, as expected completely \u003cem\u003e\u003cstrong\u003eblank\u003c/strong\u003e\u003c/em\u003e. Wasn\u0026rsquo;t so much of a problem though, since we have a Select 5.0 6.0 contract with \u003cem\u003eM$\u003c/em\u003e. Only problem was, they refused to install Vista (as in freezing after preping the HDD). So I called our local vendor, who told me \u0026quot; \u003cem\u003eGo, grab the latest BIOS from the support page and perform a BIOS update!\u003c/em\u003e\u0026quot; - Which I wasn\u0026rsquo;t so happy about to hear and to do \u0026hellip; That didn\u0026rsquo;t work, the box would freeze on boot now \u0026hellip;\u003c/p\u003e","title":"Fujitsu Siemens, onboard NIC's, Quality assurance and vendors"},{"content":"What would you figure from the above ? Hopefully the rather obvious, that it\u0026rsquo;s a really shitty combination.\nSo we figured it would be a nice thing to test our new setup before going into pre-production testing or production, but we don\u0026rsquo;t have an extra spare box. So we took one of the power4 boxes we have mounted in the rack basically consuming energy all day (that\u0026rsquo;s about 38kWh a day) and installed SLES10 onto it. Which wasn\u0026rsquo;t all that bad (at first the box repeatedly started back to AIX, from CD and after convincing the SMS - that\u0026rsquo;s basically the bios on the power*-boxes also known as System Management Services with a hammer to boot from the first hard disk).\nThe real bad part started later. First the box committed suicide sometime on the weekend (the last one that is), which is rather not so good.\nSo we installed the ocfs2-tools (which is obviously needed if you want do writes on a SAN volume mounted on two separate boxes), configured the o2cb thing to start automatically on boot and added the entry to /etc/fstab.\nSo far so good, but as we slowly activated the apache-vhosts, we finally came to what cost me about three damned hours of my life:\n1 child pid ### exit signal Segmentation fault (11) Now guess what \u0026hellip; ZendOptimizer just went bye-bye \u0026hellip; Damn and what now ? So I looked at the Knowledgebase on zend.com, even found an Article stating it\u0026rsquo;d do that from time to time \u0026hellip;\nAnd attached also the usual crap .. \u0026ldquo;Please update to the latest version\u0026rdquo;. Only problem with that is that the latest version is indeed available for x86_64 (meaning amd64 in Gentoo terms), but ain\u0026rsquo;t for ppc (even if the product page states it should be).\nSo I went home, knowing what the problem is - since it was already past 4pm - swearing a short \u0026quot; frack that\u0026quot;.\nNow that I\u0026rsquo;m home, ate something (a rather good salad), listening to some Korn/Kid Rock/Offspring and after doing some undertakers work, I asked myself \u0026quot; Why exactly do we need that crappy application anyway ?\u0026quot; (beyond the obvious point, that the ZendOptimizer is like/ is a php-compiler cache).\nIt turns out, one of my co-workers wrote a TYPO3-plugin interfacing our local research database .. and the catchy thing is, guess what \u0026hellip;\nHe \u0026quot; guarded\u0026quot; it with ZendGuard, thus we need to use the ZendOptimizer thingy; otherwise we couldn\u0026rsquo;t use it either \u0026hellip; \u0026#x1f633;\nO RLY ?\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-07-11_sles-zendoptimizer-and-ibm-powerpc-4/","summary":"\u003cp\u003eWhat would you figure from the above ? Hopefully the rather obvious, that it\u0026rsquo;s a \u003cem\u003e\u003cstrong\u003ereally\u003c/strong\u003e\u003c/em\u003e shitty combination.\u003c/p\u003e\n\u003cp\u003eSo we figured it would be a nice thing to test our new setup before going into pre-production testing or production, but we don\u0026rsquo;t have an extra spare box. So we took one of the power4 boxes we have mounted in the rack basically consuming energy all day (that\u0026rsquo;s about 38kWh a day) and installed \u003cem\u003eSLES10\u003c/em\u003e onto it. Which wasn\u0026rsquo;t all that bad (at first the box repeatedly started back to AIX, from CD and after convincing the SMS - that\u0026rsquo;s basically the bios on the power*-boxes also known as System Management Services with a hammer to boot from the first hard disk).\u003c/p\u003e","title":"SLES, ZendOptimizer and IBM PowerPC(4)+"},{"content":"So I have one or the other file, that needs to be extracted to a directory. And why not name it as the archive itself .. Only problem with it is the handling of variables with bash \u0026hellip;\nTry it yourself, stuff some directories with a space in inside a variables, and use something like this:\n1 2 3 epimetheus tmp [0] $ mkdir files epimetheus tmp [0] $ touch files/\u0026#34;I hate directories.archive\u0026#34; files/\u0026#34;Me luuv you looong time.archive\u0026#34; epimetheus tmp [0] $ for i in $( /bin/ls --color=none files/ ); do mkdir \u0026#34;${i/.archive/}\u0026#34;; done And now take a look at the output of that ..\n1 2 epimetheus tmp [0] $ ls I/ Me/ directories/ files/ hate/ looong/ luuv/ time/ you/ Means, the ` mkdir\u0026rsquo; created a directory for every entry in the ` ls\u0026rsquo; output that was separated by a space char \u0026hellip; and I\u0026rsquo;ve no frickin clue on how to get that thing right \u0026hellip; \u0026#x1f620;\nUpdate: Thanks to Roy I know how one handles such things \u0026hellip; \u0026#x1f62c; It\u0026rsquo;s rather simple g\n1 epimetheus tmp [0] $ for i in files/*; do mkdir \u0026#34;$( basename \u0026#34;${i/.archive/}\u0026#34; )\u0026#34;; done That should give you the desired effect \u0026#x2757;\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-07-08_handling-files-directories-with-spaces-in-for-loops/","summary":"\u003cp\u003eSo I have one or the other file, that needs to be extracted to a directory. And why not name it as the archive itself .. Only problem with it is the handling of variables with bash \u0026hellip;\u003c/p\u003e\n\u003cp\u003eTry it yourself, stuff some directories with a space in inside a variables, and use something like this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eepimetheus tmp [0] $ mkdir files\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eepimetheus tmp [0] $ touch files/\u0026#34;I hate directories.archive\u0026#34; files/\u0026#34;Me luuv you looong time.archive\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eepimetheus tmp [0] $ for i in $( /bin/ls --color=none files/ ); do mkdir \u0026#34;${i/.archive/}\u0026#34;; done\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAnd now take a look at the output of that ..\u003c/p\u003e","title":"Handling files/directories with spaces in `for'-loops"},{"content":"Today I played a bit with our PE Chassis, or more specifically the DRAC/MC (remote management console). One of the things I\u0026rsquo;ve been experiencing was that the DRAC/MC was rather slow when browsing on the web interface (as in waiting a minute for the jnlp for the KVM to download). So I went ahead, fired up net-misc/atftp on my notebook, put the firmware update provided by Dell in the TFTPROOT and executed this in my telnet session on the DRAC/MC:\n1 DRAC/MC # racadm fwupdate -a \u0026lt;ip-ADDRESS\u0026gt; -d mgmt.bin You may ask now, wtf does he use telnet for on that box ? It\u0026rsquo;s as simple as Dell isn\u0026rsquo;t providing anything else to use, the switches come w/ ssh, but not the management console. Only way to get ssh is to buy a new one, which is like 500 EUR.\nWaited a few minutes impatiently for the DRAC/MC to come back up (and it finally came back up). The good thing is, the DRAC/MC is now at least a bit faster (at least I feel its a bit faster) and we\u0026rsquo;re up at mgmt-1.4.2.\nNow, since we are a member of the DFN CA, we are able to generate signed certificates (at least Internet Explorer recognizes it through the DTAG Root certificate - which Mozilla products sadly don\u0026rsquo;t have by default). For that I need a 2048 bit PCKS#10 (or CSR), which I tried to squash out of the DRAC/MC. But what the hell \u0026#x2753;\nThe DRAC/MC only gives me a 1024 bit one without the possibility to choose what kind of CSR I want to generate \u0026hellip; \u0026#x1f620;\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-07-06_dell-poweredge-1855-drac-mc-firmware-updates-telnet-and-csr-s/","summary":"\u003cp\u003eToday I played a bit with our PE Chassis, or more specifically the DRAC/MC (remote management console). One of the things I\u0026rsquo;ve been experiencing was that the DRAC/MC was rather slow when browsing on the web interface (as in waiting a minute for the jnlp for the KVM to download). So I went ahead, fired up \u003cem\u003enet-misc/atftp\u003c/em\u003e on my notebook, put the firmware update provided by Dell in the \u003cstrong\u003eTFTPROOT\u003c/strong\u003e and executed this in my telnet session on the DRAC/MC:\u003c/p\u003e","title":"Dell PowerEdge 1855, DRAC/MC, firmware updates, telnet and csr's"},{"content":"After today\u0026rsquo;s adventure with the kernel bonding, I just took a look at the code \u0026hellip;\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 if (miimon) { printk(KERN_INFO DRV_NAME \u0026#34;: MII link monitoring set to %d msn\u0026#34;, miimon); } else if (arp_interval) { int i; printk(KERN_INFO DRV_NAME \u0026#34;: ARP monitoring set to %d ms, validate %s, with %d target(s):\u0026#34;, arp_interval, arp_validate_tbl[arp_validate_value].modename, arp_ip_count); for (i = 0; i \u0026lt; arp_ip_count; i++) printk (\u0026#34; %s\u0026#34;, arp_ip_target[i]); printk(\u0026#34;n\u0026#34;); } else { /* miimon and arp_interval not set, we need one so things * work as expected, see bonding.txt for details */ printk(KERN_WARNING DRV_NAME \u0026#34;: Warning: either miimon or arp_interval and \u0026#34; \u0026#34;arp_ip_target module parameters must be specified, \u0026#34; \u0026#34;otherwise bonding will not detect link failures! see \u0026#34; \u0026#34;bonding.txt for details.n\u0026#34;); } If I read it right, you only get the KERN_WARNING for \u0026ldquo;either miimon or arp_interval\u0026rdquo; only if miimon or arp_interval isn\u0026rsquo;t set \u0026hellip; but at least my config says it is .. \u0026#x1f937; .. bed time for me :rolling_eyes:\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-07-04_miimon-arp-interval-and-the-code/","summary":"\u003cp\u003eAfter \u003ca href=\"/posts/2014-08-16_adapter-teaming-on-sles10\" title=\"Adapter teaming on SLES10\"\u003etoday\u0026rsquo;s adventure\u003c/a\u003e with the kernel bonding, I just took a look at the \u003ca href=\"http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=drivers/net/bonding/bond_main.c;hb=HEAD\"\u003ecode\u003c/a\u003e \u0026hellip;\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-20\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-20\"\u003e20\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-21\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-21\"\u003e21\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-22\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-22\"\u003e22\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-23\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-23\"\u003e23\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-24\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-24\"\u003e24\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-25\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-25\"\u003e25\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-26\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-26\"\u003e26\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-27\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-27\"\u003e27\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-28\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-28\"\u003e28\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         if (miimon) {\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 printk(KERN_INFO DRV_NAME\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u0026#34;: MII link monitoring set to %d msn\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        miimon);\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         } else if (arp_interval) {\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 int i;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 printk(KERN_INFO DRV_NAME\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u0026#34;: ARP monitoring set to %d ms, validate %s, with %d target(s):\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        arp_interval,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        arp_validate_tbl[arp_validate_value].modename,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        arp_ip_count);\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 for (i = 0; i \u0026lt; arp_ip_count; i++)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                         printk (\u0026#34; %s\u0026#34;, arp_ip_target[i]);\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 printk(\u0026#34;n\u0026#34;);\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         } else {\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 /* miimon and arp_interval not set, we need one so things\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                  * work as expected, see bonding.txt for details\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                  */\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 printk(KERN_WARNING DRV_NAME\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u0026#34;: Warning: either miimon or arp_interval and \u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u0026#34;arp_ip_target module parameters must be specified, \u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u0026#34;otherwise bonding will not detect link failures! see \u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u0026#34;bonding.txt for details.n\u0026#34;);\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         }\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eIf I read it right, you only get the \u003cstrong\u003eKERN_WARNING\u003c/strong\u003e for \u0026ldquo;either miimon or arp_interval\u0026rdquo; only if miimon or arp_interval isn\u0026rsquo;t set \u0026hellip; but at least my config says it is .. \u0026#x1f937; .. bed time for me :rolling_eyes:\u003c/p\u003e","title":"miimon, arp_interval and the code"},{"content":"Okay, yet another day passed by blazing fast. I had a good day at work, spent nearly the whole day trying to get my bloody systems hooked up to our SAN (which was interrupted by a non-working SAN-switch, disappearing WWN\u0026rsquo;s, lunch and my trainees), messing around with our internal network, hacking our Blade Chassis switches to get me what I want and some random paperwork.\nBut first things first .. We installed SLES10 on a pSeries box the other day (I think on Monday), and now I\u0026rsquo;m trying to get the WWN of it\u0026rsquo;s Emulex HBA, out of either sysfs or procfs. But whatcha\u0026rsquo; thinking ?\nI can\u0026rsquo;t get the dreaded WWN our of anything. Emulex\u0026rsquo;s hbacmd(from their HBAnyware utility) tells me there is no HBA and/or I don\u0026rsquo;t have the lpfc driver loaded (which can\u0026rsquo;t be, since I see IBM Tape Drives and my DS4300/FAStT900 via the lpfc), which is like \u0026hellip; \u0026#x1f620;\nSo if any Emulex/pSeries expert is reading this, please (I beg you) tell me how the frack I get the WWN squashed out of it without looking either at the back of the rack or into the BIOS.\nAnd here\u0026rsquo;s just for the record (my own - so I don\u0026rsquo;t need to look it up more often) the way on how to reset the attention indicators (basically LED\u0026rsquo;s) on the front of a pSeries box running Linux, which gets turned on when either resetting the box or killing it in startup:\n1 2 3 4 5 6 7 8 9 10 # Make sure we have powerpc-utils installed .. pSeries ~ [0] $ rpm -qa | grep powerpc-utils powerpc-utils-1.0.0-5.4 # Tell us, which LEDs have which address/status pSeries ~ [0] $ usysattn U0.1 [on] # Turn of the given LED pSeries ~ [0] $ usysattn -l U0.1 -s normal That\u0026rsquo;s it, the LED is off.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-07-04_sles10-on-pseries/","summary":"\u003cp\u003eOkay, yet another day passed by blazing fast. I had a good day at work, spent nearly the whole day trying to get my bloody systems hooked up to our SAN (which was interrupted by a non-working SAN-switch, disappearing WWN\u0026rsquo;s, lunch and my trainees), messing around with our internal network, hacking our Blade Chassis switches to get me what I want and some random paperwork.\u003c/p\u003e\n\u003cp\u003eBut first things first .. We installed SLES10 on a pSeries box the other day (I think on Monday), and now I\u0026rsquo;m trying to get the \u003cstrong\u003e\u003cem\u003eWWN\u003c/em\u003e\u003c/strong\u003e of it\u0026rsquo;s \u003cstrong\u003eEmulex HBA\u003c/strong\u003e, out of either sysfs or procfs. But whatcha\u0026rsquo; thinking ?\u003c/p\u003e","title":"SLES10 on pSeries"},{"content":"Yessir, I\u0026rsquo;m back home. Bought a new bed (god, I forgot how good sleeping can feel) and spent the first two days at work already (yes, it\u0026rsquo;s Friday afternoon already).\nI really thought catching up after having a 2 week vacation would take more time, but it just took yesterday morning (till ~9am). I\u0026rsquo;m surprised by the taste of black tea with milk and sugar (yes, I was like yikes initially, but I like it pretty much now \u0026#x1f600; ) and by the ability to rise at 7am in the morning \u0026#x1f61b;\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-06-29_being-back-home/","summary":"\u003cp\u003eYessir, I\u0026rsquo;m back home. Bought a new bed (god, I forgot how good sleeping can feel) and spent the first two days at work already (yes, it\u0026rsquo;s Friday afternoon already).\u003c/p\u003e\n\u003cp\u003eI \u003cem\u003e\u003cstrong\u003ereally\u003c/strong\u003e\u003c/em\u003e thought catching up after having a 2 week vacation would take more time, but it just took yesterday morning (till ~9am). I\u0026rsquo;m surprised by the taste of black tea with milk and sugar\n(yes, I was like \u003cstrong\u003e\u003cem\u003e\u003cem\u003eyikes\u003c/em\u003e\u003c/em\u003e\u003c/strong\u003e initially, but I like it pretty much now \u0026#x1f600; ) and by the ability to rise at 7am in the morning \u0026#x1f61b;\u003c/p\u003e","title":"Being back home"},{"content":"On Monday I finally got to do an expanded test drive with my shiny, new car (that is driving it up from Stralsund down to Stuttgart). I really can\u0026rsquo;t complain, the fuel consumption is like I expected (~6.6l/100km while driving between 160 and 180km/h), the noise while driving that fast is quite low (as in you hear the engine but you don\u0026rsquo;t really consider it noise) and the acceleration is nearly like the one of a F1-car \u0026#x1f61b; (at least I\u0026rsquo;d wish \u0026#x1f609; ). Spent the evening relaxing from the near 950km nonstop trip (yes, only had one stop to put some fuel back into the car), had nice curry (my cousin\u0026rsquo;s husband made yummy potato curry!!!).\nOn Tuesday I nearly spent the whole time on a boat driving down and up the Neckar (that\u0026rsquo;s the river flowing through Baden-Wuerttemberg), being lazy, lying in the sun for 5 or 6 hours, spent time talking to my aunt and to my cousin while trying to listen to the music fluttering out of my iPod nano ( \u0026ldquo;Autobahn - Linke Spur\u0026rdquo;).\nOn Wednesday I got up rather late, helped my aunt picking up her car from the car dealer (they had to fix the air conditioner and did the yearly inspection). Afterwards my brother and I went of to see if we could find a nice and gooood bed pour moi at Ikea in Sindelfingen (yes, I admit it .. I like IKEA too \u0026#x1f62f; - which turned out rather, err, shite. I didn\u0026rsquo;t find a bed pour moi, but I picked up a couple of bookshelf\u0026rsquo;s and a 2,20m\u0026rsquo;ish CD/DVD shelf.\nOn Thursday, I had my complete lazy day. Woke up around 9am, went downstairs to see my brother and my cousin\u0026rsquo;s husband and his parents were already awake. Ate breakfast till 11am and sat around on the sofa for a few hours and waited till my aunt and my cousin would wake up. In the afternoon I went to see my other uncle and aunt, did some catch-up with them, played a bit with their cutie cats (they are like 9 months old). Afterwards we went shopping for some Maultaschen for my brother\u0026rsquo;s host family in Belgium/Eupen. Went onwards to see my other cousin\u0026rsquo;, his wife and his cute lil\u0026rsquo; daughters. That was my lil\u0026rsquo; four day vacation in Baden-Wuerrtemberg \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-06-29_stuttgart/","summary":"\u003cp\u003eOn Monday I finally got to do an \u003cem\u003eexpanded\u003c/em\u003e test drive with my shiny, new car (that is driving it up from Stralsund down to Stuttgart). I really can\u0026rsquo;t complain, the fuel consumption is like I expected (~6.6l/100km while driving between 160 and 180km/h), the noise while driving that fast is quite low (as in you hear the engine but you don\u0026rsquo;t really consider it noise) and the acceleration is nearly like the one of a F1-car \u0026#x1f61b; (at least I\u0026rsquo;d wish \u0026#x1f609; ). Spent the evening relaxing from the near 950km nonstop trip (yes, only had one stop to put some fuel back into the car), had nice curry (my cousin\u0026rsquo;s husband made yummy potato curry!!!).\u003c/p\u003e","title":"Stuttgart"},{"content":"Here\u0026rsquo;s just a note for you people out there, how\u0026rsquo;re crazy enough and want something from me in the next week (that\u0026rsquo;s 18th till 26th June):\nI\u0026rsquo;m on vacation \u0026hellip;\nMeans I won\u0026rsquo;t be around to fix anything (as I\u0026rsquo;m gonna try and relax a bit), so if you encounter something that you want to fix; consult with the herd (that\u0026rsquo;s apache/hardened/kernel \u0026hellip;) and/or fix it YOURSELF. Just make sure you don\u0026rsquo;t break it more :rolling_eyes:\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-06-17_vacation/","summary":"\u003cp\u003eHere\u0026rsquo;s just a note for you people out there, how\u0026rsquo;re crazy enough and want something from me in the next week (that\u0026rsquo;s 18th till 26th June):\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eI\u0026rsquo;m on vacation\u003c/strong\u003e \u0026hellip;\u003c/p\u003e\n\u003cp\u003eMeans I won\u0026rsquo;t be around to fix anything (as I\u0026rsquo;m gonna try and relax a bit), so if you encounter something that you want to fix; consult with the herd (that\u0026rsquo;s apache/hardened/kernel \u0026hellip;) and/or fix it \u003cstrong\u003eYOURSELF\u003c/strong\u003e. Just make sure you don\u0026rsquo;t break it more :rolling_eyes:\u003c/p\u003e","title":"Vacation"},{"content":"OK, it turns out that I was rather stupid when configuring the my.cnf. As it turned out, the effect I was seeing was due to the presence of two log-bin lines, which looked like the following:\n1 2 3 4 5 6 7 8 9 10 11 12 [mysqld] port = 3306 datadir = /mysql/dbase log = /mysql/logs/dbc-mysql1.log log-error = /mysql/logs/dbc-mysql1.err socket = /var/lib/mysql/mysql.sock bind = 172.16.234.31 # custom paths for binary logs log-bin = /mysql/binlogs/dbc-mysql1 log-bin-index = /mysql/binlogs/dbc-mysql1.idx relay-log = /mysql/binlogs/dbc-mysql1.relay And some lines down there was this:\n1 2 # custom paths for binary logs log-bin Now the next thing I encountered was while importing our old databases (they are like 1.1GiB each, 25 databases total). The second MySQL Master (and his Slave) will choke as soon as you dump the data too fast into the first Master, as the binlog seems to be too big for MySQL to transfer it via TCP (smth like \u0026ldquo;Packet too large - try increasing max_packet_size\u0026rdquo; in the error-log; only problem was that max_packet_size was already at 1GiB which is the absolut maximum for MySQL 5.0 according to the handbook).\nA way around this (thanks to a co-worker who pushed me towards this road) is disabling all the MySQL Master/Slave stuff in your my.cnf, start the mysql daemon as a simple, dumb database, import all your databases, stop the mysql daemon; tar up the whole BASEDIR and scp/ rssh it to your second master.\nClean out the BASEDIR on the second master, untar your tarball, edit your my.cnf again to include the whole Master/Slave portions on both boxes and you should be up and running \u0026#x1f600;\nI haven\u0026rsquo;t run any tests on the MasterMaster replication yet, but I\u0026rsquo;ll do that as soon as I\u0026rsquo;m at work again (which is the 27th June, as I\u0026rsquo;m off for vacation since yesterday, yay!)\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-06-16_continuing-on-sles10/","summary":"\u003cp\u003eOK, it turns out that I was rather stupid when configuring the \u003cem\u003emy.cnf\u003c/em\u003e. As it turned out, the effect I was seeing was due to the presence of two log-bin lines, which looked like the following:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003emysqld\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eport\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e3306\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edatadir\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emysql\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edbase\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003elog\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emysql\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003elogs\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edbc\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003emysql1\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elog\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003elog\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eerror\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emysql\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003elogs\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edbc\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003emysql1\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eerr\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esocket\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"k\"\u003evar\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003elib\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emysql\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emysql\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esock\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebind\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mf\"\u003e172.16\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e234.31\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# custom paths for binary logs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003elog\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ebin\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emysql\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ebinlogs\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edbc\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003emysql1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003elog\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ebin\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eindex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emysql\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ebinlogs\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edbc\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003emysql1\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eidx\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erelay\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"nb\"\u003elog\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003emysql\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003ebinlogs\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edbc\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003emysql1\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erelay\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAnd some lines down there was this:\u003c/p\u003e","title":"Continuing on SLES10"},{"content":"Here I am, sitting at my desk on a Thuesday evening thinking about what happened the last few days.\nI finally got to play around with our PacketPro 450 Cluster(nifty LoadBalancing appliance) We reworked the network the way we want it (and not that tool of a wannabe sysadmin) We mostly figured out how to do the LoadBalancing right, we just need to find some bugs in the LoadBalancer software (like the thing is failing over to its slave from time to time, but keeping the IP address for himself) or let the guys at teamix do their work and hopefully get a working release within the next week or so I figured out how to setup interface bonding with SLES10 (it was quite straight forward, thanks to the excellent in-kernel documentation), and we\u0026rsquo;re using an active-backup mode for now I still need to figure out how to do the MySQL Master\u0026lt;-\u0026gt;Master replication right .. I\u0026rsquo;m currently building fresh RPM\u0026rsquo;s on one of those Dell blades (yes, they ROCK!) which will hopefully be finished till I\u0026rsquo;m at the office tomorrow. Pt. 5 also includes figuring out how to pass MySQL a custom location for the binary-log, at least that\u0026rsquo;s what the handbook says in Chapter \u0026ldquo;5.11.3. The Binary Log\u0026rdquo; \u0026hellip; When started with the \u0026ndash;log-bin[=base_name] option, mysqld writes a log file containing all SQL commands that update data. If no base_name value is given, the default name is the name of the host machine followed by -bin. If the basename is given, but not as an absolute pathname, the server writes the file in the data directory. It is recommended that you specify a basename; see Section B.1.8.1, “Open Issues in MySQL”, for the reason.\nThat behavior works for \u0026ndash;log-bin-index (like log-bin-index=/mysql/binlogs/$HOSTNAME.idx), but doesn\u0026rsquo;t for \u0026ndash;log-bin. \u0026#x1f937; I\u0026rsquo;ll see if that is fixed with something \u0026gt;5.0.18 (that\u0026rsquo;s what SLES10 currently ships).\nI\u0026rsquo;m also looking for a network topology drawing program (possibly free), as Microsoft Visio (either 2003 or 2007, Standard or Professional) is nice, but still can\u0026rsquo;t draw shit correctly. So I stumbled upon yEd, which seems to look nice (I haven\u0026rsquo;t yet looked at it, but will tomorrow) that hopefully gives me the opportunity to draw/visualize my setup at work \u0026#x1f633;\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-06-12_back-at-sles10/","summary":"\u003cp\u003eHere I am, sitting at my desk on a Thuesday evening thinking about what happened the last few days.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eI finally got to play around with our \u003ca href=\"http://www.packetpro.de/content/view/63/112/\" title=\"PacketPro 450 Cluster\"\u003ePacketPro 450 Cluster\u003c/a\u003e(nifty LoadBalancing appliance)\u003c/li\u003e\n\u003cli\u003eWe reworked the network the way \u003cem\u003e\u003cstrong\u003ewe\u003c/strong\u003e\u003c/em\u003e want it (and not that tool of a wannabe sysadmin)\u003c/li\u003e\n\u003cli\u003eWe mostly figured out how to do the LoadBalancing right, we just need to find some bugs in the LoadBalancer software (like the thing is failing over to its slave from time to time, but keeping the IP address for himself) or let the guys at \u003ca href=\"http://www.teamix.net/\"\u003eteamix\u003c/a\u003e do their work and hopefully get a working release within the next week or so\u003c/li\u003e\n\u003cli\u003eI figured out how to setup interface bonding with SLES10 (it was quite straight forward, thanks to the excellent in-kernel documentation), and we\u0026rsquo;re using an active-backup mode for now\u003c/li\u003e\n\u003cli\u003eI still need to figure out how to do the MySQL Master\u0026lt;-\u0026gt;Master replication right .. I\u0026rsquo;m currently building fresh RPM\u0026rsquo;s on one of those Dell blades (yes, they ROCK!) which will hopefully be finished till I\u0026rsquo;m at the office tomorrow.\u003c/li\u003e\n\u003cli\u003ePt. 5 also includes figuring out how to pass MySQL a custom location for the binary-log, at least that\u0026rsquo;s what the \u003ca href=\"http://dev.mysql.com/doc/refman/5.0/en/binary-log.html\" title=\"MySQL handbook, Chapter 5.11.3. The Binary Log\"\u003ehandbook\u003c/a\u003e says in Chapter \u0026ldquo;5.11.3. The Binary Log\u0026rdquo; \u0026hellip;\u003c/li\u003e\n\u003c/ol\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWhen started with the \u0026ndash;log-bin[=base_name] option, mysqld writes a log file containing all SQL commands that update data. If no base_name value is given, the default name is the name of the host machine followed by -bin. If the basename is given, but not as an absolute pathname, the server writes the file in the data directory. It is recommended that you specify a basename; see Section B.1.8.1, “Open Issues in MySQL”, for the reason.\u003c/p\u003e","title":"Back at SLES10"},{"content":"We\u0026rsquo;re finally making some progress with apache-2.2. It left the package.mask on the 8th of May (that\u0026rsquo;s like 3 weeks from tomorrow), we split some helper scripts into a separate package (app-admin/apache-tools).\nI already fixed a few screwup I did myself (like apxs missing from either apache and apache-tools, or the compatibility symlinks being missing), so we \u0026ldquo;just\u0026rdquo; need to fix all the modules in the tree before apache-2.2 is going to get the new stable version (and of course anything else depending on. What also remains to do, is committing the new-style virtuals for bug 11007.\nAlso apache-1* is going to get removed from the tree pretty soon now (like starting next month 12th iirc). Now if anyone is going to start again, about apache-1* being \u0026quot; sooo\u0026quot; great and \u0026quot; waaay\u0026quot; better then the 2.* series, it may be yes.\nBut the point is, we (as in the apache team) needs to maintain it. Some other points include:\nWe don\u0026rsquo;t have the manpower and/or time to maintain it any longer We don\u0026rsquo;t have the slightest interest anymore in apache-1, which hasn\u0026rsquo;t seen a release in about a year (July 2006 was the last release) So, if you want to keep it around, either grab it from the attic at anoncvs.gentoo.org/ sources.gentoo.org or copy it to an local/whatever overlay now, as its still in the tree.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-05-28_progress-with-apache-2-2/","summary":"\u003cp\u003eWe\u0026rsquo;re finally making some progress with apache-2.2. It left the package.mask on the 8th of May (that\u0026rsquo;s like 3 weeks from tomorrow), we split some helper scripts into a separate package (app-admin/apache-tools).\u003c/p\u003e\n\u003cp\u003eI already fixed a few screwup I did myself (like apxs missing from either apache and apache-tools, or the compatibility symlinks being missing), so we \u0026ldquo;just\u0026rdquo; need to fix all the modules in the tree before apache-2.2 is going to get the new stable version (and of course anything else depending on. What also remains to do, is committing the new-style virtuals for bug 11007.\u003c/p\u003e","title":"Progress with apache-2-2"},{"content":"Well, I haven\u0026rsquo;t blogged in ages (like about a month).\nTo answer some of the questions I got either via mail or on IRC \u0026hellip;\nyes, I\u0026rsquo;m still alive; you ain\u0026rsquo;t gonna get away that easy \u0026#x1f61b; yes, I finally managed to buy my shiny new car new car I\u0026rsquo;m still working on apache, virtualization, mobile, kernel, hardened \u0026hellip; Though I may haven\u0026rsquo;t been that active recently (I don\u0026rsquo;t look at CIA or do I count my own commits), I think I managed to close some apache bugs and some of my own. I\u0026rsquo;m still looking for someone interested in working on the ipw3945 related packages, as I\u0026rsquo;m kinda sick of that buggish thing.\nOn the (kinda) bright side of life, work has been a real blast the last few weeks. I started designing a new cluster/fail over system for our web server, also planning on buying some more hardware (as in 2* DS4700, a Cisco MDS9506, and some thin clients) which will require some interesting, additional work.\nI finally got that backstabbing BAOH (kinda like \u0026ldquo;BOFH - bastard operator from hell\u0026rdquo;, it\u0026rsquo;s my personal bastard administator from hell) off my back, and I\u0026rsquo;m finally able to do some work \u0026#x1f633;!\nMy life is still a bit messed up, as is my nutrition; but it\u0026rsquo;s all getting better \u0026#x1f606; (thanks to a kind person, who\u0026rsquo;s been telling me that I\u0026rsquo;m all cute and adorable :rolling_eyes: ) Thank you !!\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-05-28_personal-progress/","summary":"\u003cp\u003eWell, I haven\u0026rsquo;t blogged in ages (like about a month).\u003c/p\u003e\n\u003cp\u003eTo answer some of the questions I got either via mail or on IRC \u0026hellip;\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eyes, I\u0026rsquo;m still alive; you ain\u0026rsquo;t gonna get away that easy \u0026#x1f61b;\u003c/li\u003e\n\u003cli\u003eyes, I finally managed to buy my shiny new car \u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2009/12/VCP.png\"\n         alt=\"new car\" width=\"512\"/\u003e \u003cfigcaption\u003e\n            new car\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\u003c/li\u003e\n\u003cli\u003eI\u0026rsquo;m still working on apache, virtualization, mobile, kernel, hardened \u0026hellip;\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eThough I may haven\u0026rsquo;t been that active recently (I don\u0026rsquo;t look at CIA or do I count my own commits), I think I managed to close some apache bugs and some of my own. I\u0026rsquo;m still looking for someone interested in working on the ipw3945 related packages, as I\u0026rsquo;m kinda sick of that buggish thing.\u003c/p\u003e","title":"Personal progress"},{"content":"Interesting title \u0026hellip; \u0026#x1f937; I\u0026rsquo;m sitting back home, in my bed, while I\u0026rsquo;m supposed to be at work. I\u0026rsquo;m now a certified sicko due to a common cold.\nWatching the toaster series once again (that\u0026rsquo;s Battlestar Galactica) and trying to think about some things. Heh, well thinking isn\u0026rsquo;t the right term; it\u0026rsquo;s more like meditate over stuff happening in the last few months.\nGuess this stupid cold is dictating my weekend \u0026#x1f620; and hopefully I\u0026rsquo;m gonna be better on Monday. Have fun.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-05-04_bla-bla-bla-yada-yada-yada/","summary":"\u003cp\u003eInteresting title \u0026hellip; \u0026#x1f937; I\u0026rsquo;m sitting back home, in my bed, while I\u0026rsquo;m supposed to be at work. I\u0026rsquo;m now a certified sicko due to a common cold.\u003c/p\u003e\n\u003cp\u003eWatching the toaster series once again (that\u0026rsquo;s \u003cem\u003eBattlestar Galactica\u003c/em\u003e) and trying to think about some things. Heh, well thinking isn\u0026rsquo;t the right term; it\u0026rsquo;s more like meditate over stuff happening in the last few months.\u003c/p\u003e\n\u003cp\u003eGuess this stupid cold is dictating my weekend \u0026#x1f620; and hopefully I\u0026rsquo;m gonna be better on Monday. Have fun.\u003c/p\u003e","title":"Bla-bla-bla, yada-yada-yada"},{"content":"OK, so I skipped rebuilding a newer RPM version (for now) and I\u0026rsquo;m currently rebuilding anything that fit\u0026rsquo;s into app-dev according to IBM \u0026hellip;\nThe list reads like this:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 $ ls -al ~/app-dev autoconf-2.59-1.aix5.1.noarch.rpm automake-1.8.5-1.aix5.1.noarch.rpm binutils-2.14-3.aix5.1.ppc.rpm bison-1.875-3.aix5.1.ppc.rpm coreutils-5.2.1-2.aix5.1.ppc.rpm cpio-2.5-1.aix5.1.ppc.rpm diffutils-2.8.1-1.aix4.3.ppc.rpm flex-2.5.4a-6.aix4.3.ppc.rpm gawk-3.1.3-1.aix5.1.ppc.rpm gcc-4.0.0-1.aix5.1.ppc.rpm gcc-cplusplus-4.0.0-1.aix5.1.ppc.rpm gdb-6.0-1.aix5.1.ppc.rpm libgcc-4.0.0-1.aix5.1.ppc.rpm libstdcplusplus-4.0.0-1.aix5.1.ppc.rpm libstdcplusplus-devel-4.0.0-1.aix5.1.ppc.rpm libtool-1.5.8-1.aix5.1.ppc.rpm m4-1.4.1-1.aix5.1.ppc.rpm make-3.80-1.aix5.1.ppc.rpm OK, I\u0026rsquo;m not exactly rebuilding these old versions, I\u0026rsquo;m actually using their old specs to compile newer versions of these. I\u0026rsquo;m currently at coreutils-6.7, which really takes ages. But will see about the rest.\nOh, and btw .. if anyone happens to search for a way to extend a logical volume on AIX, use chfs.\n1 $ chfs -a size=+4 /opt That\u0026rsquo;s what I used to enlarge the logical volume containing /opt about 4 (what kind of unit is that ?).\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-04-20_aix-5-3-linux-toolkit/","summary":"\u003cp\u003eOK, so I skipped rebuilding a newer RPM version (for now) and I\u0026rsquo;m currently rebuilding anything that fit\u0026rsquo;s into \u003cem\u003eapp-dev\u003c/em\u003e according to IBM \u0026hellip;\u003c/p\u003e\n\u003cp\u003eThe list reads like this:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-16\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-16\"\u003e16\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-17\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-17\"\u003e17\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-18\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-18\"\u003e18\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-19\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-19\"\u003e19\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e \u003cspan class=\"n\"\u003els\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eal\u003c/span\u003e \u003cspan class=\"o\"\u003e~/\u003c/span\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003edev\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eautoconf\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e2.59\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003enoarch\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eautomake\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.8\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e5\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003enoarch\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebinutils\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e2.14\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e3.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eppc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebison\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.875\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e3.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eppc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecoreutils\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e5.2\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e2.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eppc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecpio\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e2.5\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eppc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ediffutils\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e2.8\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix4\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e3.\u003c/span\u003e\u003cspan class=\"n\"\u003eppc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eflex\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e2.5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e4\u003c/span\u003e\u003cspan class=\"n\"\u003ea\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e6.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix4\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e3.\u003c/span\u003e\u003cspan class=\"n\"\u003eppc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egawk\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e3.1\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e3\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eppc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egcc\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e4.0\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eppc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egcc\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ecplusplus\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e4.0\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eppc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egdb\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e6.0\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eppc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003elibgcc\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e4.0\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eppc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003elibstdcplusplus\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e4.0\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eppc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003elibstdcplusplus\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003edevel\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e4.0\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eppc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003elibtool\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e8\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eppc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003em4\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.4\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mi\"\u003e1\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eppc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emake\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e3.80\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eaix5\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"mf\"\u003e1.\u003c/span\u003e\u003cspan class=\"n\"\u003eppc\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erpm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eOK, I\u0026rsquo;m not exactly rebuilding these old versions, I\u0026rsquo;m actually using their old specs to compile newer versions of these. I\u0026rsquo;m currently at \u003cstrong\u003ecoreutils-6.7\u003c/strong\u003e, which really takes ages. But will see about the rest.\u003c/p\u003e","title":"AIX 5-3 Linux Toolkit"},{"content":"The last few days in Brussels really made me think about learing some french again. There were times, I/we was/were completely lost, and I really hate being lost \u0026hellip; So I\u0026rsquo;m going to look into learning french again. Will see if the local academy has something scheduled in their upcoming program. I really hope so, as I think french is something I could use.\nAlso I\u0026rsquo;m thinking about taking dance-lessons (yeah, yeah I know - I suck \u0026#x1f61b; ), as I\u0026rsquo;d really like to dance \u0026hellip; mmmmmh\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-04-19_learning-french/","summary":"\u003cp\u003eThe last few days in Brussels really made me think about learing some french again. There were times, I/we was/were completely lost, and I really hate being lost \u0026hellip; So I\u0026rsquo;m going to look into learning french again. Will see if the local academy has something scheduled in their upcoming program. I really hope so, as I think french is something I could use.\u003c/p\u003e\n\u003cp\u003eAlso I\u0026rsquo;m thinking about taking dance-lessons (yeah, yeah I know - I suck \u0026#x1f61b; ), as I\u0026rsquo;d really like to dance \u0026hellip; \u003cem\u003e\u003cstrong\u003emmmmmh\u003c/strong\u003e\u003c/em\u003e\u003c/p\u003e","title":"Learning french"},{"content":"As I\u0026rsquo;m way better writing stuff than saying it with my own words, here a short \u0026quot; Thank you! \u0026quot;\nChristel, you have been a gracious and honest person, thanks for all the advice and help in the last year Chrissy, thanks for the inspiring words, you really made/make me feel better Alec (antarus), you\u0026rsquo;ve been a real friend and to say it with your own words \u0026ldquo;It sucks to be you\u0026rdquo;; to phrase it differently, I\u0026rsquo;m really going to miss you Bryan, thanks for all the help, thanks for all the fun at FOSDEM (and after FOSDEM, hah) Ned, Alexander (pappy); you\u0026rsquo;ve both been an inspiration, thanks for letting me work on hardened foo; it has been real fun Mike (vapier), thanks for being a smart ass and inspiration at the same time Chris, thanks for the inspiration and for being a sarcastic person \u0026#x1f609; Andrew, thanks for trying to make a fun out of me \u0026#x1f61b; and thanks for warning me of Chris\u0026rsquo;s sarcasm ","permalink":"https://christian.blog.pakiheim.de/posts/2007-04-19_saying-thank-you/","summary":"\u003cp\u003eAs I\u0026rsquo;m way better writing stuff than saying it with my own words, here a short \u003cem\u003e\u0026quot;\u003c/em\u003e \u003cstrong\u003eThank you!\u003c/strong\u003e \u003cem\u003e\u0026quot;\u003c/em\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eChristel, you have been a gracious and honest person, thanks for all the advice and help in the last year\u003c/li\u003e\n\u003cli\u003eChrissy, thanks for the inspiring words, you really made/make me feel better\u003c/li\u003e\n\u003cli\u003eAlec (antarus), you\u0026rsquo;ve been a real friend and to say it with your own words \u003cem\u003e\u0026ldquo;It sucks to be you\u0026rdquo;\u003c/em\u003e; to phrase it differently, I\u0026rsquo;m really going to miss you\u003c/li\u003e\n\u003cli\u003eBryan, thanks for all the help, thanks for all the fun at FOSDEM (and after FOSDEM, hah)\u003c/li\u003e\n\u003cli\u003eNed, Alexander (pappy); you\u0026rsquo;ve both been an inspiration, thanks for letting me work on hardened foo; it has been real fun\u003c/li\u003e\n\u003cli\u003eMike (vapier), thanks for being a smart ass and inspiration at the same time\u003c/li\u003e\n\u003cli\u003eChris, thanks for the inspiration and for being a sarcastic person \u0026#x1f609;\u003c/li\u003e\n\u003cli\u003eAndrew, thanks for trying to make a fun out of me \u0026#x1f61b; and thanks for warning me of Chris\u0026rsquo;s sarcasm\u003c/li\u003e\n\u003c/ol\u003e","title":"Saying thank you"},{"content":"As I have quite some trouble every time I need grub via serial console, here\u0026rsquo;s just my personal reminder on how to do it right:\n1 2 3 4 5 6 7 # cat /boot/grub/grub.conf serial --unit=0 --speed=38400 terminal --timeout=15 console serial title\thardened-sources-2.6.20-r1 root\t(hd0,0) kernel\t(hd0,0)/boot/vmlinuz-2.6.20-hardened-r1 root=/dev/hda1 console=ttyS0,38400 console=tty0 Additionally the agetty entry for ttyS0 in /etc/inittab needs to be uncommented and changed accordingly to the serial speed\n1 2 # cat /etc/inittab | tail s0:12345:respawn:/sbin/agetty 38400 ttyS0 vt100 ","permalink":"https://christian.blog.pakiheim.de/posts/2007-04-10_grub-via-serial-console/","summary":"\u003cp\u003eAs I have quite some trouble every time I need grub via serial console, here\u0026rsquo;s just my personal reminder on how to do it right:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e7\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# cat /boot/grub/grub.conf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eserial --unit=0 --speed=38400\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eterminal --timeout=15  console serial\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etitle\thardened-sources-2.6.20-r1\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eroot\t(hd0,0)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekernel\t(hd0,0)/boot/vmlinuz-2.6.20-hardened-r1 root=/dev/hda1 console=ttyS0,38400 console=tty0\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eAdditionally the agetty entry for ttyS0 in \u003cem\u003e/etc/inittab\u003c/em\u003e needs to be uncommented and changed accordingly to the serial speed\u003c/p\u003e","title":"grub via serial console"},{"content":"As some of you know, I had some company the last few weeks by two amiable girls from Belgium. We did some hanging out, went out a couple of times and basically had a great time.\nOne thing I didn\u0026rsquo;t thought was possible, is them getting close to me (as in \u0026ldquo;I\u0026rsquo;d really like them to stay some time\u0026rdquo;) and as I gave them a ride to the train station yesterday, I really had my problems. Out of the sudden I had a feeling not to let them go, or is it the feeling to let friends (and I\u0026rsquo;m talking about real friends) slip by, without even knowing them for more than 3 weeks.\nWell, it\u0026rsquo;s too late now; they are back in Eupen by now (hopefully \u0026#x1f622; ) and I\u0026rsquo;m probably never gonna see them again.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-04-08_the-letting-go-why-does-it-hurt-so-much/","summary":"\u003cp\u003eAs some of you know, I had some company the last few weeks by two amiable girls from Belgium. We did some hanging out, went out a couple of times and basically had a great time.\u003c/p\u003e\n\u003cp\u003eOne thing I didn\u0026rsquo;t thought was possible, is them getting close to me (as in \u0026ldquo;I\u0026rsquo;d really like them to stay some time\u0026rdquo;) and as I gave them a ride to the train station yesterday, I really had my problems. Out of the sudden I had a feeling not to let them go, or is it the feeling to let friends (and I\u0026rsquo;m talking about real friends) slip by, without even knowing them for more than 3 weeks.\u003c/p\u003e","title":"The Letting Go (why does it hurt so much )"},{"content":"Some of us attended this years FOSDEM in Brussels (thanks to Dimitry it was really, really great).\nWe (at least the ones attending) got to know each other a bit better (I even got to know some pre Gentoo devs .. yeah, you), and some time after FOSDEM (I think it was ~3 days afterwards), Petteri (betelgeuse) asked me why people all of the sudden start to call him with his first name on IRC.\nI think the cause for that is just seeing each other for some time (like 2 days in a row), talking to the other(s) in person makes you feel closer to him/her (you hopefully know what I mean \u0026#x1f633; ). Or maybe that\u0026rsquo;s just me.\nAfter FOSDEM the virtual bonds changed, I started to call quite some people by their first name as did others.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-03-26_post-fosdem-2007-thoughts-do-i-know-you/","summary":"\u003cp\u003eSome of us attended this years FOSDEM in Brussels (thanks to Dimitry it was \u003cem\u003e\u003cstrong\u003ereally\u003c/strong\u003e\u003c/em\u003e, \u003cem\u003e\u003cstrong\u003ereally\u003c/strong\u003e\u003c/em\u003e great).\u003c/p\u003e\n\u003cp\u003eWe (at least the ones attending) got to know each other a bit better (I even got to know some pre Gentoo devs .. yeah, you), and some time after FOSDEM (I think it was ~3 days afterwards), Petteri (betelgeuse) asked me why people all of the sudden start to call him with his first name on IRC.\u003c/p\u003e","title":"Post FOSDEM 2007 thoughts (do I know you )"},{"content":"OK, today we had somewhat of an emergency. The core-router for our entire network at work had some kind of hardware defect and repeatedly rebooted every three minutes caused the whole network to go cabooom. Usually (you would think), stuff in the same subnet (or VLAN) would still see each other (again, you would think) .. but apparently the VLAN/subnet database is stored on the core router and took all subnets with it.\nSo the core router took our NAS cluster down (as they lost their \u0026quot; PUBLIC\u0026quot; interface) and apparently a minute after the core router went down, our FC storage started sending resets to the FC bus \u0026hellip; and there went our ESX cluster ..\nI\u0026rsquo;m still pretty unsure what exactly caused the FC storage to send those TGT resets, but it looks like is has something to do with the core router vanishing, as the same thing happened already two times in the past exactly after the core router blew. Still this shouldn\u0026rsquo;t be happening, as the FC network and the normal network are completely separated (despite the storage having a management port). So stay tuned for some more IBM fun sigh\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-03-14_cisco-sucks/","summary":"\u003cp\u003eOK, today we had somewhat of an emergency. The core-router for our entire network at work had some kind of hardware defect and repeatedly rebooted every three minutes caused the whole network to go \u003cem\u003e\u003cstrong\u003ecabooom\u003c/strong\u003e\u003c/em\u003e. Usually (you would think), stuff in the same subnet (or VLAN) would still see each other (again, you would think) .. but apparently the VLAN/subnet database is stored on the core router and took \u003cem\u003e\u003cstrong\u003eall\u003c/strong\u003e\u003c/em\u003e subnets with it.\u003c/p\u003e","title":"Cisco sucks"},{"content":"OK, so today was the highlight of the week \u0026hellip; We updated apache2 on Tuesday (yeah, that\u0026rsquo;s still 2.0.49, so if you have some exploits - try them \u0026#x1f61b; ) and now out of the sudden we have major performance issues. We looked nearly the whole forenoon for a reason, why the frackin\u0026rsquo; apache was using 236% of the CPU\u0026rsquo;s.\nIn the afternoon, when my co-worker decided to go home (that was ~1500), I decided to revert back to the old patch level. But that isn\u0026rsquo;t as easy as you think (at least on SLES). The only thing I wanted to do, was something like this:\n1 $ emerge \u0026#39;\u0026lt;apache2-2.0.49-r63\u0026#39; \u0026#39;\u0026lt;apache2-mod_php4-2.0.49-r63\u0026#39; \u0026#39;\u0026lt;apache2-mpm_prefork-2.0.49-r63\u0026#39; Looks like SuSE (or Novell who bought SuSE sometime 3 or 4 years ago) doesn\u0026rsquo;t consider reverting to an older patch level. Which means I would have to remove apache2, apache2-prefork, apache2-mod_php4; fetch the basic RPMS from our FTP server (which sadly forbids directory listing, so I can\u0026rsquo;t exactly look for the original RPMS) and I tried to blindly to fetch them.\nFoooked. Didn\u0026rsquo;t work .. now I cron\u0026rsquo;ed the POS to restart every half an hour, so at least we have some solution. Will see about reverting the the last patch tomorrow again, hopefully I\u0026rsquo;ll find the original RPMS.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-03-08_sles-9-once-again/","summary":"\u003cp\u003eOK, so today was the highlight of the week \u0026hellip; We updated apache2 on Tuesday (yeah, that\u0026rsquo;s still 2.0.49, so if you have some exploits - try them \u0026#x1f61b; ) and now out of the sudden we have major performance issues. We looked nearly the whole forenoon for a reason, \u003cem\u003e\u003cstrong\u003ewhy\u003c/strong\u003e\u003c/em\u003e the frackin\u0026rsquo; apache was using 236% of the CPU\u0026rsquo;s.\u003c/p\u003e\n\u003cp\u003eIn the afternoon, when my co-worker decided to go home (that was ~1500), I decided to revert back to the old patch level. But that isn\u0026rsquo;t as easy as you think (at least on SLES). The only thing I wanted to do, was something like this:\u003c/p\u003e","title":"SLES-9 (once again)"},{"content":"We are still waiting for the money promised by the state and the country for our HBFG (again, it\u0026rsquo;s \u0026ldquo;Hochschulbauförderungsgesetz\u0026rdquo;), that hopefully is reducing or eliminating our storage/SAN problem we have currently. Right now we have to Cisco MDS9216 (that\u0026rsquo;s a 16-port 2GBps SAN-switch, two for redundancy), which means we only have 16 SAN-ports. That isn\u0026rsquo;t much, but still is to less, as we have like 30 machines or so, that really need access to the SAN, so we either end up unplugging some of them from the SAN or merge them onto some big machines (like our x366).\nThe other side of the problem is the storage .. Currently that isn\u0026rsquo;t redundant, which means we\u0026rsquo;re fucked if the storage decides to not come up, or one of the controller smokes .. So were looking at two DS4700 with 2 enclosures each filled with 300GB 2GBps FC disks. That will hopefully also solve our constant lack of rackspace.\nApart from that, we took a look at the terminal server market, heard someone from Citrix, looked ourselves at 2X(and I think we are going with the 2X solution - even if they don\u0026rsquo;t support the authentication passthrough - yet). We might want to consider buying dedicated hardware for the terminal servers, as I implemented them running on the ESX which isn\u0026rsquo;t a permanent solution, as at least the students will work on those terminal servers 0700-2200, that means continuous load in that time, which isn\u0026rsquo;t good for the ESX Cluster, as they are pretty loaded already.\nWe\u0026rsquo;re also looking in buying a third box for the ESX Cluster, probably one of the same as we have currently (that is x366 - with 2 DC Xeon\u0026rsquo;s, 16GB RAM, 2x73 GB SAS, 2x dual-port Intel NIC, 2x dual-port FC HBA) to get some extra capacity.\nRecently I did some experiments with Gentoo as MySQL cluster (master\u0026lt; -\u0026gt;master replication for our upcoming database servers - that\u0026rsquo;s what the blade chassis and the two blades are for) and noticed that the Gentoo VM\u0026rsquo;s were sucking up RAM and didn\u0026rsquo;t release it, so I had to reset them every morning, in order to free some RAM. I guess I should poke Chris a bit about that, as he told me back at FOSDEM that he was doing some load testing with a similar setup not so far ago.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-02-28_waiting/","summary":"\u003cp\u003eWe are still waiting for the money promised by the state and the country for our HBFG (again, it\u0026rsquo;s \u0026ldquo;Hochschulbauförderungsgesetz\u0026rdquo;), that hopefully is reducing or eliminating our storage/SAN problem we have currently. Right now we have to Cisco MDS9216 (that\u0026rsquo;s a 16-port 2GBps SAN-switch, two for redundancy), which means we only have 16 SAN-ports. That isn\u0026rsquo;t much, but still is to less, as we have like 30 machines or so, that \u003cem\u003e\u003cstrong\u003ereally\u003c/strong\u003e\u003c/em\u003e need access to the SAN, so we either end up unplugging some of them from the SAN or merge them onto some big machines (like our x366).\u003c/p\u003e","title":"Waiting"},{"content":"OK, I\u0026rsquo;m sitting now again in train (hrm, I get the feeling I\u0026rsquo;ve done that already in the last few days - oh wait, I was doing that just on Monday) this time to Berlin.\nMy boss ordered me to attend a workshop covering the implementation of Shibboleth (for those of you, who can\u0026rsquo;t associate anything with that term - it\u0026rsquo;s an implementation for single sign-on, also covering distributed authorization and authentication) somewhere in Berlin Spandau (Evangelisches Johannesstift Berlin).\nYesterday was quite amazing workwise, we lifted the 75kg Blade Chassis into the rack ( yuck there was a time I was completely against Dell stuff, but recently that has changed), plugged all four C22 plugs into the rack\u0026rsquo;s PDU\u0026rsquo;s and into the chassis, patched the management interface (which is waaay to slow for a dedicated management daughter board) and for the first time started the chassis. ugh That scared me .. that wasn\u0026rsquo;t noise like a xSeries or any other rack-based server we have around, more like a starting airplane. You can literally stand in behind of the chassis, and get your hairs dried (if you need to). So I looked at the blades together with my co-worker and we figured, that they don\u0026rsquo;t have any coolers anymore, they are just using the cooling the chassis provides.\nAnother surprise awaited us, when we thought, we could use the integrated switch to provide network for both integrated network cards (Broadcome NetExtreme II). sigh You need two seperate switches to serve two network cards, even if you only have two blades in the chassis (which provides space for 10 blades). sigh That really sucks, but its the same with the FC stuff \u0026hellip;\nSo, we are waiting yet again for Dell to make us an offer, and on top of that, the sales representative doesn\u0026rsquo;t have the slightest idea if the FC passthrough module includes SFP\u0026rsquo;s or not \u0026hellip; yuck\nI must say, I\u0026rsquo;m impressed by the Dell hardware, but I\u0026rsquo;m really disappointed by their sales representative.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-02-28_shibboleth-wtf-is-that/","summary":"\u003cp\u003eOK, I\u0026rsquo;m sitting now again in train (hrm, I get the feeling I\u0026rsquo;ve done that already in the last few days - oh wait, I was doing that just on Monday) this time to Berlin.\u003c/p\u003e\n\u003cp\u003eMy boss ordered me to attend a workshop covering the implementation of Shibboleth (for those of you, who can\u0026rsquo;t associate anything with that term - it\u0026rsquo;s an implementation for single sign-on, also covering distributed authorization and authentication) somewhere in Berlin Spandau (Evangelisches Johannesstift Berlin).\u003c/p\u003e","title":"Shibboleth (WTF is that)"},{"content":"OK, as some of you have noticed; I prepared my box for the new toolchain, recompiled the stuff Kevin mentioned in the exact same order wrote down in his README, and it looks like it actually works with all my stuff I have on my box; except sys-libs/grub! sigh\nApparently, grub segfaults at boot and/or while running it from the chroot in the exact same spot, the new QA warnings complain about ..\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 * QA Notice: Package has poor programming practices which may compile * fine but exhibit random runtime failures. * char_io.c:181: warning: dereferencing type-punned pointer will break strict-aliasing rules char_io.c:222: warning: dereferencing type-punned pointer will break strict-aliasing rules builtins.c:4862: warning: dereferencing type-punned pointer will break strict-aliasing rules disk_io.c:1027: warning: dereferencing type-punned pointer will break strict-aliasing rules disk_io.c:1057: warning: dereferencing type-punned pointer will break strict-aliasing rules tparm.c:719: warning: dereferencing type-punned pointer will break strict-aliasing rules char_io.c:181: warning: dereferencing type-punned pointer will break strict-aliasing rules char_io.c:222: warning: dereferencing type-punned pointer will break strict-aliasing rules builtins.c:4862: warning: dereferencing type-punned pointer will break strict-aliasing rules disk_io.c:1027: warning: dereferencing type-punned pointer will break strict-aliasing rules disk_io.c:1057: warning: dereferencing type-punned pointer will break strict-aliasing rules tparm.c:719: warning: dereferencing type-punned pointer will break strict-aliasing rules char_io.c:181: warning: dereferencing type-punned pointer will break strict-aliasing rules char_io.c:181: warning: dereferencing type-punned pointer will break strict-aliasing rules char_io.c:181: warning: dereferencing type-punned pointer will break strict-aliasing rules char_io.c:181: warning: dereferencing type-punned pointer will break strict-aliasing rules char_io.c:181: warning: dereferencing type-punned pointer will break strict-aliasing rules char_io.c:181: warning: dereferencing type-punned pointer will break strict-aliasing rules char_io.c:181: warning: dereferencing type-punned pointer will break strict-aliasing rules char_io.c:181: warning: dereferencing type-punned pointer will break strict-aliasing rules char_io.c:181: warning: dereferencing type-punned pointer will break strict-aliasing rules char_io.c:181: warning: dereferencing type-punned pointer will break strict-aliasing rules So, I unpacked the libc and grub debug files, to get a clue where it\u0026rsquo;s failing and fed the program execution into gdb and viola:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 GNU gdb 6.3 Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type \u0026#34;show copying\u0026#34; to see the conditions. There is absolutely no warranty for GDB. Type \u0026#34;show warranty\u0026#34; for details. This GDB was configured as \u0026#34;i686-pc-linux-gnu\u0026#34;...Using host libthread_db library \u0026#34;/lib/tls/libthread_db.so.1\u0026#34;. (gdb) run Starting program: /sbin/grub --no-floppy Program received signal SIGSEGV, Segmentation fault. grub_putstr (str=0xa1660489) at char_io.c:174 in char_io.c (gdb) quit The program is running. Exit anyway? (y or n) I\u0026rsquo;m not yet sure if it really is the same spot, but I\u0026rsquo;ll let Kevin have a shot at it \u0026hellip;\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-02-26_gentoo-hardened-and-the-new-toolchain/","summary":"\u003cp\u003eOK, as some of you have noticed; I prepared my box for the new toolchain, recompiled the stuff Kevin mentioned in the exact same order wrote down in his README, and it looks like it actually works with all my stuff I have on my box; except \u003cem\u003esys-libs/grub\u003c/em\u003e! \u003cem\u003e\u003cstrong\u003esigh\u003c/strong\u003e\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eApparently, grub segfaults at boot and/or while running it from the chroot in the exact same spot, the new QA warnings complain about ..\u003c/p\u003e","title":"Gentoo/hardened and the new toolchain"},{"content":"The last three days have been quite amazing, I\u0026rsquo;m still stunned by all these impressions (basically meeting all those people you usually know though IRC), how nice people can be if they want (yeah dad, I\u0026rsquo;m talking about you \u0026#x1f61b;)\nAlthough I was pretty sad about leaving so early (I think, if I\u0026rsquo;m going to attend next year, I\u0026rsquo;m going by train and starting on Monday morning so I got one night more in Brussels), I\u0026rsquo;m also quite happy to be home again, as I was pretty phreaked (haha, self-pun intended) by all those people.\nThe Booth was fine from my POV, but it looks like users already requested some stuff already on the forums, which we hopefully will have next year/the next event (Christel or even Chris - get the event kits sorted out and prepared - pretty please with sugar on top \u0026#x1f61b; ).\nThe talks in the DevRoom where great (at least the ones I attended) - most of them were well prepared (hi Christel \u0026#x1f61b; ) and the company I had for these three days (all the senior devs around - especially vapier, wolf31o2, kingtaco, pylon and some of the former ones - hey Mr. \u0026ldquo;I want SeJo\u0026rsquo;s HumpGang on the picture\u0026rdquo; \u0026#x1f600; ) and of course our youngins (that\u0026rsquo;s Peter, Alexander and Robert).\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-02-26_fosdem-2007-4-abstract/","summary":"\u003cp\u003eThe last three days have been quite amazing, I\u0026rsquo;m still stunned by all these impressions (basically meeting all those people you usually know though IRC), how nice people can be if they want (yeah dad, I\u0026rsquo;m talking about you \u0026#x1f61b;)\u003c/p\u003e\n\u003cp\u003eAlthough I was pretty sad about leaving so early (I think, if I\u0026rsquo;m going to attend next year, I\u0026rsquo;m going by train and starting on Monday morning so I got one night more in Brussels), I\u0026rsquo;m also quite happy to be home again, as I was pretty phreaked (haha, self-pun intended) by all those people.\u003c/p\u003e","title":"FOSDEM 2007 4 (abstract)"},{"content":"Today, I got up again at 0630 ugh went to bath, woke up Torsten, afterwards the mystery guy and went downstairs to get some breakfast. I ate some cornflakes and some bread along with a glass of chilled orange juice, then went back up to get all our stuff and prepare the room the way we found it.\nAfter we finished that, we went downstairs and met Alex along the way went to the cars and Torsten led us to the university. I went to the booth and noticed that Torsten and me where the only ones that early at the booth. So we sat down for a moment, cleaned up the booth space a bit and finally sat again preparing the notebooks.\nSuddenly some of the Debian guys came along and asked for a Gentoo Linux Install-CD and is was like \u0026ldquo;WHUT\u0026rdquo;. Apparently they only needed it to fix a borked lilo.\nI went over to the DevRoom to see if anyone else was there already, but there was \u0026ldquo;only\u0026rdquo; Petteri doing his presentation about Gentoo/JAVA stuff with Rob\u0026rsquo;s help (he lend Petteri his somewhat broken notebook because Petteri\u0026rsquo;s hard disk broke on the day before).\nSo I watched a bit and went then back to the booth. After hacking for half an hour on my broken system (haha, I tried updating glibc via binary packages yesterday again, I know I do suck \u0026#x1f60e; ) slowly the other devs showed up one after another. So we manned the booth yet another day. The booth wasn\u0026rsquo;t that much visited as yesterday (which I kinda was pretty lucky about since yesterday was kinda rough) and I sort of vanished 1100\u0026rsquo;ish to get to Mike and Chris\u0026rsquo;s presentation.\nI even managed to catch Danny talking about paludis and enjoyed it. Afterwards was Dad\u0026rsquo;s talk which was really interesting as well as Chris\u0026rsquo;s talk, though I mostly knew about that, as I\u0026rsquo;m currently building the hardened 2007.0 stages (which by the way still suck horribly, somehow the gcc ebuild still creates lib32 and lib64 directories on a x86 stage-build and puts the lib_gcc.so.1 into the lib32 directory, I\u0026rsquo;ll probably have to poke Chris or Andrew again when I\u0026rsquo;m back home or try to build a 2006.1 stage with grp\u0026rsquo;s I may get from the old livecd/dvd).\nAfterwards we had sort-of a lunch break (hah, no food again for me) and heard Christel talking about \u0026ldquo;What makes Gentoo a community based distribution?\u0026rdquo;. Her talk was interesting (admitted she was a bit unprepared, she admitted it herself, don\u0026rsquo;t sue me \u0026#x1f61b;), though she prepared the slides like during Mike\u0026rsquo;s and Chris\u0026rsquo;s talk. \u0026#x1f62f; The presentation was still pretty much interesting (hah, Al-Quaida and P0RN were mentioned on the community\u0026rsquo;s thoughts ugh - I doubt it though) from a users POV.\nAfterwards I said goodbye to an pretty \u0026ldquo;good, old\u0026rdquo; friend (my handsome Rob that is) and a newly won friend (djay-il from userrep working for exanet.com) as they wanted to get to the airport in time, Rob for his flight to Geneva and Alexandre for his flight back to Israel (I don\u0026rsquo;t know where exactly). Ah, btw (and on behalf of djay-il) - the recent dbus update broke the complete GNOME, hah \u0026#x1f61b;\nIn addition to the previous presentation, Marius talked about portage foo, which I have to admit, only listened to with half an ear, as I was bashing Alex and Peter in #gentoo-dev at that time.\nNearly after Marius\u0026rsquo;s speech we left for the car to get home, since Markus needed to get to work on the next day. But before we could get outside of the door, Christel snapped us and we all did a sorta-like group photo (even SpanKY is on it, after some persuasion - including Surprise Buttsecks). Afterwards we headed for the car, and started our run for home.\nIt took us about 8 hours straight to get back to Hamburg (and Marius to Bremen), Markus probably needed half an hour more since he gave me a ride to the central station where I sat in McDonald\u0026rsquo;s for about 3 hours, eating McChicken, Chicken McNuggets, a McFlurry, drank a Coke, an orange juice (they do offer Hohes C now at McDonald\u0026rsquo;s) and about 5 or so cups of tea \u0026#x1f60e; (I know, I\u0026rsquo;m crazy .. I usually drink about the same amount for breakfast when I\u0026rsquo;m supposed to get to work).\nI\u0026rsquo;m sitting now in the train back home (first class of course), writing this blog-o-report for all those people, crazy enough to actually read this \u0026ldquo;report\u0026rdquo; about my experiences at this years FOSDEM.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-02-26_fosdem-2007-3-whut/","summary":"\u003cp\u003eToday, I got up again at 0630 \u003cem\u003e\u003cstrong\u003eugh\u003c/strong\u003e\u003c/em\u003e went to bath, woke up Torsten, afterwards the mystery guy and went downstairs to get some breakfast. I ate some cornflakes and some bread along with a glass of chilled orange juice, then went back up to get all our stuff and prepare the room the way we found it.\u003c/p\u003e\n\u003cp\u003eAfter we finished that, we went downstairs and met Alex along the way went to the cars and Torsten led us to the university. I went to the booth and noticed that Torsten and me where the only ones that early at the booth. So we sat down for a moment, cleaned up the booth space a bit and finally sat again preparing the notebooks.\u003c/p\u003e","title":"FOSDEM 2007 3 (WHUT)"},{"content":"So, as I earlier mentioned, we finally found the U.L.B. and also found the booth and staffed it for nearly the whole day (I haven\u0026rsquo;t managed to view any of the speeches, neither one of the Gentoo ones nor any of the others), I talked to some interested people asking about Gentoo itself, but also asking about the EFIKA\u0026rsquo;s (the Genesi PPC\u0026rsquo;s), one by Camille and Julien providing video forwarding (from one EFIKA to another via cross-over cable), and the other one by Chris playing Descent 2 and Quake 2 at the end. Peter (I think the PR guy from Genesi Europe, will have to ask Chris / Mike again).\nAh, and I nearly forgot about the best part. I finally met my \u0026ldquo;new\u0026rdquo; dad ;-P though he\u0026rsquo;s a pole humper, he\u0026rsquo;s really great and I adore him for being himself (hey SpanKY), along with Chris (wolf31o2) who\u0026rsquo;s really adorable for being himself, and for being all knowledgeable. Though I also finally met SeJo (who\u0026rsquo;s really charming but also a bitch \u0026#x1f61b;) and KingTaco (who constantly tried to hump my dad), met most of our youngins, Alex and the amazing Peter (welp) and of course my all-time-favorite handsome Rob.\nI talked pretty long\u0026rsquo;ish to Chris and to SpanKY (who was always trying to make fun out of me, and succeeded) and gained a lot of insight as well as got to know them. I also managed to get in touch with the rest of the developer attending FOSDEM (that\u0026rsquo;s genone, jokey, kugelfang, spb, dertobi123, wschlich, grobian, genstef, nattfodd, tove, pylon and all the other \u0026hellip;).\nLater, in the evening we went to some restaurant (by bus and by foot), which was funny though since we left around 1900 when everyone else was leaving too and about 200 other people were trying to get somewhere else of Brussels. It was really nice, christel shouting all over the street, telling some of us to get on the next bus, half a minute later to stop and get back here to the tram. After Petteri looked at the tram schedule, we agreed to go get the bus, because the tram was already late (we were too).\nWe drove till Brussels Center (the bus-driver was driving like mad, he took every hole in the street he could find and was waaay to fast), I managed to talk a bit with Rob about his work in Gentoo and real-life issues affecting the development and finally walked the remaining way to the Restaurant (we somehow got lost - again) but found our way to the \u0026ldquo;Rome\u0026rdquo;, which was really a nice also as the food (we had a three-course meal with either Tortellini or Carpaccio, and again beef and lamb as main course and weird bakery stuff with butterscotch).\nBetween the courses I talked some more to Bryan, Alexandre and Christel; all of them we\u0026rsquo;re quite charming all evening and suddenly Dimitry comes at us and is like, \u0026ldquo;Hey I need all your money\u0026rdquo; (OK, now I\u0026rsquo;m lying, that was Christel who came up with this sentence instead of Dimitry telling that he needed the money for the dinner collected :S). So Dimitry and Christel went ahead and collected the money from the people staying at the hostel (so Dimitry would be able to pay the manager). That went pretty good and was without trouble (at least the two didn\u0026rsquo;t say something about having trouble). So we sat again, and talked some more, some more horseporn came up.\nAnd Dimitry came along yet again, asking poor Christel to collect the money for the dinner and that\u0026rsquo;s what they did. They went along the table and as they were at the end, where SpanKY and the rich dutch translators sit at, as she didn\u0026rsquo;t knew their names (the ones from the dutch people), she decided to accidentally piss them off (she labeled them \u0026ldquo;young one 1\u0026rdquo; and \u0026ldquo;young one 2\u0026rdquo;), which they found out later by looking at the sheet.\nSoon they finished and Dimitry was able to pay the dinner. So he talked a bit with the restaurant people and soon found out, that the drinks (even the non-alcohol ones) weren\u0026rsquo;t free. So he raised some more money from everyone. As they finished, we sat again and talked some more (gay horseporn came up again) along with the \u0026ldquo;The Internet is for \u0026hellip;\u0026rdquo; song (nooo, I\u0026rsquo;m not gonna say it!!), but instead Christel tried to convince everyone to sing it loudly, which of course everyone refused to do).\nSometime soon they threw us out, because we were way to much people (~50 or so, because some just came along) and we were quite loud too \u0026#x1f61b;\nSo we decided to get some beer (I really so wanted to get drunk this evening and probably Christel wanted to see me get drunk), so we went looking for another pub where all 50 of us could stay. We walked and walked and walked and walked and lost some people, as they apparently decided to go into the other direction and then sort of vanished (pooof). As we were back at the center of the city, someone decided to get into the street where it was smelling like pot. There was also a pub that was quite nice (according to Alexandre), but quite filled. So some of us decided to go back out, but the rest apparently decided to stay, as they were quite comfortable with it (Peter even asked me later what all that pulling was about).\nSo we went someplace else (at the Grand Place again), and we sat outside. The rest bought beers and handsome Rob insisted on still owing me a beer for something (I\u0026rsquo;ve no clue what for he would owe me a beer) so he bought me one ! yay ! Hail Rob !!!!1one\nWe spend some time sitting there and making fun out of jokey (apparently he was on the menu at this bar, pub, whatever) and had some more fun listening to the \u0026ldquo;The Internet is for \u0026hellip;\u0026rdquo; song again and some of us ordered another beer. Rob went of to make some photo\u0026rsquo;s of the city hall for his fiance(?).\nHe came back a few minutes afterwards telling us (what we already knew) that it is pretty cold (he was all tucked into his jacket, which he bought on advice of his fiance - he should tell that story himself). So we walked back to the hostel (it was quite a bit of a walk, but it was nice), Christel was completely out of breath and we met some of the userrep people back in front on the youth hostel and we had some more talking (again). Somehow, one of them came up with the idea that we should buy some latex or spandex superman-like capes for the next Gentoo Event for all developer attending with like pink or purple color and the Gentoo logo on the chest and Bryan was like \u0026ldquo;I would definitely wear that\u0026rdquo; and \u0026ldquo;that would probably scare off all potential users\u0026rdquo; and he was really encouraged about it.\nWe did some more talking and I got a bit insight into the userrep stuff (thanks to Christel and Bryan explaining) and finally went to bed around 0200 after trying to bribe the manager to give some more beer. My other room mates (that\u0026rsquo;s Marius, Markus, Robert, Torsten and some mystery guy) we\u0026rsquo;re apparently loooong sleeping.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-02-24_fosdem-2007-2-more-friends-bryan-and-superman/","summary":"\u003cp\u003eSo, as I earlier mentioned, we finally found the U.L.B. and also found the booth and staffed it for nearly the whole day (I haven\u0026rsquo;t managed to view any of the speeches, neither one of the Gentoo ones nor any of the others), I talked to some interested people asking about Gentoo itself, but also asking about the EFIKA\u0026rsquo;s (the Genesi PPC\u0026rsquo;s), one by Camille and Julien providing video forwarding (from one EFIKA to another via cross-over cable), and the other one by Chris playing Descent 2 and Quake 2 at the end. Peter (I think the PR guy from Genesi Europe, will have to ask Chris / Mike again).\u003c/p\u003e","title":"FOSDEM 2007 2 (more friends, Bryan and superman)"},{"content":"We arrived in Brussels on Friday around 2230, since we kept searching the centre of Brussels, we really tried hard since we didn\u0026rsquo;t have a map, we tried navigating by bus cards (which was quite fun). So after we finally found the city centre (which is quite bad signposted), we went to the pub supposedly having the free beer, but they told us the FOSDEM area was closed due to christel drinking all beer (just kidding), but we did find Pylon and kugelfang I think.\nSo we sat for some time, till we decided to go and search the youth hostel. That\u0026rsquo;s what we did, and it took us another half hour to find it. When we arrived there, we talked to the manager and he told us that Dimitry is having all the keys, so we should go see him for the keys. So I phoned christel, for what about to do with the keys, and she told me to get our asses over there.\nThat\u0026rsquo;s what we did, we took Lars (that\u0026rsquo;s pylon) and went back into the city (and tried to get pretty close to the Place Grande - or Grote Markt) and tried to fetch our keycards, so we went to the pub Dimitry, christel and the danish conspirary were staying (that\u0026rsquo;s \u0026rsquo;lil Alex, Bryan and their accompaniment). So we talked a bit with them and apparently Bryan and the irssi guy one of the freenode staffers, Richard, were talking about gay horseporn. Christel later said something, that they were talking about it the whole evening \u0026hellip; and I was like WTF \u0026#x1f62f;\nWe fetched our keys, talked some more and christel somehow came with the \u0026ldquo;Internet is about \u0026hellip;\u0026rdquo; song somehow, I think due to Bryan and Richard and we finally went back to the youth hostel and went to bed around 0200 in the morning. I woke up by the cellphone (again), went to the bath and went downstairs for breakfast (together with Torsten - that\u0026rsquo;s tove).\nAfterwards, we went along and tried to find the University where FOSDEM 2007 is at, which took us quite some time. I think we needed about 1 and 1/2 hour, but the point is we finally got there :-S\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-02-24_fosdem-2007-1-long-time-friends-and-gay-horseporn/","summary":"\u003cp\u003eWe arrived in Brussels on Friday around 2230, since we kept searching the centre of Brussels, we really tried hard since we didn\u0026rsquo;t have a map, we tried navigating by bus cards (which was quite fun). So after we finally found the city centre (which is quite bad signposted), we went to the pub supposedly having the free beer, but they told us the FOSDEM area was closed due to christel drinking all beer (just kidding), but we did find Pylon and kugelfang I think.\u003c/p\u003e","title":"FOSDEM 2007 1 (long time friends and gay horseporn)"},{"content":"OK, so I tried to install the AIX Toolkit today, to build some newer rpm\u0026rsquo;s (yaaaaah, I hate RPMS myself, still it\u0026rsquo;s way better than distributing plain tar.gz archives) but looks like either AIX or rpm-4.4.7 doesn\u0026rsquo;t like me.\nNow I\u0026rsquo;ve to figure out how to get libm (that\u0026rsquo;s /lib/libm.so) installed on AIX. Will see about that later and/or tomorrow.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-02-05_aix-5-3-amp-rpm-4-4-7/","summary":"\u003cp\u003eOK, so I tried to install the \u003ca href=\"ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/\"\u003eAIX Toolkit\u003c/a\u003e today, to build some newer rpm\u0026rsquo;s (yaaaaah, I \u003cem\u003e\u003cstrong\u003ehate\u003c/strong\u003e\u003c/em\u003e RPMS myself, still it\u0026rsquo;s way better than distributing plain tar.gz archives) but looks like either AIX or rpm-4.4.7 doesn\u0026rsquo;t like me.\u003c/p\u003e\n\u003cp\u003eNow I\u0026rsquo;ve to figure out how to get \u003cem\u003elibm\u003c/em\u003e (that\u0026rsquo;s \u003cem\u003e/lib/libm.so\u003c/em\u003e) installed on AIX. Will see about that later and/or tomorrow.\u003c/p\u003e","title":"AIX-5-3 undamp; rpm-4-4-7"},{"content":"Remember ? Back in November I had this discussion with uncle Seemant about getting some time off, which resulted in driving to the beach for a whole day.\nI finally found some time to get the pictures off the digital camera, and here they are (some of them) \u0026hellip;\nView at the beach (looking at Goehren)\nI consider that a really fine day, it wasn\u0026rsquo;t too windy, the sun was shining (for a few moments \u0026#x1f61b; ) and I enjoyed nature\u0026rsquo;s weirdness \u0026hellip;\nMalformed seagull (with only a single foot)\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-01-30_beach/","summary":"\u003cp\u003eRemember ? Back in November I had this \u003ca href=\"/posts/2014-08-16_seemant-never-ending-wisdom-and-work-confession\" title=\"Seemant, never ending wisdom and work (confession)\"\u003ediscussion with uncle Seemant about getting some time off\u003c/a\u003e, which resulted in \u003ca href=\"/posts/2006-11-18_weekend\" title=\"Weekend\"\u003edriving to the beach\u003c/a\u003e for a whole day.\u003c/p\u003e\n\u003cp\u003eI finally found some time to get the pictures off the digital camera, and here they are (some of them) \u0026hellip;\u003c/p\u003e\n\u003cp\u003e\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2008/08/img_0193.jpg\"\n         alt=\"View at the beach (looking at Goehren)\" width=\"500\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003eView at the beach (looking at Goehren)\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\nI consider that a really fine day, it wasn\u0026rsquo;t too windy, the sun was shining (for a few moments \u0026#x1f61b; ) and I enjoyed nature\u0026rsquo;s weirdness \u0026hellip;\u003c/p\u003e","title":"Beach"},{"content":"OK, as Diego posted earlier last week, to switch to something else than xine-ui ( #161913 is really annoying), I decided to use codeine. It looks nice so far, supports what I need, so everything is fine now.\nThanks to Diego for the heads-up.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-01-26_media-video-codeine/","summary":"\u003cp\u003eOK, as Diego \u003ca href=\"http://blog.flameeyes.eu/2007/01/19/const-antine\"\u003eposted earlier last week\u003c/a\u003e, to switch to something else than xine-ui ( \u003ca href=\"http://bugs.gentoo.org/161913\"\u003e#161913\u003c/a\u003e is really annoying), I decided to use codeine. It looks nice so far, supports what I need, so everything is fine now.\u003c/p\u003e\n\u003cp\u003eThanks to Diego for the heads-up.\u003c/p\u003e","title":"media-video/codeine"},{"content":"OK, so I\u0026rsquo;ve spent the last day working on my bosses $MAILPROGRAM. In detail, I\u0026rsquo;ve been trying to get his mails from Eudora (which really is complete crap) to Outlook (yeah, yeah I KNOW but he really needs a decent calendar with his E-Mail program, which neither KMail, nor Thunderbird nor Mozilla Suite - aka SeaMonkey can provide).\nProblem with all that is Eudora\u0026rsquo;s crappy way of saving mails (and their attachments). Eudora is saving the mails in regular MBX format, but is putting the attachments into a separate folder. I\u0026rsquo;ve looked all over the web, and only found one application capable of importing his mails into Outlook including the attachments from the Attach folder.\nLuckily I managed to import at least his old address book including the distribution lists with Outlook Express (yeah, this blog post mentions all the crappy Microsoft applications \u0026#x1f61b; , as Outlook itself failed and crashed over and over again while importing them (due to a distribution list having ~300 addresses associated).\nFinally I\u0026rsquo;m back at my research project, trying to find some alternatives for plain terminal server usage (such as 2x ApplicationServer and/or 2x LoadBalancer for RDP/ICA. I\u0026rsquo;ll see what the day turns out to be, hopefully not as wicked as yesterday.\n","permalink":"https://christian.blog.pakiheim.de/posts/2007-01-25_qualcomm-eudora-vs-microsoft-outlook/","summary":"\u003cp\u003eOK, so I\u0026rsquo;ve spent the last day working on my bosses $MAILPROGRAM. In detail, I\u0026rsquo;ve been trying to get his mails from Eudora (which really is complete \u003cem\u003e\u003cstrong\u003ecrap\u003c/strong\u003e\u003c/em\u003e) to Outlook (yeah, yeah I KNOW but he really needs a decent calendar with his E-Mail program, which neither KMail, nor Thunderbird nor Mozilla Suite - aka SeaMonkey can provide).\u003c/p\u003e\n\u003cp\u003eProblem with all that is Eudora\u0026rsquo;s crappy way of saving mails (and their attachments). Eudora is saving the mails in regular MBX format, but is putting the attachments into a separate folder. I\u0026rsquo;ve looked all over the web, and only found one application capable of importing his mails into Outlook including the attachments from the Attach folder.\u003c/p\u003e","title":"Qualcomm Eudora vs- Microsoft Outlook"},{"content":"I had a very moving year with Gentoo. At first I only focussed on the stuff I already had (being vServer / openVZ related stuff), but later on also on suspend2-sources and other stuff I took over back when Hendrik retired.\nSometime this year (I think it was somewhere in the early summer) I joined up with the kernel herd, helped out Daniel while he was moving from London(?) to Boston, took over hardened-sources from John (who\u0026rsquo;s pretty much away). I had a rough break (you remember, the break that turned out to be my most active time) in October till late November, while fighting with my private life and work.\nSomewhen between summer and my break I also managed to get hooked up with recruiters which turned out to be a great experience. I got to know Gentoo\u0026rsquo;s latest additions (graaff, welp, omp, eroyf \u0026hellip;); I\u0026rsquo;m currently working on getting hyakuhei (Robert Clark that is) ready, and I think he is. Let\u0026rsquo;s see, once I\u0026rsquo;m back at my devbox (hah, just talked to my brother in the early afternoon, he\u0026rsquo;s playing Windowz games on it, probably Star Wars - Empire at War) I\u0026rsquo;m going to do the last steps before hooking him up.\nI also managed to junk my time-table with ipw* related stuff (as I announced earlier this month, ipw2?00 is going away in early January - and no, ipw2?00-firmware is staying in the tree and no this isn\u0026rsquo;t going to affect kernel-2.4 users as it never was supported nor worked for them), mostly got ipw3945 working (thanks to Jan Kundrát and Hendrik who had the initial idea in his overlay iirc), ieee80211 is still a mess (and is hopefully going away soon as Robin (robbat2) told me today, starting with kernel-2.6.20 the ipw3945 stuff is going to work with the in-kernel ieee80211 stuff).\nI also joined the hardened herd (only recently), which I am very thankfully for. Let\u0026rsquo;s see how the next year turns out.\nHappy frackin new year !!!\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-12-31_the-gentoo-ish-look-back/","summary":"\u003cp\u003eI had a very moving year with Gentoo. At first I only focussed on the stuff I already had (being vServer / openVZ related stuff), but later on also on suspend2-sources and other stuff I took over back when Hendrik retired.\u003c/p\u003e\n\u003cp\u003eSometime this year (I think it was somewhere in the early summer) I joined up with the kernel herd, helped out Daniel while he was moving from London(?) to Boston, took over hardened-sources from John (who\u0026rsquo;s pretty much away). I had a rough break (you remember, the break that turned out to be my most active time) in October till late November, while fighting with my private life and work.\u003c/p\u003e","title":"The Gentoo’ish look back"},{"content":"The year has left its marks in my head. I had a biiig rock bottom this year, which froze some of the best relationships (friend-wise) I had in my whole life (which I really regret), but I got to know a few people (most within Gentoo) better and even become friends with some of them (you know, whom I mean).\nWith focus at my physical and mental health the year has also left some marks. Mentally I\u0026rsquo;m looking forward to get some counselling in the next year, after I focussed my attention at the physical illnesses I currently suffer from.\nI\u0026rsquo;m going to see the dermatologist on the next Friday again, the wound started bleeding, which isn\u0026rsquo;t that good. My cousin tried to convince me to go to the Katharinenhospital to get a second opinion, and even though I\u0026rsquo;m in pain with this wound (a little bit), I\u0026rsquo;m not going to spend another public holiday in a hospital. I had enough for this year from the yapping doctors and nurses.\nSo I\u0026rsquo;m going to spend this lovely evening with my aunt and my cousin (her husband needs to work till 2am in the next morning), eat some (more) meat fondue and go on relatives visiting tour again tomorrow (probably in the late afternoon).\nTen-Four.\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-12-31_my-private-look-back/","summary":"\u003cp\u003eThe year has left its marks in my head. I had a biiig rock bottom this year, which froze some of the best relationships (friend-wise) I had in my whole life (which I really regret), but I got to know a few people (most within Gentoo) better and even become friends with some of them (you know, whom I mean).\u003c/p\u003e\n\u003cp\u003eWith focus at my physical and mental health the year has also left some marks. Mentally I\u0026rsquo;m looking forward to get some counselling in the next year, after I focussed my attention at the physical illnesses I currently suffer from.\u003c/p\u003e","title":"My private look back"},{"content":"I just watched CNN Live three hours ago, showing the New Year\u0026rsquo;s in Sydney Harbour, AU.\nLooked really great, and as a matter of fact, I wish everyone a happy new year. I know, Diego kept saying its bad luck to wish that in advance, but what the hell ..\nI wish every fellow Gentoo Developer and even those Gentoo Users reading the Universe from the bottom of my heart a happy new year and may be Gentoo with you.\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-12-31_happy-new-year/","summary":"\u003cp\u003eI just watched CNN Live three hours ago, showing the New Year\u0026rsquo;s in Sydney Harbour, AU.\u003c/p\u003e\n\u003cp\u003eLooked really great, and as a matter of fact, I wish everyone a happy new year. I know, Diego kept saying its bad luck to wish that in advance, but what the hell ..\u003c/p\u003e\n\u003cp\u003eI wish every fellow Gentoo Developer and even those Gentoo Users reading \u003ca href=\"http://planet.gentoo.org\"\u003ethe Universe\u003c/a\u003e from the bottom of my heart a happy new year and may be Gentoo with you.\u003c/p\u003e","title":"Happy new Year!"},{"content":"So, as some of you know, I decided to spend New Year\u0026rsquo;s Eve with my cousin and my aunt. And how did I get from the warmish north to the coldish south ?\nBy train as usual, that means Deutsche Bahn \u0026hellip; I already had my gooood experiences with German Rails back in May when I headed to LinuxTag 2006.\nThis time it was a bit different. At first the train from Stralsund to Hamburg was a replacement train, which had no reservations and only first class wagons. One pro and one con. The contra being that my reservation was nullified (meaning I had ordered one but didn\u0026rsquo;t get one).\nNext thing was, once I was in the ICE to Stuttgart they checked my ticket. The first conductor noted that my Weltmeister BahnCard (which I bought back in May) isn\u0026rsquo;t valid anymore. But I told her that I got a letter from the Deutsche Bahn, telling me that the Card\u0026rsquo;s validity cycle has been extended till 31. December 2006. She told me that she had no knowledge of that but let me be with that.\nThe next conductor that came along, told me that the BahnCard was invalid and I had to pay the difference I bought with the invalid card. So he demanded 31,50 € from me, which I paid. Also he told me that the BahnCard is still accepted by his ticket machine. Afterwards he gave me a receipt for the payment and went along.\nThe next conductor (seems like they took turns) asked me for my ticket, which I handed to her together with the receipt I got from the previous conductor and my BahnCard. So she checked all three, told me that my BahnCard was invalid and seized my BahnCard and went away.\nThat was pretty much of my adventure with German Rails on this sunny Thursday.\nOnce I\u0026rsquo;m back home, I\u0026rsquo;m going to write a formal complaint together with a demand for compensation directed at the appropriate office.\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-12-28_again-deutsche-bahn/","summary":"\u003cp\u003eSo, as some of you know, I decided to spend New Year\u0026rsquo;s Eve with my cousin and my aunt. And how did I get from the warmish north to the coldish south ?\u003c/p\u003e\n\u003cp\u003eBy train as usual, that means Deutsche Bahn \u0026hellip; I already had my gooood experiences with German Rails back \u003ca href=\"/posts/2006-05-08_db-adventure-travels-part-1\"\u003ein May\u003c/a\u003e when I headed to LinuxTag 2006.\u003c/p\u003e\n\u003cp\u003eThis time it was a bit different. At first the train from Stralsund to Hamburg was a replacement train, which had no reservations and only first class wagons. One pro and one con. The contra being that my reservation was nullified (meaning I had ordered one but didn\u0026rsquo;t get one).\u003c/p\u003e","title":"Again Deutsche Bahn"},{"content":"Wow, it has been quite a year, this year. Christmas Eve was over pretty fast, we had a nice (smallish) lunch and in the evening we had meat fondue (which was really tasty). Today is Christmas Day, we had lunch earlier (a nice duck with Spätzle of course - to get my weekly dose) and I\u0026rsquo;m sitting now upstairs in front of my Notebook, listening to some tunes (to keep myself calm).\nAs usual, I had a fight with my little brother yesterday, as every year, about completely random moronic stuff. But the evening wasn\u0026rsquo;t all bad, everyone enjoyed the fondue, we had a glass of wine (one per person ;P) and sat around the table and talked. Everyone got nice presents (I finally found \u0026quot; Space Cowboys\u0026quot; (my brother bought it for me yay \u0026hellip;) and he even bestowed me with Godzilla (as in the \u0026lsquo;99 movie with Matthew Broderick and Jean Reno), which is what I\u0026rsquo;ve been watching the last two hours.\nI also got a new swivel chair for my desk, since the old, broken one is standing outside in the garden. My mom bestowed me with some more stuff to read (for those curious, the sequel of Bourne Identity - The Bourne Supremacy), which I already started to read.\nOn other news, my mom just asked me if I want to go to the Hospital tomorrow (because I\u0026rsquo;m badly in pain - even worse on a pretty sensitive area of my body). All that because of the darned, frackin urologist, who thought gluing some antibiotic ointment onto this part of my body would make me feel better. Turns out, now all out of the sudden, the thing is peeling. Guess this is going to turn into a most \u0026quot; pleasent\u0026quot; vacation (as in spending a part of my vacation in hospital) \u0026#x1f937;\nI also planned to get my ass to Stuttgart on December 28th, to visit my aunt, my cousine and her husband, and all the other relatives that still live there. Let\u0026rsquo;s see how the hospital turns out.\nSo long .. \u0026quot; Merry frackin Christmas and a happy new year !!\u0026quot;\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-12-25_merry-frackin-christmas/","summary":"\u003cp\u003eWow, it has been quite a year, this year. Christmas Eve was over pretty fast, we had a nice (smallish) lunch and in the evening we had meat fondue (which was really tasty).\nToday is Christmas Day, we had lunch earlier (a nice duck with Spätzle of course - to get my weekly dose) and I\u0026rsquo;m sitting now upstairs in front of my Notebook, listening to some tunes (to keep myself calm).\u003c/p\u003e","title":"Merry frackin Christmas"},{"content":"OK, you probably remember Seemant telling me I should take the weekend off. I had a nice day so far, didn\u0026rsquo;t do anything work or Gentoo related (which is a bit of a shame), had a small battle with my younger brother about him arguing with my father while having lunch, but afterwards I headed into town ( Stralsund that is), did a bit of window shopping; spotted a nice watch (which is for sale for only ~ 300 €), even tried to get into a movie, but it seems CineStar (that\u0026rsquo;s a local chain of cinema\u0026rsquo;s) is trying to boycott me.\nI wanted to watch the new movie with Uma Thurman \u0026quot; My Super Ex-Girlfriend\u0026quot;, where she is playing an outrageous ex girlfriend with superman like powers. But looks like they aren\u0026rsquo;t showing the movie yet, but they\u0026rsquo;re showing \u0026quot; Cars\u0026quot;, you remember that - its that odd animated film with the speaking cars (which is from September if I recall rightly).\nNot even in Greifswald (that\u0026rsquo;s the town I work in, which is ~40km away), the next bigger city they are playing it, is Rostock. But that\u0026rsquo;s ~80km away one way, so what the fuck.\nI\u0026rsquo;m watching some old movies from my DVD rack (\u0026quot; The Patriot\u0026quot; - with Mel Gibson and Heath Ledger, \u0026quot; S.W.A.T.\u0026quot; - with Colin Farrell and Samuel L. Jackson) currently, trying to relax a bit and give my head some time out. I hope tomorrow will get as exciting, comforting and relaxing as today. \u0026#x1f604;\nI\u0026rsquo;m planning to get to the beach tomorrow, and maybe even take my bike with me (if the weather allows - and it ain\u0026rsquo;t as rainy as it was earlier today). Maybe I\u0026rsquo;ll take my digital camera with me and make some photo\u0026rsquo;s of the view you have at the north-east coast of Rügen (that\u0026rsquo;s Sellin - Baabe - Göhren)\nThanks again Uncle Seemant!\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-11-18_weekend/","summary":"\u003cp\u003eOK, you probably remember \u003ca href=\"http://blogs.gentoo.org/seemant/2006/11/15/bloggo_war\"\u003eSeemant telling me I should take the weekend off\u003c/a\u003e. I had a nice day so far, didn\u0026rsquo;t do anything work or Gentoo related (which is a bit of a shame), had a small battle with my younger brother about him arguing with my father while having lunch, but afterwards I headed into town ( \u003ca href=\"http://maps.google.com/?ie=UTF8\u0026amp;z=11\u0026amp;ll=54.290882,13.095703\u0026amp;spn=0.280543,0.656433\u0026amp;om=1\"\u003eStralsund\u003c/a\u003e that is), did a bit of window shopping; spotted a nice watch (which is for sale for only ~ \u003cstrong\u003e300\u003c/strong\u003e €), even tried to get into a movie, but it seems \u003ca href=\"http://www.cinestar.de/\"\u003eCineStar\u003c/a\u003e (that\u0026rsquo;s a local chain of cinema\u0026rsquo;s) is trying to boycott me.\u003c/p\u003e","title":"Weekend"},{"content":"OK, Seemant just started our little Bloggo-war he promised me yesterday (don\u0026rsquo;t even think about it, I just applied for protection of trademarks), I guess I need to address his questions.\n#1: Holiday vs. Time-out Holiday ain\u0026rsquo;t exactly what I refer to as time-out. Holiday is something for old and lazy people or those that got taken into holiday with their parents (hah, always wanted to say that \u0026#x1f61b; haven\u0026rsquo;t had real holidays since, err, I was 10 or so). Time-out is something that I refer to when I need some time off my irssi/mail. Usually I hang out with the irssi session attached, watching my mails. Probably that\u0026rsquo;s also the reason, why I can\u0026rsquo;t take a real break along with my brain that seems to think about random stuff that happened in the last few months all day long.\n#2: Comparing myself with Alec That comparison with Alec\u0026rsquo;s hiatus sucks a bit. Basically Alec really had something like a time-out, as he was learning for a test(?), so he was at least two weeks not available. My time-out has become my most active time (at least regarding to recruiters related stuff) as everyone else decided to vanish/go offline for three weeks or so (they aren\u0026rsquo;t all, but iirc Simon is on some trip, christel was in the US at that time, Bryan was also iirc for some days).\n#3: Real life vs. keyboard I occasionally have the habit, to simply lay off for a single weekend, and just help my parents with some stuff (like mowing the lawn or fixing the attic). But as it\u0026rsquo;s pretty cold and rainy outside, no lawn-mowing for me. And the attic is fixed, so nothing else to do.\nI also try to enjoy the landscape Rügen (that\u0026rsquo;s the largest island Germany possesses, and no it ain\u0026rsquo;t Sylt!) which also lifts my mood a bit (but also drowns it, because being alone sucks).\n#4: Managing Stress (real life vs. Gentoo) I have to admit, that I usually try to compensate real life stress with Gentoo work, as I really have fun with what I\u0026rsquo;m doing currently. All those devrel people (that\u0026rsquo;s kloeri, fmccor, christel, blubb, Kugelfang, \u0026hellip;) are really cute, they welcomed me pretty warmth when I joined the recruiters.\nAlso Bene (that\u0026rsquo;s Hollow or Benedikt) who has been a real friend and colleague for the past year (heh, he was my mentor!). And also to mention here is christel, who has been so endearing, always making me smile because of her manner she talks, reading all that crap I used to write; that\u0026rsquo;s her \u0026ldquo;Christian update\u0026rdquo; (and of course all that hugging \u0026#x1f61b;). Also Mr. Lud (solar, that\u0026rsquo;s you), who has been really understandable, always kind and adorable for his knowledge. Lately I have to mention Alexander Gabert (that\u0026rsquo;s pappy), who has really been a help (with hardened-sources-2.6.18 for example, but also with some other minor problems). Along with that all the people in #-dev trying to make a fun out of something (see my previous two #gentoo-dev fun posts). And last but not least, you Seemant have been a real friend, that makes Gentoo at least 20% more interesting.\n#5: Deserving holiday vs. being able to afford those holidays As I\u0026rsquo;m currently saving for my first own car (which should at least please me, both with the gas price and with its exterior), I really can\u0026rsquo;t afford any holiday that would relieve me from current thoughts and my current real life responsibilities.\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-11-14_bloggo-battle-war-time-out-holiday-and-all-other-that-is-completly-unnecessary/","summary":"\u003cp\u003eOK, Seemant just started our little \u003ca href=\"http://kulleen.org/seemant/blog/2006/nov/14/blogfight/\"\u003eBloggo-war\u003c/a\u003e he promised me yesterday (don\u0026rsquo;t even think about it, I just applied for protection of trademarks), I guess I need to address his questions.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e#1: Holiday vs. Time-out\u003c/strong\u003e\nHoliday ain\u0026rsquo;t exactly what I refer to as time-out. Holiday is something for old and lazy people or those that got taken into holiday with their parents (hah, always wanted to say that \u0026#x1f61b; haven\u0026rsquo;t had real holidays since, err, I was 10 or so). Time-out is something that I refer to when I need some time off my irssi/mail. Usually I hang out with the irssi session attached, watching my mails. Probably that\u0026rsquo;s also the reason, why I can\u0026rsquo;t take a real break along with my brain that seems to think about random stuff that happened in the last few months all day long.\u003c/p\u003e","title":"Bloggo-battle/-war, time-out, holiday"},{"content":"Hrm, Seemant \u0026hellip; were did I mention something about holidays / vacation ? \u0026#x1f937; I remember that I told you (and also in my previous blog post); its even in my .away file feeding the devaway; that I\u0026rsquo;m taking a break due to increased real-time work load. \u0026#x1f604;\nI never ever said something about going on vacation or being on holiday. That would actually be great (and I could use the break from everything, even the distance to some very people) but is currently virtually impossible. Basically it\u0026rsquo;s because of an HBFG (that\u0026rsquo;s something like \u0026quot; University building assistance law\u0026quot; translated - for the Germans it\u0026rsquo;s \u0026quot; Hochschulbauförderungsgesetz\u0026quot;) application that has been recommended for implementation. Now I\u0026rsquo;m stuck in the middle of an tendering procedure that has to be announced all over Germany.\nThus I\u0026rsquo;m currently working on the performance description for this application, that we decided to split into two seperate ones. One is for thin-clients and monitors, the other one is for all the redundancy crap.\nI finished both today, will need to talk to my colleague about it in detail (since we need to be certain about what we want), so the tender may start within the next two weeks.\nThat means, that starting with December 01st, my Time-out / break will be finished (at least that\u0026rsquo;s what it looks like currently).\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-11-13_the-illusion-holiday/","summary":"\u003cp\u003eHrm, Seemant \u0026hellip; were did I mention something about \u003ca href=\"http://kulleen.org/seemant/blog/2006/nov/13/the-phreaks-are-out-tonight/\"\u003eholidays / vacation\u003c/a\u003e ? \u0026#x1f937; I remember that I told you (and also in my \u003ca href=\"/posts/2014-08-16_time-out\"\u003eprevious blog post\u003c/a\u003e); its even in my .away file feeding the \u003ca href=\"http://www.gentoo.org/proj/en/devrel/roll-call/devaway.xml?select=phreak#phreak\"\u003edevaway\u003c/a\u003e; that I\u0026rsquo;m taking a break due to increased real-time work load. \u0026#x1f604;\u003c/p\u003e\n\u003cp\u003eI \u003cstrong\u003enever ever\u003c/strong\u003e said something about going on vacation or being on holiday. That would actually be great (and I could use the break from everything, even the distance to some very people) but is currently virtually impossible. Basically it\u0026rsquo;s because of an HBFG (that\u0026rsquo;s something like \u0026quot; \u003cem\u003eUniversity building assistance law\u003c/em\u003e\u0026quot; translated - for the Germans it\u0026rsquo;s \u0026quot; \u003cem\u003eHochschulbauförderungsgesetz\u003c/em\u003e\u0026quot;) application that has been recommended for implementation. Now I\u0026rsquo;m stuck in the middle of an tendering procedure that has to be announced all over Germany.\u003c/p\u003e","title":"The Illusion of holiday"},{"content":"Today (OK, it\u0026rsquo;s yesterday now, it\u0026rsquo;s again after 12:00) I had a little fun with pappy (Alexander Gabert) preparing 2.6.18 for prime time \u0026#x1f600;\n1 2 3 4 5 6 7 8 9 10 $ ls -AGg 2.6.18 -rw-r--r-- 1 1593 Jan 25 23:25 1500_cvs-2007-1000.patch -rw-r--r-- 1 797 Jan 25 23:25 4000_deprecate-sk98lin.patch -rw-r--r-- 1 32192 Jan 25 23:25 4105_dm-bbr.patch -rw-r--r-- 1 125781 Jan 25 23:25 4300_squashfs-3.1.patch -rw-r--r-- 1 5710 Jan 25 23:25 4405_alpha-sysctl-uac.patch -rw-r--r-- 1 864955 Jan 25 23:25 4450_grsec-2.1.9-2.6.18.6-200611100917.patch -rw-r--r-- 1 910 Jan 25 23:25 4451_grsec-2.1.9-2.6.18.2-mute-warnings.patch -rw-r--r-- 1 1034 Jan 25 23:25 4452_selinux-avc_audit-log-curr_ip-grsec.patch -rw-r--r-- 1 2097 Jan 25 23:25 4453_pax_curr_ip-fixes.patch So far all patches are applying fine and according to Alexander it even works on his workstation. But I\u0026rsquo;ll wait for Steve/Ned to get back to me telling me if this release works for them or not (as they had serious issues with their hardened desktops - something about the cursor being stuck in the corners).\nYou may also ask, what for is this mute-warning patch. Basically the new grsecurity patch increased the kernel\u0026rsquo;s verbosity while running make about two times \u0026#x1f62f; . Thus we decided to revert the warnings to the ones used in vanilla (that\u0026rsquo;s via CFLAGS).\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-11-10_hardened-sources-2-6-18/","summary":"\u003cp\u003eToday (OK, it\u0026rsquo;s yesterday now, it\u0026rsquo;s again after 12:00) I had a little fun with pappy (Alexander Gabert) preparing 2.6.18 for prime time \u0026#x1f600;\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e$ ls -AGg 2.6.18\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- 1   1593 Jan 25 23:25 1500_cvs-2007-1000.patch\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- 1    797 Jan 25 23:25 4000_deprecate-sk98lin.patch\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- 1  32192 Jan 25 23:25 4105_dm-bbr.patch\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- 1 125781 Jan 25 23:25 4300_squashfs-3.1.patch\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- 1   5710 Jan 25 23:25 4405_alpha-sysctl-uac.patch\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- 1 864955 Jan 25 23:25 4450_grsec-2.1.9-2.6.18.6-200611100917.patch\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- 1    910 Jan 25 23:25 4451_grsec-2.1.9-2.6.18.2-mute-warnings.patch\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- 1   1034 Jan 25 23:25 4452_selinux-avc_audit-log-curr_ip-grsec.patch\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-rw-r--r-- 1   2097 Jan 25 23:25 4453_pax_curr_ip-fixes.patch\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eSo far all patches are applying fine and according to Alexander it even works on his workstation. But I\u0026rsquo;ll wait for Steve/Ned to get back to me telling me if this release works for them or not (as they had serious issues with their hardened desktops - something about the cursor being stuck in the corners).\u003c/p\u003e","title":"hardened-sources-2-6-18"},{"content":"OK, today I finally took the steps of adding Hans (that\u0026rsquo;s Hans de Graaf), and just after I kicked him from #gentoo-dev so he gets his +o and suddenly Astinus took over .. but see for yourself \u0026#x1f600;\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 (15:28) \u0026lt; @Astinus\u0026gt; graaff: So graaff, what\u0026#39;d they con^H^H^persuade you into doing? (15:29) \u0026lt; @phreak``\u0026gt; Astinus: xemacs ;-) (15:29) \u0026lt; @Astinus\u0026gt; phreak``: hah! (15:31) \u0026lt; @graaff\u0026gt; Astinus: yes, xemacs, and when all of that is in order I\u0026#39;ll see if I can help out with ruby and/or gnome (15:32) \u0026lt; @Astinus\u0026gt; graaff: to the former, good luck ;) to the latter, are you suicidal? ;-P (15:32) \u0026lt; @phreak``\u0026gt; Astinus: actually it seem like he is :D (15:32) \u0026lt; @Astinus\u0026gt; phreak``: Excellent, I see you went through the recruiting checklist thoroughly (15:32) \u0026lt; @phreak``\u0026gt; Astinus: lol (15:32) * graaff thinks better than to engage in a troll-fest about gnome on his first day (15:32) \u0026lt; @Astinus\u0026gt; (a) Should be suicidal to a degree less than ciaranm (15:32) \u0026lt; @Astinus\u0026gt; (b) should have a passion for Gentoo, but not the stalking developer kind (15:33) \u0026lt; @Astinus\u0026gt; graaff: ;-P (15:33) \u0026lt; @Astinus\u0026gt; graaff: *bait* ","permalink":"https://christian.blog.pakiheim.de/posts/2006-11-04_continued-gentoo-dev-fun/","summary":"\u003cp\u003eOK, today I finally took the steps of adding Hans (that\u0026rsquo;s Hans de Graaf), and just after I kicked him from #gentoo-dev so he gets his \u003cstrong\u003e+o\u003c/strong\u003e and suddenly Astinus took over .. but see for yourself \u0026#x1f600;\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(15:28) \u0026lt; @Astinus\u0026gt; graaff:  So graaff, what\u0026#39;d they con^H^H^persuade you into doing?\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(15:29) \u0026lt; @phreak``\u0026gt; Astinus: xemacs ;-)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(15:29) \u0026lt; @Astinus\u0026gt; phreak``:  hah!\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(15:31) \u0026lt; @graaff\u0026gt; Astinus: yes, xemacs, and when all of that is in order I\u0026#39;ll see if I can help out\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewith ruby and/or gnome\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(15:32) \u0026lt; @Astinus\u0026gt; graaff:  to the former, good luck ;) to the latter, are you suicidal? ;-P\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(15:32) \u0026lt; @phreak``\u0026gt; Astinus: actually it seem like he is :D\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(15:32) \u0026lt; @Astinus\u0026gt; phreak``:  Excellent, I see you went through the recruiting checklist thoroughly\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(15:32) \u0026lt; @phreak``\u0026gt; Astinus: lol\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(15:32)  * graaff thinks better than to engage in a troll-fest about gnome on his first day\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(15:32) \u0026lt; @Astinus\u0026gt; (a) Should be suicidal to a degree less than ciaranm\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(15:32) \u0026lt; @Astinus\u0026gt; (b) should have a passion for Gentoo, but not the stalking developer kind\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(15:33) \u0026lt; @Astinus\u0026gt; graaff:  ;-P\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(15:33) \u0026lt; @Astinus\u0026gt; graaff:  *bait*\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"continued gentoo-dev fun"},{"content":"O boy, have I had a wonderful evening. I was watching We were heroes (after the eponymous book \u0026quot; We were heroes \u0026hellip; and young\u0026quot;), while I took a peak at #gentoo-dev and look what I found:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (19:24) will be masked, resistance is futile (19:24) hehe (19:24) lol (19:24) Flameeyes: you\u0026#39;re definitely watching waaay to much star trek (including Borg involvement :P) (19:24) *plop* (19:25) phreak``, watching voyager right now :P ... (19:25) phreak``, how do you know that Diego is not a borg? (19:25) bonsaikitten, I\u0026#39;d like to be one (19:25) who has met him? who has seen him sleep, eat or do anything else besides commiting stuff? (19:26) bonsaikitten: a human couldn\u0026#39;t take all that crap happening to him ;) (19:26) * phreak`` runs ... (19:26) Flameeyes, let me guess, suppress emotions, optimize language, work work work? (19:26) what? Flameeyes is human? I thought he was one of vapiers scripts... ","permalink":"https://christian.blog.pakiheim.de/posts/2006-10-31_gentoo-dev-fun/","summary":"\u003cp\u003eO boy, have I had a wonderful evening. I was watching \u003cstrong\u003eWe were heroes\u003c/strong\u003e (after the eponymous book \u0026quot; \u003cem\u003eWe were heroes \u0026hellip; and young\u003c/em\u003e\u0026quot;), while I took a peak at \u003cem\u003e#gentoo-dev\u003c/em\u003e and look what I found:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-12\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-12\"\u003e12\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-13\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-13\"\u003e13\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-14\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-14\"\u003e14\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-15\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-15\"\u003e15\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(19:24)  will be masked, resistance is futile\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(19:24)  hehe\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(19:24)  lol\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(19:24)  Flameeyes: you\u0026#39;re definitely watching waaay to much star trek (including Borg involvement :P)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(19:24)  *plop*\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(19:25)  phreak``, watching voyager right now :P\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(19:25)  phreak``, how do you know that Diego is not a borg?\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(19:25)  bonsaikitten, I\u0026#39;d like to be one\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(19:25)  who has met him? who has seen him sleep, eat or do anything else besides commiting stuff?\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(19:26)  bonsaikitten: a human couldn\u0026#39;t take all that crap happening to him ;)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(19:26)  * phreak`` runs\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(19:26)  Flameeyes, let me guess, suppress emotions, optimize language, work work work?\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(19:26)  what?  Flameeyes is human?  I thought he was one of vapiers scripts...\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"gentoo-dev fun"},{"content":"As you may now (or not), I haven\u0026rsquo;t been pretty active in the last couple of days (OK, I admit it has been the last two weeks).\nWork is currently being a bitch (I have a 6,36 h day normally, but lately that evolved into a 8+ h day which I\u0026rsquo;m not even payed for), personal life is also a bit frustrating (yeah you know those people-people relations called friendship and stuff).\nI thankfully saw Diego return from his vacation (well sort-of, line-cuttage ain\u0026rsquo;t exactly vacation), Benedikt just announced that linux-vserver-2.0.2 is now finally available (after _rc31) and I\u0026rsquo;m still waiting on some replies from a dear friend.\nAlso I\u0026rsquo;m still trying to keep up on Planet Gentoo and mailinglists; gentoo-dev and lkml most of the time (you can\u0026rsquo;t imagine how many time this takes \u0026#x1f61b; ).\nLet\u0026rsquo;s see how that all turns out.\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-09-05_depression-coming-up/","summary":"\u003cp\u003eAs you may now (or not), I haven\u0026rsquo;t been pretty active in the last couple of days (OK, I admit it has been the last two weeks).\u003c/p\u003e\n\u003cp\u003eWork is currently being a bitch (I have a \u003cstrong\u003e6,36\u003c/strong\u003e h day normally, but lately that evolved into a \u003cstrong\u003e8+\u003c/strong\u003e h day which I\u0026rsquo;m not even payed for), personal life is also a bit frustrating (yeah you know those people-people relations called friendship and stuff).\u003c/p\u003e","title":"Depression coming up"},{"content":"Okay, I admit I might be a bit stupid.\nAfter my previous rant about gcc-config and eselect-compiler, it turns out that my CHOST was somehow b0rked. Just removing the -pc from CHOST=\u0026ldquo;i686-pc-linux-gnu\u0026rdquo; fixed the issues.\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-08-16_gcc-config-and-chost/","summary":"\u003cp\u003eOkay, I admit I might be a bit stupid.\u003c/p\u003e\n\u003cp\u003eAfter my previous rant about \u003ca href=\"/posts/2014-08-16_livecd-bootstraping-and-binary-packages\" title=\"LiveCD, bootstraping and binary packages\"\u003egcc-config\u003c/a\u003e and \u003ca href=\"/posts/2014-08-16_portage-eselect-compiler\" title=\"portage / eselect-compiler\"\u003eeselect-compiler\u003c/a\u003e, it turns out that my \u003cem\u003eCHOST\u003c/em\u003e was somehow b0rked. Just removing the -pc from \u003cem\u003eCHOST=\u0026ldquo;i686-pc-linux-gnu\u0026rdquo;\u003c/em\u003e fixed the issues.\u003c/p\u003e","title":"gcc-config and CHOST"},{"content":"We just received the long awaited shipment of sixteen 300GB FC-HDD\u0026rsquo;s (2Gbps with 10000rpm) for our SAN (a pretty old DS4500/FaStT 900).\nBut there\u0026rsquo;s still the software option missing we ordered within the same breath. So I called our trustworthy IBM distributor (hah!) and asked the guy responsible for sales, what the ETA on this software option is (if someone is interested its VolumeCopy/FlashCopy).\nHe told me, that we\u0026rsquo;ll receive a letter with the license key about 4 weeks after commission !!!!!!\nI nearly fell from my chair when he told me that.\nI still can\u0026rsquo;t believe it, that sending a license key printed upon a simple page is taking 4 weeks \u0026#x1f62f;\nLuca had a nice comment about that:\n1 2 3 4 (09:58) \u0026lt; @lu_zero\u0026gt; IBM is big (09:58) \u0026lt; @lu_zero\u0026gt; so idiots could find their niche (10:00) \u0026lt; @lu_zero\u0026gt; phreak`` it got hand assembled using an hex editor (10:00) \u0026lt; @lu_zero\u0026gt; from the paper computed result obviously ","permalink":"https://christian.blog.pakiheim.de/posts/2006-08-14_ibm/","summary":"\u003cp\u003eWe just received the long awaited shipment of sixteen 300GB FC-HDD\u0026rsquo;s (2Gbps with 10000rpm) for our SAN (a pretty old DS4500/FaStT 900).\u003c/p\u003e\n\u003cp\u003eBut there\u0026rsquo;s still the software option missing we ordered within the same breath. So I called our trustworthy IBM distributor (hah!) and asked the guy responsible for sales, what the ETA on this software option is (if someone is interested its VolumeCopy/FlashCopy).\u003c/p\u003e\n\u003cp\u003eHe told me, that we\u0026rsquo;ll receive a letter with the license key \u003cstrong\u003eabout 4 weeks\u003c/strong\u003e after commission !!!!!!\u003c/p\u003e","title":"IBM"},{"content":"Heh, while driving to work I had an idea \u0026hellip;\nThat would make a niiiiice vacation photo \u0026#x1f61b; (well not so nice if you get the bill \u0026hellip;)\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-08-10_the-somehow-different-vacation-photo/","summary":"\u003cp\u003eHeh, while driving to work I had an idea \u0026hellip;\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"Speed trap\" loading=\"lazy\" src=\"/uploads/2008/08/img_1095.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eThat would make a niiiiice vacation photo \u0026#x1f61b; (well not so nice if you get the bill \u0026hellip;)\u003c/p\u003e","title":"The somehow different vacation photo"},{"content":"OK, so after yesterdays battle with SLES and rpm, I decided to simply upgrade rpm (again rpmbuild -bb rpm.spec as in from source).\nI had to tune (hah, remove stuff that isn\u0026rsquo;t working on this ancient gcc-3.3.3 ie. -fstack-protector) a bit to get it working, wasted 20 minutes worth of CPU time and ~30 of my time. I finally gave up. I couldn\u0026rsquo;t persuade neither rpm, nor git to compile on the damn SLES/Dell.\nWhile the above was running, I did some compile-testing on Tim\u0026rsquo;s behalf (he back ported the e1000-driver updates from 2.6.18 to our 2.6.17 branch), seems to work so far.\nOn a more personal note, I\u0026rsquo;d like to stab all people neglecting their promises!\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-08-09_sles-9-2-continued/","summary":"\u003cp\u003eOK, so after yesterdays \u003ca href=\"/posts/2014-08-16_sles-9-2\" title=\"SLES-9.2\"\u003ebattle\u003c/a\u003e with SLES and rpm, I decided to simply upgrade rpm (again rpmbuild -bb rpm.spec as in from source).\u003c/p\u003e\n\u003cp\u003eI had to \u003cstrong\u003etune\u003c/strong\u003e (hah, remove stuff that isn\u0026rsquo;t working on this ancient gcc-3.3.3 ie. \u003cem\u003e-fstack-protector\u003c/em\u003e) a bit to get it working, wasted 20 minutes worth of CPU time and ~30 of my time. I finally gave up. I couldn\u0026rsquo;t persuade neither rpm, nor git to compile on the damn SLES/Dell.\u003c/p\u003e","title":"SLES-9 SP2 (continued)"},{"content":"So Joshua asked my why the heck I was doing that puzzle (OK, I said it actually is a puzzle) and here\u0026rsquo;s now the story for that ..\nAs you see on the image above, the plaster is completely bursted. The dome also started to get some crannies, so my parents decided to cover the whole plaster with pebbles. Only catchy thing about that is: you need to glue every single pebble (diameter ~1cm) by hand onto the cement. And that pretty much sucks.\nOk, so it took us about two whole weekends to cover the dome with the pebbles (don\u0026rsquo;t ask about my back, it was hurting like someone put a hot iron back there), next thing will be the substructure that also needs to be reworked.\nOT: to compete a bit with ChrisWhite, I managed to catch another expression on my face:\nNow guess, what pissed me off at that time ? g\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-08-07_15-million-pieces/","summary":"\u003cp\u003eSo Joshua asked my why the heck I was doing that puzzle (OK, I said it actually is a puzzle) and here\u0026rsquo;s now the story for that ..\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"Diagnose: Bursted plaster\" loading=\"lazy\" src=\"/uploads/2008/08/img_0760.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eAs you see on the image above, the plaster is completely bursted. The dome also started to get some crannies, so my parents decided to cover the whole plaster with pebbles. Only catchy thing about that is: you need to glue every single pebble (diameter ~1cm) by hand onto the cement. And that pretty much \u003cstrong\u003esucks\u003c/strong\u003e.\u003c/p\u003e","title":"15 million pieces"},{"content":"Ok, today I received another WRT54GL (yah, too much money \u0026#x1f61b; ) and updated it to dd-wrt v23-SP1 instantly and is now (once again) powering my wireless network.\nYay! and thanks to Cisco/Linksys for that fine piece of hardware and to NewMedia-NET GmbH for providing such a great image for this hardware \u0026#x1f604;\nAh, nearly forgot that: remember, never put the same IP twice in the static DHCP lease table, or dnsmasq is refusing to start (thus no DHCP/DNS)!\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-08-04_plaything/","summary":"\u003cp\u003eOk, today I received another WRT54GL (yah, too much money \u0026#x1f61b; ) and updated it to dd-wrt v23-SP1 instantly and is now (once again) powering my wireless network.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eYay\u003c/strong\u003e! and \u003cstrong\u003ethanks\u003c/strong\u003e to Cisco/Linksys for that fine piece of hardware and to NewMedia-NET GmbH for providing such a great image for this hardware \u0026#x1f604;\u003c/p\u003e\n\u003cp\u003eAh, nearly forgot that: remember, never put the same IP twice in the static DHCP lease table, or dnsmasq is refusing to start (thus no DHCP/DNS)!\u003c/p\u003e","title":"Plaything"},{"content":"christel, you remember the mood-swings we were talking about ?\nI think I\u0026rsquo;m undergoing just another \u0026#x1f61e; I\u0026rsquo;m currently pretty much pissed. Basically everything is pestering me currently (except #gentoo-dev and Gentoo work).\nWork just ripped another piece of me (hah, thanks VMware \u0026amp; BigBlue). I started the day with a ice cold shower (if I\u0026rsquo;m talking about ice cold it was ice cold), they\u0026rsquo;re currently replacing our old gas heating and unfortunately that means no warm water at all! arg\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-08-03_mood-sucks/","summary":"\u003cp\u003echristel, you remember the mood-swings we were talking about ?\u003c/p\u003e\n\u003cp\u003eI think I\u0026rsquo;m undergoing just another \u0026#x1f61e; I\u0026rsquo;m currently \u003cstrong\u003epretty\u003c/strong\u003e much pissed. Basically everything is pestering me currently (except #gentoo-dev and Gentoo work).\u003c/p\u003e\n\u003cp\u003eWork just ripped another piece of me (hah, thanks VMware \u0026amp; BigBlue). I started the day with a ice cold shower (if I\u0026rsquo;m talking about ice cold it \u003cstrong\u003ewas\u003c/strong\u003e ice cold), they\u0026rsquo;re currently replacing our old gas heating and unfortunately that means no warm water \u003cstrong\u003eat all\u003c/strong\u003e! \u003cem\u003e\u003cstrong\u003earg\u003c/strong\u003e\u003c/em\u003e\u003c/p\u003e","title":"Mood sucks"},{"content":"Ok, I know I\u0026rsquo;ve been absent the last 2 or 3 days (but only in the evening). I know Seemant \u0026#x1f61b; and I\u0026rsquo;m pretty sorry for that. As some of you may know, I recently aquired a Linksys WRT54GL to replace my stupid, crappy Netgear WG602 (which, sorry for the words, is completly junk right now).\nI managed to flash an dd-wrt image to it, right the first day I got it. But a recent update made it broke and now I\u0026rsquo;m completly unable to reflash the device (as in bricked).\nAnd I\u0026rsquo;m about as lazy on the evening as hardworking on the day. So I ordered another one just yesterday. It should arrive today (hopefully) so that I get the damned wireless back.\nThe other thing currently is, that work is getting pretty stressing. Everyone (of my co-workers, mostly the young ones) is pestering me with his/her problems (and my main problem being, that I can\u0026rsquo;t ignore that, because I care pretty much for most of them). Plus provisioning is on my tail because of some damned provisioning processes.\nGentoo-wise I\u0026rsquo;ve recently come to know some of the #gentoo-dev people (yeah, thats you Chris and Christel) along with kloeri, kingtaco (heya \u0026#x1f61b;), fox2mike and not to forget Joshua. I really think they are pretty amazing from a people POV \u0026#x1f604;\nAnother thing I wanted to say: thank you Diego for the work you did with kde-3.5.4 (especially the prerelease thing) I\u0026rsquo;m looking forward to September, who knows maybe I\u0026rsquo;ll meet one of the two in Munich (along with some other people).\nOk, I\u0026rsquo;m now finished with my morning tea (some nice green mate tea) and will now start eating my pudding \u0026#x1f61b; (white chocolate and normal chocolate with cream).\nP.S.: christel, I really liked that poem, thanks a lot \u0026#x1f604;\nP.P.S: Chris, lol \u0026#x1f604; nice visual-ascii-faces \u0026#x1f604; I\u0026rsquo;ve not yet had the time to take a look (as in hear) your \u0026ldquo;songs\u0026rdquo; ..\nP.P.P.S: tsunam, I hope you excuse me for not blogging about my puzzle yet, I promise its the first thing I\u0026rsquo;ll do on the weekend\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-08-03_braindead/","summary":"\u003cp\u003eOk, I know I\u0026rsquo;ve been absent the last 2 or 3 days (but only in the evening). I know Seemant \u0026#x1f61b; and I\u0026rsquo;m pretty sorry for that.\nAs some of you may know, I recently aquired a Linksys WRT54GL to replace my stupid, crappy Netgear WG602  (which, sorry for the words, is \u003cstrong\u003ecompletly junk\u003c/strong\u003e right now).\u003c/p\u003e\n\u003cp\u003eI managed to flash an dd-wrt image to it, right the first day I got it. But a recent update made it broke and now I\u0026rsquo;m completly unable to reflash the device (as in \u003ca href=\"http://www.dd-wrt.com/wiki/index.php/Bricked\"\u003ebricked\u003c/a\u003e).\u003c/p\u003e","title":"Braindead"},{"content":"Hrm, I think I tortured christel a bit too much, earlier ..\n1 2 3 (16:53) \u0026lt;@phreak``\u0026gt; here we go ;-P /uploads/2008/08/dscn0739.jpg (16:57) \u0026lt;@christel\u0026gt; LOL (16:58) \u0026lt;@christel\u0026gt; the first one made me laugh so much Actually Chris, I think that was your and Diego\u0026rsquo;s comment(s) in combination with esammer (thanks for the decent laughing flash I had btw \u0026#x1f62e; )\n1 2 3 4 5 6 7 8 9 10 11 (22:33) \u0026lt;@phreak``\u0026gt; night everyone ;-P (22:33) \u0026lt;@ChrisWhite\u0026gt; phreak``: what\u0026#39;s that? (22:33) \u0026lt;@ChrisWhite\u0026gt; phreak``: you thought you were going to get sleep? (22:33) \u0026lt;@esammer\u0026gt; ChrisWhite: as well as well formed sentences and punctuation. well said. (22:33) \u0026lt;@ChrisWhite\u0026gt; phreak``: sorry pal, this is Gentoo, you\u0026#39;re a developer (22:33) \u0026lt;@ChrisWhite\u0026gt; phreak``: we don\u0026#39;t let you sleep (22:33) \u0026lt;@ChrisWhite\u0026gt; phreak``: you\u0026#39;re over your sleep rations (22:33) \u0026lt;@phreak``\u0026gt; ChrisWhite: yeah, again .. need to get up 2 hours before sunrise (thats in 5 hours to be exact) (22:34) \u0026lt;@Flameeyes\u0026gt; phreak``, what happens to sunrise in 2 hours? (22:34) \u0026lt;@ChrisWhite\u0026gt; phreak``: what if it\u0026#39;s cloudy? (22:34) \u0026lt;@ChrisWhite\u0026gt; phreak``: or what if the sun dies out? ","permalink":"https://christian.blog.pakiheim.de/posts/2006-07-30_chris-the-white-variety/","summary":"\u003cp\u003eHrm, I think I tortured christel a bit too much, earlier ..\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"Singing\" loading=\"lazy\" src=\"/uploads/2008/08/dscn0739.jpg\"\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-0-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-1\"\u003e1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-2\"\u003e2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-0-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-0-3\"\u003e3\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e16\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"mi\"\u003e53\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003ephreak\u003c/span\u003e\u003cspan class=\"err\"\u003e``\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003ehere\u003c/span\u003e \u003cspan class=\"n\"\u003ewe\u003c/span\u003e \u003cspan class=\"n\"\u003ego\u003c/span\u003e \u003cspan class=\"p\"\u003e;\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eP\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003euploads\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"mi\"\u003e2008\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"mi\"\u003e08\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edscn0739\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ejpg\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e16\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"mi\"\u003e57\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003echristel\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eLOL\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"mi\"\u003e16\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"mi\"\u003e58\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"err\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003echristel\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003ethe\u003c/span\u003e \u003cspan class=\"n\"\u003efirst\u003c/span\u003e \u003cspan class=\"n\"\u003eone\u003c/span\u003e \u003cspan class=\"n\"\u003emade\u003c/span\u003e \u003cspan class=\"n\"\u003eme\u003c/span\u003e \u003cspan class=\"n\"\u003elaugh\u003c/span\u003e \u003cspan class=\"n\"\u003eso\u003c/span\u003e \u003cspan class=\"n\"\u003emuch\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eActually Chris, I think that was your and Diego\u0026rsquo;s comment(s) in combination with esammer (thanks for the decent laughing flash I had btw \u0026#x1f62e; )\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\" id=\"hl-1-1\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-1\"\u003e 1\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-2\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-2\"\u003e 2\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-3\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-3\"\u003e 3\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-4\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-4\"\u003e 4\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-5\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-5\"\u003e 5\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-6\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-6\"\u003e 6\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-7\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-7\"\u003e 7\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-8\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-8\"\u003e 8\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-9\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-9\"\u003e 9\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-10\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-10\"\u003e10\u003c/a\u003e\n\u003c/span\u003e\u003cspan class=\"lnt\" id=\"hl-1-11\"\u003e\u003ca class=\"lnlinks\" href=\"#hl-1-11\"\u003e11\u003c/a\u003e\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(22:33) \u0026lt;@phreak``\u0026gt; night everyone ;-P\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(22:33) \u0026lt;@ChrisWhite\u0026gt; phreak``: what\u0026#39;s that?\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(22:33) \u0026lt;@ChrisWhite\u0026gt; phreak``: you thought you were going to get sleep?\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(22:33) \u0026lt;@esammer\u0026gt; ChrisWhite: as well as well formed sentences and punctuation. well said.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(22:33) \u0026lt;@ChrisWhite\u0026gt; phreak``: sorry pal, this is Gentoo, you\u0026#39;re a developer\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(22:33) \u0026lt;@ChrisWhite\u0026gt; phreak``: we don\u0026#39;t let you sleep\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(22:33) \u0026lt;@ChrisWhite\u0026gt; phreak``: you\u0026#39;re over your sleep rations\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(22:33) \u0026lt;@phreak``\u0026gt; ChrisWhite: yeah, again .. need to get up 2 hours before sunrise (thats in 5 hours to be exact)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(22:34) \u0026lt;@Flameeyes\u0026gt; phreak``, what happens to sunrise in 2 hours?\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(22:34) \u0026lt;@ChrisWhite\u0026gt; phreak``: what if it\u0026#39;s cloudy?\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e(22:34) \u0026lt;@ChrisWhite\u0026gt; phreak``: or what if the sun dies out?\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Chris (the White variety)"},{"content":"Oh, yeah baby g. It\u0026rsquo;s finally hot f*cking summer and I really like it. We have now three weeks in a row sunny weather with no rain at all.\nEveryone running around with less or nearly no clothes (heh, especially the girls) is also a nice present from above.\nPersonally I haven\u0026rsquo;t felt better the last two years. Maybe that\u0026rsquo;s depending on my previous depressions and the like (you know these thoughts .. ) but this summer is definitely going rock my life!\nchristel, babe \u0026#x1f61b; I have to say you\u0026rsquo;re not alone with those mood swings. I have them also from time to time. Everyone (well my friends \u0026#x1f61b;) is bitching at me then like \u0026ldquo;C\u0026rsquo;mon, don\u0026rsquo;t be so negative about \u0026hellip; blah\u0026rdquo; or \u0026ldquo;Why are you so angry at \u0026hellip; blah ?\u0026rdquo;.\nYou\u0026rsquo;re also right, piling the anger up isn\u0026rsquo;t such a good thing (TM). Stress from work (or family \u0026#x1f61e;) is also doing its part.\nAaah, Joshua; I nearly forgot about you! Take of that hat! It makes you look like a clown, which you really are not \u0026#x1f604; And I\u0026rsquo;m gonna blog about my 15 billion pieces puzzle tomorrow (uploading ~180M of jpeg\u0026rsquo;s isn\u0026rsquo;t that fast with stupid 16k upstream).\nOh, by the way thanks Sven for the really great introduction of frilled! I really would like to see more of those (even if it will get pretty hard by the time \u0026#x1f604;)\nBut enough of the bitching, now some infos/updates on the Gentoo/FOSS-related things.\nHerbert announced another release candidate for linux-vserver (surprise \u0026#x1f61b; rc27), and I really hope we\u0026rsquo;ll see the final version within this month ( haha since this month ends tomorrow, nah the next month). I\u0026rsquo;ll prepare a patch-tarball and an ebuild later. As I earlier mentioned, I took some of Henrik\u0026rsquo;s packages (while he was on his Hiatus). And now he announced his resignation!. sigh. Henrik, I really hate to see you go. I also joined the kernel-monkey herd (thanks Henrik, Daniel and John for letting me), did my first release for genpatches (and messed it up, I know), became devoted to the mobile-herd (thanks Stefan for asking) and also poked around a bit with the hardened patchset for 2.6.17 (ah, thanks again John \u0026#x1f604;). ","permalink":"https://christian.blog.pakiheim.de/posts/2006-07-30_f-cking-summer/","summary":"\u003cp\u003eOh, yeah baby \u003cem\u003e\u003cstrong\u003eg\u003c/strong\u003e\u003c/em\u003e. It\u0026rsquo;s finally hot \u003cstrong\u003ef*cking\u003c/strong\u003e summer and I \u003cem\u003e\u003cstrong\u003ereally\u003c/strong\u003e\u003c/em\u003e like it. We have now three weeks in a row sunny weather with no rain at all.\u003c/p\u003e\n\u003cp\u003eEveryone running around with less or nearly no clothes (heh, especially the girls) is also a nice present from above.\u003c/p\u003e\n\u003cp\u003ePersonally I haven\u0026rsquo;t felt better the last two years. Maybe that\u0026rsquo;s depending on my previous depressions and the like (you know these thoughts .. ) but this summer is definitely going rock my life!\u003c/p\u003e","title":"F*cking summer"},{"content":"Now is again such a time in live, where you have the motivation or wish to just fade away.\nI\u0026rsquo;m just listening to Fort Minor - Where\u0026rsquo;d you go and thinking about the stuff Mike Shinoda is singing \u0026hellip;\nI want you to know it\u0026rsquo;s a little fucked up, That I\u0026rsquo;m stuck here waitin\u0026rsquo;, no longer debatin\u0026rsquo;, Tired of sittin\u0026rsquo; and hatin\u0026rsquo; and makin\u0026rsquo; these excuses, For while you\u0026rsquo;re not around, and feeling so useless, It seems one thing has been true all along, You don\u0026rsquo;t really know what you got \u0026rsquo;til it\u0026rsquo;s gone.\nThe track is really great, I really enjoy that. Some people I know would call it dark or even depressive but it ain\u0026rsquo;t even like that. It\u0026rsquo;s just a bit blue, like carving for someone is. \u0026#x1f604;\nI didn\u0026rsquo;t thought that telling someone, that you sense a bit more than friendship would change so much. So much, that even simple talking to each other isn\u0026rsquo;t possible any more. Oy, that sucks.\nAnd than you get to hear, that\u0026rsquo;s only for you, so it won\u0026rsquo;t hurt so much. What a lame excuse.\nOn the other hand I really start to enjoy my life. Looking the third seaoson of Stargate which DHL just delivered yesterday. Work is getting more exciting.\nHopefully the new IBM System X (well we ordered xSeries \u0026#x1f609; ) will be delivered next week, I\u0026rsquo;m already studying the ESX documentation.\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-05-21_live-sucks-again/","summary":"\u003cp\u003eNow is again such a time in live, where you have the motivation or wish to just fade away.\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;m just listening to \u003cstrong\u003eFort Minor - Where\u0026rsquo;d you go\u003c/strong\u003e and thinking about the stuff \u003cem\u003eMike Shinoda\u003c/em\u003e is singing \u0026hellip;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI want you to know it\u0026rsquo;s a little fucked up,\nThat I\u0026rsquo;m stuck here waitin\u0026rsquo;, no longer debatin\u0026rsquo;,\nTired of sittin\u0026rsquo; and hatin\u0026rsquo; and makin\u0026rsquo; these excuses,\nFor while you\u0026rsquo;re not around, and feeling so useless,\nIt seems one thing has been true all along,\nYou don\u0026rsquo;t really know what you got \u0026rsquo;til it\u0026rsquo;s gone.\u003c/p\u003e","title":"Live sucks (again)"},{"content":"Today we got up bit later (07:40 am) to do some sight-seeing and shopping. We took the car “ Candidplatz”, that’s where Paula is working currently and got into the subway to “ Sendlinger Tor”. The day was starting sunny featuring 23°C at 9:00 am. Certainly I was wearing short pants and a tank top, as I’m used to have a weak till moderate wind blowing around me. We finally stopped at SportScheck to get something for Paula. She badly needed short pants and polo shirts for her physic therapy lessons she is giving at physico.\nWe found some shorts for her, but I was really impressed after I saw the price. 132€ for two short pants and three polo shirts is really expensive. For those tiny cotton rags it sucks majorly even it’s stamped by “ adidas”.\nSportScheck is having a special offer, they are giving away sun lounger for free if you shop for over 90€. So she got a nice sun lounger. It was already 11:10, so she freaked a bit out “ Sandy I’m not going to get to work in time”, but Sandy told her she’ll only need ten or fifth teen minutes back to work. She relaxed. We brought her back to the subway at “Sendlinger Tor” where she forgot to stamp her subway ticket. She freaked again. “ I don’t gonna make it two levels up, stamp my ticket and make it back down here in time!”. Sandy told her she had eight minutes left to do so, and that it’s more than enough time. And in fact she made it back within four minutes till the subway arrived.\nShe got onto it and we got back up. Now we started the sight-seeing tour. We walked through half the inner city of Munich (at least that’s what my feet felt like), past the old and new town hall, past the cathedral and stopped at the “ Hofbräuhaus”. I had some meat loaf (Leberkäs) with bavarian potato salad after I had a meat loaf roll (Leberkässemmel) an hour or so before. I started noticing there were only tourists around us (English, American, French and Japanese). After that little snack we continued our sight-seeing to Munich’s Königsstraße (the Königsstraße is in Stuttgart and is the longest shopping mile in the whole city), where we went into Saturn (on my behalf) since I’m starting to become a DVD collector. I brought myself “ Spawn”, “ Total Recall” and “ Jarhead”. I also purchased some DVD+R DL to some of my recorded movies (I had a Premiere Abo till there months ago).\nThe sales man at the cash point saw the DVD’s and the blankets and noticed me that “it’s illegal to copy any copyright protected material for personal use” (thanks to Mrs. Zypries, our justice minister which will also be at the LinuxTag tomorrow, and the lobbyism of the german copyright holders). That pissed me of a bit, but only for a few seconds.\nAfter we left the Saturn (you can’t imagine how I hate Saturn and MediaMarkt, both belonging to the Metro Group) we continued the sight-seeing. We walked Munich’s “ Königsstraße” (I really can’t remember the name, sorry) through another part of Munich’s historic district till we got to the “ Königssaal” where another platoon awaited us. Above us was a helicopter keeping altitude with a huge search beam and down the street we saw some people wearing ver.di flags and jackets. Seems like there had been an demonstration earlier including ver.di president Psierske, who was talking to the local media in a corner. Seems like the public service protested again in favor of the 38,5 hour week for the same money. We turned right in the “ English Garden” (where even more police awaited us, watching over the few demonstrators left, ratio was something like 30 demonstrators and 80 – 90 police man.\nWe searched for a nice little spot with a bank, which we found after a short search. We settled down for half an hour or so (and it seems like I managed to get a small sun burn, which is really small only a bit red on my nose and my shoulders) and enjoyed the really warm spring day.\nWe got up (I tell you, after that half an hour I was really lazy) and continued our way through the English garden. We went past the building of the Bavarian prime minister (which is called Strauß-oleum after the guy who planned that temple of glass) and through a heavenly park. That garden seems to be really huge, at least if you trust the maps and Sandy. Somewhere in the garden we searched for another sunny place and settled down again.\nThe garden was crowding with mad city slickers, some of them naked, others playing soccer, Frisbee, Volleyball or even badminton with squash rackets. Another city slicker spanned a hammock between two trees and was reading in there.\nAfter another half an hour we got up again and walked through the southern part of the English garden till “ Schwabingen” where most of the businessmen are lawyers.\nAfterwards we went to a street (whose name I can’t remember) where Sandy told me in the summer the road is completely closed and approx. 1.000 inline skaters were participating on a race.\nWe settled down again (as we did four times before) and enjoyed the sun again. Sandy took a smoke and that was finally the end of the sight-seeing tour. We took the subway back to “ Candidplatz” and fetched the car keys from Paula. We even managed to find a store where they had so much water in bottles that they were selling it!\nWe arrived back home to relax our feet a bit. Sandy did some googling, shared some pictures that I made with his digicam and I finished writing my first blog post and started this one on paper.\nLater on we picked Paula up from the gym and went to another “ Biergarten”. That one was also quite nice, its located on a small isle in the middle of the Isar. When we got back we finally managed to watch “ Jarhead”, which is really a great movie about the first gulf war (better known as Desert Strom) while we were looking over my resumee and my letter of application. I finally got to bed at 01:30 am knowing that my cell phones alarm clock would try to wake me up at 04:30 am.\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-05-15_munich-part-2/","summary":"\u003cp\u003eToday we got up bit later (07:40 am) to do some sight-seeing and shopping. We took the car “ \u003cem\u003eCandidplatz\u003c/em\u003e”, that’s where Paula is working currently and got into the subway to “ \u003cem\u003eSendlinger Tor\u003c/em\u003e”. The day was starting sunny featuring 23°C at 9:00 am. Certainly I was wearing short pants and a tank top, as I’m used to have a weak till moderate wind blowing around me. We finally stopped at SportScheck to get something for Paula. She badly needed short pants and polo shirts for her physic therapy lessons she is giving at physico.\u003c/p\u003e","title":"Munich - part 2"},{"content":"Boy, right after I wrote those lines they announced everyone heading to Stuttgart should get of that train and take another since they had to replace the damaged end car. I even had to switch platforms again.\nI’m now sitting in that other train, it’s pretty much overfilled with people who are all and everyone angry at DB. I’m gonna take a cab from Stuttgart Central Station to my aunt’s place since it’s getting later and later. We’re now supposed to arrive at 22:48 but the train already has ten minutes delay.\nI’m really curious what happens next. Two missed trains, a broken one \u0026hellip; Maybe the cab driver takes me to the wrong place. That put the crown on that day.\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-05-08_db-adventure-travels-part-2/","summary":"\u003cp\u003eBoy, right after I wrote those lines they announced everyone heading to Stuttgart should get of that train and take another since they had to replace the damaged end car. I even had to switch platforms again.\u003c/p\u003e\n\u003cp\u003eI’m now sitting in that other train, it’s pretty much overfilled with people who are all and everyone angry at DB. I’m gonna take a cab from Stuttgart Central Station to my aunt’s place since it’s getting later and later. We’re now supposed to arrive at 22:48 but the train already has ten minutes delay.\u003c/p\u003e","title":"DB Adventure Travels - part 2"},{"content":"I’m now sitting in the ICE (on a little child seat), it arrived with 20 minutes delay here at Frankfurt Airport but we’re still standing here with problems on the end car, so it’s gonna take a while.\nIt’s one of the newer ICE’s and the interior looks really great. I even managed to get some wireless connection!\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-05-08_db-adventure-travels-part-1/","summary":"\u003cp\u003eI’m now sitting in the ICE (on a little child seat), it arrived with 20 minutes delay here at Frankfurt Airport but we’re still standing here with problems on the end car, so it’s gonna take a while.\u003c/p\u003e\n\u003cp\u003eIt’s one of the newer ICE’s and the interior looks really great. I even managed to get some wireless connection!\u003c/p\u003e","title":"DB Adventure Travels - part 1"},{"content":"I’m now at Frankfurt Airport and I nearly got on the earlier train to Stuttgart which I wasn’t able to catch, according to the service guy. I was facing the same problem than the morning before. The damn doors closed right in front of my face. Meh, Friday seems to be my bad luck day.\nI’m still waiting for the ICE supposed to leave at 20:54 but it’s currently having eighteen minutes delay. My cousin messaged me earlier that she’ll collect me at Stuttgart Central Station. The day is nearly finished now and I’m awake since yesterday morning 07:40 minus that three hour break. I’m still pretty excited that I really got to Wiesbaden and I really enjoyed that little trip (even if it was a bit expensive).\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-05-08_linuxtag-part-3/","summary":"\u003cp\u003eI’m now at Frankfurt Airport and I nearly got on the earlier train to Stuttgart which I wasn’t able to catch, according to the service guy. I was facing the same problem than the morning before. The damn doors closed right in front of my face. Meh, Friday seems to be my bad luck day.\u003c/p\u003e\n\u003cp\u003eI’m still waiting for the ICE supposed to leave at 20:54 but it’s currently having eighteen minutes delay. My cousin messaged me earlier that she’ll collect me at Stuttgart Central Station. The day is nearly finished now and I’m awake since yesterday morning 07:40 minus that three hour break. I’m still pretty excited that I really got to Wiesbaden and I really enjoyed that little trip (even if it was a bit expensive).\u003c/p\u003e","title":"LinuxTag - part 3"},{"content":"I’m sitting in the S8 to Frankfurt Airport where I’ll switch to the ICE to Stuttgart to visit my cousins and my aunt. Linux Tag was quite amazing, I finally met some of the people behind OpenVZ (Kir and Kirill), saw a bit of Andrew Morton’s Kernel FAQ (Kir told us that) and met some people including Bertl, doener, derjohn, zeng, foo, \u0026hellip; of the linux-vserver community. Both workshops were quite interesting and I learned a lot of things about openvz and it’s userland tools and linux-vserver (finally I understood the CPU Tokenbucket system).\nEven if I didn’t arrive in time to watch Kir and Kirill\u0026rsquo;s presentation of openvz and its features completely, I managed to watch Kir demonstrating the live migration between two different nodes. Even if Kirill needed to reboot his system due to a readonly filesystem (it was / that was the whole bugger) I have to admit it really impressed me (since that’s a feature we had to pay 3000€ for VMware ESX and no I don’t want do hear a single word about it). Sadly the OpenVZ stuff isn’t ported yet to SPARC so I’ll keep vServer running on the U1 (Ultra1). I also met Hollow in person, which really was the highlight of all days. He was my mentor when I joined Gentoo and is the person that I’m doing most of my work on Gentoo / Linux vServer / OpenVZ related things. Bertl’s talk nearly took four hours but those four hours were quite informative and interesting. He held a general introduction into virtualization theory (which took him two hours). After a small fifth teen minute break he demonstrated most of the things possible with linux-vserver (including resource limits to kill kill certain memory/cpu hogs).\nDemonstration ended at 18:10 and we got back up to the Linux vServer booth were I finally managed to ask Bertl about his patch name versioning scheme. And I finally understood it!\nWe also stopped by at the SWsoft booth to say goodbye to Kir and Kirill and to talk about the SRPMS but they already had left. We did some group photos of all present at the Linux vServer booth. Afterwards Hollow and I grabbed our backpacks and took of to the station. On the way we had a little discussion about problems and stuff that we recently noticed. First was the /dev/console virtualization effort, since we switched from init-style Gentoo (which we removed from the utils) to plain. The virtualization would show some effect if you’re wanna be able to see what’s happening on the startup phase of a vServer. Second thing was the reintroduction of the fastboot bug (that’s what I call it). The util-vserver package leaves a plain and empty file in the guests root filesystem, which really annoys me. The third thing is the `vserver-init.$( mktemp )´ file that is placed in /tmp but isn’t deleted after startup is complete. Another thing we talked about was the ` vserver stop´ which only waits for the vkill timeout to kick in but isn’t going to stop the vServer by itself.\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-05-08_linuxtag-part-2/","summary":"\u003cp\u003eI’m sitting in the S8 to Frankfurt Airport where I’ll switch to the ICE to Stuttgart to visit my cousins and my aunt. Linux Tag was quite amazing, I finally met some of the people behind OpenVZ (Kir and Kirill), saw a bit of Andrew Morton’s Kernel FAQ (Kir told us that) and met some people including Bertl, doener, derjohn, zeng, foo, \u0026hellip; of the linux-vserver community. Both workshops were quite interesting and I learned a lot of things about openvz and it’s userland tools and linux-vserver (finally I understood the CPU Tokenbucket system).\u003c/p\u003e","title":"LinuxTag - part 2"},{"content":"Boy, that day started great (irony). I was supposed to get my lazy ass up at 04:20 am to be at the station at 05:27 am, taking the train to Wiesbaden (together with Hollow).\nBut someone in this odd world doesn’t like me. I somehow managed to turn off the damn cell (that was supposed to wake me up) and slept till 05:10 am, till Paula came in and woke me up. She told me she was awake since half an hour and she waited on me to step into her bedroom.\nShe also told me that we have to go now otherwise I’m not going to catch that train (for which I had a reservation!). We got into the cat and drove over to the station (damn, you can’t imagine how I hate red traffic lights!). She parked in the non-parking area and we ran through half the station, till we noticed the train is supposed to be on platform 15. We were already at platform 22!! So we got back running through the station with my heavy backpack (carrying my notebook and some stuff I had to put into it earlier in my morning rush) and my heavy trolli.\nAs we arrived at platform 15, the ICE was already beeping, indicating the doors are getting closed / locked. I asked the conductor if there was a way left to get on that damn train. She told me, there is one only way three wagons ahead, and it was the only possible way to get on that train (each wagon is approx. 30m long), so I started shouting at the conductor standing in the door to let me in. But it seems he hasn’t heard me. Damn you, fscking conductor.\nI was standing in front of that damn train and saw it leaving the station. You probably can’t imagine how I felt in that moment. I was pretty much wasted, completely out of breath, standing there.\nAfter the train left the station Paula asked me, why I stopped running, there were only three or four wagons left. I told there, that I’m completely wasted and that damn conductor I shouted at, hasn’t heard me.\nStanding there on the empty platform, I was completely clueless. She told me I should look for the next available train that would take me to Wiesbaden. I thought for a second, to skip the trip but decided to search for an alternative. I looked around and saw an ICE Sprinter (which needs an extra reservation) to Frankfurt a. Main. So I called the information (was Paula’s idea) and asked for the number of DB-Ticket Service. The lady messaged me, since she couldn’t put me through, the number and I took another call to a service hotline. It was a 0900 number (at 1,49€ per minute).\nAnother lady answered my call and I asked her for a reservation for the ICE Sprinter (leaving at 06:25). That damn reservation cost another 10,00€. I booked that, as I really intended to show up in Wiesbaden. He service-lady asked me a couple of questions (personal, for their system to get the 10€) and it was finished. I only had to catch my reservation at the next service terminal.\nAfter searching such a terminal for a minute or so, I collected my reservation and felt much better. Now I’m sitting in the train (Hollow tried to call me a couple of times) being around Mannheim and writing my blog post on paper (still need to hammer it into the keyboard).\nMy mood lifted pretty much and I’m looking forward to meet Hollow, kir, team leader of the openvz team, Bertl, the guy behind the linux-vserver kernel.\nI’m still tired, tried already to sleep but the moving train makes that nearly impossible. My stomach is hurting, my head is a bit dizzy but it should be ok later (I hope so). The damn pressure on the ears drives me nearly mad (I’m not used to switch heights in that speed, Northern Germany is nearly flat and there isn’t that altitude difference that I’m experiencing right now).\nI’m still impressed of Munich (who knows, maybe I’m getting a job there in the near future), my head is full of information of those various locations I visited in the past 1½ days. Also full of great memories that I’ll not forget so fast (I’m hoping at least).\nI’m already thinking about my summer holidays. Maybe I’ll spend them also in Munich and not in Stuttgart where all my relatives are. But those holidays should be a bit longer than two days, it really hurts to leave again so fast.\nSo far from my little adventure, more as it happens.\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-05-08_linuxtag-part-1/","summary":"\u003cp\u003eBoy, that day started great (irony). I was supposed to get my lazy ass up at 04:20 am to be at the station at 05:27 am, taking the train to Wiesbaden (together with Hollow).\u003c/p\u003e\n\u003cp\u003eBut someone in this odd world doesn’t like me. I somehow managed to turn off the damn cell (that was supposed to wake me up) and slept till 05:10 am, till Paula came in and woke me up. She told me she was awake since half an hour and she waited on me to step into her bedroom.\u003c/p\u003e","title":"LinuxTag - part 1"},{"content":"I just woke up and thought I really should blog about that.\nThe trip was quite interesting so far, saw some things that really looked odd.\nAt first the was some kind of Police protection (30 or so with shield visor) for only 5 people at Pasewalk Hbf. Pasewalk Hbf - Lots, and lots of policemen!\nA friend of mine picked me up at Berlin Ostbahnhof and we drove all the way to Munich. While we stopped for gas (1,44€ per liter super unleaded)\nSomewhere on the Autobahn - Shitass expensive gasoline\nI saw something that driven past us. I saw it later again and took a picture. The thing I saw were two German transport/reconnaissance tanks \u0026quot; Fuchs\u0026quot; on low-loaders (since the tanks aren\u0026rsquo;t allowed to drive upon the motorway in peacetime).\nSomewhere on the Autobahn - transport/reconnaissance tank \u0026lsquo;Fuchs\u0026rsquo;\nAnother thing I saw was a badly deformed BMW on a tow truck.\nSomewhere on the Autobahn - totaled BMW'\nWhile driving to the city I saw some pretty nice and also some odd things. At first, we driven past the Allianz Arena which is pretty amazing. The whole outside of the stadium consists of air cussions which are differently illuminated, depending on which team is playing there. White is for the national team, red for the F.C. Bayern München and blue for the TSV 1860 München.\nEntering Munich - Allianz Arena'\nThe odd thing I noticed was an old man (with a really nice beard) driving a really odd bike.\nIn Munich - Old guy, riding a really weird bike'\nAs we arrived in Munich, we took a trip to the Isar (which is a really nice place to be), setteled down for an hour and enjoyed the beautiful view at the Isar and St. Maximilian.\nIn Munich - View at St. Maximilian from the riverside'\nIn Munich - Looking at the Isar'\nLater we went to the Augustiner Brewery, where they serve also in the Bräustüberl. For the first day in Munich I have to admit, Munich seems like a great place to live.\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-05-04_munich/","summary":"\u003cp\u003eI just woke up and thought I really should blog about that.\u003c/p\u003e\n\u003cp\u003eThe trip was quite interesting so far, saw some things that really looked odd.\u003c/p\u003e\n\u003cp\u003eAt first the was some kind of Police protection (30 or so with shield visor) for only 5 people at Pasewalk Hbf.\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/uploads/2008/08/dsc00138.jpg\"\n         alt=\"Pasewalk Hbf - Lots, and lots of policemen!\" width=\"500\"/\u003e \u003cfigcaption\u003e\n            \u003cp\u003ePasewalk Hbf - Lots, and lots of policemen!\u003c/p\u003e\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\u003c/p\u003e\n\u003cp\u003eA friend of mine picked me up at Berlin Ostbahnhof and we drove all the way to Munich. While we stopped for gas (1,44€ per liter super unleaded)\u003c/p\u003e","title":"Munich"},{"content":"Today being my Birthday pretty much started my day. Somehow I managed to accept a call at 00:12 (while I was asleep) but I don\u0026rsquo;t even remember taking it. Somehow my real live is getting better and better (as in finding some friends as I pretty much was a hermit for the last couple of years).\nAlso I found someone to share my toughts with, someone who understands it, how to really get to me (read it as a very good friend \u0026#x1f61b;)\nGentoo stuff is living on. vserver-sources/ linux-vserver is approaching it\u0026rsquo;s next stable release (hopefully in this week), openvz-sources finally on something newer than 2.6.8.1 (ok, they\u0026rsquo;re there quite a while) and baselayout-vserver finally working on both openvz and linux-vserver.\nAnd my little experiment also continues (the WRAP experiment). I\u0026rsquo;m currently trying to get a minimal Gentoo running on that (well sort of). I\u0026rsquo;m currently trying to get some replacement for/a way to strip down GCC (I really don\u0026rsquo;t need a compiler on the WRAP, and since the whole GCC takes 79M it\u0026rsquo;s pretty much a candidate for removal).\nsolar yesterday mentioned something like this:\n1 INSTALL_MASK_EXEMPT=\u0026#34;*.so.*\u0026#34; INSTALL_MASK=\u0026#34;*\u0026#34; emerge gcc Well that would be a pretty nifty feature (and I already tried my luck and wisdom \u0026#x1f915;), but hopefully we\u0026rsquo;ll se something like that pretty soon \u0026#x1f604;\nIt\u0026rsquo;s almost a year since I joined Gentoo and I have to admit that it was a pretty good time so far (well except some random things, like me screwing some releases).\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-04-25_birthday/","summary":"\u003cp\u003eToday being my \u003cstrong\u003eBirthday\u003c/strong\u003e pretty much started my day. Somehow I managed to accept a call at 00:12 (while I was asleep) but I don\u0026rsquo;t even remember taking it. Somehow my real live is getting better and better (as in finding some friends as I pretty much was a hermit for the last couple of years).\u003c/p\u003e\n\u003cp\u003eAlso I found someone to share my toughts with, someone who understands it, how to really get to me (read it as a very good \u003cstrong\u003efriend\u003c/strong\u003e \u0026#x1f61b;)\u003c/p\u003e","title":"Birthday"},{"content":"Once again, I\u0026rsquo;m compelled to play (other call it administering \u0026#x1f61b;) with our TYPO3 cluster (which is sadly running SLES).\nOne thing I just learned about SLES (for the ones curious, its Novell\u0026rsquo;s SuSE Linux Enterprise Server and yes, it suffers the same pain as SuSE/openSuSE). They split one single config file (at least the apache2 one) into 9 (or more) different files.\nAnother thing is, for what the hell does a simple LAMP need a full blown Xorg w/ KDE installed ?\nGood lord! Praise the USE-flags (f.e. -X or -kde)\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-03-10_bitching/","summary":"\u003cp\u003eOnce again, I\u0026rsquo;m compelled to play (other call it administering \u0026#x1f61b;) with our TYPO3 cluster (which is sadly running SLES).\u003c/p\u003e\n\u003cp\u003eOne thing I just learned about SLES (for the ones curious, its \u003ca href=\"http://www.novell.com/products/server/\"\u003eNovell\u0026rsquo;s SuSE Linux Enterprise Server\u003c/a\u003e and yes, it suffers the same pain as SuSE/openSuSE). They split one single config file (at least the apache2 one) into 9 (or more) different files.\u003c/p\u003e\n\u003cp\u003eAnother thing is, for what the hell does a simple LAMP need a full blown Xorg w/ KDE installed ?\u003c/p\u003e","title":"Bitching"},{"content":"Today they finally let me fiddle around on an AIX 5.3 system. Well AIX ain\u0026rsquo;t bad, but misses (by default installation) some features and comfort.\nThe first thing I noticed, they only! install telnet and don\u0026rsquo;t even give an option to install sshd .. That sucks, especially if you\u0026rsquo;re supposed to log in via the internet (yay! an telnet open to the internet \u0026#x1f62f;)\nSo I googled a bit around and found out, that we should have some Bonus CD\u0026rsquo;s (from IBM of course) featuring openssl/openssh, looked into the cubicle behind the rack and look what I\u0026rsquo;ve found \u0026hellip; Go, go \u0026hellip; \u0026#x1f61b;\nPut in the CD into the drive, fire up smitty (thats a really nifty tool they invented there) and installed openssh with all it\u0026rsquo;s dependencies (despite it\u0026rsquo;s pretty old v3.6.0) but now I got openssh running instead of a weaky telnet \u0026#x1f604;\nWhat do I need also ? Yeah, bash \u0026hellip; ksh really sucks (heh, and I love to scroll back in my command history). Fired smitty up again, and also installed bash \u0026hellip;\nThat was pretty much work for the first day on AIX \u0026#x1f609;\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-03-10_work-sometimes-sucks/","summary":"\u003cp\u003eToday \u003ca href=\"http://www.uni-greifswald.de\"\u003ethey\u003c/a\u003e finally let me fiddle around on an AIX 5.3 system. Well AIX ain\u0026rsquo;t bad, but misses (by default installation) some features and comfort.\u003c/p\u003e\n\u003cp\u003eThe first thing I noticed, they \u003cstrong\u003eonly\u003c/strong\u003e! install \u003ca href=\"http://en.wikipedia.org/wiki/Telnet\"\u003etelnet\u003c/a\u003e and don\u0026rsquo;t even give an option to install sshd .. That sucks, especially if you\u0026rsquo;re supposed to log in via the internet (yay! an telnet open to the internet \u0026#x1f62f;)\u003c/p\u003e\n\u003cp\u003eSo I googled a bit around and found out, that we should have some Bonus CD\u0026rsquo;s (from IBM of course) featuring openssl/openssh, looked into the cubicle behind the rack and look what I\u0026rsquo;ve found \u0026hellip; Go, go \u0026hellip; \u0026#x1f61b;\u003c/p\u003e","title":"Work sometimes sucks"},{"content":"Well, so I finally got around to fix some pending bugs ..\nvzquota and vzctl is finally bumped ( #122532), new baselayout-vserver is in the tree (fixing some issues with rebooting a vps) and I\u0026rsquo;m finally working on getting dietlibc updated.\nSo let\u0026rsquo;s see what the day reveals \u0026#x1f604;\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-02-21_vserver-related-stuff/","summary":"\u003cp\u003eWell, so I finally got around to fix some pending bugs ..\u003c/p\u003e\n\u003cp\u003evzquota and vzctl is finally bumped ( \u003ca href=\"https://bugs.gentoo.org/122532\"\u003e#122532\u003c/a\u003e), new baselayout-vserver is in the tree (fixing some issues with rebooting a vps)\nand I\u0026rsquo;m finally working on getting dietlibc updated.\u003c/p\u003e\n\u003cp\u003eSo let\u0026rsquo;s see what the day reveals \u0026#x1f604;\u003c/p\u003e","title":"vserver related stuff"},{"content":"Today was again horrible. The boss started to drive me nuts on 8.30 and it even got worser and worser \u0026hellip;.\nSometimes I start thinking how it would be, if I had decided not to move with my parents into the outback (yeah, we\u0026rsquo;ve also outback in Germany, it\u0026rsquo;s called East Germany \u0026#x1f61b;)\n","permalink":"https://christian.blog.pakiheim.de/posts/2006-01-20_work-sometimes-sucks/","summary":"\u003cp\u003eToday was again horrible. The boss started to drive me nuts on 8.30 and it even got worser and worser \u0026hellip;.\u003c/p\u003e\n\u003cp\u003eSometimes I start thinking how it would be, if I had decided \u003cstrong\u003enot\u003c/strong\u003e to move with my parents into the outback\n(yeah, we\u0026rsquo;ve also outback in Germany, it\u0026rsquo;s called \u003cstrong\u003eEast Germany\u003c/strong\u003e \u0026#x1f61b;)\u003c/p\u003e","title":"Work sometimes sucks"}]