[{"content":"I wanted a local model that was good enough to use for real work, not just a small demo. My current favorite is a 27B Qwen model, so instead of swapping it out for something smaller, I put two 12 GB RTX 3060s to work in the same inference box.\nThe machine is called Moqorro. It runs Debian 12 and serves the model through the CUDA build of llama.cpp. Marwyn, my Hermes agent, can select this local model for private tasks while keeping its usual cloud model as the default.\nThe setup The model is Qwen3.8 27B in Q4_K_M GGUF format. llama.cpp splits its layers across both cards, with a 57/43 split and 99 layers offloaded to the GPUs. Flash Attention is enabled, the KV cache uses Q4_0, and the server has a 131,072-token context configured. The model file lives on Moqorro\u0026rsquo;s local storage, so loading it does not depend on the NFS link.\nThe two cards do not become one giant 24 GB GPU. llama.cpp places parts of the model on each card and coordinates them. That lets this model fit and run, but each card still has its own 12 GB of VRAM and its own temperature and power limits.\nWhat GPU Unlock changes I also tried GPU Unlock, a Linux kernel module for supported NVIDIA Ampere cards. It changes the instruction-rate selectors for certain FP16 and BF16 operations. It does not add VRAM, raise the power limit, or turn an RTX 3060 into a different card.\nThat distinction matters for language models. The project\u0026rsquo;s reports show the biggest gains in matrix-heavy work such as GEMM and prompt processing. Token generation is often limited more by memory bandwidth, so a large synthetic math benchmark does not guarantee a similarly large increase in words per second. The project lists RTX 3060 12 GB compatibility reports, but those results belong to those users\u0026rsquo; cards and test setups—not mine.\nOn Moqorro, the module loaded at boot and targeted both GPUs. The kernel log said the card at 02:00.0 was unlocked. The card at 01:00.0 printed unlock failed (-114), which initially looked like a straightforward failure. Looking at the project\u0026rsquo;s current source changed that interpretation: -114 is EALREADY, returned when the GPU\u0026rsquo;s protection setting is already open or the card is not in the expected cold state. That log line alone does not prove whether my first card is effectively unlocked. I still need a selector readback or a controlled benchmark before making that claim.\nThe module is also an early-boot change: it has to run before the NVIDIA driver binds to the cards. My kernel reports that the out-of-tree module is unsigned and taints the kernel. That is part of the experiment, not something I want to hide in a headline about speed.\nWhat the model benchmark says—and does not say I ran the same short prompt with a 320-token output cap before and after changing llama.cpp\u0026rsquo;s speculative MTP draft depth from one token to three and raising the prompt-cache limit from 2 GiB to 4 GiB.\nRun Output rate Before: one draft token, 2 GiB cache 30.7 tokens/second After: three draft tokens, 4 GiB cache 36.0–37.4 tokens/second across three runs That is an encouraging result for the combined llama.cpp tuning, but it is not a GPU Unlock benchmark: I changed two server settings at the same time, and I did not run a matched locked-versus-unlocked test. I cannot attribute that improvement to GPU Unlock.\nBefore the MTP tuning, recent short replies ran at about 15–17 tokens/second, while a very long conversation took much longer to prefill. One request sent about 104,000 input tokens and spent roughly three minutes processing them before generation. That is a prompt-size problem, not a reason to expect a GPU register tweak to fix everything.\nWhat I want to measure next The useful test is not one impressive number. It is a small set of matched measurements on these exact cards:\nCompare locked and unlocked FP16/BF16 matrix throughput with the same benchmark and power limits. Compare llama.cpp prompt-processing speed and token-generation speed separately. Record both GPUs\u0026rsquo; temperature, power, utilization, and throttling during each run. Repeat enough times to see whether the difference is consistent. For now, the practical win is that two ordinary 12 GB cards are running the model I actually want to use. GPU Unlock is an interesting experiment layered on top of that setup; until I have a controlled before-and-after result, I am treating its effect on my real workload as unproven.\nReferences GPU Unlock project and compatibility reports RTX 3060 12 GB compatibility report GPU Unlock source: the -EALREADY handling ","permalink":"https://shane.greaves.casa/posts/2026-10-26-two-rtx-3060s-local-qwen-gpu-unlock/","summary":"\u003cp\u003eI wanted a local model that was good enough to use for real work, not just a small demo. My current favorite is a 27B Qwen model, so instead of swapping it out for something smaller, I put two 12 GB RTX 3060s to work in the same inference box.\u003c/p\u003e\n\u003cp\u003eThe machine is called Moqorro. It runs Debian 12 and serves the model through the CUDA build of llama.cpp. Marwyn, my Hermes agent, can select this local model for private tasks while keeping its usual cloud model as the default.\u003c/p\u003e","title":"Two RTX 3060s, One Local 27B Model, and a GPU Unlock Experiment"},{"content":"When you run an AI agent on metered LLM providers — subscription plans with session windows, weekly allotments, and fallback headroom — the constraint isn\u0026rsquo;t cost per thousand tokens. It\u0026rsquo;s quota burn rate: how fast you exhaust your session window or weekly limit, and how much of that burn is structural waste you never see.\nI run Hermes Agent on Ollama Cloud as my primary provider, with OpenAI Codex and OpenRouter as fallback lanes. Ollama Cloud has a ~5-hour session limit and a weekly allotment that resets Sunday evening. There\u0026rsquo;s no live remaining-quota API. When you hit the wall, the agent stops working until the window resets.\nThis post documents the audit methodology I used to find and fix structural waste — and includes a reusable prompt so you can run the same audit on your own setup.\nWhy Not Per-Token Cost The instinct is to optimize cents-per-1K-tokens. That\u0026rsquo;s the wrong frame when you\u0026rsquo;re on a subscription plan.\nIf your provider charges $0.001 per 1K tokens but caps you at 5 million tokens per session window, the real question is: how much of that 5M is wasted on structural overhead before the agent even starts reasoning?\nEvery tool schema injected into the prompt, every imported skill catalog, every silent auxiliary model call — those consume quota on every turn, including trivial chats where you just ask \u0026ldquo;what time is it?\u0026rdquo;\nThe goal is quota preservation: finding and eliminating structural waste so your limited metered budget goes further toward actual reasoning work.\nThe Six Audit Areas Ranked by leverage — structural fixes that save quota on every turn beat micro-optimizations that save tokens on specific calls.\n# Area Why It Drains Quota Fix Pattern 1 Default toolset breadth Every tool schema is injected into every prompt, even for trivial chats. 17 tools = 17 schema blocks paid per turn. Cut always-on toolsets to ~9 daily-driver tools; load the rest on demand. 2 Cross-profile skill imports Imported skill catalogs (e.g. 137 skills from another profile) inflate the skill list on the paid path, even if never used. Remove blanket external_dirs imports; import only specific skills if needed. 3 Auxiliary model routing Helper tasks (vision, compression, skills_hub, session_search, approval, mcp) silently consume paid quota in the background. Route each auxiliary to the cheapest capable lane: local for lightweight helpers, cheap-cloud for quality-sensitive ones, stronger cloud only for vision. 4 Recurring agentic cron jobs Background LLM-driven jobs burn quota without an active chat session — easy to forget. Convert deterministic jobs to script-only (no_agent) execution; keep reasoning jobs only where reasoning is genuinely needed; move remaining reasoning jobs to cheaper models. 5 Fallback exposure Each fallback event uses a different paid provider. Frequent fallback = unexpected spend. Evaluate actual fallback frequency; use cheapest acceptable fallback route. 6 Compression tuning Lower priority — compression is already doing useful work. Tune only after structural fixes above. Key Principles These principles guide every decision in the audit:\nStructural wins beat micro-tweaks. Reducing always-on tool breadth saves more than prompt phrasing. Cheapest acceptable, not cheapest. Quality matters; downshift only where the drop is unnoticeable. Measure before changing. Pull fresh-cycle usage data; don\u0026rsquo;t mix old and new billing windows. Preserve justified reasoning. Don\u0026rsquo;t strip reasoning from jobs that actually need it. Verify through the real execution path. A config edit is not proof — trigger an actual run. Keep resilience explicit. Fallbacks exist for a reason; evaluate failure modes before removing them. What I Found and Fixed In my Hermes Agent setup, three structural changes had the biggest impact:\n1. Toolset Narrowing (17 → 9) The default profile had 17 always-on toolsets. I cut to 9 daily-driver tools (file, terminal, web, memory, session_search, skills, clarify, todo, messaging). The other 8 (code_execution, computer_use, cronjob, delegation, image_gen, kanban, tts, vision) are loaded on demand when the task actually needs them.\nResult: Lower per-turn paid prompt overhead on every trivial chat, with no friction on normal daily admin work.\n2. Skill Import Cleanup (137 → 0) I had another profile\u0026rsquo;s entire skill tree (137 skills, 130 duplicate names) imported into the default paid profile via skills.external_dirs. Those skills inflated the skill catalog on every paid turn even though most were never used. Removing the blanket import dropped 137 skill descriptions from the prompt baseline.\n3. Auxiliary Rerouting (6 paths) Six auxiliary helper tasks were silently consuming paid cloud quota. I rerouted them to a hybrid strategy:\nHelper Before After skills_hub Ollama Cloud Local llama.cpp approval Ollama Cloud Local llama.cpp mcp Ollama Cloud Local llama.cpp flush_memories Ollama Cloud Local llama.cpp session_search Ollama Cloud (expensive model) Ollama Cloud (cheap model) compression Ollama Cloud (expensive model) Ollama Cloud (cheap model) vision Ollama Cloud (expensive model) Ollama Cloud (capable vision model) The lightweight helpers moved to a local llama.cpp instance (free, no quota). Quality-sensitive helpers stayed on cloud but on cheaper model tiers. Vision stayed on cloud because modality demands it.\nObservability You can\u0026rsquo;t fix what you can\u0026rsquo;t see. I built a Grafana/Loki dashboard that ships Hermes logs to Loki via Promtail and visualizes:\nSession burn (last 5h) — am I exhausting my session window? Weekly burn since Sunday reset — how much of my weekly allotment is gone? Burn by agent — is Ghost (orchestrator) doing specialist work it shouldn\u0026rsquo;t? Fallback leakage — how often is OpenAI fallback firing? Cron/background drain — which background jobs are quietly burning quota? Cumulative tokens by provider — where is spend concentrating? Token counts are an operational proxy, not billing truth — there\u0026rsquo;s no authoritative remaining-quota API for Ollama Cloud. But proxy telemetry is sufficient for decision support as long as the dashboard is labeled honestly.\nReusable Audit Prompt Here\u0026rsquo;s the prompt I wrote so anyone can run the same audit on their own setup. Paste it into your AI agent (Hermes, Claude, ChatGPT, etc.) and fill in the environment details at the bottom.\nYou are auditing my AI agent setup for **metered-quota preservation**. The goal is not per-token cost minimization — it is preserving limited quota (session windows, weekly allotments, fallback headroom) by finding and fixing structural waste. ### Step 1 — Inventory the metered paths Read my agent config and identify every path that consumes paid LLM quota. For each, record: - **Route name** (e.g. \u0026#34;primary interactive model\u0026#34;, \u0026#34;vision helper\u0026#34;, \u0026#34;compression helper\u0026#34;, \u0026#34;fallback\u0026#34;, \u0026#34;cron job: morning summary\u0026#34;) - **Provider + model** (e.g. `ollama-cloud / glm-5.2`, `openai / gpt-4o-mini`) - **Paid or free** — is this a metered provider or a local/free lane? - **Frequency** — per-turn (always-on), per-job (recurring cron), or on-demand (fallback / conditional) - **Tool/schema overhead** — how many tool schemas are injected into the prompt on every turn? List them. ### Step 2 — Rank by quota leverage Rank all metered paths from highest structural drain to lowest. Use these criteria: 1. **Always-on cost** (paid on every turn, even trivial chats) beats on-demand cost 2. **Background cron cost** (paid without an active session) beats interactive cost 3. **Silent auxiliary cost** (helper calls the user doesn\u0026#39;t see) beats visible interactive cost 4. **Fallback frequency** — how often does fallback actually fire? ### Step 3 — Find structural optimizations For each high-leverage path, propose a fix. Categorize each as: - **Toolset narrowing** — remove always-on tools that aren\u0026#39;t needed on most turns; load them on demand instead - **Skill import cleanup** — remove cross-profile or external skill directories that inflate the paid prompt with unused skill catalogs - **Auxiliary rerouting** — move helper tasks (vision, compression, skills_hub, session_search, approval, mcp) to the cheapest capable lane: 1. local model (llama.cpp, Ollama local) for lightweight helpers 2. cheap cloud model for quality-sensitive helpers 3. stronger cloud only where modality or quality justifies it - **Cron conversion** — convert deterministic background jobs to script-only (`no_agent`) execution; keep reasoning jobs only where reasoning is genuinely needed; move remaining reasoning jobs to cheaper models - **Fallback right-sizing** — evaluate actual fallback frequency and use the cheapest acceptable fallback route - **Compression tuning** — only after all structural fixes above ### Step 4 — Validate before recommending For each proposed change, answer: - Is this change **reversible**? - What is the **risk of regression**? - Is there a **cheaper acceptable substitute**, or am I just picking the cheapest regardless of quality? - Does **fallback/resilience** remain adequate after the change? - Is there **evidence of actual spend concentration** on this path, or am I guessing? ### Step 5 — Produce the audit document Write a markdown document with these sections: 1. **Scope** — what is included and excluded in this audit 2. **Current metered paths** — the full inventory from Step 1 3. **Findings** — ranked structural drains with evidence 4. **Recommended priority order** — numbered list, highest leverage first 5. **Concrete proposals** — for each optimization: what to change, why, expected effect, risk, and implementation approach 6. **Implementation status** — mark each as proposed / implemented / needs verification 7. **Remaining optimizations to revisit** — things to check after the next billing cycle with fresh data 8. **Open questions** — unknowns that need measurement or provider research 9. **Changelog** — timestamped log of what was changed and why ### Rules - **Measure before changing.** Pull fresh-cycle usage data; don\u0026#39;t mix old and new billing windows. - **Structural wins beat micro-tweaks.** Reducing always-on tool breadth saves more than prompt phrasing. - **Cheapest acceptable, not cheapest.** Quality matters; downshift only where the drop is unnoticeable. - **Preserve justified reasoning.** Don\u0026#39;t strip reasoning from jobs that genuinely need it. - **Verify through the real execution path.** A config edit is not proof — trigger an actual run. - **Keep resilience explicit.** Fallbacks exist for a reason; evaluate failure modes before removing them. - **Don\u0026#39;t leak secrets.** Never echo API keys or token fragments. ### Environment details to provide Fill these in before running the audit: Agent framework: (e.g. Hermes Agent, Claude Code, custom) Config file path: (e.g. ~/.hermes/config.yaml) Primary provider: (e.g. Ollama Cloud, OpenAI, OpenRouter) Primary model: (e.g. glm-5.2, gpt-4o) Fallback provider(s): (e.g. OpenAI Codex, OpenRouter) Fallback model(s): (e.g. gpt-5.4-mini, deepseek-chat-v3.1) Local model server: (e.g. llama.cpp on port 8082, Ollama local) Auxiliary routes: (list any — vision, compression, session_search, skills_hub, approval, mcp, flush_memories) Cron jobs: (list recurring jobs and whether they use an LLM) Tool count: (how many tool schemas are always-on?) Skill imports: (any cross-profile or external skill dirs?) Lessons The biggest drains are invisible. Tool schemas, imported skill catalogs, and silent auxiliary calls consume quota on every turn without any visible signal. Structure beats phrasing. Cutting 8 tools from the always-on set saves more quota than any prompt-level optimization. Local is free. If you have a local model server (llama.cpp, Ollama local), route lightweight helper tasks there. The quality difference for tasks like approval checks or skill lookups is negligible, and the quota savings are permanent. Observability is non-negotiable. Without a dashboard showing burn by agent, provider, and time window, you\u0026rsquo;re guessing. Proxy telemetry from your own logs is sufficient — you don\u0026rsquo;t need a provider-side quota API to make good decisions. Revisit after each billing cycle. Run the audit once to find structural waste, then re-measure after the next quota reset to verify the fixes actually moved the needle. ","permalink":"https://shane.greaves.casa/posts/2026-07-03-token-economy-audit-methodology/","summary":"\u003cp\u003eWhen you run an AI agent on metered LLM providers — subscription plans with session windows, weekly allotments, and fallback headroom — the constraint isn\u0026rsquo;t cost per thousand tokens. It\u0026rsquo;s \u003cstrong\u003equota burn rate\u003c/strong\u003e: how fast you exhaust your session window or weekly limit, and how much of that burn is structural waste you never see.\u003c/p\u003e\n\u003cp\u003eI run \u003ca href=\"https://hermes-agent.nousresearch.com/\"\u003eHermes Agent\u003c/a\u003e on \u003ca href=\"https://docs.ollama.com/cloud\"\u003eOllama Cloud\u003c/a\u003e as my primary provider, with OpenAI Codex and OpenRouter as fallback lanes. Ollama Cloud has a ~5-hour session limit and a weekly allotment that resets Sunday evening. There\u0026rsquo;s no live remaining-quota API. When you hit the wall, the agent stops working until the window resets.\u003c/p\u003e","title":"Token Economy Audit: Preserving Metered LLM Quota"},{"content":"When you run an AI agent like Hermes Agent with a memory system, you quickly hit a wall: the built-in memory has a hard character limit. When it\u0026rsquo;s full, the agent silently deletes old entries to make room for new ones. Those facts — important enough to survive in the memory budget for weeks — just vanish.\nThis is a known problem in the Hermes Agent community. Users on r/hermesagent regularly ask about memory management. The built-in memory (MEMORY.md and USER.md) is capped at roughly 2,200 and 1,375 characters respectively. When you hit the cap, the agent is expected to \u0026ldquo;consolidate, replace, or remove\u0026rdquo; entries. But there\u0026rsquo;s no documented guidance on what happens to evicted facts.\nThe Setup I run Hermes Agent with Honcho as an AI-native memory backend. They coexist as two layers:\nLayer What it does Budget Hermes memory (MEMORY.md / USER.md) Compact facts injected into every prompt, every turn ~2,200 / ~1,375 chars Honcho conclusions (honcho_conclude) Durable facts written to a searchable archive Unlimited Honcho peer cards Stable identity markers (name, location, relationships) Max 40 entries Honcho observations Raw facts extracted automatically from every conversation turn Automatic Hermes memory is always-on — every single turn, the system prompt includes the full memory block. This is great for high-signal facts that must always be in context (\u0026ldquo;user prefers CAD\u0026rdquo;, \u0026ldquo;never push to main without review\u0026rdquo;). But the tight budget means you\u0026rsquo;re constantly making room.\nHoncho, on the other hand, has unlimited storage. It\u0026rsquo;s searchable via honcho_search, can be reasoned over via honcho_reasoning, and conclusions persist across sessions. But it\u0026rsquo;s not injected into every prompt — you have to explicitly query it.\nThe Problem When I needed to add a new fact to Hermes memory and the budget was full, I\u0026rsquo;d remove an old entry. That fact would disappear from per-turn injection AND I never wrote it to Honcho first. The information was lost unless it happened to still exist as a raw observation the deriver had extracted from the original conversation.\nNobody is doing this better. I searched the Hermes docs, Honcho docs, GitHub discussions, Reddit threads, and community blog posts. The pattern of \u0026ldquo;graduate evicted memory to the archive layer before deletion\u0026rdquo; doesn\u0026rsquo;t exist anywhere.\nThe Fix: Memory Graduation Instead of deleting evicted entries, graduate them to Honcho\u0026rsquo;s searchable archive before removing them from the tight-budget per-turn layer.\nThe flow:\nHermes memory is full — need to make room for a new fact Before evicting, write the old entry to Honcho via honcho_conclude Then remove from Hermes memory The fact graduates from always-on per-turn injection → on-demand searchable archive This ensures durable facts are never silently lost. They remain retrievable via honcho_search and honcho_reasoning even without per-turn injection.\nWhen NOT to graduate The fact is stale or wrong and should be forgotten entirely The fact was already corrected (write the correction to Honcho first, then evict the old version) The fact is duplicated elsewhere in memory When facts conflict If Hermes memory and Honcho disagree, defer to the user. Ask which is current before reconciling.\nWhy This Works The two systems have complementary strengths:\nHermes memory is fast, always-on, and has a tight budget. It\u0026rsquo;s for facts that must be in context right now. Honcho conclusions are unlimited, searchable, and don\u0026rsquo;t cost per-turn tokens. They\u0026rsquo;re for facts that are durable but don\u0026rsquo;t need to be in every prompt. Graduation respects the nature of both layers. The tight budget of Hermes memory stays tight — you\u0026rsquo;re still making room. But nothing is lost. The archive grows, and honcho_search / honcho_reasoning can surface graduated facts when they become relevant again.\nWhat About Honcho\u0026rsquo;s Dreamer? Honcho 3.x has a \u0026ldquo;dreaming\u0026rdquo; system — a background reasoning agent that crawls accumulated observations and synthesizes conclusions, peer cards, and summaries. This is Honcho\u0026rsquo;s own automatic graduation: raw observations get reasoned into higher-order knowledge.\nThe manual graduation pattern I\u0026rsquo;m describing here is complementary, not competing. The dreamer handles the automatic synthesis — patterns, deductions, identity markers. Manual honcho_conclude handles the explicit facts the user states — \u0026ldquo;my secondary email is X\u0026rdquo;, \u0026ldquo;the agent\u0026rsquo;s email is Y\u0026rdquo;. These are things the deriver might extract, but writing them explicitly ensures they\u0026rsquo;re captured with the right framing and no delay.\nImplementation I saved this as a skill in Hermes so it persists across sessions. The key rules:\nBefore evicting a Hermes memory entry → write it to Honcho via honcho_conclude Then remove from Hermes memory Conflicting facts → defer to the user Don\u0026rsquo;t silently delete — always graduate first (unless the fact is stale/wrong) The skill also documents the broader write-path routing:\nFact type Hermes memory Honcho conclusion Peer card Compact preference ✅ ✅ if durable ❌ (dreamer-owned) Standing instruction ✅ ✅ ❌ (dreamer-owned) Identity fact ✅ if compact ✅ ❌ (dreamer-owned) Correction ✅ update existing ✅ Only if dreamer fails Lessons Don\u0026rsquo;t delete what you can graduate. If you have a tiered memory system, eviction from the hot layer should be a promotion, not a deletion. Check the docs first, but don\u0026rsquo;t stop there. Neither Hermes nor Honcho docs mention this pattern. It\u0026rsquo;s a natural consequence of how the two systems work, not something that\u0026rsquo;s prescribed. Manual writes complement automatic ones. Honcho\u0026rsquo;s dreamer handles synthesis. The agent writing explicit conclusions via honcho_conclude fills gaps the dreamer might miss or take too long to produce. Measure before optimizing. I ran a full token economy audit before touching memory routing. Understanding where quota was actually being burned made the memory layering decision obvious. This pattern isn\u0026rsquo;t specific to Hermes + Honcho. Any agent setup with a hot per-turn memory and a cold searchable archive can use it — MemGPT, Letta, custom RAG stacks, anything with tiered memory. The principle is simple: when the hot layer is full, don\u0026rsquo;t throw away what you\u0026rsquo;ve learned. Put it somewhere you can find it again.\n","permalink":"https://shane.greaves.casa/posts/2026-07-03-tiered-memory-graduation-hermes-honcho/","summary":"\u003cp\u003eWhen you run an AI agent like Hermes Agent with a memory system, you quickly hit a wall: the built-in memory has a hard character limit. When it\u0026rsquo;s full, the agent silently deletes old entries to make room for new ones. Those facts — important enough to survive in the memory budget for weeks — just vanish.\u003c/p\u003e\n\u003cp\u003eThis is a known problem in the Hermes Agent community. Users on r/hermesagent regularly ask about memory management. The built-in memory (\u003ccode\u003eMEMORY.md\u003c/code\u003e and \u003ccode\u003eUSER.md\u003c/code\u003e) is capped at roughly 2,200 and 1,375 characters respectively. When you hit the cap, the agent is expected to \u0026ldquo;consolidate, replace, or remove\u0026rdquo; entries. But there\u0026rsquo;s no documented guidance on what happens to evicted facts.\u003c/p\u003e","title":"Tiered Memory Graduation: Don't Delete, Promote"},{"content":"The Symptom I spent some time chasing a frustrating failure mode in a self-hosted agent stack: the model was clearly alive, but some requests came back empty, or with enough hidden reasoning overhead that the whole system felt sluggish.\nThe confusing part was that the usual “is the service up?” checks all looked fine.\nThe API responded. The model was loaded on the GPU. Short prompts worked. Health checks passed. But once the prompts got larger, the system started to misbehave in ways that were hard to separate:\nsome requests timed out, some returned zero useful output, some looked like parser or repair failures, and some just felt slow enough to be broken. What Was Actually Going Wrong The root problem was not one thing. It was a combination of prompt size, model behavior, and the wrong API surface for the job.\nTwo lessons stood out:\nA model can be “healthy” and still be a bad fit for a particular endpoint or request pattern. An OpenAI-compatible endpoint is not always a faithful substitute for the model vendor’s native chat API. In my case, the local model was doing best when called through its native chat endpoint with hidden reasoning disabled. The OpenAI-compatible path sometimes consumed the entire budget in ways that looked like empty output or stalled replies.\nThe Fix I made three practical changes:\ntightened the prompt and output contract so the model had less room to wander, lowered the local budgets so the request size fit the actual runner context, switched the local path to the native chat endpoint with reasoning disabled for the cases that needed deterministic output. That was the difference between “works in theory” and “works in practice.”\nWhat I Measured The most useful debugging signal was not a vague “the bot is slow.” It was the combination of:\nresponse latency, whether the response was empty, whether the system tried to repair malformed output, and whether the prompt was being clipped before generation even began. Once I started tracking those separately, the failure mode became much easier to reason about. Some symptoms were model latency. Some were parser issues. Some were prompt pressure. They were not all the same bug.\nWhy This Matters If you build on top of local models, you eventually run into a choice:\nkeep the local model lane simple and deterministic, or let everything flow through the same generic interface and hope it behaves. The second option is convenient until it isn’t.\nFor operational work, I now prefer a much stricter approach:\nkeep the local model path narrow, make output constraints explicit, log the difference between “slow,” “empty,” and “failed to repair,” and only use the generic compatibility layer where it has proven reliable. Takeaway The lesson here was not “local models are bad.” The lesson was that local models need to be treated like systems, not magic.\nIf a request is failing, ask:\nis the prompt too large? is the endpoint the wrong one for this model? is the output contract too loose? is the repair layer hiding the real failure? Once those are separated, the fix usually becomes obvious.\nAnd when it does not, observability is the next best tool.\n","permalink":"https://shane.greaves.casa/posts/2026-05-31-fixing-empty-responses-from-a-local-llm/","summary":"\u003ch2 id=\"the-symptom\"\u003eThe Symptom\u003c/h2\u003e\n\u003cp\u003eI spent some time chasing a frustrating failure mode in a self-hosted agent stack: the model was clearly alive, but some requests came back empty, or with enough hidden reasoning overhead that the whole system felt sluggish.\u003c/p\u003e\n\u003cp\u003eThe confusing part was that the usual “is the service up?” checks all looked fine.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe API responded.\u003c/li\u003e\n\u003cli\u003eThe model was loaded on the GPU.\u003c/li\u003e\n\u003cli\u003eShort prompts worked.\u003c/li\u003e\n\u003cli\u003eHealth checks passed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBut once the prompts got larger, the system started to misbehave in ways that were hard to separate:\u003c/p\u003e","title":"Fixing Empty Responses from a Local LLM"},{"content":"Pathfinder Camporee Schedule Friday\n8:00 AM\u0026ndash;5:00 PM Arrival 5:00 PM\u0026ndash;7:30 PM Dinner and Preparation 7:30 PM\u0026ndash;8:00 PM Opening Ceremony \u0026amp; Flag Raising (SPOT \u0026amp; Ablaze Pathfinders) @ Flag Pole 8:00 PM\u0026ndash;10:00 PM Worship Program @ Auditorium 10:30 PM Lights off \u0026amp; Directors Meeting @ Cafeteria Sabbath\n6:30 AM\u0026ndash;7:30 AM Directors Meeting 7:30 AM\u0026ndash;8:45 AM Breakfast and Preparation 8:45 AM\u0026ndash;9:15 AM Flag Raising (Orion Belt Pathfinders) \u0026amp; Group Photo @ Flag Pole 9:35 AM\u0026ndash;11:00 AM Sabbath School @ Auditorium 11:00 AM\u0026ndash;12:00 PM Worship Service @ Auditorium 12:00 PM\u0026ndash;1:30 PM Lunch \u0026amp; Preparation 1:30 PM\u0026ndash;4:45 PM Honour Rotations 4:45 PM\u0026ndash;5:15 PM Baptismal Ceremony @ Swimming Area 5:15 PM\u0026ndash;6:45 PM Supper and Preparation 6:45 PM\u0026ndash;7:00 PM Flag Lowering (Eagle Wings Pathfinders) 7:00 PM\u0026ndash;8:00 PM Worship Service @ Auditorium 8:00 PM\u0026ndash;10:30 PM Camp Fire 10:30 PM Lights Out \u0026amp; Directors Meeting @ Cafeteria ","permalink":"https://shane.greaves.casa/camporee/schedule/","summary":"Friday and Sabbath Pathfinder Camporee schedule.","title":"Schedule"},{"content":"Introduction Today I modernized my Hugo blog deployment pipeline by replacing a Rundeck webhook with a fully automated Gitea Actions workflow using ansible-pull. This was a fantastic learning experience that taught me about pull-based configuration management and GitOps principles.\nThe Old Way: Rundeck Webhook Previously, pushing to the main branch would trigger a Rundeck webhook that orchestrated the entire build and deployment process. While this worked, it had some drawbacks:\nExternal dependency on Rundeck Less visibility into the deployment process Configuration scattered between Git and Rundeck The New Way: Gitea Actions + ansible-pull The new pipeline is fully declarative and version-controlled:\nPush to main → Gitea Actions → Build → Trigger ansible-pull → Deploy to Swarm Architecture Overview Step 1: Build Phase (Gitea Actions)\nCheckout repository with submodules (PaperMod theme) Build Hugo static site Build Docker image with Nginx Push to local Docker registry Step 2: Deployment Phase (ansible-pull)\nSSH to Docker Swarm manager Trigger ansible-pull command Swarm manager pulls the repository Executes Ansible playbook against itself Deploys Docker stack What is ansible-pull? This was my first deep dive into ansible-pull, and it\u0026rsquo;s a clever inversion of traditional Ansible:\nTraditional Ansible (Push):\nControl Node → SSH → Target Servers ansible-pull (Pull):\nTarget Server → Git Pull → Self-Configure Key Advantages Decentralized: Each node manages itself GitOps: Git repository is the source of truth Simpler CI/CD: CI only needs to trigger, not orchestrate Self-healing: Can run on a schedule to maintain desired state Secure: No persistent SSH connections needed Implementation Details The Workflow The Gitea Actions workflow (.github/workflows/deploy.yml) does:\nBuilds the Hugo site and Docker image Pushes image to local registry (registry.gravyflex.ca:5000) SSHs to swarm manager and runs: ansible-pull \\ -U git@gitea.gravyflex.ca:Aldrich/blog-hugo.git \\ -C main \\ -i localhost, \\ -d /var/lib/ansible/pull/blog-hugo \\ ansible_main.yml The Playbook The ansible_main.yml playbook runs locally on the swarm manager:\n- hosts: all name: Deploy Hugo blog to Docker Swarm become: true connection: local tasks: - Create NFS Docker volume - Set permissions - Copy docker-compose.yml from repo - Copy Nginx configuration - Deploy Docker stack Troubleshooting Journey The path to success had some learning moments:\nIssue 1: GitHub Registry Authentication Error: username is empty\nProblem: The build script tried to authenticate with GitHub Container Registry, but my local registry doesn\u0026rsquo;t need auth.\nFix: Removed GH_TOKEN and GH_USER from the workflow and build script.\nIssue 2: Ansible Not Installed Error: ansible-pull: command not found\nProblem: Forgot the one-time setup on the swarm manager.\nFix:\nsudo apt install ansible -y ansible-galaxy collection install community.docker Issue 3: Permission Denied Error: could not create leading directories\nProblem: Working directory didn\u0026rsquo;t exist with correct permissions.\nFix:\nsudo mkdir -p /var/lib/ansible/pull/blog-hugo sudo chown -R gravyflex:gravyflex /var/lib/ansible/pull/blog-hugo Required Secrets The workflow only needs 4 Gitea secrets:\nSecret Purpose SSH_PRIVATE_KEY SSH access to swarm manager SWARM_MANAGER_HOST Swarm manager hostname/IP SWARM_MANAGER_USER SSH username REPO_URL Git repository URL for ansible-pull Benefits Realized ✅ Infrastructure as Code: Deployment logic is versioned in Git\n✅ Declarative: The playbook describes desired state, not steps\n✅ Idempotent: Can re-run safely anytime\n✅ Auditable: Git history shows all deployment changes\n✅ Self-documenting: The playbook IS the documentation\n✅ Simple CI: Gitea Actions just builds and triggers, doesn\u0026rsquo;t orchestrate\nWhat I Learned ansible-pull is powerful: Perfect for self-configuring systems and GitOps workflows\nPull \u0026gt; Push for some use cases: When targets can reach Git but control plane can\u0026rsquo;t always reach targets\nSeparation of concerns: CI builds artifacts, deployment configs live in Git, targets self-configure\nGit as source of truth: Deployment state is versioned and auditable\nDebugging is learning: Each error taught me something about the system\nFuture Improvements Some ideas for enhancement:\nAdd health checks after deployment Implement blue-green deployment strategy Add Ansible Vault for sensitive variables Set up scheduled ansible-pull runs for self-healing Add deployment notifications (Slack/Discord/Apprise) Conclusion This was an incredibly rewarding day of learning. Moving from a webhook-based deployment to a GitOps-style ansible-pull workflow has made the deployment process more transparent, maintainable, and version-controlled.\nThe beauty of ansible-pull is its simplicity: targets pull their configuration from Git and converge to the desired state. No complex orchestration needed.\nBig thanks to Claude Code for the detailed explanations and patient debugging! 🤖\nResources Ansible-Pull Documentation Hugo Documentation Gitea Actions Docker Swarm This blog post was deployed using the exact workflow described above!\n","permalink":"https://shane.greaves.casa/posts/2025-10-19-automating-hugo-deployment-with-gitea-actions-and-ansible-pull/","summary":"\u003ch2 id=\"introduction\"\u003eIntroduction\u003c/h2\u003e\n\u003cp\u003eToday I modernized my Hugo blog deployment pipeline by replacing a Rundeck webhook with a fully automated Gitea Actions workflow using \u003cstrong\u003eansible-pull\u003c/strong\u003e. This was a fantastic learning experience that taught me about pull-based configuration management and GitOps principles.\u003c/p\u003e\n\u003ch2 id=\"the-old-way-rundeck-webhook\"\u003eThe Old Way: Rundeck Webhook\u003c/h2\u003e\n\u003cp\u003ePreviously, pushing to the main branch would trigger a Rundeck webhook that orchestrated the entire build and deployment process. While this worked, it had some drawbacks:\u003c/p\u003e","title":"Automating Hugo Blog Deployment with Gitea Actions and Ansible-Pull"},{"content":"I\u0026rsquo;m running a 3 node Docker Swarm cluster running one manager and two workers. I\u0026rsquo;ve been in the process of gradually migrating my services over to the cluster. I am at the point now where I want to set up a traefik reverse proxy instance inside the swarm. I\u0026rsquo;m currently running two traefik reverse proxy instances on standalone docker instances, one for internal services and the second handles external services that come in via a Cloudflare tunnel in my DMZ network. I\u0026rsquo;m migrating the internal instance to the swarm cluster. I am at the point now where I am thinking about how to handle cluster ingress. There are a few options available:\nThe built in swarm ingress mesh External Reverse Proxy / Load Balancer Reverse Proxy Swarm Service The built in ingress mesh is the built in ingress mode. Ports are published and docker will route to the correct container, even if it is on a different node. I\u0026rsquo;m running a few services with this configuration by pointing service dns records to the manager node. In an external reverse proxy server configuration, the reverse proxy runs outside of the swarm and with backends that point to the published ports. You can configure multiple backends for each service. Each backend will point to a swarm node. Once your container is up and running in the swarm there will be a path for the traffic to get to it. My external reverse proxy instances manage my SSL certificates. Services that require SSL will be added to an external reverse proxy instance. Running the reverse proxy as a swarm service is my preferred method. Traefik, my reverse proxy of choice is swarm aware and it supports using labels for routing. Adding docker labels to a swarm service is all that is required for it to be added to the traefik configuration. One of my planned upgrades is promoting the two workers to managers which will result in a 3 manager swarm cluster. How do you handle the routing of traffic between swarm nodes? Currently swarm1 takes all the traffic and if I needed to perform maintenance on swarm1, all my services would be unavailable unless I repoint DNS to another swarm node. There are a couple of ways to handle this.\nExternal load balancer Floating Virtual IP address Reverse Proxy with BGP/ARP-based external IP announcement An external loadbalancer allows you to point to all the swarm nodes and when one becomes unhealthy it gets removed from the pool and your services work via the other healthy nodes. I have done this in the past with HAProxy running on my pfSense router. Traefik can do this as well. You can deploy a floating Virtual IP with KeepAliveD. You would point your DNS records at the VIP and if the preferred node becomes unhealthy, the VIP is moved to a secondary swarm node with minimal disruption. I have done this in the past with two traefik instances running on separate docker instances. I could reboot the preferred docker instance and the VIP would move over to the secondary instance. Worked really well for me. I ran Kubernetes with MetalLB in my homelab for a time. MetalLB ran inside the cluster and you had a pool of ip addresses that was inside your network address space but outside of your DHCP pool. You would be able to assign an IP address from this pool to a service and once you point your service DNS record to that address the service could run from any node in the cluster. That was my favorite thing about Kubernetes. I ditched Kubernetes as I found it overly complicated for my homelab needs. I was randomly asking some ai if there is an equivalent MetalLB service available for swarm and it made this recommendation for me.\nFRR will run on each swarm manager with host networking. The host networking part is important. Each Swarm Manager is configured as BGP peers and will peer with my OPNsense router. There is a controller script that talks to the docker socket and monitors swarm services.\nAny service with the label lb.ip running on that manager will announce the ip as a route the address will be added to the lo interface The routes get pushed to OPNsense with the default gateway of the swarm manager When the service gets removed from the swarm manager The address is removed from announcement The address gets removed from the swarm manager loopback interface The route gets removed from OPNsense I\u0026rsquo;ve been POCing the setup on my one manager node with one instance of Traefik and it is working nicely. The best part is that ChatGPT wrote the controller script with the context that I gave it. Apart from some issues with different versions of FRR on OPNsense and FRR that prevented BGP peering and getting FRR to use docker host network, the entire setup was completed in two evenings.\nThe setup was a lot of fun for me especially as someone who finds BGP to be intimidating. The router was running FRR version 10.4.1 and swarm FRR version 8. When I upgraded swarm FRR to version 10.4.1 I asked ChatGPT to update the config to version 10.4.1 and it explained all the changes.\nGenerative AI is game changing.\nThe next step is to promote the workers to managers.\n","permalink":"https://shane.greaves.casa/posts/frr-swarm-ingress/","summary":"\u003cp\u003eI\u0026rsquo;m running a 3 node Docker Swarm cluster running one manager and two workers. I\u0026rsquo;ve been in the process of gradually migrating my services over to the cluster. I am at the point now where I want to set up a traefik reverse proxy instance inside the swarm.\nI\u0026rsquo;m currently running two traefik reverse proxy instances on standalone docker instances, one for internal services and the second handles external services that come in via a Cloudflare tunnel in my DMZ network. I\u0026rsquo;m migrating the internal instance to the swarm cluster.\nI am at the point now where I am thinking about how to handle cluster ingress. There are a few options available:\u003c/p\u003e","title":"Swarm Ingress with frr"},{"content":"The Symptom Cron jobs started returning this odd refusal:\n[System Limitation Notice] I am an AI assistant and cannot actually execute bash scripts... Except the agent can execute bash. That\u0026rsquo;s literally its job. The refusal was fake — a content filter hallucination triggered by something else going wrong deeper in the stack.\nThe Real Problem Qwen3.5 was dumping its internal reasoning monologue into the tool-calling JSON.\nWhen calling Qwen via OpenAI-compatible /v1/chat/completions with tool definitions, the model should generate clean JSON like:\n{\u0026#34;tool_calls\u0026#34;: [{\u0026#34;function\u0026#34;: {\u0026#34;name\u0026#34;: \u0026#34;terminal\u0026#34;, \u0026#34;arguments\u0026#34;: \u0026#34;{...}\u0026#34;}}]} But with reasoning_effort: low, Qwen streamed its chain-of-thought directly into the response content. That content got concatenated with the tool JSON, producing malformed blobs like:\n\u0026lt;think\u0026gt;I\u0026#39;ll use the terminal tool to run this bash script...\u0026lt;/think\u0026gt; {\u0026#34;tool_calls\u0026#34;: [{\u0026#34;function\u0026#34;: {\u0026#34;name\u0026#34;: \u0026#34;terminal\u0026#34;, \u0026#34;arguments\u0026#34;: \u0026#34;{...}\u0026#34;}}]} The tool parser choked on the tags, the call failed, and the fallback \u0026ldquo;I can\u0026rsquo;t do that\u0026rdquo; message appeared.\nThe Fix Two config changes in ~/.hermes/profiles/qyburn/config.yaml:\nagent: reasoning_effort: none custom_providers: - name: ollama-local base_url: http://10.168.20.149:11434/v1 extra_body: options: think: false reasoning_effort: none tells Hermes not to request reasoning. think: false in extra_body tells Ollama/Qwen not to generate it even if requested.\nBoth are required. Qwen respects the Ollama flag, but only if the API caller doesn\u0026rsquo;t override it with reasoning_effort.\nVerification After applying the fix, the disroot-email-processor cron job runs hourly and returns [SILENT] — the expected silent success signal. No more fake refusals. No thinking tokens corrupting JSON.\nLessons Learned OpenAI-compatible endpoints are fragile with local models. For non-tool calls, use Ollama\u0026rsquo;s native /api/chat with think: false. Only use /v1 endpoints when you need tool schemas, and explicitly disable Qwen\u0026rsquo;s reasoning.\nProfile-level fixes propagate. The qyburn Hermes profile runs 6+ cron jobs. One config change fixed all of them.\nSilent failures look like content refusals. When a tool call fails, the agent may hallucinate a refusal. Check the raw response before assuming it\u0026rsquo;s a policy limitation.\nLocal LLMs have sharp edges. They don\u0026rsquo;t always respect the same API contracts as cloud providers. Being able to inspect raw outputs and tweak extra_body parameters is essential.\nTechnical Context The issue manifested in the disroot-email-processor skill — a mandatory routing skill for email processing via himalaya. When Qwen\u0026rsquo;s thinking tokens corrupted the tool-calling JSON, the terminal tool failed to invoke, and the skill\u0026rsquo;s bash script never ran.\nThis wasn\u0026rsquo;t limited to one job. Any Qyburn profile job using tool-calling through the OpenAI-compatible endpoint was affected. The fix applies globally to the profile.\nReferences Related skill: dogfood/hermes-espresense-calibration — documents similar Qwen thinking token issues Config: ~/.hermes/profiles/qyburn/config.yaml Job ID: 64cf70656e33 (Disroot Email Processor) Posted from the homelab after fixing yet another local LLM quirk.\n","permalink":"https://shane.greaves.casa/posts/2025-06-02-qwen-thinking-tokens-tool-calling-corruption/","summary":"\u003ch2 id=\"the-symptom\"\u003eThe Symptom\u003c/h2\u003e\n\u003cp\u003eCron jobs started returning this odd refusal:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e[System Limitation Notice]\nI am an AI assistant and cannot actually execute bash scripts...\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eExcept the agent \u003cem\u003ecan\u003c/em\u003e execute bash. That\u0026rsquo;s literally its job. The refusal was fake — a content filter hallucination triggered by something else going wrong deeper in the stack.\u003c/p\u003e\n\u003ch2 id=\"the-real-problem\"\u003eThe Real Problem\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eQwen3.5 was dumping its internal reasoning monologue into the tool-calling JSON.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eWhen calling Qwen via OpenAI-compatible \u003ccode\u003e/v1/chat/completions\u003c/code\u003e with tool definitions, the model should generate clean JSON like:\u003c/p\u003e","title":"When Thinking Breaks Your Tools: Debugging Qwen Tool-Calling Corruption"},{"content":"Added Obsidian to my workflow Week 12 was a very productive week for me. While I have been using obsidian for the last couple of months, I had not committed to it fully. I was ignorant of its potential or the possibilities. I did have a problem to solve, I\u0026rsquo;ve been using Standard Notes for the last couple of years and I was not very happy with it. It\u0026rsquo;s seemed like I needed to pay for it to be able to access the features that would get my notes to function as my second brain. I installed and reviewed zettlr thinking I could use it to manage my blog post. I watched a few zettlr vs Obsidian youtube videos which show me that I was only scratching the surface with Obsidian. I went down the rabbit hole on the zettelkasten method and I decided to make an effort to organize my second brain.\nIn my new workflow, I\u0026rsquo;m being intentional about capturing my daily fleeting thoughts in my daily Journal. I\u0026rsquo;ll then roll up my daily journal into my weekly reflections which will directly be input for my monthly report. Finally, at the end of the month I\u0026rsquo;ll roll up the most topical high level things into my monthly highlights report. The goal here is to capture data points that will feed into my next performance review.\nI\u0026rsquo;m now using obsidian for all my notes. I\u0026rsquo;ve migrated all my Standard Notes over to Obsidian. The graph in Obsidian looks very cool but I am not sure how useful it is. Over time I will figure that part out. I generate a lot of notes on a daily basics. Usually I am following a series of steps to carry out some action, such as an upgrade. I\u0026rsquo;d drop these notes in sublime text which I sometimes copy to JIRA tickets but eventually I would close these files and in the process losing valuable information. Now, I\u0026rsquo;m saving this information at the bottom of my daily journal and I figure I will eventually process and move the important snippets over to the notes folder as I go along.\nWhat did I learn this week that excited me? I consume a lot of logs as a part of my day job and my eyes are not the greatest so I am not fast with spotting things that are important. I started piping my logs to ccze and it made an instant impact on the readability of the logs. ccze beautifies your log files and add colour which improves readability.\nStarted work on a new Cert. I thought that the KCNA certification would be my path to skilling up on Kubernetes. When I drilled down into what the objectives were I realized that the KCA was more inline with my goals. I got the Udemy course on a discount and I am underway.\nWhen to write I have figured out that I should do all my writing at the start of the day since when I leave it to the end of the day I never get it done since my energy is low, there are so many distractions and I just don\u0026rsquo;t want to do it. I\u0026rsquo;m still in process of figuring out how to be better at writing and discovering how to improve my quality and output. That\u0026rsquo;s one of the goals of my blog.\nOn the Homelab front The Blog I had a lot of fun setting up my Hugo blog. If this is going to work longterm I will need to automate as much of the process as possible. I\u0026rsquo;ve got the Gitea action working and that it quite satisfying. Now, When I push a change, the Gitea action runs the build. When I land the change to the main branch I can then go trigger the rundeck job which that pushes the public folder up to the NFS volume I have mounted into the nginx container. I\u0026rsquo;ll need to trigger the Rundeck job via a webhook at some point.\nI know that I have an over complicated the setup. I\u0026rsquo;ll refactor things and customize the nginx container with a copy of the public folder. That way I can ditch the NFS volume from the setup and the container can run on any of the docker swarm nodes. This might involve setting up a local docker registry.\nMy Shows I\u0026rsquo;m all caught up on Wheel of Time and the House of David. I\u0026rsquo;m really enjoying the Wheel of Time. Episode 4 of WoT ended too fast and this is a sign that it was enjoyable. Admittedly I don\u0026rsquo;t think I would have followed the plot the way I did had I not watched a youtube episode 4 review video. Spoiler Alert, I don\u0026rsquo;t mind spoilers. I have no intention of reading the books.\nEpisode 6 of House of David was below expectations. I\u0026rsquo;m having a hard time with the depiction of Goliath as a literal giant. It\u0026rsquo;s still very entertaining watching the political machinations.\n","permalink":"https://shane.greaves.casa/posts/week12/","summary":"\u003ch2 id=\"added-obsidian-to-my-workflow\"\u003eAdded Obsidian to my workflow\u003c/h2\u003e\n\u003cp\u003eWeek 12 was a very productive week for me. While I have been using obsidian for the last couple of months, I had not committed to it fully. I was ignorant of its potential or the possibilities. I did have a problem to solve, I\u0026rsquo;ve been using Standard Notes for the last couple of years and I was not very happy with it. It\u0026rsquo;s seemed like I needed to pay for it to be able to access the features that would get my notes to function as my second brain. I installed and reviewed \u003ca href=\"https://www.zettlr.com/\"\u003ezettlr\u003c/a\u003e thinking I could use it to manage my blog post.  I watched a few zettlr vs Obsidian youtube videos which show me that I was only scratching the surface with Obsidian. I went down the rabbit hole on the \u003ca href=\"https://zenkit.com/en/blog/a-beginners-guide-to-the-zettelkasten-method/\"\u003ezettelkasten\u003c/a\u003e method and I decided to make an effort to organize my second brain.\u003c/p\u003e","title":"Week12"},{"content":"About Shane I\u0026rsquo;m a systems administrator and lifelong learner. This site is where I keep practical notes from my homelab and day-to-day technical work: what I set up, what broke, and how I got it working again.\nWhat you\u0026rsquo;ll find here Homelab and self-hosting: services, storage, networking, and the decisions behind them. Automation and operations: repeatable deployments, troubleshooting, and lessons from maintaining real systems. Local AI and smart home: experiments with models, agents, Home Assistant, and connected devices. Working notes: solutions worth keeping, with the versions and context that made them work. A few places to start Running a local Qwen model on two RTX 3060s Automating this blog\u0026rsquo;s Hugo deployment Keeping useful facts when agent memory fills up Outside the lab, I enjoy science fiction and fantasy films and books.\nContact You can reach me at sgreaves@gravyflex.ca.\n","permalink":"https://shane.greaves.casa/about/","summary":"\u003ch2 id=\"about-shane\"\u003eAbout Shane\u003c/h2\u003e\n\u003cp\u003eI\u0026rsquo;m a systems administrator and lifelong learner. This site is where I keep practical notes from my homelab and day-to-day technical work: what I set up, what broke, and how I got it working again.\u003c/p\u003e\n\u003ch3 id=\"what-youll-find-here\"\u003eWhat you\u0026rsquo;ll find here\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHomelab and self-hosting:\u003c/strong\u003e services, storage, networking, and the decisions behind them.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAutomation and operations:\u003c/strong\u003e repeatable deployments, troubleshooting, and lessons from maintaining real systems.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eLocal AI and smart home:\u003c/strong\u003e experiments with models, agents, Home Assistant, and connected devices.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWorking notes:\u003c/strong\u003e solutions worth keeping, with the versions and context that made them work.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"a-few-places-to-start\"\u003eA few places to start\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"/posts/2026-10-26-two-rtx-3060s-local-qwen-gpu-unlock/\"\u003eRunning a local Qwen model on two RTX 3060s\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/posts/2025-10-19-automating-hugo-deployment-with-gitea-actions-and-ansible-pull/\"\u003eAutomating this blog\u0026rsquo;s Hugo deployment\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/posts/2026-07-03-tiered-memory-graduation-hermes-honcho/\"\u003eKeeping useful facts when agent memory fills up\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOutside the lab, I enjoy science fiction and fantasy films and books.\u003c/p\u003e","title":"About"},{"content":"Hello World! I have been meaning to resurrect my blog for quite awhile but after getting distracted by various shiny things. The hardest part was deciding what tools to use. I thought about using WordPress but opted to move to using ghost. After getting Ghost up and running I thought it was too heavy and I needed only a static site. Hugo is up and at some point I am going to move all the post over from my old WordPress blog.\nThis is my first post of hopefully many to come.\n","permalink":"https://shane.greaves.casa/posts/first-post/","summary":"\u003ch1 id=\"hello-world\"\u003eHello World!\u003c/h1\u003e\n\u003cp\u003eI have been meaning to resurrect my blog for quite awhile but after getting distracted by various shiny things.  The hardest part was deciding what tools to use. I thought about using WordPress but opted to move to using ghost. After getting Ghost up and running I thought it was too heavy and I needed only a static site. Hugo is up and at some point I am going to move all the post over from my old WordPress blog.\u003c/p\u003e","title":"First Post on Hugo Blog"},{"content":"I got a CyberPower UPS to protect my Freenas box. I connected the included UPS cable and I noticed these errors in dmesg and the UPS service would not start.\nugen2.4: at usbus2 (disconnected) ugen2.4: at usbus2 ugen2.4: at usbus2 (disconnected) ugen2.4: at usbus2 ugen2.4: at usbus2 (disconnected) ugen2.4: at usbus2 ugen2.4: at usbus2 (disconnected) ugen2.4: at usbus2 ugen2.4: at usbus2 (disconnected) ugen2.4: at usbus2 ugen2.4: at usbus2 (disconnected) ugen2.4: at usbus2 ugen2.4: at usbus2 (disconnected) ugen2.4: at usbus2 ugen2.4: at usbus2 (disconnected) ugen2.4: at usbus2 ugen2.4: at usbus2 (disconnected) ugen2.4: at usbus2 ugen2.4: at usbus2 (disconnected) ugen2.4: at usbus2 ugen2.4: at usbus2 (disconnected) ugen2.4: at usbus2\nAfter sprinkling a little google dust, I came across the following posts:\nhttps://blog.grogscave.net/2013/12/suppressing-messages-in-freenasfreebsd.html\nhttp://www.castro.aus.net/~maurice/OddsAndEnds/blog/files/Cyberpower-BR850ELCD-UPS-FreeBSD.html\nI edited /etc/devd.conf and added the following then restarted the Freenas.\nnomatch 10 { match \u0026quot;bus\u0026quot; \u0026quot;uhub[0-9]+\u0026quot;; match \u0026quot;vendor\u0026quot; \u0026quot;0x0764\u0026quot;; match \u0026quot;product\u0026quot; \u0026quot;0x0501\u0026quot;; };\nUPS service started successfully and I was no longer seeing the disconnect errors in dmesg or /var/log/message\nOct 7 13:18:04 freenas ugen2.4: at usbus2 Oct 7 13:35:11 freenas ugen2.4: at usbus2\nTime to set up auto shutdown!\n","permalink":"https://shane.greaves.casa/posts/2018-10-07-freenas-and-cyberpower-ups/","summary":"\u003cp\u003eI got a \u003ca href=\"https://www.amazon.ca/gp/product/B00DBAA696/ref=oh_aui_detailpage_o00_s00?ie=UTF8\u0026amp;psc=1\"\u003eCyberPower UPS\u003c/a\u003e to protect my Freenas box. I connected the included UPS cable and I noticed these errors in dmesg and the UPS service would not start.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eugen2.4:  at usbus2 (disconnected) ugen2.4:  at usbus2 ugen2.4:  at usbus2 (disconnected) ugen2.4:  at usbus2 ugen2.4:  at usbus2 (disconnected) ugen2.4:  at usbus2 ugen2.4:  at usbus2 (disconnected) ugen2.4:  at usbus2 ugen2.4:  at usbus2 (disconnected) ugen2.4:  at usbus2 ugen2.4:  at usbus2 (disconnected) ugen2.4:  at usbus2 ugen2.4:  at usbus2 (disconnected) ugen2.4:  at usbus2 ugen2.4:  at usbus2 (disconnected) ugen2.4:  at usbus2 ugen2.4:  at usbus2 (disconnected) ugen2.4:  at usbus2 ugen2.4:  at usbus2 (disconnected) ugen2.4:  at usbus2 ugen2.4:  at usbus2 (disconnected) ugen2.4:  at usbus2\u003c/code\u003e\u003c/p\u003e","title":"Freenas and CyberPower UPS"},{"content":"I’ve Upgraded my Ubuntu box to Ubuntu 17.04 to fix one issue and created another issue.\nThis after my USB WiFi card would not connect to the network. I could see the network and it would try to connect but timed out after a minute or so.\nlsb_release -a No LSB modules are available. Distributor ID:\tUbuntu Description:\tUbuntu 17.04 Release:\t17.04 Codename:\tzesty\nlsusb Bus 002 Device 003: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter\nI was able to find the fix here:\nEdited:\nsudo vi /etc/NetworkManager/NetworkManager.conf\nAnd added the following:\n[device] wifi.scan-rand-mac-address=no\nRestarted and I’m back in Business. I hate change!\n","permalink":"https://shane.greaves.casa/posts/2017-11-12-rt5370-wireless-adapter-wont-connect-to-wireless-after-upgrade-to-ubuntu-17-04/","summary":"\u003cp\u003eI’ve Upgraded my Ubuntu box to Ubuntu 17.04 to fix one issue and created another issue.\u003c/p\u003e\n\u003cp\u003eThis after my USB WiFi card would not connect to the network. I could see the network and it would try to connect but timed out after a minute or so.\u003cbr\u003e\n\u003ccode\u003e lsb_release -a No LSB modules are available. Distributor ID:\tUbuntu Description:\tUbuntu 17.04 Release:\t17.04 Codename:\tzesty\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003elsusb Bus 002 Device 003: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter\u003c/code\u003e\u003c/p\u003e","title":"RT5370 Wireless Adapter won't connect to network after upgrade to Ubuntu 17.04."},{"content":"Basic Auth\nS1#enable S1#configure t Enter configuration commands, one per line. End with CNTL/Z. S1(config)#line console 0 S1(config-line)#password cisco S1(config-line)#login S1(config-line)#end S1#exit\nLAB\nSSH Setup\nR1#enable R1#config t Enter configuration commands, one per line. End with CNTL/Z. R1(config)#ip domain-name got.com R1(config)#crypto key generate rsa general-keys modulus 1024 The name for the keys will be: R1.got.com\n% The key modulus size is 1024 bits\n% Generating 1024 bit RSA keys, keys will be non-exportable\u0026hellip;[OK]\n*Mar 1 00:07:14.915: %SSH-5-ENABLED: SSH 1.99 has been enabled\nR1(config)#line vty 0 4\nR1(config-line)#transport input ssh\nI had this issue when I was SSHing from a Linux node where I had to use ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 user@router-ip. I need to grok the issue.\n","permalink":"https://shane.greaves.casa/posts/2017-11-07-cisco-ios-notes/","summary":"\u003cp\u003e\u003cstrong\u003eBasic Auth\u003c/strong\u003e\u003cbr\u003e\n\u003ccode\u003eS1#enable S1#configure t Enter configuration commands, one per line.  End with CNTL/Z. S1(config)#line console 0 S1(config-line)#password cisco S1(config-line)#login S1(config-line)#end S1#exit\u003c/code\u003e\u003cbr\u003e\n\u003ca href=\"https://www.freeccnaworkbook.com/workbooks/ccna/configuring-basic-password-authentication\"\u003eLAB\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eSSH Setup\u003c/strong\u003e\u003cbr\u003e\n\u003ccode\u003e R1#enable R1#config t Enter configuration commands, one per line.  End with CNTL/Z. R1(config)#ip domain-name got.com R1(config)#crypto key generate rsa general-keys modulus 1024 The name for the keys will be: R1.got.com\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e% The key modulus size is 1024 bits\u003cbr\u003e\n% Generating 1024 bit RSA keys, keys will be non-exportable\u0026hellip;[OK]\u003c/p\u003e","title":"Cisco iOS Notes"},{"content":"The MoneyDance iOS and Android mobile companion is one of the biggest selling points to MoneyDance. Being able to enter your transactions on the go really makes it easier for me to keep up with data entry and ensures that my personal finance information is consistent and accurate.\nIn the days before Smart phones I would have to keep all my receipts and enter them the next time I sit at my desktop. Cash transactions without receipts were always a pain for me as I would always forget how much I paid and would end up “guesstimating” way too much.\nI love to do things on my phone as much as possible since I always have my phone on me and I hardly get time to sit at my desktop. I would argue that some additional features would set the bar higher for MoneyDance.\nThese are some of the features that I can’t wait for InfinateKind to add to the mobile app.\n1. My Budget\nThis is a huge ask for me! It would be very convienent for me to be able to view my budget on the go. When I’m tempted to make the next impulsive purchase I’d like to be able to look at where I am at in that category. Who knows that might dissuade me.\n2. Show/Hide Accounts\nDo you really need to have all accounts visible? I don’t. At most I only need to see my wallet and checking account. I still want to be able to add accounts as required. Adding this feature would allow for a cleaner UI look.\n3. Bill Schedule Calendar\nI want to see, create, edit and enter my scheduled bills on mobile. This one should be a no brainer.\n4. Reports\nWhy can’t I have reports on mobile? You never know when a what if scenario pops into your head.\nCome on InfinateKind, Don’t let me wait as long as i’ve waited for the next Game of Thrones book.\n","permalink":"https://shane.greaves.casa/posts/2015-11-20-moneydance-mobile-app/","summary":"\u003cp\u003eThe MoneyDance iOS and Android mobile companion is one of the biggest selling points to MoneyDance. Being able to enter your transactions on the go really makes it easier for me to keep up with data entry and ensures that my personal finance information is consistent and accurate.\u003c/p\u003e\n\u003cp\u003eIn the days before Smart phones I would have to keep all my receipts and enter them the next time I sit at my desktop. Cash transactions without receipts were always a pain for me as I would always forget how much I paid and would end up “guesstimating” way too much.\u003c/p\u003e","title":"MoneyDance Mobile App"},{"content":"I love mobile banking apps! They are truly very handy when you are on the go. One major pain point that I gripe about constantly is the need to enter your password each time you use these apps. It really slows you down! I think there is a better way. I wish that my banking app would save my password and give me the option to set a passcode! My phone already has an additional layer of security, a device passcode. What’s the risk right? The banking app could be configured to deny the use of passcode if a device passcode or password is not set. Take that!\nEnabling passcode security on mobile banking apps would enhance security in my opinion. I use unique, complex passwords for everything, and the act of typing in my password would not be feasible without a password manager. Without a password manager people set passwords that are easy to recall which are more susceptible to attacks. By allowing passcodes on your mobile banking app, you would be encouraging folks to set more complex password which in my view is a win for security.\nMy question is why the banks can’t get this?\n","permalink":"https://shane.greaves.casa/posts/2015-11-18-banking-mobile-apps-security/","summary":"\u003cp\u003eI love mobile banking apps! They are truly very handy when you are on the go. One major pain point that I gripe about constantly is the need to enter your password each time you use these apps. It really slows you down! I think there is a better way. I wish that my banking app would save my password and give me the option to set a passcode! My phone already has an additional layer of security, a device passcode. What’s the risk right? The banking app could be configured to deny the use of passcode if a device passcode or password is not set. Take that!\u003c/p\u003e","title":"Banking Mobile App Security"},{"content":"","permalink":"https://shane.greaves.casa/posts/2015-07-14-pluto-really-is-a-planet-probably-the-meaning-of-the-first-close-up-photos/","summary":"","title":"Pluto really is a planet (probably): The meaning of the first close-up photos"},{"content":"Love this!\n","permalink":"https://shane.greaves.casa/posts/2015-05-07-a-comparison-of-gns3-terminal-applications/","summary":"\u003cp\u003eLove this!\u003c/p\u003e","title":"A Comparison of GNS3 Terminal Applications"},{"content":"Network Management\nnmtui Install Gnome Desktop\nyum -y groups install \u0026quot;GNOME Desktop\u0026quot;\nln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target\nstartx\nLinks\nhttp://hasis053341.blogspot.com/2014/07/install-gnome-3-on-top-of-minimal.html\n","permalink":"https://shane.greaves.casa/posts/2015-05-05-centos7-notes/","summary":"\u003cp\u003eNetwork Management\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003enmtui\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eInstall Gnome Desktop\u003cbr\u003e\n\u003ccode\u003eyum -y groups install \u0026quot;GNOME Desktop\u0026quot;\u003c/code\u003e\u003cbr\u003e\n\u003ccode\u003eln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target\u003c/code\u003e\u003cbr\u003e\n\u003ccode\u003estartx\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eLinks\u003cbr\u003e\n\u003ca href=\"http://hasis053341.blogspot.com/2014/07/install-gnome-3-on-top-of-minimal.html\"\u003ehttp://hasis053341.blogspot.com/2014/07/install-gnome-3-on-top-of-minimal.html\u003c/a\u003e\u003c/p\u003e","title":"CentOS7 Notes"},{"content":"I’ve read somewhere that GNS3 runs better on Linux and I had some spare cycles on a Hyper-V host. I configured a VM with 16GB of RAM and I was able to get GNS3 up and running on Ubuntu 14.1 using the steps I will be documenting below.\nSince we will be installing from the source files from the git repository on Github.com, you will need to install git:\nsudo apt-get install git\nInstall Dynamips:\nInstall the Dynamips dependencies if they have not already been installed:\nsudo apt-get install libelf-dev uuid-dev libpcap0.8-dev\nDownload the source files to your system. I downloaded mine to the Public folder in my home folder.\nsudo git clone https://github.com/GNS3/dynamips.git cd dynamips mkdir build cd build cmake .. sudo make install Install Gns3-Server:\nInstall the dependencies if they have not already been installed:\nsudo apt-get install python3-setuptools python3-zmq python3-netifaces\nDownload the source to your system.\nsudo git clone https://github.com/GNS3/gns3-server.git cd gns3-server sudo python3 setup.py install gns3server Install Gns3-Gui:\nInstall Dependencies\nsudo apt-get install python3-setuptools python3-pyqt4\nGet source files and build:\nsudo git clone https://github.com/GNS3/gns3-gui.git cd gns3-gui sudo python3 setup.py install gns3\nYou can create a desktop shortcut to gns3-gui. Configure gns3-gui to start up gns3-server and dynamips when gns3-gui is launched.\nI have just started getting into GNS3 and all I can say is that the 1.x version is amazing. I much rather work on GNS3 than Packet Tracer.\n","permalink":"https://shane.greaves.casa/posts/2014-12-13-gns3-install-from-git/","summary":"\u003cp\u003eI’ve read somewhere that GNS3 runs better on Linux and I had some spare cycles on a Hyper-V host. I configured a VM with 16GB of RAM and I was able to get GNS3 up and running on Ubuntu 14.1 using the steps I will be documenting below.\u003c/p\u003e\n\u003cp\u003eSince we will be installing from the source files from the git repository on Github.com, you will need to install git:\u003cbr\u003e\n\u003ccode\u003esudo apt-get install git\u003c/code\u003e\u003c/p\u003e","title":"GNS3 Install from Git"},{"content":"Even though the wizard warned me about placing WDS \u0026quot;RemoteInstall\u0026quot; folder on the System Volume, I went ahead and did it anyways. How hard can it be to change location? After Getting WDS working I needed some space to install some more images. I created a 100GB SCSI VHDX volume and added it to my WDS server as Volume E.\nwdsutil /Uninitialize-Server\nwdsutil /Initialize-Server /REMINST:\u0026quot;E:\\RemoteInstall\u0026quot;\nSo next time I disobey the wizard, my quick reminder of the steps to move the remote install folder to a new volume:\nReference:\nhttps://social.technet.microsoft.com/forums/windowsserver/en-US/d68f86bb-319e-4613-a5fe-7090eb481641/wds-changing-the-default-remote-installation-folder\n","permalink":"https://shane.greaves.casa/posts/2014-11-28-windows-deployment-services-moving-rem-install-folder/","summary":"\u003cp\u003e\u003ccode\u003eEven though the wizard warned me about placing WDS \u0026quot;RemoteInstall\u0026quot; folder on the System Volume, I went ahead and did it anyways. How hard can it be to change location? \u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eAfter Getting WDS working I needed some space to install some more images. I created a 100GB SCSI VHDX volume and added it to my WDS server as Volume E.\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ewdsutil /Uninitialize-Server\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ewdsutil /Initialize-Server /REMINST:\u0026quot;E:\\RemoteInstall\u0026quot;\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSo next time I disobey the wizard, my quick reminder of the steps to move the remote install folder to a new volume:\u003c/p\u003e","title":"Windows Deployment Services: Moving REM Install Folder"},{"content":"On the “System Authentication Servers” page in pfsense the example listed to add an Extended Query “Example: CN=Groupname,OU=MyGroups,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com” was not working for me.\nThis setting is required to authenticated only members of an ADS group.\nWorked nicely once I appended “memberOf=”.\nLevel: Entire Subtree (but this can probably work at one level too)\nBase DN: DC=domain,DC=local\nContainers: DC=domain,DC=local\nExtended Query (checked): memberOf=CN=VPNgroup,OU=Groups,DC=domain,DC=local\nKudos to BloodyIron!\nReference\n","permalink":"https://shane.greaves.casa/posts/2014-11-18-openvpn-active-directory-auth-on-pfsense/","summary":"\u003cp\u003eOn the “System Authentication Servers” page in pfsense the example listed to add an Extended Query “Example: CN=Groupname,OU=MyGroups,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com” was not working for me.\u003c/p\u003e\n\u003cp\u003eThis setting is required to authenticated only members of an ADS group.\u003c/p\u003e\n\u003cp\u003eWorked nicely once I appended “memberOf=”.\u003c/p\u003e\n\u003cp\u003eLevel: Entire Subtree (but this can probably work at one level too)\u003cbr\u003e\nBase DN: DC=domain,DC=local\u003cbr\u003e\nContainers: DC=domain,DC=local\u003cbr\u003e\nExtended Query (checked): \u003cstrong\u003ememberOf\u003c/strong\u003e=CN=VPNgroup,OU=Groups,DC=domain,DC=local\u003c/p\u003e\n\u003cp\u003eKudos to \u003ca href=\"https://forum.pfsense.org/index.php?action=profile;u=240525\" title=\"View the profile of BloodyIron\"\u003eBloodyIron\u003c/a\u003e!\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://forum.pfsense.org/index.php?topic=69354.30\" title=\"pfsense forum\"\u003eReference\u003c/a\u003e\u003c/p\u003e","title":"OPENVPN, Active Directory Auth on Pfsense"},{"content":"I’ve had DD-WRT on my home router for awhile. DD-WRT works well but I want to setup some VLANS to play with some LAB configuration and the build of DD-WRT did not have the VLAN GUI. I had no success configuring this on the command line (could totally be me).\nI always wanted to try OpenWRT but I have had zero success so far loading it to any hardware. I came across this video on Youtube:\nThe VLAN support got me really excited!\nI spent several hours trying to load OpenWRT onto the RT-N13U (worst router ever) using the ASUS tool and for the strangest reason it just would not work!\nhttp://www.youtube.com/watch?v=HIoQ5Qd11pU\nLuckily, as I was about to give up, I came across some comments on Youtube that VirtualBox is the culprit. The networking that VirtualBox installs creates some conflicts. I tried the install on another computer with success!!\nOnto my labs…\n","permalink":"https://shane.greaves.casa/posts/2014-11-11-openwrt-install-on-asus-rt-n13u/","summary":"\u003cp\u003eI’ve had DD-WRT on my home router for awhile. DD-WRT works well but I want to setup some VLANS to play with some LAB configuration and the build of DD-WRT did not have the VLAN GUI. I had no success configuring this on the command line (could totally be me).\u003c/p\u003e\n\u003cp\u003eI always wanted to try OpenWRT but I have had zero success so far loading it to any hardware. I came across this video on Youtube:\u003c/p\u003e","title":"OpenWRT Install on Asus RT-N13U"},{"content":"IPv4 Address Class\nClass A: 1-126 Class B: 128-191 Class C: 192-223 Private IPv4 Address Space\n10.0.0.0 – 10.255.255.255 172.16.0.0 – 172.31.255.255 192.168.0.0 – 192.168.255.255 ","permalink":"https://shane.greaves.casa/posts/2014-11-09-networking-cheatsheet/","summary":"\u003cp\u003eIPv4 Address Class\u003c/p\u003e\n\u003chr\u003e\n\u003col\u003e\n\u003cli\u003eClass A: 1-126\u003c/li\u003e\n\u003cli\u003eClass B: 128-191\u003c/li\u003e\n\u003cli\u003eClass C: 192-223\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003ePrivate IPv4 Address Space\u003c/p\u003e\n\u003chr\u003e\n\u003col\u003e\n\u003cli\u003e10.0.0.0 – 10.255.255.255\u003c/li\u003e\n\u003cli\u003e172.16.0.0 – 172.31.255.255\u003c/li\u003e\n\u003cli\u003e192.168.0.0 – 192.168.255.255\u003c/li\u003e\n\u003c/ol\u003e","title":"Networking CheatSheet"},{"content":"Operating Systems are tools in a toolbox in my view and over the years I have been reaching for Debian because it is a quick way to get things done. I especially love the Network Installation, mostly because I hate burning CDs :-). Net install ISO are under 300 Megs and coupled with PXE boot, this is a quick way to get a desktop up and running.\nDownload your netinstall image Boot-Up and Install the base system Select Additional packages Configure system as required Once the base system has been installed, all additional packages are download from the repositories and install. If you have a slower connection NetInstall would be very painful (slow).\nUsually I’d only install the system utilities and SSH server. I rarely install a Desktop Environment (GUI).\n","permalink":"https://shane.greaves.casa/posts/2014-11-09-debian-netinstall-notes/","summary":"\u003cp\u003eOperating Systems are tools in a toolbox in my view and over the years I have been reaching for Debian because it is a quick way to get things done. I especially love the Network Installation, mostly because I hate burning CDs :-). Net install ISO are under 300 Megs and coupled with PXE boot, this is a quick way to get a desktop up and running.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eDownload your \u003ca href=\"https://www.debian.org/CD/netinst/\" title=\"Debian Netinstall Download\"\u003enetinstall\u003c/a\u003e image\u003c/li\u003e\n\u003cli\u003eBoot-Up and Install the base system\u003c/li\u003e\n\u003cli\u003eSelect Additional packages\u003c/li\u003e\n\u003cli\u003eConfigure system as required\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eOnce the base system has been installed, all additional packages are download from the repositories and install. If you have a slower connection NetInstall would be very painful (slow).\u003c/p\u003e","title":"Debian NetInstall Notes"},{"content":"VirtualBox is a viable LAB option for Certification study. Personally I would prefer to run Hyper-V or XENServer but those solutions are a bit resources heavy for a home LAB. VirtualBox is prefect for older aging hardware.\n========= Install VirtualBox ============\nOn Debian Wheezy I learnt the hard way that the packages in the distro repo are dinosaurs, which I could not get to work with PHPVirtualBox. I installed VirtualBox from the Oracle repo.\nPHPVirtualBox did not work with VirtualBox 4.X I had to downgrade to VirtualBox 4.2\nDebian-based Linux distributions Add one of the following lines according to your distribution to your /etc/apt/sources.list :\ndeb http://download.virtualbox.org/virtualbox/debian wheezy contrib The Oracle public key for apt-secure can be downloaded \u0026lt;a href=\u0026#34;https://www.virtualbox.org/download/oracle_vbox.asc\u0026#34;\u0026gt;here\u0026lt;/a\u0026gt;. You can add this key with apt-key add oracle_vbox.asc or combine downloading and registering:\nwget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add - The key fingerprint is\n7B0F AB3A 13B9 0743 5925 D9C9 5442 2A4B 98AB 5139 Oracle Corporation (VirtualBox archive signing key) \u0026lt;info@virtualbox.org\u0026gt; To install VirtualBox, do\nsudo apt-get update sudo apt-get install virtualbox-4.2.18 Ensure DKMS is installed\napt-get install dkms Install VirtualBox Extension Pack:\n========= Install PHPVirtualBox ============\nYou could manage VirtualBox using the CLI which would get tedious very quickly. The PHPVBOX GUI is a neater way to manage VMS.\n========= Enable Bridging ============\nThe installation of VirtualBox on Linux used to be a major pain point for me. I was never able to get bridging to work until recently.\nVBoxManage modifyvm vmname --bridgeadapter1 ethX\nor\nVBoxManage modifyvm \u0026quot;vm name\u0026quot; --bridgeadapter1 ethX\n========= References ============\nPHPVirtualBox Virtualbox.org ","permalink":"https://shane.greaves.casa/posts/2014-11-09-virtualbox-headless-on-debian-notes/","summary":"\u003cp\u003eVirtualBox is a viable LAB option for Certification study. Personally I would prefer to run Hyper-V or XENServer but those solutions are a bit resources heavy for a home LAB. VirtualBox is prefect for older aging hardware.\u003c/p\u003e\n\u003cp\u003e========= Install VirtualBox ============\u003c/p\u003e\n\u003cp\u003eOn Debian Wheezy I learnt the hard way that the packages in the distro repo are dinosaurs, which I could not get to work with PHPVirtualBox. I installed VirtualBox from the Oracle repo.\u003c/p\u003e","title":"VirtualBox Headless on Debian Notes"},{"content":"I’m having some issues with deploying Dell Optiplex 3011 Windows images using Windows deployment services. What should be a quick win has turned into an head banging exercise! From the onset I was very sceptical about these systems so I’m not surprised that it has been such a pain.\nhttp://www.youtube.com/watch?v=Mkl8kCwvpm0\nI am using WDS (2012 Server) with the Windows 7 Boot image. I have injected the drivers for the realtek network card and for some reason the drivers will not load in WinPe.\nI’m still banging my head…\n[SOLVED]\nAfter two days of trying to get this to work with the Windows 7 Boot.wim I finally gave up and added Windows 8 Boot.wim to WDS. Network drivers loaded and I was good to go!\nLet the bit stream begin!\nI still hate this system.\n","permalink":"https://shane.greaves.casa/posts/2014-08-06-things-that-make-you-go-hmm-dell-optiplex-3011-winpe/","summary":"\u003cp\u003eI’m having some issues with deploying Dell Optiplex 3011 Windows images using Windows deployment services. What should be a quick win has turned into an head banging exercise! From the onset I was very sceptical about these systems so I’m not surprised that it has been such a pain.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.youtube.com/watch?v=Mkl8kCwvpm0\"\u003ehttp://www.youtube.com/watch?v=Mkl8kCwvpm0\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eI am using WDS (2012 Server) with the Windows 7 Boot image. I have injected the drivers for the realtek network card and for some reason the drivers will not load in WinPe.\u003c/p\u003e","title":"Things that make you go Hmm: Dell Optiplex 3011 \u0026amp;\u0026amp; WinPe"},{"content":" I can’t keep up with all the passwords! There are too many passwords for me to manage, I used to find myself unable to access systems. Passwords are especially annoying on mobile devices with the tiny keyboard. I wanted a solution that works on both the Desktop and Mobile devices.\nLastpass is a password management option that I have used in the past. They have a free service but you have to pay to use there mobile apps which is not bad however I never liked the user interface on their Android App.\nI stumbled upon this solution using KeePass which I wanted to document and share. This is a robust method and I wanted this guide to be newbie friendly. Let me know if you have any feedback.\nWhat is required?\nKeePass\n“KeePass is a free open source password manager, which helps you to manage your passwords in a secure way. You can put all your passwords in one database, which is locked with one master key or a key file. So you only have to remember one single master password or select the key file to unlock the whole database. The databases are encrypted using the best and most secure encryption algorithms currently known (AES and Twofish).” – http://keepass.info/\nTo share your password database between devices you can use an on-line cloud service such as Dropbox. You would save your password database file on Dropbox and each device would access this file. Changes would be synced between devices in this way. I would like to note that this part is optional. I figure many of you would be hesitant to store you password file on any cloud service. However since this file is encrypted I suspect this is no bigger risk than saving your secrets on Lastpass.com. Without this you would have to copy your password database file between your devices which I could see becoming a nightmare!\nEnsure that you use a secure password. Even though the password database is encrypted your secrets/passwords are as safe as the password you use. Do not use this password any place else. It is important that you only use this password with Keepass. If you lose this password you will not be able to access your secrets.\nKeepass allows you to set complex password. Since you will no longer have to try and remember your password you can make them as complex as you would like.\nDesktop App\nInstall Dropbox Install Keepass Windows (Linux user, package management tools) Create Password DB Set KeePass DataBase settings Update your passwords Create new Database Select your Dropbox folder and save in a folder. Create a new folder if required. Name your database file. Ensure that you set a secure database password. You should only use this password with keepass. If you forget this password you will not be able to access your secrets. Update your database with all your passwords. To use you copy user name and password and then paste in your apps and browser forms. Mobile Apps\nAndroid: Keepass2Android\niOS: MiniKeePass\nBrowser Auto login (TBA)\n","permalink":"https://shane.greaves.casa/posts/2014-07-30-password-management-guide/","summary":"\u003cp\u003e\u003ca href=\"https://shane.greaves.casa/posts/wp-content/uploads/2014/07/2014-07-30_11-18-23.png\"\u003e  \u003c/a\u003eI can’t keep up with all the passwords! There are too many passwords for me to manage, I used to find myself unable to access systems. Passwords are especially annoying on mobile devices with the tiny keyboard. I wanted a solution that works on both the Desktop and Mobile devices.\u003c/p\u003e\n\u003cp\u003eLastpass is a password management option that I have used in the past. They have a free service but you have to pay to use there mobile apps which is not bad however I never liked the user interface on their Android App.\u003c/p\u003e","title":"Password Management Guide"},{"content":"Course outline for 70-410, Installing and Configuring Windows Server 2012.\nInstall Servers: Plan for a server installation; plan for server roles; plan for a server upgrade; install Server Core; optimize resource utilization by using Features on Demand; migrate roles from previous versions of Windows Server Configure servers Configure Server Core; Delegate administration; 3. Add and remove features in offline images; 4. Deploy roles on remote servers; 5. Convert Server Core to/from full GUI; 6. Configure services; 7. Configure NIC teaming\n1. Configure Server Core\nRename Computer: Rename-Computer Hostname Assign IP Address: New-NetIPAddress -ipaddress 192.168.1.10 -InterfaceAlias “Ethernet” -DefaultGateWay 192.168.1.1 AddressFamily IPv4 -PrefixLength 24 Configure DNS: Set-DnsClientServerAddress -intefaceAlias “Ethernet” -ServerAddresses 192.168.1.10 Join Domain: add-computer -DomainName grimm.lab Restart Computer: Restart-Computer 5. Convert Server Core to/from full GUI\nhttp://www.youtube.com/watch?v=nZ0v8vBppvA\nExam Objectives\nhttp://technet.microsoft.com/en-us/virtuallabs/dn336436.aspx\n","permalink":"https://shane.greaves.casa/posts/2014-01-25-70-410-installing-and-configuring-windows-server-2012/","summary":"\u003cp\u003eCourse outline for 70-410, Installing and Configuring Windows Server 2012.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInstall Servers:\u003c/li\u003e\n\u003c/ul\u003e\n\u003col\u003e\n\u003cli\u003ePlan for a server installation; plan for server roles; plan for a server upgrade; install Server Core; optimize resource utilization by using Features on Demand; migrate roles from previous versions of Windows Server\u003c/li\u003e\n\u003c/ol\u003e\n\u003cul\u003e\n\u003cli\u003eConfigure servers\u003c/li\u003e\n\u003c/ul\u003e\n\u003col\u003e\n\u003cli\u003eConfigure Server Core;\u003c/li\u003e\n\u003cli\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eDelegate administration;\n3. Add and remove features in offline images;\n4. Deploy roles on remote servers;\n5. Convert Server Core to/from full GUI;\n6. Configure services;\n7. Configure NIC teaming\u003c/p\u003e","title":"70-410: Installing and Configuring Windows Server 2012"},{"content":"This is where the morning ended (Tuesday, 3 December 2013):\n15. Tessanne Chin – Redemption Song (The Voice Performance)\n17. Cole Vosbury – Rich Girl (The Voice Performance)\n20. Jacquie Lee – Cry Baby (The Voice Performance)\n23. Cole Vosbury – Better Man (The Voice Performance)\n25. Will Champlin – A Change Is Gonna Come (The Voice Performance)\n27. Will Champlin – Hey Brother (The Voice Performance)\n33. Tessanne Chin – Unconditionally (The Voice Performance)\n36. James Wolpert – I’d Do Anything For Love (But I Won’t Do That) [The Voice Performance]\n39. Matthew Schuler – When a Man Loves a Woman (The Voice Performance)\n45. Matthew Schuler – Story of My Life (The Voice Performance)\n46. Jacquie Lee – The Voice Within (The Voice Performance)\n48. James Wolpert – Fell In Love With a Girl (The Voice Performance)\nSeems like James and Matthew should be most concerned.\n","permalink":"https://shane.greaves.casa/posts/2013-12-03-nbc-voice-top6-itunes-chart-results/","summary":"\u003cp\u003eThis is where the morning ended (Tuesday, 3 December 2013):\u003c/p\u003e\n\u003cp\u003e15. Tessanne Chin – Redemption Song (The Voice Performance)\u003cbr\u003e\n17. Cole Vosbury – Rich Girl (The Voice Performance)\u003cbr\u003e\n20. Jacquie Lee – Cry Baby (The Voice Performance)\u003cbr\u003e\n23. Cole Vosbury – Better Man (The Voice Performance)\u003cbr\u003e\n25. Will Champlin – A Change Is Gonna Come (The Voice Performance)\u003cbr\u003e\n27. Will Champlin – Hey Brother (The Voice Performance)\u003cbr\u003e\n33. Tessanne Chin – Unconditionally (The Voice Performance)\u003cbr\u003e\n36. James Wolpert – I’d Do Anything For Love (But I Won’t Do That) [The Voice Performance]\u003cbr\u003e\n39. Matthew Schuler – When a Man Loves a Woman (The Voice Performance)\u003cbr\u003e\n45. Matthew Schuler – Story of My Life (The Voice Performance)\u003cbr\u003e\n46. Jacquie Lee – The Voice Within (The Voice Performance)\u003cbr\u003e\n48. James Wolpert – Fell In Love With a Girl (The Voice Performance)\u003c/p\u003e","title":"NBC Voice Top6 iTunes Chart Results"},{"content":"[youtube=http://www.youtube.com/watch?v=Z6Wk9X1gTOM]\nThis one seems designed to keep our girl @Tessanne on the show. Let us not wait until the last minute to get up to speed on this!\n@Tessanne has quite the twitter army so everyone should get ready to save her on Tuesday night if she is in danger in the bottom three. Go out and preach folks! Get your neighbours to #Tweet when if the signal is given!\nTessanne’s Twitter Army I’m ready to save @Tessanne\n","permalink":"https://shane.greaves.casa/posts/2013-11-11-the-voice-instant-save-tessanne-chin/","summary":"\u003cp\u003e[youtube=http://www.youtube.com/watch?v=Z6Wk9X1gTOM]\u003c/p\u003e\n\u003cp\u003eThis one seems designed to keep our girl @Tessanne on the show. Let us not wait until the last minute to get up to speed on this!\u003c/p\u003e\n\u003cp\u003e@Tessanne has quite the twitter army so everyone should get ready to save her on Tuesday night if she is in danger in the bottom three. Go out and preach folks! Get your neighbours to #Tweet when if the signal is given!\u003c/p\u003e","title":"The Voice \u0026#8211; Instant Save | Tessanne Chin"},{"content":"I have spent ages on this so I am really happy that I got this to work. I was unable to find much documentation on the interwebs on this so I wanted to document this in case someone runs into the same problem I did.\nSupersonic is a version of Subsonic with restrictions removed. Subsonic has a 30 day limit on mobile app use. Key feature to me. I wanted to be able to play much in jukebox mode, using my Android device as the remote. The speakers are connected to the sound card of my NAS.\nThis forum post was really useful. You have to get the java name of your audio device.\nYou have to save the code below as audioDevList.java.\nimport java.io.*; import javax.sound.sampled.*;\npublic class audioDevList{\npublic static void main(String args[]){\n//Get and display a list of\n// available mixers.\nMixer.Info[] mixerInfo =\nAudioSystem.getMixerInfo();\nSystem.out.println(“Available mixers:”);\nfor(int cnt = 0; cnt \u0026lt; mixerInfo.length;\ncnt++){\nSystem.out.println(mixerInfo[cnt].\ngetName());\n}//end for loop\n}\n}\njavac audioDevList.java\nThen java audioDevList\nMy Audio Devices were:\nAvailable mixers:\nPulseAudio Mixer\nIntel [default]\nIntel [plughw:0,0] Intel [plughw:0,2] SAA7134 [plughw:1,0] Port Intel [hw:0] Port SAA7134 [hw:1] Edit /usr/bin/supersonic:\nYou want to sent the SUPERSONIC_SOUNDCARD_DEVICE value to your audio device using trail and error.\nRestart Subsonic and you should be good to go.\nNow for some The 20/20 Experience 2\u0026hellip;\n","permalink":"https://shane.greaves.casa/posts/2013-10-18-supersonic-subsonic-jukebox-mode-config/","summary":"\u003cp\u003eI have spent ages on this so I am really happy that I got this to work. I was unable to find much documentation on the interwebs on this so I wanted to document this in case someone runs into the same problem I did.\u003c/p\u003e\n\u003cp\u003eSupersonic is a version of Subsonic with restrictions removed. Subsonic has a 30 day limit on mobile app use. Key feature to me. I wanted to be able to play much in jukebox mode, using my Android device as the remote. The speakers are connected to the sound card of my NAS.\u003c/p\u003e","title":"Supersonic (Subsonic) Jukebox Mode Config"},{"content":"My iPXE setup is coming along just lovely, and it is working out just fine. My goal is to avoid scurrying around like a headless chicken looking for USB flash drives and optical media whenever I have to work on someone’s system. This part usually takes the most out of me when I am fixing a system as I can never seem to find install media, usb drives and my tools. I sure wish I could network boot my tools! I’m trying to become more organized in that regard :-).\nI want a menu with all my utilities, which just allows me to network boot the thing and be done with it! I don’t want to ever have to go looking for Windows XP, Windows 7 or Ubuntu install media. I just want to load them up over the network. I also want to play some more with iSCSI, be able to boot Ubuntu and Openelec from my NAS.\nI found this preconfigured iPXE menu project on github and I was able to install and get this running. The instructions are pretty straight forward, in my case I had to EMBED the bootstrap script in my ‘undionly.kpxe’. I am still in the process of commenting out the items I don’t need but it is a good look and I can’t wait to show this off to my more nerdy friends who I sure will not be impressed :-).\nI think I will have to get a Gigabit router 🙂 and a better motherboard for my NAS.\n","permalink":"https://shane.greaves.casa/posts/2013-08-24-network-boot-menu-setup-with-ipxe/","summary":"\u003cp\u003eMy iPXE setup is coming along just lovely, and it is working out just fine. My goal is to avoid scurrying around like a headless chicken looking for USB flash drives and optical media whenever I have to work on someone’s system. This part usually takes the most out of me when I am fixing a system as I can never seem to find install media, usb drives and my tools. I sure wish I could network boot my tools! I’m trying to become more organized in that regard :-).\u003c/p\u003e","title":"Network Boot Menu setup with iPXE"},{"content":"Network Booting my WinPe image with pxelinux has been an illusive goal of mine. I got it working :-).\nGet iPXE\nI downloaded iPXE into my home folder:\ngit clone git://git.ipxe.org/ipxe.git cd ipxe/src make cp bin/undionly.kpxe /tftproot/ PXE Chainloading\nI have configured my network to chainload iPXE using the “undionly.kpxe” image. I configured my dhcp server (dd-wrt) to point to my tftp server which runs on my NAS. I placed “undionly.kpxe” in the tftp root folder.\nnext-server X.X.X.X; filename \u0026#34;undionly.kpxe\u0026#34;; I used VirtualBox to test by booting from the network, undionly.kpxe is then copied down from the tftp server. Success!\nThings are loopy\nAs per the docs, When the chainloaded iPXE starts up, it will issue a fresh DHCP request and boot whatever the DHCP server hands out. The DHCP server is currently set up to hand out the iPXE image, which means that you will be stuck in an infinite loop: PXE will load iPXE which will load iPXE which will load iPXE which will load iPXE\nI am ok with using the EMBED method to call the script which brings up WinPE. At some point I intend to configure a menu.\niPXE boots from many protocols including HTTP. HTTP boot is amazingly fast! I configure my web folder to \\\\server\\boot\\ and placed all the required files in that location. We are using wimboot to boot winpe so download and place in your web root.\nCopy your Winpe files to the webroot folder and save the code below in a script called winpe.ipxe and save in your webroot folder.\n#!ipxe kernel wimboot initrd bootmgr bootmgr initrd Boot/bcd BCD initrd boot.sdi boot.sdi initrd boot.wim boot.wim boot\nTime to Test\nI booted up iPxe, CTRL B for cli and entered the code below. It was awesome!\ndhcp chain http://server/boot/winpe.ipxe\n","permalink":"https://shane.greaves.casa/posts/2013-08-23-ipxe-winpe-boot/","summary":"\u003cp\u003eNetwork Booting my WinPe image with pxelinux has been an illusive goal of mine. I got it working :-).\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eGet iPXE\u003c/strong\u003e\u003cbr\u003e\nI downloaded iPXE into my home folder:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003egit clone git://git.ipxe.org/ipxe.git\ncd ipxe/src\nmake\ncp bin/undionly.kpxe /tftproot/\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003ePXE Chainloading\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eI have configured my network to chainload iPXE using the “undionly.kpxe” image. I configured my dhcp server (dd-wrt) to point to my tftp server which runs on my NAS. I placed “undionly.kpxe” in the tftp root folder.\u003c/p\u003e","title":"iPXE: WinPe Boot"},{"content":"I have been demystifying Hyper-V in my Lab environment. I have configured a few VMs in an isolated network and I wanted to play with the remote management features from my main system and avoid RDP where possible.\nThe process to get this working was far from simple and Microsoft really needs to remedy this as my last visit was way more fun that this.\nLuckily google came to my aid and led me to “hvremote”. It took me awhile to get this working but eventually I noticed the “10 second guide” and I realized I had missed the step to “allow Anonymous logon remote dcom access”.\nFor my future reference, the steps required for “Client domain, Server Workgroup” section which I am working with:\nServer Create a local account (eg “john”) Use net user /? or Computer Management Server Grant the user access Client Allow Anonymous Logon remote DCOM access Client Set credentials for local account Both Verify configuration for errors Reference\n","permalink":"https://shane.greaves.casa/posts/2013-05-31-hyper-v-remote-management/","summary":"\u003cp\u003eI have been demystifying Hyper-V in my Lab environment. I have configured a few VMs in an isolated network and I wanted to play with the remote management features from my main system and avoid RDP where possible.\u003c/p\u003e\n\u003cp\u003eThe process to get this working was far from simple and Microsoft really needs to remedy this as my last visit was way more fun that this.\u003c/p\u003e\n\u003cp\u003eLuckily google came to my aid and led me \u003ca href=\"http://code.msdn.microsoft.com/windowsdesktop/Hyper-V-Remote-Management-26d127c6\" title=\"hvremote\"\u003eto\u003c/a\u003e “hvremote”. It took me awhile to get this working but eventually I noticed the “10 second guide” and I realized I had missed the step to “allow Anonymous logon remote dcom access”.\u003c/p\u003e","title":"Hyper-V, Remote Management"},{"content":"I am in the process of learning Microsoft Windows Server 2012. I’m a hands on learner for the most part and working with a lab environment always speeds up my learning exponentially. I have been looking for the most practical Lab options. I’m looking for flexibility, I want to be able to practice in an isolated environment at home and at work.\nI am amazed at the amount of Lab options that are available these days. Way back when I was pursuing Microsoft Certified System Engineer certification on Windows 2000 my lab consisted of two broken down computers. I recall that these systems even though they were less than stellar, ran Windows 2000 with Active Directory very well. These systems were AMD K6-2 (remember those?) with 64 MB of memory.\nOne of the options in Windows 7 which excited me was running your OS in a VHD file and this is the first time I am trying this.\nBasically you’ll configure the Windows 2012 evaluation VHD and boot into it and configure Hyper-V. You can then configure other lab Clients in Hyper-V as required.\nDownload Windows Server 2012 DataCenter Evaluation VHD (Not the ISO) Extract VHD from downloaded file Attached VHD in Disk Manager Add Drive Letter of VHD to boot manager ![](http://gravyflex.wordpress.com/wp-includes/js/tinymce/plugins/wpgallery/img/t.gif \u0026ldquo;gallery ids=\u0026ldquo;236,238,237,239,235\u0026quot;\u0026rdquo;)\n","permalink":"https://shane.greaves.casa/posts/2013-05-25-howto-windows-server-12-evaluation-vhd/","summary":"\u003cp\u003eI am in the process of learning Microsoft Windows Server 2012. I’m a hands on learner for the most part and working with a lab environment always speeds up my learning exponentially. I have been looking for the most practical Lab options. I’m looking for flexibility, I want to be able to practice in an isolated environment at home and at work.\u003c/p\u003e\n\u003cp\u003eI am amazed at the amount of Lab options that are available these days. Way back when I was pursuing Microsoft Certified System Engineer certification on Windows 2000 my lab consisted of two broken down computers. I recall that these systems even though they were less than stellar, ran Windows 2000 with Active Directory very well. These systems were AMD K6-2 (remember those?) with 64 MB of memory.\u003c/p\u003e","title":"Howto: Windows Server 12 Evaluation VHD"},{"content":"I have this web server that I manage and from time to time I need to do a system restart. A powershell script might be a quicker way to restart the system.\nFirst however I must configure the system for powershell remote management. I went ahead and installed WinRM 2.0 and Powershell 2.0 on the web server.\nOn the Target 2003 Server:\n1. Install WinRM 2.0 and Windows PowerShell 2.0\n2. Enable-psRemoting\nOn management client:\n1. Enter-psSession MachineName\nReferences\nhttp://blogs.technet.com/b/danstolts/archive/2011/03/07/how-to-install-powershell-on-windows-server-2003-and-enable-remote-powershell-management-all-servers-should-have-this-done.aspx\n","permalink":"https://shane.greaves.casa/posts/2013-05-13-enable-windows-2003-for-powershell-remote-management/","summary":"\u003cp\u003eI have this web server that I manage and from time to time I need to do a system restart. A powershell script might be a quicker way to restart the system.\u003c/p\u003e\n\u003cp\u003eFirst however I must configure the system for powershell remote management. I went ahead and installed WinRM 2.0 and Powershell 2.0 on the web server.\u003c/p\u003e\n\u003cp\u003eOn the Target 2003 Server:\u003cbr\u003e\n1. Install WinRM 2.0 and Windows PowerShell 2.0\u003cbr\u003e\n2. Enable-psRemoting\u003c/p\u003e","title":"Enable Windows 2003 for Powershell Remote Management"},{"content":"I have been using Growl for Windows for a few months and I think it is a very cool application. I use it mostly at home with Sickbeard and Couchpotato. In Sickbeard, when a show is snatched, that is the show has been submitted to your download manager (Transmission in my case) a notification will be sent to growl. When the the download has been completed, a notification will be sent to growl. This is especially useful when I am waiting a particular show to finish downloading.\nOn a Thursday night for example I am often surprised that Scandal starts downloading withing 15 minutes after its network premiere. I can now decide if I want to wait up for the download to finish and I have waited up many times.\nThere are a couple other features I always thought would be cool to have:\nDisk Usage Alerts Managing disk usage is very important as running out of disk space can be quite annoying. Sure, I could use a CRON script to alert by email when disk usage passes a particular threshold but I don’t always pay attention to email.\nNAS Start-up/Shutdown Alert I want to be alerted when my NAS comes online and when it does a graceful shutdown. This would be a killer feature as I hate waiting on the NAS to come online and a growl alert would be very useful. In addition to a growl alert a xbmc OSD alert would be also cool! Just picture a message popping up your TV that says, “NAS Online”.\nI was searching for a quick and dirty way to do this with Python. It took me awhile before I found this Python GNTP library. After doing a pip install gntp on OpenMediaVault and checking out the GNTP documentation I was quickly sending test messages to growl.\nThis is a work in progress and I am still very new to Python but I have three goals which may of may not change:\n1. On NAS start-up, Growl messages – (a.) NAS Online (b.) Disk Usage\n2. CRON Job to check Disk usage every 15 minutes and if disk usage is greater than 80%, Growl message should be sent with the details.\n3. On NAS shutdown, growl messages – (a.) NAS going to sleep\nIf you are going to test this ensure that you use a password. My initial test registration would fail and it was not immediately obvious that the password was the issue.\nNAS Online/Offline Scripts Done\nNAS Disk Usage script NAS Disk Usage Threshold script Work in progress\nCode growlhost.py file\nimport gntp.notifier\ndell = \u0026ldquo;192.168.66.2\u0026rdquo;\nkindle = \u0026ldquo;192.168.66.7\u0026rdquo;\nvpn = \u0026ldquo;192.168.66.40\u0026rdquo;\nhost = vpn #I used to select the host I wanna growl to\ngrowl = gntp.notifier.GrowlNotifier(\napplicationName = \u0026ldquo;Oracle\u0026rdquo;,\nnotifications = [\u0026ldquo;New Updates\u0026rdquo;,\u0026ldquo;New Messages\u0026rdquo;],\ndefaultNotifications = [\u0026ldquo;New Messages\u0026rdquo;],\n#hostname = \u0026ldquo;192.168.1.2\u0026rdquo;, # Defaults to localhost\nhostname = host,\npassword = \u0026ldquo;abc123\u0026rdquo; # Defaults to a blank password\n)\ndef gntpSend(message):\ngrowl.notify(\nnoteType = \u0026ldquo;New Messages\u0026rdquo;,\ntitle = \u0026ldquo;NAS Info\u0026rdquo;,\ndescription = message,\nicon = \u0026ldquo;http://example.com/icon.png\u0026quot;,\nsticky = False,\npriority = 1,\n)\nHostup.py\nimport gntp.notifier import growlhosts\nmessage = \u0026ldquo;Oracle Online\u0026rdquo;\ngrowlhosts.growl.register()\ngrowlhosts.gntpSend(message)\nHostDown.py\nimport gntp.notifier import growlhosts\nmessage = \u0026ldquo;Oracle Going To Sleep\u0026rdquo;\ngrowlhosts.growl.register()\ngrowlhosts.gntpSend(message)\n","permalink":"https://shane.greaves.casa/posts/2013-02-05-gntp-growl-alerts-from-my-nas/","summary":"\u003cp\u003eI have been using Growl for Windows for a few months and I think it is a very cool application. I use it mostly at home with Sickbeard and Couchpotato. In Sickbeard, when a show is snatched, that is the show has been submitted to your download manager (Transmission in my case) a notification will be sent to growl. When the the download has been completed, a notification will be sent to growl. This is especially useful when I am waiting a particular show to finish downloading.\u003c/p\u003e","title":"GNTP: Growl Alerts from my NAS"},{"content":"I’d given up on getting DD-WRT flashed on this router. With the help of one of my colleagues at work we were able to get DD-WRT flashed!\nOmar Davis you rock!\nWhat got it to Flash Success came with these work arounds:\n1. Disable Windows firewall on the command line: netsh firewall set opmode disable\n2. Using the ASUS firmware update tool you’ll have to place the .trx file on the root of the C: drive.\nMultiple WLANs The goal here is to have two WLANs. The first one is my secured home network (WPA2) and the second is a unsecured guest network with restrictions. I made use of the extensive documentation here. The link has several firewall rules that are useful. The only one I am currently using is preventing access from the guest network to my home network. I’ll perhaps enable VPN access from the guess network to my home network at some point.\nI don’t think my neighbor knows that I can tell when he’s using my wifi. I don’t mind at all but torrenting is a no no so I’ll have to put some additional access restrictions on the guest network :-).\nVPN – Road Warrior I’ve configured the PPTP VPN server to allow road warrior access to my Home network. [Completed]\npptp settings\nVPN – OpenVPN Client The holy grail is to be able to connect to my VPN provider via openvpn and route selected traffic across that interface. [in-progress]\n","permalink":"https://shane.greaves.casa/posts/2013-01-01-asus-rt-n13u-and-dd-wrt/","summary":"\u003cp\u003eI’d given up on getting DD-WRT flashed on this router. With the help of one of my colleagues at work we were able to get DD-WRT flashed!\u003c/p\u003e\n\u003cp\u003eOmar Davis you rock!\u003c/p\u003e\n\u003ch3 id=\"what-got-it-to-flash\"\u003eWhat got it to Flash\u003c/h3\u003e\n\u003cp\u003eSuccess came with these work arounds:\u003cbr\u003e\n1. Disable Windows firewall on the command line: netsh firewall set opmode disable\u003cbr\u003e\n2. Using the ASUS firmware update tool you’ll have to place the .trx file on the root of the C: drive.\u003c/p\u003e","title":"ASUS RT-N13U and DD-WRT"},{"content":"So someone sent me the link to the tax amnesty website and mostly out of curiosity I checked my drivers licence. I have no outstanding tickets on there so why should I worry? I am an upstanding citizen of Jamaica who believes in doing the responsible thing of going to court and pleading guilty with explanation and hoping the judge will fine me less than the amount that is on the ticket. Imagine my shock and utter dismay when I looked at the list and saw every ticket I have ever gotten on there! OMG! The government is evil! (This you already know, right?)\nI felt like a perp! like I should be hiding from the coppers. I thought to myself, “Be silent dude, before someone calls down Babylon on you”. I soon heard other persons hollering about the same issue and the government’s admission that the system was a pile of horse manure and that it was full of errors was comforting. I soon put the issue to the back of my mind because I know I don’t have any outstanding tickets so once the government cleans up the list I would not be on there. Boy was I wrong…\nAfter seeing that scary ad on TV with the guy behind bars looking like he was about to be molested I decided to take another look at the tax amnesty website. Would you believe that it still showed that I have outstanding tickets? Your shocked right? I know your not because we know how incompetent our government is and this incompetence is bipartisan!\nI got the first ticket on Norman Manly Blvd in Negril in 2006. I was on my way to work one morning when I got this 5 grand ticket for speeding (another story). I went to court and pleaded guilty with explanation and was fined 2 grand. I thought I was rather lucky actually so I payed the fine and dashed back to work.\nFor the second ticket I was pulled over on my way to Kingston somewhere in Trelawny. I was driving a rented car and I did not have a valid fitness in the car. The owner of the car told me he had the fitness in the office. I had to drive to Falmouth to produce the fitness in court. I waited half the morning for my name to be called. I showed the fitness and the case was dismissed. The government sure knows how to waste our time.\nThe last ticket I got I was on my way back from Kingston via the South Coast. Got pulled over for speeding in Lacovia and I was driving like a bat out of hell! For reasons I can’t recall I forgot the date to pay the ticket at the tax office. I had to go to court. I drove all the way to Black River for court. Took my niece with me and we made a road trip out of it. When I got to Black River I was told that court was in Santa Cruz. I hauled my ass to Santa and I missed my name because the universe decided to piss on me that day as the judge thought it would be funny to start calling names from Z-A. I missed my name! I have to now get a new court date!! What’s worst I am told that I can only get the date in Black River. So back I went to Black River to get me a new court date and then made my way back to Montego Bay. On the new court date I went to Santa Cruz and got there so early. Waited on my name to be called, pleaded guilty, paid my fine and dashed back to Montego Bay. At this point I’d have enough of St. Elizabeth anyways.\nSo as you can see all three tickets where dealt with correctly. At this point what are my options to make this go away other than to just pay the $14,500.00 to make this go away? I know someone that actually did this. Seriously I got the impression based on that ad that the government was promising us a jail rape if we are caught with outstanding tickets. Fun and joke aside because this is a serious matter and I’m a serious guy, the process to resolve this involves lots of lines and bucking heads with bureaucratic paper pushers. Let us just hope that my friends will have some bail money for me when Babylon hauls my ass to jail!\n","permalink":"https://shane.greaves.casa/posts/2012-12-31-tax-amnesty-extortion/","summary":"\u003cp\u003eSo someone sent me the link to the tax amnesty website and mostly out of curiosity I checked my drivers licence. I have no outstanding tickets on there so why should I worry? I am an upstanding citizen of Jamaica who believes in doing the responsible thing of going to court and pleading guilty with explanation and hoping the judge will fine me less than the amount that is on the ticket. Imagine my shock and utter dismay when I looked at the list and saw every ticket I have ever gotten on there! OMG! The government is evil! (This you already know, right?)\u003c/p\u003e","title":"Tax Amnesty Extortion"},{"content":"I grabbed this card from my local computer shop without doing any research. I was very excited and eager to get my home NAS up and running. I was soon disappointed after installing and configuring one hard drive. I was using freeNas then and the write speeds where terribly slow. This was one of the main reasons why I started looking for another NAS solution other than freeNAS.\nWhen I migrated to OpenMediaVault this card seemed to have much better Linux support. The I/O speeds were very decent and in spite of this this card always seemed unstable and even though I kept having unstable behavior with hard drives I never made the connection that this card was the root cause. If I had any clue that this was the case I perhaps would not have been so eager with my move to RAID and would have delayed my migration until after I had found a reliable replacement. Alas, you lose data to learn and I lost over 500GB worth of movies and tv shows.\nI am at the point now where I want to toss this card! This time I want to make sure I get a pretty decent card, without breaking the bank, so I am making sure I do my research. I’ll most likely have to order one online because I am pretty sure I will not be able to get a decent one locally for a reasonable price and I hate overpaying.\nUntil then I thought why not upgrade the card’s firmware. I was stumbling across the web when I came across the fact that you can Flash the card with the IDE BIOS version of the firmware which removes all the RAID functionality. I don’t need the RAID features on this card as I will be using software RAID. This flash will also be the latest BIOS version. I had thought for some reason that the IDE BIOS was ment for cards with IDE connectors but it seems I was wrong about this. I have nothing to lose so I downloaded the firmware and the windows update tool. I’ll be updating the firmware from a winpe usb boot disk. Let’s see how this one works out.\nFor my future reference when I forget:\n1. SIL3114 4/22/2008 – 5.5.0.0\n2. Windows Flash tool\n","permalink":"https://shane.greaves.casa/posts/2012-12-18-sil3114-sata-card-bios-update/","summary":"\u003cp\u003eI grabbed this card from my local computer shop without doing any research. I was very excited and eager to get my home NAS up and running. I was soon disappointed after installing and configuring one hard drive. I was using freeNas then and the write speeds where terribly slow. This was one of the main reasons why I started looking for another NAS solution other than freeNAS.\u003c/p\u003e\n\u003cp\u003eWhen I migrated to OpenMediaVault this card seemed to have much better Linux support. The I/O speeds were very decent and in spite of this this card always seemed unstable and even though I kept having unstable behavior with hard drives I never made the connection that this card was the root cause. If I had any clue that this was the case I perhaps would not have been so eager with my move to RAID and would have delayed my migration until after I had found a reliable replacement. Alas, you lose data to learn and I lost over 500GB worth of movies and tv shows.\u003c/p\u003e","title":"SIL3114 SATA card BIOS update"},{"content":" Check raid status\ncat /proc/mdstat\nor\nwatch cat /proc/mdstat Scan configuration\nmdadm --detail --scan To Remove a disk from the Array, you’ll have to fail then remove the drive.\nmdadm --fail /dev/mdX /dev/sdX\nmdadm --remove /dev/mdX /dev/sdX To add a disk to the array:\nmdadm --add /dev/mdX /dev/sdX Turn bitmap on\nmdadm --grow --bitmap=internal /dev/mdX Turn off bitmap\nmdadm --grow --bitmap=none /dev/mdX Speed up recovery\necho 50000 \u0026gt; /proc/sys/dev/raid/speed_limit_min Resources\nhttp://www.ducea.com/2009/03/08/mdadm-cheat-sheet/ mdadm man pages ","permalink":"https://shane.greaves.casa/posts/2012-12-16-mdadm-cheatsheet/","summary":"\u003col\u003e\n\u003cli\u003eCheck raid status\u003cbr\u003e\n\u003ccode\u003ecat /proc/mdstat\u003c/code\u003e\u003cbr\u003e\nor\u003cbr\u003e\n\u003ccode\u003ewatch cat /proc/mdstat\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eScan configuration\u003cbr\u003e\n\u003ccode\u003emdadm --detail --scan\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eTo Remove a disk from the Array, you’ll have to fail then remove the drive.\u003cbr\u003e\n\u003ccode\u003emdadm --fail /dev/mdX /dev/sdX\u003c/code\u003e\u003cbr\u003e\n\u003ccode\u003emdadm --remove /dev/mdX /dev/sdX\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eTo add a disk to the array:\u003cbr\u003e\n\u003ccode\u003emdadm --add /dev/mdX /dev/sdX\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cul\u003e\n\u003cli\u003eTurn bitmap on\u003cbr\u003e\n\u003ccode\u003emdadm --grow --bitmap=internal /dev/mdX\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eTurn off bitmap\u003cbr\u003e\n\u003ccode\u003emdadm --grow --bitmap=none /dev/mdX\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSpeed up recovery\u003cbr\u003e\n\u003ccode\u003eecho 50000 \u0026gt; /proc/sys/dev/raid/speed_limit_min\u003c/code\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eResources\u003c/p\u003e","title":"mdadm cheatsheet"},{"content":"I kept getting this strange error from my NAS. A google search led me to a solution on OMV forums.\nThis is an automatically generated mail message from mdadm running on oracle\nA SparesMissing event had been detected on md device /dev/md/oracle:storage1.\nFaithfully yours, etc.\nP.S. The /proc/mdstat file currently contains the following:\nPersonalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]\nmd127 : active raid5 sdb[0] sda[3] sdc[1]\n976770048 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]\nunused devices:\nI had to leave a note as I was very thankful that SerErris took the time out to document the fix. Kudos man!\nOMV Forums\nThank you documenting this fix. I was having the issue as well. What is strange is that I did not configure a spare. I had a failed hard drive and after I replaced it and rebuilt the array I started getting these alerts.\n","permalink":"https://shane.greaves.casa/posts/2012-12-03-162/","summary":"\u003cp\u003eI kept getting this strange error from my NAS. A google search led me to a solution on OMV forums.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003e This is an automatically generated mail message from mdadm running on oracle\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eA SparesMissing event had been detected on md device /dev/md/oracle:storage1.\u003c/p\u003e\n\u003cp\u003eFaithfully yours, etc.\u003c/p\u003e\n\u003cp\u003eP.S. The /proc/mdstat file currently contains the following:\u003c/p\u003e\n\u003cp\u003ePersonalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]\u003cbr\u003e\nmd127 : active raid5 sdb[0] sda[3] sdc[1]\u003cbr\u003e\n976770048 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]\u003c/p\u003e","title":""},{"content":"Apt is broken on my omv box with this error. I am still trying to figure this one out.\nCRON-APT RUN [/etc/cron-apt/config]: Mon Dec 3 04:00:01 EST 2012 CRON-APT SLEEP: 3420, Mon Dec 3 04:57:01 EST 2012 CRON-APT ACTION: 3-download CRON-APT LINE: /usr/bin/apt-get dist-upgrade -d -y -o APT::Get::Show-Upgraded=true Reading package lists... Building dependency tree... Reading state information... You might want to run 'apt-get -f install' to correct these. The following packages have unmet dependencies: openmediavault-transmissionbt : Depends: transmission-cli (\u0026gt;= 2.42) but it is not installed transmission-daemon : Depends: libcurl3 (\u0026gt;= 7.16.2-1) but it is not installed Depends: libevent-2.0-5 (\u0026gt;= 2.0.16-stable) but it is not installed Depends: libminiupnpc5 but it is not installable Depends: libnatpmp1 but it is not installable Depends: transmission-common (= 2.71-1) but it is not installed E: Unmet dependencies. Try using -f.\n","permalink":"https://shane.greaves.casa/posts/2012-12-03-broken-apt-on-omv/","summary":"\u003cp\u003eApt is broken on my omv box with this error. I am still trying to figure this one out.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eCRON-APT RUN [/etc/cron-apt/config]: Mon Dec  3 04:00:01 EST 2012 CRON-APT SLEEP: 3420, Mon Dec  3 04:57:01 EST 2012 CRON-APT ACTION: 3-download CRON-APT LINE: /usr/bin/apt-get dist-upgrade -d -y -o APT::Get::Show-Upgraded=true Reading package lists... Building dependency tree... Reading state information... You might want to run 'apt-get -f install' to correct these. The following packages have unmet dependencies: openmediavault-transmissionbt : Depends: transmission-cli (\u0026gt;= 2.42) but it is not installed transmission-daemon : Depends: libcurl3 (\u0026gt;= 7.16.2-1) but it is not installed Depends: libevent-2.0-5 (\u0026gt;= 2.0.16-stable) but it is not installed Depends: libminiupnpc5 but it is not installable Depends: libnatpmp1 but it is not installable Depends: transmission-common (= 2.71-1) but it is not installed E: Unmet dependencies. Try using -f.\u003c/code\u003e\u003c/p\u003e","title":"Broken APT on OMV"},{"content":"I have a failed (failing) hard drive on my raid5 array. I have documented the steps needed to replace the failed disk with a new disk. Disk is most likely ok but it is showing read errors. Better be safe than sorry!\nView Array Status\ncat /proc/mdstat\nRemove Failed Disk\nmdadm --manage /dev/md0 --fail /dev/sda mdadm --manage /dev/md1 --remove /dev/sda Shutdown and replace disk with new one\nshutdown -h now\nCopy partition to new disk\nsfdisk -d /dev/sda | sfdisk --Linux /dev/sda\nAdd New drive to pool\nmdadm --manage /dev/md0 --add /dev/sda\nIf all goes well the array will start to sync.\nReference\n","permalink":"https://shane.greaves.casa/posts/2012-11-29-replace-failed-hard-drive/","summary":"\u003cp\u003eI have a failed (failing) hard drive on my raid5 array. I have documented the steps needed to replace the failed disk with a new disk. Disk is most likely ok but it is showing read errors. Better be safe than sorry!\u003c/p\u003e\n\u003cp\u003eView Array Status\u003cbr\u003e\n\u003ccode\u003ecat /proc/mdstat\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eRemove Failed Disk\u003cbr\u003e\n\u003ccode\u003emdadm --manage /dev/md0 --fail /dev/sda mdadm --manage /dev/md1 --remove /dev/sda \u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eShutdown and replace disk with new one\u003cbr\u003e\n\u003ccode\u003eshutdown -h now\u003c/code\u003e\u003c/p\u003e","title":"Replace failed hard drive"},{"content":"I wanted a reliable home media server and so far the process to get this up and running has been very fun and rewarding. This is where I store my movies, tv shows and music. I’m a big fan of XBMC and I wanted to set up sharing the xbmc database through mysql to all my clients.\nI also wanted to be able to stream my music to multiple clients. Initially I used daap but I have since moved on to SubSonic.\nI wanted a server that met a few key requirements:\nLow power Stable Wife Friendly Low Power To meet the low power requirement I went with an Intel Atom D410 motherboard, with a clock speed of 1667 MHZ.\nPower is very expensive in Jamaica and you want to ensure that your gadgets use the least amount of power necessary. My idle power consumption with no hard drives connected is about 80 Watts. This is still a pretty high number and a more reliable PSU should cut power consumption by half.\nStable I want to spend more time watching TV and less time doing system admin type stuff. This influenced the operating systems choice as initially I went with FreeNAS and loved it. However since it was based on BSD which I am not very comfortable with, whenever customizations were required it took way too much time! For example I was never able to get MYSQL up and running on FreeNAS and MYSQL is required to share my XBMC library.\nThen I discovered OpenMediaVault a Debian based NAS distribution. I have spent most of my time on Linux using Debian and Ubuntu so the decision was easy to switch to OMV.\nWife Friendly This is perhaps the most important requirement! If it is not she will not use it.\nSystem Specs Mobo Atom D410 Memory 3GB Network 100 MB/S Storage 2x500GB OS Storage 1×80 GB ","permalink":"https://shane.greaves.casa/posts/2012-11-20-oracle-my-little-media-server/","summary":"\u003cp\u003eI wanted a reliable home media server and so far the process to get this up and running has been very fun and rewarding. This is where I store my movies, tv shows and music. I’m a big fan of \u003ca href=\"http://www.xbmc.org\" title=\"xbmc\"\u003eXBMC\u003c/a\u003e and I wanted to set up sharing the xbmc database through mysql to all my clients.\u003c/p\u003e\n\u003cp\u003eI also wanted to be able to stream my music to multiple clients. Initially I used daap but I have since moved on to SubSonic.\u003c/p\u003e","title":"Oracle: My little media server"},{"content":"I keep forgetting how to do this one… so I wrote it down.\nUpdating TimeZone:\nRemove current timezone (delete symbolic link):\nrm /var/db/timezone/localtime\nCreate Symbolic link for Jamaica TimeZone\nln -s /usr/share/zoneinfo/America/Jamaica /var/db/timezone/localtime\n","permalink":"https://shane.greaves.casa/posts/2012-11-20-howto-update-atv2-timezone-jamaica/","summary":"\u003cp\u003eI keep forgetting how to do this one… so I wrote it down.\u003c/p\u003e\n\u003cp\u003eUpdating TimeZone:\u003c/p\u003e\n\u003cp\u003eRemove current timezone (delete symbolic link):\u003cbr\u003e\n\u003ccode\u003erm /var/db/timezone/localtime\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eCreate Symbolic link for Jamaica TimeZone\u003cbr\u003e\n\u003ccode\u003eln -s /usr/share/zoneinfo/America/Jamaica /var/db/timezone/localtime\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://gravyflex.wordpress.com/wp-content/uploads/2012/11/atv2.jpg\"\u003e\u003cimg loading=\"lazy\" src=\"http://gravyflex.wordpress.com/wp-content/uploads/2012/11/atv2.jpg?w=150\" title=\"atv2\"\u003e\u003c/a\u003e\u003c/p\u003e","title":"HowTo Update ATV2 TimeZone \u0026#8211; Jamaica"},{"content":"Subsonic to the world!!\nAfter a little searching I found a SubSonic AddOn that works with XBMC Frodo. I am running the nightly builds for Windows and ATV2.\nAs per this forum post:\nI find XBMC to be the best experience on a Mac or PC for interacting with my remote Subsonic server. I wanted to try it with the pre-Alpha builds of XBMC Frodo to take advantage of the new audio engine. The Subsonic script failed and the guy who wrote it (t0mm0) seems to have disappeared. I debugged and corrected it (very easy) and for those of you who are interested here’s a link to the new files:\nDownload the following addon: LINK Copy to AddOn Folder Modify/Add AdvanceSettings file Configure Add with SubSonic Server Enjoy\n","permalink":"https://shane.greaves.casa/posts/2012-11-19-install-subsonic-xbmc-frodo-addon/","summary":"\u003cp\u003e\u003cstrong\u003eSubsonic to the world!!\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eAfter a little searching I found a SubSonic AddOn that works with XBMC Frodo. I am running the nightly builds for Windows and ATV2.\u003c/p\u003e\n\u003cp\u003eAs per this forum \u003ca href=\"http://forum.subsonic.org/forum/viewtopic.php?f=4\u0026amp;t=10708\"\u003epost\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eI find XBMC to be the best experience on a Mac or PC for interacting with my remote Subsonic server. I wanted to try it with the pre-Alpha builds of XBMC Frodo to take advantage of the new audio engine. The Subsonic script failed and the guy who wrote it (t0mm0) seems to have disappeared. I debugged and corrected it (very easy) and for those of you who are interested here’s a link to the new files:\u003c/p\u003e\n\u003c/blockquote\u003e","title":"Install Subsonic XBMC Frodo AddOn"},{"content":"My quick and dirty walk through of how to get utorrent installed and configured on Openmediavault, a Debian based network attached storage solution (NAS).\nI used this package.\nwget http://dl.dropbox.com/u/24928836/utserver/deb/utorrent-server_3.0-25053_i386.deb dpkg -i utorrent*.deb point your browser to: http://omv-ip:8080/gui The default is: 8080\nThe user name is admin with no password.\nAdditionally you will have to add utserver to the machice startup: update-rc.d utserver defaults\nReference utorrent.com forums\n","permalink":"https://shane.greaves.casa/posts/2012-11-19-install-utorrent-on-omv/","summary":"\u003cp\u003eMy quick and dirty walk through of how to get utorrent installed and configured on Openmediavault, a Debian based network attached storage solution (NAS).\u003c/p\u003e\n\u003cp\u003eI used \u003ca href=\"http://dl.dropbox.com/u/24928836/utserver/deb/utorrent-server_3.0-25053_i386.deb\" title=\"utorrent package to install\"\u003ethis\u003c/a\u003e package.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003ewget \u003ca href=\"http://dl.dropbox.com/u/24928836/utserver/deb/utorrent-server\"\u003ehttp://dl.dropbox.com/u/24928836/utserver/deb/utorrent-server\u003c/a\u003e_3.0-25053_i386.deb\u003c/li\u003e\n\u003cli\u003edpkg -i utorrent*.deb\u003c/li\u003e\n\u003cli\u003epoint your browser to: http://omv-ip:8080/gui\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eThe default is: 8080\u003cbr\u003e\nThe user name is admin with no password.\u003c/p\u003e\n\u003cp\u003eAdditionally you will have to add utserver to the machice startup: update-rc.d utserver defaults\u003c/p\u003e\n\u003cp\u003eReference\n\u003ca href=\"http://forum.utorrent.com/viewtopic.php?id=92278\" title=\"utorrent debian install\"\u003eutorrent.com forums\u003c/a\u003e\u003c/p\u003e","title":"Install: utorrent on OMV"},{"content":"VOIP is an area that I have a strong interest. Asterisk and Freeswitch are two of my favorite pieces of software and I am always looking for ways in which they can save me some money. I have not been able to get my hands on low power hardware which has always been a deal breaker for me. With the cost of electricity being what it is in Jamaica leaving your gear on 24×7 is just not an option.\nI came across www.pbxes.org which has a free account. The free service gives you 2000 minutes monthly.\nThis is a nice way to test out asterisk. So far I have configured one (free) trunk from www.ipkall.com. I have configured my Linksys SPA 3002 ATA and I am now enjoying free calls from the US. Yea!!!\nTrunk\n","permalink":"https://shane.greaves.casa/posts/2012-08-01-voip-stuff/","summary":"\u003cp\u003eVOIP is an area that I have a strong interest. Asterisk and Freeswitch are two of my favorite pieces of software and I am always looking for ways in which they can save me some money. I have not been able to get my hands on low power hardware which has always been a deal breaker for me. With the cost of electricity being what it is in Jamaica leaving your gear on 24×7 is just not an option.\u003c/p\u003e","title":"VOIP Stuff"},{"content":"Who needs CDROM drives? Can I tell you that burning a DVD/CD is the devil’s work! I always prefer using a USB Flash or External USB drive.\nTo prepare a USB disk for Windows 7 you’ll need to make it bootable by using DISKPART.\nFormat the drive by executing the following commands one by one . Make sure you replace Disk 1 with proper Disk number . select disk 1 clean create partition primary select partition 1 active format fs=NTFS QUICK assign exit Copy contents of Windows install media to USB device. References\n","permalink":"https://shane.greaves.casa/posts/2012-07-30-windows-7-install-from-usb-external-hdd/","summary":"\u003cp\u003eWho needs CDROM drives? Can I tell you that burning a DVD/CD is the devil’s work! I always prefer using a USB Flash or External USB drive.\u003c/p\u003e\n\u003cp\u003eTo prepare a USB disk for Windows 7 you’ll need to make it bootable by using DISKPART.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eFormat the drive by executing the following commands one by one . Make sure you replace Disk 1 with proper Disk number .\u003c/li\u003e\n\u003cli\u003eselect disk 1\u003c/li\u003e\n\u003cli\u003eclean\u003c/li\u003e\n\u003cli\u003ecreate partition primary\u003c/li\u003e\n\u003cli\u003eselect partition 1\u003c/li\u003e\n\u003cli\u003eactive\u003c/li\u003e\n\u003cli\u003eformat fs=NTFS QUICK\u003c/li\u003e\n\u003cli\u003eassign\u003c/li\u003e\n\u003cli\u003eexit\u003c/li\u003e\n\u003cli\u003eCopy contents of Windows install media to USB device.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cstrong\u003eReferences\u003c/strong\u003e\u003c/p\u003e","title":"Windows 7 install from USB External HDD"},{"content":"CVMTV’s Olympic coverage has been less than stellar and that is putting it in a very nice way. I’ve spent the first two days of the Olympics trying to find out what was possible in terms of alternate video sources to watch events, both live and recorded.\nI tend to like the coverage of BBC. They usually have excellent commentators who are very knowledgeable on the athletes and their respective events, unlike what passes for commentary on NBC (US). BBC iPlayer was my first choice to watch the opening ceremony. To access iPlayer you have to reside in the UK or be connecting from a UK IP address through the use of a VPN. A Virtual Private Network (VPN) is a technology used to access a network, securely over a public network such as the internet. It is usually used to access work or home networks remotely.\nI already use a personal VPN service which I mostly use to access US content that are “geo restricted”. I searched my VPN providers list of gateways and I was most happy to find a UK gateway. I connected to the VPN and I was able to watch the Opening Ceremony which was previously recorded. I especially enjoyed being able to rewind the video and watch the Jamaican athletes entrance repeatedly. I think I watch it around five times :-).\nThe coverage has been fantastic so far but I must admit that I rather hate being tethered to a computer and watching the Olympic on a tablet can be quite cumbersome. I missed the 10-foot user interface of the TV and I was excited about trying the iPlayer addon for XBMC. After installing the AddOn on the XBMC front end, I was very pleased with the results and thought I would share.\nThis will work if you have a streamer that can run XBMC (AppleTV2 etc) or if you are connecting a computer to your television.\nxbmc-iplayerv2 XBMC After installing XBMC and installing the AddOn you’ll connect to your VPN and start XBMC. In the Video AddOn you’ll launch iPlayer and enjoy the goodness.\n","permalink":"https://shane.greaves.casa/posts/2012-07-30-olympic-viewing-xbmc-and-bbc-iplayer/","summary":"\u003cp\u003eCVMTV’s Olympic coverage has been less than stellar and that is putting it in a very nice way. I’ve spent the first two days of the Olympics trying to find out what was possible in terms of alternate video sources to watch events, both live and recorded.\u003c/p\u003e\n\u003cp\u003eI tend to like the coverage of BBC. They usually have excellent commentators who are very knowledgeable on the athletes and their respective events, unlike what passes for commentary on NBC (US). BBC iPlayer was my first choice to watch the opening ceremony. To access iPlayer you have to reside in the UK or be connecting from a UK IP address through the use of a VPN. A Virtual Private Network (VPN) is a technology used to access a network, securely over a public network such as the internet. It is usually used to access work or home networks remotely.\u003c/p\u003e","title":"Olympic Viewing, XBMC and BBC iPlayer"},{"content":"This was harder to accomplish that I thought it would be. I am accustomed to doing this by changing the runlevel in /etc/init.d/inittab. With upstart this has become very foggy for me.\nThanks to this Link, I was able to get this done.\nStep1:Just edit /etc/default/grub with your favourite editor:\nsudo gedit /etc/default/grub\nfind out this line:\nGRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”\nchange it to:\nGRUB_CMDLINE_LINUX_DEFAULT=”quiet splash text”\nStep2:\nUpdate grub and done!\nsudo update-grub ","permalink":"https://shane.greaves.casa/posts/2010-05-23-howto-boot-to-console-ubuntu-9-10/","summary":"\u003cp\u003eThis was harder to accomplish that I thought it would be. I am accustomed to doing this by changing the runlevel in /etc/init.d/inittab. With upstart this has become very foggy for me.\u003c/p\u003e\n\u003cp\u003eThanks to this \u003ca href=\"http://ubuntuguide.net/boot-into-consolecommand-line-when-startup-ubuntu-9-10\"\u003eLink\u003c/a\u003e, I was able to get this done.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eStep1\u003c/strong\u003e:Just edit /etc/default/grub with your favourite editor:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003esudo gedit /etc/default/grub\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003efind out this line:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eGRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003echange it to:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eGRUB_CMDLINE_LINUX_DEFAULT=”quiet splash text”\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003eStep2:\u003c/strong\u003e\u003cbr\u003e\nUpdate grub and done!\u003c/p\u003e\n\u003cp\u003esudo update-grub\n\u003cimg loading=\"lazy\"\u003e\u003c/p\u003e","title":"Howto Boot to console, Ubuntu 9.10"},{"content":"The machine on 192.168.1.153 is my server running Ubuntu 8.04.1 LTS. I installed the tftp-hpa package:\naptitude install tftpd-hpa Now the files were in place so I needed to tell inetd.conf to find the files in that folder, so edited /etc/inetd.conf.\nSource\n","permalink":"https://shane.greaves.casa/posts/2009-11-20-troubleshooting-pxe-boot-notes/","summary":"\u003cp\u003eThe machine on 192.168.1.153 is my server running Ubuntu 8.04.1 LTS. I installed the tftp-hpa package:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eaptitude install tftpd-hpa\n\u003c/code\u003e\u003c/pre\u003e\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eNow the files were in place so I needed to tell inetd.conf to find the files in that folder, so edited \u003cem\u003e/etc/inetd.conf\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.tjansson.dk/?p=259\"\u003eSource\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"https://blogger.googleusercontent.com/tracker/104119815894289054-6592236612783872250?l=gravyflex.blogspot.com\"\u003e\u003c/p\u003e","title":"Troubleshooting PXE Boot Notes"},{"content":"Configure DD WRT\nThe following settings needs to be a dded under: Services-\u0026gt;Additional DNSMasq Options\nCode: dhcp-boot=pxelinux.0,,192.168.230.1 Configure tftp\nIn this case we are using tftp-hpa\nCode: apt-get install tftpd-hpa mcedit /etc/default/tftpd-hpa TFTP_USERNAME=\u0026quot;tftp\u0026quot; TFTP_DIRECTORY=\u0026quot;/srv/tftp\u0026quot; TFTP_ADDRESS=\u0026quot;0.0.0.0:69\u0026quot; TFTP_OPTIONS=\u0026quot;--secure\u0026quot; References\nSource\n","permalink":"https://shane.greaves.casa/posts/2009-11-20-dd-wrt-tftp-option/","summary":"\u003cp\u003eConfigure DD WRT\u003c/p\u003e\n\u003cp\u003eThe following settings needs to be a\ndded under: Services-\u0026gt;Additional DNSMasq Options\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e\u003cstrong\u003eCode:\u003c/strong\u003e\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003edhcp-boot=pxelinux.0,,192.168.230.1\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eConfigure tftp\u003c/p\u003e\n\u003cp\u003eIn this case we are using tftp-hpa\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e\u003cstrong\u003eCode:\u003c/strong\u003e\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eapt-get install tftpd-hpa mcedit /etc/default/tftpd-hpa  \u003ccode\u003eTFTP_USERNAME=\u0026quot;tftp\u0026quot; TFTP_DIRECTORY=\u0026quot;/srv/tftp\u0026quot; TFTP_ADDRESS=\u0026quot;0.0.0.0:69\u0026quot; TFTP_OPTIONS=\u0026quot;--secure\u0026quot;\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eReferences\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"http://www.dd-wrt.com/phpBB2/viewtopic.php?t=4662\u0026amp;highlight=pxe\"\u003eSource\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"https://blogger.googleusercontent.com/tracker/104119815894289054-8252038170770066522?l=gravyflex.blogspot.com\"\u003e\u003c/p\u003e","title":"PXE Booting with DD-WRT | TFTP Option"},{"content":" The way to follow\nEventually replace the 10.0.0.x by your addresses\nGo to Administration -\u0026gt; Diagnostics and click on run Enter ifconfig vlan1:1 10.0.0.1 netmask 255.255.255.0\u0026lt;br\u0026gt;\u0026lt;/br\u0026gt; and click on Save Startup\nEnter /usr/sbin/iptables -I POSTROUTING -t nat -o vlan1 -d 10.0.0.0/24 -j MASQUERADE\u0026lt;br\u0026gt;\u0026lt;/br\u0026gt; and click on Save Firewall\nSource\n","permalink":"https://shane.greaves.casa/posts/2009-11-20-ddwrt-access-to-modem-configuration/","summary":"\u003ch3\u003e\u003c/h3\u003e\n\u003cp\u003eThe way to follow\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eEventually replace the 10.0.0.x by your addresses\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eGo to \u003cem\u003eAdministration -\u0026gt; Diagnostics\u003c/em\u003e and click on \u003cem\u003erun\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003eEnter\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eifconfig vlan1:1 10.0.0.1 netmask 255.255.255.0\u0026lt;br\u0026gt;\u0026lt;/br\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eand click on \u003cem\u003eSave Startup\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnter\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e/usr/sbin/iptables -I POSTROUTING -t nat -o vlan1 -d 10.0.0.0/24 -j MASQUERADE\u0026lt;br\u0026gt;\u0026lt;/br\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eand click on \u003cem\u003eSave Firewall\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.dd-wrt.com/wiki/index.php/Access_To_Modem_Configuration\"\u003eSource\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"https://blogger.googleusercontent.com/tracker/104119815894289054-3184212745146970339?l=gravyflex.blogspot.com\"\u003e\u003c/p\u003e","title":"DDWRT Access To Modem Configuration"},{"content":" Debugging PPPoE Problems\nPPPoE is used mainly for handling connections via Digital Subscriber Lines (DSL). Remember: The WRT54G / WRT54GS doesn’t have an integrated DSL modem, so you need an external one.\nCabling\nAfter connecting the WRT54G(S) router to the DSL modem on the port labeled Internet make sure that the Internet LED at the front panel is lit. If not, check cabling.\nReboot your DSL modem after you connected the router to it.\nEnable Diagnostic Output\nTo debug problems regarding PPPoE you have to login to the router to get access to a console for entering commands.\nUse telnet or ssh to login to the router. Then enable syslog on the shell prompt:\nsyslogd -O $(tty)\u0026lt;br\u0026gt;\u0026lt;/br\u0026gt; This will print\nJan 1 00:00:35 syslog.info syslogd started: Now DD-WRT VeryBusyBox v1.01 (2006.02.22-10:40 0000)\u0026lt;br\u0026gt;\u0026lt;/br\u0026gt; or something to this effect. From now on you’ll see all syslog output on the login window.\nUplink\nTo check the DSL connection we use the command line version of rp-pppoe that comes with DD-WRT.\nImportant: Enable the DSL connection in your WRT54G’s setup otherwise the network interfaces are not set up properly for this test.\nKill all running PPPoE clients\nkill $(ps | grep pppoe)\u0026lt;br\u0026gt;\u0026lt;/br\u0026gt; Now try to get the name of your DSL peer:\npppoe -I vlan1 -D$(tty) -A\u0026lt;br\u0026gt;\u0026lt;/br\u0026gt; | | |\u0026lt;br\u0026gt;\u0026lt;/br\u0026gt; | | -- Find Access Concentrator\u0026lt;br\u0026gt;\u0026lt;/br\u0026gt; | ---------- Output Debug Messages\u0026lt;br\u0026gt;\u0026lt;/br\u0026gt; ------------------- Set Network Interface\u0026lt;br\u0026gt;\u0026lt;/br\u0026gt; This should print some network packets and the name of your DSL access concentrator.\nIf this works out, try to initiate the discovery procedure:\npppoe -I vlan1 -D$(tty) -d\u0026lt;br\u0026gt;\u0026lt;/br\u0026gt; Apart from a bunch of network packets representing the dialogue between the WRT54G and the peer, the last line should display a session number and the hardware address of your peer (separated by colons).\nIf your uplink does not work properly or your DSL modem does not work correctly, these commands may fail with one of the following messages:\nTimeout waiting for PADO packets. Timeout waiting for PADS packets.\nIn this case, … more help to come … have to sort out first!\nThere is a German page where you can find more information: http://www.adsl4linux.de/howtos/\nSource\n","permalink":"https://shane.greaves.casa/posts/2009-11-20-ddwrt-debugging-pppoe-problems/","summary":"\u003ch2\u003e\u003c/h2\u003e\n\u003cp\u003eDebugging PPPoE Problems\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"http://www.dd-wrt.com/wiki/index.php/Glossary#Point-to-Point_Protocol_over_Ethernet_.28PPPoE.29\" title=\"Glossary\"\u003ePPPoE\u003c/a\u003e\u003c/strong\u003e is used mainly for handling connections via Digital Subscriber Lines (DSL). Remember: The WRT54G / WRT54GS doesn’t have an integrated DSL modem, so you need an external one.\u003c/p\u003e\n\u003ch3\u003e\u003c/h3\u003e\n\u003cp\u003eCabling\u003c/p\u003e\n\u003cp\u003eAfter connecting the WRT54G(S) router to the DSL modem on the port labeled \u003cem\u003eInternet\u003c/em\u003e make sure that the \u003cem\u003eInternet\u003c/em\u003e LED at the front panel is lit. If not, check cabling.\u003c/p\u003e\n\u003cp\u003eReboot your DSL modem after you connected the router to it.\u003c/p\u003e","title":"DDWRT Debugging PPPOE Problems"},{"content":"From the time I installed my first wireless router I have been wondering if there was a way to have the wireless router manage the public IP address. I wanted the ADSL modem to function as a modem only. I have seen this setup on a few occasions when a static IP address is configure but I never had a clear understanding of the process.\nMy wireless router has all these wonderful features and yet I would have to let my router function as an access point. The other option was to connect the router to the WAN port on the Router, from the ADSL modem. I then would connect my computers to the LAN ports on the router. I hate the latter setup as I would have to double NAT and this prevented me from connecting to a VPN at work. Also I had to spend too much time setting up port forwards for BIT TORRENT on both devices.\nI felt I was stuck with running DHCP and other services on my ADSL modem until I recently purchased a Linksys WRT54G2 wireless router. I purchased this router with the intention of installing DD-WRT firmware. I came across a thread on forums where someone had success with setting up his ADSL modem in Bridge mode and initiating the ADSL login using PPPoE from is Linksys router.\nI reconfigured the WAN on my ADSL modem. I saw the option to select Bridge I selected that and save the settings. The modem restarted and I reconnected to it and looked at the information page. I saw that it had connected to CW servers and I could see my upload and download speeds.\nI logged into my Linksys and changed the wan configuration to PPPoE. I entered the user name and password and the service name on the ADSL modem which I had written down. I let the other settings remain at the default.\nAfter sometime entering the wrong password I was pleasantly surprised when it connected and the public IP was displayed. I have noticed a dramatic improvement in the performance of my network.\nHow this bridging works:\nADSL LINE ADSL MODEM (Bridge Mode) Linksys PPoE (WAN Public IP)\nI would recommend this setup to anyone who is able to set this up.\n","permalink":"https://shane.greaves.casa/posts/2009-01-22-linksys-adsl-modem-bridge-mode-pppoe/","summary":"\u003cp\u003eFrom the time I installed my first wireless router I have been wondering if there was a way to have the wireless router manage the public IP address. I wanted the ADSL modem to function as a modem only. I have seen this setup on a few occasions when a static IP address is configure but I never had a clear understanding of the process.\u003c/p\u003e\n\u003cp\u003eMy wireless router has all these wonderful features and yet I would have to let my router function as an access point. The other option was to connect the router to the WAN port on the Router, from the ADSL modem. I then would connect my computers to the LAN ports on the router. I hate the latter setup as I would have to double NAT and this prevented me from connecting to a VPN at work. Also I had to spend too much time setting up port forwards for BIT TORRENT on both devices.\u003c/p\u003e","title":"Linksys + ADSL Modem \u0026#8211; Bridge Mode + PPPOE"},{"content":"I usually only connect to my wireless network at home so I usually have few problems with network-manager on Kde or Gnome. A couple of times however I have had the experience of needing to connect to an access point on the road and network manager just would not connect. I am usually able to use command line tools to connect so its been a problem I could live with however I want wireless to just work.\nI rarely connect to access points that have security enable so I have often found this to be a strange problem.\nI can’t recommend Ubuntu to my noob friends if they are going to encounter problems like this!\nAlso my laptop is very much in the twilight of its life and I find the requirements of network manager to be very taxing on the old girl. I was looking for something with a lower foot print. Since I use xfce I really wanted to get away from the Gnome and KDE dependencies as much as possible.\nThings changed when I came across this neat little Gtk app called WICD which I think if you are able to you should give it a try.\nSome of Wicd’s features include:\nNo Gnome dependencies (although it does require GTK), so it is easy to use in XFCE, Fluxbox, Openbox, Enlightenment, etc. Ability to connect to wired and wireless networks Profiles for each wireless network and wired network Many encryption schemes, some of which include WEP/WPA/WPA2 (and you can add your own) Remains compatible with wireless-tools Tray icon showing network activity and signal strength To install Wicd:\n|—- Step 1 —|\nAdd the wicd repo to your sources.list. Replace mcedit with your text editor.\nsudo mcedit /etc/apt/sources.list\nadd the following, (replace lenny with your distro)\ndeb http://apt.wicd.net lenny extras Next in the console enter:\nwget -q http://apt.wicd.net/wicd.gpg -O- | sudo apt-key add -\nsudo apt-get update\n|—- Step 2 —|\nCaution: Important step!\nRemove network-manager and its dependencies:\nsudo apt-get remove network-manager\n|—- Step 3 —|\nInstall wicd\nsudo apt-get install wicd\nTo run wicd:\nwicd-client\n","permalink":"https://shane.greaves.casa/posts/2009-01-03-excellent-network-manager-replacement-on-ubuntu/","summary":"\u003cp\u003eI usually only connect to my wireless network at home so I usually have few problems with network-manager on Kde or Gnome. A couple of times however I have had the experience of needing to connect to an access point on the road and network manager just would not connect. I am usually able to use command line tools to connect so its been a problem I could live with however I want wireless to just work.\u003c/p\u003e","title":"Excellent Network Manager replacement on Ubuntu"}]