[{"content":"","date":"2 September 2026","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","date":"2 September 2026","externalUrl":null,"permalink":"/tags/book/","section":"Tags","summary":"","title":"Book","type":"tags"},{"content":"Books I\u0026rsquo;ve read per year. Title - Author (ISBN) (https://isbnsearch.org/)\n2026\nMistborn: The Hero of Ages - Brandon Sanderson (9780575097766) The Hobbit - J.R.R. Tolkien (9780547928227) Mistborn: The Well of Ascension - Brandon Sanderson (9780575097759) A Grief Observed - C.S. Lewis (9780571310883) Mistborn: The Final Empire - Brandon Sanderson (9780765311788) Fahrenheit 451 - Ray Bradbury (9780743247221) 2025 (5)\nSpy Sinker - Len Deighton (9780241505496) Spy Line - Len Deighton (9780141996059) Spy Hook - Len Deighton (9780141996042) French Kids Eat Everything - Karen Le Billon (9780749958510) The Girl and the Moon (The Book of the Ice book 3) - Mark Lawrence (9780008284886) 2024 (3)\nThe Girl and the Mountain (The Book of the Ice book 2) - Mark Lawrence (9781479245529) The Girl and the Stars (The Book of the Ice book 1) - Mark Lawrence (9780008284794) Doctor Sleep - Stephen King (9781451698855) 2023 (10)\nLondon Match - Len Deighton (9780802161833) Mexico Set - Len Deighton (9780802161659) Berlin Game - Len Deighton (9780802162151) Assassin\u0026rsquo;s Quest (Farseer trilogy book 3) - Robin Hobb (9780593722848) Royal Assassin (Farseer trilogy book 2) - Robin Hobb (9780593722831) Assassin\u0026rsquo;s Apprentice (Farseer trilogy book 1) - Robin Hobb (9780593722824) Three Men in a Boat - Jerome K. Jerome (9781734852639) 1984 - George Orwell (9781328869333) Jingo - Terry Pratchett (9780062280206) Feet of Clay - Terry Pratchett (9780062275516) 2022 (8)\nMen at Arms - Terry Pratchett (9780062237408) Guards Guards - Terry Pratchett (9780063373761) My Wonderful Life: A Memoir - Sid Mynott (9781913306212) The Eye of the World (The Wheel of Time book 1) - Robert Jordan (9781250768681) All These Worlds: Bobiverse Series, Book 3 - Dennis E. Taylor (9781680680607) For We Are Many: Bobiverse Series, Book 2 - Dennis E. Taylor (9781680680591) We Are Legion (We Are Bob): Bobiverse Series, Book 1 - Dennis E. Taylor (9781680680584) Catch-22 - Joseph Heller (9780099496960) 2021 (8)\nHoly Sister - Mark Lawrence (9781101988930) Grey Sister - Mark Lawrence (9781101988909) Red Sister - Mark Lawrence (9781101988879) The Amber Spyglass: His Dark Materials - Philip Pullman (9780440418566) The Subtle Knife: His Dark Materials 2 - Philip Pullman (9780440418337) Head Over Heels: Seduced by Southern Italy - Chris Harrison (9781857886467) The Republic of Thieves - Scott Lynch (9780553588965) Red Seas Under Red Skies - Scott Lynch (9780553588958) 2020 (4)\nThe Lies of Locke Lamora - Scott Lynch (9780553588941) Novae Spes: A New Hope - Terry Steward (9781528935920) Northern Lights: His Dark Materials 1 - Philip Pullman (9781407106373) Tombland - C.J. Sansom 2019 (6)\nLamentation - C.J. Sansom (9780316254977) The Pillars of the Earth - Ken Follett (9780451488336) Heartstone - C.J. Sansom (9780143120650) Murder on the Orient Express - Agatha Christie (9780062073501) Revelation - C.J. Sansom (9780670020515) Dark Fire - C.J. Sansom (9780143036432) 2018 (1)\nSovereign - C.J. Sansom (9781101221303) 2017 (3)\nArmada - Ernest Cline (9786050945911) The Wise Man\u0026rsquo;s Fear - Patrick Rothfuss (9780575081437) The Name of the Wind - Patrick Rothfuss (9780756404741) 2016 (0)\n2015 (0)\n2014 (6)\nJonathan Livingston Seagull - Richard Bach (9781476793313) The Little Prince - Antoine de Saint-Exupéry (9780156012195) Dissolution - C.J. Sansom (9780142004302) The Catcher in the Rye - J. D. Salinger (9780316769174) Diggers - Terry Pratchett (9780060094935) Stoner - John Williams (9781784877309) Just My Type: A Book About Fonts - Simon Garfield (9781592407460) 2013 (12)\nAnimal Farm - George Orwell (9788187057314) The Road to Wigan Pier - George Orwell (9780156767507) A Small Town in Germany - John le Carré (9780143122609) The Looking Glass War - John le Carré (9780143122593) The Spy Who Came in from the Cold - John le Carré (9780553123104) The Call of Cthulhu - H. P. Lovecraft (9798669574079) The Curious Incident of the Dog in the Night-Time - Mark Haddon (9781400032716) The Russian Concubine - Kate Furnivall (9780425215586) The Boy in the Striped Pyjamas - John Boyne (9780385751537) The Pearl - John Steinbeck (9780140177374) The Shining - Stephen King (9780345806789) Truckers - Terry Pratchett (9780552573337) 2012 (9)\nMonstrous Regiment - Terry Pratchett (9780062307415) Equal Rites - Terry Pratchett (9780062225696) Lolita - Vladimir Nabokov (9780679723165) The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography - Simon Singh (9780385495325) Fifty Shades of Grey - E. L. James (9781612130293) The Grapes of Wrath - John Steinbeck (9780143039433) Of Mice and Men - John Steinbeck (9780140177398) A Dance with Dragons - George R. R. Martin (9780553385953) A Feast for Crows - George R. R. Martin (9780007582235) 2011 (13)\nA Storm of Swords - George R. R. Martin (9780553381702) A Clash of Kings - George R. R. Martin (9780553381696) A Game of Thrones - George R. R. Martin (9780553381689) (Harry Potter 1-7 Audio books by Jim Dale) (9781408882290) Women in Love - D. H. Lawrence (9781853260070) Water for Elephants - Sara Gruen (9781565125605) Black Man (Th1rte3n) - Richard K. Morgan (9780345480897) The Professor, the Banker, and the Suicide King: Inside the Richest Poker Game of All Time - Michael Craig (9780446694971) Kitchen Confidential - Anthony Bourdain (9780747553557) Breaking Dawn (The Twilight Saga book 4) - Stephenie Meyer (9780316328326) Eclipse (The Twilight Saga book 3) - Stephenie Meyer (9780316328142) The Cuckoo\u0026rsquo;s Egg - Cliff Stoll (9781416507789) The Truth - Terry Pratchett (9780062307361) 2010 (18)\nThe Girl Who Kicked the Hornets\u0026rsquo; Nest (Millennium book 3) - Stieg Larsson (9780307454560) The Girl Who Played with Fire (Millennium book 2) - Stieg Larsson (9780307454553) The Girl with the Dragon Tattoo (Millennium book 1) - Stieg Larsson (9780307454546) Total Poker - David Spanier (9780671224417) Going Postal - Terry Pratchett (9780062334978) Century Rain - Alastair Reynolds (9780316462662) Ender\u0026rsquo;s Game (The Ender Saga book 1) - Orson Scott Card (9781250773029) Making Money - Terry Pratchett (9780062334992) A Thief of Time - Terry Pratchett (9780062307392) Woken Furies - Richard K. Morgan (9780575081277) The Magicians - Lev Grossman (9780099534440) New Moon (The Twilight Saga book 2) - Stephenie Meyer (9780316327787) Broken Angels - Richard K. Morgan (9780345457714) Altered Carbon - Richard K. Morgan (9780345457684) Starship Troopers - Robert A. Heinlein (9780441014101) Twilight (The Twilight Saga book 1) - Stephenie Meyer (9780316327336) Blow Fly - Patricia Cornwell (9780425266724) Guards Guards - Terry Pratchett (9780063373761) Earlier\nThe Fellowship of the Ring (The Lord of the Rings book 1) - J.R.R. Tolkien (9780547928210) The Two Towers (The Lord of the Rings book 2) - J.R.R. Tolkien (9780345339713) The Return of the King (The Lord of the Rings book 3) - J.R.R. Tolkien (9780547952048) Harry Potter and the Philosopher\u0026rsquo;s Stone - J. K. Rowling Harry Potter and the Chamber of Secrets - J. K. Rowling Harry Potter and the Prisoner of Azkaban - J. K. Rowling Harry Potter and the Goblet of Fire - J. K. Rowling Harry Potter and the Order of the Phoenix - J. K. Rowling Harry Potter and the Half-Blood Prince - J. K. Rowling Harry Potter and the Deathly Hallows J. K. Rowling Birds\u0026rsquo; Nest Soup - Hanna Greally (9780900372391) The Da Vinci Code - Dan Brown (9780307277671) Ender\u0026rsquo;s Game - Orson Scott Card (9781904233022) Reading Preferences Summary (Genres \u0026amp; Themes) # This is what ChatGPT thought about my read book list.\nBased on the books you\u0026rsquo;ve read, here are the common genres and themes that summarize your reading preferences:\nFantasy and Epic Fantasy # You frequently read books with intricate, expansive worlds, such as:\nThe Wheel of Time — Robert Jordan The Farseer Trilogy — Robin Hobb His Dark Materials — Philip Pullman The Book of the Ice — Mark Lawrence You seem to enjoy long-running series, often involving magic, deep world-building, and strong character development.\nScience Fiction # You have a strong interest in sci-fi, especially when it blends with philosophical or dystopian elements. Examples include:\nEnder\u0026rsquo;s Game — Orson Scott Card Altered Carbon — Richard K. Morgan Starship Troopers — Robert Heinlein The Bobiverse series — Dennis E. Taylor Historical Fiction / Mystery # You seem to enjoy historical narratives with a mystery twist, such as:\nThe Shardlake series — C.J. Sansom The Pillars of the Earth — Ken Follett Murder on the Orient Express — Agatha Christie Spy Thrillers and Cold War Espionage # Authors like John le Carré and Len Deighton feature prominently, indicating a preference for complex spy thrillers set in politically tense periods like the Cold War.\nSatire and Humor # You enjoy satire and light-hearted humor, particularly:\nTerry Pratchett’s Discworld series Three Men in a Boat — Jerome K. Jerome Classic and Literary Fiction # Your reading list includes classic works such as:\n1984 — George Orwell The Catcher in the Rye — J.D. Salinger Of Mice and Men — John Steinbeck This suggests an appreciation for thought-provoking and enduring literature.\nMemoirs and Non-fiction # Though less frequent, you\u0026rsquo;ve explored memoirs and non-fiction, such as:\nKitchen Confidential — Anthony Bourdain The Code Book — Simon Singh This reflects an interest in real-world insights and personal stories.\nSummary # In summary, you enjoy a mix of fantasy, science fiction, spy thrillers, historical mysteries, and literary classics, with a preference for:\nintricate plots well-developed characters speculative and philosophical themes ","date":"2 September 2026","externalUrl":null,"permalink":"/projects/booklist/","section":"Projects","summary":"Books I’ve read per year. Title - Author (ISBN) (https://isbnsearch.org/)\n","title":"Book List","type":"projects"},{"content":"","date":"2 September 2026","externalUrl":null,"permalink":"/tags/other/","section":"Tags","summary":"","title":"Other","type":"tags"},{"content":"","date":"2 September 2026","externalUrl":null,"permalink":"/projects/","section":"Projects","summary":"","title":"Projects","type":"projects"},{"content":"","date":"2 September 2026","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"2 September 2026","externalUrl":null,"permalink":"/authors/thomas/","section":"Authors","summary":"","title":"Thomas","type":"authors"},{"content":"","date":"2 September 2026","externalUrl":null,"permalink":"/","section":"TomsWeb","summary":"","title":"TomsWeb","type":"page"},{"content":"","date":"11 July 2026","externalUrl":null,"permalink":"/tags/pi/","section":"Tags","summary":"","title":"Pi","type":"tags"},{"content":"","date":"11 July 2026","externalUrl":null,"permalink":"/tags/weather/","section":"Tags","summary":"","title":"Weather","type":"tags"},{"content":" Background # I have always had an interest in weather so along with my interest in science and computers being able to monitor weather has interested me. One of my early idea\u0026rsquo;s of a project was to build on and situate it in my parents house in West Clare, Ireland. It would have lots of rainfall and interesting wind paterns. This goes back to 2006 when I bought a Gumstix single board computer. With the idea that it could form an embedded like setup. A Gumstix Connex 400xm-bt was an arm based board smaller than a raspberry pi but came with a price tag of $200. However this didn\u0026rsquo;t work out, and I can\u0026rsquo;t remember what happened. However in 2010 I bought a few Asus Eee PC 701SD 7\u0026quot; 0.9 GHz. These were a short lived class device that were popular before tablets cam on the scene. The keyboards were mostly too small and the spec was not good enough for windows, but you could run an ok Linux setup. Single core 900Mhz, half a gig of ram and 8G of SD card class storage. They were i386 arch so 32bit and even as I got mine they were no longer desirable so I manged to get a few for about £50-60 each, I got a few thinking it would have good to have spares and good to have a 2nd system to dev on while at home. The setup of this predates my writing projects and such up so I don\u0026rsquo;t have many records of the setup. It ran Debian, it used a 1-wire to usb converter for sensors, had a 3G dongle for Internet access to transfer data and ran w1retap to perform the logging. This ran fine for a number of years, however life got in the way and the station fell into disrepair sometime between 2018 and 2019. The batteries in the laptop expired, which mean that any power cut to the house would turn the laptop off which would need manually turning back on. I had planned on resurrecting it but never got round to it and more recently the news about i386 being retired means that I think it\u0026rsquo;s time to put these old devices out to pasture.\nStation 2026 # It\u0026rsquo;s a new world now for building these types of projects. I think it\u0026rsquo;s now far easier to get something setup, this I think is in short because of the Raspberry Pi revolution. Plainly the new station will have a Raspberry Pi as it\u0026rsquo;s hub. Originally I planned to use of of the Pi 3\u0026rsquo;s I had from my parts bin, however I was worried about the lack of real time clock, paired with no Internet access is a recipe for invalid data collection. I also remembered that the new Pi 5 has a built in RTC as long as you connect a button cell. Even more recently there is an IO board for the Pi module that has a button cell holder along with a metal case. So I\u0026rsquo;ve opted for something brand new. With any luck it will last 10 years.\nThe plan is similar have w1retap runnong on Debian Collecting data. I was never a fan of the dongle coming out of the laptop, it was also hard to maintain while on site and has no off site management. The new setup has also got to fit in a carry oh bag for the airport, so a self contained switch/router type case if ideal rather than an array of boards and wires.\nParts # Pi Hut\nRaspberry Pi Compute Module 5 IO Case REV2 £14.40 Raspberry Pi Compute Module 5 IO Board REV2 £19.20 Raspberry Pi Compute Module 4/5 Antenna Kit £4.80 Raspberry Pi Compute Module 5 Passive Cooler £4.80 Raspberry Pi Compute Module 5 32GB / 16GB / Wireless £312.00 Raspberry Pi 45W USB-C Power Supply UK £14.40 Amazon\nESP32 ESP32-C3 * 5 £19.99 Pimoroni\nClipper LTE 4G Breakout (SP/CE) × 1 Board Only £16.25 8 Pin JST-SH Cable (SP/CE) JST-SH to DuPont sockets £1.50 LTE 4G Antenna × 1 Medium Stick (108mm) £4.00 LTE 4G Antenna × 1 Right Angle SMA Extension Cable (150mm) £3.25 Provisoning # Put jumper on ee disable boot jumper Connect usb3 cable from host to pi run rpiboot from https://github.com/raspberrypi/usbboot.git write image 2026-06-18-raspios-trixie-arm64-lite.img\nBoot, get keyboard, add user thomas login sudo raspi-config, System Option -\u0026gt; Wirelwess LAN\nhostnamectl set-hostname piloggercol01.unix.phe.gov.uk\nsystemctl enable ssh; systemctl start ssh thomas@192.168.7.154\nhostnamectl hostname labradorite\napt-get install minicom\nSet serial Console\n/boot/firmware/config.txt enable_uart=1\nLinux serial console # dtoverlay=uart0-pi5\nLTE modem # dtoverlay=uart2\n/boot/firmware/cmdline.txt console=tty1 console=serial0,115200\nhttps://pinout.xyz/\nUSB-TTL Cable\tRaspberry Pi GPIO NanoBMC Pin 4 (5V) 5V Black (GND) Pin 6 (GND) GND Yellow (RX)\tPin 8 (GPIO14 / TX) GPIO0 Orange (TX) Pin 10 (GPIO15 / RX) GPIO1 Pin GPIO4\nUART4 Signal\tGPIO\tPhysical Pin TXD4\tGPIO8\tPin 24 RXD4\tGPIO9\tPin 21\nGND 20 Black GND - Ground (this is pin 1 on the SP/CE connector, nearest the SIM card holder) GPIO17 11 Brown PWRKEY - Power key pin, needs to be toggled low and then high to power up the module GPIO04 7 Purple RX - UART input to breakout GPIO22 15 Blue RESET - Reset pin, pull high to keep breakout active NC nc Green NETLIGHT - Output from LTE module, for blinking a LED when there is a network connection. GPIO05 29 Yellow TX - UART output from the breakout 3V3 1 Orange VDDIO - IO voltage input, 3.0 - 3.6V recommended for reliable IO. Low current consumption. 5V 2 RED VDD - 3.7V - 6.0V power input to the breakout (scroll down for current consumption info)\nkeep modem out of reset # pinctrl set 22 op dh\npulse power key # pinctrl set 17 op dl sleep 1 pinctrl set 17 op dh\nminicom ama2\nAT OK AT+CMEE=2 OK ATI Manufacturer: SIMCOM INCORPORATED Model: A7683E-LBXS Revision: V11.0.01 IMEI: 862095064633685\nOK AT+CGMM A7683E-LBXS\nOK AT+CGMR +CGMR: 22110B06A7683M6A\nOK AT+GSN 862095064633685\nOK\nOK AT+CPIN? +CPIN: READY\nOK AT+CIMI 234103006567962\napt install modemmanager network-manager lsof ppp\ncat \u0026gt;/etc/udev/rules.d/80-ttyama2-modemmanager.rules \u0026laquo;\u0026lsquo;EOF\u0026rsquo; ACTION==\u0026ldquo;add|change\u0026rdquo;, SUBSYSTEM==\u0026ldquo;tty\u0026rdquo;, KERNEL==\u0026ldquo;ttyAMA2\u0026rdquo;, ENV{ID_MM_CANDIDATE}=\u0026ldquo;1\u0026rdquo; EOF\n/etc/chatscripts/simbase /etc/ppp/peers/lte\n","date":"11 July 2026","externalUrl":null,"permalink":"/projects/weatherstation/","section":"Projects","summary":"Background # I have always had an interest in weather so along with my interest in science and computers being able to monitor weather has interested me. One of my early idea’s of a project was to build on and situate it in my parents house in West Clare, Ireland. It would have lots of rainfall and interesting wind paterns. This goes back to 2006 when I bought a Gumstix single board computer. With the idea that it could form an embedded like setup. A Gumstix Connex 400xm-bt was an arm based board smaller than a raspberry pi but came with a price tag of $200. However this didn’t work out, and I can’t remember what happened. However in 2010 I bought a few Asus Eee PC 701SD 7\" 0.9 GHz. These were a short lived class device that were popular before tablets cam on the scene. The keyboards were mostly too small and the spec was not good enough for windows, but you could run an ok Linux setup. Single core 900Mhz, half a gig of ram and 8G of SD card class storage. They were i386 arch so 32bit and even as I got mine they were no longer desirable so I manged to get a few for about £50-60 each, I got a few thinking it would have good to have spares and good to have a 2nd system to dev on while at home. The setup of this predates my writing projects and such up so I don’t have many records of the setup. It ran Debian, it used a 1-wire to usb converter for sensors, had a 3G dongle for Internet access to transfer data and ran w1retap to perform the logging. This ran fine for a number of years, however life got in the way and the station fell into disrepair sometime between 2018 and 2019. The batteries in the laptop expired, which mean that any power cut to the house would turn the laptop off which would need manually turning back on. I had planned on resurrecting it but never got round to it and more recently the news about i386 being retired means that I think it’s time to put these old devices out to pasture.\n","title":"Weather Station 2026","type":"projects"},{"content":"","date":"1 May 2026","externalUrl":null,"permalink":"/tags/ethernet/","section":"Tags","summary":"","title":"Ethernet","type":"tags"},{"content":"","date":"1 May 2026","externalUrl":null,"permalink":"/tags/linux/","section":"Tags","summary":"","title":"Linux","type":"tags"},{"content":"","date":"1 May 2026","externalUrl":null,"permalink":"/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":"Having worked over high lateny powerline adapters I\u0026rsquo;m now wary of anything that could introduce latency into my daily life. Having a low latency link is just nicer when you spend most of you day on Microsoft Teams calls. Currenty my packets traverse my office swtich, core switch, router, back to the core and then to the NTU.\nI currently have a \u0026ldquo;Toshiba Thunderbolt 3 Dock\u0026rdquo; thats about 7 years old (they are still avaliable for ~£100) and I\u0026rsquo;m thinking of swtiching it out for a new usb dock. So I\u0026rsquo;ve decided to run a very quick \u0026ldquo;benchmark\u0026rdquo; to compaire them.\nI used a Lenovo ThinkPad X13 Gen 2i to run a ping to the default gateway. First using the Tunderbolt dock and then using the Kensington SD4841P EQ USB-c Triple Video Driverless Dock. Here are the results\nResults # $ ping -n -c 100 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.176 ms 64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=0.237 ms 64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=0.240 ms 64 bytes from 192.168.0.1: icmp_seq=4 ttl=64 time=0.193 ms 64 bytes from 192.168.0.1: icmp_seq=5 ttl=64 time=0.245 ms 64 bytes from 192.168.0.1: icmp_seq=6 ttl=64 time=0.238 ms 64 bytes from 192.168.0.1: icmp_seq=7 ttl=64 time=0.276 ms 64 bytes from 192.168.0.1: icmp_seq=8 ttl=64 time=0.251 ms 64 bytes from 192.168.0.1: icmp_seq=9 ttl=64 time=0.309 ms 64 bytes from 192.168.0.1: icmp_seq=10 ttl=64 time=0.259 ms 64 bytes from 192.168.0.1: icmp_seq=11 ttl=64 time=0.236 ms 64 bytes from 192.168.0.1: icmp_seq=12 ttl=64 time=0.258 ms 64 bytes from 192.168.0.1: icmp_seq=13 ttl=64 time=0.263 ms 64 bytes from 192.168.0.1: icmp_seq=14 ttl=64 time=0.277 ms 64 bytes from 192.168.0.1: icmp_seq=15 ttl=64 time=7.80 ms 64 bytes from 192.168.0.1: icmp_seq=16 ttl=64 time=0.233 ms 64 bytes from 192.168.0.1: icmp_seq=17 ttl=64 time=0.290 ms 64 bytes from 192.168.0.1: icmp_seq=18 ttl=64 time=0.262 ms 64 bytes from 192.168.0.1: icmp_seq=19 ttl=64 time=0.242 ms 64 bytes from 192.168.0.1: icmp_seq=20 ttl=64 time=0.244 ms 64 bytes from 192.168.0.1: icmp_seq=21 ttl=64 time=0.271 ms 64 bytes from 192.168.0.1: icmp_seq=22 ttl=64 time=0.238 ms 64 bytes from 192.168.0.1: icmp_seq=23 ttl=64 time=0.236 ms 64 bytes from 192.168.0.1: icmp_seq=24 ttl=64 time=0.172 ms 64 bytes from 192.168.0.1: icmp_seq=25 ttl=64 time=0.176 ms 64 bytes from 192.168.0.1: icmp_seq=26 ttl=64 time=0.136 ms 64 bytes from 192.168.0.1: icmp_seq=27 ttl=64 time=0.223 ms 64 bytes from 192.168.0.1: icmp_seq=28 ttl=64 time=0.231 ms 64 bytes from 192.168.0.1: icmp_seq=29 ttl=64 time=0.218 ms 64 bytes from 192.168.0.1: icmp_seq=30 ttl=64 time=0.254 ms 64 bytes from 192.168.0.1: icmp_seq=31 ttl=64 time=0.278 ms 64 bytes from 192.168.0.1: icmp_seq=32 ttl=64 time=0.239 ms 64 bytes from 192.168.0.1: icmp_seq=33 ttl=64 time=0.244 ms 64 bytes from 192.168.0.1: icmp_seq=34 ttl=64 time=0.252 ms 64 bytes from 192.168.0.1: icmp_seq=35 ttl=64 time=0.261 ms 64 bytes from 192.168.0.1: icmp_seq=36 ttl=64 time=0.241 ms 64 bytes from 192.168.0.1: icmp_seq=37 ttl=64 time=0.254 ms 64 bytes from 192.168.0.1: icmp_seq=38 ttl=64 time=0.280 ms 64 bytes from 192.168.0.1: icmp_seq=39 ttl=64 time=0.281 ms 64 bytes from 192.168.0.1: icmp_seq=40 ttl=64 time=0.252 ms 64 bytes from 192.168.0.1: icmp_seq=41 ttl=64 time=0.249 ms 64 bytes from 192.168.0.1: icmp_seq=42 ttl=64 time=0.200 ms 64 bytes from 192.168.0.1: icmp_seq=43 ttl=64 time=0.236 ms 64 bytes from 192.168.0.1: icmp_seq=44 ttl=64 time=0.227 ms 64 bytes from 192.168.0.1: icmp_seq=45 ttl=64 time=0.295 ms 64 bytes from 192.168.0.1: icmp_seq=46 ttl=64 time=0.239 ms 64 bytes from 192.168.0.1: icmp_seq=47 ttl=64 time=0.234 ms 64 bytes from 192.168.0.1: icmp_seq=48 ttl=64 time=0.239 ms 64 bytes from 192.168.0.1: icmp_seq=49 ttl=64 time=0.207 ms 64 bytes from 192.168.0.1: icmp_seq=50 ttl=64 time=0.247 ms 64 bytes from 192.168.0.1: icmp_seq=51 ttl=64 time=0.284 ms 64 bytes from 192.168.0.1: icmp_seq=52 ttl=64 time=0.246 ms 64 bytes from 192.168.0.1: icmp_seq=53 ttl=64 time=0.234 ms 64 bytes from 192.168.0.1: icmp_seq=54 ttl=64 time=0.281 ms 64 bytes from 192.168.0.1: icmp_seq=55 ttl=64 time=0.206 ms 64 bytes from 192.168.0.1: icmp_seq=56 ttl=64 time=0.280 ms 64 bytes from 192.168.0.1: icmp_seq=57 ttl=64 time=0.247 ms 64 bytes from 192.168.0.1: icmp_seq=58 ttl=64 time=13.4 ms 64 bytes from 192.168.0.1: icmp_seq=59 ttl=64 time=0.255 ms 64 bytes from 192.168.0.1: icmp_seq=60 ttl=64 time=0.283 ms 64 bytes from 192.168.0.1: icmp_seq=61 ttl=64 time=0.244 ms 64 bytes from 192.168.0.1: icmp_seq=62 ttl=64 time=0.263 ms 64 bytes from 192.168.0.1: icmp_seq=63 ttl=64 time=0.268 ms 64 bytes from 192.168.0.1: icmp_seq=64 ttl=64 time=14.6 ms 64 bytes from 192.168.0.1: icmp_seq=65 ttl=64 time=0.245 ms 64 bytes from 192.168.0.1: icmp_seq=66 ttl=64 time=0.174 ms 64 bytes from 192.168.0.1: icmp_seq=67 ttl=64 time=0.183 ms 64 bytes from 192.168.0.1: icmp_seq=68 ttl=64 time=0.230 ms 64 bytes from 192.168.0.1: icmp_seq=69 ttl=64 time=0.234 ms 64 bytes from 192.168.0.1: icmp_seq=70 ttl=64 time=0.258 ms 64 bytes from 192.168.0.1: icmp_seq=71 ttl=64 time=0.256 ms 64 bytes from 192.168.0.1: icmp_seq=72 ttl=64 time=0.158 ms 64 bytes from 192.168.0.1: icmp_seq=73 ttl=64 time=0.198 ms 64 bytes from 192.168.0.1: icmp_seq=74 ttl=64 time=0.246 ms 64 bytes from 192.168.0.1: icmp_seq=75 ttl=64 time=0.244 ms 64 bytes from 192.168.0.1: icmp_seq=76 ttl=64 time=0.234 ms 64 bytes from 192.168.0.1: icmp_seq=77 ttl=64 time=0.194 ms 64 bytes from 192.168.0.1: icmp_seq=78 ttl=64 time=0.249 ms 64 bytes from 192.168.0.1: icmp_seq=79 ttl=64 time=0.243 ms 64 bytes from 192.168.0.1: icmp_seq=80 ttl=64 time=0.230 ms 64 bytes from 192.168.0.1: icmp_seq=81 ttl=64 time=0.252 ms 64 bytes from 192.168.0.1: icmp_seq=82 ttl=64 time=0.262 ms 64 bytes from 192.168.0.1: icmp_seq=83 ttl=64 time=0.236 ms 64 bytes from 192.168.0.1: icmp_seq=84 ttl=64 time=0.242 ms 64 bytes from 192.168.0.1: icmp_seq=85 ttl=64 time=0.216 ms 64 bytes from 192.168.0.1: icmp_seq=86 ttl=64 time=0.246 ms 64 bytes from 192.168.0.1: icmp_seq=87 ttl=64 time=0.251 ms 64 bytes from 192.168.0.1: icmp_seq=88 ttl=64 time=0.234 ms 64 bytes from 192.168.0.1: icmp_seq=89 ttl=64 time=0.237 ms 64 bytes from 192.168.0.1: icmp_seq=90 ttl=64 time=0.242 ms 64 bytes from 192.168.0.1: icmp_seq=91 ttl=64 time=0.205 ms 64 bytes from 192.168.0.1: icmp_seq=92 ttl=64 time=0.223 ms 64 bytes from 192.168.0.1: icmp_seq=93 ttl=64 time=0.229 ms 64 bytes from 192.168.0.1: icmp_seq=94 ttl=64 time=0.258 ms 64 bytes from 192.168.0.1: icmp_seq=95 ttl=64 time=0.206 ms 64 bytes from 192.168.0.1: icmp_seq=96 ttl=64 time=0.252 ms 64 bytes from 192.168.0.1: icmp_seq=97 ttl=64 time=0.272 ms 64 bytes from 192.168.0.1: icmp_seq=98 ttl=64 time=0.264 ms 64 bytes from 192.168.0.1: icmp_seq=99 ttl=64 time=0.183 ms 64 bytes from 192.168.0.1: icmp_seq=100 ttl=64 time=0.248 ms --- 192.168.0.1 ping statistics --- 100 packets transmitted, 100 received, 0% packet loss, time 101253ms rtt min/avg/max/mdev = 0.136/0.590/14.592/2.061 ms $ USB # $ ping -n -c 100 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.207 ms 64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=0.233 ms 64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=0.180 ms 64 bytes from 192.168.0.1: icmp_seq=4 ttl=64 time=0.184 ms 64 bytes from 192.168.0.1: icmp_seq=5 ttl=64 time=0.161 ms 64 bytes from 192.168.0.1: icmp_seq=6 ttl=64 time=0.193 ms 64 bytes from 192.168.0.1: icmp_seq=7 ttl=64 time=0.209 ms 64 bytes from 192.168.0.1: icmp_seq=8 ttl=64 time=0.216 ms 64 bytes from 192.168.0.1: icmp_seq=9 ttl=64 time=0.199 ms 64 bytes from 192.168.0.1: icmp_seq=10 ttl=64 time=0.224 ms 64 bytes from 192.168.0.1: icmp_seq=11 ttl=64 time=0.221 ms 64 bytes from 192.168.0.1: icmp_seq=12 ttl=64 time=0.217 ms 64 bytes from 192.168.0.1: icmp_seq=13 ttl=64 time=8.93 ms 64 bytes from 192.168.0.1: icmp_seq=14 ttl=64 time=0.184 ms 64 bytes from 192.168.0.1: icmp_seq=15 ttl=64 time=0.202 ms 64 bytes from 192.168.0.1: icmp_seq=16 ttl=64 time=0.190 ms 64 bytes from 192.168.0.1: icmp_seq=17 ttl=64 time=0.198 ms 64 bytes from 192.168.0.1: icmp_seq=18 ttl=64 time=0.165 ms 64 bytes from 192.168.0.1: icmp_seq=19 ttl=64 time=0.184 ms 64 bytes from 192.168.0.1: icmp_seq=20 ttl=64 time=0.190 ms 64 bytes from 192.168.0.1: icmp_seq=21 ttl=64 time=0.182 ms 64 bytes from 192.168.0.1: icmp_seq=22 ttl=64 time=0.183 ms 64 bytes from 192.168.0.1: icmp_seq=23 ttl=64 time=54.6 ms 64 bytes from 192.168.0.1: icmp_seq=24 ttl=64 time=5.86 ms 64 bytes from 192.168.0.1: icmp_seq=25 ttl=64 time=0.186 ms 64 bytes from 192.168.0.1: icmp_seq=26 ttl=64 time=0.204 ms 64 bytes from 192.168.0.1: icmp_seq=27 ttl=64 time=0.183 ms 64 bytes from 192.168.0.1: icmp_seq=28 ttl=64 time=0.190 ms 64 bytes from 192.168.0.1: icmp_seq=29 ttl=64 time=0.223 ms 64 bytes from 192.168.0.1: icmp_seq=30 ttl=64 time=20.6 ms 64 bytes from 192.168.0.1: icmp_seq=31 ttl=64 time=0.171 ms 64 bytes from 192.168.0.1: icmp_seq=32 ttl=64 time=0.142 ms 64 bytes from 192.168.0.1: icmp_seq=33 ttl=64 time=0.200 ms 64 bytes from 192.168.0.1: icmp_seq=34 ttl=64 time=0.210 ms 64 bytes from 192.168.0.1: icmp_seq=35 ttl=64 time=0.186 ms 64 bytes from 192.168.0.1: icmp_seq=36 ttl=64 time=0.165 ms 64 bytes from 192.168.0.1: icmp_seq=37 ttl=64 time=0.181 ms 64 bytes from 192.168.0.1: icmp_seq=38 ttl=64 time=0.183 ms 64 bytes from 192.168.0.1: icmp_seq=39 ttl=64 time=0.184 ms 64 bytes from 192.168.0.1: icmp_seq=40 ttl=64 time=0.204 ms 64 bytes from 192.168.0.1: icmp_seq=41 ttl=64 time=0.203 ms 64 bytes from 192.168.0.1: icmp_seq=42 ttl=64 time=0.185 ms 64 bytes from 192.168.0.1: icmp_seq=43 ttl=64 time=0.192 ms 64 bytes from 192.168.0.1: icmp_seq=44 ttl=64 time=0.187 ms 64 bytes from 192.168.0.1: icmp_seq=45 ttl=64 time=0.163 ms 64 bytes from 192.168.0.1: icmp_seq=46 ttl=64 time=0.191 ms 64 bytes from 192.168.0.1: icmp_seq=47 ttl=64 time=12.6 ms 64 bytes from 192.168.0.1: icmp_seq=48 ttl=64 time=0.182 ms 64 bytes from 192.168.0.1: icmp_seq=49 ttl=64 time=0.171 ms 64 bytes from 192.168.0.1: icmp_seq=50 ttl=64 time=0.184 ms 64 bytes from 192.168.0.1: icmp_seq=51 ttl=64 time=0.183 ms 64 bytes from 192.168.0.1: icmp_seq=52 ttl=64 time=0.151 ms 64 bytes from 192.168.0.1: icmp_seq=53 ttl=64 time=0.188 ms 64 bytes from 192.168.0.1: icmp_seq=54 ttl=64 time=0.183 ms 64 bytes from 192.168.0.1: icmp_seq=55 ttl=64 time=0.177 ms 64 bytes from 192.168.0.1: icmp_seq=56 ttl=64 time=0.174 ms 64 bytes from 192.168.0.1: icmp_seq=57 ttl=64 time=0.173 ms 64 bytes from 192.168.0.1: icmp_seq=58 ttl=64 time=0.201 ms 64 bytes from 192.168.0.1: icmp_seq=59 ttl=64 time=0.182 ms 64 bytes from 192.168.0.1: icmp_seq=60 ttl=64 time=0.198 ms 64 bytes from 192.168.0.1: icmp_seq=61 ttl=64 time=0.210 ms 64 bytes from 192.168.0.1: icmp_seq=62 ttl=64 time=0.189 ms 64 bytes from 192.168.0.1: icmp_seq=63 ttl=64 time=0.216 ms 64 bytes from 192.168.0.1: icmp_seq=64 ttl=64 time=0.148 ms 64 bytes from 192.168.0.1: icmp_seq=65 ttl=64 time=0.206 ms 64 bytes from 192.168.0.1: icmp_seq=66 ttl=64 time=0.209 ms 64 bytes from 192.168.0.1: icmp_seq=67 ttl=64 time=0.195 ms 64 bytes from 192.168.0.1: icmp_seq=68 ttl=64 time=0.203 ms 64 bytes from 192.168.0.1: icmp_seq=69 ttl=64 time=0.215 ms 64 bytes from 192.168.0.1: icmp_seq=70 ttl=64 time=0.130 ms 64 bytes from 192.168.0.1: icmp_seq=71 ttl=64 time=18.3 ms 64 bytes from 192.168.0.1: icmp_seq=72 ttl=64 time=0.187 ms 64 bytes from 192.168.0.1: icmp_seq=73 ttl=64 time=24.6 ms 64 bytes from 192.168.0.1: icmp_seq=74 ttl=64 time=0.153 ms 64 bytes from 192.168.0.1: icmp_seq=75 ttl=64 time=0.136 ms 64 bytes from 192.168.0.1: icmp_seq=76 ttl=64 time=0.130 ms 64 bytes from 192.168.0.1: icmp_seq=77 ttl=64 time=0.179 ms 64 bytes from 192.168.0.1: icmp_seq=78 ttl=64 time=0.190 ms 64 bytes from 192.168.0.1: icmp_seq=79 ttl=64 time=0.203 ms 64 bytes from 192.168.0.1: icmp_seq=80 ttl=64 time=0.185 ms 64 bytes from 192.168.0.1: icmp_seq=81 ttl=64 time=0.159 ms 64 bytes from 192.168.0.1: icmp_seq=82 ttl=64 time=0.212 ms 64 bytes from 192.168.0.1: icmp_seq=83 ttl=64 time=0.203 ms 64 bytes from 192.168.0.1: icmp_seq=84 ttl=64 time=0.193 ms 64 bytes from 192.168.0.1: icmp_seq=85 ttl=64 time=0.196 ms 64 bytes from 192.168.0.1: icmp_seq=86 ttl=64 time=0.187 ms 64 bytes from 192.168.0.1: icmp_seq=87 ttl=64 time=0.166 ms 64 bytes from 192.168.0.1: icmp_seq=88 ttl=64 time=0.188 ms 64 bytes from 192.168.0.1: icmp_seq=89 ttl=64 time=0.195 ms 64 bytes from 192.168.0.1: icmp_seq=90 ttl=64 time=12.1 ms 64 bytes from 192.168.0.1: icmp_seq=91 ttl=64 time=0.182 ms 64 bytes from 192.168.0.1: icmp_seq=92 ttl=64 time=0.198 ms 64 bytes from 192.168.0.1: icmp_seq=93 ttl=64 time=0.194 ms 64 bytes from 192.168.0.1: icmp_seq=94 ttl=64 time=0.205 ms 64 bytes from 192.168.0.1: icmp_seq=95 ttl=64 time=0.189 ms 64 bytes from 192.168.0.1: icmp_seq=96 ttl=64 time=0.195 ms 64 bytes from 192.168.0.1: icmp_seq=97 ttl=64 time=0.197 ms 64 bytes from 192.168.0.1: icmp_seq=98 ttl=64 time=0.196 ms 64 bytes from 192.168.0.1: icmp_seq=99 ttl=64 time=0.179 ms 64 bytes from 192.168.0.1: icmp_seq=100 ttl=64 time=0.194 ms --- 192.168.0.1 ping statistics --- 100 packets transmitted, 100 received, 0% packet loss, time 101101ms rtt min/avg/max/mdev = 0.130/1.749/54.566/6.678 ms $ ","date":"1 May 2026","externalUrl":null,"permalink":"/posts/thunderboltvsusbethernet/","section":"Posts","summary":"Having worked over high lateny powerline adapters I’m now wary of anything that could introduce latency into my daily life. Having a low latency link is just nicer when you spend most of you day on Microsoft Teams calls. Currenty my packets traverse my office swtich, core switch, router, back to the core and then to the NTU.\n","title":"Thunderbolt vs USB Ethernet","type":"posts"},{"content":"","date":"20 January 2026","externalUrl":null,"permalink":"/tags/ai/","section":"Tags","summary":"","title":"Ai","type":"tags"},{"content":"","date":"20 January 2026","externalUrl":null,"permalink":"/tags/chatgpt/","section":"Tags","summary":"","title":"Chatgpt","type":"tags"},{"content":"Recently I\u0026rsquo;ve wanted to understand more about using AI/LLM technologies to assist with code creation. I have in the past played with using chatbot style vibe coding. This is where one describes what is desired and the LLM produces an entire program. However I have found that subsequent iterations with further features hard to keep copy and pasting the entire source file, assuming a single source file is required, to be difficult and annoying. I have not really tried with in editor coding. However for the most part the \u0026ldquo;help me write this one function\u0026rdquo; to be smaller picture that I desired, eg I see the power of this being able to modify multiple files at once and update documentation all at the same time. So when I found out about Codex from ChatGPT I was really excited to understand how this works. For me it\u0026rsquo;s the integration with GitHub that make\u0026rsquo;s it really useful. Instead of having to write an ever larger perfect prompt that covers the entire aspect of the functionality, one builds up functionality one GitHub pull request at a time. I liked this concept because it\u0026rsquo;s also how I develop things, eg I start small with basic functionality and then iterate. Given that each unit of work is a pull request it means I can inspect each change to the code base to see if it\u0026rsquo;s making the desired changes or not.\nI\u0026rsquo;m a real believer in scratching ones own itch to really understand a thing, so I decided to try to fully implement a tool I\u0026rsquo;ve wanted for a while by using Codex. I\u0026rsquo;ve wanted something to check Ryanair prices and track them over time. What follows is a summary of this whole process.\nTo skip straight to the code have a look on GitHub: https://github.com/thomasdstewart/ryantrak/ or to look at the output have a look on the GitHub pages site: https://thomasdstewart.github.io/ryantrak/\nThe Codex web user interfaces looks like this: In addition each pull request also has additional details generated for me. I have also given Codex a \u0026ldquo;Custom instruction\u0026rdquo; of \u0026ldquo;Commit messages should follow conventional commit format.\u0026rdquo; So a pull requests end up looking like this: Overall I wrote about 100 sentences over 1,100 words of prompt text, which is about two sides of A4 with size 12 font.\nEach section header below is the ChatGPT summary of my prompt and below each prompt is my actual prompt, the summary ChatGPT has provided describing what it\u0026rsquo;s done and then a link to the GitHub pull request. This shows the entire tool\u0026rsquo;s creation from an empty repo through the 42 prompts I provided to what I\u0026rsquo;m calling version 1.0.\nImplement Ryanair flight checker tool # I want to write a tool that can continuously check ryanair flights every day and graph the result over time. I want to use Python. I want to use Selenium. Initially to keep tings simple lets start with London Stansted to Milan Bergamo Return 22 Aug - 4 Sept 1. My idea is that a single program run can run in a GitHub action, perform the search and record the results. I think initially just keeping the results in a csv file. Can you sketch out most of an implementation. Include updating the readme, the scraper file, the git hub actions, given it\u0026rsquo;s Selenium there will have to be a fair amount of logging and debugging.\nAdded a Selenium-based Ryanair scraper with logging, CSV output, and debug artifact capture for the STN→BGY return search flow. Added a daily GitHub Actions workflow to run the scraper, upload debug artifacts, and commit updated CSV results. Documented setup, usage, workflow behavior, and troubleshooting guidance in the README. https://github.com/thomasdstewart/ryantrak/pull/1\nFix cookie warning before displaying results # It looks from the debug that there is a cookie warning that needs to be clicked before the results are shown.\nAdded cookie banner acceptance handling with multiple selector fallbacks to unblock price scraping, and call it before waiting on the price element. https://github.com/thomasdstewart/ryantrak/pull/2\nAdd flake8 and pre-commit configurations # lets fix some boiler plate in one shot. Lets a a .flake8 file with this in:\n[flake8] max-line-length = 160\nLet\u0026rsquo;s get an initial .pre-commit-config.yaml, usual checks, plus python checks, also ruff, also commitlint\nLet\u0026rsquo;s add a github action dependabot.\nLet\u0026rsquo;s add a github action for Commit Lint.\nLet\u0026rsquo;s also a github action to lint action for flake8 and ruff.\nLet\u0026rsquo;s also have github action to run pytest.\nAdded flake8 configuration and pre-commit hooks (including ruff and commitlint) plus commitlint settings for conventional commits. Added Dependabot configuration to track GitHub Actions and pip updates. Added GitHub Actions workflows for commit linting, Python linting (flake8/ruff), and pytest runs. https://github.com/thomasdstewart/ryantrak/pull/3\nDependabot Interlude # These next 6 pull requests were Dependabot updating versions of various things\nhttps://github.com/thomasdstewart/ryantrak/pull/4 https://github.com/thomasdstewart/ryantrak/pull/5 https://github.com/thomasdstewart/ryantrak/pull/6 https://github.com/thomasdstewart/ryantrak/pull/7 https://github.com/thomasdstewart/ryantrak/pull/8 https://github.com/thomasdstewart/ryantrak/pull/9 Update search year to 2026 # Can you update the year in the search from 2024 to 2026\nUpdated the default departure and return dates to 2026 for the search arguments. https://github.com/thomasdstewart/ryantrak/pull/10\nCapture flight time in search results # The search will return more than one flight make sure to capture the time as well. we have depart_date and return+date, and now also flight_time. I think we need a depart_time and a return_time. It needs to capture both.\nReplaced the single flight_time CSV field with separate depart_time and return_time columns and updated the FlightOption model accordingly. Added multi-time extraction to capture outbound and return times per flight card, and wrote both values into CSV rows for each option. https://github.com/thomasdstewart/ryantrak/pull/11\nUpdate GitHub Action year to 2026 # the github action uses 2024 rather than 2026 (the current year)\nUpdated the GitHub Actions scraper dates to use 2026 for the departure and return parameters. https://github.com/thomasdstewart/ryantrak/pull/12\nFix CSV pricing extraction issue # There seems to be a problem extracting the pricing values as the CSV files gets \u0026ldquo;missing-price\u0026rdquo;\nAdded normalized price text extraction that checks element text plus common attributes, reducing false “missing-price” results when prices are present but not in visible text nodes. Expanded price selectors and applied page-level price extraction for single-price flows, marking missing prices only when no price text is found. https://github.com/thomasdstewart/ryantrak/pull/13\nAdd pytest tests for data extraction # I want to implement some more tests. Ideally some quick ones in pytest that can run and fail fast without Selenium. The later tests that run Selenium against a downloaded html page allowing offline checking that data extraction works and returns the correct values. We can use the existing search to verify this.\nAdded pytest to dependencies and test harness/fixture scaffolding for offline HTML validation of flight cards. Added unit tests for URL building, text normalization, and CSV writing plus a Selenium offline extraction test for flight cards. https://github.com/thomasdstewart/ryantrak/pull/14\nFix price extraction issue # There seems to be a problem with the price extraction still. The CVS files says \u0026ldquo;missing-price\u0026rdquo;.\nAdded regex-based price extraction fallback and body-text fallback to reduce missing-price results when selectors fail. Added unit coverage for the new price parsing helper. https://github.com/thomasdstewart/ryantrak/pull/15\nUpdate CSV output format and fix logic # Sorry I make a mistake, can you add a time field after the date.\nAdded the requested time column to the CSV schema and populated it from the outbound flight time field. https://github.com/thomasdstewart/ryantrak/pull/16\nUpdate flight dates file with extra rows # Let\u0026rsquo;s update the flight dates file to have 2 extra rows. One with 1 day earlier and 1 with 1 day later.\nAdded one-day earlier and later entries around the existing flight date row in the flight dates CSV. https://github.com/thomasdstewart/ryantrak/pull/21\nParameterize input dates from CSV # Great start, I also want the airports as parameters too.\nAdded origin/destination columns to the date configuration CSV so routes are parameterized alongside dates. Updated the workflow to read origin and destination per CSV row when invoking the scraper. Documented the updated CSV schema in the README. https://github.com/thomasdstewart/ryantrak/pull/20\nFix incorrect origin and destination # It looks like the origin,destination are not being set correctly. For the rows wit return flight they are not correct, eg they need to be swapped.\nSwap origin/destination values for return-leg CSV rows so the return flights are labeled correctly. https://github.com/thomasdstewart/ryantrak/pull/19\nFix issue with missing return flights # This is looking great. Each run returns 4 data rows that seems ok. These are the outbound fights. However the 4 return flights do not show up.\nAdded flight-date tracking for each flight card and assign return-date entries when outbound/return sets are detected so return flights are included in results. Updated CSV rows to use the per-flight date when writing departure/arrival timestamps. https://github.com/thomasdstewart/ryantrak/pull/18\nUpdate flight schedule columns # Let\u0026rsquo;s continue to improve. Instead of date and time columns. Let\u0026rsquo;s have departure_date and arrival_date and have those contain both the date and time of the flight takes off and flight landing.\nReplaced the CSV schema to emit combined departure_date/arrival_date values and added a formatter to build date-time strings for flight rows. Updated unit test expectations to match the new combined date-time columns. Refreshed the sample CSV data to align with the new header and combined date-time values. https://github.com/thomasdstewart/ryantrak/pull/17\nGenerate flight price visualization graphs # Next I\u0026rsquo;d like to try to visualize the data. I want to track how the price of flights changes over time. So from the data/flight_prices.csv file I want to find unique flights, eg looking at orign=STN, destination=BGY, depart_date=2026-08-22T11:35, I can see that on the 2026-01-14 it was £78.62 where as it was £77.70 on the 2026-01-15. So in this case the graph would have capture/scrape date on the x axis and cost on they axis, with the data series being orign=STN, destination=BGY, depart_date=2026-08-22T11:35. I don\u0026rsquo;t want to run any servers to generate them dynamically. I want to use actions to generate these graphs. I think initially these can be generated and stored in the data dir.\nAdded a charting script to generate per-route departure-time price history PNGs from flight_prices.csv. Wired the daily GitHub Actions workflow to generate charts and commit the data/charts outputs alongside price data updates. Documented the chart generation flow and added pandas/matplotlib dependencies. https://github.com/thomasdstewart/ryantrak/pull/22\nSplit daily Ryanair price check tasks # Can you split out the \u0026ldquo;Daily Ryanair price check\u0026rdquo; into two please, one do run the scape and one to generate the graphs an hour later.\nSplit the daily Ryanair workflow into a dedicated scrape workflow that only commits updated price data. Added a separate chart-generation workflow scheduled one hour later to update and commit charts. https://github.com/thomasdstewart/ryantrak/pull/23\nUpdate query dates and clear existing data # Can you change the query dates to 16th August to 1st Sept and 17th August to the 2nd Sept. Also clear out all the existing data I the cab results.\nUpdated the flight date pairs to 2026-08-16/2026-09-01 and 2026-08-17/2026-09-02. Cleared the existing flight price results to just the header row. https://github.com/thomasdstewart/ryantrak/pull/24\nUpdate chart filenames to single underscore # Update the chart filenames to not have two consecutive underscores just one.\nUpdated chart filename generation to use a single underscore separator between slug components. https://github.com/thomasdstewart/ryantrak/pull/25\nDelete existing chat files # Delete the existing chat files\nRemoved the generated chart images from data/charts while keeping the directory tracked with a placeholder file. https://github.com/thomasdstewart/ryantrak/pull/26\nCreate GitHub Actions workflow for pages # I want to use GitHub pages to have a web page that shows an index of all the various graphs. Can you create a workflow for this. I\u0026rsquo;ve turned on GitHub pages, so just need a workflow created.\nAdded a GitHub Pages workflow that builds a static chart index, packages chart assets, and deploys the site on the default branch. https://github.com/thomasdstewart/ryantrak/pull/27\nGenerate graphs in pages workflow # let\u0026rsquo;s generate the graphs as part of the pages workflow and remove the graph generation workflow.\nAdded Python setup, dependency install, and chart generation steps to the Pages workflow so charts are produced during the build before publishing the site. https://github.com/thomasdstewart/ryantrak/pull/28\nRemove charts from repository # Now that the charts are generated in the pages let\u0026rsquo;s delete them from the repo. Also when the failed Scape script runs via actions it doesn\u0026rsquo;t trigger the pages action.\nStopped tracking generated chart PNGs by ignoring data/charts/*.png so charts aren’t kept in the repo going forward. Triggered the Pages workflow after the daily scrape workflow completes on the default branch, ensuring Pages builds even when the scrape workflow finishes without a push trigger. https://github.com/thomasdstewart/ryantrak/pull/29\nClean up project files and dependencies # There is a bit of confusion. The search for the flight will need departure and return, which will return 2 set of flight. Then each result then has a departure and arrival for each flight. Lest go back from scratch to simplify things. When querying the website lets make flight_dates.csv use the same terms date_out and date_return. Then for each flight results use departure_date,arrival_date. This might need to update csv, tests, github workflows, python files, etc.\nUpdated the scraper search configuration to use date_out/date_return inputs while keeping per-flight results as departure_date/arrival_date, including CLI flags and URL construction. Aligned the daily workflow parsing, README usage docs, and flight_dates.csv header with the new date_out/date_return naming for searches. Updated unit tests to construct SearchConfig with date_out/date_return while preserving CSV expectations for departure_date/arrival_date. https://github.com/thomasdstewart/ryantrak/pull/31\nFix chart refresh on action run # The pages action seems to build the charts, but they don\u0026rsquo;t appear to contain the updates charts, eg it seems they are not refreshed when the action runs.\nPinned the Pages workflow checkout to the default branch so chart generation uses the latest committed CSV data when the workflow runs after the daily scrape. https://github.com/thomasdstewart/ryantrak/pull/30\nUpdate GitHub Actions for Hugo site # The GitHub actions workflow for pages needs to be updated for the new Hugo site. It needs to run Hugo and publish the output to pages.\nUpdated the Pages workflow triggers and build steps to generate charts into the Hugo static folder, run Hugo, and publish the public output to Pages. https://github.com/thomasdstewart/ryantrak/pull/33\nImprove web interface with Hugo # I think I\u0026rsquo;d like a nicer web interface. Let\u0026rsquo;s use Hugo and a simple theme. Also I want some sort of drop down to limit which graphs to show.\nAdded a Hugo site with a simple theme, chart grid, and route filter dropdown plus styling and JS behavior for filtering charts. Pointed chart output to site/static/charts and documented the Hugo dashboard workflow in the README. https://github.com/thomasdstewart/ryantrak/pull/32\nFix publish job artifact path # There is a mistake with the pages action. It seems to run the Hugo ok as I see the Hugo output. However the publish job gives this error: \u0026ldquo;Archive artifact tar: public: Cannot open: No such file or directory\u0026rdquo; so I suspect the publish needs to be site/public maybe?\nUpdated the Pages artifact upload path to match Hugo’s output under site/public, avoiding missing directory errors during publish. https://github.com/thomasdstewart/ryantrak/pull/35\nFix action resolution error for pages # I\u0026rsquo;m getting an error on the pages action: Unable to resolve action actions/setup-hugo\nUpdated the Pages workflow to use the maintained peaceiris/actions-hugo action for Hugo setup, resolving the missing actions/setup-hugo reference. https://github.com/thomasdstewart/ryantrak/pull/34\nUpdate Hugo site URL # The Hugo site URL should be https://thomasdstewart.github.io/ryantrak/ hopefully this will avoid the images/ charts giving 404 errors.\nUpdated the Hugo baseURL to the GitHub Pages site to avoid asset 404s. https://github.com/thomasdstewart/ryantrak/pull/36\nUpdate collection interval and flight dates # Let\u0026rsquo;s increase the collection interval, I would like the scrape to run at, 00:00, 06:00, 12:00, 18:00, eg 4 times a day. I would also like to search for more dates. So add more rows to flight_dates.csv, add flights for the 16th and 17th date out and 1st and 2nd return, however add months before and after the current dates, eg cover April, May, June, July and September.\nUpdated the workflow schedule to run the scrape four times daily at 00:00, 06:00, 12:00, and 18:00 UTC. Expanded flight_dates.csv with April, May, June, July, and September date pairs for the 16th/17th outbound and 1st/2nd return windows. https://github.com/thomasdstewart/ryantrak/pull/37\nAdd date filter dropdown # Let\u0026rsquo;s improve the hugo site. The existing dropdown to filter by route is great. Lets add a further dropdown for date.\nAdded a date filter dropdown to the chart controls in the Hugo layout alongside the existing route filter. Populated the date dropdown and applied combined route/date filtering logic for the chart grid status updates. https://github.com/thomasdstewart/ryantrak/pull/38\nAdd full screen graph expansion # I would like to be able to click each individual graph and have it expand to full screen. Also the filter by date and route should update each other, eg picking a route should update the list in date. Also when one flight is selected the result is cropped into a rectangle so most of the graph s not visible.\nMade chart cards keyboard-accessible and added modal markup to support fullscreen expansion of individual charts. Synced route/date filters so each selection refines the other before updating the visible charts. Adjusted chart image sizing and added focus/modal styling to prevent cropping and improve presentation. https://github.com/thomasdstewart/ryantrak/pull/39\nRename Publish Hugo site to Pages # Lets do a little clean up, rename the \u0026ldquo;Publish Hugo site to GitHub Pages\u0026rdquo; to \u0026ldquo;Pages\u0026rdquo; and rename \u0026ldquo;Daily Ryanair price scrape \u0026quot; to \u0026ldquo;Scrape\u0026rdquo;.\nRenamed the daily scrape workflow display name to “Scrape.” Renamed the Hugo Pages workflow display name to “Pages” and updated the workflow trigger reference to “Scrape.” https://github.com/thomasdstewart/ryantrak/pull/40\nParallelize ryanair_scraper.py execution # The Scrape job is taking about 20min. I think it can probably be parallelized a little. I think the ryanair_scraper.py script could be run 4 at a time. This should take the runtime down to about 5 min.\nParallelized the GitHub Actions scrape job to run up to four scrapes at once and merge per-run CSV outputs into the main dataset, with per-route logs/debug folders to avoid collisions. https://github.com/thomasdstewart/ryantrak/pull/41\nRename ryanair-daily.yml to scrape.yml # Rename the ryanair-daily.yml to scrape.yml\nRenamed the Ryanair daily workflow file to scrape.yml. https://github.com/thomasdstewart/ryantrak/pull/42\n","date":"20 January 2026","externalUrl":null,"permalink":"/posts/codexevaluation/","section":"Posts","summary":"Recently I’ve wanted to understand more about using AI/LLM technologies to assist with code creation. I have in the past played with using chatbot style vibe coding. This is where one describes what is desired and the LLM produces an entire program. However I have found that subsequent iterations with further features hard to keep copy and pasting the entire source file, assuming a single source file is required, to be difficult and annoying. I have not really tried with in editor coding. However for the most part the “help me write this one function” to be smaller picture that I desired, eg I see the power of this being able to modify multiple files at once and update documentation all at the same time. So when I found out about Codex from ChatGPT I was really excited to understand how this works. For me it’s the integration with GitHub that make’s it really useful. Instead of having to write an ever larger perfect prompt that covers the entire aspect of the functionality, one builds up functionality one GitHub pull request at a time. I liked this concept because it’s also how I develop things, eg I start small with basic functionality and then iterate. Given that each unit of work is a pull request it means I can inspect each change to the code base to see if it’s making the desired changes or not.\n","title":"Codex Evaluation","type":"posts"},{"content":"","date":"20 January 2026","externalUrl":null,"permalink":"/tags/llm/","section":"Tags","summary":"","title":"Llm","type":"tags"},{"content":"","date":"20 January 2026","externalUrl":null,"permalink":"/tags/python/","section":"Tags","summary":"","title":"Python","type":"tags"},{"content":"","date":"4 April 2025","externalUrl":null,"permalink":"/tags/crc/","section":"Tags","summary":"","title":"Crc","type":"tags"},{"content":" Intro # This is far from exhaustive, but I needed to perform some light benchmarks in CRC, MD5 and SHA hashing. The idea was to compare crc, md5 and sha as well as compare Naive Python hashing to Linux based tools.\nMethod # First a 40G test file was created:\ndd if=/dev/zero bs=1M of=/home/thomas/test count=40960 This short Python script was used to perform CRC, as crc.py:\n#!/usr/bin/env python3 import zlib file_path=\u0026#39;/home/thomas/test\u0026#39; crc32_hash = 0 with open(file_path, \u0026#39;rb\u0026#39;) as f: while chunk := f.read(8192): crc32_hash = zlib.crc32(chunk, crc32_hash) print(format(crc32_hash \u0026amp; 0xFFFFFFFF, \u0026#39;08x\u0026#39;)) and md5.py:\n#!/usr/bin/env python3 import hashlib file_path=\u0026#39;/home/thomas/test\u0026#39; with open(file_path, \u0026#39;rb\u0026#39;) as f: md5 = hashlib.md5() while chunk := f.read(8192): md5.update(chunk) print(md5.hexdigest()) Results # $ time ./crc.py e38a6876 real\t0m46.361s user\t0m21.866s sys\t0m18.824s $ time ./md5.py c45e93a611a7283b3be8a261b4c801b6 real\t1m30.876s user\t1m12.638s sys\t0m17.234s $ time md5sum test c45e93a611a7283b3be8a261b4c801b6 test real\t1m25.931s user\t1m7.712s sys\t0m18.013s $ time sha1sum test 37ca1826b64b9fa14a9893f040c593c69a9a90ad test real\t0m47.863s user\t0m30.807s sys\t0m16.670s $ time sha224sum test 6bfbaf887b888fe307d551cba8b2b8de16ca8f80a59f6069d89b6a0b test real\t0m52.538s user\t0m35.996s sys\t0m16.324s $ time sha256sum test 2109856cb6642099b7ae3ee3bdf2b1bd7f64af573b04958e8cdd278a786252cc test real\t0m40.010s user\t0m27.751s sys\t0m12.037s $ time sha512sum test 68eaa567f0ede602c8a89bae07093d42afa5bb42306c99c2a9f2c124d688e42e323bae405b3ca06f5dc360d13325159e09e2ab89a9c82822356e25344fadc787 test real\t1m15.987s user\t1m0.268s sys\t0m15.133s Graphs # Conclusions # ","date":"4 April 2025","externalUrl":null,"permalink":"/posts/hashbench/","section":"Posts","summary":"Intro # This is far from exhaustive, but I needed to perform some light benchmarks in CRC, MD5 and SHA hashing. The idea was to compare crc, md5 and sha as well as compare Naive Python hashing to Linux based tools.\n","title":"Hash benching","type":"posts"},{"content":"","date":"4 April 2025","externalUrl":null,"permalink":"/tags/md5/","section":"Tags","summary":"","title":"Md5","type":"tags"},{"content":"","date":"4 April 2025","externalUrl":null,"permalink":"/tags/sha/","section":"Tags","summary":"","title":"Sha","type":"tags"},{"content":"Notes on getting back into amateur radio, keeping track of licences and station ideas.\n","date":"16 August 2023","externalUrl":null,"permalink":"/projects/amateurradio/","section":"Projects","summary":"Notes on getting back into amateur radio, keeping track of licences and station ideas.\n","title":"Amateur Radio","type":"projects"},{"content":"","date":"16 August 2023","externalUrl":null,"permalink":"/tags/amateurradio/","section":"Tags","summary":"","title":"Amateurradio","type":"tags"},{"content":"","date":"16 August 2023","externalUrl":null,"permalink":"/tags/hamradio/","section":"Tags","summary":"","title":"Hamradio","type":"tags"},{"content":"","date":"8 December 2022","externalUrl":null,"permalink":"/tags/debian/","section":"Tags","summary":"","title":"Debian","type":"tags"},{"content":"","date":"8 December 2022","externalUrl":null,"permalink":"/tags/networking/","section":"Tags","summary":"","title":"Networking","type":"tags"},{"content":"My home Internet connection is a VDSL/FTTC (fibre to the cabinet) which comes over the telephone line into a BT master socket which has an ADSL filter and requires a modem. The modems are now usually built into the BT Home/Smart Hub CPE (Customer-premises equipment) but I still use a Huawei HG612 standalone modem as I don\u0026rsquo;t particularly like the CPE I was given. So I need a router to talk PPPoE to the modem and also firewall, route and NAT my home lan traffic to the Internet. I used a pair of Linksys WRT3200ACM devices: one as a router and wireless access point and the other as just a wireless access point. However while I was quite happy with them, the overall experience was not great: Ring devices would not connect, Tapo devices would not upgrade firmware and the overall signal quality around the house was not very good. So I upgraded to some Aruba Mesh wireless access points, which turned out to be great. However this left most of the functionality of the WRT3200ACM unneeded in what is quite a large physical footprint, also I don\u0026rsquo;t want to overload the device by turning my internet router into a NAS. Thus I needed to find a replacement device that just does the routing. Also with the new access points I also changed to a managed network switches with vlans to allow guest wifi, an untrusted iot network, etc. Thus the new device could just be a single port router on a stick with a single trunk link.\nMy random set of requirements for the new device (in no order):\ncan do the right tech networking stuff: eg PPPoE, VLANs, NAT, firewall, DHCP, DNS (resolver and local registration), NTP be as open as possible reasonable gui/cli: probably openwrt (as mostly everything else is rubbish and openwrt seems least worse) easy to swap and obtain new hardware in case of failure (eg Raspberry Pis are (used to be) available) easy to backup config or capture steps to configure replacement device no fans and no spinning rust serial console (eg no usb keyboard/screen for debugging) small, wall mountable and lower power (eg \u0026lt;20W) link and status leds simple to boot and work simple (eg I don\u0026rsquo;t want virtual machine stack with 1000 things to go wrong) ideally multiple ports to make the setup simple (eg with a single port router on a stick, bootstrapping the mgmt interfaces on a vlan is harder) I decided on a few devices, however I was unsure how each performed. The goal of this benchmark is run iperf3 and ping from a fake client to a fake server and thus end to end test a routers bandwidth. Once an initial set of benchmarks are run on a virtual router the individual devices can then be tested by using VLANs. By connecting the test host to a trunked port and adding the untagged interfaces for the wan and lan network to the wan and lan virtual bridges the test virtual router can be switched off and the device under test can be benchmarked.\nDevice under test # EdgeRouter Lite 3 £21.00 GL.iNet GL-AR150 £21.30 Linksys WRT3200ACM Currently bizarrely expensive Raspberry Pi 2 Model B Obsolete Raspberry Pi 3 Model B Only not obsolete due to Pi4 shortage Raspberry Pi 4 Model B Currently unobtainable Benchmark tools # The two metrics I wanted to benchmark are throughput and latency. I used iperf3 for bandwidth and ping for latency. These three commands were used to get figures for download bandwidth, upload bandwidth and latency.\ntarget=192.168.122.x #server ip in default libvirt network iperf3 -c $target -i 1 -t 60 -Z -J -R | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 iperf3 -c $target -i 1 -t 60 -Z -J | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 ping -c 60 -i 1 -n -q $target After the fact it was pointed out that measuring power usage would also be interesting, so retrospectively I used my cheap [https://www.amazon.co.uk/gp/product/B07H1ZFVFM/](Nevsetpo Power Meter).\nNetwork setup # The test setup creates some networks using libvirt the three required networks and three test virtual machines. The server virtual machine is connected to the default network which allows the host to ssh in. It is also on a wan network without any IP, the server runs the PPPoE process on this network, emulating the ISP. The router virtual machine is also on the wan network and runs the PPPoE client and connects to the server and uses the server as its router. It\u0026rsquo;s also connected to a separate lan network which it runs DHCP services for. The final virtual machine called client it only connected to the lan network.\nVirtual router setup # In order to prove that the test network functions as expected a virtual router was built. Test router setup # When the actual devices were being tested the virtual router was turned off and the tagged ethernet interface was added to the correct bridges that libvirt was using. Thus allowing the test laptop to connect to the managed switch and the devices under test were connected to the managed switch. Create virtual network # These are the commands I ran to create the two virtual machines and see the virtual bridge device names which are used for the VM creation commands below.\nfor n in lan wan; do echo \u0026#34;\u0026lt;network\u0026gt;\u0026lt;name\u0026gt;$n\u0026lt;/name\u0026gt;\u0026lt;/network\u0026gt;\u0026#34; \u0026gt; /tmp/net.xml; sudo virsh net-define /tmp/net.xml; sudo virsh net-start $n; sudo virsh net-autostart $n; done def=$(sudo virsh net-info default | awk \u0026#39;/Bridge:/{print $2}\u0026#39;) lan=$(sudo virsh net-info lan | awk \u0026#39;/Bridge:/{print $2}\u0026#39;) wan=$(sudo virsh net-info wan | awk \u0026#39;/Bridge:/{print $2}\u0026#39;) echo \u0026#34;def:$def lan:$lan wan:$wan\u0026#34; Setup # Create server # Next create a new virtual machine with virt-install and inject a preseed file. It\u0026rsquo;s mostly boiler plate Debian install.\necho \u0026#34;H4sIAAAAAAAAA4VUTY/TMBC991dYi5DgkHoXOC0CaSWOK0BaCS5IkRtPErOOJxpPmlar/e9M6qRNGxaqtrGdN19vxu9V3hJEAJv/uFmtbOZUAC7KSlfAeY2Rg2lARSYXKhWBtkCXKIuNcWHCeBPmgKJGjJC7wEClKcQVeChYmY4xxav7zALLmfZobF46anpDoDaIHkxQTB0kZOOIkHSBXWDaTwEbEzrj54CaudWXuVvYrOXnTFgjVQu4dSQp4MmtTuAFsCXcTaCUVmti7K0mRM48VkLFlHppfIQ5phMGs7Lz/iKzKdAM9n9EdlgjWbVYvAjNTDX0amkwWhALndnQHN0A12inFAiqzhtawsYGC3uuPXb3dydmwscSDrsWiI/w5HyCq9tb9Wulxs/Ndfpev1aw4w8qJfSkSqTGsHoeF0+ykhplcDzEfWRohpP57mD9rJphblqUUXxSWvbr86L9tpGeb10xFNPgFnI5OZ/COXx4OnYYpAAZyTDMbd6TY8gD9Lk3G/AvWk+sHZ1MxJUuuFifQ5Pvf/gagweUpOmQwstpb0x0xYmcqAPmsTftxcwebEzLWQTuWl1YwkbLOpNIkS/BLbbDcDjeZ5IMgyCWR/pQrLTdzPIbHbCJj8KAGp86RWk6z24kJrIJ1kyT/VgNKBcK39mTOsVaxc6iksmi8r082Gyk0FRMRd0mc0H8eA+kMfh9nu7VkqwLrLxnmYzTbSyNZHZApn5NWE0wYEXtRFWxEmGNKiAnpynYzC3snJCCPRCW5V/kbhRm7YWwvMBG2ne8jqdbAjJK6mqs5O7+/tMb+Xurvn77fvfw8PPLreyu1Gel2ZCItRZV1gNJQHFtR41THy/9ZaCuJEnssxq59V2lILTv4vWv4A4innbKiciP+isxzoPIKxGWR31U/iFeslv9AdxbVjZ1BgAA\u0026#34; | base64 -d | gunzip \u0026gt; preseed-server.cfg sudo virt-install --connect qemu:///system --name server --os-variant debian11 --memory 1024 --disk size=20 --location http://deb.debian.org/debian/dists/bullseye/main/installer-amd64/ --network bridge=$def,model=virtio --network bridge=$wan,model=virtio --extra-args \u0026#39;language=en country=GB keymap=gb file=/preseed-server.cfg\u0026#39; --initrd-inject=preseed-server.cfg The server needs to become a router, nat traffic and be the iperf server.\necho \u0026#34;net.ipv4.ip_forward=1\u0026#34; | sudo tee /etc/sysctl.d/local.conf sudo iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE sudo iperf3 -s Setup accel-ppp on server # The server needs to run accel-ppp to run a PPPoE server see below [#On ppp/pppoe vs accel-ppp] on this selection. This is not packaged so need to be compiled and installed.\nsudo apt-get install -y build-essential cmake gcc linux-headers-`uname -r` git libpcre3-dev libssl-dev liblua5.1-0-dev git clone https://github.com/accel-ppp/accel-ppp.git mkdir accel-ppp/build cd accel-ppp/build cmake -DCMAKE_INSTALL_PREFIX=/usr -DLUA=TRUE -DCPACK_TYPE=Debian11 .. make cpack -G DEB sudo dpkg -i accel-ppp.deb The setup for accel-ppp was also pretty straight forward, it seems that accel-ppp is quite nice to work with.\necho \u0026#34;H4sIAAAAAAAAA3VR7WrDMAz8r2eZ4ygb+wI/SQjFc5QPcGMjOyl7+yluKQ10GIMlnU6nc3sO/eopdeDDeBpmTxBjDAR2zdMp2ghuslElckw5wSy14AFaF5hKjyLmwEZvlrWE2jpHXgmH3iGVpCBPTLZXLqxLNm/SXCZ0sBH/hEQGhVbtvOY6el4y8WAdGVpik2rpuAE6GC9K3rbvmVIy+NVU+P5ZYV3vF44xKkR8WeyZbsTQipyr6n3TZ6Lvr6K87HcmHp9BS+EOG+zs/2cVMwuiwF2Iv7K0p428ed3NfLC4OxhuNGWnD18gcD8/mpfJL5QNNh9VLQe/m1qsyC4eUwh/wodkSOwBAAA=\u0026#34; | base64 -d | gunzip | sudo tee /etc/accel-ppp.conf echo \u0026#34;debian * password *\u0026#34; | sudo tee /etc/chap-secrets sudo systemctl start accel-ppp sudo systemctl enable accel-ppp Create router # The virtual test router was created again with virt-install the openwrt x86 image was used\nwget -c https://downloads.openwrt.org/releases/22.03.2/targets/x86/64/openwrt-22.03.2-x86-64-generic-ext4-combined.img.gz cat openwrt-22.03.2-x86-64-generic-ext4-combined.img.gz | gunzip \u0026gt; openwrt-22.03.2-x86-64-generic-ext4-combined.img sudo qemu-img convert -f raw -O qcow2 openwrt-22.03.2-x86-64-generic-ext4-combined.img /var/lib/libvirt/images/openwrt.qcow2 sudo virt-install --connect qemu:///system --name openwrt --os-variant linux2020 --memory 1024 --import --disk path=/var/lib/libvirt/images/openwrt.qcow2 --network bridge=$lan,model=virtio --network bridge=$wan,model=virtio After the router starts some initial setup needs to be performed to configure the network, eg\nuci set network.lan.ipaddr=\u0026#39;192.168.10.1\u0026#39; uci set network.wan.proto=\u0026#39;pppoe\u0026#39; uci set network.wan.username=\u0026#39;debian\u0026#39; uci set network.wan.password=\u0026#39;password\u0026#39; uci commit reboot A new rule needs to be added to /etc/config/firewall to allow ssh traffic to the wan:\nconfig rule option name allow-ssh list proto tcp option src wan option dest_port 22 option target ACCEPT If tcpdump is needed to help debug, it can be installed with\nopkg update opkg install tcpdump Create client # The client virtual machine was also installed via virt-install, using an almost identical preseed setup to the server machine.\necho \u0026#34;H4sIAAAAAAAAA4VUwWrcMBC95ytESqE9eJXQngItBHoMbSHQXgpGa41tNZLGjMbxLiH/3vHK3nXWTbtkY1n7NPPmzdO8KTuCBGDLH9cXF7ZwKgJXdaMb4LLFxNEEUInJxUZV3kHkc5TFYFycMd7EJaBqEROULjJQbSoJBR4qVqZnzPnaobDAsqc9GlvWjsJgCNQW0YOJiqmHjAyOCElX2Eem/ZwwmNgbvwS0zJ0+525hu5GvM3GD1Kzg1pFQwFNYncErYEe4m0GZVmdSGqwmRC48NiLFTL02PsES0yegou69P2M2J1rA/o8oDmskq1aLV6GFacZerQ9MJ4hFzmJsjg7ALdqZAkHTe0Nr2NRgUc91x+7+7uWY6LGGw64D4iM8B5/h6uZG/bpQ0+f6Kv9dvVWw448qE3pSNVIwrJ6nxZOspEYxjoe0Twxh3Fm+HU4/qzD6pkOx4pPS8r55WbR/DNLzR1eNxQR8hFJ2XrpwCR+fjh1GKUAsGUfflgM5hjLCUHqzBf/q6Vm1Y5BZuNpFl9qX0Bz7H7Gm5BGFNB0ovE57a5KrTuIkHbFMg+nOPHs4YzouEnDf6coSBi3rQjIlPgd32I3mcLwvhAyDINZb+lCstN0s+E0B2KQHUUBNT52zhN6zm4RJbKI1s7MfmhHlYuV7e3RRSq1KvUUlzqL6gzzYbKXQXExD/bZwUeJ4D6Qx+n2Z79VarDOs/M7ijNNtrI0wOyBzv2asJhixMu1kqmIjgzWpiJyD5mSLsLBzIgoOQFjXfxl302DWXgQrKwzSvuN1PN0SECupy6mS27u7T+/k33v19dv32/v7n19u5O1SfVaaDcmw1jKV9SgSUNrYecb9Adx6/rMFBgAA\u0026#34; | base64 -d | gunzip \u0026gt; preseed-client.cfg sudo virt-install --connect qemu:///system --name client --os-variant debian11 --memory 1024 --disk size=20 --location http://deb.debian.org/debian/dists/bullseye/main/installer-amd64/ --network bridge=$lan,model=virtio --extra-args \u0026#39;language=en country=GB keymap=gb file=/preseed-client.cfg\u0026#39; --initrd-inject=preseed-client.cfg The client can then benchmark the setup by running\nping iperf3 -c 192.168.122 On ppp/pppoe vs accel-ppp # During the benchmark I originally setup pppoe on the server as below:\napt-get install pppoe /etc/ppp/pppoe-server-options: require-pap login lcp-echo-interval 10 lcp-echo-failure 2 ms-dns 8.8.8.8 #defaultroute sudo pppoe-server -I enp2s0 -L 192.168.100.100 -R 192.168.100.101 -N 20 However it became immediately obvious that the warning in the man page stating \u0026ldquo;Note that pppoe-server is meant mainly for testing PPPoE clients. It is not a high-performance server meant for production use\u0026rdquo; is correct. My very first iperf ran was not getting above about 500Mbits:\ndebian@client:~$ iperf3 -c 192.168.122.95 Connecting to host 192.168.122.95, port 5201 [ 5] local 192.168.10.191 port 44110 connected to 192.168.122.95 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 75.7 MBytes 635 Mbits/sec 197 128 KBytes [ 5] 1.00-2.00 sec 65.1 MBytes 546 Mbits/sec 119 99.8 KBytes [ 5] 2.00-3.00 sec 64.1 MBytes 538 Mbits/sec 66 105 KBytes [ 5] 3.00-4.00 sec 67.2 MBytes 564 Mbits/sec 72 131 KBytes [ 5] 4.00-5.00 sec 96.3 MBytes 808 Mbits/sec 304 134 KBytes [ 5] 5.00-6.00 sec 85.0 MBytes 713 Mbits/sec 305 105 KBytes [ 5] 6.00-7.00 sec 60.3 MBytes 506 Mbits/sec 124 121 KBytes [ 5] 7.00-8.00 sec 41.2 MBytes 345 Mbits/sec 15 132 KBytes [ 5] 8.00-9.00 sec 37.1 MBytes 311 Mbits/sec 22 115 KBytes [ 5] 9.00-10.00 sec 35.2 MBytes 295 Mbits/sec 21 115 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 627 MBytes 526 Mbits/sec 1245 sender [ 5] 0.00-10.05 sec 626 MBytes 523 Mbits/sec receiver iperf Done. debian@client:~$ Which led me to try accel-ppp which immediately got \u0026gt;5G, which is fine given the limitation of the eventual test setup with 1G ethernet\ndebian@client:~$ iperf3 -c 192.168.122.95 Connecting to host 192.168.122.95, port 5201 [ 5] local 192.168.10.191 port 47560 connected to 192.168.122.95 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 581 MBytes 4.88 Gbits/sec 82 1.24 MBytes [ 5] 1.00-2.00 sec 525 MBytes 4.40 Gbits/sec 0 1.49 MBytes [ 5] 2.00-3.00 sec 616 MBytes 5.17 Gbits/sec 8 1.28 MBytes [ 5] 3.00-4.00 sec 776 MBytes 6.51 Gbits/sec 0 1.65 MBytes [ 5] 4.00-5.00 sec 761 MBytes 6.39 Gbits/sec 57 1.51 MBytes [ 5] 5.00-6.00 sec 786 MBytes 6.60 Gbits/sec 8 1.37 MBytes [ 5] 6.00-7.00 sec 659 MBytes 5.53 Gbits/sec 0 1.67 MBytes [ 5] 7.00-8.00 sec 741 MBytes 6.22 Gbits/sec 14 1.52 MBytes [ 5] 8.00-9.00 sec 775 MBytes 6.50 Gbits/sec 25 1.36 MBytes [ 5] 9.00-10.00 sec 665 MBytes 5.58 Gbits/sec 173 1.22 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 6.72 GBytes 5.78 Gbits/sec 367 sender [ 5] 0.00-10.04 sec 6.72 GBytes 5.75 Gbits/sec receiver iperf Done. debian@client:~$ Openwrt settings # The software flow offloading seems to make a difference on the edge router itself, and a significant one. This is set within openwrt here: Network-\u0026gt;Firewall-\u0026gt;Routing/NAT Offloading-\u0026gt;\u0026ldquo;Software flow offloading\u0026rdquo; is checked. I don\u0026rsquo;t know what this tunes, but it does seem to greatly affect throughput:\nBefore:\ndebian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 104.85571253398\t143.95832408612\t117.39315248792\t115.34301625102\t5.4882634175596 debian@client:~$ debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J -R | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 133.98202421683\t144.32368834649\t140.3129998568\t141.43796553478\t2.5905254520476 After\ndebian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 366.98948165016\t377.51944772734\t375.06583203645\t377.48659500155\t4.4311689211162 debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J -R | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 154.39869479067\t167.14585186187\t161.25199461093\t159.337308995\t4.127788300993 Results # Virtual Router # debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 3407.9367981071\t7025.5153129482\t4044.6904311882\t3884.878633075\t784.2084891605 debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J -R | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 1890.4471346964\t4153.3714598987\t2504.8815592132\t2501.6399877285\t258.67402567204 debian@client:~$ debian@client:~$ ping -c 60 -i 1 -n -q 192.168.122.95 PING 192.168.122.95 (192.168.122.95) 56(84) bytes of data. --- 192.168.122.95 ping statistics --- 60 packets transmitted, 60 received, 0% packet loss, time 59139ms debian@client:~$ rtt min/avg/max/mdev = 0.677/1.202/1.521/0.180 ms EdgeRouter Lite 3 (OpenWrt) # debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 706.61852598118\t734.05754152285\t725.6825833986\t723.51744\t5.8027997673159 debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J -R | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 160.23678182446\t171.19735264291\t167.98059278326\t168.92555441074\t2.878500629021 debian@client:~$ debian@client:~$ ping -c 60 -i 1 -n -q 192.168.122.95 PING 192.168.122.95 (192.168.122.95) 56(84) bytes of data. --- 192.168.122.95 ping statistics --- 60 packets transmitted, 60 received, 0% packet loss, time 59103ms rtt min/avg/max/mdev = 1.125/1.423/1.586/0.094 ms debian@client:~$ no firewall # debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J -R | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 165.5792028678\t175.05476890865\t171.40044218374\t171.5606591917\t1.8826983637162 debian@client:~$ removing most chains and masking everything accepted, only small speedup\nEdgeRouter Lite 3 (EdgeOS) # debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 912.25655252287\t941.33247951664\t925.32853800863\t922.74688\t6.4803021324805 debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J -R | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 908.55730208848\t922.29672042931\t919.64223701208\t921.58126702043\t3.6364279057688 debian@client:~$ debian@client:~$ ping -c 60 -i 1 -n -q 192.168.122.95 PING 192.168.122.95 (192.168.122.95) 56(84) bytes of data. --- 192.168.122.95 ping statistics --- 60 packets transmitted, 60 received, 0% packet loss, time 59109ms rtt min/avg/max/mdev = 1.186/1.405/1.555/0.078 ms debian@client:~$ root@EdgeRouter-Lite-3-Port:~# show configuration commands | grep offload set system offload hwnat disable set system offload ipv4 forwarding enable set system offload ipv4 pppoe enable root@EdgeRouter-Lite-3-Port:~# The ethtool utility did not revielt anything too interesting when chanting the above offload parameters.\nubnt@EdgeRouter-Lite-3-Port:~$ sudo ethtool -k eth0 Features for eth0: rx-checksumming: off [fixed] tx-checksumming: off tx-checksum-ipv4: off [fixed] tx-checksum-ip-generic: off [fixed] tx-checksum-ipv6: off [fixed] tx-checksum-fcoe-crc: off [fixed] tx-checksum-sctp: off [fixed] scatter-gather: on tx-scatter-gather: on [fixed] tx-scatter-gather-fraglist: on [fixed] tcp-segmentation-offload: off tx-tcp-segmentation: off [fixed] tx-tcp-ecn-segmentation: off [fixed] tx-tcp-mangleid-segmentation: off [fixed] tx-tcp6-segmentation: off [fixed] udp-fragmentation-offload: off [fixed] generic-segmentation-offload: on generic-receive-offload: on large-receive-offload: off [fixed] rx-vlan-offload: off [fixed] tx-vlan-offload: off [fixed] ntuple-filters: off [fixed] receive-hashing: off [fixed] highdma: off [fixed] rx-vlan-filter: off [fixed] vlan-challenged: off [fixed] tx-lockless: on [fixed] netns-local: off [fixed] tx-gso-robust: off [fixed] tx-fcoe-segmentation: off [fixed] tx-gre-segmentation: off [fixed] tx-gre-csum-segmentation: off [fixed] tx-ipxip4-segmentation: off [fixed] tx-ipxip6-segmentation: off [fixed] tx-udp_tnl-segmentation: off [fixed] tx-udp_tnl-csum-segmentation: off [fixed] tx-gso-partial: off [fixed] tx-sctp-segmentation: off [fixed] fcoe-mtu: off [fixed] tx-nocache-copy: off loopback: off [fixed] rx-fcs: off [fixed] rx-all: off [fixed] tx-vlan-stag-hw-insert: off [fixed] rx-vlan-stag-hw-parse: off [fixed] rx-vlan-stag-filter: off [fixed] l2-fwd-offload: off [fixed] busy-poll: off [fixed] hw-tc-offload: off [fixed] ubnt@EdgeRouter-Lite-3-Port:~$ GL.iNet GL-AR150 # debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 83.879790471605\t108.84823423077\t91.290876423645\t94.372169063672\t5.4158709865117 debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J -R | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 84.889857914375\t93.589790920767\t90.202263768658\t90.733380357641\t1.4055167335145 debian@client:~$ debian@client:~$ ping -c 60 -i 1 -n -q 192.168.122.95 PING 192.168.122.95 (192.168.122.95) 56(84) bytes of data. --- 192.168.122.95 ping statistics --- 60 packets transmitted, 60 received, 0% packet loss, time 59108ms rtt min/avg/max/mdev = 1.106/1.478/1.653/0.094 ms debian@client:~$ Linksys WRT3200ACM # debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 912.25296382292 933.26623870959 928.12493555184 933.19715260779 5.5982782386045 debian@client:~$ debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J -R | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 916.27660222073 927.55690500113 923.47683545513 923.68469375834 1.2490526292657 debian@client:~$ debian@client:~$ ping -c 60 -i 1 -n -q 192.168.122.95 --- 192.168.122.95 ping statistics --- 60 packets transmitted, 60 received, 0% packet loss, time 59095ms rtt min/avg/max/mdev = 0.948/1.282/1.604/0.115 ms debian@client:~$ Raspberry Pi 2 Model B # debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 73.390486317627\t105.71252088727\t85.822886371737\t83.885785001224\t4.9785002239775 debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J -R | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 80.373190822421\t90.963557398859\t85.710453470725\t85.781736853189\t1.1961847937278 debian@client:~$ debian@client:~$ ping -c 60 -i 1 -n -q 192.168.122.95 PING 192.168.122.95 (192.168.122.95) 56(84) bytes of data. --- 192.168.122.95 ping statistics --- 60 packets transmitted, 60 received, 0% packet loss, time 59116ms rtt min/avg/max/mdev = 1.482/1.751/2.141/0.110 ms debian@client:~$ Raspberry Pi 3 Model B # debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 73.397021398245\t111.44259586084\t85.568767681851\t83.885785001062\t5.1750214271792 debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J -R | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 78.968253833831\t90.905772132877\t85.325661839878\t85.299583148203\t1.142636239204 debian@client:~$ debian@client:~$ ping -c 60 -i 1 -n -q 192.168.122.95 PING 192.168.122.95 (192.168.122.95) 56(84) bytes of data. --- 192.168.122.95 ping statistics --- 60 packets transmitted, 60 received, 0% packet loss, time 59117ms rtt min/avg/max/mdev = 1.419/1.690/2.119/0.110 ms debian@client:~$ Raspberry Pi 4 Model B # debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 922.19292596138\t933.28114752119\t928.33027868969\t933.21306041908\t5.2897155626168 debian@client:~$ iperf3 -c 192.168.122.95 -i 1 -t 60 -Z -J -R | jq .intervals[].sum.bits_per_second | while read n; do echo \u0026#34;$n / 1000 / 1000\u0026#34; | bc -l; done | datamash --sort min 1 max 1 mean 1 median 1 sstdev 1 915.57773987793\t923.95114144332\t923.48623632296\t923.75259182339\t1.1501744224565 debian@client:~$ debian@client:~$ ping -c 60 -i 1 -n -q 192.168.122.95 PING 192.168.122.95 (192.168.122.95) 56(84) bytes of data. --- 192.168.122.95 ping statistics --- 60 packets transmitted, 60 received, 0% packet loss, time 59118ms rtt min/avg/max/mdev = 0.798/1.036/1.225/0.088 ms debian@client:~$ Results Summary # Device Average download speed (Mbit/s) Average upload speed (Mbit/s) Average ping round trip time (milliseconds) Power usage when idle EdgeRouter Lite 3 (OpenWrt) 168 726 1.423 EdgeRouter Lite 3 (EdgeOS)) 919 925 1.405 5.9 GL.iNet GL-AR150 90 91 1.478 0.8 Linksys WRT3200ACM 924 928 1.282 Raspberry Pi 2 Model B 86 86 1.751 2.3 (no sd card) Raspberry Pi 3 Model B 85 86 1.690 2.3 (with pgs hat) Raspberry Pi 4 Model B 923 928 1.036 3.1 (no sd card) Result graphs # Remarks # The virtual router was able to reach speeds greater than 2 Gigabits per second, with latency low, albeit variable. Thus proving the test setup worked and is performant enough to saturate a 1G device. Furthermore the results for the Raspberry Pi 4 prove the test hosts ethernet and managed switch is also cable of 1G line level performance.\nUltimately these tests were what made me choose a Raspberry Pi 4 for my router.\n","date":"8 December 2022","externalUrl":null,"permalink":"/projects/opinionatedrouterbenchmark/","section":"Projects","summary":"My home Internet connection is a VDSL/FTTC (fibre to the cabinet) which comes over the telephone line into a BT master socket which has an ADSL filter and requires a modem. The modems are now usually built into the BT Home/Smart Hub CPE (Customer-premises equipment) but I still use a Huawei HG612 standalone modem as I don’t particularly like the CPE I was given. So I need a router to talk PPPoE to the modem and also firewall, route and NAT my home lan traffic to the Internet. I used a pair of Linksys WRT3200ACM devices: one as a router and wireless access point and the other as just a wireless access point. However while I was quite happy with them, the overall experience was not great: Ring devices would not connect, Tapo devices would not upgrade firmware and the overall signal quality around the house was not very good. So I upgraded to some Aruba Mesh wireless access points, which turned out to be great. However this left most of the functionality of the WRT3200ACM unneeded in what is quite a large physical footprint, also I don’t want to overload the device by turning my internet router into a NAS. Thus I needed to find a replacement device that just does the routing. Also with the new access points I also changed to a managed network switches with vlans to allow guest wifi, an untrusted iot network, etc. Thus the new device could just be a single port router on a stick with a single trunk link.\n","title":"Opinionated Router Benchmark","type":"projects"},{"content":"","date":"22 July 2022","externalUrl":null,"permalink":"/tags/keepass/","section":"Tags","summary":"","title":"Keepass","type":"tags"},{"content":"When running the Gnome Desktop Environment on Debian there is a secrets tool that automatically runs called Gnome Keyring. This tool provides multiple functions:\nssh keys - ssh keys in ~/.ssh with passwords that match the login password are unlocked at login time via pam and added to a ssh-agent (the gnome keyring agent not the original openssh agent one) general secrets via dbus - the secret service is accessed via dbus. The secrets are stored in an encrypted file (~/.local/share/keyrings), this file is also unlocked at login time via pam. The secrets are available via libsecret. So for example nextcloud login passwords are stored in this store. Also if it\u0026rsquo;s not been unlocked at login time, for instance if login via fingerprint is used access via dbus starts the gnome-keyring-daemon and the user is prompted for the password. pki - gnome-keyring also stores pki certificates, I\u0026rsquo;ve not used this much, but I assume its a location to store certificates: custom CA\u0026rsquo;s, machine and user certificates. There are many tools to then use the above, seahorse is a gui tool and secret-tool is a cli tool.\nThe idea being that ssh key passwords and general passwords are stored in encrypted files on disk, albeit with the same password as login.\nThe Problem # changing passwords is hard, eg have to update password for ~/.local/share/keyrings logging in via fingerprint ssh keys only when keepass unlocked ansible secrets, aws secrets, etc end up in ~/.local/share/keyrings across laptops easier to keep an handle on in just keepass files Mods # Notes on changes\nsystemctl --user mask gnome-keyring-daemon.service systemctl --user mask gnome-keyring-daemon.socket .config/autostart/gnome-keyring-pkcs11.desktop .config/autostart/gnome-keyring-secrets.desktop .config/autostart/gnome-keyring-ssh.desktop pam-auth-update remove gnome-keyring /etc/pam.d/gdm-password /home/thomas/.local/share/dbus-1/services/org.freedesktop.impl.portal.Secret.service:[D-BUS Service] /home/thomas/.local/share/dbus-1/services/org.freedesktop.impl.portal.Secret.service:Name=org.freedesktop.impl.portal.Secret /home/thomas/.local/share/dbus-1/services/org.freedesktop.impl.portal.Secret.service:Exec=/usr/bin/keepassxc /home/thomas/.local/share/dbus-1/services/org.freedesktop.secrets.service:[D-BUS Service] /home/thomas/.local/share/dbus-1/services/org.freedesktop.secrets.service:Name=org.freedesktop.secrets /home/thomas/.local/share/dbus-1/services/org.freedesktop.secrets.service:Exec=/usr/bin/keepassxc /home/thomas/.local/share/dbus-1/services/org.gnome.keyring.service:[D-BUS Service] /home/thomas/.local/share/dbus-1/services/org.gnome.keyring.service:Name=org.gnome.keyring /home/thomas/.local/share/dbus-1/services/org.gnome.keyring.service:Exec=/usr/bin/keepassxc URLs # https://wiki.archlinux.org/title/GNOME/Keyring https://gitlab.freedesktop.org/xdg/xdg-specs/-/issues/75 https://github.com/keepassxreboot/keepassxc/issues/6274 https://rtfm.co.ua/en/what-is-linux-keyring-gnome-keyring-secret-service-and-d-bus/\n","date":"22 July 2022","externalUrl":null,"permalink":"/posts/keepassxcassecretservice/","section":"Posts","summary":"When running the Gnome Desktop Environment on Debian there is a secrets tool that automatically runs called Gnome Keyring. This tool provides multiple functions:\n","title":"KeepassXC as Secret Service","type":"posts"},{"content":"","date":"28 June 2022","externalUrl":null,"permalink":"/tags/petrol/","section":"Tags","summary":"","title":"Petrol","type":"tags"},{"content":"I recently repeated some analysis on the UK Petrol Prices. Slightly different from last time, instead of a large hand-written Excel workbook, I wrote a Python script that downloads and processes the data and creates charts from it. This also plugs into GitLab\u0026rsquo;s CI/CD functionality and, by making use of Hugo, creates a sort of dynamically updating page of charts. This is hosted over on my GitLab pages: https://thomasdstewart.gitlab.io/ukpetrolprice/\n","date":"28 June 2022","externalUrl":null,"permalink":"/posts/ukpetrolprice/","section":"Posts","summary":"I recently repeated some analysis on the UK Petrol Prices. Slightly different from last time, instead of a large hand-written Excel workbook, I wrote a Python script that downloads and processes the data and creates charts from it. This also plugs into GitLab’s CI/CD functionality and, by making use of Hugo, creates a sort of dynamically updating page of charts. This is hosted over on my GitLab pages: https://thomasdstewart.gitlab.io/ukpetrolprice/\n","title":"UK Petrol Prices","type":"posts"},{"content":"I recently found out about DevTerm Kit R-01 via Bryan Lunduke. I\u0026rsquo;ve been interested in RISC V for ages and so far have resisted buying any dev boards as they would just sit in boxes. However because this is an entire portable computer it\u0026rsquo;s a great way to play, there is hope it can become a useful piece of kit, so I immediately decided to get one.\nThe official images for the R-01 is based on Ubuntu 22.04. This is great to build on something solid, however really wanted something based on Debian, with the intention of getting as much of this upstream and packaged as possible. This is not possible to perform in one step. There is a wiki page that documents some of this, however it self admits that it is more of a guidance that exact instructions. Clockwork have done a great job of building a working device from the ground up, eg hardware, case, schematics, pcb, firmware, and software (for multiple archs). Just the process of creating a working image from scratch is an epic piece of work, so clockworkpi\u0026rsquo;s \u0026ldquo;principle of minimal changes\u0026rdquo; is really great to see. However there are a few sharp edges in the official image, I expect mostly down to just the speed of implementation. Some things are not implemented very \u0026ldquo;Debiany\u0026rdquo;, eg it\u0026rsquo;s nicer to configure /etc/default/u-boot correctly and removed the non-working kernels work so that u-boot-update does not leave the system un-bootable.\nThis is the result of what I have found out and a set of instructions that can be followed to create a Debian image that works. I expect it to be a working document that I will use going forward if I need to reinstall my Devterm-01. It\u0026rsquo;s also fair to say this is slightly opinionated to my style of Debian systems.\nResources # https://fedoraproject.org/wiki/Architectures/RISC-V/Allwinner https://open.allwinnertech.com/ https://andreas.welcomes-you.com/boot-sw-debian-risc-v-lichee-rv/ https://linux-sunxi.org/Allwinner_Nezha https://github.com/smaeul/linux/blob/d1/wip/arch/riscv/configs/nezha_defconfig https://andreas.welcomes-you.com/boot-sw-debian-risc-v-lichee-rv/ Prerequisites and prepare environment # I used Debian based containers for this using podman, with any luck this will help future proof this process. The first step is to create a work directory and these containers. About 16G of disk space is required.\nmkdir -p ~/devterm cd ~/devterm sudo apt-get install podman git debootstrap qemu-user-static sfdisk wget bzip2 debootstrap Create new disk image file, partition and make filesystems # Use dd to create a new 4G disk image. The bootloader is in the first 64M of the disk so the /boot does not start at the beginning, then one big remaining / partition.\ndd if=/dev/zero bs=1M count=4096 of=disk.img echo -en \u0026#34;label: dos\\n disk.img : start=65536, size=204800, type=83\\n disk.img : start=270336, size=8118272, type=83\\n\u0026#34; | /sbin/sfdisk disk.img d=$(sudo losetup --show -f -P disk.img) sudo mkfs.ext4 ${d}p1 sudo mkfs.ext4 ${d}p2 mkdir -p disk.img.d sudo mount ${d}p2 disk.img.d sudo mkdir -p disk.img.d/boot sudo mount ${d}p1 disk.img.d/boot sudo umount disk.img.d/boot disk.img.d sudo losetup -d $d Compile bootloader # The bootloader consists of three suites of software. The first is \u0026ldquo;sun20i_d1_spl\u0026rdquo;, perhaps spl means something as the Chip is a D1 and the platform(?) is sun20i from Allwinner. It needs to be compiled with the cross compiler and gets installed into the mbr gap, 8k into the block device, eg between the partition table and first partition. Which means that GPT partitions can\u0026rsquo;t be used. I think the SoC reads the disk and starts running this code and it does print some messages to the serial debug console. It then jumps to OpenSBI/u-boot, which also needs to be compiled with the cross compiler. Both OpenSBI and u-boot need to be compiled separately, afterwards a u-boot utility is used to combine both into a single image that gets installed 16M into the block device. When execution passed from the SPL to OpenSBI it shows a banner and later shows some u-boot output. Unfortunately I\u0026rsquo;ve not been able to get the debug UART working well, with a very short USB cable connected to a powered hub it seems to show output but does not allow any input to the UART and which makes interrupting and inspecting u-boot not possible. U-Boot then reads the first partition and has the smarts to read ext4 file systems, it loads /extlinux/extlinux.conf. This is a syslinux style bootloader file that u-boot uses to load and then run the linux kernel with the right command line parameters. There is no initrd/initramfs (initial ramdisk), the root filesystem it just mounted.\ngit clone https://github.com/smaeul/sun20i_d1_spl podman run -it -v $PWD:/devterm debian:12 apt-get update apt-get -y install build-essential gcc-riscv64-linux-gnu python3 cd /devterm/sun20i_d1_spl make CROSS_COMPILE=riscv64-linux-gnu- p=sun20iw1p1 mmc exit git clone https://github.com/tekkamanninja/opensbi -b allwinner_d1 (cd opensbi; echo H4sIAAAAAAAAA0vJTEtT0NVNzyxRSNT3TcxOTcvMSVVIgjO5MvNSUisUDMyMLCyMU/X0jC0Njc0MDBQMDQzMTEy4dHV1kfRxaWtrI+t1cFDQNTIyU9AGEUBOZhrQsDSFAB/HEDf/IN/4IM9g57B4z2BHLl0FIMAUV7BVKCpT0UCTiPBx9dPMzE1MS0nm0iZTY3xVZlpqXnJqJhcA1dlLWQIBAAA= | base64 -d | gunzip | patch -p1) podman run -it -v $PWD:/devterm debian:12 apt-get update apt-get -y install build-essential gcc-riscv64-linux-gnu cd /devterm/opensbi CROSS_COMPILE=riscv64-linux-gnu- PLATFORM=generic FW_PIC=y BUILD_INFO=y make exit git clone https://github.com/tekkamanninja/u-boot -b allwinner_d1 (cd u-boot; echo H4sIAAAAAAAAA5WMSwuCQBSF9/Mr7qJFMoyOIjYbwVF6QW1yG4jzqkvlQiOiX59GbcIWLe7h43DuZ9A5YOyAV6iDutXHoMVO34JtfbIOzxbUWEuwMfYOXAlulTAi8f2ZCGPDI6UMhJwncUwYY+NOQin94c0yYNEMaH892sagI0zuilW12MhlCSmwy/CXTqavNpfl3Huz/EDhDSuFwyhfe7An9H9F9UDdtX0622iL38Yn6glr9TgBAAA= | base64 -d | gunzip | patch -p1) podman run -it -v $PWD:/devterm debian:12 apt-get update apt-get -y install build-essential gcc-riscv64-linux-gnu bison flex python3 python3-distutils swig python3-dev libssl-dev cd /devterm/u-boot make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv nezha_defconfig echo \u0026#34;CONFIG_MMC_BROKEN_CD=y\u0026#34; \u0026gt;\u0026gt; .config make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv oldconfig make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv u-boot.bin u-boot.dtb cat \u0026lt;\u0026lt; EOF \u0026gt; toc1.cfg [opensbi] file = fw_dynamic.bin addr = 0x40000000 [dtb] file = u-boot.dtb addr = 0x44000000 [u-boot] file = u-boot.bin addr = 0x4a000000 EOF cp ../opensbi/build/platform/generic/firmware/fw_dynamic.bin . tools/mkimage -T sunxi_toc1 -d toc1.cfg u-boot.toc1 exit d=$(sudo losetup --show -f -P disk.img) sudo dd if=sun20i_d1_spl/nboot/boot0_sdcard_sun20iw1p1.bin of=${d} bs=512 seek=16 sudo dd if=u-boot/u-boot.toc1 of=${d} bs=512 seek=32800 sudo losetup -d $d Compile Linux # The Linux kernel is somewhat harder, it seems to be some sort of \u0026ldquo;Android Common Kernels\u0026rdquo; as the README mentions this. The wiki page gives https://github.com/cuu/last_linux-5.4.git, which has no git history. So one assumes it\u0026rsquo;s just been put together in a rather ad-hoc manner. Searching about with references to \u0026ldquo;tina-d1-h\u0026rdquo;, the tree might be a combination of https://gitlab.com/weidongshan/tina-d1-h/-/tree/main/lichee/linux-5.4 with patches from clockwork here https://github.com/clockworkpi/DevTerm/tree/main/Code/patch/d1. The 5.4 was released 2019-11-24 is an LTS kernel and supported until 01-12-2025. Newer compilers don\u0026rsquo;t work (eg GCC-11) as it uses assembly opcodes that GCC-11 errors on, but it does compile with an older GCC. The official guide suggests getting a custom toolchain for nega.nz! We use GCC-9 from Debian 11.\nGrab the kernel config from the clockworkpi image.\nwget -c http://dl.clockworkpi.com/DevTerm_R01_v0.2a.img.bz2 bunzip2 DevTerm_R01_v0.2a.img.bz2 u=$(sudo losetup --show -f -P DevTerm_R01_v0.2a.img) mkdir -p ubuntu sudo mount ${u}p3 ubuntu sudo cp ubuntu/config-5.4.61 . sudo umount ubuntu sudo losetup -d $u Clone the kernel source, update a few files which seem like obvious git commit errors, copy in the config, run oldconfig and compile linux. Then install the kernel image, modules, config and dtd into a dir for installation later.\ngit clone https://github.com/cuu/last_linux-5.4.git (cd last_linux-5.4; echo H4sIAAAAAAAAA42RXW+CMBSGr+VXNGYXW1hrC5aPiyVuhqnZBEO82RUpbVE2IwuwD//9ANGhg22Xfc97TvrkEXEUAQhXcQ7YQKTxu0yzQcgyOXjgyTaKVyBsjZV4K+Qn0KzQ1qTOOUIRZzKUhJiAYGwMhwqEsOOmoqpq193RCEBCbaASal1jUDzrf0znzjzwnYXnL2fuRIFZ8pZyCfonV3KZ5YdTfUV0ws3Zi4zijTz/xSGv8Qg1h1TDFkaIYwMTW+r6L3jH7Ra+46wE1EygasYeLwmf4cXl2HPvZ5Ng4riOPxsHt/54Giy9hffoTZ6ugHoDWMrXQZ68JptktUOJAsu9Xa/XK2YVdTvtNg9bTDbSmlRExOAmpSFCNmXYxpiJdtLm7ilnc1JRFha1WuK5rbK7/vhW9UNnWfiHzbLWIrMZ14Q6MyJGLBIhJAxqhoJR2U3YofJkVDEWiAXfXsdRo7u8q6QVdZSAgrNWpP7RUr4AEP798Y8DAAA= | base64 -d | gunzip | patch -p1) cp config-5.4.61 last_linux-5.4/.config sed -i \u0026#39;s/CONFIG_VECTOR=y/CONFIG_VECTOR=n/\u0026#39; last_linux-5.4/.config podman run -it -v $PWD:/devterm debian:11 apt-get -y install build-essential gcc-riscv64-linux-gnu flex bison libssl-dev bc kmod cd /devterm/last_linux-5.4 make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv oldconfig make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv mkdir -p rootfs/boot make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv INSTALL_MOD_PATH=rootfs modules_install make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv INSTALL_PATH=rootfs/boot zinstall cp .config rootfs/boot/config-5.4.61 cp arch/riscv/boot/dts/sunxi/board.dtb rootfs/boot exit Create root file system, install packages and configure # Just use debootstrap to create a clean install. Set a few debconf values, install locales and then install a bunch of useful packages.\nsudo mkdir -p rootfs sudo debootstrap --arch=riscv64 sid rootfs http://deb.debian.org/debian sudo chroot rootfs apt-get update echo -e \u0026#34;locales\\tlocales/default_environment_locale\\tselect\\ten_GB.UTF-8\u0026#34; | sudo chroot rootfs debconf-set-selections echo -e \u0026#34;locales\\tlocales/locales_to_be_generated\\tmultiselect\\ten_GB.UTF-8 UTF-8\u0026#34; | sudo chroot rootfs debconf-set-selections sudo chroot rootfs apt-get -y install locales echo -e \u0026#34;ferm\\tferm/enable\\tboolean\\ttrue\u0026#34; | sudo chroot rootfs debconf-set-selections echo -e \u0026#34;keyboard-configuration\\tkeyboard-configuration/model\\tselect\\tGeneric 105-key PC\u0026#34; | sudo chroot rootfs debconf-set-selections echo -e \u0026#34;keyboard-configuration\\tkeyboard-configuration/variant\\tselect\\tEnglish (UK)\u0026#34; | sudo chroot rootfs debconf-set-selections sudo chroot rootfs apt-get -y install aptitude apt-utils bash-completion bc bind9-host build-essential busybox curl debconf-utils dstat elinks ferm file git gkrellm iw mesa-utils mtr netcat-traditional network-manager network-manager-gnome nmap psmisc pv qutebrowser rsync screen ssh sudo systemd-timesyncd tcpdump telnet twm u-boot-menu unattended-upgrades vim-gtk3 wget wireless-regdb wireless-tools wpasupplicant x11-apps xdm xfonts-100dpi xinit xserver-xorg-video-fbdev xterm sudo chroot rootfs apt-get clean Set a hostname and create a fstab.\necho devterm | sudo tee rootfs/etc/hostname cat \u0026lt;\u0026lt;EOF | sudo tee rootfs/etc/fstab /dev/mmcblk0p2 / ext4 defaults,noatime 0 0 /dev/mmcblk0p1 /boot ext4 defaults,noatime 0 0 EOF Install Linux kernel # Install Linux kernel, modules, and other files. Update u-boot configuration and run u-boot-update.\nsudo mkdir -p rootfs/lib/modules/5.4.61 sudo rsync -a last_linux-5.4/rootfs/lib/modules/5.4.61/. rootfs/lib/modules/5.4.61/. sudo cp -a last_linux-5.4/rootfs/boot/* rootfs/boot sudo chown -R root:root rootfs/boot rootfs/lib/modules cat \u0026lt;\u0026lt;EOF | sudo tee -a rootfs/etc/default/u-boot U_BOOT_ALTERNATIVES=\u0026#34;default\u0026#34; U_BOOT_TIMEOUT=\u0026#34;1\u0026#34; U_BOOT_PARAMETERS=\u0026#34;earlyprintk=sunxi-uart,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyS0,115200 console=tty0 cma=8M fbcon=rotate:1\u0026#34; U_BOOT_FDT=\u0026#34;board.dtb\u0026#34; U_BOOT_FDT_DIR=\u0026#34;noexist\u0026#34; EOF sudo chroot rootfs u-boot-update sudo sed -i \u0026#39;s^/boot^^\u0026#39; rootfs/boot/extlinux/extlinux.conf echo \u0026#34; fdt /board.dtb\u0026#34; | sudo tee -a rootfs/boot/extlinux/extlinux.conf Install Firmware # The Wifi requires some firmware, I was not able to find this, I assume it\u0026rsquo;s behind the allwinner site. I got the 3 files from the clockworkpi image.\nwget -c http://dl.clockworkpi.com/DevTerm_R01_v0.2a.img.bz2 bunzip2 DevTerm_R01_v0.2a.img.bz2 u=$(sudo losetup --show -f -P DevTerm_R01_v0.2a.img) mkdir -p ubuntu sudo mount ${u}p4 ubuntu sudo mkdir -p rootfs/lib/firmware/brcm sudo cp ubuntu/lib/firmware/brcm/brcmfmac43456-sdio.* rootfs/lib/firmware/brcm sudo umount ubuntu sudo losetup -d $u Configure Xorg # Xorg needs some config to rotate screen and set the resolution\ncat \u0026lt;\u0026lt;EOF | sudo tee rootfs/etc/X11/xorg.conf.d/10-d1.conf Section \u0026#34;Device\u0026#34; Identifier \u0026#34;FBDEV\u0026#34; Driver \u0026#34;fbdev\u0026#34; Option \u0026#34;fbdev\u0026#34; \u0026#34;/dev/fb0\u0026#34; Option \u0026#34;Rotate\u0026#34; \u0026#34;cw\u0026#34; Option \u0026#34;SwapbuffersWait\u0026#34; \u0026#34;true\u0026#34; EndSection Section \u0026#34;Screen\u0026#34; Identifier \u0026#34;Screen0\u0026#34; Device \u0026#34;FBDEV\u0026#34; DefaultDepth 24 Subsection \u0026#34;Display\u0026#34; Depth 24 Modes \u0026#34;1280x480\u0026#34; \u0026#34;480x1280\u0026#34; EndSubsection EndSection EOF Disable some services # To speed up booting disable some services: apt-daily, apt-daily-upgrade, ModemManager, avahi-daemon, NetworkManager-wait-online:\nsudo rm rootfs/etc/systemd/system/timers.target.wants/apt-daily.timer sudo rm rootfs/etc/systemd/system/timers.target.wants/apt-daily-upgrade.timer sudo rm rootfs/etc/systemd/system/dbus-org.freedesktop.ModemManager1.service sudo rm rootfs/etc/systemd/system/multi-user.target.wants/ModemManager.service sudo rm rootfs/etc/systemd/system/dbus-org.freedesktop.Avahi.service sudo rm rootfs/etc/systemd/system/sockets.target.wants/avahi-daemon.socket sudo rm rootfs/etc/systemd/system/multi-user.target.wants/avahi-daemon.service sudo rm rootfs/etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service Create user # Create a user, set the password and add to the sudo group.\nsudo chroot rootfs adduser --gecos thomas --add_extra_groups --disabled-password thomas pass=$(mkpasswd -m sha-512 CorrectHorseBatteryStaple) sudo chroot rootfs usermod -a -G sudo -p \u0026#34;$pass\u0026#34; thomas Install clockworkpi repos # The official image contains some extra software for audio, backlight, fan, keyboard, printer and wiringpi. The below are the steps to install them, however it does not work as one of the debian packages depends on python2.7. However it\u0026rsquo;s not clear how these package were created. For example devterm-keyboard-firmware installs /usr/local/bin/devterm_keyboard_firmware_flash.sh which is a self extracting sh, extracting that clones https://github.com/cuu/stm32duino_bootloader_upload.git along with devterm_keyboard.ino.bin. The firmware then seems to come from https://github.com/cuu/devterm_keyboard.\ncurl https://raw.githubusercontent.com/clockworkpi/apt/main/debian/KEY.gpg | sudo tee rootfs/etc/apt/trusted.gpg.d/clockworkpi.asc echo \u0026#34;deb https://raw.githubusercontent.com/clockworkpi/apt/main/debian/ stable main\u0026#34; | sudo tee rootfs/etc/apt/sources.list.d/clockworkpi.list sudo chroot rootfs apt-get update sudo chroot rootfs apt-get install devterm-audio-patch devterm-backlight-cpi devterm-fan-temp-daemon-rpi devterm-keyboard-firmware devterm-thermal-printer devterm-thermal-printer-cups devterm-wiringpi-cpi Official image autologin, and home dir files # The official image implements auto login with a getty systemd override. It then has a .bash_profile to startx and an .xinit to start gkrelm and twm. There is a copy of the home dir and screenshots of the default twm theme here: https://github.com/clockworkpi/DevTerm/tree/main/Code/R01. This is how the getty systemd override, I have not implemented this, but I\u0026rsquo;m including as I think it\u0026rsquo;s quite a nice solution.\nsudo mkdir -p rootfs/etc/systemd/system/getty@tty1.service.d cat \u0026lt;\u0026lt;EOF | sudo tee rootfs/etc/systemd/system/getty@tty1.service.d/override.conf [Service] ExecStart= ExecStart=-/sbin/agetty --autologin thomas %I $TERM EOF I chose not to do this and just installed xdm and expect to play with different window managers going forward.\nCopy rootfs to disk image and sd card # Then the disk image needs to be mounted, the root filesystem copied into it, unmounted, then copied to an sd card and then the filesystem increased to cover the rest of the sd card.\nd=$(sudo losetup --show -f -P disk.img) sudo mount ${d}p2 disk.img.d sudo mount ${d}p1 disk.img.d/boot sudo rsync -vax --delete rootfs/. disk.img.d/. sudo umount disk.img.d/boot disk.img.d sudo losetup -d $d pv disk.img | sudo dd bs=1M of=/dev/sdX echo \u0026#34;resizepart 2 100%\u0026#34; | sudo parted /dev/sdX sudo partprobe sudo fsck -C -t ext4 -f -y /dev/sdX2 sudo resize2fs /dev/sdX2 Update sd card # If updates are needed directly from the rootfs directory to the sd card without rewriting entire sd card\nsudo umount /dev/sdX1 /dev/sdX2; sudo mount /dev/sdX2 /mnt; sudo mount /dev/sdX1 /mnt/boot sudo rsync -vaxP --delete rootfs/. /mnt/. sudo umount /mnt/boot /mnt WiFi # Once booted configure the wifi :\nsudo nmcli dev wifi connect \u0026#34;MyWifi\u0026#34; password \u0026#34;my-password\u0026#34; Jobs # How to package SPL How to package OpenSBI/u-boot Find what patches are needed for SPL/OpenSBI/u-boot Find what patches were applied are needed in mainline Linux Package wifi firmware Package Linux Update Linux Repackage clockworkpi debs Switch to fbturbo https://forum.clockworkpi.com/t/r01-fbturbo-accelerated-2d-graphics-in-x11/8900 ","date":"8 June 2022","externalUrl":null,"permalink":"/projects/debianondevtermr01/","section":"Projects","summary":"I recently found out about DevTerm Kit R-01 via Bryan Lunduke. I’ve been interested in RISC V for ages and so far have resisted buying any dev boards as they would just sit in boxes. However because this is an entire portable computer it’s a great way to play, there is hope it can become a useful piece of kit, so I immediately decided to get one.\n","title":"Debian on Devterm R-01","type":"projects"},{"content":"","date":"8 June 2022","externalUrl":null,"permalink":"/tags/riscv/","section":"Tags","summary":"","title":"Riscv","type":"tags"},{"content":"","date":"5 April 2022","externalUrl":null,"permalink":"/tags/camera/","section":"Tags","summary":"","title":"Camera","type":"tags"},{"content":" Canon EOS 700D (2015) # https://www.canon.co.uk/for_home/product_finder/cameras/digital_slr/eos_700d/\nLenses # Canon EF-S 18-55mm f/3.5-5.6 IS II (2015, 11-34mm equiv full frame) Canon EF-S 18-200mm f/3.5-5.6 IS (2017, 11-125mm equiv full frame) Canon EF-S 24mm f/2.8 STM (2019?, 15mm equiv full frame) Canon EF-S 10-18mm f/4.5-5.6 IS STM (2022, 6-11mm equiv full frame) http://www.bobatkins.com/photography/tutorials/crop_sensor_cameras_and_lenses.html\nCanon IXUS 130 (2010) # Canon Powershot A720 IS (2007) # ","date":"5 April 2022","externalUrl":null,"permalink":"/posts/cameras/","section":"Posts","summary":"Canon EOS 700D (2015) # https://www.canon.co.uk/for_home/product_finder/cameras/digital_slr/eos_700d/\n","title":"Cameras","type":"posts"},{"content":"","date":"5 April 2022","externalUrl":null,"permalink":"/tags/photography/","section":"Tags","summary":"","title":"Photography","type":"tags"},{"content":"Linux Networking Config is a complex beast these days. In fairness networking is complicated, and there has to be a way to configure a multitude of technologies: Ethernet, Wi-Fi, PPP, VPN, mobile, bridge, bonding, VLAN, tunnels. Originally networking was configured during boot up in shell scripts as part of sysvinit. However over the last 20+ years many newer ways have popped up; this is a short comparison of the options.\nMethods # ifupdown derivatives # The main config for this is in /etc/network/interfaces and it also includes files in /etc/network/interfaces.d/, it\u0026rsquo;s also called ENI. For Debian this is the original network setup after direct editing of boot up scripts. It\u0026rsquo;s still the Debian installer default, the default for official Debian Cloud images and a dependency of cloud-init. You can achieve more or less any static network configuration you want; there is some dynamic configuration being sort of doable. It\u0026rsquo;s got quite a lot of hooks that do allow interesting integrations. However integration with other things like desktop tools do not exist, eg joining a random Wi-Fi network. It\u0026rsquo;s also easy to get it into an inconsistent state if manual changes to the network are performed. It is common on servers but not for example on a laptop. Also many implementations exist, the default Debian one is ifupdown. I have no idea how well or not the other implementations work or not.\nhttps://wiki.debian.org/NetworkConfiguration https://www.debian.org/doc/manuals/debian-reference/ch05.en.html ifupdown # been around since woody https://salsa.debian.org/debian/ifupdown https://sources.debian.org/src/ifupdown/0.8.37/main.c/ ifupdown (busybox) # been around since woody https://busybox.net/ https://git.busybox.net/busybox/tree/networking/ifupdown.c ifupdown (netscript-2.4) # been around since sarge https://packages.debian.org/sid/netscript-2.4 https://sources.debian.org/src/netscript-2.4/5.5.5/netscript/ ifupdown2 # been around since jessie https://github.com/CumulusNetworks/ifupdown2/ https://github.com/CumulusNetworks/ifupdown2/blob/master/ifupdown2/ifupdown/main.py ifupdown-ng # been around since bookworm https://github.com/ifupdown-ng/ifupdown-ng https://github.com/ifupdown-ng/ifupdown-ng/blob/main/cmd/ifupdown.c network-scripts (redhat) # As I understand network-scripts were the first way networks were configured in Red Hat based distros after directly editing rc scripts. The config files were sourced and then boot scripts would implement everything needed to configure the network. These are stored under /etc/sysconfig/network-scripts. Almost all configurations were possible, however hooks to do \u0026ldquo;exotic\u0026rdquo; other things are harder. However these network-scripts have not been the only option on Red Hat based distros for some time because Network-Manager was introduced in either RHEL 5 or 6 as a replacement. Generally people recommended disabling it because people don\u0026rsquo;t like changes. However Network-Manager has become the main way networking is configured. The way this worked was by implementing a sort of config compatibility layer that used the same config file format, so you could run with both enabled: network would start some interfaces and Network-Manager would start other interfaces. However now Network-Manager just works and with RHEL 8 it is quite hard not to use it, and I understand RHEL9 is just Network Manager.\nbeen around since at least Red Hat Linux 6.0 (~circa 2000)\nipconfig # This is quite a bizarre project and it is hard to see actual references to it. Also it\u0026rsquo;s obviously hard to google as the name clash with the Windows ipconfig tool. In essence it\u0026rsquo;s a small tool that can make a simple DHCP request and use the response to configure an interface or just set a static IP on an interface. It\u0026rsquo;s usually called from the initrd and configured from the linux command line via the IP parameter. It can also un-configure the interface after it\u0026rsquo;s needed but before the chroot into the main system. So for example this might be needed for ssh server in initrd, nfs root, or iscsi root. Also how it\u0026rsquo;s called depends on the initrd used, usually initramfs or dracut.\nbeen around since etch https://git.kernel.org/cgit/libs/klibc/klibc.git https://git.kernel.org/pub/scm/libs/klibc/klibc.git/tree/usr/kinit/ipconfig/main.c https://git.kernel.org/pub/scm/libs/klibc/klibc.git/tree/usr/kinit/ipconfig/README.ipconfig NetworkManager # NetworkManager is an answer to some of the issues with the existing setup, mostly what seems to be around laptop type setups, where the network config changes all the time and needs gui type tools to do this. It\u0026rsquo;s a daemon that handles this and implements changes. It\u0026rsquo;s fair to say that initially people did not seem to like it for servers, as people don\u0026rsquo;t like changes. It also works differently depending if you are on Debian or Red Hat based distributions, with the former using /etc/NetworkManager/system-connections/ and the latter using /etc/sysconfig/network-scripts. Initially it was not capable of implementing all the config that ifupdown is capable of, however as it\u0026rsquo;s matured it\u0026rsquo;s now able to implement almost all setups. It\u0026rsquo;s also got hooks /etc/NetworkManager/dispatcher.d and implements a ifupdown compatibility hook. For better or worse it also reimplements things, eg it implements a DHCP client rather than relying on calling say dhclient and hoping it does its job.\nbeen around since etch https://wiki.gnome.org/Projects/NetworkManager https://gitlab.freedesktop.org/NetworkManager/NetworkManager https://wiki.debian.org/NetworkManager systemd-networkd # systemd-networkd grew out of systemd, presumably with the intention of avoiding the mess of existing tools. I think the idea for simple setups, eg just a static IP or DHCP ip. It then just works, without calling out to other tools and handling that mess, eg ifupdown calls dhclient, which has its own config that might or might not do what is expected. However for anything complicated NetworkManager is probably a better fit.\nbeen around since wheezy https://systemd.io/ https://wiki.debian.org/SystemdNetworkd https://wiki.archlinux.org/title/systemd-networkd Cloud-init # Cloud-init is a suite of tools that run on boot that can grab information from the hosting provider and do things with this information, eg inject ssh keys to a virtual machine. It can also configure the network too. In Debian it depends on ifupdown to do some of its work. It\u0026rsquo;s got three methods to configure the network:\nENI - /etc/network/interfaces\nNetworking Config Version 1 - DSL\nNetworking Config Version 2 - subset of netplan version 2\nbeen around since wheezy\nhttps://cloudinit.readthedocs.io/\nNetplan # At some point Canonical decided that the way network config was configured needed a rethink, and what seems to be along the lines of https://xkcd.com/927/ at best. It\u0026rsquo;s a way to abstract the config and netplan to generate different config backends, currently either systemd-networkd or Network Manager. It uses its own new DSL config of which there are two versions. I can understand why this was done, but can\u0026rsquo;t help but feel it adds a useless layer of config that should not be needed. It\u0026rsquo;s also got two config file formats: version 1 and version 2.\nbeen around since buster https://netplan.io/ DNS # It\u0026rsquo;s also fair to say that DNS settings are also part of networking config and bring another more interesting integration issues around /etc/resolv.conf. This is by far not exhaustive, but the three ways I use are below:\nManual # You know what DNS servers to use, so just set them in /etc/resolv.conf, this probably means you are using ifupdown.\nresolvconf # This is a little bit like manual, but you can set the DNS servers in ENI and the resolvconf tools update /etc/resolv.conf\nsystemd-resolver # systemd-resolver is a local stub resolver, it provides a resolv.conf file it updates that /etc/resolv.conf is a symbolic link to. The idea being, all DNS queries go to localhost and then systemd-resolver can then understand what to do with the queries, so for instance with split vpn tunnels, two different dns servers can be used at the same time for the different connections, which is not possible with /etc/resolv.conf. The other advantage with this option is that NetworkManager and networkd integrate nicely with systemd-resolver, so any provided DNS servers get added.\nExamples # ENI # DHCP # /etc/network/interfaces\nallow-hotplug ens3 iface ens3 inet auto iface ens3 inet6 auto Static # /etc/network/interfaces\nallow-hotplug ens3 iface ens3 inet static address 192.168.0.10/24 gateway 192.168.0.1 dns-nameservers 192.168.0.1 192.168.0.2 iface ens3 inet6 static address fc00::1/64 NM # DHCP # Static # /etc/NetworkManager/system-connections/ens3.nmconnection\n[connection] id=ens3 uuid=54823d6c-73dd-35d9-8b38-d438f4e93f71 type=ethernet autoconnect-priority=-999 interface-name=ens3 permissions= timestamp=1648737810 [ethernet] mac-address-blacklist= [ipv4] address1=192.168.0.10/24,192.168.0.1 dns=192.168.0.1;192.168.0.2; dns-search= method=manual [ipv6] addr-gen-mode=stable-privacy address1=fc00::1/64 dns=2001:4860:4860::8888;2001:4860:4860::8844; dns-search= method=auto [proxy] Remarks # For Debian use defaults for installation, after install remove ENI entries, as needed convert and use NetworkManager, enable systemd-resolver and remove ifupdown unless cloud-init is needed, in which case use ifupdown.\n","date":"30 March 2022","externalUrl":null,"permalink":"/posts/linuxnetworkingconfig/","section":"Posts","summary":"Linux Networking Config is a complex beast these days. In fairness networking is complicated, and there has to be a way to configure a multitude of technologies: Ethernet, Wi-Fi, PPP, VPN, mobile, bridge, bonding, VLAN, tunnels. Originally networking was configured during boot up in shell scripts as part of sysvinit. However over the last 20+ years many newer ways have popped up; this is a short comparison of the options.\n","title":"Linux Networking Config","type":"posts"},{"content":"","date":"4 January 2022","externalUrl":null,"permalink":"/tags/luks/","section":"Tags","summary":"","title":"Luks","type":"tags"},{"content":"Recently I wanted to see if I could make my public cloud-based Linux infra more secure via LUKS (Linux Unified Key Setup) disk encryption. I realise that one must fully trust one\u0026rsquo;s cloud provider, as they have access to the hardware. However it would be nice to know that data is encrypted when stored on disk. This does not mitigate against a very bad cloud provider, as ultimately if they are determined enough they can get at the data. However implementing some sort of encryption does offer some protection against reading the data if disks are reused and certainly makes the barrier much higher for access casually.\nIdeas # General Linux knowledge and a few Internet searches quickly gave me 4 options:\nOnly encrypt a subset of data and have a dedicated disk that\u0026rsquo;s encrypted. For example /home on a separate disk/partition/lvm volume encrypted with the unlock key in /etc/crypttab or unlock and mount via ssh at every boot. Implement mostly FDE (Full Disk Encryption). For example encrypt / and /home but not /boot and enter the password to unlock at every boot in the console. Implement mostly FDE (Full Disk Encryption). For example encrypt / and /home but not /boot and given it is in the cloud and on the Internet spawn sshd in the initramfs and then ssh in to remotely unlock at every boot. (https://www.arminpech.de/2019/12/23/debian-unlock-luks-root-partition-remotely-by-ssh-using-dropbear/) Implement mostly FDE (Full Disk Encryption) like above and use some sort of other magic. I quickly discarded idea 1, 2 and 3, as I don\u0026rsquo;t want the unlock key stored on disk next to the encrypted disk and I don\u0026rsquo;t want to enter a password at every boot.\nThe Selection # So I continued to search for that magic part of option 4, and came across 3 solutions:\nclevis and tang as part of the network bound disc encryption (NBDE) as part of the policy-based decryption (PBD) kxd - Key exchange daemon (https://blitiri.com.ar/p/kxd/) some other one I now can\u0026rsquo;t find anymore Loosely they all sounded fine, however the first option for clevis and tang caught my attention because:\nIt\u0026rsquo;s a part of RHEL 7, 8 and 9-Beta, so therefore it will be maintained for the foreseeable. The unlock key is not entirely stored on the server side, so if you break into the clevis server you can\u0026rsquo;t get the unlock key. Of course if you are able to grab a disk image of the encrypted disk, you can probably get the key anyways. Clevis and Tang # The project (https://github.com/latchset) have borrowed the nomenclature of the Clevis fastener system (https://en.wikipedia.org/wiki/Clevis_fastener) and reuse the same terminology: clevis, tang, pin. It\u0026rsquo;s cute and clever but also confusing. Basically you have a tang server somewhere and clevis uses the tang pin to connect to the tang server over a network to calculate a key that can unlock the disk. Also Clevis can run from initramfs with network support to unlock the root disk. This guide explains this process very well: https://semanticlab.net/sysadmin/encryption/Network-bound-disk-encryption-in-ubuntu-20.04/.\nAs an aside, there is another clevis pin that can use a TPM to unlock the disks too, which allows promptless full disk encryption.\nIt\u0026rsquo;s also fair to say that Red Hat also have some good documentation about it (Red Hat Distro specific for course): https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/security_hardening/configuring-automated-unlocking-of-encrypted-volumes-using-policy-based-decryption_security-hardening https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9-beta/html/security_hardening/configuring-automated-unlocking-of-encrypted-volumes-using-policy-based-decryption_security-hardening\nIssues # Before letting any of this loose on real infrastructure I decided to play with it on a pair of VMs first. One acting as the server and one acting as the client. With the intention that my real public cloud virtual machines would become clients, and the server would either run on another provider or at home. However I came across a number of observations:\nObservations with Tang:\nIt is a network based daemon that is written in C (https://sources.debian.org/src/tang/8-3+deb11u1/src/tangd.c/). The version packaged for Debian Stable (Bullseye) runs as root, this is fixed in Debian Testing (Bookworm) (see: https://sources.debian.org/src/tang/8-3+deb11u1/units/tangd%2540.service.in/ vs https://sources.debian.org/src/tang/11-1/units/tangd%2540.service.in/). The version packaged for Debian Stable (Bullseye) writes to /var/db/tang, this is fixed in Debian Testing (Bookworm) (see: https://sources.debian.org/src/tang/8-3+deb11u1/meson.build/#L19, https://sources.debian.org/src/tang/11-1/debian/patches/debian/2021-09-30.use-var-lib.patch/. It is an http server with everything operating in plaintext and does not have any SSL. It does not have any password protection. It does not have any network restriction functionality. Observations with Clevis:\nDebian defaults to initramfs-tools rather than dracut, clevis supports both, but obviously via slightly different scripts. In order to make network requests when the initramfs system is running networking has to be configured. How this is done is not very well documented. The initramfs system does not have a standard way to configure DNS. The initramfs system does not have any certificate authority root certificates collection, which makes https or ssl hard to trust. Workarounds # So given that running C daemons as root is fairly scary at the best of times, I wanted to put some wrapping around the setup to protect it more (issue 1).\nIdeally I like to run things from Debian stable, however it seems in this case it\u0026rsquo;s more straightforward to run the version from unstable as a separate user in a separate user rootless podman container (and hope that the tang-8 pin can talk to tang-11 server.) (issue 2 and 3). If Apache reverse proxies the traffic it can implement an ssl wrapper on it to give it https. (issue 4). Apache can auto implement basic auth to stop casual access and implement source request IP based restrictions (issue 5 and 6). Now is not the time to learn how to switch Debian from initramfs to dracut, so care needs to be taken it\u0026rsquo;s configured correctly (issue 7). Initramfs uses ipconfig from the klibc-utils package to configure networking (https://git.kernel.org/pub/scm/libs/klibc/klibc.git/tree/usr/kinit/ipconfig/README.ipconfig). The network is not configured automatically each helper must call configure_networking if it needs networking, eg the open-iscsi initramfs helper also calls this (https://sources.debian.org/src/clevis/16-2/src/initramfs-tools/scripts/local-top/clevis.in/#L265). It gets its config from the ip parameter from the linux command line (skipping this param will cause a dhcp), (https://sources.debian.org/src/initramfs-tools/0.140/scripts/functions/#L236) so the kernel params will have this ip parameter added. Interestingly Ubuntu configures resolv.conf when configuring networking automatically, but it seems this patch never made it back to Debian (https://git.launchpad.net/ubuntu/+source/initramfs-tools/tree/scripts/functions#n461) (issue 8). It\u0026rsquo;s up to each script that calls ipconfig to implement DNS. For example ipconfig does configure the ip address, netmask and gateway but does not touch /etc/resolv.conf, it creates a temp file (eg /run/net-eth0.conf) with the details in. For example see https://sources.debian.org/src/open-iscsi/2.1.5-1/debian/extra/initramfs.local-top/?hl=130#L130 https://sources.debian.org/src/kxd/0.15-3/cryptsetup/initramfs-scripts/kxc-premount-net/?hl=26#L26. Unfortunately the clevis initramfs script does not set up resolv.conf (https://sources.debian.org/src/clevis/16-2/src/initramfs-tools/scripts/local-top/clevis.in/#L257). This needs to be fixed upstream or if not a new script that runs the configure_networking and the careful creation of /etc/resolv.conf before the clevis initramfs script runs (issue 9). In order for the clevis script to run and use an https tang server, it ultimately uses curl to make the https request so will need a set of CA certificates to function correctly. The easiest way for this to work is an initramfs hook to include them (issue 10). Implementation # https://gitlab.com/thomasdstewart-infra/docker-tang\nroot@client:~# cat /etc/initramfs-tools/hooks/preclevis #!/bin/sh set -e PREREQ=\u0026#34;\u0026#34; prereqs() { echo \u0026#34;$PREREQ\u0026#34; } case $1 in # get pre-requisites prereqs) prereqs exit 0 ;; esac . /usr/share/initramfs-tools/hook-functions copy_exec /usr/lib/*/libnss_dns.so* mkdir -p \u0026#34;${DESTDIR}/etc/ssl\u0026#34; cp -a /etc/ssl/certs \u0026#34;${DESTDIR}/etc/ssl/certs\u0026#34; root@client:~# root@client:~# cat /etc/initramfs-tools/scripts/init-premount/preclevis #!/bin/sh set -e PREREQ=\u0026#34;\u0026#34; prereqs() { echo \u0026#34;$PREREQ\u0026#34; } case $1 in # get pre-requisites prereqs) prereqs exit 0 ;; esac . /scripts/functions configure_networking if ! [ -s /etc/resolv.conf ]; then for ns in \u0026#34;$IPV6DNS0\u0026#34; \u0026#34;$IPV6DNS1\u0026#34; \u0026#34;$IPV4DNS0\u0026#34; \u0026#34;$IPV4DNS1\u0026#34;; do if [ -n \u0026#34;$ns\u0026#34; -a \u0026#34;$ns\u0026#34; != \u0026#34;0.0.0.0\u0026#34; ]; then echo \u0026#34;nameserver $ns\u0026#34; \u0026gt;\u0026gt; /etc/resolv.conf fi done fi root@client:~# Bugs # Setup DNS # Get the configure_networking function in initramfs-tools to set up DNS\nInclude root CA # Add config option to the initramfs-tools to include a copy of the system CA\u0026rsquo;s\nhttps://github.com/latchset/clevis/issues/175 https://github.com/latchset/clevis/issues/176\n","date":"4 January 2022","externalUrl":null,"permalink":"/posts/networkbasedluksunlock/","section":"Posts","summary":"Recently I wanted to see if I could make my public cloud-based Linux infra more secure via LUKS (Linux Unified Key Setup) disk encryption. I realise that one must fully trust one’s cloud provider, as they have access to the hardware. However it would be nice to know that data is encrypted when stored on disk. This does not mitigate against a very bad cloud provider, as ultimately if they are determined enough they can get at the data. However implementing some sort of encryption does offer some protection against reading the data if disks are reused and certainly makes the barrier much higher for access casually.\n","title":"Network Based LUKS Unlock","type":"posts"},{"content":"","date":"23 July 2021","externalUrl":null,"permalink":"/tags/garden/","section":"Tags","summary":"","title":"Garden","type":"tags"},{"content":" Method # Pick rhubarb, wash and cut into 1-2cm chunks place in container (20:00 21/07/2021 after cutting 3.348 kg) Add sugar at a 5:3 rhubarb:sugar ratio (21:00 21/07/2021 2.009 kg of sugar was added, mixed and left to stand) Wait for 36-48 hours (13:30 23/07/2021 all sugar dissolved) Filter into demijohn (2.4L therefore ~0.4L rhubarb juice) Use two teabags in a jug, add 300ml of boiling water, brew for 5 min, remove bags and top to 300ml add to demijohn Add 10 grams of raisins Add one heaped teaspoon of yeast into 5L demijohn Add water at a ~1:1.2 rhubarb:water ratio to fill 5L demijohn (2.5L so more like 1:0.75?) Take some liquid and read with hydrometer (60) Racked on 31st July, g read 0.988, eg (1.060-0.988)*131 = 9.4% abv\nAll but stopped growth by 3rd Aug; added 200ml and one teaspoon of sugar to the demijohn on 5th Racked on\nCalculations # A hydrometer measures the density of a liquid, water is 1.0. Lots of dissolved sugar is more dense, so would read higher eg 1.1, the hydrometer floats lower. Once sugar is converted to alcohol it reads lower as a water alcohol solution is less dense than water, and thus the hydrometer floats higher\n(final gravity \u0026lsquo;FG\u0026rsquo; - original gravity \u0026lsquo;OG\u0026rsquo;) * 131.25 = ABV%\nReferences # https://lovelygreens.com/rhubarb-wine-recipe/ https://andhereweare.net/make-rhubarb-wine/\n","date":"23 July 2021","externalUrl":null,"permalink":"/posts/rhubarbwine/","section":"Posts","summary":"Method # Pick rhubarb, wash and cut into 1-2cm chunks place in container (20:00 21/07/2021 after cutting 3.348 kg) Add sugar at a 5:3 rhubarb:sugar ratio (21:00 21/07/2021 2.009 kg of sugar was added, mixed and left to stand) Wait for 36-48 hours (13:30 23/07/2021 all sugar dissolved) Filter into demijohn (2.4L therefore ~0.4L rhubarb juice) Use two teabags in a jug, add 300ml of boiling water, brew for 5 min, remove bags and top to 300ml add to demijohn Add 10 grams of raisins Add one heaped teaspoon of yeast into 5L demijohn Add water at a ~1:1.2 rhubarb:water ratio to fill 5L demijohn (2.5L so more like 1:0.75?) Take some liquid and read with hydrometer (60) Racked on 31st July, g read 0.988, eg (1.060-0.988)*131 = 9.4% abv\n","title":"Rhubarb Wine","type":"posts"},{"content":"","date":"23 July 2021","externalUrl":null,"permalink":"/tags/wine/","section":"Tags","summary":"","title":"Wine","type":"tags"},{"content":"","date":"30 June 2021","externalUrl":null,"permalink":"/tags/car/","section":"Tags","summary":"","title":"Car","type":"tags"},{"content":"","date":"30 June 2021","externalUrl":null,"permalink":"/tags/graph/","section":"Tags","summary":"","title":"Graph","type":"tags"},{"content":"Recently when checking the MOT on my car using the Check the MOT history of a vehicle GOV.UK service I discovered that the entire car\u0026rsquo;s mileage history is recorded. This made me quite interested in my Toyota Celica 2002 mileage over the years. I first got it in 2004 when it was 2 years old, and the first MOT was in 2005. However it seems the service history starts in 2007, which, if I recall, was when MOT became a lot more electronic.\nHere is the mileage data; I calculated the miles since the last MOT column myself. The average annual mileage is 9525.\nMOT Date Mileage on clock Calculated miles since last MOT Notes 2007-02-22 24971 2008-02-21 33622 8651 2009-02-27 42398 8776 2010-02-17 52661 10263 2011-02-25 61946 9285 2012-02-17 70854 8908 2013-02-13 79319 8465 2014-02-21 88099 8780 2015-03-26 100933 12834 Changed job 2016-03-15 110861 9928 2017-03-22 122246 11385 2018-03-21 132911 10665 2019-03-20 144742 11831 2020-03-17 153386 8644 COVID-19! 2021-03-27 158314 4928 2022-03-25 165704 7390 2023-03-24 173678 7974 2024-02-08 174409 731 Sold So just using Google Charts this looks like:\n","date":"30 June 2021","externalUrl":null,"permalink":"/posts/motmillage/","section":"Posts","summary":"Recently when checking the MOT on my car using the Check the MOT history of a vehicle GOV.UK service I discovered that the entire car’s mileage history is recorded. This made me quite interested in my Toyota Celica 2002 mileage over the years. I first got it in 2004 when it was 2 years old, and the first MOT was in 2005. However it seems the service history starts in 2007, which, if I recall, was when MOT became a lot more electronic.\n","title":"MOT Mileage","type":"posts"},{"content":"","date":"13 May 2021","externalUrl":null,"permalink":"/tags/baking/","section":"Tags","summary":"","title":"Baking","type":"tags"},{"content":" Sourdough Starter # A sourdough starter is a way of making Sourdough. You can make it yourself by mixing flour and water and leaving it in a warm place over a number of days. Depending on the environment this takes up to a few weeks. Alternatively just get a few spoons of starter from a friend to kickstart your own! Just keep it in a pint glass with a cloth cover or beeswax cover.\nFeeding Starter # Once healthy if kept at room temperature it will need feeding every day. Just throw a bit away and add in 50g of water and 50g of flour, mix and leave. After feeding it should grow over the course of a few hours and then slowly settle back down. Initially once the cover comes off it will smell of the CO2 given off, much like carbonated water. It should smell nice with a slight vinegar smell.\nWhen healthy you can save flour by pausing a starter in a fridge. Take it out of the fridge and feed about 4-6 hours before using, eg first thing Friday morning for Saturday night Pizza.\nNaming your starter # Apparently you can name your starter after 2 weeks, we called ours Moby.\nPizza Dough # Feed starter before 9am. Make the dough around lunch time, mix 450g flour and 4g of salt afterwards then mix 280ml water together and let it sit for a bit (10-30min). Mix in 100g of starter to the mix and mix together until combined. If starter seems healthy return to fridge, else feed again and return to fridge later. Perform three \u0026ldquo;stretch and folds\u0026rdquo; at 30min intervals or when you remember. For each pull an edge of dough up and fold it back over itself, rotate the bowl 90 degrees and repeat round 6-10 times. Before going to bed lay out a tea towel, sprinkle with flour and put the dough on it. Then perform an \u0026ldquo;Envelope Fold\u0026rdquo;, pull a corner down and over the middle, then repeat on the opposite side after performing the same for the two other sides. Thus ending with a ball of dough covered in flour. Lift it up by the towel and place in a basket then place in the fridge. Remove from fridge the following evening before Pizza time. If lunch pizza is required just try to perform everything a few hours earlier as best you can without stressing too much. Pizza Making # Preheat fan oven to around 220C. Remove Pizza Dough from above. The above quantity is good for two large pizzas, use scissors to cut the dough in half. Take one half and join up the freshly cut part to in essence turn a semicircle into a circle. Work the dough into a pizza shape and place on an oiled pizza tray. Spread chopped tomatoes around in an even layer from the middle. Sprinkle oregano over. Cut the dry type of mozzarella into chunks and put on pizza. Apply other toppings. Cook for about 17min. Pictures # Moby straight from fridge Moby after feeding Moby covered Moby on the router Moby on the router before growth Moby on the router after growth Flour salt and water Flour salt and water mixed Flour salt and water fully mixed Adding Moby Moby added Mixing Moby in Mixed Proving Starting to rise Finished rise Envelope fold Ready for the fridge ","date":"13 May 2021","externalUrl":null,"permalink":"/posts/pizza/","section":"Posts","summary":"Sourdough Starter # A sourdough starter is a way of making Sourdough. You can make it yourself by mixing flour and water and leaving it in a warm place over a number of days. Depending on the environment this takes up to a few weeks. Alternatively just get a few spoons of starter from a friend to kickstart your own! Just keep it in a pint glass with a cloth cover or beeswax cover.\n","title":"Pizza","type":"posts"},{"content":"","date":"13 May 2021","externalUrl":null,"permalink":"/tags/pizza/","section":"Tags","summary":"","title":"Pizza","type":"tags"},{"content":"Modern Linux can have complicated DNS setup. However this is now necessary, gone are the days when you could just set one static name server in /etc/resolv.conf and walk away. This little piece just documents how I\u0026rsquo;ve got my systems setup.\nI\u0026rsquo;ve got systemd-resolved enabled and running, and I have also got /etc/resolv.conf linked to /run/systemd/resolve/stub-resolv.conf, this puts systemd-resolved into its \u0026ldquo;normal\u0026rdquo; mode. It then runs a local stub DNS server and listens on localhost. It also takes care to create a working resolv.conf file. So in essence local DNS queries go to systemd-resolved. Now meanwhile NetworkManager is also running, it detects that systemd-resolved is calling the shots, so any DNS information it gets it pushed to systemd-resolved. For example a WiFi connection with a name server of 192.168.1.1 and DNS search of lan get pushed to systemd-resolved and things generally work, eg a search of lan is added and resolved sends queries to this given name server. What\u0026rsquo;s more a VPN connection that also uses some other custom domain and DNS server can also be used transparently without polluting DNS names to the wrong servers, eg a VPN that is given a DNS server of 10.0.0.1 and a search of work will mean that foo.lan and foo.work can both be resolved on the system using two different name servers.\nWhat I wanted is more DNS integration with libvirt. The issue is that libvirt also does some network related activities, it\u0026rsquo;s got its own view of the world and can go a create bridges, various iptables to allow NAT to work and it also spawns a dnsmasq process as a helper for the VM\u0026rsquo;s and this acts as a DHCP and DNS server. By default on Debian you get an external network with 192.168.122.0/24 address that NAT\u0026rsquo;s to the Internet. While this appears in NetworkManager it\u0026rsquo;s created and managed via libvirt, eg it does not have an entry in /etc/NetworkManager/system-connections/, and even if it had libvirt would ignore it.\nSo to allow the system to talk to the libvirt dnsmasq process there has to be some sort of linkage. The way this is configured usually is for NetworkManager to use a ~ syntax for the dns search, thus is ~virt is set in the search then foo.virt is directed to the dns servers set in that connection. However because libvirt creates and destroys its networks there needs to be some sort of hook to modify the network.\nFortunately there are such hooks: /etc/NetworkManager/dispatcher.d/ which includes /etc/NetworkManager/dispatcher.d/01-ifupdown which in turn hooks: /etc/network/if-{up,down}.d. The idea is for this hook to add the necessary DNS server and search path. However when DNS settings are updated after libvirt has created the bridge they don\u0026rsquo;t take effect until the connection is downed and up again, eg when running \u0026ldquo;sudo nmcli connection modify virbr0 ipv4.dns 192.168.122.1\u0026rdquo; and \u0026ldquo;sudo nmcli connection modify virbr0 ipv4.dns-search \u0026lsquo;~virt;virt\u0026rsquo;\u0026rdquo; those settings don\u0026rsquo;t appear to be applied immediately or appear in nmcli output. Also if the underlying connection with the ~ search syntax is down, then the name servers don\u0026rsquo;t apply, which means that unless there is at least one VM running the per connection DNS server is not used.\nOne hack round this is to create a dummy interface with the right information on, which has the DNS servers set when the connection is created which takes effect immediately. I have found that in order for a NetworkManager connection to have ipv4 dns settings it requires either auto or manual ipv4.method, to prevent the interface sitting in an eternal connecting state as there is no DHCP server just giving it the last address of the external subnet works. Thus after libvirt creates virbr0 when you run: \u0026ldquo;sudo nmcli connection add type dummy ifname virbr0-dns con-name virbr0-dns ipv4.method manual ipv4.addresses 192.168.122.254/32 ipv4.dns 192.168.122.1 ipv4.dns-search \u0026lsquo;~virt virt\u0026rsquo; ipv6.method disabled\u0026rdquo; the queries for foo.virt are directed to 192.168.122.1 and what\u0026rsquo;s more virt is added to the search list so foo should also resolve.\nWhile I was configuring this to test I found the following useful to restart resolved, turn up it\u0026rsquo;s debug level, flush it\u0026rsquo;s cache, follow it\u0026rsquo;s log and start a tshark session to see what queries are going where: sudo systemctl restart systemd-resolved; sudo resolvectl log-level debug; sudo resolvectl flush-caches; sudo journalctl -fu systemd-resolved; sudo tshark -n -i any -f \u0026quot;port 53\u0026quot;\nAfter I used resolvectl to test lookups with: \u0026ldquo;resolvectl query debian.virt\u0026rdquo;\nSo to begin with I created a quick dispatched script \u0026ldquo;/etc/NetworkManager/dispatcher.d/libvirt\u0026rdquo;:\n#!/bin/sh -e if [ -z \u0026#34;$1\u0026#34; ]; then echo \u0026#34;$0: called with no interface\u0026#34; 1\u0026gt;\u0026amp;2 exit 1; fi export IFACE=\u0026#34;$1\u0026#34; case \u0026#34;$2\u0026#34; in up) virsh --connect qemu:///system net-list \\ | sed \u0026#34;1,2d\u0026#34; | head -n -1 | awk \u0026#39;{print $1}\u0026#39; \\ | while read -r VIRTNET; do NETBR=$(virsh --connect qemu:///system net-info \u0026#34;$VIRTNET\u0026#34; | awk \u0026#39;/Bridge:/{print $2}\u0026#39;) if [ \u0026#34;$IFACE\u0026#34; = \u0026#34;$NETBR\u0026#34; ]; then IP=\u0026#34;$(nmcli connection show \u0026#34;$IFACE\u0026#34; | awk \u0026#39;/ipv4.addresses/{print $2}\u0026#39;)\u0026#34; IP=\u0026#34;$(ipcalc -n \u0026#34;$IP\u0026#34; | awk \u0026#39;/HostMax:/{print $2}\u0026#39;)/32\u0026#34; DNS=$(nmcli connection show \u0026#34;$IFACE\u0026#34; | awk \u0026#39;/ipv4.addresses/{print $2}\u0026#39; | awk -F/ \u0026#39;{print $1}\u0026#39;) nmcli con del \u0026#34;${IFACE}-dns\u0026#34; 2\u0026gt; /dev/null|| true nmcli connection add type dummy \\ con-name \u0026#34;${IFACE}-dns\u0026#34; ifname \u0026#34;${IFACE}-dns\u0026#34; \\ ipv4.method manual ipv4.addresses \u0026#34;$IP\u0026#34; \\ ipv4.dns \u0026#34;$DNS\u0026#34; \\ ipv4.dns-search \u0026#34;~${VIRTNET}.virt ${VIRTNET}.virt\u0026#34; \\ ipv6.method disabled fi done ;; down) virsh --connect qemu:///system net-list \\ | sed \u0026#34;1,2d\u0026#34; | head -n -1 | awk \u0026#39;{print $1}\u0026#39; \\ | while read -r VIRTNET; do NETBR=$(virsh --connect qemu:///system net-info \u0026#34;$VIRTNET\u0026#34; | awk \u0026#39;/Bridge:/{print $2}\u0026#39;) if [ \u0026#34;$IFACE\u0026#34; = \u0026#34;$NETBR\u0026#34; ]; then nmcli con del \u0026#34;${IFACE}-dns\u0026#34; fi done ;; vpn-up|vpn-down|hostname|dhcp4-change|dhcp6-change) ;; *) echo \u0026#34;$0: called with unknown action \\`$2\u0026#39;\u0026#34; 1\u0026gt;\u0026amp;2 exit 1 ;; esac In addition the libvirt dnsmasq needs to be told about these new domains, so edit the libvirt network with: virsh --connect qemu:///system net-edit default then after the tag create a domain tag like: \u0026lt;domain name='default.libvirt' localOnly='yes'/\u0026gt;\nHosts can be created in two steps dhcp and dns eg:\n$ virsh --connect qemu:///system net-update default add ip-dhcp-host \u0026#34;\u0026lt;host mac=\u0026#39;52:54:00:de:97:a8\u0026#39; name=\u0026#39;debian\u0026#39; ip=\u0026#39;192.168.122.120\u0026#39; /\u0026gt;\u0026#34; --live --config $ virsh --connect qemu:///system net-update default add dns-host \u0026#34;\u0026lt;host ip=\u0026#39;192.168.122.120\u0026#39;\u0026gt;\u0026lt;hostname\u0026gt;debian\u0026lt;/hostname\u0026gt;\u0026lt;/host\u0026gt;\u0026#34; --live --config However this configuration is not added as part of virtual machine creation and needs to be done for each virtual machine. When machines start this virtual NICs create entries in /var/lib/libvirt/dnsmasq/{networkname}.macs eg virbr0.macs. So creating a systemd path unit to monitor this file and when it\u0026rsquo;s modified to run a another service, this can then hook in an update script.\nCreate /etc/systemd/system/updatelibvirtdns.path\n[Unit] Description=\u0026#34;Monitor /var/lib/libvirt/dnsmasq/virbr0.macs for changes\u0026#34; [Path] PathModified=/var/lib/libvirt/dnsmasq/virbr0.macs Unit=updatelibvirtdns.service [Install] WantedBy=multi-user.target And create /etc/systemd/system/updatelibvirtdns.service\n[Unit] Description=\u0026#34;Update libvirt DNS\u0026#34; [Service] ExecStart=/usr/local/bin/updatelibvirtdns.sh So now whenever virbr0.macs changes, the /usr/local/bin/updatelibvirtdns.sh script is run. If we assume that the qemu machine name matches the name for dns. This macs file is a json file that has the virtual machine name and mac address. It also needs to find on the IP address allocated from dnsmasq. The net-dhcp-leases virsh command can be used to get this information (eg \u0026ldquo;virsh \u0026ndash;connect qemu:///system net-dhcp-leases default\u0026rdquo;). This information can then be used to call the above net-update commands. The script needs to find out the name of the network (eg default).\nCreate this script: /usr/local/bin/updatelibvirtdns.sh\n#!/bin/bash -eu #set -x # run when /var/lib/libvirt/dnsmasq/*.macs update, eg virbr0.macs for br in /var/lib/libvirt/dnsmasq/*.macs; do brif=$(basename \u0026#34;$br\u0026#34; | awk -F. \u0026#39;{print $1}\u0026#39;) netfile=$(grep -l \u0026#34;interface=$brif\u0026#34; /var/lib/libvirt/dnsmasq/*.conf) net=$(basename \u0026#34;$netfile\u0026#34; | sed \u0026#39;s/\\.conf//\u0026#39;) jq -r \u0026#39;.[] | {domain: .domain, mac: .macs[0]} | join(\u0026#34; \u0026#34;)\u0026#39; \u0026lt; \u0026#34;$br\u0026#34; | while read -r entry; do #eg entry=debian 52:54:00:5b:33:65 name=$(echo \u0026#34;$entry\u0026#34; | awk \u0026#39;{print $1}\u0026#39;) mac=$(echo \u0026#34;$entry\u0026#34; | awk \u0026#39;{print $2}\u0026#39;) ip=$(virsh --connect qemu:///system net-dhcp-leases default | grep \u0026#34;$mac\u0026#34; | awk -F\u0026#39;[\\t /]+\u0026#39; \u0026#39;{print $6}\u0026#39;) # Add to default.hostsfile #52:54:00:5b:33:65,192.168.122.123,debian11 echo -n \u0026#34;Adding entry \u0026#39;$mac,$ip,$name\u0026#39; to /var/lib/libvirt/dnsmasq/$net.hostsfile ... \u0026#34; res=$(grep -c \u0026#34;$mac,$ip,$name\u0026#34; \u0026#34;/var/lib/libvirt/dnsmasq/$net.hostsfile\u0026#34; || true) if [ \u0026#34;$res\u0026#34; -ne 1 ]; then virsh --connect qemu:///system net-update default add ip-dhcp-host \u0026#34;\u0026lt;host mac=\u0026#39;$mac\u0026#39; name=\u0026#39;$name\u0026#39; ip=\u0026#39;$ip\u0026#39; /\u0026gt;\u0026#34; --live --config || true echo \u0026#34;done.\u0026#34; else echo \u0026#34;already added.\u0026#34; fi # Add to default.addnhosts #192.168.122.123 debian11 echo -n \u0026#34;Adding entry \u0026#39;$ip $name\u0026#39; to /var/lib/libvirt/dnsmasq/$net.addnhosts ... \u0026#34; res=$(grep -E -c \u0026#34;$ip.*$name\u0026#34; \u0026#34;/var/lib/libvirt/dnsmasq/$net.addnhosts\u0026#34; || true) if [ \u0026#34;$res\u0026#34; -ne 1 ]; then virsh --connect qemu:///system net-update default add dns-host \u0026#34;\u0026lt;host ip=\u0026#39;$ip\u0026#39;\u0026gt;\u0026lt;hostname\u0026gt;$name\u0026lt;/hostname\u0026gt;\u0026lt;/host\u0026gt;\u0026#34; --live --config || true echo \u0026#34;done.\u0026#34; else echo \u0026#34;already added.\u0026#34; fi done done TODO:\nThe updatelibvirtdns.sh script never delete entries. The systemd unit should search for all *.macs files, it seems that PathModifiedGlob does not exist yet so multiple path units need to be created, or parameterised ones created. The NetworkManager dispatcher should add host entry in libvirt for dummy dns interface to reserve the IP. ","date":"31 January 2021","externalUrl":null,"permalink":"/posts/libvirtdnsmasqresolved/","section":"Posts","summary":"Modern Linux can have complicated DNS setup. However this is now necessary, gone are the days when you could just set one static name server in /etc/resolv.conf and walk away. This little piece just documents how I’ve got my systems setup.\n","title":"libvirt, dnsmasq, NetworkManager, and systemd-resolved","type":"posts"},{"content":"","date":"31 January 2021","externalUrl":null,"permalink":"/tags/network/","section":"Tags","summary":"","title":"Network","type":"tags"},{"content":"","date":"31 January 2021","externalUrl":null,"permalink":"/tags/systemd/","section":"Tags","summary":"","title":"Systemd","type":"tags"},{"content":"","date":"28 December 2020","externalUrl":null,"permalink":"/tags/greasemonkey/","section":"Tags","summary":"","title":"Greasemonkey","type":"tags"},{"content":"","date":"28 December 2020","externalUrl":null,"permalink":"/tags/imdb/","section":"Tags","summary":"","title":"Imdb","type":"tags"},{"content":"IMDB Age is a Greasemonkey script that I wrote to add age and other various info onto IMDB pages.\nSpecifically it adds some details to actors or actresses pages. It adds their age, their Tropical Zodiac Sign and their Chinese Zodiac Sign. As well as adding how many years ago and how old they were when they made the listed films. It also adds how long ago a film was made on a film page.\nThis script is not abandoned, email thomas@stewarts.org.uk if it breaks.\nI have a few screenshots so you can see what it looks like.\nIt was created on 2005-03-29 but inspired sometime in 2001 and the last modification was on 2020-12-28. And the current version is v2.14. First you need Greasemonkey installed then install the script. It is available locally or on the userscripts server (down), greasyfork, monkeyguts (down), openuserjs or github.\nChangelog\n2.14 fixed icon, improved getNameDates, new style fixes, reformatting 2.13 added https urls, removed scriptvals, fixed title pages 2.12 fixed adding ages to individual films and fixed old style 2.11 fixed date grabbing again 2.10 fixed date grabbing 2.9 fixed adding year to title with many years 2.8 old style working, fixed death day for new style, improved year grabbing 2.7 added persistent config, changed namespace 2.6 fixed star signs and added unicode symbols 2.5 fixed imdb updates 2.4 fixed imdb updates 2.3 improved year grabbing 2.2 updated imdb text info, formatting, added ages to individual films 2.1 Major changes, added signs, added config 1.6 Added improvement ideas from Christopher J. Madsen, Added first imdb text files search, Reformatting 1.5 Removed function enclosing while script 1.3 First public version ","date":"28 December 2020","externalUrl":null,"permalink":"/projects/imdbage/","section":"Projects","summary":"IMDB Age is a Greasemonkey script that I wrote to add age and other various info onto IMDB pages.\n","title":"IMDB Age","type":"projects"},{"content":"","date":"28 December 2020","externalUrl":null,"permalink":"/tags/javascript/","section":"Tags","summary":"","title":"Javascript","type":"tags"},{"content":"","date":"28 December 2020","externalUrl":null,"permalink":"/tags/movies/","section":"Tags","summary":"","title":"Movies","type":"tags"},{"content":"","date":"22 December 2020","externalUrl":null,"permalink":"/tags/blog/","section":"Tags","summary":"","title":"Blog","type":"tags"},{"content":"","date":"22 December 2020","externalUrl":null,"permalink":"/tags/wireshark/","section":"Tags","summary":"","title":"Wireshark","type":"tags"},{"content":"Recently I helped troubleshoot a networking issue with a 1Gbps link that was being fully saturated. In the end we configured a mirror port and dumped the traffic to analyse it. We ended up with \u0026gt;1000, 100MB files covering a half hour window. I was not sure what to do with such a quantity of data ~100GB and in the end we looked at a few caps and found the issue. However I could not help but feel that because most of the caps only covered a few seconds that I was not really looking at the full picture.\nAfter the fact I made some discoveries\u0026hellip;\nmergecap # There is a tool called mergecap that can concatenate pcap files, however it complains when given \u0026gt;~1000 files. So in order to get one big file I had to run it a few times. First merging 100 files into large files and then merging the result into the final large file.\n$ for n in `seq 0 9`; do echo $n; mergecap -w badport_l00$n.cap badport_00$n*; done \u0026lt;SNIP\u0026gt; $ for n in `seq 0 9`; do echo $n; mergecap -w badport_l01$n.cap badport_01$n*; done \u0026lt;SNIP\u0026gt; $ mergecap -w barport.cap badport_l*.cap Memory required # I didn\u0026rsquo;t try opening the large 100G file with wireshark I went straight for tshark. However it exhausted all memory and eventually the OOM killer kicked in. After adding more memory to my virtual machine I found that for a 109G pcap that 72G memory is required. Indicating that a potential rule of thumb is that to open or process a pcap of size n one requires two thirds the size of n\u0026rsquo;s memory available.\nStatistics # I was not really interested in viewing all packets; I wanted to get a feel for the entire data set. The two main commands to do this are:\ntshark -q -r badport.cap -z io,phs tshark -q -r badport.cap -z endpoints,ip | head -50 These turn on quiet mode, read from the badport.cap file and print either the Protocol Hierarchy Statistics or IPv4 Endpoints statistics.\nEach of these took around 30 min to complete, which means that best case between copying the pcaps to the host, merging the pcaps and running the tshark statistics its best case time is around 2 hours.\nConclusion # I think I\u0026rsquo;ve concluded that next time I should aim to concatenate down to around 10G max, as these files are a lot easier to work with (eg, 2 minutes to complete above statistics). Also The above 2 hour process found the same issue that looking at a single 100M cap did.\n","date":"22 December 2020","externalUrl":null,"permalink":"/posts/largepcaps/","section":"Posts","summary":"Recently I helped troubleshoot a networking issue with a 1Gbps link that was being fully saturated. In the end we configured a mirror port and dumped the traffic to analyse it. We ended up with \u003e1000, 100MB files covering a half hour window. I was not sure what to do with such a quantity of data ~100GB and in the end we looked at a few caps and found the issue. However I could not help but feel that because most of the caps only covered a few seconds that I was not really looking at the full picture.\n","title":"Working with large PCAPs","type":"posts"},{"content":"Email is on Onyx\n","date":"11 August 2020","externalUrl":null,"permalink":"/posts/services/","section":"Posts","summary":"Email is on Onyx\n","title":"Services","type":"posts"},{"content":"","date":"11 August 2020","externalUrl":null,"permalink":"/tags/services/","section":"Tags","summary":"","title":"Services","type":"tags"},{"content":" kunzite # Kunzite was my main UML and latterly kvm virtual machine hosted by Bytemark, they are an amazing company, and I highly recommend them! It was long lived, kunzite was first installed on 18th October 2005 with 80Meg ram with 4GB of disk and it finished with 488Meg ram and 20G disk. I\u0026rsquo;ve migrated all services to another VM called beryl running on Bytemark\u0026rsquo;s BigV.\nberyl # Beryl is a BigV virtual machine hosted by Bytemark, they are an amazing company, and I highly recommend them!\nonyx # Onyx is a VM run on Mythic Beasts which runs my email and DNS. I would highly recommend them!\n","date":"16 July 2020","externalUrl":null,"permalink":"/posts/servers/","section":"Posts","summary":"kunzite # Kunzite was my main UML and latterly kvm virtual machine hosted by Bytemark, they are an amazing company, and I highly recommend them! It was long lived, kunzite was first installed on 18th October 2005 with 80Meg ram with 4GB of disk and it finished with 488Meg ram and 20G disk. I’ve migrated all services to another VM called beryl running on Bytemark’s BigV.\n","title":"Servers","type":"posts"},{"content":"","date":"16 July 2020","externalUrl":null,"permalink":"/tags/servers/","section":"Tags","summary":"","title":"Servers","type":"tags"},{"content":"My Tomsweb site has been on MoinMoin for 11 years and has served me well! However I\u0026rsquo;ve just migrated to a statically generated site builder called Hugo. It\u0026rsquo;s stored in gitlab.com/thomasdstewart/tomsweb/ and the CI/CD generates the pages and serves the content. So now I don\u0026rsquo;t need to run an Apache server anymore.\n","date":"15 July 2020","externalUrl":null,"permalink":"/posts/hugo/","section":"Posts","summary":"My Tomsweb site has been on MoinMoin for 11 years and has served me well! However I’ve just migrated to a statically generated site builder called Hugo. It’s stored in gitlab.com/thomasdstewart/tomsweb/ and the CI/CD generates the pages and serves the content. So now I don’t need to run an Apache server anymore.\n","title":"Hugo","type":"posts"},{"content":"","date":"15 July 2020","externalUrl":null,"permalink":"/tags/hugo/","section":"Tags","summary":"","title":"Hugo","type":"tags"},{"content":" https://gravatar.com/thomasdstewart https://about.me/thomas_d_stewart https://robots.org.uk/ ","date":"5 April 2020","externalUrl":null,"permalink":"/links/","section":"TomsWeb","summary":" ","title":"Links","type":"page"},{"content":" Introduction # I recently needed to monitor temperature, log it, and alert on high readings. I had a look in my parts bin and I found a Raspberry Pi, a 1-Wire HBA, a 1-Wire temperature IC and a 3G dongle.\nSolution # I needed a quick way to create an image I could throw on the Pi. I didn\u0026rsquo;t want to have to maintain it, and if it fails I want to be able to generate a replacement image easily.\nIn the end I created the below script. It\u0026rsquo;s not particularly nice, but it works.\nMethod # #!/bin/bash -x umount /dev/loop0 rm -r -f /home/thomas/rpi23-gen-image export proxy=1.2.3.4:3128 export somemirror=debmirror export ntpserver=1.2.3.4 export pinghost=1.2.3.4 export nhostname=logger export smarthost=smarthost.isp.com export http_proxy=\u0026#34;http://$proxy/\u0026#34; export https_proxy=\u0026#34;http://$proxy/\u0026#34; git clone https://github.com/drtyhlpr/rpi23-gen-image.git /home/thomas/rpi23-gen-image sed -i \u0026#39;s/\\(.*firmware_install\\)/#\\1/\u0026#39; /home/thomas/rpi23-gen-image/bootstrap.d/13-kernel.sh cd /home/thomas/rpi23-gen-image cat \u0026lt;\u0026lt; EOF \u0026gt; bootstrap.d/80-local.sh . ./functions.sh sed -i \u0026#39;s/ftp.debian.org/$somemirror/\u0026#39; \u0026#34;\\${ETC_DIR}/apt/sources.list\u0026#34; echo \u0026#34;Europe/London\u0026#34; \u0026gt; \u0026#34;\\${ETC_DIR}/timezone\u0026#34; sed -i \u0026#34;s/^pool/#pool/\u0026#34; \u0026#34;\\${ETC_DIR}/ntp.conf\u0026#34; echo \u0026#34;server $ntpserver iburst\\n\u0026#34; \u0026gt;\u0026gt; \u0026#34;\\${ETC_DIR}/ntp.conf\u0026#34; echo \u0026#34;Acquire::http::Proxy \\\u0026#34;http://$proxy/\\\u0026#34;;\\n\u0026#34; \u0026gt; \u0026#34;\\${ETC_DIR}/apt/apt.conf.d/99proxy\u0026#34; cat files/ferm.conf \u0026gt; \u0026#34;\\${ETC_DIR}/ferm/ferm.conf\u0026#34; cat files/50unattended-upgrades-local \u0026gt; \u0026#34;\\${ETC_DIR}/apt/apt.conf.d/50unattended-upgrades-local\u0026#34; cat files/sms-service-notification.sh \u0026gt; \u0026#34;\\${ETC_DIR}/icinga2/scripts/sms-service-notification.sh\u0026#34; chmod +x \u0026#34;\\${ETC_DIR}/icinga2/scripts/sms-service-notification.sh\u0026#34; cat files/check_w1retap \u0026gt; \u0026#34;\\${ETC_DIR}/icinga2/scripts/check_w1retap\u0026#34; chmod +x \u0026#34;\\${ETC_DIR}/icinga2/scripts/check_w1retap\u0026#34; cat files/prometheus-w1retap.sh \u0026gt; \u0026#34;\\${ETC_DIR}/icinga2/scripts/prometheus-w1retap.sh\u0026#34; chmod +x \u0026#34;\\${ETC_DIR}/icinga2/scripts/prometheus-w1retap.sh\u0026#34; cat files/local.conf \u0026gt; \u0026#34;\\${ETC_DIR}/icinga2/conf.d/local.conf\u0026#34; #sed -i \u0026#39;s/}//\u0026#39; \u0026#34;\\${ETC_DIR}/icinga2/conf.d/apt.conf\u0026#34; #echo \u0026#34;\\ninterval = 86400\\n}\\n\u0026#34; \u0026gt;\u0026gt; \u0026#34;\\${ETC_DIR}/icinga2/conf.d/apt.conf\u0026#34; sed -i \u0026#39;s/vars.backup_downtime/#vars.backup_downtime/\u0026#39; \u0026#34;\\${ETC_DIR}/icinga2/conf.d/services.conf\u0026#34; sed -i \u0026#39;s/^/#/\u0026#39; \u0026#34;\\${ETC_DIR}/icinga2/conf.d/users.conf\u0026#34; cat files/backup.sh \u0026gt; \u0026#34;\\${ETC_DIR}/cron.daily/backup.sh\u0026#34; chmod +x \u0026#34;\\${ETC_DIR}/cron.daily/backup.sh\u0026#34; echo \u0026#34;* * * * * root ping -c 1 -n $pinghost \u0026gt; /dev/null\u0026#34; \u0026gt; \u0026#34;\\${ETC_DIR}/cron.d/pinghome\u0026#34; echo \u0026#34;0 * * * * root chmod -R o+r /var/log/icinga2/compat\u0026#34; \u0026gt; \u0026#34;\\${ETC_DIR}/cron.d/fix-icinga-perm\u0026#34; sed -i \u0026#39;s#^dc_eximconfig_configtype=.*#dc_eximconfig_configtype=satellite#\u0026#39; \u0026#34;\\${ETC_DIR}/exim4/update-exim4.conf.conf\u0026#34; sed -i \u0026#39;s#^dc_readhost=.*#dc_readhost=$nhostname#\u0026#39; \u0026#34;\\${ETC_DIR}/exim4/update-exim4.conf.conf\u0026#34; sed -i \u0026#39;s#^dc_smarthost=.*#dc_smarthost=$smarthost#\u0026#39; \u0026#34;\\${ETC_DIR}/exim4/update-exim4.conf.conf\u0026#34; sed -i \u0026#39;s#^dc_hide_mailname=.*#dc_hide_mailname=true#\u0026#39; \u0026#34;\\${ETC_DIR}/exim4/update-exim4.conf.conf\u0026#34; sed -i \u0026#39;s#^device = .*#device = /dev/modem00#\u0026#39; \u0026#34;\\${ETC_DIR}/smsd.conf\u0026#34; sed -i \u0026#39;s#^GROUP=.*#GROUP=\\\u0026#34;smsd\\\u0026#34;#\u0026#39; \u0026#34;\\${ETC_DIR}/default/smstools\u0026#34; echo \u0026#39;ACTION==\u0026#34;add\u0026#34;, SUBSYSTEM==\u0026#34;tty\u0026#34;, ATTRS{idVendor}==\u0026#34;12d1\u0026#34;, ATTRS{idProduct}==\u0026#34;1001\u0026#34;, SYMLINK+=\u0026#34;modem%E{ID_USB_INTERFACE_NUM}\u0026#34;\u0026#39; \u0026gt; \u0026#34;\\${ETC_DIR}/udev/rules.d/99-usb-serial.rules\u0026#34; sed -i \u0026#39;s#^log.*#log = w1sqlite=/var/lib/w1retap/w1retap.sqlite#\u0026#39; \u0026#34;\\${ETC_DIR}/w1retap.conf\u0026#34; echo \u0026#34;282BE781080000A8|DS1820|ROOM|Temperature #1|°C|||||\u0026#34; \u0026gt;\u0026gt; \u0026#34;\\${ETC_DIR}/w1retap-sensors.dat\u0026#34; mkdir -p \u0026#34;\\${ETC_DIR}/systemd/system/w1retap.service.d\u0026#34; echo \u0026#34;[Service]\\nExecStart=\\nExecStart=/usr/bin/w1retap -d -R -t 60\\nRestart=always\\n\u0026#34; \u0026gt; \u0026#34;\\${ETC_DIR}/systemd/system/w1retap.service.d/override.conf\u0026#34; mkdir -p \u0026#34;\\${ETC_DIR}/systemd/system/paths.target.wants\u0026#34; echo \u0026#34;[Unit]\\nDescription=Read data from w1retap database when .w1retap.dat is updated\\n\\n[Path]\\nPathChanged=/var/lib/w1retap/.w1retap.dat\\n\\n[Install]\\nWantedBy=paths.target\\n\u0026#34; \u0026gt; \u0026#34;\\${ETC_DIR}/systemd/system/prometheus-w1retap.path\u0026#34; echo \u0026#34;[Unit]\\nDescription=Publish w1retap readings to prometheus\\n\\n[Service]\\nType=oneshot\\nExecStart=/etc/icinga2/scripts/prometheus-w1retap.sh\\n\u0026#34; \u0026gt; \u0026#34;\\${ETC_DIR}/systemd/system/prometheus-w1retap.service\u0026#34; ln -s /etc/systemd/system/prometheus-w1retap.path \u0026#34;\\${ETC_DIR}/systemd/system/paths.target.wants/prometheus-w1retap.path\u0026#34; ln -s /lib/systemd/system/w1retap.service \u0026#34;\\${ETC_DIR}/systemd/system/multi-user.target.wants/w1retap.service\u0026#34; ln -s /lib/systemd/system/prometheus-node-exporter.service \u0026#34;\\${ETC_DIR}/systemd/system/multi-user.target.wants/prometheus-node-exporter.service\u0026#34; EOF cat \u0026lt;\u0026lt;EOF \u0026gt; files/ferm.conf domain (ip ip6) chain (INPUT OUTPUT FORWARD) policy DROP; domain (ip ip6) chain (INPUT OUTPUT) { mod conntrack ctstate INVALID DROP; mod conntrack ctstate (ESTABLISHED RELATED) ACCEPT; } domain (ip ip6) chain INPUT interface lo ACCEPT; domain (ip ip6) chain OUTPUT interface lo ACCEPT; domain ip chain (INPUT FORWARD OUTPUT) proto icmp ACCEPT; domain ip6 chain (INPUT FORWARD OUTPUT) proto icmpv6 ACCEPT; domain (ip ip6) chain INPUT { proto tcp dport (ssh http https 9100) ACCEPT; } domain (ip ip6) chain OUTPUT { proto (tcp udp) dport domain ACCEPT; proto udp dport ntp ACCEPT; proto tcp dport (ssh smtp http https 3128 8080) ACCEPT; } domain (ip ip6) chain INPUT NFLOG nflog-prefix \u0026#39;INPUT\u0026#39;; domain (ip ip6) chain FORWARD NFLOG nflog-prefix \u0026#39;FORWARD\u0026#39;; domain (ip ip6) chain OUTPUT NFLOG nflog-prefix \u0026#39;OUTPUT\u0026#39;; domain ip chain (INPUT FORWARD OUTPUT) REJECT reject-with icmp-admin-prohibited; domain ip6 chain (INPUT FORWARD OUTPUT) REJECT reject-with icmp6-adm-prohibited; EOF cat \u0026lt;\u0026lt;EOF \u0026gt; files/50unattended-upgrades-local Unattended-Upgrade::Origins-Pattern { \u0026#34;o=Debian,a=stable\u0026#34;; \u0026#34;o=Debian,a=stable-updates\u0026#34;; \u0026#34;o=Debian,a=proposed-updates\u0026#34;; \u0026#34;o=Debian,a=stable-backports\u0026#34;; \u0026#34;origin=Debian,archive=stable,label=Debian-Security\u0026#34;; }; Unattended-Upgrade::Mail \u0026#34;root\u0026#34;; Unattended-Upgrade::Automatic-Reboot \u0026#34;false\u0026#34;; APT::Periodic::Update-Package-Lists \u0026#34;1\u0026#34;; APT::Periodic::Unattended-Upgrade \u0026#34;1\u0026#34;; EOF cat \u0026lt;\u0026lt;EOF \u0026gt; files/backup.sh #!/bin/sh set -eu export OS_TOKEN=\u0026#34;*********\u0026#34; export OS_OBJECT_STORE=\u0026#34;https://openstackapi.endpoint:port/swift/v1\u0026#34; curl -k -H \u0026#34;X-Auth-Token: \\$OS_TOKEN\u0026#34; -X PUT \u0026#34;\\$OS_OBJECT_STORE/logger\u0026#34; cat /var/lib/w1retap/w1retap.sqlite | gzip \u0026gt; /var/lib/w1retap/w1retap.sqlite.gz curl -k -H \u0026#34;X-Auth-Token: \\$OS_TOKEN\u0026#34; -X PUT -T /var/lib/w1retap/w1retap.sqlite.gz \u0026#34;\\$OS_OBJECT_STORE/logger/w1retap.sqlite.gz\u0026#34; EOF cat \u0026lt;\u0026lt;EOF \u0026gt; files/sms-service-notification.sh #!/bin/sh template=\\$(cat \u0026lt;\u0026lt;TEMPLATE To: \\$USERPAGER \\$NOTIFICATIONTYPE - \\$SERVICEDISPLAYNAME is \\$SERVICESTATE - \\$SERVICEOUTPUT at \\$LONGDATETIME TEMPLATE ) /usr/bin/printf \u0026#34;%b\u0026#34; \u0026#34;\\$template\u0026#34; \u0026gt; /var/spool/sms/outgoing/\\$(date +%s%N) EOF cat \u0026lt;\u0026lt;EOF \u0026gt; files/prometheus-w1retap.sh #!/bin/bash set -eu dir=/var/lib/prometheus/node-exporter if [[ ! -d \\$dir ]]; then echo \u0026#39;prometheus-node-exporter not installed?\u0026#39; \u0026gt;\u0026amp;2 exit 0 fi q=$\u0026#39; SELECT \u0026#34;w1retap_temp_celsius{id=\u0026#34;\u0026#34;\u0026#34; || value || \u0026#34;\u0026#34;\u0026#34;,type=\u0026#34;\u0026#34;\u0026#34; || abbrv1 || \u0026#34;\u0026#34;\u0026#34;,name=\u0026#34;\u0026#34;\u0026#34; || name1 || \u0026#34;\u0026#34;\u0026#34;} \u0026#34; || value FROM readings INNER JOIN w1sensors ON readings.name = w1sensors.name1 WHERE date \u0026gt; strftime(\\\u0026#39;%s\\\u0026#39;, \\\u0026#39;now\\\u0026#39;) - 60 GROUP BY type,abbrv1,name1,value ; \u0026#39; ( echo \u0026#34;# HELP w1retap_temp_celsius Temperature in Celsius\u0026#34; echo \u0026#34;# TYPE w1retap_temp_celsius gauge\u0026#34; sqlite3 -cmd \u0026#34;\\$q\u0026#34; /var/lib/w1retap/w1retap.sqlite \u0026lt; /dev/null ) \u0026gt; \u0026#34;\\$dir/w1retap.prom.tmp\u0026#34; mv \u0026#34;\\$dir/w1retap.prom.tmp\u0026#34; \u0026#34;\\$dir/w1retap.prom\u0026#34; EOF cat \u0026lt;\u0026lt;EOF \u0026gt; files/check_w1retap #!/bin/bash set -eu sensor_name=\u0026#34;ROM\u0026#34; #warning=20 #critical=21 warning=27 critical=28 udate=\\$(awk -F= \u0026#39;/udate=/{print \\$2}\u0026#39; /var/lib/w1retap/.w1retap.dat) now=\\$(date +%s) if [[ \\$(( \\$now - \\$udate )) -ge 65 ]]; then echo \u0026#34;UNKNOWN - Data out of date\u0026#34; exit 3 fi value=\\$(awk -F= \u0026#34;/\\$sensor_name=/{print \\\\\\$2}\u0026#34; /var/lib/w1retap/.w1retap.dat | awk \u0026#39;{print \\$1}\u0026#39;) if [[ \\$( echo \u0026#34;\\$value \u0026gt; \\$critical\u0026#34; | bc -l) -eq 1 ]]; then echo \u0026#34;CRITICAL - w1retap temperature \\$value C\u0026#34; exit 2 elif [[ \\$( echo \u0026#34;\\$value \u0026gt; \\$warning\u0026#34; | bc -l) -eq 1 ]]; then echo \u0026#34;WARNING - w1retap temperature \\$value C\u0026#34; exit 1 else echo \u0026#34;OK - w1retap temperature \\$value C\u0026#34; exit 0 fi EOF cat \u0026lt;\u0026lt;EOF \u0026gt; files/local.conf apply Service \u0026#34;w1retap\u0026#34; { import \u0026#34;generic-service\u0026#34; check_command = \u0026#34;w1retap\u0026#34; assign where host.name == NodeName check_interval = 15s retry_interval = 15s } object UserGroup \u0026#34;icingaadmins\u0026#34; { display_name = \u0026#34;Icinga 2 Admin Group\u0026#34; } object User \u0026#34;thomas\u0026#34; { import \u0026#34;generic-user\u0026#34; display_name = \u0026#34;thomas\u0026#34; groups = [ \u0026#34;icingaadmins\u0026#34; ] email = \u0026#34;thomas@stewarts.org.uk\u0026#34; pager = \u0026#34;447987654321\u0026#34; } object CheckCommand \u0026#34;w1retap\u0026#34; { command = [ \u0026#34;/etc/icinga2/scripts/check_w1retap\u0026#34; ] } object NotificationCommand \u0026#34;sms-service-notification\u0026#34; { command = [ \u0026#34;/etc/icinga2/scripts/sms-service-notification.sh\u0026#34; ] env = { NOTIFICATIONTYPE = \u0026#34;\\$notification.type$\u0026#34; SERVICEDESC = \u0026#34;\\$service.name$\u0026#34; HOSTALIAS = \u0026#34;\\$host.display_name$\u0026#34; HOSTADDRESS = \u0026#34;\\$address$\u0026#34; SERVICESTATE = \u0026#34;\\$service.state$\u0026#34; LONGDATETIME = \u0026#34;\\$icinga.long_date_time$\u0026#34; SERVICEOUTPUT = \u0026#34;\\$service.output$\u0026#34; NOTIFICATIONAUTHORNAME = \u0026#34;\\$notification.author$\u0026#34; NOTIFICATIONCOMMENT = \u0026#34;\\$notification.comment$\u0026#34; HOSTDISPLAYNAME = \u0026#34;\\$host.display_name$\u0026#34; SERVICEDISPLAYNAME = \u0026#34;\\$service.display_name$\u0026#34; USERPAGER = \u0026#34;\\$user.pager$\u0026#34; } } apply Notification \u0026#34;sms-icingaadmin\u0026#34; to Service { import \u0026#34;mail-service-notification\u0026#34; command = \u0026#34;sms-service-notification\u0026#34; user_groups = host.vars.notification.mail.groups users = host.vars.notification.mail.users assign where host.vars.notification.mail } object ScheduledDowntime \u0026#34;weeklytest-downtime\u0026#34; { host_name = \u0026#34;logger\u0026#34; service_name = \u0026#34;w1retap\u0026#34; author = \u0026#34;icingaadmin\u0026#34; comment = \u0026#34;Scheduled downtime for weekly test\u0026#34; ranges = { \u0026#34;friday\u0026#34; = \u0026#34;13:30-13:32\u0026#34; } } EOF #TODO #check email setup re root email #root resize seems to fail # in notification: # if (service.vars.notification_interval) { # interval = service.vars.notification_interval # } # in service: # vars.notification_interval = 43200 #root@logger:~# cat /etc/cron.d/check #* * * * * root /root/check.sh #root@logger:~# grep . /root/check.sh ##!/bin/bash #set -eu #files=\u0026#34;$(find /var/spool/sms/incoming -type f)\u0026#34; #for file in $files; do #\tif [ \u0026#34;$(tail -1 $file | grep temp | wc -l)\u0026#34; -eq 1 ]; then #\tfrom=\u0026#34;$(grep \u0026#34;From:\u0026#34; $file | awk \u0026#39;{print $2}\u0026#39;)\u0026#34; #\thist=\u0026#34;$(sqlite3 -cmd \u0026#34;SELECT date, value FROM readings ORDER BY date DESC LIMIT 10;\u0026#34; /var/lib/w1retap/w1retap.sqlite \u0026lt; /dev/null | sed \u0026#39;s/|/ /\u0026#39; | while read line; do d=$(echo $line | awk \u0026#39;{print $1}\u0026#39;); d=$(date -d @$d --iso-8601=minutes | sed \u0026#39;s/:00//\u0026#39;); v=$(echo $line | awk \u0026#39;{print $2}\u0026#39;); echo \u0026#34;$d $v\u0026#34;; done)\u0026#34; #\techo -en \u0026#34;To: $from\\n\\n$(cat /var/lib/w1retap/.w1retap.dat | grep -v udate | xargs)\\n$hist\u0026#34; \\ #\t\u0026gt; /var/spool/sms/outgoing/$(date +%s%N) #\tsed -i \u0026#39;s/temp/TEMP/\u0026#39; $file #\tfi #done #root@logger:~# #INFO #send test txt: echo -en \u0026#34;To: 447987654321\\n\\ntest\\n\u0026#34; \u0026gt; /var/spool/sms/outgoing/test #FIRST BOOT # sudo passwd user # sudo dpkg-reconfigure tzdata # echo \u0026#34;exim4-config exim4/dc_postmaster string thomas@stewarts.org.uk\u0026#34; | sudo debconf-set-selections # sudo update-exim4.conf # echo \u0026#34;root: thomas@stewarts.org.uk\u0026#34; | sudo tee -a /etc/aliases # sudo usermod -a -G smsd nagios # sudo htpasswd /etc/icinga2-classicui/htpasswd.users icingaadmin # sudo -u w1retap sqlite3 /var/lib/w1retap/w1retap.sqlite \u0026lt; /usr/share/doc/w1retap-doc/mksens.sql # sudo w1find DS2490-1 | w1sensors | sed \u0026#39;s/NULL,NULL,//\u0026#39; | sed \u0026#39;s/TMP_1/ROOM/\u0026#39; | sudo -u w1retap sqlite3 /var/lib/w1retap/w1retap.sqlite # sudo systemctl reboot export proxy=\u0026#34;http://$proxy/\u0026#34; cat \u0026lt;\u0026lt;EOF \u0026gt; templates/logger export http_proxy=\u0026#34;$proxy\u0026#34; export https_proxy=\u0026#34;$proxy\u0026#34; export no_proxy=\u0026#34;$mirror\u0026#34; export APT_PROXY=\u0026#34;$proxy\u0026#34; export APT_SERVER=\u0026#34;$mirror\u0026#34; export APT_INCLUDES=\u0026#34;aptitude,atop,bash-completion,bc,bind9-host,busybox,curl,debian-goodies,debsums,dnsutils,dstat,etckeeper,fake-hwclock,ferm,file,firmware-linux-free,git,htop,less,mtr,netcat-openbsd,nmap,ntp,ntpdate,parted,psmisc,psutils,pv,resolvconf,rsync,screen,tcpdump,telnet,ulogd2,unattended-upgrades,usbutils,vim,vnstat,w1retap,w1retap-sqlite,w1retap-doc,smstools,prometheus-node-exporter,icinga2,sqlite3,apache2,icinga2-classicui,monitoring-plugins-basic,exim4-daemon-light,dphys-swapfile,strace,mailutils\u0026#34; export RPI_MODEL=2 export RELEASE=\u0026#34;stretch\u0026#34; export HOSTNAME=\u0026#34;$hostname\u0026#34; export USER_PASSWORD=\u0026#34;password\u0026#34; export DEFLOCAL=\u0026#34;en_GB.UTF-8\u0026#34; export TIMEZONE=\u0026#34;Europe/London\u0026#34; export EXPANDROOT=true export ENABLE_DHCP=true export ENABLE_CONSOLE=true export ENABLE_NONFREE=true export ENABLE_SOUND=false export ENABLE_MINGPU=false export ENABLE_USER=true export USER_NAME=user export BUILD_KERNEL=false export ENABLE_HARDNET=true export NET_NTP_1=\u0026#34;$ntpserver\u0026#34; EOF CONFIG_TEMPLATE=logger ./rpi23-gen-image.sh exit #sudo bmaptool copy /home/thomas/rpi23-gen-image/images/stretch/*.img /dev/mmcblk0 ","date":"6 July 2018","externalUrl":null,"permalink":"/projects/raspberrypitemperaturemonitor/","section":"Projects","summary":"Introduction # I recently needed to monitor temperature, log it, and alert on high readings. I had a look in my parts bin and I found a Raspberry Pi, a 1-Wire HBA, a 1-Wire temperature IC and a 3G dongle.\n","title":"Raspberry Pi Temperature Monitor","type":"projects"},{"content":"","date":"22 March 2018","externalUrl":null,"permalink":"/tags/openstack/","section":"Tags","summary":"","title":"Openstack","type":"tags"},{"content":"Red Hat Enterprise Linux OpenStack Platform Versions:\nOpen Stack Code Name Openstack Release date RHEL OSP version RHEL OSP Release Delay Folsom 2012-09-27 2.1 2013-04-10 195 days Grizzly 2013-04-04 3 2013-07-10 97 days Havana 2013-10-17 4 2013-12-19 63 days Icehouse 2014-04-17 5 2014-06-30 74 days Juno 2014-10-16 6 2015-02-09 116 days Kilo 2015-04-30 7 2015-08-05 97 days Liberty 2015-10-15 8 2016-04-20 188 days Mitaka 2016-04-07 9 2016-08-24 139 days Newton 2016-10-06 10 2016-12-15 70 days Ocata 2017-02-22 11 2017-05-18 85 days Pike 2017-08-30 12 2017-12-13 105 days Queens 2018-02-28 Rocky TBC (111 days delay as average)\nhttps://access.redhat.com/articles/1250803 https://wiki.openstack.org/wiki/Releases http://releases.openstack.org/ https://access.redhat.com/support/policy/updates/openstack/platform/ https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux_OpenStack_Platform/2/html/Release_Notes/appe-Documentation-Release_Notes-Revision_History.html https://www.redhat.com/en/about/press-releases/red-hat-powers-cloud-scale-devops-general-availability-red-hat-cloud-suite-and-red-hat-openstack-platform-8 ","date":"22 March 2018","externalUrl":null,"permalink":"/posts/rhelospversions/","section":"Posts","summary":"Red Hat Enterprise Linux OpenStack Platform Versions:\n","title":"RHEL OSP Versions","type":"posts"},{"content":" Introduction # I have known about reel to reel tape for some time, my Dad has an old 1960\u0026rsquo;s player in the attic. However it is only relatively recently that I found out that there are some people that still use them for music listening purposes. I think my first real exposure was on the Techmoan YouTube channel, I saw a video about Tips and advice for the Reel-to-Reel buying newbie. Instantly I decided it was a waste of time and money. However the more I thought about it the more I liked the idea of selecting an album or compilation of music, starting the tape and not being able to skip tracks easily. All while seeing the tape player play while listening to the music. The other appealing idea was the retro design and the look of 10 inch tape spools. I continued to think about reel to reel, secretly wanting a player. Till a friend reminded me that people generally spend far more on \u0026ldquo;ornaments\u0026rdquo; for their houses than the average cost of a working tape player. This changed my mind, I instantly did an ebay search and found a player that ticked every box: a direct drive so that no belts would need changing, a head that is not prone to wearing out, a model that takes 1/4 inch tape and 10 inch tape reels, touch buttons rather than large mechanical piano key controls, vu meters, a nice 80s black finish and most importantly in working order. To make it even better it was a buy it now auction that was in the neighbouring town. So I bid, won, paid and picked it up the same day!\nI\u0026rsquo;m very pleased with it.\nA note on getting 1/4 tape # New tape is hard to find and costly because there are not many companies making tape anymore. I ruled out buying new tape as I\u0026rsquo;m not completely crazy. New tape is available second hand on eBay. It is called \u0026ldquo;new old stock\u0026rdquo; or \u0026ldquo;NOS\u0026rdquo;, which is essentially shrink wrapped tape that has not been used yet. The next step down is random tape from \u0026ldquo;masters\u0026rdquo;. These are reels of used tape that were once used in some sort of studio. There will be cuts and the amount of tape per reel will vary. There is another form available on ebay which is old consumer tape of varying quality. I stayed away from the latter and managed to find a good deal on ebay for 10 used reels of tape that were discarded from an archive. They were \u0026ldquo;masters\u0026rdquo; for an audio book, so had cut marks in and the amount of tape on each reel varies. However all the reels were nice polished aluminium and mostly full. As with audio in general there is a fair amount of snake oil about and I discovered that the type of tape seems to be highly debated. I think I got lucky with the tape, in any case the recordings I have made play back fine and the tape head does not get too messy.\nThe project # I got an Akai GX-620 reel to reel tape player. While researching the player I found the service manual and read it. Also before I got my player and when I was looking for players I found out that some players including my own had a wired remote control add on. It is a small box that had the normal tape function buttons with a wire that plugs into the back of the tape player. Thus you could control the player from the comfort of the couch without getting up.\nThis all leads me to this project: Why not connect a Raspberry Pi up to the tape player and remotely control it!\nWhich is exactly what I did. I made a cable from the tape player to a relay board, connected the relay board to the GPIO pins on a Raspberry Pi, connected a usb IR receiver to the Raspberry Pi and wrote a two short python scripts to stick it all together. So now I can control my 20+ year old tape player using my new remote control or mobile phone!\nSignaling and Connectors # While the project was in its inception phase, I started researching how the tape player remote controls work and how I could connect a new cable to the tape player. I found some ebay listings where people have created replacement remote control units and even old remote control units. However I ruled both these options out as they cost too much. However the service manual did have a schematic that had the player\u0026rsquo;s circuit diagram. So I was able to understand what sort of circuit to make. If this was a modern device it would use some sort of advanced communication (i2c, 1wire, serial, usb, etc). However this was old. The connector on the back of the player had a number of pins and one was ground. Each of the other pins was related to some tape function (fast forward, stop, play, etc). These functions go in parallel to the function buttons on the unit. So if a function pin was shorted to ground momentarily then it performed that function, just like the actions of the switch on the front of the player. This is great, because a simple relay works.\nThe next step was to find out what the connector on the back of the tape player was. I had never seen anything like it before. The only thing I knew was that it looked like the socket for a vacuum tube. So with a reasonable amount of Google and Internet foo I eventually found out the name of that connector type as \u0026ldquo;86 Series Connector\u0026rdquo;. Without this it\u0026rsquo;s hard to find more information, a producer or supplier. I can only assume that back then there were not many multi connection sockets and plugs that were fine for low voltage non commercial applications. I\u0026rsquo;m not sure when the DIN series came along, I guess a 6 connector one would do. However the manufactures chose a socket and plug that was actually used for vacuum tubes but it was also available in plug and socket form with nice housing to use. I found out that Farnell listed it in their parts catalogue which also had a copy of the spec sheet for the connectors.\nI got one of each of the below (shipped from the US):\nName: COOPER INTERCONNECT 86-3-858 END CAP, THERMOPLASTIC\nManufacturer Part No 86-3-858 Farnell Part Number: 1302504 http://uk.farnell.com/cooper-interconnect/86-3-858/end-cap-thermoplastic/dp/1302504 Name: COOPER INTERCONNECT 86-CP11 PLUG \u0026amp; SOCKET CONNECTOR, PLUG, 11 POSITION\nManufacturer Part No 86-CP11 Farnell Part Number: 1311360 Data Sheet: http://www.farnell.com/datasheets/1658178. http://uk.farnell.com/cooper-interconnect/86-cp11/plug-socket-connector-plug-11/dp/1311360 Control Cable # There are 6 functions and one ground, I needed 7 wires in total. Given that Cat5e has 8 wires, I thought it a lovely idea to use Cat5e for the control cable for this project. I wired my cable as follows:\nTape Player Pin Function Cat5e wire colour 1 Fast Forward white/green 2 Play green 3 N/C N/A 4 Rewind white/blue 5 Stop blue 6 GND (34) white/orange 7 Rec orange 8 GND (26) white/brown 9 N/C N/A 10 Pause brown 11 N/C N/A GPIO # The Raspberry Pi as a pin block commonly called GPIO. It\u0026rsquo;s a header that people use to connect other devices to. It\u0026rsquo;s widely documented, the elinux - Low-level_peripherals wiki page is a good start. The functions range from serial, i2c to general input/output lines that can be set. Most of these pins connect directionally to the System on a Chip CPU. The other thing to be aware of is that only so much power can be drawn from the board.\nThe tricky part is understanding how to connect the GPIO header to the relay board. There are many guides on this and I found it quite hard to decode them. The GPIO pins can be programmed to be input or output, eg send a high or low signal or detect a high or low signal. I understand that signals are either 0v or 3.3 volts. So actually actuating the relays can be an issue. However I found that I was able to connect directly from the Pi to the relay board without any external power supply. The Pi supplies 5v to the relay board that goes to power the relays.\nThe other issue I wanted to avoid was giving false signals to the tape player. Lord only knows what would happen if say all tape functions were activated at once for a minute while a Raspberry Pi booted. When my Pi turns on the GPIO ports have defaults, some are set to IN and some are set to OUT. I found that reading the information too tricky so instead I took a Pi and booted the latest Raspbian. I then measured the voltage of each of the GPIO pins to find out what the default was. I wanted to pick GPIO pins that by default were set low (ie 0v). That way when the Pi was turned on it would not activate any relays. Below is a table of my findings. There are 10 Pins that default to 0v. Some of the GPIO pins also have dual functions (SPI) and I didn\u0026rsquo;t want to clash with these functions. So I picked the 7 GPIO pins that were low and one that was high. My plan was to wire the relay in such a way that as soon as it gets power from the Pi the default high on one GPIO cuts the signal for all the tape functions.\nRelay # I now had a Raspberry Pi that could control 8 GPIO pins. Given that I have 6 functions, I needed at least 6 relays on a relay board. It seems 4 or 8 is a common number. I got an 8 channel relay board. There seem to be quite a few different types out there for the maker type market, but they all seem to use the same board design. I think I got something similar to: http://www.sunfounder.com/8-channel-5v-relay-shield-module.html.\nInitially I wired the Pi to the relay board with wires and a breadboard. I then experimented with the setup. The relay board I got has little LEDs on to indicate a relay being on or off. This was very visual and enabled me to get the wiring just right before connecting the tape recorder. Once the wiring was finalised I swapped the wires for a single ribbon cable from the relay board to the Pi.\nEach relay has a common, a normally closed, and a normally open. I connected the GND of the tape player to relay 1. I then connected the normally open pin to common on relay 2 to 8. Thus relays 2-8 can have their input high or low or do anything, but because the common is disconnected until relay 1 is turned on. Thus when the Pi boots, relay 1 activates, but because all the GPIO ports default to 0v none of the relays activate. Once the Raspberry Pi has booted, relay 1 can be turned off, this allows the setting of all the other GPIO ports to be output and low. After this initialisation relay 1 can be turned back on again. I don\u0026rsquo;t think this was strictly necessary however it does all a little protection and given that there are 2 spare relays, this gives a use for one of them.\nGPIO Pin Function Default Rasbian boot Voltage Relay Pin 1 3.3 3v 2 5v 5v relay vcc 3 gpio2 3v 4 5v 5v relay ry-vcc 5 gpio3 3v 6 gnd 0v 7 gpio4 3v relay in1 8 gpio14 3v 9 gnd 0v relay gnd 10 gpio15 3v 11 gpio17 0v relay in2 12 gpio18 0v relay in3 13 gpio27 0v relay in8 14 gnd 0v 15 gpio22 0v relay in4 16 gpio23 0v relay in5 17 3.3 3v 18 gpio24 0v relay in6 19 gpio10 0v 20 gnd 0v 21 gpio9 0v 22 gpio25 0v relay in7 23 gpio11 0v 24 gpio8 3v 25 gnd 0v 26 gpio7 3v I got most of the information about the above from various places on the web. Here are a list of pages than talk about connecting and using relay boards:\nhttp://www.susa.net/wordpress/2012/06/raspberry-pi-relay-using-gpio/ http://www.instructables.com/id/Web-Controlled-8-Channel-Powerstrip/step7/Adding-the-magical-rainbow-wire/ http://arduino-info.wikispaces.com/ArduinoPower http://electronics.stackexchange.com/questions/112730/what-are-the-pins-for-in-this-relay-module https://coderwall.com/p/izzsig/driving-a-sainsmart-relay-with-raspberry-pi http://www.bitwizard.nl/wiki/index.php/Raspberry_Relay https://www.raspberrypi.org/forums/viewtopic.php?t=36225 https://www.youtube.com/watch?v=oaf_zQcrg7g Here are a list of pages that talk more about the Raspberry Pi\u0026rsquo;s GPIO interface:\nhttp://raspi.tv/2014/rpi-gpio-quick-reference-updated-for-raspberry-pi-b http://elinux.org/RPi_Low-level_peripherals https://www.raspberrypi.org/documentation/usage/gpio/ https://www.raspberrypi.org/documentation/configuration/pin-configuration.md http://int03.co.uk/blog/2015/01/11/raspberry-pi-gpio-states-at-boot-time/ http://www.raspberrypi-spy.co.uk/2012/06/simple-guide-to-the-rpi-gpio-header-and-pins/ https://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/robot/cheat_sheet/ http://projects.drogon.net/raspberry-pi/wiringpi/the-gpio-utility/ http://falsinsoft.blogspot.co.uk/2012/11/access-gpio-from-linux-user-space.html Quick and dirty software # Now that I had a tape player connected to the relay board and the relay board connected to the Raspberry Pi, I needed some way to control it remotely. My Raspberry Pi already had a USB Wi-Fi dongle. I purchased a Flirc USB, trained with my amplifier remote and connected it to the Raspberry Pi. Thus in theory I could use the remote control to control the tape player.\nInitially I used the latest Raspbian image to create a working setup. I decided to code in python to create the software glue to get working. I created two programs: tapecontrol and readkey. Both programs can be added to /etc/rc.local to get started.\nThe tapecontrol program starts a simple flask web server that routes commands and translates them to send a single to the correct GPIO pin. I chose python and flask as its easy to get started see http://blog.luisrei.com/articles/flaskrest.html for a quick overview of that it can do.\nThe readkey programs listens for input events from the Flirc and sends them to the tapecontrol server. I separated them so that potentially in the future a better mobile app (read web page) could be developed for mobiles.\nProper software with yocto # While the above software solution works fine. It\u0026rsquo;s a but hard to build and maintain. And entire Rasbian image is quite large and take a while to boot. While I could provide instructions on how to strip out most of the package or use another cut down Raspberry Pi compatible distribution I wanted something very cut down.\nI wanted: Linux + a small libc + busy box + python. I also wanted a sort of fire and forget type approach. In essence I wanted the device to be a lot like an appliance. I don\u0026rsquo;t want to be able to use that Raspberry Pi for other things. I want it to be more like firmware. A read-only sd card image that boots and just runs the control programs.\nI have wanted to try the Yocto Project for a real purpose for some time. It encompasses the Openembedded ecosystem and creates a distribution called Poky. It\u0026rsquo;s aim is to create disk images from scratch. It\u0026rsquo;s constructed in such a way that it\u0026rsquo;s extensible. The idea is to create a tool chain for the target architecture and then build all the components and assemble them into a disk image that is deployed.\nFortunately for me many of the components are already built. The ability to build a distribution comes out of the box. The parts of python I use for GPIO and flask are available. Also the Raspberry Pi target has also been created. So that in theory anyone else can pick up and extend my image. There is extensive documentation available, see the links below for many details:\nhttp://www.cnx-software.com/2013/07/05/12mb-minimal-image-for-raspberry-pi-using-the-yocto-project/ https://www.yoctoproject.org/documentation https://www.yoctoproject.org/docs/1.0/poky-ref-manual/poky-ref-manual.html#usingpoky-extend-addpkg http://git.yoctoproject.org/cgit/cgit.cgi/meta-raspberrypi/tree/README https://git.yoctoproject.org/cgit.cgi/poky/plain/meta/classes/icecc.bbclass http://stackoverflow.com/questions/14472175/distributed-compile-with-bitbake http://layers.openembedded.org/layerindex/branch/master/layers/ http://www.yoctoproject.org/docs/current/dev-manual/dev-manual.html#usingpoky-extend-customimage-localconf http://www.yoctoproject.org/docs/2.1/mega-manual/mega-manual.html http://embedonix.com/articles/linux/emulating-raspberry-pi-on-linux/ The bitbake build system is pretty cool so that it does not need to rebuild everything every time. However the first build does take a considerable amount of CPU and disk. It downloads approx 9G of compressed source files and needs about 30G in total to build. It complete in a few hours on my laptop. In theory these are the steps necessary to re-create a sd card image that I use:\nsudo apt-get install git sudo screen gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping libsdl1.2-dev xterm cd ~ git clone http://git.yoctoproject.org/git/poky -b krogoth cd poky git clone http://git.openembedded.org/meta-openembedded -b krogoth git clone http://git.yoctoproject.org/git/meta-raspberrypi git clone https://github.com/thomasdstewart/meta-rptr.git . oe-init-build-env bitbake-layers add-layer $HOME/poky/meta-openembedded/meta-oe bitbake-layers add-layer $HOME/poky/meta-openembedded/meta-python bitbake-layers add-layer $HOME/poky/meta-openembedded/meta-networking bitbake-layers add-layer $HOME/poky/meta-raspberrypi bitbake-layers add-layer $HOME/poky/meta-rptr echo \u0026#34;MACHINE ?= \\\u0026#34;raspberrypi\\\u0026#34;\u0026#34; \u0026gt;\u0026gt; conf/local.conf echo \u0026#34;ROOT_PASSWORD = \\\u0026#34;password\\\u0026#34;\u0026#34; \u0026gt;\u0026gt; conf/local.conf echo \u0026#34;WIFI_SSID = \\\u0026#34;someapssid\\\u0026#34;\u0026#34; \u0026gt;\u0026gt; conf/local.conf echo \u0026#34;WIFI_PSK = \\\u0026#34;somepassword\\\u0026#34;\u0026#34; \u0026gt;\u0026gt; conf/local.conf bitbake rpi-rptr-image While developing this I found it useful to be able to emulate a Raspberry Pi, I did so as follows. (Note that the kernel versions don\u0026rsquo;t match so kernel modules do load, eg iptables):\nwget https://github.com/dhruvvyas90/qemu-rpi-kernel/raw/master/kernel-qemu-4.1.13-jessie qemu-system-arm -kernel kernel-qemu-4.1.13-jessie -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append \u0026#34;root=/dev/sda2 rootfstype=ext4 rw\u0026#34; -hda tmp/deploy/images/raspberrypi/rpi-rptr-image-raspberrypi.rpi-sdimg Once running the system will have a read-only root, that way the device can be powered off without worrying about file system corruption. If small changes are needed on the fly, the root filesystem can be remounted rw in order to make small changes.\nNanbield Update # Build nodes for Nanbield\nsudo apt-get -y install bmap-tools build-essential chrpath cpio debianutils diffstat gawk gcc-multilib git iputils-ping libsdl1.2-dev python3 python3-pexpect python3-pip socat sudo texinfo unzip wget xterm xz-utils sudo apt-get -y install screen dstat qemu-system-arm git clone http://git.yoctoproject.org/git/poky -b nanbield rptr cd rptr git clone http://git.openembedded.org/meta-openembedded -b nanbield git clone http://git.yoctoproject.org/git/meta-raspberrypi -b nanbield git clone https://github.com/thomasdstewart/meta-rptr.git . oe-init-build-env bitbake-layers add-layer $PWD/../meta-openembedded/meta-oe bitbake-layers add-layer $PWD/../meta-openembedded/meta-python bitbake-layers add-layer $PWD/../meta-openembedded/meta-networking bitbake-layers add-layer $PWD/../meta-raspberrypi bitbake-layers add-layer $PWD/../meta-rptr echo \u0026#39;MACHINE = \u0026#34;raspberrypi\u0026#34;\u0026#39; \u0026gt;\u0026gt; conf/local.conf echo \u0026#39;DISTRO = \u0026#34;rptr\u0026#34;\u0026#39; \u0026gt;\u0026gt; conf/local.conf p=$(printf \u0026#34;%q\u0026#34; $(mkpasswd -m sha-512 password)) echo \u0026#34;ROOT_PASSWORD_HASH = \\\u0026#34;$p\\\u0026#34;\u0026#34; \u0026gt;\u0026gt; conf/local.conf echo \u0026#39;WIFI_SSID = \u0026#34;someapssid\u0026#34;\u0026#39; \u0026gt;\u0026gt; conf/local.conf echo \u0026#39;WIFI_PSK = \u0026#34;somepassword\u0026#34;\u0026#39; \u0026gt;\u0026gt; conf/local.conf bitbake rpi-rptr-image bmaptool copy tmp/deploy/images/raspberrypi/rpi-rptr-image-raspberrypi.rootfs.wic.bz2 img.raw wget https://github.com/dhruvvyas90/qemu-rpi-kernel/raw/master/kernel-qemu-4.4.34-jessie qemu-system-arm -M versatilepb -cpu arm1176 -m 256 -kernel kernel-qemu-4.4.34-jessie -no-reboot -append \u0026#34;root=/dev/sda2 rootfstype=ext4 rw\u0026#34; -hda img.raw Walnascar Update # Build nodes for Walnascar\nsudo apt-get -y install bmap-tools build-essential chrpath cpio debianutils diffstat gawk gcc-multilib git iputils-ping libsdl1.2-dev python3 python3-pexpect python3-pip socat sudo texinfo unzip wget xterm xz-utils sudo apt-get -y install screen dstat qemu-system-arm git clone https://git.yoctoproject.org/poky -b walnascar rptr cd rptr git clone https://git.openembedded.org/meta-openembedded -b walnascar git clone https://github.com/sbabic/meta-swupdate.git -b walnascar git clone https://git.yoctoproject.org/meta-raspberrypi -b walnascar git clone https://github.com/thomasdstewart/meta-rptr.git . oe-init-build-env bitbake-layers add-layer $PWD/../meta-openembedded/meta-oe bitbake-layers add-layer $PWD/../meta-openembedded/meta-python bitbake-layers add-layer $PWD/../meta-openembedded/meta-networking bitbake-layers add-layer $PWD/../meta-swupdate bitbake-layers add-layer $PWD/../meta-raspberrypi bitbake-layers add-layer $PWD/../meta-rptr echo \u0026#39;MACHINE = \u0026#34;raspberrypi\u0026#34;\u0026#39; \u0026gt;\u0026gt; conf/local.conf echo \u0026#39;DISTRO = \u0026#34;rptr\u0026#34;\u0026#39; \u0026gt;\u0026gt; conf/local.conf p=$(printf \u0026#34;%q\u0026#34; $(mkpasswd -m sha-512 password)) echo \u0026#34;ROOT_PASSWORD_HASH = \\\u0026#34;$p\\\u0026#34;\u0026#34; \u0026gt;\u0026gt; conf/local.conf echo \u0026#39;WIFI_SSID = \u0026#34;someapssid\u0026#34;\u0026#39; \u0026gt;\u0026gt; conf/local.conf echo \u0026#39;WIFI_PSK = \u0026#34;somepassword\u0026#34;\u0026#39; \u0026gt;\u0026gt; conf/local.conf bitbake rpi-rptr-image bmaptool copy tmp/deploy/images/raspberrypi/rpi-rptr-image-raspberrypi.rootfs.wic.bz2 img.raw wget https://github.com/dhruvvyas90/qemu-rpi-kernel/raw/master/kernel-qemu-4.4.34-jessie qemu-system-arm -M versatilepb -cpu arm1176 -m 256 -kernel kernel-qemu-4.4.34-jessie -no-reboot -append \u0026#34;root=/dev/sda2 rootfstype=ext4 rw\u0026#34; -hda img.raw Cluster Build Notes # INHERIT += \u0026#34;icecc\u0026#34; ICECC_PATH = \u0026#34;/usr/bin/icecc\u0026#34; ICECC_ENV_EXEC = \u0026#34;/usr/lib/icecc/icecc-create-env\u0026#34; #PARALLEL_MAKE = \u0026#34;-j 400\u0026#34; ICECC_PARALLEL_MAKE = \u0026#34;-j 360\u0026#34; Build on OpenStack # #openstack security group rule create --proto icmp --dst-port -1 default #openstack security group rule create --proto tcp --dst-port 22 default cat \u0026lt;\u0026lt;EOF \u0026gt; /tmp/userdata.sh #!/bin/bash -x export DEBIAN_FRONTEND=noninteractive apt-get update apt-get -y upgrade apt-get -y install build-essential chrpath cpio debianutils diffstat gawk gcc-multilib git iputils-ping libsdl1.2-dev python python3 python3-pexpect python3-pip socat sudo texinfo unzip wget xterm xz-utils apt-get -y install screen dstat qemu-system-arm reboot EOF openstack server create --image debian-9.2.0-openstack-amd64 --flavor hg-120-ssd --security-group default --key-name thomasATlenovo --user-data /tmp/userdata.sh --wait yocto rm /tmp/userdata.sh sleep 5 openstack server show -f value -c addresses yocto | awk -F\u0026#39;[=,]\u0026#39; \u0026#39;{print $2}\u0026#39; ","date":"26 November 2017","externalUrl":null,"permalink":"/projects/raspberrypitaperemote/","section":"Projects","summary":"Introduction # I have known about reel to reel tape for some time, my Dad has an old 1960’s player in the attic. However it is only relatively recently that I found out that there are some people that still use them for music listening purposes. I think my first real exposure was on the Techmoan YouTube channel, I saw a video about Tips and advice for the Reel-to-Reel buying newbie. Instantly I decided it was a waste of time and money. However the more I thought about it the more I liked the idea of selecting an album or compilation of music, starting the tape and not being able to skip tracks easily. All while seeing the tape player play while listening to the music. The other appealing idea was the retro design and the look of 10 inch tape spools. I continued to think about reel to reel, secretly wanting a player. Till a friend reminded me that people generally spend far more on “ornaments” for their houses than the average cost of a working tape player. This changed my mind, I instantly did an ebay search and found a player that ticked every box: a direct drive so that no belts would need changing, a head that is not prone to wearing out, a model that takes 1/4 inch tape and 10 inch tape reels, touch buttons rather than large mechanical piano key controls, vu meters, a nice 80s black finish and most importantly in working order. To make it even better it was a buy it now auction that was in the neighbouring town. So I bid, won, paid and picked it up the same day!\n","title":"Raspberry Pi Tape Remote (RPTR)","type":"projects"},{"content":" Background # There have been many Raspberry Pi clusters before, they first started when the Raspberry Pi came out first. They are all very cool and I\u0026rsquo;ve wanted to try to make my own, but never quite got round to it or could justify it or think of any good project to run on them. Around the time the Raspberry Pi 3 came out, I was deep into learning how OpenStack work. That is the stage after running packstack and playing, the stage of looking at all the components and how they all fit together. After a while I thought it would be really quite cool to run OpenStack on a Raspberry Pi Cluster. OpenStack is quite resource intensive, dozens of multi forking memory hungry (in Pi terms) Python daemons. So it would really need multiple Pi\u0026rsquo;s to run. However, given the whole point is to run instances, the Raspberry Pi is quite limited regarding actual virtualisation. However I didn\u0026rsquo;t let that stop me. I didn\u0026rsquo;t want to run any production instances, I just wanted to learn.\nParts # I decided for a nice round 8 for the number of Raspberry Pi\u0026rsquo;s, it seemed to be large enough to spread the different components, but small enough not to get too crazy. Looking at my notes, it looks like I found http://www.pidramble.com/wiki/hardware as a useful reference. So we need the Pi\u0026rsquo;s, some sd cards for storage, a desktop usb charger to power them, some usb power cables, a desktop 8 port switch, some network cables and a few Raspberry Pi stacking cases to home them all together. I slowly put together an Amazon basket (~May 2016).\nPi\u0026rsquo;s 8*31.09 = £248.72 Raspberry Pi 3 Model B Quad Core CPU 1.2 GHz 1 GB RAM Motherboard https://www.amazon.co.uk/gp/product/B01CCOXV34/ref=ox_sc_act_title_1?ie=UTF8\u0026psc=1\u0026smid=ANHA4R5DP28XU\nStorage 8*5.67 = £45.36 SanDisk Ultra 16 GB Imaging microSDHC Class 10 Memory Card and SD Adapter up to 80 Mbps with UHS-I Ratings http://www.amazon.co.uk/SanDisk-Imaging-microSDHC-Adapter-Ratings/dp/B012VKUSIA/ref=sr_1_1?ie=UTF8\u0026qid=1456766877\u0026sr=8-1\u0026keywords=6GB+Sandisk+Ultra+Class+10+Micro+SD\nPower (max 10 Pi\u0026rsquo;s) 1*20.99 = £20.99 Aukey 78W 5V/15.6A 10 Ports desktop USB Charging Station Wall Charger with AlPower Tech for Apple, Android Devices, and More USB Powered Devices (Black) http://www.amazon.co.uk/Aukey-desktop-Charging-Station-Charger/dp/B00S0JDWKS/ref=sr_1_2?ie=UTF8\u0026qid=1456750384\u0026sr=8-2-spons\u0026keywords=usb+desktop+charger\u0026psc=1\nPower cable (8*3.25)+1.5 = £27.5 Keple | 1.5M / 5FT USB 2.0 A To Right Angle Micro B Data Sync \u0026amp; Charging Cable for SAMSUNG GALAXY TAB 3 10.1\u0026quot; (P5200 / P5210 / P5220) (Micro USB) https://www.amazon.co.uk/gp/product/B00Y1MSCIK/ref=ox_sc_act_title_1?ie=UTF8\u0026psc=1\u0026smid=A3RSAJ6PHJ8E3L\nNetwork 1*20.71 = £20.71 NETGEAR GS308-100UKS 8 Port Gigabit Ethernet 10/100/1000 Mbps Switch http://www.amazon.co.uk/NETGEAR-GS308-100UKS-Gigabit-Ethernet-Switch/dp/B00AWM7PKO/ref=sr_1_1?ie=UTF8\u0026qid=1456767212\u0026sr=8-1\u0026keywords=100+switch+netgear\nNetwork cable (8*1.3)+3.2 = £13.72 UTP Cat 5e Ethernet Patch Cable 0.5m Blue https://www.amazon.co.uk/Ethernet-Patch-Cable-0-5m-Blue/dp/B005IB0YRK/ref=sr_1_5?s=computers\u0026ie=UTF8\u0026qid=1462458728\u0026sr=1-5\u0026keywords=cat5e+0.5m\nCase 35.90+26.90 = £62.80 Mepro Raspberry Pi 3 Model B 6-layer Stack Clear Case Enclosure Box Support Raspberry Pi 2B/B+/B/A+ https://www.amazon.co.uk/Mepro-Raspberry-6-layer-Enclosure-Support/dp/B01COU8Z1O/ref=sr_1_2?s=computers\u0026ie=UTF8\u0026qid=1462455265\u0026sr=1-2\u0026keywords=clear+raspberry+pi+case Mepro Raspberry Pi 3 Model B 4-layer Stack Clear Case Enclosure Box Support Raspberry Pi 2B/B+/B/A+ https://www.amazon.co.uk/Mepro-Raspberry-4-layer-Enclosure-Support/dp/B01COTH4V2/ref=sr_1_2?ie=UTF8\u0026qid=1462455707\u0026sr=8-2\u0026keywords=Mepro+Raspberry+Pi+case\nI also considered getting a pair of desktop chargers to power more Pi\u0026rsquo;s, which would need a larger switch, however I decided against it as the price of the extra Pi\u0026rsquo;s started to get too much, Power (max 12 Pi\u0026rsquo;s) 2*15.99 = £31.98 iMuto 50W/10A 6-Port USB Charger Desktop Charging Station Wall Charger http://www.amazon.co.uk/6-Port-Charger-Desktop-Charging-Station/dp/B017IIW8NI/ref=sr_1_17?ie=UTF8\u0026qid=1456766759\u0026sr=8-17-spons\u0026keywords=usb+charger+small\u0026psc=1 http://www.amazon.co.uk/NETGEAR-GS116UK-16-Port-Gigabit-Unmanaged/dp/B0007SQEPK/ref=sr_1_1?ie=UTF8\u0026qid=1457473391\u0026sr=8-1\u0026keywords=16+port+netgear\nCost # £248.72 + £45.36 + £20.99 + £27.5 + £20.71 + £13.72 + £62.80\n£439.80 (yikes!)\nPost Build Parts # Heatsink 8*2 = £8 Raspberry Pi Heatsink https://thepihut.com/products/raspberry-pi-heatsink?variant=25015132360\nGPIO LED for load indication 8*5.91 = £47.28 PI LITE JUNIOR https://www.amazon.co.uk/gp/product/B01186VURG/ref=oh_aui_search_detailpage?ie=UTF8\u0026psc=1\nConstruction # Actually building it was easy, just a case of screwing it all together and cabling the cables nicely.\nDebian # There any many ways to provision software on hardware and many of the existing Raspberry Pi guides consist of taking a Raspbian image doing a good deal of modification by hand. I wanted to avoid any custom by hand work, I wanted something very reproducible, something where I could wipe the lot and re-image easily, but also I didn\u0026rsquo;t want to spend all the project time on the provisioning system without any OpenStack experimentation. While Raspbian is cool, I also wanted to run Debian testing/unstable so that everything was as up to date as possible to try and see off any issues when running new OpenStack software, so for this reason I settled on running Debian on the Pi. While Debian does not have a kernel for the Pi, it only needs a few packages from archive.raspberrypi.org, the bootloader, kernel and firmware packages. In the end I settled for a large notes type file that I would copy and paste from. The process was not fully automated however it suited me fine.\nImage setup process # Create armhf chroot with debootstrap and get qemu-arm to finish the debootstrap Install kernel packages from archive.raspberrypi.org Populate some important files inc create /etc/network/interfaces.d/eth0 with interface for all the Pi\u0026rsquo;s and a dodgy /etc/rc.local script to set the hostname Run some final commands in the chroot rsync the files to the 8 SD cards in turn Boot the Pi\u0026rsquo;s run some post setup and run a slightly modified openstack-deploy command from Debian Debootstrap # r=/srv/store/thomas/rubus sudo debootstrap --arch=armhf --include=aptitude,bc,bind9-host,build-essential,crda,curl,dnsutils,fake-hwclock,git,less,locales,netcat-traditional,ntp,ntpdate,pv,screen,sudo,task-ssh-server,tcpdump,telnet,vim-gtk,wireless-tools,wpasupplicant --foreign stretch $r http://mirror.bytemark.co.uk/debian sudo cp /usr/bin/qemu-arm-static $r/usr/bin/qemu-arm-static sudo chroot $r /debootstrap/debootstrap --second-stage Install Kernel # for p in raspberrypi-kernel_1.20170303-1_armhf.deb raspberrypi-bootloader_1.20170303-1_armhf.deb firmware-brcm80211_0.43+rpi5_all.deb; do sudo chroot $r wget http://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-firmware/$p sudo chroot $r wget http://archive.raspberrypi.org/debian/pool/main/f/firmware-nonfree/$p sudo chroot $r dpkg -i $p sudo rm $r/$p done Customize Install # cat \u0026lt;\u0026lt; EOF | sudo tee $r/boot/cmdline.txt dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 rootflags=commit=100,discard,data=writeback elevator=deadline rootwait console=serial0,115200 EOF cat \u0026lt;\u0026lt; EOF | sudo tee $r/boot/config.txt gpu_mem=16 #force_turbo=1 EOF cat \u0026lt;\u0026lt; EOF | sudo tee $r/etc/fstab /dev/mmcblb0p2 / ext4 defaults,noatime,nodiratime,errors=remount-ro,commit=100,discard,data=writeback 0 1 /dev/mmcblk0p1 /boot vfat defaults,noatime,nodiratime 0 2 EOF cat \u0026lt;\u0026lt; EOF | sudo tee $r/etc/hostname rubus EOF cat \u0026lt;\u0026lt; EOF | sudo tee -a $r/etc/hosts 192.168.10.1 rubus01 192.168.10.2 rubus02 192.168.10.3 rubus03 192.168.10.4 rubus04 192.168.10.5 rubus05 192.168.10.6 rubus06 192.168.10.7 rubus07 192.168.10.8 rubus08 EOF cat \u0026lt;\u0026lt; EOF | sudo tee $r/etc/apt/sources.list deb http://httpredir.debian.org/debian/ stretch main non-free contrib deb-src http://httpredir.debian.org/debian/ stretch main non-free contrib deb http://httpredir.debian.org/debian/ stretch-updates main non-free contrib deb-src http://httpredir.debian.org/debian/ stretch-updates main non-free contrib deb http://httpredir.debian.org/debian/ sid main non-free contrib deb-src http://httpredir.debian.org/debian/ sid main non-free contrib deb http://httpredir.debian.org/debian/ experimental main non-free contrib deb-src http://httpredir.debian.org/debian/ experimental main non-free contrib deb http://security.debian.org/ stretch/updates main non-free contrib deb-src http://security.debian.org/ stretch/updates main non-free contrib deb http://archive.raspberrypi.org/debian/ jessie main EOF cat \u0026lt;\u0026lt; EOF | sudo tee $r/etc/apt/preferences Package: * Pin: release testing Pin-Priority: 800 Package: * Pin: release unstable Pin-Priority: 700 Package: * Pin: release experimental Pin-Priority: 600 Package: * Pin: origin \u0026#34;archive.raspberrypi.org\u0026#34; Pin-Priority: -100 Package: firmware-brcm80211 raspberrypi-bootloader raspberrypi-kernel python-rpi.gpio Pin: origin \u0026#34;archive.raspberrypi.org\u0026#34; Pin-Priority: 1100 EOF cat \u0026lt;\u0026lt; EOF | sudo tee $r/etc/apt/apt.conf.d/99proxy #Acquire::http::Proxy \u0026#34;http://192.168.11.250:3128\u0026#34;; EOF cat \u0026lt;\u0026lt; EOF | sudo tee $r/etc/profile.d/proxy.sh #export http_proxy=\u0026#34;http://192.168.11.250:3128\u0026#34; #export https_proxy=\u0026#34;http://192.168.11.250:3128\u0026#34; EOF cat \u0026lt;\u0026lt; EOF | sudo tee $r/etc/network/interfaces.d/wlan0 #auto wlan0 iface wlan0 inet dhcp wpa-ssid foo wpa-psk bar EOF cat \u0026lt;\u0026lt; EOF | sudo tee $r/etc/network/interfaces.d/eth0 allow-hotplug enxb827eb188ca6 iface enxb827eb188ca6 inet dhcp iface enxb827eb188ca6 inet static address 192.168.10.1 netmask 255.255.255.0 allow-hotplug enxb827eb1c713d iface enxb827eb1c713d inet dhcp iface enxb827eb1c713d inet static address 192.168.10.2 netmask 255.255.255.0 allow-hotplug enxb827eb02fab8 iface enxb827eb02fab8 inet dhcp iface enxb827eb02fab8 inet static address 192.168.10.3 netmask 255.255.255.0 allow-hotplug enxb827ebb9db55 iface enxb827ebb9db55 inet dhcp iface enxb827ebb9db55 inet static address 192.168.10.4 netmask 255.255.255.0 allow-hotplug enxb827eb8898c9 iface enxb827eb8898c9 inet dhcp iface enxb827eb8898c9 inet static address 192.168.10.5 netmask 255.255.255.0 allow-hotplug enxb827ebc98d20 iface enxb827ebc98d20 inet dhcp iface enxb827ebc98d20 inet static address 192.168.10.6 netmask 255.255.255.0 allow-hotplug enxb827eb66d5fe iface enxb827eb66d5fe inet dhcp iface enxb827eb66d5fe inet static address 192.168.10.7 netmask 255.255.255.0 allow-hotplug enxb827ebafc1db iface enxb827ebafc1db inet dhcp iface enxb827ebafc1db inet static address 192.168.10.8 netmask 255.255.255.0 EOF cat \u0026lt;\u0026lt; EOF | sudo tee $r/etc/rc.local #!/bin/sh -e hostname=\u0026#34;\\$(cat /etc/hostname)\u0026#34; if test \u0026#34;\\$hostname\u0026#34; = \u0026#34;rubus\u0026#34;; then eth=\\$(ip -o l | grep enx | awk \u0026#39;{print \\$2}\u0026#39; | sed \u0026#39;s/://\u0026#39;) case \\$eth in enxb827eb188ca6) echo \u0026#34;rubus01\u0026#34; \u0026gt; /etc/hostname ;; enxb827eb1c713d) echo \u0026#34;rubus02\u0026#34; \u0026gt; /etc/hostname ;; enxb827eb02fab8) echo \u0026#34;rubus03\u0026#34; \u0026gt; /etc/hostname ;; enxb827ebb9db55) echo \u0026#34;rubus04\u0026#34; \u0026gt; /etc/hostname ;; enxb827eb8898c9) echo \u0026#34;rubus05\u0026#34; \u0026gt; /etc/hostname ;; enxb827ebc98d20) echo \u0026#34;rubus06\u0026#34; \u0026gt; /etc/hostname ;; enxb827eb66d5fe) echo \u0026#34;rubus07\u0026#34; \u0026gt; /etc/hostname ;; enxb827ebafc1db) echo \u0026#34;rubus08\u0026#34; \u0026gt; /etc/hostname ;; esac fi exit 0 EOF sudo chmod +x $r/etc/rc.local cat \u0026lt;\u0026lt; EOF | sudo tee $r/etc/modprobe.d/ib_iser-blacklist.conf blacklist ib_iser install ib_iser /bin/true EOF cat \u0026lt;\u0026lt; EOF | sudo tee $r/usr/local/bin/loadmon.py #!/usr/bin/python import time import sys import os import RPi.GPIO as GPIO from pprint import pprint as pp leds = [4, 17, 27, 18, 22, 23, 24, 25] off = GPIO.LOW on = GPIO.HIGH GPIO.setmode(GPIO.BCM) GPIO.setup(leds, GPIO.OUT) GPIO.output(leds, off) def bar(n): onleds=leds[0:n] offleds=leds[n:8] GPIO.output(onleds, on) GPIO.output(offleds, off) #8+8=16 stops #8 seconds to do a sweep = 8/16 = 0.5 sec delay = low load ~0.01 #0.32 seconds to do a sweep = 0.32/16 = 0.02 sec delay = high load ~4 #(1/0.5)/12 = .166 #(1/0.02)/12 = 4.166 #(1/delay)/12 = load #delay=1/(load*12) while True: load = os.getloadavg()[0] #Flash led 7 #GPIO.output(leds[7], on) #time.sleep(0.05) #GPIO.output(leds[7], off) #show load bar #load = load * 2 #bar(int(load)) #time.sleep(5) delay = 1/((load*12)+0.001) if(delay \u0026gt;= 1): delay = 1 for n in range(7,-1,-1): GPIO.output(leds[n], on) time.sleep(delay) GPIO.output(leds[n], off) for n in range(0,8): GPIO.output(leds[n], on) time.sleep(delay) GPIO.output(leds[n], off) GPIO.output(leds, off) GPIO.cleanup() EOF sudo chmod +x $r/usr/local/bin/loadmon.py cat \u0026lt;\u0026lt; EOF | sudo tee $r/etc/systemd/system/loadmon.service [Unit] Description=LED Load Monitor [Service] Type=simple ExecStart=/usr/local/bin/loadmon.py [Install] WantedBy=multi-user.target EOF Final chroot commands # sudo chroot $r systemctl enable loadmon sudo chroot $r apt-get update sudo chroot $r apt-get install firmware-misc-nonfree dbus dstat python-rpi.gpio sudo chroot $r dpkg-reconfigure locales sudo chroot $r apt-get clean sudo chroot $r passwd sudo chroot $r adduser thomas echo \u0026#34;thomas ALL=(ALL:ALL) NOPASSWD: ALL\u0026#34; | sudo tee $r/etc/sudoers.d/thomas sudo chmod 400 $r/etc/sudoers.d/thomas Wipe SD card and rsync # Be sure to set the device correctly!\nr=/srv/store/thomas/rubus dev=/dev/sde sudo umount $dev* sudo dd if=/dev/zero of=$dev bs=1M count=100 cat \u0026lt;\u0026lt; EOF | sudo fdisk $dev n p 1 8192 131071 t c n p 2 131072 w EOF sudo mkfs -t vfat /dev/sdc1 sudo mkfs -t ext4 /dev/sdc2 sudo mount ${dev}2 /mnt sudo mkdir -p /mnt/boot sudo mount ${dev}1 /mnt/boot sudo rsync -vax --delete --exclude \u0026#39;boot/*\u0026#39; $r/. /mnt/. sudo rsync -vrtx --delete-before $r/boot/. /mnt/boot/. sudo umount /mnt/boot sudo umount /mnt sync Update SD card with rsync # Be sure to set the device correctly!\nr=/srv/store/thomas/rubus; dev=/dev/sde; sudo umount $dev*; sudo mount ${dev}2 /mnt; sudo mount ${dev}1 /mnt/boot; sudo rsync -vax --delete --exclude \u0026#39;boot/*\u0026#39; $r/. /mnt/.; sudo rsync -vrtx --delete-before $r/boot/. /mnt/boot/.; sudo umount /mnt/boot; sudo umount /mnt Create SD card images # I didn\u0026rsquo;t need this in the end, but it may prove useful. This is a way to create sd card images (Hands up if you can spot a x8 optimization speed up somewhere).\nsudo modprobe nbd max_part=63 for n in `seq -w 1 8`; do r=/srv/store/thomas/rubus i=/srv/store/thomas/rubus0$n.img qemu-img create -f qcow2 $i 6G sudo qemu-nbd -c /dev/nbd0 $i sudo parted /dev/nbd0 mklabel msdos sudo parted /dev/nbd0 mkpart pri fat32 1 100M sudo parted /dev/nbd0 mkpart pri ext2 100M 100% sudo mkfs -t vfat /dev/nbd0p1 sudo mkfs -t ext4 /dev/nbd0p2 mkdir -p $i.d sudo mount /dev/nbd0p2 $i.d sudo mkdir -p $i.d/boot sudo mount /dev/nbd0p1 $i.d/boot sudo rsync -ax --delete --exclude \u0026#39;boot/*\u0026#39; $r/. $i.d/. sudo rsync -rtx --delete-before $r/boot/. $i.d/boot/. sudo umount $i.d/boot sudo umount $i.d sync sudo pkill qemu-nbd done Pre OpenStack installation setup # If all goes well, each Pi will boot with a different 192.168.10.0/24 address, so a quick \u0026ldquo;sudo ip addr add 192.168.10.250/24 dev eth0\u0026rdquo; on my local desktop will get them reachable on the network.\nMake myself at home # Then I run a few final setup commands on every Pi, I used mssh to help with this.\n#as root curl https://raw.githubusercontent.com/thomasdstewart/dotfiles/master/iau | bash su - thomas curl https://raw.githubusercontent.com/thomasdstewart/dotfiles/master/iau | bash mkdir .ssh chmod 700 .ssh echo \u0026#34;ssh-rsa foobarfoorbar thomas@host\u0026#34; \u0026gt;\u0026gt; .ssh/authorized_keys chmod 600 .ssh/authorized_keys curl http://archive.raspberrypi.org/debian/raspberrypi.gpg.key | sudo apt-key add - apt-get install openstack-deploy man-db mysql-client debconf-utils crudini munin Open vSwitch # The rubus02 and rubus03 Pi\u0026rsquo;s will need to have their ethernet ports connected to an Open vSwitch bridge called br-ex. To do this I comment out each Raspberry Pi\u0026rsquo;s respective interface in /etc/network/interfaces.d/eth0. If Open vSwitch fails for some reason, it\u0026rsquo;s handy to have another way into the machine, so I also edit /etc/network/interfaces.d/wlan0 so that the Pi is also connected to Wireless. Next I install openvswitch-switch and create a /etc/network/interfaces.d/br-ex file for that bridge and reboot.\napt-get install openvswitch-switch net-tools ip=$(/bin/ip -4 a | grep 192.168.10 | awk -F\u0026#39;[ /]*\u0026#39; \u0026#39;{print $3}\u0026#39;) link=$(/bin/ip l | grep enx | awk -F\u0026#39;[ :]*\u0026#39; \u0026#39;{print $2}\u0026#39;) cat \u0026lt;\u0026lt; EOF \u0026gt; /etc/network/interfaces.d/br-ex #allow-ovs br-ex iface br-ex inet static address $ip netmask 255.255.255.0 ovs_type OVSBridge ovs_ports $link allow-br-ex $link iface enxb827eb1c713d inet manual ovs_bridge br-ex ovs_type OVSPort EOF A slight oddity that I have yet to understand is how to get Open vSwitch ports to come up automatically on boot and actually forward frames. There were many times, the boot up just left the Pi\u0026rsquo;s off the network, so a slight bodge to leave br-ex down on boot and to bring it up 60 seconds after boot by appending \u0026ldquo;(sleep 60; ifup br-ex) \u0026amp;\u0026rdquo; to the /etc/rc.local file.\nDNS DoS # I found that a simultaneous \u0026ldquo;apt-get update\u0026rdquo; would DoS my home router, so I used the below hack:\nsed -i \u0026#39;s/^nameserver.*/nameserver 8.8.8.8/\u0026#39; /etc/resolv.conf The better solution would be to install resolvconf and add \u0026ldquo;dns-nameservers 8.8.8.8\u0026rdquo; to all the network stanzas.\nAdd Swap # We need to supplement memory with a little swap\u0026hellip;\ndd if=/dev/zero of=/var/cache/swap bs=1M count=1024 chmod 0000 /var/cache/swap sudo mkswap /var/cache/swap echo \u0026#34;/var/cache/swap swap swap defaults 0 0\u0026#34; \u0026gt;\u0026gt; /etc/fstab swapon -a OpenStack Install # The Plan # I called\u0026rsquo;s the Raspberry Pi\u0026rsquo;s rubus01 through 08. The vague allocation:\nrubus08 - mysql for all the databases rubus07 - RabbitMQ for message passing for all the services rubus06 - Keystone via Apache WSGI rubus05 - Glance API and Glance Registry rubus04 - Nova API, Nova Console Auth, Nova Scheduler, Nova Cert, Nova Conductor, and Nova Spice HTML 5 Proxy rubus03 - Nova Compute and Neutron Open vSwitch Agent rubus02 - Neutron Server, Neutron Metadata-agent, Neutron L3 Agent, Neutron DHCP Agent and Neutron Open vSwitch Agent rubus01 - Horizon Dashboard via Apache This leaves: cinder,mongodb,ceoilmeter,swift,ceph all without homes.\npreseed-lib # $ diff -u preseed-lib.orig preseed-lib --- preseed-lib.orig\t2016-09-20 12:39:38.000000000 +0100 +++ preseed-lib\t2016-09-08 21:40:40.100606151 +0100 @@ -15,7 +15,7 @@ DB_NAME=${4} DB_USER=${5} MYSQL_PASSWORD=${6} -\tif [ -z \u0026#34;${7}\u0026#34; ] ; then +\tif [ ! -z \u0026#34;${7}\u0026#34; ] ; then MYSQL_HOST=${7} fi echo \u0026#34;# automatically generated by the maintainer scripts of ${PKG_NAME} $ openstack-deploy # $ diff -u openstack-deploy.orig openstack-deploy --- openstack-deploy.orig\t2016-09-20 12:39:48.000000000 +0100 +++ openstack-deploy\t2017-04-07 14:34:27.699504745 +0100 @@ -10,7 +10,8 @@ echo \u0026#34;Can\u0026#39;t find /usr/share/openstack-deploy/pressed-lib: exiting\u0026#34; exit 1 fi -. /usr/share/openstack-deploy/preseed-lib +#. /usr/share/openstack-deploy/preseed-lib +. preseed-lib OSINSTALL_RC=osinstallrc @@ -498,6 +499,216 @@ #\tsahara-api sahara-engine \\ #\tmurano-api murano-engine ;; +\u0026#34;db\u0026#34;) + os_pressed_misc + osinstall_mysql_set_localhost + osinstall_install_if_not_installed ntp + osinstall_mysql_server + sudo sed -i \u0026#39;s/bind-address/#bind-address/\u0026#39; /etc/mysql/mysql.conf.d/mysqld.cnf + echo \u0026#34;[mysqld]\u0026#34; | sudo tee /etc/mysql/conf.d/local.cnf + echo \u0026#34;character-set-server = utf8\u0026#34; | sudo tee -a /etc/mysql/conf.d/local.cnf + echo \u0026#34;collation-server = utf8_general_ci\u0026#34; | sudo tee -a /etc/mysql/conf.d/local.cnf + echo \u0026#34;init-connect = \u0026#39;SET NAMES utf8\u0026#39;\u0026#34; | sudo tee -a /etc/mysql/conf.d/local.cnf + #/usr/share/openstack-deploy/mysql-remote-root + SQL=\u0026#34;mysql --defaults-file=/etc/mysql/debian.cnf -Dmysql -e\u0026#34; + ROOT_PASS=`${SQL} \u0026#34;SELECT authentication_string FROM user WHERE User=\u0026#39;root\u0026#39; LIMIT 1;\u0026#34; | tail -n 1` + ${SQL} \u0026#34;REPLACE INTO user SET host=\u0026#39;%\u0026#39;, user=\u0026#39;root\u0026#39;, authentication_string=\u0026#39;${ROOT_PASS}\u0026#39;, Select_priv=\u0026#39;Y\u0026#39;, Insert_priv=\u0026#39;Y\u0026#39;, Update_priv=\u0026#39;Y\u0026#39;, Delete_priv=\u0026#39;Y\u0026#39;, Create_priv=\u0026#39;Y\u0026#39;, Drop_priv=\u0026#39;Y\u0026#39;, Reload_priv=\u0026#39;Y\u0026#39;, Shutdown_priv=\u0026#39;Y\u0026#39;, Process_priv=\u0026#39;Y\u0026#39;, File_priv=\u0026#39;Y\u0026#39;, Grant_priv=\u0026#39;Y\u0026#39;, References_priv=\u0026#39;Y\u0026#39;, Index_priv=\u0026#39;Y\u0026#39;, Alter_priv=\u0026#39;Y\u0026#39;, Super_priv=\u0026#39;Y\u0026#39;, Show_db_priv=\u0026#39;Y\u0026#39;, Create_tmp_table_priv=\u0026#39;Y\u0026#39;, Lock_tables_priv=\u0026#39;Y\u0026#39;, Execute_priv=\u0026#39;Y\u0026#39;, Repl_slave_priv=\u0026#39;Y\u0026#39;, Repl_client_priv=\u0026#39;Y\u0026#39;, Create_view_priv=\u0026#39;Y\u0026#39;, Show_view_priv=\u0026#39;Y\u0026#39;, Create_routine_priv=\u0026#39;Y\u0026#39;, Alter_routine_priv=\u0026#39;Y\u0026#39;, Create_user_priv=\u0026#39;Y\u0026#39;, Event_priv=\u0026#39;Y\u0026#39;, Trigger_priv=\u0026#39;Y\u0026#39;, ssl_type=\u0026#39;\u0026#39;, ssl_cipher=\u0026#39;\u0026#39;, x509_issuer=\u0026#39;\u0026#39;, x509_subject=\u0026#39;\u0026#39; \u0026#34; + ${SQL} \u0026#34;FLUSH PRIVILEGES\u0026#34; + sed -i \u0026#39;s|^bind-address[ \\t]*=.*|bind-address = 0.0.0.0|\u0026#39; /etc/mysql/my.cnf + /etc/init.d/mysql restart +;; +\u0026#34;rabbit\u0026#34;) + os_pressed_misc + osinstall_rabbit_host_and_pass + osinstall_install_if_not_installed ntp + osinstall_install_if_not_installed rabbitmq-server + . osinstallrc + rabbitmqctl change_password guest $RC_RABIT_PASS + #maybe RC_RABIT_USER=openstack + #rabbitmqctl set_permissions openstack \u0026#34;.*\u0026#34; \u0026#34;.*\u0026#34; \u0026#34;.*\u0026#34; + echo \u0026#34;[{rabbit, [{loopback_users, []}]}].\u0026#34; \u0026gt; /etc/rabbitmq/rabbitmq.config + systemctl restart rabbitmq-server.service +;; +\u0026#34;keystone\u0026#34;) + os_pressed_misc + osinstall_mysql_set_host + osinstall_rabbit_host_and_pass + osinstall_install_if_not_installed ntp + osinstall_keystone +;; +\u0026#34;glance\u0026#34;) + os_pressed_misc + osinstall_mysql_set_host + osinstall_rabbit_host_and_pass + osinstall_install_if_not_installed ntp + osinstall_rcvalue_keystone_endpoint + + osinstall_rcvalue RC_GLANCE_SQL_PASS \u0026#34;Glance MySQL password [generated-password]: \u0026#34; yes +\tosinstall_rcvalue RC_GLANCE_ENDPOINT_IP \u0026#34;Glance endpoint IP address: \u0026#34; no + os_preseed_glance ${RC_GLANCE_SQL_PASS} ${RC_MYSQL_PASSWORD} ${RC_MYSQL_SERVER_HOSTNAME} \\ + ${RC_KEYSTONE_ENDPOINT_IP} ${RC_KEYSTONE_REGION} ${RC_KEYSTONE_ADMINPASS} ${RC_KEYSTONE_AUTHTOKEN} \\ + ${RC_RABIT_HOST} ${RC_RABIT_USER} ${RC_RABIT_PASS} + echo \u0026#34;glance-api glance/endpoint-ip string ${RC_GLANCE_ENDPOINT_IP}\u0026#34; | debconf-set-selections + DEBIAN_FRONTEND=noninteractive ${APTGET} install glance +;; +\u0026#34;nova\u0026#34;) + os_pressed_misc + osinstall_mysql_set_host + osinstall_rabbit_host_and_pass + osinstall_install_if_not_installed ntp + osinstall_rcvalue_keystone_endpoint + +\tosinstall_rcvalue RC_NOVA_SQL_PASS \u0026#34;Nova MySQL password [generated-password]: \u0026#34; yes +\tosinstall_rcvalue RC_NOVAAPI_SQL_PASS \u0026#34;Nova API MySQL password [generated-password]: \u0026#34; yes +\tosinstall_rcvalue RC_NOVA_ENDPOINT_IP \u0026#34;Nova endpoint IP address: \u0026#34; no +\tos_preseed_nova ${RC_NOVA_SQL_PASS} ${RC_NOVAAPI_SQL_PASS} ${RC_MYSQL_PASSWORD} ${RC_MYSQL_SERVER_HOSTNAME} \\ +\t${RC_KEYSTONE_ENDPOINT_IP} ${RC_KEYSTONE_REGION} ${RC_KEYSTONE_ADMINPASS} ${RC_KEYSTONE_AUTHTOKEN} \\ +\t${RC_RABIT_HOST} ${RC_RABIT_USER} ${RC_RABIT_PASS} ${RC_METADATA_SHARED_SECRET} + echo \u0026#34;nova-api nova/endpoint-ip string ${RC_NOVA_ENDPOINT_IP}\u0026#34; | debconf-set-selections + DEBIAN_FRONTEND=noninteractive ${APTGET} install nova-api nova-conductor nova-consoleauth nova-scheduler nova-consoleproxy nova-cert + + + sudo cp /etc/nova/nova.conf /etc/nova/nova.conf.orig + sudo crudini --set /etc/nova/nova.conf DEFAULT my_ip 192.168.10.4 + sudo crudini --set /etc/nova/nova.conf DEFAULT use_neutron True + + sudo crudini --set /etc/nova/nova.conf vnc vncserver_listen \\$my_ip + sudo crudini --set /etc/nova/nova.conf vnc vncserver_proxyclient_address \\$my_ip + + sudo crudini --set /etc/nova/nova.conf glance api_servers http://192.168.10.5:9292 + sudo crudini --set /etc/nova/nova.conf neutron url http://192.168.10.2:9696 + sudo systemctl restart $(systemctl | grep -i openstack | awk \u0026#39;{print $1}\u0026#39; | xargs) + + + #? from old guide + #auth_strategy = keystone + #admin_auth_url = http://controller:35357/v2.0 + #admin_tenant_name = service + #admin_username = neutron + #admin_password = NEUTRON_PASS + + #/etc/default/nova-consoleproxy + #NOVA_CONSOLE_PROXY_TYPE=novnc + + +;; +\u0026#34;novacompute\u0026#34;) + os_pressed_misc + osinstall_mysql_set_host + osinstall_rabbit_host_and_pass + osinstall_install_if_not_installed ntp + osinstall_rcvalue_keystone_endpoint + +\tos_preseed_nova ${RC_NOVA_SQL_PASS} ${RC_NOVAAPI_SQL_PASS} ${RC_MYSQL_PASSWORD} ${RC_MYSQL_SERVER_HOSTNAME} \\ +\t${RC_KEYSTONE_ENDPOINT_IP} ${RC_KEYSTONE_REGION} ${RC_KEYSTONE_ADMINPASS} ${RC_KEYSTONE_AUTHTOKEN} \\ +\t${RC_RABIT_HOST} ${RC_RABIT_USER} ${RC_RABIT_PASS} ${RC_METADATA_SHARED_SECRET} + echo \u0026#34;nova-api nova/endpoint-ip string ${RC_NOVA_ENDPOINT_IP}\u0026#34; | debconf-set-selections + +\tosinstall_rcvalue RC_NEUTRON_SQL_PASS \u0026#34;Neutron MySQL password [generated-password]: \u0026#34; yes +\tosinstall_rcvalue RC_METADATA_SHARED_SECRET \u0026#34;Metadata proxy shared secret [generated-password]: \u0026#34; yes +\tosinstall_rcvalue RC_NEUTRON_ENDPOINT_IP \u0026#34;Neutron endpoint IP address: \u0026#34; no +\tADMIN_TENANT_ID=`keystone --os-tenant-name admin --os-username admin --os-password ${RC_KEYSTONE_ADMINPASS} --os-auth-url http://${RC_KEYSTONE_ENDPOINT_IP}:35357/v2.0 tenant-get admin | grep id | awk \u0026#39;{print $4}\u0026#39;` +\tos_preseed_neutron ${RC_NEUTRON_SQL_PASS} ${RC_MYSQL_PASSWORD} ${RC_MYSQL_SERVER_HOSTNAME} \\ +\t${RC_KEYSTONE_ENDPOINT_IP} ${RC_KEYSTONE_REGION} ${RC_KEYSTONE_ADMINPASS} ${RC_KEYSTONE_AUTHTOKEN} \\ +\t${RC_RABIT_HOST} ${RC_RABIT_USER} ${RC_RABIT_PASS} ${RC_METADATA_SHARED_SECRET} http://192.168.10.3:8774/v2 ${ADMIN_TENANT_ID} + + truncate -s 100G /var/lib/nova/instances.img + mkfs.ext4 /var/lib/nova/instances.img + echo \u0026#34;/var/lib/nova/instances.img /var/lib/nova/instances ext4 defaults,noatime,nodiratime,errors=remount-ro,loop 0 2\u0026#34; \u0026gt;\u0026gt; /etc/fstab + mkdir -p /var/lib/nova/instances + mount /var/lib/nova/instances + + DEBIAN_FRONTEND=noninteractive ${APTGET} install nova-compute neutron-openvswitch-agent + apt-get install openvswitch-switch nova-compute-qemu + + sudo cp /etc/nova/nova.conf /etc/nova/nova.conf.orig + sudo crudini --set /etc/nova/nova.conf DEFAULT my_ip 192.168.10.3 + sudo crudini --set /etc/nova/nova.conf DEFAULT use_neutron True + + sudo crudini --set /etc/nova/nova.conf vnc vncserver_listen 0.0.0.0 + sudo crudini --set /etc/nova/nova.conf vnc vncserver_proxyclient_address \\$my_ip + sudo crudini --set /etc/nova/nova.conf vnc novncproxy_base_url http://192.168.10.4:6080/vnc_auto.html + + sudo crudini --set /etc/nova/nova.conf glance api_servers http://192.168.10.5:9292 + sudo crudini --set /etc/nova/nova.conf neutron url http://192.168.10.2:9696 + sudo crudini --set /etc/nova/nova.conf neutron region_name RegionOne + + sudo cp /etc/nova/nova-compute.conf /etc/nova/nova-compute.conf.orig + sudo crudini --set /etc/nova/nova-compute.conf libvirt virt_type qemu + + sudo cp /etc/neutron/plugins/ml2/openvswitch_agent.ini /etc/neutron/plugins/ml2/openvswitch_agent.ini.orig + sudo crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini agent tunnel_types gre + sudo crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs local_ip 192.168.10.3 + sudo systemctl restart $(systemctl | grep -i openstack | awk \u0026#39;{print $1}\u0026#39; | xargs) + + + #setup br-ex + +;; +\u0026#34;neutron\u0026#34;) + os_pressed_misc + osinstall_mysql_set_host + osinstall_rabbit_host_and_pass + osinstall_install_if_not_installed ntp + osinstall_rcvalue_keystone_endpoint + +\tosinstall_rcvalue RC_NEUTRON_SQL_PASS \u0026#34;Neutron MySQL password [generated-password]: \u0026#34; yes +\tosinstall_rcvalue RC_METADATA_SHARED_SECRET \u0026#34;Metadata proxy shared secret [generated-password]: \u0026#34; yes +\tosinstall_rcvalue RC_NEUTRON_ENDPOINT_IP \u0026#34;Neutron endpoint IP address: \u0026#34; no +\tADMIN_TENANT_ID=`keystone --os-tenant-name admin --os-username admin --os-password ${RC_KEYSTONE_ADMINPASS} --os-auth-url http://${RC_KEYSTONE_ENDPOINT_IP}:35357/v2.0 tenant-get admin | grep id | awk \u0026#39;{print $4}\u0026#39;` +\tos_preseed_neutron ${RC_NEUTRON_SQL_PASS} ${RC_MYSQL_PASSWORD} ${RC_MYSQL_SERVER_HOSTNAME} \\ +\t${RC_KEYSTONE_ENDPOINT_IP} ${RC_KEYSTONE_REGION} ${RC_KEYSTONE_ADMINPASS} ${RC_KEYSTONE_AUTHTOKEN} \\ +\t${RC_RABIT_HOST} ${RC_RABIT_USER} ${RC_RABIT_PASS} ${RC_METADATA_SHARED_SECRET} http://192.168.10.3:8774/v2 ${ADMIN_TENANT_ID} + echo \u0026#34;neutron-server neutron/endpoint-ip string ${RC_NEUTRON_ENDPOINT_IP}\u0026#34; | debconf-set-selections + DEBIAN_FRONTEND=noninteractive ${APTGET} install neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent neutron-l3-agent neutron-openvswitch-agent + apt-get install openvswitch-switch + + sudo cp /etc/neutron/neutron.conf /etc/neutron/neutron.conf.orig + sudo crudini --set /etc/neutron/neutron.conf nova auth_url http://192.168.10.6:5000/v3 + + sudo cp /etc/neutron/dhcp_agent.ini /etc/neutron/dhcp_agent.ini.orig + sudo crudini --set /etc/neutron/dhcp_agent.ini enable_isolated_metadata True + + sudo cp /etc/neutron/metadata_agent.ini /etc/neutron/metadata_agent.ini.orig + sudo crudini --set /etc/neutron/metadata_agent.ini nova_metadata_ip 192.168.10.4 + + sudo cp /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugins/ml2/ml2_conf.ini.orig + sudo crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers flat,gre,vlan,vxlan + sudo crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types gre + sudo crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security + sudo crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_vxlan vni_ranges 1:1000 + + sudo cp /etc/neutron/plugins/ml2/openvswitch_agent.ini /etc/neutron/plugins/ml2/openvswitch_agent.ini.orig + sudo crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini agent tunnel_types gre,vxlan + sudo crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs local_ip 192.168.10.2 + + echo \u0026#34;net.ipv4.ip_forward=1\u0026#34; \u0026gt; /etc/sysctl.d/neutron.conf + echo \u0026#34;net.ipv4.conf.all.rp_filter=0\u0026#34; \u0026gt;\u0026gt; /etc/sysctl.d/neutron.conf + echo \u0026#34;net.ipv4.conf.default.rp_filter=0\u0026#34; \u0026gt;\u0026gt; /etc/sysctl.d/neutron.conf + + sudo systemctl restart $(systemctl | grep -i openstack | awk \u0026#39;{print $1}\u0026#39; | xargs) + systemctl disable neutron-linuxbridge-agent + systemctl stop neutron-linuxbridge-agent + + #setup br-ex + +;; +\u0026#34;horizon\u0026#34;) + os_pressed_misc + osinstall_mysql_set_host + osinstall_rabbit_host_and_pass + osinstall_install_if_not_installed ntp + osinstall_rcvalue_keystone_endpoint + + os_pressed_horizon + DEBIAN_FRONTEND=noninteractive ${APTGET} install openstack-dashboard-apache +\tosinstall_write_openrc + + sudo cp /etc/openstack-dashboard/local_settings.py /etc/openstack-dashboard/local_settings.py.orig + sed -i \u0026#39;s/OPENSTACK_HOST = \u0026#34;127.0.0.1\u0026#34;/OPENSTACK_HOST = \u0026#34;192.168.10.6\u0026#34;/\u0026#39; /etc/openstack-dashboard/local_settings.py + echo -e \u0026#34;ALLOWED_HOSTS = [\u0026#39;*\u0026#39;]\u0026#34; \u0026gt;\u0026gt; /etc/openstack-dashboard/local_settings.py + +;; *) usage ;; $ osinstallrc # $ cat \u0026lt;\u0026lt; EOF \u0026gt; osinstallrc RC_MYSQL_SERVER_HOSTNAME=rubus08 RC_MYSQL_SERVER_PKG_NAME=mysql-server-5.7 RC_MYSQL_PASSWORD=$(pwgen 32 1) RC_RABIT_HOST=rubus07 RC_RABIT_USER=guest RC_RABIT_PASS=$(pwgen 32 1) RC_KEYSTONE_ENDPOINT_IP=192.168.10.6 RC_KEYSTONE_REGION=regionOne RC_KEYSTONE_AUTHTOKEN=$(pwgen 32 1) RC_KEYSTONE_ADMINPASS=$(pwgen 32 1) RC_KEYSTONE_SQL_PASS=$(pwgen 32 1) RC_GLANCE_SQL_PASS=$(pwgen 32 1) RC_GLANCE_ENDPOINT_IP=192.168.10.5 RC_NOVA_SQL_PASS=$(pwgen 32 1) RC_NOVAAPI_SQL_PASS=$(pwgen 32 1) RC_NOVA_ENDPOINT_IP=192.168.10.4 RC_NEUTRON_SQL_PASS=$(pwgen 32 1) RC_METADATA_SHARED_SECRET=$(pwgen 32 1) RC_NEUTRON_ENDPOINT_IP=192.168.10.2 $ copy files # for n in $(seq 1 8); do scp preseed-lib openstack-deploy osinstallrc 192.168.10.$n; done OpenStack Install # thomas@rubus08 ~ $ sudo bash -x ./openstack-deploy db thomas@rubus07 ~ $ sudo bash -x ./openstack-deploy rabbit thomas@rubus06 ~ $ sudo bash -x ./openstack-deploy keystone thomas@rubus05 ~ $ sudo bash -x ./openstack-deploy glance thomas@rubus04 ~ $ sudo bash -x ./openstack-deploy nova thomas@rubus03 ~ $ sudo bash -x ./openstack-deploy novacompute thomas@rubus02 ~ $ sudo bash -x ./openstack-deploy neutron thomas@rubus01 ~ $ sudo bash -x ./openstack-deploy horizon Post OpenStack install # rabbitmq not starting at boot # It\u0026rsquo;s all testing/unstable, so there are bound to be slight issues. I have no idea why but I found that when the rubus07 rebooted that rabbitmq would not start, I\u0026rsquo;m sorry I didn\u0026rsquo;t debug it bug report it. A similar rc.local hack:\n(sleep 10; systemctl restart rabbitmq-server.service) Stop all the services # sudo systemctl stop apache2 glance-api glance-registry mysql neutron-dhcp-agent neutron-l3-agent neutron-metadata-agent neutron-openvswitch-agent neutron-server nova-api nova-cert nova-compute nova-conductor nova-consoleauth nova-scheduler rabbitmq-server Neutron forward packets to Internet # When rubus02 is running Neutron will send packets out br-ex, this little SNAT will re-write the source IP. I still need to understand if I need this with wlan0 configured. Or if the external network should carve out some of 192.168.1.0/24.\nip=$(/bin/ip -o -4 addr show dev br-ex | fgrep \u0026#34;192.168.1.\u0026#34; | awk -F\u0026#39;[ /]*\u0026#39; \u0026#39;{print $4}\u0026#39;) iptables -t nat -A POSTROUTING ! -d 192.168.10.0/24 -o br-ex -j SNAT --to-source $ip Manual Horizon install # At some point horizon was not installable on Debian (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=832338), so to manually download it and run HEAD, first install pything-dev and clone horizon: \u0026ldquo;apt-get -y install python-dev \u0026amp;\u0026amp; git clone https://github.com/openstack/horizon.git\". Then cp openstack_dashboard/local/local_settings.py.example openstack_dashboard/local/local_settings.py and edit to list OPENSTACK_HOST = \u0026ldquo;192.168.10.6\u0026rdquo; and OPENSTACK_KEYSTONE_DEFAULT_ROLE = \u0026ldquo;Member\u0026rdquo;. Then just add a crontab entry: \u0026ldquo;@reboot screen -d -m -S horzon /home/thomas/horizon/run_tests.sh \u0026ndash;runserver 192.168.10.1:8000\u0026rdquo;\namd64 nova compute # During testing I created an amd64 nova compute host in a vm, I followed the same instructions as rubus03.\nCleaning up to start again # To remove some packages:\nsudo aptitude purge neutron-common neutron-openvswitch-agent nova-common nova-compute-qemu nova-compute dbconfig-common python-nova python-neutron nova-compute-kvm Also I found it useful to be able to sometimes delete debconf entries (http://serverfault.com/questions/332459/how-do-i-delete-values-from-the-debconf-database):\necho PURGE | sudo debconf-communicate neutron-server echo PURGE | sudo debconf-communicate neutron-metadata-agent echo PURGE | sudo debconf-communicate nova-api echo PURGE | sudo debconf-communicate nova-consoleproxy Bugs to be reported # openstack-deploy # keystone scripts depend on mysql typo http://anonscm.debian.org/cgit/openstack/openstack-meta-packages.git/tree/src/preseed-lib#n18 should be if [ ! -z \u0026ldquo;${7}\u0026rdquo; ] ; then http://anonscm.debian.org/cgit/openstack/openstack-meta-packages.git/tree/src/preseed-lib#n121 assumes keystone ip is endpoint ip postrm don\u0026rsquo;t remove endpoint qemu build deps # qemu qemu-system-x86 add libspice-server-dev libspice-protocol-dev as dependencies for linux-armhf blocked by libspice-server-dev not in armhf $ dpkg --print-architecture armhf $ qemu-system-x86_64 -spice port=9999 qemu-system-x86_64: -spice port=9999: There is no option group \u0026#39;spice\u0026#39; qemu-system-x86_64: -spice port=9999: spice support is disabled $ $ dpkg --print-architecture amd64 $ qemu-system-x86_64 -spice port=9999 ^Cqemu-system-x86_64: terminating on signal 2 $ Testing # admin-openrc.sh # cat \u0026lt;\u0026lt; EOF \u0026gt; admin-openrc.sh #export SERVICE_ENDPOINT=http://192.168.10.6:35357/v2.0/ #export SERVICE_TOKEN=$(grep RC_KEYSTONE_AUTHTOKEN osinstallrc | awk -F= \u0026#39;{print $2}\u0026#39;) export OS_PROJECT_DOMAIN_ID=default export OS_USER_DOMAIN_ID=default export OS_USERNAME=admin export OS_PASSWORD=$(grep RC_KEYSTONE_ADMINPASS osinstallrc | awk -F= \u0026#39;{print $2}\u0026#39;) export OS_TENANT_NAME=admin export OS_PROJECT_NAME=admin export OS_AUTH_URL=http://192.168.10.6:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_AUTH_VERSION=3 export OS_PROJECT_DOMAIN_ID=default export OS_USER_DOMAIN_ID=default export OS_NO_CACHE=1 export OS_CLOUDNAME=rubus EOF thomas-openrc.sh # cat \u0026lt;\u0026lt; EOF \u0026gt; thomas-openrc.sh export OS_PROJECT_DOMAIN_ID=default export OS_USER_DOMAIN_ID=default export OS_USERNAME=thomas export OS_PASSWORD=foobar export OS_TENANT_NAME=thomas export OS_PROJECT_NAME=thomas export OS_AUTH_URL=http://192.168.10.6:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_AUTH_VERSION=3 export OS_PROJECT_DOMAIN_ID=default export OS_USER_DOMAIN_ID=default export OS_NO_CACHE=1 export OS_CLOUDNAME=rubus EOF create project and user (as admin) # openstack project create thomas openstack user create thomas --project thomas --password foobar --email thomas@stewarts.org.uk openstack role add --project thomas --user thomas Member create external network (as admin) # neutron net-create --shared --provider:physical_network external --provider:network_type flat --router:external external neutron subnet-create external 192.168.10.0/24 --name external --allocation-pool start=192.168.10.100,end=192.168.10.200 --dns-nameserver 8.8.8.8 --gateway 192.168.10.2 create flavor (as admin) # openstack flavor create --ram 256 --disk 30 --ephemeral 0 --vcpus 1 --public m1.tiny init thomas project (as thomas) # create private network, router, update security group, install key and grep floating ip\nneutron net-create private neutron subnet-create private 192.168.100.0/24 --name private --dns-nameserver 8.8.8.8 --gateway 192.168.100.1 openstack router create router neutron router-gateway-set router external neutron router-interface-add router private openstack security group rule create --proto icmp --src-ip 0/0 --dst-port -1 default openstack security group rule create --proto tcp --src-ip 0/0 --dst-port 22 default openstack keypair create --public-key ~/.ssh/id_rsa.pub thomasATdiamond openstack ip floating create external Test of amd64 with rubus09 # Downloading amd64 or x86_64 images and getting them to run on rubus09 which is a Nova Compute VM (non Pi):\nwget http://cdimage.debian.org/mirror/cdimage/openstack/8.6.0/debian-8.6.0-openstack-amd64.qcow2 openstack image create --disk-format qcow2 --container-format bare --public --file debian-8.6.0-openstack-amd64.qcow2 debian-8.6.0-openstack-amd64 openstack server create --image debian-8.5.0-openstack-amd64 --flavor m1.tiny --key-name thomasATdiamond --nic net-id=private tom wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img openstack image create --disk-format qcow2 --container-format bare --public --file cirros-0.3.5-x86_64-disk.img cirros-0.3.5-x86_64 openstack server create --image cirros-0.3.5-x86_64 --flavor m1.tiny --key-name thomasATdiamond --nic net-id=private tom Fail at CirrOS Arm # wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-arm-kernel wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-arm-initramfs wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-arm-rootfs.img.gz gunzip cirros-0.3.4-arm-rootfs.img.gz openstack image create --container-format=aki --disk-format=aki --file cirros-0.3.4-arm-kernel --public cirros-0.3.4-arm-kernel openstack image create --container-format=ari --disk-format=ari --file cirros-0.3.4-arm-initramfs --public cirros-0.3.4-arm-initramfs kernelid=$(openstack image show cirros-0.3.4-arm-kernel | grep id | awk \u0026#39;{print $4}\u0026#39;) initramfsid=$(openstack image show cirros-0.3.4-arm-initramfs | grep id | awk \u0026#39;{print $4}\u0026#39;) openstack image create --container-format=ami --disk-format=ami --file cirros-0.3.4-arm-rootfs.img --public --property hypervisor_type=qemu --property vm_mode=hvm --property architecture=armv7l --property hw_machine_type=vexpress-a15 --property kernel_id=$kernelid --property ramdisk_id=$initramfsid --property hw_video_model=vga cirros-0.3.4-arm-rootfs.img openstack server create --image --flavor m1.tiny --key-name thomasATdiamond --nic net-id=private tom Test qemu actually works # Actually testing that qemu can launch and run arm images seems to be a dark art. I can\u0026rsquo;t get the CirrOS arm image to do anything! I was able to get some images created by Aurélien Jarno to boot (https://www.aurel32.net/info/debian_arm_qemu.php).\nwget https://people.debian.org/~aurel32/qemu/armhf/vmlinuz-3.2.0-4-vexpress wget https://people.debian.org/~aurel32/qemu/armhf/initrd.img-3.2.0-4-vexpress wget https://people.debian.org/~aurel32/qemu/armhf/debian_wheezy_armhf_standard.qcow2 qemu-system-arm -M vexpress-a9 -kernel vmlinuz-3.2.0-4-vexpress -initrd initrd.img-3.2.0-4-vexpress -drive if=sd,file=debian_wheezy_armhf_standard.qcow2 -append \u0026#34;root=/dev/mmcblk0p2 console=ttyAMA0\u0026#34; -serial stdio Launch Debian # openstack image create --container-format=aki --disk-format=aki --property hw_machine_type=vexpress-a9 --property hypervisor_type=qemu --property vm_mode=hvm --file vmlinuz-3.2.0-4-vexpress vmlinuz-3.2.0-4-vexpress kernelid=$(openstack image show vmlinuz-3.2.0-4-vexpress | grep id | awk \u0026#39;{print $4}\u0026#39;) openstack image create --container-format=ari --disk-format=ari --property hw_machine_type=vexpress-a9 --property hypervisor_type=qemu --property vm_mode=hvm --file initrd.img-3.2.0-4-vexpress initrd.img-3.2.0-4-vexpress initramfsid=$(openstack image show initrd.img-3.2.0-4-vexpress | grep id | awk \u0026#39;{print $4}\u0026#39;) openstack image create --container-format=ami --disk-format=ami --file debian_wheezy_armhf_standard.qcow2 --property hypervisor_type=qemu --property vm_mode=hvm --property architecture=armv7l --property hw_machine_type=vexpress-a9 --property kernel_id=$kernelid --property ramdisk_id=$initramfsid --property hw_video_model=vga --property kernel_args=\u0026#34;root=/dev/mmcblk0p2 console=ttyAMA0\u0026#34; --property hw_disk_bus=sd --property hw_vif_model=lan9118 --property os_command_line=\u0026#34;root=/dev/mmcblk0p2 console=ttyAMA0\u0026#34; debian_wheezy_armhf_standard openstack server create --image debian_wheezy_armhf_standard --flavor m1.tiny --key-name thomasATdiamond --nic net-id=private tom Links # https://git.linaro.org/people/arnd.bergmann/flashbench.git https://blogofterje.wordpress.com/2012/01/14/optimizing-fs-on-sd-card/ https://wiki.gentoo.org/wiki/SDCard https://github.com/djwillis/meta-raspberrypi/commit/b059c59f7192cb30799e6fead125855b057283fd http://openstack.alioth.debian.org/ http://anonscm.debian.org/Aukey/cgit/openstack/ https://wiki.debian.org/OpenStackHowto/Folsom http://anonscm.debian.org/cgit/openstack/openstack-meta-packages.git/tree/src/openstack-deploy http://anonscm.debian.org/cgit/openstack/openstack-meta-packages.git/tree/src/preseed-lib https://www.aurel32.net/info/debian_arm_qemu.php http://www.trescca.eu/index.php/2013-05-23-13-18-38/guides/118-raspberry-pi-as-compute-node-in-openstack.html http://docs.openstack.org/developer/horizon/quickstart.html ","date":"21 April 2017","externalUrl":null,"permalink":"/projects/rubus/","section":"Projects","summary":"Background # There have been many Raspberry Pi clusters before, they first started when the Raspberry Pi came out first. They are all very cool and I’ve wanted to try to make my own, but never quite got round to it or could justify it or think of any good project to run on them. Around the time the Raspberry Pi 3 came out, I was deep into learning how OpenStack work. That is the stage after running packstack and playing, the stage of looking at all the components and how they all fit together. After a while I thought it would be really quite cool to run OpenStack on a Raspberry Pi Cluster. OpenStack is quite resource intensive, dozens of multi forking memory hungry (in Pi terms) Python daemons. So it would really need multiple Pi’s to run. However, given the whole point is to run instances, the Raspberry Pi is quite limited regarding actual virtualisation. However I didn’t let that stop me. I didn’t want to run any production instances, I just wanted to learn.\n","title":"Rubus (Raspberry Pi Cluster)","type":"projects"},{"content":" Introduction # This is a short howto on creating a small OpenStack proof of concept on CentOS. The aim is to create a proof of concept OpenStack Liberty deployment on a single Linux testing machine, where the deployment matches real world hardware deployments. The aim is not to just install all the OpenStack components in a single machine or virtual machine. The aim is to make use of Linux, KVM and libvirt to create virtual hardware to run the various OpenStack components to match a real world deployment. Each virtual machine represents what could be a physical host. It will use CentOS 7 as the base operating system and use the RDO OpenStack packages. This matches the Red Hat OpenStack Platform, however does not need subscriptions to install and test.\nThe deployment will use tripleo and ironic for deployment and provisioning. Meaning that a small cut-down OpenStack cloud called the undercloud will look after the hardware. Then this will deploy a production OpenStack cloud with all the Components running, this is called the overcloud. The deployment consist of 1 x undercloud virtual machine and 3 x overcloud virtual machines. One of these machines will run all the usual OpenStack components (ie be a Controller in RDO/Red Hat terms) and the other two will run Nova (ie be Compute in RDO/Red Hat terms).\nIt\u0026rsquo;s mostly cobbled together with the aid of:\nhttps://trickycloud.wordpress.com/2015/11/15/openstack-lab-on-your-laptop-with-tripleo-and-director/ http://keithtenzer.com/2015/10/14/howto-openstack-deployment-using-tripleo-and-the-red-hat-openstack-director/ https://repos.fedorapeople.org/repos/openstack-m/rdo-manager-docs/liberty/basic_deployment/basic_deployment_cli.html. https://www.rdoproject.org/install/tripleo-cli/ https://wiki.openstack.org/wiki/TripleO http://docs.openstack.org/developer/tripleo-docs/ http://docs.openstack.org/developer/tripleo-docs/troubleshooting/troubleshooting-overcloud.html Preparation # A few preparations are needed before getting started. First you need a Linux machine, the more CPUs, memory and fast disk the better. This deployment was done on an Intel i5 laptop with 16GB RAM and a SSD. Next you need to get KVM and libvirt running. I used Debian and a simple \u0026ldquo;apt-get install virt-manager\u0026rdquo; was enough for me to start playing. However this should be very doable on any other Debian or Fedora derived distribution.\nNext we need to think about the software, given that there may be multiple permutations and a little trial and error for the install I set up a local mirror. This is not actually needed, but it speeds up the install. Ideally having a full CentOS mirror is best. However I was not able do that in this instance. I had a restricted network connection that was usable but frustratingly slow. I took the CentOS-7-x86_64-Everything-1511.iso and loopback mounted it and re-exported it via Apache. This gave me a quick and dirty mirror. In order to speed the network up further I also installed the Squid web proxy and tuned it to store large files. While this is getting a little off topic I think it\u0026rsquo;s worth including some brief notes on how to do this.\nTo get the ISO mounted on boot make an entry in /etc/fstab like the following:\n$ cat /etc/fstab | grep CentOS /srv/mirror/CentOS-7-x86_64-Everything-1511.iso /srv/mirror/CentOS-7-x86_64-Everything-1511.iso.d iso9660 defaults $ And to get Apache to serve it add an alias to the location and enable access:\n$ grep \u0026#34;Alias /mirror\u0026#34; /etc/apache2/sites-enabled/000-default.conf Alias /mirror /srv/mirror $ grep -A 4 \u0026#34;Directory /srv/mirror\u0026#34; /etc/apache2/sites-enabled/000-default.conf \u0026lt;Directory /srv/mirror\u0026gt; Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted \u0026lt;/Directory\u0026gt; $ As for the extra Squid config, I got most of the config from there sites:\nhttp://ma.ttwagner.com/lazy-distro-mirrors-with-squid/ http://sharadchhetri.com/2014/03/15/install-configure-transparent-squid-proxy-server-rhelcentos-6-x/ However, this setup is a little half baked, really I should have implemented a transparent proxy that would also handle the fast mirror detection, so that the 304 http redirects from the CentOS mirrors would not pollute the cache with gets from alternative mirrors. I get round this by rewriting the repo files and instructing the build process to always use the cache. Again with a full mirror of Centos and RDO it should be possible to do this offline. We want to tell squid to allow access from a few virtual networks we will create, tell it to store large objects, get it to use disk cache, up the refresh pattern to rpm, deb and iso files to a long time and lastly tell it to shutdown quickly. In any case here were the changes I made to Squid which sped up the multiple updates from Centos 1511 to present updates:\nacl localnet src 10.0.0.0/8 acl localnet src 172.16.0.0/12 acl localnet src 192.168.0.0/16 http_access allow localnet maximum_object_size 4096 MB cache_dir ufs /var/spool/squid 20480 16 256 refresh_pattern -i .rpm$ 129600 100% 129600 refresh-ims override-expire refresh_pattern -i .deb$ 129600 100% 129600 refresh-ims override-expire refresh_pattern -i .iso$ 129600 100% 129600 refresh-ims override-expire shutdown_lifetime 2 seconds For the setup of undercloud and overcloud hosts, the undercloud needs to be able to manage the overcloud hosts. In real hardware this would usually make use of IPMI. However given our virtual setup we can\u0026rsquo;t use IPMI, so the undercloud is configured to issue libvirt commands to the libvirt host over ssh. Authentication is taken care of with ssh keys, however in order for non-root users to manage libvirt machines I setup this small policy kit file so that my user (thomas) can run any libvirt command (change as needed):\n$ sudo cat /etc/polkit-1/localauthority/50-local.d/50-libvirt-user-stack.pkla [libvirt Management Access] Identity=unix-user:thomas Action=org.libvirt.unix.manage ResultAny=yes ResultInactive=yes ResultActive=yes $ Regarding nested virtualization, given that we are going to run a Nova compute node in a virtual machine we will need some form of nested virtualization. We could give the option \u0026ldquo;\u0026ndash;libvirt-type qem\u0026rdquo; to the \u0026ldquo;openstack overcloud deploy\u0026rdquo; command to just use qemu inside the virtual machine, however we can instruct KVM to allow nested virtualization. The sysfs file /sys/module/kvm_intel/parameters/nested show the current value. A quick way to configure this is:\n$ echo \u0026#34;options kvm_intel nested=1\u0026#34; | sudo tee /etc/modprobe.d/kvm-nested.conf $ sudo modprobe -r kvm_intel; sudo modprobe kvm_intel $ cat /sys/module/kvm_intel/parameters/nested Also KVM needs to copy the same CPU type, I could not find out how to do this with virsh. It could be done by editing the virtual machine xml files, however I just used the GUI. So for each virtual machine created open virt-manager, open each virtual machine in turn, click the \u0026ldquo;View\u0026rdquo; menu and select \u0026ldquo;details\u0026rdquo;. Then click \u0026ldquo;Processor\u0026rdquo; and check the \u0026ldquo;Copy host CPU configuration\u0026rdquo; box. After that hit apply.\nNetworking Diagram # The following is a diagram that shows a pictorial representation of the networking. The top machine in the hypervisor host, in my case a real laptop. When looking at the example snippets the \u0026ldquo;$ \u0026quot; prompt is used. The lower boxes are the virtual machines that run on the above mentioned host. The red network is the provisioning network. For example a real host would have a first nic that would accept IPMI command and be able to PXE boot without adding any other bonding, lacp or vlan complexities. The blue network is the OpenStack network. It carries the production traffic and for the case of the overcloud machines each has 2 interfaces which match what a real life setup would look like. It should be noted that in this setup multiple VLANs are used on the blue network to segregate the traffic. OpenStack handles all DHCP and ip address allocation for us. This does seem to work however I\u0026rsquo;m currently not 100% sure how, I can only assume that the libvirt virtual switch (which is a Linux bridge) somehow handles the vlan segregation.\nopenstack-network.dia\nNetworking Setup # We need to make some network xml definition files: net-external.xml\n\u0026lt;network\u0026gt; \u0026lt;name\u0026gt;external\u0026lt;/name\u0026gt; \u0026lt;forward mode=\u0026#39;nat\u0026#39;\u0026gt; \u0026lt;/forward\u0026gt; \u0026lt;ip address=\u0026#39;10.0.0.1\u0026#39; netmask=\u0026#39;255.255.255.0\u0026#39;\u0026gt; \u0026lt;/ip\u0026gt; \u0026lt;/network\u0026gt; net-provisioning.xml\n\u0026lt;network\u0026gt; \u0026lt;name\u0026gt;provisioning\u0026lt;/name\u0026gt; \u0026lt;ip address=\u0026#39;172.16.0.1\u0026#39; netmask=\u0026#39;255.255.255.0\u0026#39;\u0026gt; \u0026lt;/ip\u0026gt; \u0026lt;/network\u0026gt; I created the above virtual networks by using here files and virsh as follows:\n$ cat \u0026lt;\u0026lt; EOF \u0026gt; net-external.xml \u0026gt; \u0026lt;network\u0026gt; \u0026gt; \u0026lt;name\u0026gt;external\u0026lt;/name\u0026gt; \u0026gt; \u0026lt;forward mode=\u0026#39;nat\u0026#39;\u0026gt; \u0026gt; \u0026lt;/forward\u0026gt; \u0026gt; \u0026lt;ip address=\u0026#39;10.0.0.1\u0026#39; netmask=\u0026#39;255.255.255.0\u0026#39;\u0026gt; \u0026gt; \u0026lt;/ip\u0026gt; \u0026gt; \u0026lt;/network\u0026gt; \u0026gt; EOF $ cat \u0026lt;\u0026lt; EOF \u0026gt; net-provisioning.xml \u0026gt; \u0026lt;network\u0026gt; \u0026gt; \u0026lt;name\u0026gt;provisioning\u0026lt;/name\u0026gt; \u0026gt; \u0026lt;ip address=\u0026#39;172.16.0.1\u0026#39; netmask=\u0026#39;255.255.255.0\u0026#39;\u0026gt; \u0026gt; \u0026lt;/ip\u0026gt; \u0026gt; \u0026lt;/network\u0026gt; \u0026gt; EOF $ $ for n in external provisioning; do sudo virsh net-define net-$n.xml; sudo virsh net-autostart $n; sudo virsh net-start $n; done Network external defined from net-external.xml Network external marked as autostarted Network external started Network provisioning defined from net-provisioning.xml Network provisioning marked as autostarted Network provisioning started $ $ rm net-external.xml net-provisioning.xml Undercloud # Create undercloud01 virtual machine and install CentOS 7.0 # I installed CentOS by using the virt-install with a http location. If you don\u0026rsquo;t have the ISO accessible from a local web server you can just point to a mirror (something like http://mirror.bytemark.co.uk/centos/7/os/x86_64/ should work instead). The virt-install(1) with the \u0026ndash;location option is quite clever. Instead of setting up a full blown DHCP server, TFTP server and pxelinux configuration it extracts a kernel and initrd and boots from them passing any extra options to the kernel that are required.\nI want the installation to be as automated as possible so I used kickstart. For speed I placed the kickstart file in my pubic_html directory of my home (~/public_html/ks.cfg). That way it would be accessible via Apache (you may need to enable the user directory module with \u0026ldquo;sudo a2enmod userdir\u0026rdquo;). I left it as close to the anaconda-ks.cfg as possible. The post installation script goes on to add the RDO reops and does a yum update. It then installs some base OpenStack packages. It adds a user called stack, sets the password and gives it full root access via sudo. You will need to change the rootpw option and the stack password. If you don\u0026rsquo;t have Squid configured then delete the echo line that sets the proxy in yum.conf and delete the entried that create the /etc/profile.d/proxy.sh file. You can also set the ssh key so that you can connect without a password if you want. Here is the content of the ks.cfg:\n#version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Use CDROM installation media cdrom # Use graphical install #graphical text # Run the Setup Agent on first boot firstboot --enable ignoredisk --only-use=vda # Keyboard layouts keyboard --vckeymap=gb --xlayouts=\u0026#39;gb\u0026#39; # System language lang en_GB.UTF-8 # Network information network --bootproto=static --device=eth0 --ipv6=auto --activate --ip=10.0.0.2 --netmask=255.255.255.0 --gateway=10.0.0.1 --nameserver=10.0.0.1 network --hostname=undercloud01 network --bootproto=static --device=eth1 --ipv6=auto --activate --ip=172.16.0.2 --netmask=255.255.255.0 # Root password rootpw password # System timezone timezone Europe/London --isUtc # System bootloader configuration bootloader --append=\u0026#34; crashkernel=auto\u0026#34; --location=mbr --boot-drive=vda # Partition clearing information #clearpart --none --initlabel clearpart --all # Disk partitioning information part pv.178 --fstype=\u0026#34;lvmpv\u0026#34; --ondisk=vda --size=51200 part /boot --fstype=\u0026#34;xfs\u0026#34; --ondisk=vda --size=500 volgroup centos --pesize=4096 pv.178 logvol / --fstype=\u0026#34;xfs\u0026#34; --grow --maxsize=51200 --size=1024 --name=root --vgname=centos logvol swap --fstype=\u0026#34;swap\u0026#34; --size=1024 --name=swap --vgname=centos #reboot shutdown %packages @^minimal @core kexec-tools tcpdump screen telnet %end %addon com_redhat_kdump --enable --reserve-mb=\u0026#39;auto\u0026#39; %end %post set -x exec \u0026gt;/root/ks-post-anaconda.log 2\u0026gt;\u0026amp;1 tail -f /root/ks-post-anaconda.log \u0026gt;/dev/tty7 \u0026amp; /usr/bin/chvt 7 #Set the proxy echo \u0026#39;proxy=http://10.0.0.1:3128\u0026#39; \u0026gt;\u0026gt; /etc/yum.conf cat \u0026lt;\u0026lt; EOF \u0026gt; /etc/profile.d/proxy.sh export http_proxy=\u0026#34;http://10.0.0.1:3128\u0026#34; export https_proxy=\u0026#34;http://10.0.0.1:3128\u0026#34; export no_proxy=\u0026#34;10.0.0.0/8,172.16.0.0/12\u0026#34; EOF #Move the original repo file out of the way and replaces it with one statically configured to use a single mirror, thus the proxy is used #https://www.bytemark.co.uk/downloads/support/document_library/Bytemark-Centos.repo.txt mv -v /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.orig cat \u0026lt;\u0026lt; EOF \u0026gt; /etc/yum.repos.d/CentOS-Base.repo [base] name=CentOS-\\$releasever - Base baseurl=http://mirror.bytemark.co.uk/centos/\\$releasever/os/\\$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 [updates] name=CentOS-\\$releasever - Updates baseurl=http://mirror.bytemark.co.uk/centos/\\$releasever/updates/\\$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 [extras] name=CentOS-\\$releasever - Extras baseurl=http://mirror.bytemark.co.uk/centos/\\$releasever/extras/\\$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 EOF #Originally I install EPEL, however this proved to conflict with the OpenStack repo, so this is now commented. #yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm #mv -v /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.orig #cat \u0026lt;\u0026lt; EOF \u0026gt; /etc/yum.repos.d/epel.repo #[epel] #name=Extra Packages for Enterprise Linux 7 - \\$basearch #baseurl=http://mirror.bytemark.co.uk/fedora/epel/7/\\$basearch #failovermethod=priority #enabled=1 #gpgcheck=1 #gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 #EOF # Update to latest packages yum clean all yum -y update #Install the RDO Liberty release repo and install python-tripleoclient which installs the packages need to start the undercloud install straight after the install yum install -y http://rdoproject.org/repos/openstack-liberty/rdo-release-liberty.rpm yum install -y python-tripleoclient #The following enables the delorean repo rather than the stable one. I tried this but had issues. #curl -o /etc/yum.repos.d/delorean.repo http://trunk.rdoproject.org/centos7-liberty/current-passed-ci/delorean.repo #curl -o /etc/yum.repos.d/delorean-deps.repo http://trunk.rdoproject.org/centos7-liberty/delorean-deps.repo #yum -y install yum-plugin-priorities #yum install -y python-rdomanager-oscplugin #yum install -y instack-undercloud #Next we add a user called stack to do everything as. useradd stack echo -en \u0026#34;password\\npassword\\n\u0026#34; | passwd stack echo \u0026#34;stack ALL=(root) NOPASSWD:ALL\u0026#34; \u0026gt; /etc/sudoers.d/stack chmod 0440 /etc/sudoers.d/stack #We need working DNS, so we add this to the hosts file. echo \u0026#34;172.16.0.2 undercloud01\u0026#34; \u0026gt;\u0026gt; /etc/hosts #Add the public key to the authorized_keys file. mkdir -p /root/.ssh echo \u0026#34;ssh-rsa abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 user@host\u0026#34; \u0026gt; /root/.ssh/authorized_keys chmod 700 /root/.ssh chmod 600 /root/.ssh/authorized_keys %end Next is the actual virt-install run. It sets the virtual machine name and gives it 4GB of RAM with a 60G disk. It sets the OS variant to centos7.0 (the command \u0026ldquo;osinfo-query os\u0026rdquo; gives a full list of variants that are possible). It sets the location of the install media accessed via http. It adds extra arguments to set the initial IP, netmask and the location of the kick start files. It gives it two network interfaces, one in the external network and one in the provisioning network. The progress of the installation is shown in virt-viewer, once the installation is finished we don\u0026rsquo;t care about the undercloud01 virtual machine console anymore, so the - -noreboot option just lets the virt-install command return after the installation has finished. We start the machine after with virsh. Note that 60G may seem large, however these are qcow (copy on write) images, so not all the space is allocated. After the installation is finished approximately 11G is used.\n$ sudo virt-install --name undercloud01 --vcpus 1 --memory 4096 --disk size=60 --os-variant centos7.0 --location http://10.0.0.1/mirror/CentOS-7-x86_64-Everything-1511.iso.d --extra-args \u0026#34;ip=10.0.0.2 netmask=255.255.255.0 ks=http://10.0.0.1/~thomas/ks.cfg vga=0\u0026#34; --network network=external --network network=provisioning --noreboot /usr/share/virt-manager/virtinst/osdict.py:26: PyGIWarning: Libosinfo was imported without specifying a version first. Use gi.require_version(\u0026#39;Libosinfo\u0026#39;, \u0026#39;1.0\u0026#39;) before import to ensure that the right version gets loaded. from gi.repository import Libosinfo as libosinfo Starting install... Retrieving file vmlinuz... | 9.8 MB 00:00 ... Retrieving file initrd.img... | 73 MB 00:00 ... Allocating \u0026#39;undercloud01.qcow2\u0026#39; | 20 GB 00:00 Creating domain... Domain creation completed. You can restart your domain by running: virsh --connect qemu:///system start undercloud01 $ $ sudo virsh start undercloud01 Domain undercloud01 started $ Create overcloud01-03 virtual machines # I created the 3 virtual machines that will become the overcloud, which will form the real usable OpenStack installation with all the normal OpenStack components. The undercloud01 virtual machine will manage these networks. I need to create the virtual machines in libvirt which required both the virtual machine and its associated disk. Again virt-install is used, however it is given the - -dry-run option to output an XML definition of the virtual machine that can be fed into virsh. This way I ended up with 3 virtual machines ready to run. Again 60G disks are used, however not all that space is needed. By default we create the ironic nova flavors, however in later versions of OpenStack these are created for us. Also many examples online use flavors with a 40G disk, thus we make it slightly bigger so examples online will work. After the installation a controller uses about 7G and a compute node uses about 4G.\nI created the machines with a small for loop:\n$ for n in {1..3}; do sudo virt-install --name overcloud0$n --vcpus 1 --memory 4096 --disk size=60 --os-variant centos7.0 --network network=provisioning --network network=external --network network=external --boot network,hd --dry-run --print-xml \u0026gt; /tmp/overcloud0$n.xml; sudo virsh define --file /tmp/overcloud0$n.xml; sudo qemu-img create -f qcow2 -o preallocation=metadata /var/lib/libvirt/images/overcloud0$n.qcow2 60G; done; rm /tmp/overcloud0?.xml /usr/share/virt-manager/virtinst/osdict.py:26: PyGIWarning: Libosinfo was imported without specifying a version first. Use gi.require_version(\u0026#39;Libosinfo\u0026#39;, \u0026#39;1.0\u0026#39;) before import to ensure that the right version gets loaded. from gi.repository import Libosinfo as libosinfo Domain overcloud01 defined from /tmp/overcloud01.xml Formatting \u0026#39;/var/lib/libvirt/images/overcloud01.qcow2\u0026#39;, fmt=qcow2 size=42949672960 encryption=off cluster_size=65536 preallocation=metadata lazy_refcounts=off refcount_bits=16 /usr/share/virt-manager/virtinst/osdict.py:26: PyGIWarning: Libosinfo was imported without specifying a version first. Use gi.require_version(\u0026#39;Libosinfo\u0026#39;, \u0026#39;1.0\u0026#39;) before import to ensure that the right version gets loaded. from gi.repository import Libosinfo as libosinfo Domain overcloud02 defined from /tmp/overcloud02.xml Formatting \u0026#39;/var/lib/libvirt/images/overcloud02.qcow2\u0026#39;, fmt=qcow2 size=42949672960 encryption=off cluster_size=65536 preallocation=metadata lazy_refcounts=off refcount_bits=16 /usr/share/virt-manager/virtinst/osdict.py:26: PyGIWarning: Libosinfo was imported without specifying a version first. Use gi.require_version(\u0026#39;Libosinfo\u0026#39;, \u0026#39;1.0\u0026#39;) before import to ensure that the right version gets loaded. from gi.repository import Libosinfo as libosinfo Domain overcloud03 defined from /tmp/overcloud03.xml Formatting \u0026#39;/var/lib/libvirt/images/overcloud03.qcow2\u0026#39;, fmt=qcow2 size=42949672960 encryption=off cluster_size=65536 preallocation=metadata lazy_refcounts=off refcount_bits=16 $ Undercloud configuration # Before installing the undercloud we need to create an undercloud.conf. There is a sample one located in /usr/share/instack-undercloud/undercloud.conf.sample. https://github.com/openstack/instack-undercloud/blob/master/undercloud.conf.sample. By default all the options are commented out. Here is the undercloud.conf I used.\n[DEFAULT] # # From instack-undercloud # # Local file path to the necessary images. The path should be a # directory readable by the current user that contains the full set of # images. (string value) image_path = /home/stack/images # IP information for the interface on the Undercloud that will be # handling the PXE boots and DHCP for Overcloud instances. The IP # portion of the value will be assigned to the network interface # defined by local_interface, with the netmask defined by the prefix # portion of the value. (string value) local_ip = 172.16.0.2/24 # Network interface on the Undercloud that will be handling the PXE # boots and DHCP for Overcloud instances. (string value) local_interface = eth1 # Network that will be masqueraded for external access, if required. # This should be the subnet used for PXE booting. (string value) masquerade_network = 172.16.0.0/24 # Start of DHCP allocation range for PXE and DHCP of Overcloud # instances. (string value) dhcp_start = 172.16.0.3 # End of DHCP allocation range for PXE and DHCP of Overcloud # instances. (string value) dhcp_end = 172.16.0.30 # Network CIDR for the Neutron-managed network for Overcloud # instances. This should be the subnet used for PXE booting. (string # value) network_cidr = 172.16.0.0/24 # Network gateway for the Neutron-managed network for Overcloud # instances. This should match the local_ip above when using # masquerading. (string value) network_gateway = 172.16.0.1 # Network interface on which inspection dnsmasq will listen. If in # doubt, use the default value. (string value) # Deprecated group/name - [DEFAULT]/discovery_interface #inspection_interface = br-ctlplane # Temporary IP range that will be given to nodes during the inspection # process. Should not overlap with the range defined by dhcp_start # and dhcp_end, but should be in the same network. (string value) # Deprecated group/name - [DEFAULT]/discovery_iprange inspection_iprange = 172.16.0.33,172.16.0.62 # Whether to run benchmarks when inspecting nodes. (boolean value) # Deprecated group/name - [DEFAULT]/discovery_runbench #inspection_runbench = false # Whether to enable the debug log level for Undercloud OpenStack # services. (boolean value) #undercloud_debug = true # Whether to install Tuskar services in the Undercloud. (boolean # value) #enable_tuskar = false # Whether to install Tempest in the Undercloud. (boolean value) #enable_tempest = false [auth] # # From instack-undercloud # # Password used for MySQL databases. If left unset, one will be # automatically generated. (string value) #undercloud_db_password = \u0026lt;None\u0026gt; # Keystone admin token. If left unset, one will be automatically # generated. (string value) #undercloud_admin_token = \u0026lt;None\u0026gt; # Keystone admin password. If left unset, one will be automatically # generated. (string value) #undercloud_admin_password = \u0026lt;None\u0026gt; # Glance service password. If left unset, one will be automatically # generated. (string value) #undercloud_glance_password = \u0026lt;None\u0026gt; # Heat db encryption key(must be 16, 24, or 32 characters. If left # unset, one will be automatically generated. (string value) #undercloud_heat_encryption_key = \u0026lt;None\u0026gt; # Heat service password. If left unset, one will be automatically # generated. (string value) #undercloud_heat_password = \u0026lt;None\u0026gt; # Neutron service password. If left unset, one will be automatically # generated. (string value) #undercloud_neutron_password = \u0026lt;None\u0026gt; # Nova service password. If left unset, one will be automatically # generated. (string value) #undercloud_nova_password = \u0026lt;None\u0026gt; # Ironic service password. If left unset, one will be automatically # generated. (string value) #undercloud_ironic_password = \u0026lt;None\u0026gt; # Tuskar service password. If left unset, one will be automatically # generated. (string value) #undercloud_tuskar_password = \u0026lt;None\u0026gt; # Ceilometer service password. If left unset, one will be # automatically generated. (string value) #undercloud_ceilometer_password = \u0026lt;None\u0026gt; # Ceilometer metering secret. If left unset, one will be automatically # generated. (string value) #undercloud_ceilometer_metering_secret = \u0026lt;None\u0026gt; # Ceilometer snmpd user. If left unset, one will be automatically # generated. (string value) #undercloud_ceilometer_snmpd_user = \u0026lt;None\u0026gt; # Ceilometer snmpd password. If left unset, one will be automatically # generated. (string value) #undercloud_ceilometer_snmpd_password = \u0026lt;None\u0026gt; # Swift service password. If left unset, one will be automatically # generated. (string value) #undercloud_swift_password = \u0026lt;None\u0026gt; # Rabbitmq cookie. If left unset, one will be automatically generated. # (string value) #undercloud_rabbit_cookie = \u0026lt;None\u0026gt; # Rabbitmq password. If left unset, one will be automatically # generated. (string value) #undercloud_rabbit_password = \u0026lt;None\u0026gt; # Rabbitmq username. If left unset, one will be automatically # generated. (string value) #undercloud_rabbit_username = \u0026lt;None\u0026gt; # Heat stack domain admin password. If left unset, one will be # automatically generated. (string value) #undercloud_heat_stack_domain_admin_password = \u0026lt;None\u0026gt; # Swift hash suffix. If left unset, one will be automatically # generated. (string value) #undercloud_swift_hash_suffix = \u0026lt;None\u0026gt; Undercloud installation preparation # Next we need to get the undercloud.conf onto the undercloud01 vm, ssh in, and become the stack user:\n$ scp undercloud.conf root@10.0.0.2: The authenticity of host \u0026#39;10.0.0.2 (10.0.0.2)\u0026#39; can\u0026#39;t be established. ECDSA key fingerprint is SHA256:QlSUSv6e8wmOuzkqXbxNiK1bYhf/NVC3lafvkMhj7n0. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added \u0026#39;10.0.0.2\u0026#39; (ECDSA) to the list of known hosts. undercloud.conf 100% 5219 5.1KB/s 00:00 $ ssh root@10.0.0.2 [root@undercloud01 ~]# su - stack [stack@undercloud01 ~]$ sudo cp /root/undercloud.conf . [stack@undercloud01 ~]$ Undercloud installation # Then we start the undercloud installation with the \u0026ldquo;openstack undercloud install\u0026rdquo;, this process takes a little while:\n[stack@undercloud01 ~]$ openstack undercloud install Logging to /home/stack/.instack/install-undercloud.log Checking for a FQDN hostname... Static hostname detected as undercloud01 Transient hostname detected as undercloud01 Generated new password for undercloud_db_password Generated new password for undercloud_admin_token Generated new password for undercloud_admin_password Generated new password for undercloud_glance_password \u0026lt;SNIP\u0026gt; [2016-02-17 15:59:05,183] (os-refresh-config) [INFO] Completed phase post-configure os-refresh-config completed successfully Generated new ssh key in ~/.ssh/id_rsa ############################################################################# Undercloud install complete. The file containing this installation\u0026#39;s passwords is at /home/stack/undercloud-passwords.conf. There is also a stackrc file at /home/stack/stackrc. These files are needed to interact with the OpenStack services, and should be secured. ############################################################################# [stack@undercloud01 ~]$ Undercloud works # If this completes ok, we should be able to inspect the state of the undercloud. First we source the stackrc file which contains the authentication information for OpenStack, this sets environment variables that the OpenStack programs use. Then we can list the services that are running. Note the lack of horizion and other high level components.\n[stack@undercloud01 ~]$ cat stackrc export NOVA_VERSION=1.1 export OS_PASSWORD=$(sudo hiera admin_password) export OS_AUTH_URL=http://172.16.0.2:5000/v2.0 export OS_USERNAME=admin export OS_TENANT_NAME=admin export COMPUTE_API_VERSION=1.1 export OS_NO_CACHE=True export OS_CLOUDNAME=undercloud export OS_IMAGE_API_VERSION=1 [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ . stackrc [stack@undercloud01 ~]$ openstack service list +----------------------------------+------------+---------------+ | ID | Name | Type | +----------------------------------+------------+---------------+ | 1cd0bac05deb47a59be357ccfda7bb65 | neutron | network | | 54447f379a854dc2a87452ab77ae6856 | novav3 | computev3 | | 5832fc0897a04dfab71c5cce6e0a48df | nova | compute | | 5f8d78607b9347dbad9ae3c2e4b1ba2b | keystone | identity | | 66ade28543474f2799ac22bfc7e41303 | ironic | baremetal | | 6ad65ee3da4f415896408869a92edf28 | ceilometer | metering | | a3b3084c50a5486d9825661a7e2f4f0b | swift | object-store | | c7343174e1154f9c8ff3ff4b820c839b | glance | image | | e4121df7fa8e42e2b187ecf41863d7c3 | heat | orchestration | | f3cfb94376d840078960cfe77326215e | tuskar | management | +----------------------------------+------------+---------------+ [stack@undercloud01 ~]$ Add dns server to undercloud network # We need to modify a network subnet that is used by ironic, we need a add a dns server to the subnet.\n[stack@undercloud01 ~]$ neutron subnet-list +--------------------------------------+------+---------------+-----------------------------------------------+ | id | name | cidr | allocation_pools | +--------------------------------------+------+---------------+-----------------------------------------------+ | 34ffb0cf-4818-4a48-9596-702c654e79cb | | 172.16.0.0/24 | {\u0026#34;start\u0026#34;: \u0026#34;172.16.0.3\u0026#34;, \u0026#34;end\u0026#34;: \u0026#34;172.16.0.30\u0026#34;} | +--------------------------------------+------+---------------+-----------------------------------------------+ [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ neutron subnet-update 34ffb0cf-4818-4a48-9596-702c654e79cb --dns-nameserver 172.16.0.1 Updated subnet: 34ffb0cf-4818-4a48-9596-702c654e79cb [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ neutron subnet-show 34ffb0cf-4818-4a48-9596-702c654e79cb +-------------------+----------------------------------------------------------------+ | Field | Value | +-------------------+----------------------------------------------------------------+ | allocation_pools | {\u0026#34;start\u0026#34;: \u0026#34;172.16.0.3\u0026#34;, \u0026#34;end\u0026#34;: \u0026#34;172.16.0.30\u0026#34;} | | cidr | 172.16.0.0/24 | | dns_nameservers | 172.16.0.1 | | enable_dhcp | True | | gateway_ip | 172.16.0.1 | | host_routes | {\u0026#34;destination\u0026#34;: \u0026#34;169.254.169.254/32\u0026#34;, \u0026#34;nexthop\u0026#34;: \u0026#34;172.16.0.2\u0026#34;} | | id | 34ffb0cf-4818-4a48-9596-702c654e79cb | | ip_version | 4 | | ipv6_address_mode | | | ipv6_ra_mode | | | name | | | network_id | 0a5aaff8-df4e-49b0-a167-84231f1995e1 | | subnetpool_id | | | tenant_id | 6878ec3d47a7407eb9a829ce6f3dcded | +-------------------+----------------------------------------------------------------+ [stack@undercloud01 ~]$ Undercloud and overcloud image creation # When using cloud and OpenStack one doe snot usually install the operating system. Usually you upload base operating system images that run. Given that the Undercloud exists and it an deploy instances onto bare metal via ironic, we still need images to actually run the overcloud. There are two options, one is to download them and the other is to build them from scratch. In the interest of completeness we do the latter. We tell it what RDO distribution to use and what mirror to use. It picks up the proxy environment variables if they exist and makes use of them. Again this step can go wrong and having a local fast repo can speed up the tries. The script also can make use of a pypi mirror if available. The main command is \u0026ldquo;openstack overcloud image build - -all\u0026rdquo; which builds all the images, it takes a while to finish.\n[stack@undercloud01 ~]$ . stackrc [stack@undercloud01 ~]$ export RDO_RELEASE=\u0026#34;liberty\u0026#34; [stack@undercloud01 ~]$ export DIB_DISTRIBUTION_MIRROR=\u0026#34;http://mirror.bytemark.co.uk/centos\u0026#34; [stack@undercloud01 ~]$ export DIB_YUM_REPO_CONF=\u0026#34;/etc/yum.repos.d/rdo-release.repo\u0026#34; [stack@undercloud01 ~]$ #export PYPI_MIRROR=http://mirror/simple [stack@undercloud01 ~]$ mkdir images [stack@undercloud01 ~]$ cd images [stack@undercloud01 images]$ openstack overcloud image build --all Building elements: base centos7 ironic-agent selinux-permissive centos-cloud-repo element-manifest network-gateway epel rdo-release undercloud-package-install pip-and-virtualenv-override Expanded element dependencies to: epel network-gateway rpm-distro pip-and-virtualenv-override dib-run-parts manifests dhcp-all-interfaces selinux-permissive rdo-release source-repositories package-installs dib-python centos7 dib-init-system centos-cloud-repo install-types svc-map element-manifest base undercloud-package-install redhat-common cache-url pkg-map yum ironic-agent WARNING: Not enough RAM to use tmpfs for build. Using /var/tmp. (3882448 \u0026lt; 4G) Building in /var/tmp/image.1XTuL98i ++ export DIB_DEFAULT_INSTALLTYPE=package \u0026lt;SNIP\u0026gt; Unmount /var/tmp/image.z5keCNy7/mnt/sys Unmount /var/tmp/image.z5keCNy7/mnt/proc Unmount /var/tmp/image.z5keCNy7/mnt/dev/pts Unmount /var/tmp/image.z5keCNy7/mnt/dev Unmount /var/tmp/image.z5keCNy7/mnt /dev/loop0: [64768]:71381441 (/var/tmp/image.zlMxkoLq/image.raw) [stack@undercloud01 images]$ After which you should have these files generated:\n[stack@undercloud01 images]$ ls deploy-ramdisk-ironic.d dib-overcloud-full.log ironic-python-agent.vmlinuz deploy-ramdisk-ironic.initramfs fedora-user.qcow2 overcloud-full.d deploy-ramdisk-ironic.kernel ironic-python-agent.d overcloud-full.initrd dib-agent-ramdisk.log ironic-python-agent.initramfs overcloud-full.qcow2 dib-deploy.log ironic-python-agent.kernel overcloud-full.vmlinuz [stack@undercloud01 images]$ The next step is to upload these images into the OpenStack image storage system (Glance):\n[stack@undercloud01 images]$ openstack overcloud image upload Image \u0026#34;overcloud-full-vmlinuz\u0026#34; was uploaded. +--------------------------------------+------------------------+-------------+---------+--------+ | ID | Name | Disk Format | Size | Status | +--------------------------------------+------------------------+-------------+---------+--------+ | a7257a33-5fb5-4f9f-864f-dcd620e77fcd | overcloud-full-vmlinuz | aki | 5155536 | active | +--------------------------------------+------------------------+-------------+---------+--------+ Image \u0026#34;overcloud-full-initrd\u0026#34; was uploaded. +--------------------------------------+-----------------------+-------------+----------+--------+ | ID | Name | Disk Format | Size | Status | +--------------------------------------+-----------------------+-------------+----------+--------+ | f58ba706-57e8-41d5-8a51-5eba4a30870a | overcloud-full-initrd | ari | 38412658 | active | +--------------------------------------+-----------------------+-------------+----------+--------+ Image \u0026#34;overcloud-full\u0026#34; was uploaded. +--------------------------------------+----------------+-------------+------------+--------+ | ID | Name | Disk Format | Size | Status | +--------------------------------------+----------------+-------------+------------+--------+ | ed1f9a4a-0826-42eb-9359-2d456bbdbc01 | overcloud-full | qcow2 | 1085093888 | active | +--------------------------------------+----------------+-------------+------------+--------+ Image \u0026#34;bm-deploy-kernel\u0026#34; was uploaded. +--------------------------------------+------------------+-------------+---------+--------+ | ID | Name | Disk Format | Size | Status | +--------------------------------------+------------------+-------------+---------+--------+ | 7dee66d3-e618-4bc3-999d-e061b28182ac | bm-deploy-kernel | aki | 5155536 | active | +--------------------------------------+------------------+-------------+---------+--------+ Image \u0026#34;bm-deploy-ramdisk\u0026#34; was uploaded. +--------------------------------------+-------------------+-------------+-----------+--------+ | ID | Name | Disk Format | Size | Status | +--------------------------------------+-------------------+-------------+-----------+--------+ | d15d5608-c16b-47fd-ac8c-645604c9a3ac | bm-deploy-ramdisk | ari | 469452382 | active | +--------------------------------------+-------------------+-------------+-----------+--------+ [stack@undercloud01 images]$ Prepare for Overcloud # Undercloud can control host livbirt # We want our undercloud machine to be able to ssh to the host and start and stop the virtual overcloud machines. So we need to copy the ssh key from the undercloud machine to the host machine. Note that this key was generated for us. First we use the \u0026ldquo;ssh-copy-id\u0026rdquo; command and then we test it works with a \u0026ldquo;ssh cat\u0026rdquo; command\n[stack@undercloud01 images]$ cd [stack@undercloud01 ~]$ ssh-copy-id thomas@10.0.0.1 The authenticity of host \u0026#39;10.0.0.1 (10.0.0.1)\u0026#39; can\u0026#39;t be established. ECDSA key fingerprint is 13:92:e5:4c:c5:e2:35:ba:0d:87:d2:8a:03:41:3f:ed. Are you sure you want to continue connecting (yes/no)? yes /bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys thomas@10.0.0.1\u0026#39;s password: Number of key(s) added: 1 Now try logging into the machine, with: \u0026#34;ssh \u0026#39;thomas@10.0.0.1\u0026#39;\u0026#34; and check to make sure that only the key(s) you wanted were added. [stack@undercloud01 ~]$ ssh thomas@10.0.0.1 cat /proc/loadavg 0.85 0.77 0.53 3/633 18647 [stack@undercloud01 ~]$ After this works we can see if virsh is able to communicate with the host:\n[stack@undercloud01 ~]$ virsh -c qemu+ssh://thomas@10.0.0.1/system list --all Id Name State ---------------------------------------------------- 19 undercloud01 running - overcloud01 shut off - overcloud02 shut off - overcloud03 shut off [stack@undercloud01 ~]$ Prepare config files # The next thing we need to do is tell ironic about the hosts it has available to deploy instances to (instances that will run OpenStack). We would manually run ironic commands to add the nodes, or we can construct a json file with all the details. The first step is to find out the mac addresses of the provisioning network overcloud virtual machines and put them in a list. This can be done quickly with the following:\n[stack@undercloud01 ~]$ for i in {1..3}; do virsh -c qemu+ssh://thomas@10.0.0.1/system domiflist overcloud0$i | awk \u0026#39;$3 == \u0026#34;provisioning\u0026#34; {print $5};\u0026#39;; done \u0026gt; /tmp/nodes.txt [stack@undercloud01 ~]$ cat /tmp/nodes.txt 52:54:00:df:41:0c 52:54:00:71:76:78 52:54:00:23:94:a3 [stack@undercloud01 ~]$ The next thing is to copy and paste the following in an editor. Edit it a you see fit, ie change the username or add additional nodes. Node the shell $(foo) expansions, it\u0026rsquo;s going to be a here file.\n{ \u0026#34;ssh-user\u0026#34;: \u0026#34;thomas\u0026#34;, \u0026#34;ssh-key\u0026#34;: \u0026#34;$(cat ~/.ssh/id_rsa)\u0026#34;, \u0026#34;power_manager\u0026#34;: \u0026#34;nova.virt.baremetal.virtual_power_driver.VirtualPowerManager\u0026#34;, \u0026#34;host-ip\u0026#34;: \u0026#34;10.0.0.1\u0026#34;, \u0026#34;arch\u0026#34;: \u0026#34;x86_64\u0026#34;, \u0026#34;nodes\u0026#34;: [ { \u0026#34;pm_addr\u0026#34;: \u0026#34;10.0.0.1\u0026#34;, \u0026#34;pm_password\u0026#34;: \u0026#34;$(cat ~/.ssh/id_rsa)\u0026#34;, \u0026#34;pm_type\u0026#34;: \u0026#34;pxe_ssh\u0026#34;, \u0026#34;mac\u0026#34;: [ \u0026#34;$(sed -n 1p /tmp/nodes.txt)\u0026#34; ], \u0026#34;cpu\u0026#34;: \u0026#34;1\u0026#34;, \u0026#34;memory\u0026#34;: \u0026#34;4096\u0026#34;, \u0026#34;disk\u0026#34;: \u0026#34;40\u0026#34;, \u0026#34;arch\u0026#34;: \u0026#34;x86_64\u0026#34;, \u0026#34;pm_user\u0026#34;: \u0026#34;thomas\u0026#34; }, { \u0026#34;pm_addr\u0026#34;: \u0026#34;10.0.0.1\u0026#34;, \u0026#34;pm_password\u0026#34;: \u0026#34;$(cat ~/.ssh/id_rsa)\u0026#34;, \u0026#34;pm_type\u0026#34;: \u0026#34;pxe_ssh\u0026#34;, \u0026#34;mac\u0026#34;: [ \u0026#34;$(sed -n 2p /tmp/nodes.txt)\u0026#34; ], \u0026#34;cpu\u0026#34;: \u0026#34;1\u0026#34;, \u0026#34;memory\u0026#34;: \u0026#34;4096\u0026#34;, \u0026#34;disk\u0026#34;: \u0026#34;40\u0026#34;, \u0026#34;arch\u0026#34;: \u0026#34;x86_64\u0026#34;, \u0026#34;pm_user\u0026#34;: \u0026#34;thomas\u0026#34; }, { \u0026#34;pm_addr\u0026#34;: \u0026#34;10.0.0.1\u0026#34;, \u0026#34;pm_password\u0026#34;: \u0026#34;$(cat ~/.ssh/id_rsa)\u0026#34;, \u0026#34;pm_type\u0026#34;: \u0026#34;pxe_ssh\u0026#34;, \u0026#34;mac\u0026#34;: [ \u0026#34;$(sed -n 3p /tmp/nodes.txt)\u0026#34; ], \u0026#34;cpu\u0026#34;: \u0026#34;1\u0026#34;, \u0026#34;memory\u0026#34;: \u0026#34;4096\u0026#34;, \u0026#34;disk\u0026#34;: \u0026#34;40\u0026#34;, \u0026#34;arch\u0026#34;: \u0026#34;x86_64\u0026#34;, \u0026#34;pm_user\u0026#34;: \u0026#34;thomas\u0026#34; } ] } With the aid of jq paste it into the here file and output the processed file to instackenv.json. This expands the shell and well as checking the syntax of the original json.\n[stack@undercloud01 ~]$ jq . \u0026lt;\u0026lt; EOF \u0026gt; ~/instackenv.json \u0026gt; { \u0026gt; \u0026#34;ssh-user\u0026#34;: \u0026#34;thomas\u0026#34;, \u0026gt; \u0026#34;ssh-key\u0026#34;: \u0026#34;$(cat ~/.ssh/id_rsa)\u0026#34;, \u0026gt; \u0026#34;power_manager\u0026#34;: \u0026#34;nova.virt.baremetal.virtual_power_driver.VirtualPowerManager\u0026#34;, \u0026gt; \u0026#34;host-ip\u0026#34;: \u0026#34;10.0.0.1\u0026#34;, \u0026gt; \u0026#34;arch\u0026#34;: \u0026#34;x86_64\u0026#34;, \u0026gt; \u0026#34;nodes\u0026#34;: [ \u0026gt; { \u0026gt; \u0026#34;pm_addr\u0026#34;: \u0026#34;10.0.0.1\u0026#34;, \u0026gt; \u0026#34;pm_password\u0026#34;: \u0026#34;$(cat ~/.ssh/id_rsa)\u0026#34;, \u0026gt; \u0026#34;pm_type\u0026#34;: \u0026#34;pxe_ssh\u0026#34;, \u0026gt; \u0026#34;mac\u0026#34;: [ \u0026gt; \u0026#34;$(sed -n 1p /tmp/nodes.txt)\u0026#34; \u0026gt; ], \u0026gt; \u0026#34;cpu\u0026#34;: \u0026#34;1\u0026#34;, \u0026gt; \u0026#34;memory\u0026#34;: \u0026#34;4096\u0026#34;, \u0026gt; \u0026#34;disk\u0026#34;: \u0026#34;40\u0026#34;, \u0026gt; \u0026#34;arch\u0026#34;: \u0026#34;x86_64\u0026#34;, \u0026gt; \u0026#34;pm_user\u0026#34;: \u0026#34;thomas\u0026#34; \u0026gt; }, \u0026gt; { \u0026gt; \u0026#34;pm_addr\u0026#34;: \u0026#34;10.0.0.1\u0026#34;, \u0026gt; \u0026#34;pm_password\u0026#34;: \u0026#34;$(cat ~/.ssh/id_rsa)\u0026#34;, \u0026gt; \u0026#34;pm_type\u0026#34;: \u0026#34;pxe_ssh\u0026#34;, \u0026gt; \u0026#34;mac\u0026#34;: [ \u0026gt; \u0026#34;$(sed -n 2p /tmp/nodes.txt)\u0026#34; \u0026gt; ], \u0026gt; \u0026#34;cpu\u0026#34;: \u0026#34;1\u0026#34;, \u0026gt; \u0026#34;memory\u0026#34;: \u0026#34;4096\u0026#34;, \u0026gt; \u0026#34;disk\u0026#34;: \u0026#34;40\u0026#34;, \u0026gt; \u0026#34;arch\u0026#34;: \u0026#34;x86_64\u0026#34;, \u0026gt; \u0026#34;pm_user\u0026#34;: \u0026#34;thomas\u0026#34; \u0026gt; }, \u0026gt; { \u0026gt; \u0026#34;pm_addr\u0026#34;: \u0026#34;10.0.0.1\u0026#34;, \u0026gt; \u0026#34;pm_password\u0026#34;: \u0026#34;$(cat ~/.ssh/id_rsa)\u0026#34;, \u0026gt; \u0026#34;pm_type\u0026#34;: \u0026#34;pxe_ssh\u0026#34;, \u0026gt; \u0026#34;mac\u0026#34;: [ \u0026gt; \u0026#34;$(sed -n 3p /tmp/nodes.txt)\u0026#34; \u0026gt; ], \u0026gt; \u0026#34;cpu\u0026#34;: \u0026#34;1\u0026#34;, \u0026gt; \u0026#34;memory\u0026#34;: \u0026#34;4096\u0026#34;, \u0026gt; \u0026#34;disk\u0026#34;: \u0026#34;40\u0026#34;, \u0026gt; \u0026#34;arch\u0026#34;: \u0026#34;x86_64\u0026#34;, \u0026gt; \u0026#34;pm_user\u0026#34;: \u0026#34;thomas\u0026#34; \u0026gt; } \u0026gt; ] \u0026gt; } \u0026gt; EOF [stack@undercloud01 ~]$ Here is my resultant instackenv.json, note that the mac addresses and private keys are all in place.\n[stack@undercloud01 ~]$ cat ~/instackenv.json { \u0026#34;nodes\u0026#34;: [ { \u0026#34;pm_user\u0026#34;: \u0026#34;thomas\u0026#34;, \u0026#34;pm_addr\u0026#34;: \u0026#34;10.0.0.1\u0026#34;, \u0026#34;pm_password\u0026#34;: \u0026#34;-----BEGIN RSA PRIVATE KEY-----\\nMIIEowIBAAKCAQEAqaGcYE9HmiN2RCMevv/PWeNbglzzwWYXmSBrBDwsx/qBXTS1\\n1+qyLYJfgeMSCGoSTg9tfwt45KXX7tYy7YvG4DGcETGt57l08SiJEsE4JwOt/aNa\\nmiZR87anAhv6xzciMoUpwWW2CMIQ9x+jVjXx3h/yd4VfNqjRb9kBV6QR3Jgw2s2g\\nMsV8mKmxhpERFIWsxN69SwUHHGdd9/EDykBKgBDcLJ+AZwK4yqwgBNYXsv3fwtlU\\ndtWQIvLOIA4LshqxVlyvK+Gr1j6k+vSE2PveU+xW1ow1MNJy4fRhio13uPp5fGiw\\n2w9v15NPfQNU3uYKl814po6p1m8Dl+XM59YRyQIDAQABAoIBAQCLftFgChIx2ZO6\\nOL9iBm/31ZY9QD9b/Z7OV/BpjSquUXzsrxoTM3fPIPV1lMwRi1j+RIWhAkgqj49h\\nY1iCLH4hg+p54UbH1qUqZFFE0QxiWQ5OFHW/al/ecYgpneS+ysIelY9e8UufLChT\\ncPsbPEVoixET5OQFyRJiTixibBQcONy7p3nYAaYol3jUZYgv1gU7drcrCel6uKl4\\nGTecoGRIlw9IApHiLBjjhahyTi7Oa7xRO9TsaY+rbZRax4ko57ZGuSafzh6MmQw0\\nBIdz7JyDDOoQSqJGoNUZ1oPBLgkvig5jyNOp01BRIdzSGOhOM5L8C0vbofAlRfD/\\nG0bBRBYBAoGBANPFR9ehqGO5lE+zuGM9EKlMnS3kITXNNUn6CiwDbvLKzw6zBZLD\\nOVyaFPFt7J4r88mio6DjJVRW57rX4YaFsj2oCxPuYnJRgGBQ1u7EGjcJ0iOxZY/+\\nASaNF2Sx/enAknVFiOtv8MXaoAOSRAkch2kwrw6fCkP/tZw4qELQmcChAoGBAM0P\\nRUBgHUlPunMa3+pXadE8SqE5ruPSdU9CbrI0UPQaoGVi8bXBqiDOaeKxcWDX4gfG\\nqSy/+ch/r04a4yankrPtoV9ihmLXNz0zrImHnT2wCC6nw9J/pjxBDDvXvqeL9NjC\\n8p8+asJmu8S9ZRmLubi6OX/gEGlqILnWclxdMzgpAoGAHEb4e9uTL5XFLwtRcLbj\\ntaeMSWdv48498l3X496lfvgDw/O1p843p5zPdRl3gftedysnbEFIZ8We9b0D2UGa\\n9k6tBAFN1fP6D2JcAM/grD68d5WleR+yqaInYIO/4uma5NvfF4j//ntd6HwsZ4cO\\nscYVaf9kkIXhizWpihpunWECgYAIOqKm0LScKozq7ZsqxlNCyE6eZbg1AE8g3SOg\\nFyVghmkFaJEWoCz5oA7zv/cy0bcKZNiJKTMW7rjUQ5P2CyeB/PlK4KNP+B8JX7d+\\n1Whj/1p0tNrQ6bp8FIgvJptKEf3DbR9bcJ/MKV9Dp+4Utly/owmHrjA6ar3hd0+j\\nkUHq8QKBgGJTbCTHPdAZMli3ckbkaLO4xKCB7gvB1Apa5OVonoQHR0LfODLpM8Hk\\n0pDq/YAqjvndURIxOtZ2MXVig0WETYmlYSUz+mlg51GYZhGeIr7WxwuY/uu2tePY\\nEVLCJM0BI8Qk9d8931pVAkdRrAU4ZU8TdkkG5C6RAJA03vO69P4f\\n-----END RSA PRIVATE KEY-----\u0026#34;, \u0026#34;pm_type\u0026#34;: \u0026#34;pxe_ssh\u0026#34;, \u0026#34;mac\u0026#34;: [ \u0026#34;52:54:00:c5:25:35\u0026#34; ], \u0026#34;cpu\u0026#34;: \u0026#34;1\u0026#34;, \u0026#34;memory\u0026#34;: \u0026#34;4096\u0026#34;, \u0026#34;disk\u0026#34;: \u0026#34;40\u0026#34;, \u0026#34;arch\u0026#34;: \u0026#34;x86_64\u0026#34; }, { \u0026#34;pm_user\u0026#34;: \u0026#34;thomas\u0026#34;, \u0026#34;pm_addr\u0026#34;: \u0026#34;10.0.0.1\u0026#34;, \u0026#34;pm_password\u0026#34;: \u0026#34;-----BEGIN RSA PRIVATE KEY-----\\nMIIEowIBAAKCAQEAqaGcYE9HmiN2RCMevv/PWeNbglzzwWYXmSBrBDwsx/qBXTS1\\n1+qyLYJfgeMSCGoSTg9tfwt45KXX7tYy7YvG4DGcETGt57l08SiJEsE4JwOt/aNa\\nmiZR87anAhv6xzciMoUpwWW2CMIQ9x+jVjXx3h/yd4VfNqjRb9kBV6QR3Jgw2s2g\\nMsV8mKmxhpERFIWsxN69SwUHHGdd9/EDykBKgBDcLJ+AZwK4yqwgBNYXsv3fwtlU\\ndtWQIvLOIA4LshqxVlyvK+Gr1j6k+vSE2PveU+xW1ow1MNJy4fRhio13uPp5fGiw\\n2w9v15NPfQNU3uYKl814po6p1m8Dl+XM59YRyQIDAQABAoIBAQCLftFgChIx2ZO6\\nOL9iBm/31ZY9QD9b/Z7OV/BpjSquUXzsrxoTM3fPIPV1lMwRi1j+RIWhAkgqj49h\\nY1iCLH4hg+p54UbH1qUqZFFE0QxiWQ5OFHW/al/ecYgpneS+ysIelY9e8UufLChT\\ncPsbPEVoixET5OQFyRJiTixibBQcONy7p3nYAaYol3jUZYgv1gU7drcrCel6uKl4\\nGTecoGRIlw9IApHiLBjjhahyTi7Oa7xRO9TsaY+rbZRax4ko57ZGuSafzh6MmQw0\\nBIdz7JyDDOoQSqJGoNUZ1oPBLgkvig5jyNOp01BRIdzSGOhOM5L8C0vbofAlRfD/\\nG0bBRBYBAoGBANPFR9ehqGO5lE+zuGM9EKlMnS3kITXNNUn6CiwDbvLKzw6zBZLD\\nOVyaFPFt7J4r88mio6DjJVRW57rX4YaFsj2oCxPuYnJRgGBQ1u7EGjcJ0iOxZY/+\\nASaNF2Sx/enAknVFiOtv8MXaoAOSRAkch2kwrw6fCkP/tZw4qELQmcChAoGBAM0P\\nRUBgHUlPunMa3+pXadE8SqE5ruPSdU9CbrI0UPQaoGVi8bXBqiDOaeKxcWDX4gfG\\nqSy/+ch/r04a4yankrPtoV9ihmLXNz0zrImHnT2wCC6nw9J/pjxBDDvXvqeL9NjC\\n8p8+asJmu8S9ZRmLubi6OX/gEGlqILnWclxdMzgpAoGAHEb4e9uTL5XFLwtRcLbj\\ntaeMSWdv48498l3X496lfvgDw/O1p843p5zPdRl3gftedysnbEFIZ8We9b0D2UGa\\n9k6tBAFN1fP6D2JcAM/grD68d5WleR+yqaInYIO/4uma5NvfF4j//ntd6HwsZ4cO\\nscYVaf9kkIXhizWpihpunWECgYAIOqKm0LScKozq7ZsqxlNCyE6eZbg1AE8g3SOg\\nFyVghmkFaJEWoCz5oA7zv/cy0bcKZNiJKTMW7rjUQ5P2CyeB/PlK4KNP+B8JX7d+\\n1Whj/1p0tNrQ6bp8FIgvJptKEf3DbR9bcJ/MKV9Dp+4Utly/owmHrjA6ar3hd0+j\\nkUHq8QKBgGJTbCTHPdAZMli3ckbkaLO4xKCB7gvB1Apa5OVonoQHR0LfODLpM8Hk\\n0pDq/YAqjvndURIxOtZ2MXVig0WETYmlYSUz+mlg51GYZhGeIr7WxwuY/uu2tePY\\nEVLCJM0BI8Qk9d8931pVAkdRrAU4ZU8TdkkG5C6RAJA03vO69P4f\\n-----END RSA PRIVATE KEY-----\u0026#34;, \u0026#34;pm_type\u0026#34;: \u0026#34;pxe_ssh\u0026#34;, \u0026#34;mac\u0026#34;: [ \u0026#34;52:54:00:16:c6:2b\u0026#34; ], \u0026#34;cpu\u0026#34;: \u0026#34;1\u0026#34;, \u0026#34;memory\u0026#34;: \u0026#34;4096\u0026#34;, \u0026#34;disk\u0026#34;: \u0026#34;40\u0026#34;, \u0026#34;arch\u0026#34;: \u0026#34;x86_64\u0026#34; }, { \u0026#34;pm_user\u0026#34;: \u0026#34;thomas\u0026#34;, \u0026#34;pm_addr\u0026#34;: \u0026#34;10.0.0.1\u0026#34;, \u0026#34;pm_password\u0026#34;: \u0026#34;-----BEGIN RSA PRIVATE KEY-----\\nMIIEowIBAAKCAQEAqaGcYE9HmiN2RCMevv/PWeNbglzzwWYXmSBrBDwsx/qBXTS1\\n1+qyLYJfgeMSCGoSTg9tfwt45KXX7tYy7YvG4DGcETGt57l08SiJEsE4JwOt/aNa\\nmiZR87anAhv6xzciMoUpwWW2CMIQ9x+jVjXx3h/yd4VfNqjRb9kBV6QR3Jgw2s2g\\nMsV8mKmxhpERFIWsxN69SwUHHGdd9/EDykBKgBDcLJ+AZwK4yqwgBNYXsv3fwtlU\\ndtWQIvLOIA4LshqxVlyvK+Gr1j6k+vSE2PveU+xW1ow1MNJy4fRhio13uPp5fGiw\\n2w9v15NPfQNU3uYKl814po6p1m8Dl+XM59YRyQIDAQABAoIBAQCLftFgChIx2ZO6\\nOL9iBm/31ZY9QD9b/Z7OV/BpjSquUXzsrxoTM3fPIPV1lMwRi1j+RIWhAkgqj49h\\nY1iCLH4hg+p54UbH1qUqZFFE0QxiWQ5OFHW/al/ecYgpneS+ysIelY9e8UufLChT\\ncPsbPEVoixET5OQFyRJiTixibBQcONy7p3nYAaYol3jUZYgv1gU7drcrCel6uKl4\\nGTecoGRIlw9IApHiLBjjhahyTi7Oa7xRO9TsaY+rbZRax4ko57ZGuSafzh6MmQw0\\nBIdz7JyDDOoQSqJGoNUZ1oPBLgkvig5jyNOp01BRIdzSGOhOM5L8C0vbofAlRfD/\\nG0bBRBYBAoGBANPFR9ehqGO5lE+zuGM9EKlMnS3kITXNNUn6CiwDbvLKzw6zBZLD\\nOVyaFPFt7J4r88mio6DjJVRW57rX4YaFsj2oCxPuYnJRgGBQ1u7EGjcJ0iOxZY/+\\nASaNF2Sx/enAknVFiOtv8MXaoAOSRAkch2kwrw6fCkP/tZw4qELQmcChAoGBAM0P\\nRUBgHUlPunMa3+pXadE8SqE5ruPSdU9CbrI0UPQaoGVi8bXBqiDOaeKxcWDX4gfG\\nqSy/+ch/r04a4yankrPtoV9ihmLXNz0zrImHnT2wCC6nw9J/pjxBDDvXvqeL9NjC\\n8p8+asJmu8S9ZRmLubi6OX/gEGlqILnWclxdMzgpAoGAHEb4e9uTL5XFLwtRcLbj\\ntaeMSWdv48498l3X496lfvgDw/O1p843p5zPdRl3gftedysnbEFIZ8We9b0D2UGa\\n9k6tBAFN1fP6D2JcAM/grD68d5WleR+yqaInYIO/4uma5NvfF4j//ntd6HwsZ4cO\\nscYVaf9kkIXhizWpihpunWECgYAIOqKm0LScKozq7ZsqxlNCyE6eZbg1AE8g3SOg\\nFyVghmkFaJEWoCz5oA7zv/cy0bcKZNiJKTMW7rjUQ5P2CyeB/PlK4KNP+B8JX7d+\\n1Whj/1p0tNrQ6bp8FIgvJptKEf3DbR9bcJ/MKV9Dp+4Utly/owmHrjA6ar3hd0+j\\nkUHq8QKBgGJTbCTHPdAZMli3ckbkaLO4xKCB7gvB1Apa5OVonoQHR0LfODLpM8Hk\\n0pDq/YAqjvndURIxOtZ2MXVig0WETYmlYSUz+mlg51GYZhGeIr7WxwuY/uu2tePY\\nEVLCJM0BI8Qk9d8931pVAkdRrAU4ZU8TdkkG5C6RAJA03vO69P4f\\n-----END RSA PRIVATE KEY-----\u0026#34;, \u0026#34;pm_type\u0026#34;: \u0026#34;pxe_ssh\u0026#34;, \u0026#34;mac\u0026#34;: [ \u0026#34;52:54:00:ef:83:9e\u0026#34; ], \u0026#34;cpu\u0026#34;: \u0026#34;1\u0026#34;, \u0026#34;memory\u0026#34;: \u0026#34;4096\u0026#34;, \u0026#34;disk\u0026#34;: \u0026#34;40\u0026#34;, \u0026#34;arch\u0026#34;: \u0026#34;x86_64\u0026#34; } ], \u0026#34;arch\u0026#34;: \u0026#34;x86_64\u0026#34;, \u0026#34;host-ip\u0026#34;: \u0026#34;10.0.0.1\u0026#34;, \u0026#34;power_manager\u0026#34;: \u0026#34;nova.virt.baremetal.virtual_power_driver.VirtualPowerManager\u0026#34;, \u0026#34;ssh-key\u0026#34;: \u0026#34;-----BEGIN RSA PRIVATE KEY-----\\nMIIEowIBAAKCAQEAqaGcYE9HmiN2RCMevv/PWeNbglzzwWYXmSBrBDwsx/qBXTS1\\n1+qyLYJfgeMSCGoSTg9tfwt45KXX7tYy7YvG4DGcETGt57l08SiJEsE4JwOt/aNa\\nmiZR87anAhv6xzciMoUpwWW2CMIQ9x+jVjXx3h/yd4VfNqjRb9kBV6QR3Jgw2s2g\\nMsV8mKmxhpERFIWsxN69SwUHHGdd9/EDykBKgBDcLJ+AZwK4yqwgBNYXsv3fwtlU\\ndtWQIvLOIA4LshqxVlyvK+Gr1j6k+vSE2PveU+xW1ow1MNJy4fRhio13uPp5fGiw\\n2w9v15NPfQNU3uYKl814po6p1m8Dl+XM59YRyQIDAQABAoIBAQCLftFgChIx2ZO6\\nOL9iBm/31ZY9QD9b/Z7OV/BpjSquUXzsrxoTM3fPIPV1lMwRi1j+RIWhAkgqj49h\\nY1iCLH4hg+p54UbH1qUqZFFE0QxiWQ5OFHW/al/ecYgpneS+ysIelY9e8UufLChT\\ncPsbPEVoixET5OQFyRJiTixibBQcONy7p3nYAaYol3jUZYgv1gU7drcrCel6uKl4\\nGTecoGRIlw9IApHiLBjjhahyTi7Oa7xRO9TsaY+rbZRax4ko57ZGuSafzh6MmQw0\\nBIdz7JyDDOoQSqJGoNUZ1oPBLgkvig5jyNOp01BRIdzSGOhOM5L8C0vbofAlRfD/\\nG0bBRBYBAoGBANPFR9ehqGO5lE+zuGM9EKlMnS3kITXNNUn6CiwDbvLKzw6zBZLD\\nOVyaFPFt7J4r88mio6DjJVRW57rX4YaFsj2oCxPuYnJRgGBQ1u7EGjcJ0iOxZY/+\\nASaNF2Sx/enAknVFiOtv8MXaoAOSRAkch2kwrw6fCkP/tZw4qELQmcChAoGBAM0P\\nRUBgHUlPunMa3+pXadE8SqE5ruPSdU9CbrI0UPQaoGVi8bXBqiDOaeKxcWDX4gfG\\nqSy/+ch/r04a4yankrPtoV9ihmLXNz0zrImHnT2wCC6nw9J/pjxBDDvXvqeL9NjC\\n8p8+asJmu8S9ZRmLubi6OX/gEGlqILnWclxdMzgpAoGAHEb4e9uTL5XFLwtRcLbj\\ntaeMSWdv48498l3X496lfvgDw/O1p843p5zPdRl3gftedysnbEFIZ8We9b0D2UGa\\n9k6tBAFN1fP6D2JcAM/grD68d5WleR+yqaInYIO/4uma5NvfF4j//ntd6HwsZ4cO\\nscYVaf9kkIXhizWpihpunWECgYAIOqKm0LScKozq7ZsqxlNCyE6eZbg1AE8g3SOg\\nFyVghmkFaJEWoCz5oA7zv/cy0bcKZNiJKTMW7rjUQ5P2CyeB/PlK4KNP+B8JX7d+\\n1Whj/1p0tNrQ6bp8FIgvJptKEf3DbR9bcJ/MKV9Dp+4Utly/owmHrjA6ar3hd0+j\\nkUHq8QKBgGJTbCTHPdAZMli3ckbkaLO4xKCB7gvB1Apa5OVonoQHR0LfODLpM8Hk\\n0pDq/YAqjvndURIxOtZ2MXVig0WETYmlYSUz+mlg51GYZhGeIr7WxwuY/uu2tePY\\nEVLCJM0BI8Qk9d8931pVAkdRrAU4ZU8TdkkG5C6RAJA03vO69P4f\\n-----END RSA PRIVATE KEY-----\u0026#34;, \u0026#34;ssh-user\u0026#34;: \u0026#34;thomas\u0026#34; } [stack@undercloud01 ~]$ While jq gave us valid json (ie valid syntax) it didn\u0026rsquo;t do much else. This small utility can give the instackenv.json a check to make sure it\u0026rsquo;s valid. download and run it as follows:\n[stack@undercloud01 ~]$ curl -O https://raw.githubusercontent.com/rthallisey/clapper/master/instackenv-validator.py % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 3182 100 3182 0 0 6772 0 --:--:-- --:--:-- --:--:-- 6784 [stack@undercloud01 ~]$ python instackenv-validator.py -f instackenv.json INFO:__main__:Checking node 10.0.0.1 DEBUG:__main__:Identified virtual node INFO:__main__:Checking node 10.0.0.1 DEBUG:__main__:Identified virtual node INFO:__main__:Checking node 10.0.0.1 DEBUG:__main__:Identified virtual node DEBUG:__main__:Baremetal IPs are all unique. DEBUG:__main__:MAC addresses are all unique. -------------------- SUCCESS: instackenv validator found 0 errors [stack@undercloud01 ~]$ Tell the undercloud about our hosts # Now that we have the file constructed. We can start working. First source the stackrc file to get some credentials to work with. We can then ask ironic for a node-list, not surprisingly there are node listed:\n[stack@undercloud01 ~]$ . stackrc [stack@undercloud01 ~]$ ironic node-list +------+------+---------------+-------------+--------------------+-------------+ | UUID | Name | Instance UUID | Power State | Provisioning State | Maintenance | +------+------+---------------+-------------+--------------------+-------------+ +------+------+---------------+-------------+--------------------+-------------+ [stack@undercloud01 ~]$ We then import the JSON file and we find that the \u0026ldquo;ironic node-list\u0026rdquo; now shows details about our nodes:\n[stack@undercloud01 ~]$ openstack baremetal import --json instackenv.json [stack@undercloud01 ~]$ ironic node-list +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | UUID | Name | Instance UUID | Power State | Provisioning State | Maintenance | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | aa65e1af-7244-44bb-8188-8b7506e2cff3 | None | None | power off | available | False | | a93b47e9-b0f3-4e14-8c0e-2deb486efd9e | None | None | power off | available | False | | 79dd9abe-ce2f-49e9-a8d5-3d57deb6cda8 | None | None | power off | available | False | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ [stack@undercloud01 ~]$ Next we well OpenStack that we want to configure these machines to boot. I think this sets there boot image to the bare metal hardware discovery image.\n[stack@undercloud01 ~]$ openstack baremetal configure boot We can also inspect further information about the nodes:\n[stack@undercloud01 ~]$ ironic node-port-list aa65e1af-7244-44bb-8188-8b7506e2cff3 +--------------------------------------+-------------------+ | UUID | Address | +--------------------------------------+-------------------+ | 5e01045e-0d45-4dd9-b5a0-9d4f8998625e | 52:54:00:c5:25:35 | +--------------------------------------+-------------------+ [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ ironic node-show aa65e1af-7244-44bb-8188-8b7506e2cff3 | grep -A1 deploy | driver_info | {u\u0026#39;ssh_username\u0026#39;: u\u0026#39;thomas\u0026#39;, u\u0026#39;deploy_kernel\u0026#39;: u\u0026#39;7dee66d3-e618-4bc3 | | | -999d-e061b28182ac\u0026#39;, u\u0026#39;deploy_ramdisk\u0026#39;: u\u0026#39;d15d5608-c16b-47fd-ac8c- | | | 645604c9a3ac\u0026#39;, u\u0026#39;ssh_key_contents\u0026#39;: u\u0026#39;-----BEGIN RSA PRIVATE KEY----- | [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ openstack image show 7dee66d3-e618-4bc3-999d-e061b28182ac +------------------+--------------------------------------+ | Field | Value | +------------------+--------------------------------------+ | checksum | 3d320f249358a8a414be0e365abad03a | | container_format | aki | | created_at | 2016-02-17T21:58:31.000000 | | deleted | False | | disk_format | aki | | id | 7dee66d3-e618-4bc3-999d-e061b28182ac | | is_public | True | | min_disk | 0 | | min_ram | 0 | | name | bm-deploy-kernel | | owner | 6878ec3d47a7407eb9a829ce6f3dcded | | properties | | | protected | False | | size | 5155536 | | status | active | | updated_at | 2016-02-17T21:58:31.000000 | +------------------+--------------------------------------+ [stack@undercloud01 ~]$ openstack image show d15d5608-c16b-47fd-ac8c-645604c9a3ac +------------------+--------------------------------------+ | Field | Value | +------------------+--------------------------------------+ | checksum | e2036fa875dc474a27e6d9617bf7df54 | | container_format | ari | | created_at | 2016-02-17T21:58:32.000000 | | deleted | False | | disk_format | ari | | id | d15d5608-c16b-47fd-ac8c-645604c9a3ac | | is_public | True | | min_disk | 0 | | min_ram | 0 | | name | bm-deploy-ramdisk | | owner | 6878ec3d47a7407eb9a829ce6f3dcded | | properties | | | protected | False | | size | 469452382 | | status | active | | updated_at | 2016-02-17T21:58:37.000000 | +------------------+--------------------------------------+ [stack@undercloud01 ~]$ Inspect single node # The next step to match the real world is for ironic to boot each machine with a special image that reports back the hardware specs of each node. It collects the RAM, disk, CPU and probably more. It can be configured to collect extra information. This would match the real life example where you have a bunch of hardware and the nodes with extra ram are for Nova or the node with extra NICS are for dedicated Neutron. Lastly on we define the link between the hardware specs, the flavours that may match the hardware and the links between the compute flavor and the compute install.\nWe start in the above state and we tell ironic to change the status of one node to be manageable. Then we tell it to start this discover process which OpenStack calls introspection.\n[stack@undercloud01 ~]$ ironic node-list +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | UUID | Name | Instance UUID | Power State | Provisioning State | Maintenance | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | aa65e1af-7244-44bb-8188-8b7506e2cff3 | None | None | power off | available | False | | a93b47e9-b0f3-4e14-8c0e-2deb486efd9e | None | None | power off | available | False | | 79dd9abe-ce2f-49e9-a8d5-3d57deb6cda8 | None | None | power off | available | False | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ [stack@undercloud01 ~]$ ironic node-set-provision-state aa65e1af-7244-44bb-8188-8b7506e2cff3 manage [stack@undercloud01 ~]$ openstack baremetal introspection start aa65e1af-7244-44bb-8188-8b7506e2cff3 If everything has working we can see that it\u0026rsquo;s turned on one node. We can even look at that virtual machines console to see what\u0026rsquo;s going on. When that machine has successfully booted and introspected itself and reported back it shuts down. We can see all this in the below repeated commands.\n[stack@undercloud01 ~]$ ironic node-list +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | UUID | Name | Instance UUID | Power State | Provisioning State | Maintenance | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | aa65e1af-7244-44bb-8188-8b7506e2cff3 | None | None | power on | manageable | False | | a93b47e9-b0f3-4e14-8c0e-2deb486efd9e | None | None | power off | available | False | | 79dd9abe-ce2f-49e9-a8d5-3d57deb6cda8 | None | None | power off | available | False | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ [stack@undercloud01 ~]$ ironic node-list +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | UUID | Name | Instance UUID | Power State | Provisioning State | Maintenance | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | aa65e1af-7244-44bb-8188-8b7506e2cff3 | None | None | power on | manageable | False | | a93b47e9-b0f3-4e14-8c0e-2deb486efd9e | None | None | power off | available | False | | 79dd9abe-ce2f-49e9-a8d5-3d57deb6cda8 | None | None | power off | available | False | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ [stack@undercloud01 ~]$ ironic node-list +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | UUID | Name | Instance UUID | Power State | Provisioning State | Maintenance | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | aa65e1af-7244-44bb-8188-8b7506e2cff3 | None | None | power off | manageable | False | | a93b47e9-b0f3-4e14-8c0e-2deb486efd9e | None | None | power off | available | False | | 79dd9abe-ce2f-49e9-a8d5-3d57deb6cda8 | None | None | power off | available | False | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ [stack@undercloud01 ~]$ Then we change the provisioning state back to available with following command:\n[stack@undercloud01 ~]$ ironic node-set-provision-state aa65e1af-7244-44bb-8188-8b7506e2cff3 provide [stack@undercloud01 ~]$ ironic node-list +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | UUID | Name | Instance UUID | Power State | Provisioning State | Maintenance | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | aa65e1af-7244-44bb-8188-8b7506e2cff3 | None | None | power off | available | False | | a93b47e9-b0f3-4e14-8c0e-2deb486efd9e | None | None | power off | available | False | | 79dd9abe-ce2f-49e9-a8d5-3d57deb6cda8 | None | None | power off | available | False | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ [stack@undercloud01 ~]$ Bulk inspect # The above is good for testing a single node, be it virtual or physical. It\u0026rsquo;s good to test the process and get it working. However doing the above for tens of hundreds of nodes would be tedious. Fortunately there is a way to just do them all! It\u0026rsquo;s quite fun to watch with virt-manager.\n[stack@undercloud01 ~]$ openstack baremetal introspection bulk start Setting nodes for introspection to manageable... Starting introspection of node: aa65e1af-7244-44bb-8188-8b7506e2cff3 Starting introspection of node: a93b47e9-b0f3-4e14-8c0e-2deb486efd9e Starting introspection of node: 79dd9abe-ce2f-49e9-a8d5-3d57deb6cda8 Waiting for introspection to finish... Introspection for UUID aa65e1af-7244-44bb-8188-8b7506e2cff3 finished successfully. Introspection for UUID a93b47e9-b0f3-4e14-8c0e-2deb486efd9e finished successfully. Introspection for UUID 79dd9abe-ce2f-49e9-a8d5-3d57deb6cda8 finished successfully. Setting manageable nodes to available... Node aa65e1af-7244-44bb-8188-8b7506e2cff3 has been set to available. Node a93b47e9-b0f3-4e14-8c0e-2deb486efd9e has been set to available. Node 79dd9abe-ce2f-49e9-a8d5-3d57deb6cda8 has been set to available. Introspection completed. [stack@undercloud01 ~]$ ironic node-list +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | UUID | Name | Instance UUID | Power State | Provisioning State | Maintenance | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | aa65e1af-7244-44bb-8188-8b7506e2cff3 | None | None | power off | available | False | | a93b47e9-b0f3-4e14-8c0e-2deb486efd9e | None | None | power off | available | False | | 79dd9abe-ce2f-49e9-a8d5-3d57deb6cda8 | None | None | power off | available | False | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ [stack@undercloud01 ~]$ Inspection logging # Now if everything does not start working immediately don\u0026rsquo;t fear. Start with looking at the logs on the undercloud machine, something like this while the machines boot can pick up some problems.\n[stack@undercloud01 ~]$ sudo journalctl -f -l -u openstack-ironic-inspector -u openstack-ironic-discoverd-dnsmasq -f This is an example of when the MAC address is not correct, ie the machine has booted and expects to find a MAC but it can\u0026rsquo;t. Thus it fails, this could be some other production machine with valuable data on!\nFeb 22 14:24:25 undercloud01 ironic-inspector[25852]: 2016-02-22 14:24:25.017 25852 INFO ironic_inspector.plugins.standard [-] PXE boot interface was 52:54:00:e2:70:6f Feb 22 14:24:25 undercloud01 ironic-inspector[25852]: Look up error: Could not find a node for attributes {\u0026#39;bmc_address\u0026#39;: u\u0026#39;\u0026#39;, \u0026#39;mac\u0026#39;: [u\u0026#39;52:54:00:e2:70:6f\u0026#39;]} Inspection issues on Centos # When I ran the installation the overcloud virtual machines pxe booted fine. However when I re-ran the installation on faster hardware running CentOS7 I had issues with the hosts not booting or booting with and having issues with MAC address detection. Fortunately this seems to be a known bug. I can only a assume it\u0026rsquo;s related to the ipxe package in CentOS7. There is a work around that modifies the .ipxe files in /httpboot:\nfind /httpboot/ -type f ! -iname \u0026#34;kernel\u0026#34; ! -iname \u0026#34;ramdisk\u0026#34; ! -iname \u0026#34;*.kernel\u0026#34; ! -iname \u0026#34;*.ramdisk\u0026#34; -exec sed -i \u0026#39;s|{mac|{net0/mac|g\u0026#39; {} +; This results in the following changes:\n[stack@undercloud01 ~]$ diff -u /httpboot/inspector.ipxe.orig /httpboot/inspector.ipxe --- /httpboot/inspector.ipxe.orig\t2016-02-22 14:30:42.577000000 +0000 +++ /httpboot/inspector.ipxe\t2016-02-22 14:31:34.835000000 +0000 @@ -2,6 +2,6 @@ dhcp -kernel http://172.16.0.2:8088/agent.kernel ipa-inspection-callback-url=http://172.16.0.2:5050/v1/continue ipa-inspection-collectors=default,logs systemd.journald.forward_to_console=yes BOOTIF=${mac} +kernel http://172.16.0.2:8088/agent.kernel ipa-inspection-callback-url=http://172.16.0.2:5050/v1/continue ipa-inspection-collectors=default,logs systemd.journald.forward_to_console=yes BOOTIF=${net0/mac} initrd http://172.16.0.2:8088/agent.ramdisk boot [stack@undercloud01 ~]$ Delete ironic nodes if they are re-created # If all goes wrong and you need to start from scratch you don\u0026rsquo;t need to rebuild the undercloud you can easily delete the ironic hosts and start again.\n[stack@undercloud01 ~]$ ironic node-list +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | UUID | Name | Instance UUID | Power State | Provisioning State | Maintenance | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | dbd1b670-6001-4545-8260-66ee2faab97f | None | None | power off | available | False | | 7c7e61fe-43d7-4202-a182-358b87e338cd | None | None | power off | available | False | | e0aa0867-4e81-452e-a548-bf4c071936f9 | None | None | power off | available | False | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ ironic node-delete dbd1b670-6001-4545-8260-66ee2faab97f Deleted node dbd1b670-6001-4545-8260-66ee2faab97f [stack@undercloud01 ~]$ ironic node-delete 7c7e61fe-43d7-4202-a182-358b87e338cd Deleted node 7c7e61fe-43d7-4202-a182-358b87e338cd [stack@undercloud01 ~]$ ironic node-delete e0aa0867-4e81-452e-a548-bf4c071936f9 Deleted node e0aa0867-4e81-452e-a548-bf4c071936f9 [stack@undercloud01 ~]$ ironic node-list +------+------+---------------+-------------+--------------------+-------------+ | UUID | Name | Instance UUID | Power State | Provisioning State | Maintenance | +------+------+---------------+-------------+--------------------+-------------+ +------+------+---------------+-------------+--------------------+-------------+ [stack@undercloud01 ~]$ Add flavors # The next thing to do is create the OpenStack nova flavors that will run the over cloud. We create each one with a ram, cpu count, swap, arch and a profile or either control or compute. Later versions of OpenStack may do this for you. Presumably this should be changed for real hardware where compute nodes might have more CPUs than controllers. These commands will create all the required favors:\nopenstack flavor create --id auto --ram 4096 --disk 40 --vcpus 1 --swap 2048 control openstack flavor set --property \u0026#34;cpu_arch\u0026#34;=\u0026#34;x86_64\u0026#34; --property \u0026#34;capabilities:boot_option\u0026#34;=\u0026#34;local\u0026#34; --property \u0026#34;capabilities:profile\u0026#34;=\u0026#34;control\u0026#34; control openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 1 --swap 2048 compute openstack flavor set --property \u0026#34;cpu_arch\u0026#34;=\u0026#34;x86_64\u0026#34; --property \u0026#34;capabilities:boot_option\u0026#34;=\u0026#34;local\u0026#34; --property \u0026#34;capabilities:profile\u0026#34;=\u0026#34;compute\u0026#34; compute openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 1 baremetal openstack flavor set --property \u0026#34;cpu_arch\u0026#34;=\u0026#34;x86_64\u0026#34; --property \u0026#34;capabilities:boot_option\u0026#34;=\u0026#34;local\u0026#34; baremetal The output looks like:\n[stack@undercloud01 ~]$ openstack flavor list [stack@undercloud01 ~]$ openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 1 --swap 2048 control +----------------------------+--------------------------------------+ | Field | Value | +----------------------------+--------------------------------------+ | OS-FLV-DISABLED:disabled | False | | OS-FLV-EXT-DATA:ephemeral | 0 | | disk | 40 | | id | 79de6690-b30a-486d-b1c6-05e22795155c | | name | control | | os-flavor-access:is_public | True | | ram | 4096 | | rxtx_factor | 1.0 | | swap | 2048 | | vcpus | 1 | +----------------------------+--------------------------------------+ [stack@undercloud01 ~]$ openstack flavor set --property \u0026#34;cpu_arch\u0026#34;=\u0026#34;x86_64\u0026#34; --property \u0026#34;capabilities:boot_option\u0026#34;=\u0026#34;local\u0026#34; --property \u0026#34;capabilities:profile\u0026#34;=\u0026#34;control\u0026#34; control +----------------------------+-------------------------------------------------------------------------------------+ | Field | Value | +----------------------------+-------------------------------------------------------------------------------------+ | OS-FLV-DISABLED:disabled | False | | OS-FLV-EXT-DATA:ephemeral | 0 | | disk | 40 | | id | 79de6690-b30a-486d-b1c6-05e22795155c | | name | control | | os-flavor-access:is_public | True | | properties | capabilities:boot_option=\u0026#39;local\u0026#39;, capabilities:profile=\u0026#39;control\u0026#39;, cpu_arch=\u0026#39;x86_64\u0026#39; | | ram | 4096 | | rxtx_factor | 1.0 | | swap | 2048 | | vcpus | 1 | +----------------------------+-------------------------------------------------------------------------------------+ [stack@undercloud01 ~]$ openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 1 --swap 2048 compute +----------------------------+--------------------------------------+ | Field | Value | +----------------------------+--------------------------------------+ | OS-FLV-DISABLED:disabled | False | | OS-FLV-EXT-DATA:ephemeral | 0 | | disk | 40 | | id | c90b9f5a-fcad-40fb-92d7-8a2f8fb22d41 | | name | compute | | os-flavor-access:is_public | True | | ram | 4096 | | rxtx_factor | 1.0 | | swap | 2048 | | vcpus | 1 | +----------------------------+--------------------------------------+ [stack@undercloud01 ~]$ openstack flavor set --property \u0026#34;cpu_arch\u0026#34;=\u0026#34;x86_64\u0026#34; --property \u0026#34;capabilities:boot_option\u0026#34;=\u0026#34;local\u0026#34; --property \u0026#34;capabilities:profile\u0026#34;=\u0026#34;compute\u0026#34; compute +----------------------------+-------------------------------------------------------------------------------------+ | Field | Value | +----------------------------+-------------------------------------------------------------------------------------+ | OS-FLV-DISABLED:disabled | False | | OS-FLV-EXT-DATA:ephemeral | 0 | | disk | 40 | | id | c90b9f5a-fcad-40fb-92d7-8a2f8fb22d41 | | name | compute | | os-flavor-access:is_public | True | | properties | capabilities:boot_option=\u0026#39;local\u0026#39;, capabilities:profile=\u0026#39;compute\u0026#39;, cpu_arch=\u0026#39;x86_64\u0026#39; | | ram | 4096 | | rxtx_factor | 1.0 | | swap | 2048 | | vcpus | 1 | +----------------------------+-------------------------------------------------------------------------------------+ [stack@undercloud01 ~]$ openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 1 baremetal +----------------------------+--------------------------------------+ | Field | Value | +----------------------------+--------------------------------------+ | OS-FLV-DISABLED:disabled | False | | OS-FLV-EXT-DATA:ephemeral | 0 | | disk | 40 | | id | 18ca7355-f3b2-433f-a00e-a0bf4c0247ad | | name | baremetal | | os-flavor-access:is_public | True | | ram | 4096 | | rxtx_factor | 1.0 | | swap | | | vcpus | 1 | +----------------------------+--------------------------------------+ [stack@undercloud01 ~]$ openstack flavor set --property \u0026#34;cpu_arch\u0026#34;=\u0026#34;x86_64\u0026#34; --property \u0026#34;capabilities:boot_option\u0026#34;=\u0026#34;local\u0026#34; baremetal +----------------------------+-----------------------------------------------------+ | Field | Value | +----------------------------+-----------------------------------------------------+ | OS-FLV-DISABLED:disabled | False | | OS-FLV-EXT-DATA:ephemeral | 0 | | disk | 40 | | id | 18ca7355-f3b2-433f-a00e-a0bf4c0247ad | | name | baremetal | | os-flavor-access:is_public | True | | properties | capabilities:boot_option=\u0026#39;local\u0026#39;, cpu_arch=\u0026#39;x86_64\u0026#39; | | ram | 4096 | | rxtx_factor | 1.0 | | swap | | | vcpus | 1 | +----------------------------+-----------------------------------------------------+ [stack@undercloud01 ~]$ openstack flavor list +--------------------------------------+-----------+------+------+-----------+-------+-----------+ | ID | Name | RAM | Disk | Ephemeral | VCPUs | Is Public | +--------------------------------------+-----------+------+------+-----------+-------+-----------+ | 18ca7355-f3b2-433f-a00e-a0bf4c0247ad | baremetal | 4096 | 40 | 0 | 1 | True | | 79de6690-b30a-486d-b1c6-05e22795155c | control | 4096 | 40 | 0 | 1 | True | | c90b9f5a-fcad-40fb-92d7-8a2f8fb22d41 | compute | 4096 | 40 | 0 | 1 | True | +--------------------------------------+-----------+------+------+-----------+-------+-----------+ [stack@undercloud01 ~]$ Ironic profiles # Next we give real hints as to what we want the hard ware to do. Well tell ironic that certain hosts are controllers and certain hosts are compute. For this virtual setup it does not make too much sense as all the specs are the same, however for a real deployment you would want to control which hosts would be controllers, compute, neutron, ceph, neutron, etc. We do this with the following commands:\nironic node-update {UUID} add properties/capabilities=\u0026#39;profile:control,boot_option:local\u0026#39; ironic node-update {UUID} add properties/capabilities=\u0026#39;profile:compute,boot_option:local\u0026#39; The output will look like:\n[stack@undercloud01 ~]$ ironic node-list +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | UUID | Name | Instance UUID | Power State | Provisioning State | Maintenance | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ | aa65e1af-7244-44bb-8188-8b7506e2cff3 | None | None | power off | available | False | | a93b47e9-b0f3-4e14-8c0e-2deb486efd9e | None | None | power off | available | False | | 79dd9abe-ce2f-49e9-a8d5-3d57deb6cda8 | None | None | power off | available | False | +--------------------------------------+------+---------------+-------------+--------------------+-------------+ [stack@undercloud01 ~]$ ironic node-update aa65e1af-7244-44bb-8188-8b7506e2cff3 add properties/capabilities=\u0026#39;profile:control,boot_option:local\u0026#39; +------------------------+-----------------------------------------------------------------------+ | Property | Value | +------------------------+-----------------------------------------------------------------------+ | target_power_state | None | | extra | {} | | last_error | None | | updated_at | 2016-02-22T12:31:22+00:00 | | maintenance_reason | None | | provision_state | available | | clean_step | {} | | uuid | aa65e1af-7244-44bb-8188-8b7506e2cff3 | | console_enabled | False | | target_provision_state | None | | provision_updated_at | 2016-02-22T12:31:22+00:00 | | maintenance | False | | inspection_started_at | None | | inspection_finished_at | None | | power_state | power off | | driver | pxe_ssh | | reservation | None | | properties | {u\u0026#39;memory_mb\u0026#39;: u\u0026#39;4096\u0026#39;, u\u0026#39;cpu_arch\u0026#39;: u\u0026#39;x86_64\u0026#39;, u\u0026#39;local_gb\u0026#39;: u\u0026#39;39\u0026#39;, | | | u\u0026#39;cpus\u0026#39;: u\u0026#39;1\u0026#39;, u\u0026#39;capabilities\u0026#39;: u\u0026#39;profile:control,boot_option:local\u0026#39;} | | instance_uuid | None | | name | None | | driver_info | {u\u0026#39;ssh_username\u0026#39;: u\u0026#39;thomas\u0026#39;, u\u0026#39;deploy_kernel\u0026#39;: u\u0026#39;7dee66d3-e618-4bc3 | | | -999d-e061b28182ac\u0026#39;, u\u0026#39;deploy_ramdisk\u0026#39;: u\u0026#39;d15d5608-c16b-47fd-ac8c- | | | 645604c9a3ac\u0026#39;, u\u0026#39;ssh_key_contents\u0026#39;: u\u0026#39;-----BEGIN RSA PRIVATE KEY----- | | | M | | | IIEowIBAAKCAQEAqaGcYE9HmiN2RCMevv/PWeNbglzzwWYXmSBrBDwsx/qBXTS1 | | | 1+qyLYJ | | | fgeMSCGoSTg9tfwt45KXX7tYy7YvG4DGcETGt57l08SiJEsE4JwOt/aNa | | | miZR87anAhv6x | | | zciMoUpwWW2CMIQ9x+jVjXx3h/yd4VfNqjRb9kBV6QR3Jgw2s2g | | | MsV8mKmxhpERFIWsxN6 | | | 9SwUHHGdd9/EDykBKgBDcLJ+AZwK4yqwgBNYXsv3fwtlU | | | dtWQIvLOIA4LshqxVlyvK+Gr1 | | | j6k+vSE2PveU+xW1ow1MNJy4fRhio13uPp5fGiw | | | 2w9v15NPfQNU3uYKl814po6p1m8Dl+X | | | M59YRyQIDAQABAoIBAQCLftFgChIx2ZO6 | | | OL9iBm/31ZY9QD9b/Z7OV/BpjSquUXzsrxoTM | | | 3fPIPV1lMwRi1j+RIWhAkgqj49h | | | Y1iCLH4hg+p54UbH1qUqZFFE0QxiWQ5OFHW/al/ecYg | | | pneS+ysIelY9e8UufLChT | | | cPsbPEVoixET5OQFyRJiTixibBQcONy7p3nYAaYol3jUZYgv1 | | | gU7drcrCel6uKl4 | | | GTecoGRIlw9IApHiLBjjhahyTi7Oa7xRO9TsaY+rbZRax4ko57ZGuSa | | | fzh6MmQw0 | | | BIdz7JyDDOoQSqJGoNUZ1oPBLgkvig5jyNOp01BRIdzSGOhOM5L8C0vbofAlR | | | fD/ | | | G0bBRBYBAoGBANPFR9ehqGO5lE+zuGM9EKlMnS3kITXNNUn6CiwDbvLKzw6zBZLD | | | O | | | VyaFPFt7J4r88mio6DjJVRW57rX4YaFsj2oCxPuYnJRgGBQ1u7EGjcJ0iOxZY/+ | | | ASaNF2S | | | x/enAknVFiOtv8MXaoAOSRAkch2kwrw6fCkP/tZw4qELQmcChAoGBAM0P | | | RUBgHUlPunMa3 | | | +pXadE8SqE5ruPSdU9CbrI0UPQaoGVi8bXBqiDOaeKxcWDX4gfG | | | qSy/+ch/r04a4yankrP | | | toV9ihmLXNz0zrImHnT2wCC6nw9J/pjxBDDvXvqeL9NjC | | | 8p8+asJmu8S9ZRmLubi6OX/gE | | | GlqILnWclxdMzgpAoGAHEb4e9uTL5XFLwtRcLbj | | | taeMSWdv48498l3X496lfvgDw/O1p84 | | | 3p5zPdRl3gftedysnbEFIZ8We9b0D2UGa | | | 9k6tBAFN1fP6D2JcAM/grD68d5WleR+yqaInY | | | IO/4uma5NvfF4j//ntd6HwsZ4cO | | | scYVaf9kkIXhizWpihpunWECgYAIOqKm0LScKozq7Zs | | | qxlNCyE6eZbg1AE8g3SOg | | | FyVghmkFaJEWoCz5oA7zv/cy0bcKZNiJKTMW7rjUQ5P2CyeB/ | | | PlK4KNP+B8JX7d+ | | | 1Whj/1p0tNrQ6bp8FIgvJptKEf3DbR9bcJ/MKV9Dp+4Utly/owmHrjA | | | 6ar3hd0+j | | | kUHq8QKBgGJTbCTHPdAZMli3ckbkaLO4xKCB7gvB1Apa5OVonoQHR0LfODLpM | | | 8Hk | | | 0pDq/YAqjvndURIxOtZ2MXVig0WETYmlYSUz+mlg51GYZhGeIr7WxwuY/uu2tePY | | | E | | | VLCJM0BI8Qk9d8931pVAkdRrAU4ZU8TdkkG5C6RAJA03vO69P4f | | | -----END RSA | | | PRIVATE KEY-----\u0026#39;, u\u0026#39;ssh_virt_type\u0026#39;: u\u0026#39;virsh\u0026#39;, u\u0026#39;ssh_address\u0026#39;: | | | u\u0026#39;10.0.0.1\u0026#39;} | | created_at | 2016-02-22T12:24:15+00:00 | | driver_internal_info | {} | | chassis_uuid | | | instance_info | {} | +------------------------+-----------------------------------------------------------------------+ [stack@undercloud01 ~]$ ironic node-update a93b47e9-b0f3-4e14-8c0e-2deb486efd9e add properties/capabilities=\u0026#39;profile:compute,boot_option:local\u0026#39; +------------------------+-----------------------------------------------------------------------+ | Property | Value | +------------------------+-----------------------------------------------------------------------+ | target_power_state | None | | extra | {} | | last_error | None | | updated_at | 2016-02-22T12:31:22+00:00 | | maintenance_reason | None | | provision_state | available | | clean_step | {} | | uuid | a93b47e9-b0f3-4e14-8c0e-2deb486efd9e | | console_enabled | False | | target_provision_state | None | | provision_updated_at | 2016-02-22T12:31:22+00:00 | | maintenance | False | | inspection_started_at | None | | inspection_finished_at | None | | power_state | power off | | driver | pxe_ssh | | reservation | None | | properties | {u\u0026#39;memory_mb\u0026#39;: u\u0026#39;4096\u0026#39;, u\u0026#39;cpu_arch\u0026#39;: u\u0026#39;x86_64\u0026#39;, u\u0026#39;local_gb\u0026#39;: u\u0026#39;39\u0026#39;, | | | u\u0026#39;cpus\u0026#39;: u\u0026#39;1\u0026#39;, u\u0026#39;capabilities\u0026#39;: u\u0026#39;profile:compute,boot_option:local\u0026#39;} | | instance_uuid | None | | name | None | | driver_info | {u\u0026#39;ssh_username\u0026#39;: u\u0026#39;thomas\u0026#39;, u\u0026#39;deploy_kernel\u0026#39;: u\u0026#39;7dee66d3-e618-4bc3 | | | -999d-e061b28182ac\u0026#39;, u\u0026#39;deploy_ramdisk\u0026#39;: u\u0026#39;d15d5608-c16b-47fd-ac8c- | | | 645604c9a3ac\u0026#39;, u\u0026#39;ssh_key_contents\u0026#39;: u\u0026#39;-----BEGIN RSA PRIVATE KEY----- | | | M | | | IIEowIBAAKCAQEAqaGcYE9HmiN2RCMevv/PWeNbglzzwWYXmSBrBDwsx/qBXTS1 | | | 1+qyLYJ | | | fgeMSCGoSTg9tfwt45KXX7tYy7YvG4DGcETGt57l08SiJEsE4JwOt/aNa | | | miZR87anAhv6x | | | zciMoUpwWW2CMIQ9x+jVjXx3h/yd4VfNqjRb9kBV6QR3Jgw2s2g | | | MsV8mKmxhpERFIWsxN6 | | | 9SwUHHGdd9/EDykBKgBDcLJ+AZwK4yqwgBNYXsv3fwtlU | | | dtWQIvLOIA4LshqxVlyvK+Gr1 | | | j6k+vSE2PveU+xW1ow1MNJy4fRhio13uPp5fGiw | | | 2w9v15NPfQNU3uYKl814po6p1m8Dl+X | | | M59YRyQIDAQABAoIBAQCLftFgChIx2ZO6 | | | OL9iBm/31ZY9QD9b/Z7OV/BpjSquUXzsrxoTM | | | 3fPIPV1lMwRi1j+RIWhAkgqj49h | | | Y1iCLH4hg+p54UbH1qUqZFFE0QxiWQ5OFHW/al/ecYg | | | pneS+ysIelY9e8UufLChT | | | cPsbPEVoixET5OQFyRJiTixibBQcONy7p3nYAaYol3jUZYgv1 | | | gU7drcrCel6uKl4 | | | GTecoGRIlw9IApHiLBjjhahyTi7Oa7xRO9TsaY+rbZRax4ko57ZGuSa | | | fzh6MmQw0 | | | BIdz7JyDDOoQSqJGoNUZ1oPBLgkvig5jyNOp01BRIdzSGOhOM5L8C0vbofAlR | | | fD/ | | | G0bBRBYBAoGBANPFR9ehqGO5lE+zuGM9EKlMnS3kITXNNUn6CiwDbvLKzw6zBZLD | | | O | | | VyaFPFt7J4r88mio6DjJVRW57rX4YaFsj2oCxPuYnJRgGBQ1u7EGjcJ0iOxZY/+ | | | ASaNF2S | | | x/enAknVFiOtv8MXaoAOSRAkch2kwrw6fCkP/tZw4qELQmcChAoGBAM0P | | | RUBgHUlPunMa3 | | | +pXadE8SqE5ruPSdU9CbrI0UPQaoGVi8bXBqiDOaeKxcWDX4gfG | | | qSy/+ch/r04a4yankrP | | | toV9ihmLXNz0zrImHnT2wCC6nw9J/pjxBDDvXvqeL9NjC | | | 8p8+asJmu8S9ZRmLubi6OX/gE | | | GlqILnWclxdMzgpAoGAHEb4e9uTL5XFLwtRcLbj | | | taeMSWdv48498l3X496lfvgDw/O1p84 | | | 3p5zPdRl3gftedysnbEFIZ8We9b0D2UGa | | | 9k6tBAFN1fP6D2JcAM/grD68d5WleR+yqaInY | | | IO/4uma5NvfF4j//ntd6HwsZ4cO | | | scYVaf9kkIXhizWpihpunWECgYAIOqKm0LScKozq7Zs | | | qxlNCyE6eZbg1AE8g3SOg | | | FyVghmkFaJEWoCz5oA7zv/cy0bcKZNiJKTMW7rjUQ5P2CyeB/ | | | PlK4KNP+B8JX7d+ | | | 1Whj/1p0tNrQ6bp8FIgvJptKEf3DbR9bcJ/MKV9Dp+4Utly/owmHrjA | | | 6ar3hd0+j | | | kUHq8QKBgGJTbCTHPdAZMli3ckbkaLO4xKCB7gvB1Apa5OVonoQHR0LfODLpM | | | 8Hk | | | 0pDq/YAqjvndURIxOtZ2MXVig0WETYmlYSUz+mlg51GYZhGeIr7WxwuY/uu2tePY | | | E | | | VLCJM0BI8Qk9d8931pVAkdRrAU4ZU8TdkkG5C6RAJA03vO69P4f | | | -----END RSA | | | PRIVATE KEY-----\u0026#39;, u\u0026#39;ssh_virt_type\u0026#39;: u\u0026#39;virsh\u0026#39;, u\u0026#39;ssh_address\u0026#39;: | | | u\u0026#39;10.0.0.1\u0026#39;} | | created_at | 2016-02-22T12:24:16+00:00 | | driver_internal_info | {} | | chassis_uuid | | | instance_info | {} | +------------------------+-----------------------------------------------------------------------+ [stack@undercloud01 ~]$ ironic node-update 79dd9abe-ce2f-49e9-a8d5-3d57deb6cda8 add properties/capabilities=\u0026#39;profile:compute,boot_option:local\u0026#39; +------------------------+-----------------------------------------------------------------------+ | Property | Value | +------------------------+-----------------------------------------------------------------------+ | target_power_state | None | | extra | {} | | last_error | None | | updated_at | 2016-02-22T12:31:22+00:00 | | maintenance_reason | None | | provision_state | available | | clean_step | {} | | uuid | 79dd9abe-ce2f-49e9-a8d5-3d57deb6cda8 | | console_enabled | False | | target_provision_state | None | | provision_updated_at | 2016-02-22T12:31:22+00:00 | | maintenance | False | | inspection_started_at | None | | inspection_finished_at | None | | power_state | power off | | driver | pxe_ssh | | reservation | None | | properties | {u\u0026#39;memory_mb\u0026#39;: u\u0026#39;4096\u0026#39;, u\u0026#39;cpu_arch\u0026#39;: u\u0026#39;x86_64\u0026#39;, u\u0026#39;local_gb\u0026#39;: u\u0026#39;39\u0026#39;, | | | u\u0026#39;cpus\u0026#39;: u\u0026#39;1\u0026#39;, u\u0026#39;capabilities\u0026#39;: u\u0026#39;profile:compute,boot_option:local\u0026#39;} | | instance_uuid | None | | name | None | | driver_info | {u\u0026#39;ssh_username\u0026#39;: u\u0026#39;thomas\u0026#39;, u\u0026#39;deploy_kernel\u0026#39;: u\u0026#39;7dee66d3-e618-4bc3 | | | -999d-e061b28182ac\u0026#39;, u\u0026#39;deploy_ramdisk\u0026#39;: u\u0026#39;d15d5608-c16b-47fd-ac8c- | | | 645604c9a3ac\u0026#39;, u\u0026#39;ssh_key_contents\u0026#39;: u\u0026#39;-----BEGIN RSA PRIVATE KEY----- | | | M | | | IIEowIBAAKCAQEAqaGcYE9HmiN2RCMevv/PWeNbglzzwWYXmSBrBDwsx/qBXTS1 | | | 1+qyLYJ | | | fgeMSCGoSTg9tfwt45KXX7tYy7YvG4DGcETGt57l08SiJEsE4JwOt/aNa | | | miZR87anAhv6x | | | zciMoUpwWW2CMIQ9x+jVjXx3h/yd4VfNqjRb9kBV6QR3Jgw2s2g | | | MsV8mKmxhpERFIWsxN6 | | | 9SwUHHGdd9/EDykBKgBDcLJ+AZwK4yqwgBNYXsv3fwtlU | | | dtWQIvLOIA4LshqxVlyvK+Gr1 | | | j6k+vSE2PveU+xW1ow1MNJy4fRhio13uPp5fGiw | | | 2w9v15NPfQNU3uYKl814po6p1m8Dl+X | | | M59YRyQIDAQABAoIBAQCLftFgChIx2ZO6 | | | OL9iBm/31ZY9QD9b/Z7OV/BpjSquUXzsrxoTM | | | 3fPIPV1lMwRi1j+RIWhAkgqj49h | | | Y1iCLH4hg+p54UbH1qUqZFFE0QxiWQ5OFHW/al/ecYg | | | pneS+ysIelY9e8UufLChT | | | cPsbPEVoixET5OQFyRJiTixibBQcONy7p3nYAaYol3jUZYgv1 | | | gU7drcrCel6uKl4 | | | GTecoGRIlw9IApHiLBjjhahyTi7Oa7xRO9TsaY+rbZRax4ko57ZGuSa | | | fzh6MmQw0 | | | BIdz7JyDDOoQSqJGoNUZ1oPBLgkvig5jyNOp01BRIdzSGOhOM5L8C0vbofAlR | | | fD/ | | | G0bBRBYBAoGBANPFR9ehqGO5lE+zuGM9EKlMnS3kITXNNUn6CiwDbvLKzw6zBZLD | | | O | | | VyaFPFt7J4r88mio6DjJVRW57rX4YaFsj2oCxPuYnJRgGBQ1u7EGjcJ0iOxZY/+ | | | ASaNF2S | | | x/enAknVFiOtv8MXaoAOSRAkch2kwrw6fCkP/tZw4qELQmcChAoGBAM0P | | | RUBgHUlPunMa3 | | | +pXadE8SqE5ruPSdU9CbrI0UPQaoGVi8bXBqiDOaeKxcWDX4gfG | | | qSy/+ch/r04a4yankrP | | | toV9ihmLXNz0zrImHnT2wCC6nw9J/pjxBDDvXvqeL9NjC | | | 8p8+asJmu8S9ZRmLubi6OX/gE | | | GlqILnWclxdMzgpAoGAHEb4e9uTL5XFLwtRcLbj | | | taeMSWdv48498l3X496lfvgDw/O1p84 | | | 3p5zPdRl3gftedysnbEFIZ8We9b0D2UGa | | | 9k6tBAFN1fP6D2JcAM/grD68d5WleR+yqaInY | | | IO/4uma5NvfF4j//ntd6HwsZ4cO | | | scYVaf9kkIXhizWpihpunWECgYAIOqKm0LScKozq7Zs | | | qxlNCyE6eZbg1AE8g3SOg | | | FyVghmkFaJEWoCz5oA7zv/cy0bcKZNiJKTMW7rjUQ5P2CyeB/ | | | PlK4KNP+B8JX7d+ | | | 1Whj/1p0tNrQ6bp8FIgvJptKEf3DbR9bcJ/MKV9Dp+4Utly/owmHrjA | | | 6ar3hd0+j | | | kUHq8QKBgGJTbCTHPdAZMli3ckbkaLO4xKCB7gvB1Apa5OVonoQHR0LfODLpM | | | 8Hk | | | 0pDq/YAqjvndURIxOtZ2MXVig0WETYmlYSUz+mlg51GYZhGeIr7WxwuY/uu2tePY | | | E | | | VLCJM0BI8Qk9d8931pVAkdRrAU4ZU8TdkkG5C6RAJA03vO69P4f | | | -----END RSA | | | PRIVATE KEY-----\u0026#39;, u\u0026#39;ssh_virt_type\u0026#39;: u\u0026#39;virsh\u0026#39;, u\u0026#39;ssh_address\u0026#39;: | | | u\u0026#39;10.0.0.1\u0026#39;} | | created_at | 2016-02-22T12:24:16+00:00 | | driver_internal_info | {} | | chassis_uuid | | | instance_info | {} | +------------------------+-----------------------------------------------------------------------+ [stack@undercloud01 ~]$ Build Overcloud # Overstack templates # The next thing we do is prepare some configuration files. In essence the \u0026ldquo;openstack overcloud deploy\u0026rdquo; command will deploy a simple overcloud that works. It uses heat for all the deployment. We have to slightly modify the configuration to customise it for our setup. These customizations overlay the defaults, so although the changes we make are small, under the hood a lot is going on. We need to tell it about our network, eg the various VLANS, IPs and IP ranges to use. There are some default yaml heat templates that generate the configuration to segregate traffic with VLANS. However our setup has the external traffic on the default vlan untagged and thus the host can access the instances\u0026rsquo;s floating IP\u0026rsquo;s. We have to reference and define compute.yaml and controller.yaml. We also do an extra firstboot step to create and activate the swap. I\u0026rsquo;m not sure why this is not configured by default and as it stands this does not seem to work on my setup yet. However I let in there in hope that I fix it. This is the output of the process I used to create the Overstack templates.\n[stack@undercloud01 ~]$ mkdir ~/templates [stack@undercloud01 ~]$ cat ~/templates/network-environment.yaml resource_registry: OS::TripleO::Compute::Net::SoftwareConfig: /home/stack/templates/nic-configs/compute.yaml OS::TripleO::Controller::Net::SoftwareConfig: /home/stack/templates/nic-configs/controller.yaml parameter_defaults: # The IP address of the EC2 metadata server. Generally the IP of the Undercloud EC2MetadataIp: 172.16.0.2 # Gateway router for the provisioning network (or Undercloud IP) ControlPlaneDefaultRoute: 172.16.0.1 DnsServers: [\u0026#34;172.16.0.1\u0026#34;] ExternalNetCidr: 10.0.0.0/24 InternalApiNetCidr: 10.0.10.0/24 StorageNetCidr: 10.0.11.0/24 StorageMgmtNetCidr: 10.0.12.0/24 TenantNetCidr: 10.0.13.0/24 # Leave room for floating IPs in the External allocation pool ExternalAllocationPools: [{\u0026#39;start\u0026#39;: \u0026#39;10.0.0.100\u0026#39;, \u0026#39;end\u0026#39;: \u0026#39;10.0.0.200\u0026#39;}] InternalApiAllocationPools: [{\u0026#39;start\u0026#39;: \u0026#39;10.0.10.10\u0026#39;, \u0026#39;end\u0026#39;: \u0026#39;10.0.10.200\u0026#39;}] StorageAllocationPools: [{\u0026#39;start\u0026#39;: \u0026#39;10.0.11.10\u0026#39;, \u0026#39;end\u0026#39;: \u0026#39;10.0.11.200\u0026#39;}] StorageMgmtAllocationPools: [{\u0026#39;start\u0026#39;: \u0026#39;10.0.12.10\u0026#39;, \u0026#39;end\u0026#39;: \u0026#39;10.0.12.200\u0026#39;}] TenantAllocationPools: [{\u0026#39;start\u0026#39;: \u0026#39;10.0.13.10\u0026#39;, \u0026#39;end\u0026#39;: \u0026#39;10.0.13.200\u0026#39;}] InternalApiNetworkVlanID: 10 StorageNetworkVlanID: 11 StorageMgmtNetworkVlanID: 12 TenantNetworkVlanID: 13 # ExternalNetworkVlanID: 100 # Set to the router gateway on the external network ExternalInterfaceDefaultRoute: 10.0.0.1 # Set to \u0026#34;br-ex\u0026#34; if using floating IPs on native VLAN on bridge br-ex NeutronExternalNetworkBridge: \u0026#34;br-ex\u0026#34; # Customize bonding options if required BondInterfaceOvsOptions: \u0026#34;bond_mode=active-backup\u0026#34; [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ mkdir ~/templates/nic-configs/ [stack@undercloud01 ~]$ cp /usr/share/openstack-tripleo-heat-templates/network/config/bond-with-vlans/* ~/templates/nic-configs/ [stack@undercloud01 ~]$ find ~/templates/nic-configs/ /home/stack/templates/nic-configs/ /home/stack/templates/nic-configs/ceph-storage.yaml /home/stack/templates/nic-configs/cinder-storage.yaml /home/stack/templates/nic-configs/compute.yaml /home/stack/templates/nic-configs/controller.yaml /home/stack/templates/nic-configs/README.md /home/stack/templates/nic-configs/swift-storage.yaml [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ cp ./templates/nic-configs/controller.yaml ./templates/nic-configs/controller.yaml.orig [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ diff -u ./templates/nic-configs/controller.yaml.orig ./templates/nic-configs/controller.yaml --- ./templates/nic-configs/controller.yaml.orig\t2016-02-21 19:28:44.735000000 +0000 +++ ./templates/nic-configs/controller.yaml\t2016-02-21 19:29:00.129000000 +0000 @@ -97,6 +97,11 @@ - type: ovs_bridge name: {get_input: bridge_name} + addresses: + - ip_netmask: {get_param: ExternalIpSubnet} + routes: + - ip_netmask: 0.0.0.0/0 + next_hop: {get_param: ExternalInterfaceDefaultRoute} dns_servers: {get_param: DnsServers} members: - @@ -114,17 +119,6 @@ - type: vlan device: bond1 - vlan_id: {get_param: ExternalNetworkVlanID} - addresses: - - - ip_netmask: {get_param: ExternalIpSubnet} - routes: - - - ip_netmask: 0.0.0.0/0 - next_hop: {get_param: ExternalInterfaceDefaultRoute} - - - type: vlan - device: bond1 vlan_id: {get_param: InternalApiNetworkVlanID} addresses: - [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ mkdir ~/templates/firstboot [stack@undercloud01 ~]$ cat ~/templates/firstboot/firstboot.yaml resource_registry: OS::TripleO::NodeUserData: /home/stack/templates/firstboot/userdata.yaml [stack@undercloud01 ~]$ cat ~/templates/firstboot/userdata.yaml heat_template_version: 2014-10-16 resources: userdata: type: OS::Heat::MultipartMime properties: parts: - config: {get_resource: swapon_config} swapon_config: type: OS::Heat::SoftwareConfig properties: config: | #!/bin/bash swap_device=$(sudo fdisk -l | grep swap | awk \u0026#39;{print $1}\u0026#39;) if $swap_device \u0026amp;\u0026amp; ${swap_device} ; then rc_local=\u0026#34;/etc/rc.d/rc.local\u0026#34; echo \u0026#34;swapon $swap_device \u0026#34; \u0026gt;\u0026gt; $rc_local chmod 755 $rc_local swapon $swap_device fi outputs: OS::stack_id: value: {get_resource: userdata} [stack@undercloud01 ~]$ Deploy overcloud # The next thing to do is actually start creating the overcloud. The first time I did this I didn\u0026rsquo;t use the extra templates mentioned above, I just ran \u0026ldquo;openstack overcloud deploy - -templates /usr/share/openstack-tripleo-heat-templates - -control-scale 1 - -compute-scale 1 - -neutron-tunnel-types vxlan - -neutron-network-type vxlan - -control-flavor control - -compute-flavor compute\u0026rdquo;. Once this ran and finished and had no other issues I added the extra templates. This process does take a little time. Various numbers of control-scale and compute-scale can be used to control how many nodes are deployed. I only did one of each in the end for speed as I did try more but my little laptop could not cope. It should also be noted that you can have 3 controllers by using the options \u0026ldquo;- -control-scale 3 -e /usr/share/openstack-tripleo-heat-templates/environments/puppet-pacemaker.yaml\u0026rdquo;. This will create a HA type controller environment completely automatically. I didn\u0026rsquo;t try this on my laptop does it works work on the bigger server I was testing.\nThe command is listed below:\n[stack@undercloud01 ~]$ openstack overcloud deploy --templates /usr/share/openstack-tripleo-heat-templates --control-scale 1 --compute-scale 1 --neutron-tunnel-types vxlan --neutron-network-type vxlan --control-flavor control --compute-flavor compute -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml -e ~/templates/network-environment.yaml -e ~/templates/firstboot/firstboot.yaml Deploying templates in the directory /usr/share/openstack-tripleo-heat-templates While it runs in a window you can login to the undercloud machine and inspect the progress with the \u0026ldquo;heat stack-list\u0026rdquo; command. Eventually this changed to either ERROR or COMPLETE. It looks like:\n[stack@undercloud01 ~]$ . stackrc [stack@undercloud01 ~]$ heat stack-list +--------------------------------------+------------+--------------------+---------------------+--------------+ | id | stack_name | stack_status | creation_time | updated_time | +--------------------------------------+------------+--------------------+---------------------+--------------+ | d4f6e2d8-8461-4896-9de0-4aba291294dd | overcloud | CREATE_IN_PROGRESS | 2016-02-24T12:16:48 | None | +--------------------------------------+------------+--------------------+---------------------+--------------+ [stack@undercloud01 ~]$ If you want to see more progress, the \u0026ldquo;heat resource-list -n 5 overcloud\u0026rdquo; will show how it\u0026rsquo;s going; however, if it goes wrong, the command \u0026ldquo;heat resource-list -n 5 overcloud | grep -i fail\u0026rdquo; will help; also see http://docs.openstack.org/developer/tripleo-docs/troubleshooting/troubleshooting-overcloud.html. Also \u0026ldquo;heat stack-delete overcloud\u0026rdquo; will do a good job cleaning everything up to start afresh. However, if it all goes well you should see the nova on the Undercloud start to spawn instances. This can be seen with a simple \u0026ldquo;nova list\u0026rdquo;, sample output below.\n[stack@undercloud01 ~]$ . stackrc [stack@undercloud01 ~]$ nova list +--------------------------------------+-------------------------+--------+------------+-------------+----------------------+ | ID | Name | Status | Task State | Power State | Networks | +--------------------------------------+-------------------------+--------+------------+-------------+----------------------+ | 576bd474-8bc1-4a0a-9991-b14498e85f73 | overcloud-controller-0 | BUILD | spawning | NOSTATE | ctlplane=172.16.0.10 | | 85c92cb7-c8fc-4fdb-b848-416635be5f45 | overcloud-novacompute-0 | BUILD | spawning | NOSTATE | ctlplane=172.16.0.9 | +--------------------------------------+-------------------------+--------+------------+-------------+----------------------+ [stack@undercloud01 ~]$ Once the instances get further along you can see the status changes from BUILD to ACTIVE and they are up and running:\n[stack@undercloud01 ~]$ nova list +--------------------------------------+-------------------------+--------+------------+-------------+----------------------+ | ID | Name | Status | Task State | Power State | Networks | +--------------------------------------+-------------------------+--------+------------+-------------+----------------------+ | 576bd474-8bc1-4a0a-9991-b14498e85f73 | overcloud-controller-0 | ACTIVE | - | Running | ctlplane=172.16.0.10 | | 85c92cb7-c8fc-4fdb-b848-416635be5f45 | overcloud-novacompute-0 | ACTIVE | - | Running | ctlplane=172.16.0.9 | +--------------------------------------+-------------------------+--------+------------+-------------+----------------------+ [stack@undercloud01 ~]$ Meanwhile heat is still working away getting everything installed. As mentioned above the \u0026ldquo;heat resource-list\u0026rdquo; command can be used show the overall progress. I used the rather nasty command: \u0026ldquo;while true; do heat resource-list -n 5 overcloud | cut -c147-165 | grep -v \u0026ndash; \u0026lsquo;\u0026mdash;\u0026rsquo; | sort | uniq -c; sleep 5; done\u0026rdquo; to give a little progress. In essence it groups by the resource_status and counts the jobs. I would like a better progress log, eta indicator. Here is an example of the \u0026ldquo;heat resource-list -n 5 overcloud\u0026rdquo; to give an idea of the number of heat jobs that get created:\n[stack@undercloud01 ~]$ heat resource-list -n 5 overcloud +-------------------------------------------+-----------------------------------------------+---------------------------------------------------+--------------------+---------------------+---------------------------------------------------------------------------------+ | resource_name | physical_resource_id | resource_type | resource_status | updated_time | stack_name | +-------------------------------------------+-----------------------------------------------+---------------------------------------------------+--------------------+---------------------+---------------------------------------------------------------------------------+ | ObjectStorageAllNodesValidationDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:48 | overcloud | | ObjectStorageNodesPostDeployment | | OS::TripleO::ObjectStoragePostDeployment | INIT_COMPLETE | 2016-02-24T12:16:48 | overcloud | | VipDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:48 | overcloud | | AllNodesExtraConfig | | OS::TripleO::AllNodesExtraConfig | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | AllNodesValidationConfig | | OS::TripleO::AllNodes::Validation | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | BlockStorage | db69d38c-67ca-44a7-831f-ffcdbf5647a3 | OS::Heat::ResourceGroup | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | BlockStorageAllNodesDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | BlockStorageAllNodesValidationDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | BlockStorageNodesPostDeployment | | OS::TripleO::BlockStoragePostDeployment | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | CephClusterConfig | | OS::TripleO::CephClusterConfig::SoftwareConfig | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | CephStorage | 79869bfb-c9e9-4b50-a84e-a12994ab02c9 | OS::Heat::ResourceGroup | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | CephStorageAllNodesDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | CephStorageAllNodesValidationDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | CephStorageCephDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | CephStorageNodesPostDeployment | | OS::TripleO::CephStoragePostDeployment | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | Compute | 6a6047d0-461b-4ae3-ade3-69beb698d161 | OS::Heat::ResourceGroup | CREATE_IN_PROGRESS | 2016-02-24T12:16:49 | overcloud | | ComputeAllNodesDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | ComputeAllNodesValidationDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | ComputeCephDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | ComputeNodesPostDeployment | | OS::TripleO::ComputePostDeployment | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | ControlVirtualIP | 344ffcde-004b-4b88-b0ee-dcc29ec3267d | OS::Neutron::Port | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | Controller | e8f2de6a-89b9-4d8b-894b-dc20f4348831 | OS::Heat::ResourceGroup | CREATE_IN_PROGRESS | 2016-02-24T12:16:49 | overcloud | | ControllerAllNodesDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | ControllerAllNodesValidationDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | ControllerBootstrapNodeConfig | | OS::TripleO::BootstrapNode::SoftwareConfig | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | ControllerBootstrapNodeDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | ControllerCephDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | ControllerClusterConfig | | OS::Heat::StructuredConfig | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | ControllerClusterDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | ControllerIpListMap | | OS::TripleO::Network::Ports::NetIpListMap | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | ControllerNodesPostDeployment | | OS::TripleO::ControllerPostDeployment | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | ControllerSwiftDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | ExternalNetwork | 20db9af2-1614-4faf-9f63-5c902c510b69 | OS::TripleO::Network::External | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud-Networks-3jjwswfwkj7t | | HeatAuthEncryptionKey | overcloud-HeatAuthEncryptionKey-7en7ykwzhbub | OS::Heat::RandomString | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | HorizonSecret | overcloud-HorizonSecret-4mvh4duhl6ez | OS::Heat::RandomString | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | InternalApiVirtualIP | 1070f886-e726-48b6-9952-b38a8edd5e1d | OS::TripleO::Controller::Ports::InternalApiPort | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | MysqlClusterUniquePart | overcloud-MysqlClusterUniquePart-yudeiwqayazw | OS::Heat::RandomString | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | MysqlRootPassword | overcloud-MysqlRootPassword-elqh65u4vbfr | OS::Heat::RandomString | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | Networks | e42485ac-8fce-474c-b807-254e0d5030f9 | OS::TripleO::Network | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | ObjectStorage | e97b12ce-53b1-4e6b-8423-77149b7c7039 | OS::Heat::ResourceGroup | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | ObjectStorageAllNodesDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | ObjectStorageSwiftDeployment | | OS::Heat::StructuredDeployments | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | PcsdPassword | overcloud-PcsdPassword-zxcr22grrhk3 | OS::Heat::RandomString | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | PublicVirtualIP | 871d9d35-e8c0-4af3-a763-b1fd46f7b66a | OS::TripleO::Controller::Ports::ExternalPort | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | RabbitCookie | overcloud-RabbitCookie-q4dfoexkd6hu | OS::Heat::RandomString | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | RedisVirtualIP | 1733b289-97de-446f-9aa0-d4f24617b6f7 | OS::TripleO::Controller::Ports::RedisVipPort | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | StorageMgmtNetwork | b616e8b2-8a68-41c7-80b5-fa9b521498a8 | OS::TripleO::Network::StorageMgmt | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud-Networks-3jjwswfwkj7t | | StorageMgmtVirtualIP | ca08d662-5999-4bcd-97e1-e277f9482fb1 | OS::TripleO::Controller::Ports::StorageMgmtPort | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | StorageVirtualIP | 2dc0c025-7fd4-488d-8e83-de232e80512f | OS::TripleO::Controller::Ports::StoragePort | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | SwiftDevicesAndProxyConfig | | OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | VipConfig | a03f6cd8-569f-451c-a8e7-56736aa3d8f9 | OS::TripleO::VipConfig | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | VipMap | 36f7d520-d175-46a2-a441-11c890bb3e12 | OS::TripleO::Network::Ports::NetIpMap | CREATE_COMPLETE | 2016-02-24T12:16:49 | overcloud | | allNodesConfig | | OS::TripleO::AllNodes::SoftwareConfig | INIT_COMPLETE | 2016-02-24T12:16:49 | overcloud | | InternalNetwork | 35ae6089-5696-4df0-a986-a526bb1e0aa1 | OS::TripleO::Network::InternalApi | CREATE_COMPLETE | 2016-02-24T12:16:50 | overcloud-Networks-3jjwswfwkj7t | | StorageMgmtNetwork | 3a7d29c9-3f4b-43da-a803-6fb9ce55103f | OS::Neutron::Net | CREATE_COMPLETE | 2016-02-24T12:16:50 | overcloud-Networks-3jjwswfwkj7t-StorageMgmtNetwork-rklclktpxv44 | | StorageMgmtSubnet | 42a3efbc-d57d-4b89-8fa5-c76a54399b90 | OS::Neutron::Subnet | CREATE_COMPLETE | 2016-02-24T12:16:50 | overcloud-Networks-3jjwswfwkj7t-StorageMgmtNetwork-rklclktpxv44 | | StorageNetwork | ee203c07-87a8-4b4b-bcce-93a552d29a43 | OS::TripleO::Network::Storage | CREATE_COMPLETE | 2016-02-24T12:16:50 | overcloud-Networks-3jjwswfwkj7t | | TenantNetwork | b0041abb-c510-4311-86de-65f605dc1bb1 | OS::TripleO::Network::Tenant | CREATE_COMPLETE | 2016-02-24T12:16:50 | overcloud-Networks-3jjwswfwkj7t | | VipConfigImpl | f176bf54-cd31-4c07-9d43-a72ea566a140 | OS::Heat::StructuredConfig | CREATE_COMPLETE | 2016-02-24T12:16:50 | overcloud-VipConfig-udycuufuzgz2 | | ExternalNetwork | fe5ee2db-4549-4a3a-8c29-502891d2984a | OS::Neutron::Net | CREATE_COMPLETE | 2016-02-24T12:16:51 | overcloud-Networks-3jjwswfwkj7t-ExternalNetwork-3ryqumyq33yg | | ExternalSubnet | 16075ae6-fb18-4733-af03-2d3767b2731e | OS::Neutron::Subnet | CREATE_COMPLETE | 2016-02-24T12:16:51 | overcloud-Networks-3jjwswfwkj7t-ExternalNetwork-3ryqumyq33yg | | InternalApiNetwork | 132bb2b4-4177-440f-be0e-53c185314b9d | OS::Neutron::Net | CREATE_COMPLETE | 2016-02-24T12:16:52 | overcloud-Networks-3jjwswfwkj7t-InternalNetwork-c2swsw5allle | | InternalApiSubnet | 13cffdf5-d3a8-40c2-93e8-815c2d050991 | OS::Neutron::Subnet | CREATE_COMPLETE | 2016-02-24T12:16:52 | overcloud-Networks-3jjwswfwkj7t-InternalNetwork-c2swsw5allle | | StorageNetwork | 1bd6d1f8-ce0c-42e5-8041-385489b140e5 | OS::Neutron::Net | CREATE_COMPLETE | 2016-02-24T12:16:53 | overcloud-Networks-3jjwswfwkj7t-StorageNetwork-nx7kedekw66l | | StorageSubnet | e485d312-2b5d-4e0d-9c19-5746fa86cd2f | OS::Neutron::Subnet | CREATE_COMPLETE | 2016-02-24T12:16:53 | overcloud-Networks-3jjwswfwkj7t-StorageNetwork-nx7kedekw66l | | TenantNetwork | e5b95c05-e4a8-4f9f-b6fc-2bcb85afc6b8 | OS::Neutron::Net | CREATE_COMPLETE | 2016-02-24T12:16:54 | overcloud-Networks-3jjwswfwkj7t-TenantNetwork-vnsept5doj7p | | TenantSubnet | b349b889-eebd-4f82-ad3c-f33c923077e1 | OS::Neutron::Subnet | CREATE_COMPLETE | 2016-02-24T12:16:54 | overcloud-Networks-3jjwswfwkj7t-TenantNetwork-vnsept5doj7p | | StorageMgmtPort | 0974c508-f402-41b1-b32b-523e68289dcd | OS::Neutron::Port | CREATE_COMPLETE | 2016-02-24T12:17:02 | overcloud-StorageMgmtVirtualIP-febkbw4d4xue | | InternalApiPort | 810efa4e-91d3-4e1b-8d9a-45b44faf7259 | OS::Neutron::Port | CREATE_COMPLETE | 2016-02-24T12:17:03 | overcloud-InternalApiVirtualIP-efndwthuhklf | | VipPort | 650ed5e5-78cc-4eb5-b8f4-2d4d3ad5f1b9 | OS::Neutron::Port | CREATE_COMPLETE | 2016-02-24T12:17:04 | overcloud-RedisVirtualIP-wqtmjyckp3xe | | ExternalPort | 7f292974-76a4-452c-a330-555cebf65bcd | OS::Neutron::Port | CREATE_COMPLETE | 2016-02-24T12:17:05 | overcloud-PublicVirtualIP-ou5ejwo45nze | | StoragePort | 2b291094-3be3-463a-99be-72a59a7ab1ff | OS::Neutron::Port | CREATE_COMPLETE | 2016-02-24T12:17:05 | overcloud-StorageVirtualIP-vbixkdafem4x | | 0 | 9e30c58e-3c1c-4d7d-8e39-a94554cbbf77 | OS::TripleO::Compute | CREATE_IN_PROGRESS | 2016-02-24T12:17:11 | overcloud-Compute-fdb52zqsuo5k | | ComputeExtraConfigPre | | OS::TripleO::ComputeExtraConfigPre | INIT_COMPLETE | 2016-02-24T12:17:12 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf | | NodeExtraConfig | | OS::TripleO::NodeExtraConfig | INIT_COMPLETE | 2016-02-24T12:17:12 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf | | NovaComputeDeployment | | OS::TripleO::SoftwareDeployment | INIT_COMPLETE | 2016-02-24T12:17:12 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf | | UpdateDeployment | | OS::Heat::SoftwareDeployment | INIT_COMPLETE | 2016-02-24T12:17:12 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf | | NetIpMap | | OS::TripleO::Network::Ports::NetIpMap | INIT_COMPLETE | 2016-02-24T12:17:13 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf | | NetworkConfig | | OS::TripleO::Compute::Net::SoftwareConfig | INIT_COMPLETE | 2016-02-24T12:17:13 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf | | NetworkDeployment | | OS::TripleO::SoftwareDeployment | INIT_COMPLETE | 2016-02-24T12:17:13 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf | | NovaComputeConfig | 6ce7d607-1cfb-40bf-a587-4f00b0ab87fb | OS::Heat::StructuredConfig | CREATE_COMPLETE | 2016-02-24T12:17:13 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf | | 0 | cb0a7797-9e81-4c02-a11d-afd7c8f9820c | OS::TripleO::Controller | CREATE_IN_PROGRESS | 2016-02-24T12:17:14 | overcloud-Controller-3hewr3lbxngq | | InternalApiPort | | OS::TripleO::Compute::Ports::InternalApiPort | INIT_COMPLETE | 2016-02-24T12:17:14 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf | | NodeAdminUserData | cce3a2f1-c558-4ae7-8c3c-96852cd20afa | OS::TripleO::NodeAdminUserData | CREATE_COMPLETE | 2016-02-24T12:17:14 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf | | NodeUserData | 870bf09b-29c9-41f3-82b9-18a06a1d6e82 | OS::TripleO::NodeUserData | CREATE_COMPLETE | 2016-02-24T12:17:14 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf | | NovaCompute | 85c92cb7-c8fc-4fdb-b848-416635be5f45 | OS::Nova::Server | CREATE_IN_PROGRESS | 2016-02-24T12:17:14 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf | | StoragePort | | OS::TripleO::Compute::Ports::StoragePort | INIT_COMPLETE | 2016-02-24T12:17:14 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf | | TenantPort | | OS::TripleO::Compute::Ports::TenantPort | INIT_COMPLETE | 2016-02-24T12:17:14 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf | | UpdateConfig | 537e9192-291e-4bc7-824c-41303edac470 | OS::TripleO::Tasks::PackageUpdate | CREATE_COMPLETE | 2016-02-24T12:17:14 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf | | UserData | 494017ea-cc09-4528-8ee9-ac437cdd35ea | OS::Heat::MultipartMime | CREATE_COMPLETE | 2016-02-24T12:17:14 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf | | ControllerConfig | 7fd6543b-0fa7-4786-857c-a58b7d301388 | OS::Heat::StructuredConfig | CREATE_COMPLETE | 2016-02-24T12:17:17 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | ControllerDeployment | | OS::TripleO::SoftwareDeployment | INIT_COMPLETE | 2016-02-24T12:17:17 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | ControllerExtraConfigPre | | OS::TripleO::ControllerExtraConfigPre | INIT_COMPLETE | 2016-02-24T12:17:17 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | NetIpMap | | OS::TripleO::Network::Ports::NetIpMap | INIT_COMPLETE | 2016-02-24T12:17:17 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | NetworkConfig | | OS::TripleO::Controller::Net::SoftwareConfig | INIT_COMPLETE | 2016-02-24T12:17:17 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | NetworkDeployment | | OS::TripleO::SoftwareDeployment | INIT_COMPLETE | 2016-02-24T12:17:17 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | NodeExtraConfig | | OS::TripleO::NodeExtraConfig | INIT_COMPLETE | 2016-02-24T12:17:17 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | UpdateDeployment | | OS::Heat::SoftwareDeployment | INIT_COMPLETE | 2016-02-24T12:17:17 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | user_config | b6ae6186-0db7-46ed-ad3e-e933616b49f4 | OS::Heat::CloudConfig | CREATE_COMPLETE | 2016-02-24T12:17:17 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf-NodeAdminUserData-fwobdrs2j5f2 | | userdata | eda62977-b834-478d-a28e-2d2836429305 | OS::Heat::MultipartMime | CREATE_COMPLETE | 2016-02-24T12:17:17 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf-NodeAdminUserData-fwobdrs2j5f2 | | NetIpSubnetMap | | OS::TripleO::Network::Ports::NetIpSubnetMap | INIT_COMPLETE | 2016-02-24T12:17:18 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | StorageMgmtPort | | OS::TripleO::Controller::Ports::StorageMgmtPort | INIT_COMPLETE | 2016-02-24T12:17:18 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | StoragePort | | OS::TripleO::Controller::Ports::StoragePort | INIT_COMPLETE | 2016-02-24T12:17:18 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | TenantPort | | OS::TripleO::Controller::Ports::TenantPort | INIT_COMPLETE | 2016-02-24T12:17:18 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | UpdateConfig | b1bd9014-3d96-4405-bbde-b7be0bade37d | OS::TripleO::Tasks::PackageUpdate | CREATE_COMPLETE | 2016-02-24T12:17:18 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | Controller | 576bd474-8bc1-4a0a-9991-b14498e85f73 | OS::Nova::Server | CREATE_IN_PROGRESS | 2016-02-24T12:17:19 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | ExternalPort | | OS::TripleO::Controller::Ports::ExternalPort | INIT_COMPLETE | 2016-02-24T12:17:19 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | InternalApiPort | | OS::TripleO::Controller::Ports::InternalApiPort | INIT_COMPLETE | 2016-02-24T12:17:19 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | NodeAdminUserData | 907c4e70-085b-426f-aebc-6c029a03f3cc | OS::TripleO::NodeAdminUserData | CREATE_COMPLETE | 2016-02-24T12:17:19 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | NodeUserData | e497e1ac-85d7-4272-8e8d-54f703fa3e13 | OS::TripleO::NodeUserData | CREATE_COMPLETE | 2016-02-24T12:17:19 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | UserData | 484b340c-e93d-4bc9-b9a0-cb470985a328 | OS::Heat::MultipartMime | CREATE_COMPLETE | 2016-02-24T12:17:19 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg | | config | 397b90a8-5ba7-4311-b59b-6c4ff804eaf2 | OS::Heat::SoftwareConfig | CREATE_COMPLETE | 2016-02-24T12:17:19 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf-UpdateConfig-6pk7b7hi6ld6 | | swapon_config | c88ab18f-4cd8-4a72-9727-9e979ffdbb3a | OS::Heat::SoftwareConfig | CREATE_COMPLETE | 2016-02-24T12:17:19 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf-NodeUserData-qi5rikf2vs3r | | userdata | e74f1316-712f-4671-8d7a-3099cc7132ca | OS::Heat::MultipartMime | CREATE_COMPLETE | 2016-02-24T12:17:19 | overcloud-Compute-fdb52zqsuo5k-0-2k54jplbs6bf-NodeUserData-qi5rikf2vs3r | | swapon_config | a2466c2a-6269-4d0d-b68e-f6d20e0915db | OS::Heat::SoftwareConfig | CREATE_COMPLETE | 2016-02-24T12:17:21 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg-NodeUserData-nr6ixzosga5e | | user_config | 942f665a-e085-4010-ae9e-7c307d19a761 | OS::Heat::CloudConfig | CREATE_COMPLETE | 2016-02-24T12:17:21 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg-NodeAdminUserData-74fczcuplz55 | | userdata | 4b6f1b62-6cf3-45d2-8318-2526fe61c302 | OS::Heat::MultipartMime | CREATE_COMPLETE | 2016-02-24T12:17:21 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg-NodeUserData-nr6ixzosga5e | | userdata | c8b19ee6-d789-47f2-a7b1-4607fea62f0b | OS::Heat::MultipartMime | CREATE_COMPLETE | 2016-02-24T12:17:21 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg-NodeAdminUserData-74fczcuplz55 | | config | c5b83ca2-336d-4c15-9b91-f3f582a95e51 | OS::Heat::SoftwareConfig | CREATE_COMPLETE | 2016-02-24T12:17:22 | overcloud-Controller-3hewr3lbxngq-0-jimd45c2k5xg-UpdateConfig-gexelwiextkg | +-------------------------------------------+-----------------------------------------------+---------------------------------------------------+--------------------+---------------------+---------------------------------------------------------------------------------+ [stack@undercloud01 ~]$ Overcloud creation complete # Once the \u0026ldquo;openstack overcloud deploy\u0026rdquo; command finishes:\n[stack@undercloud01 ~]$ openstack overcloud deploy --templates /usr/share/openstack-tripleo-heat-templates --control-scale 1 --compute-scale 1 --neutron-tunnel-types vxlan --neutron-network-type vxlan --control-flavor control --compute-flavor compute -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml -e ~/templates/network-environment.yaml -e ~/templates/firstboot/firstboot.yaml Deploying templates in the directory /usr/share/openstack-tripleo-heat-templates It should output something similar to:\n/home/stack/.ssh/known_hosts updated. Original contents retained as /home/stack/.ssh/known_hosts.old PKI initialization in init-keystone is deprecated and will be removed. Warning: Permanently added \u0026#39;10.0.0.100\u0026#39; (ECDSA) to the list of known hosts. No handlers could be found for logger \u0026#34;oslo_config.cfg\u0026#34; 2016-02-24 21:27:21.064 26031 WARNING keystone.cmd.cli [-] keystone-manage pki_setup is not recommended for production use. The following cert files already exist, use --rebuild to remove the existing files before regenerating: /etc/keystone/ssl/certs/ca.pem already exists /etc/keystone/ssl/private/signing_key.pem already exists /etc/keystone/ssl/certs/signing_cert.pem already exists Connection to 10.0.0.100 closed. Overcloud Endpoint: http://10.0.0.100:5000/v2.0/ Overcloud Deployed [stack@undercloud01 ~]$ Connecting to new cloud # Immediately we can source the Undercloud file (stackrc) and the Overcloud file (overcloudrc) in turn to inspect the running OpenStack services and list of nova instances. See below for some examples, note that the service list for the Undercloud differs to the Overcloud.\n[stack@undercloud01 ~]$ . stackrc [stack@undercloud01 ~]$ openstack service list +----------------------------------+------------+---------------+ | ID | Name | Type | +----------------------------------+------------+---------------+ | 1a8cbbd1e49e4bb890f1858f1859e69a | nova | compute | | 2fbeef8a38b54851be650b6af155353f | swift | object-store | | 34935643c95e495d815d45b3396c4aa1 | heat | orchestration | | 36c6b4888d2a4e7b93205a3c4b03be32 | nova | computev3 | | 61eb15301e89487f9e9a68eb57b66196 | keystone | identity | | 89e567684ff74953a03ecd3a27383bb4 | neutron | network | | 9d4a707091614493b172ca4d8e74159e | ceilometer | metering | | a3528706832d44318a030995116ac2e7 | glance | image | | f1c0820c69a8466aa93b5ed22ba4df56 | ironic | baremetal | | f7f4c2f7545b4834a7728b946c67af69 | tuskar | management | +----------------------------------+------------+---------------+ [stack@undercloud01 ~]$ nova list +--------------------------------------+-------------------------+--------+------------+-------------+----------------------+ | ID | Name | Status | Task State | Power State | Networks | +--------------------------------------+-------------------------+--------+------------+-------------+----------------------+ | 576bd474-8bc1-4a0a-9991-b14498e85f73 | overcloud-controller-0 | ACTIVE | - | Running | ctlplane=172.16.0.10 | | 85c92cb7-c8fc-4fdb-b848-416635be5f45 | overcloud-novacompute-0 | ACTIVE | - | Running | ctlplane=172.16.0.9 | +--------------------------------------+-------------------------+--------+------------+-------------+----------------------+ [stack@undercloud01 ~]$ And the same commands for the overcloud:\n[stack@undercloud01 ~]$ . overcloudrc [stack@undercloud01 ~]$ openstack service list +----------------------------------+------------+---------------+ | ID | Name | Type | +----------------------------------+------------+---------------+ | 15c0fef324fc47d5851e5c7cc6b8ff99 | swift | object-store | | 2d37b99dfb2d4c85b074af04f7d0435b | nova | compute | | 2e6132d6ef9542a3bc234d2209c59e94 | cinderv2 | volumev2 | | 3b587260682d489ab1428c06857d0366 | horizon | dashboard | | 745ff6484cac41b7ba9c04f140b3877b | neutron | network | | 7e16510458f8427da684c9e8501c597f | heat | orchestration | | 84f00ea091664bb098c71f5504c90845 | cinder | volume | | 920a63ce54434b49b1455032ce4f716a | glance | image | | b54eeb4073094a8383770a94af93a564 | nova | computev3 | | c146ea983f0b4829a48ebb838b06dac0 | keystone | identity | | e20e34379ad544aab3f3388c7f4ba485 | ceilometer | metering | +----------------------------------+------------+---------------+ [stack@undercloud01 ~]$ nova list +----+------+--------+------------+-------------+----------+ | ID | Name | Status | Task State | Power State | Networks | +----+------+--------+------------+-------------+----------+ +----+------+--------+------------+-------------+----------+ [stack@undercloud01 ~]$ The Undercloud nova list gave us the IP\u0026rsquo;s for each Overcloud instances (172.16.0.10 and 172.16.0.9 in mycase). We can ssh to each as the user \u0026ldquo;heat-admin\u0026rdquo;, they key from the stack user on the undercloud01 machine are installed already. We can ask each\u0026rsquo;s hostname and \u0026ldquo;ip -4 a\u0026rdquo; information:\n[stack@undercloud01 ~]$ ssh heat-admin@172.16.0.10 hostname The authenticity of host \u0026#39;172.16.0.10 (172.16.0.10)\u0026#39; can\u0026#39;t be established. ECDSA key fingerprint is dc:0e:b4:c9:8e:f6:97:6b:ae:ac:46:b1:3f:94:aa:96. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added \u0026#39;172.16.0.10\u0026#39; (ECDSA) to the list of known hosts. overcloud-controller-0.localdomain [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ ssh heat-admin@172.16.0.10 /usr/sbin/ip -4 a 1: lo: \u0026lt;LOOPBACK,UP,LOWER_UP\u0026gt; mtu 65536 qdisc noqueue state UNKNOWN inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 172.16.0.10/24 brd 172.16.0.255 scope global eth0 valid_lft forever preferred_lft forever 6: vlan10: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc noqueue state UNKNOWN inet 10.0.10.13/24 brd 10.0.10.255 scope global vlan10 valid_lft forever preferred_lft forever inet 10.0.10.10/32 scope global vlan10 valid_lft forever preferred_lft forever 7: vlan13: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc noqueue state UNKNOWN inet 10.0.13.11/24 brd 10.0.13.255 scope global vlan13 valid_lft forever preferred_lft forever 8: br-ex: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc noqueue state UNKNOWN inet 10.0.0.101/24 brd 10.0.0.255 scope global br-ex valid_lft forever preferred_lft forever inet 172.16.0.8/32 scope global br-ex valid_lft forever preferred_lft forever inet 10.0.0.100/32 scope global br-ex valid_lft forever preferred_lft forever 9: vlan12: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc noqueue state UNKNOWN inet 10.0.12.11/24 brd 10.0.12.255 scope global vlan12 valid_lft forever preferred_lft forever inet 10.0.12.10/32 scope global vlan12 valid_lft forever preferred_lft forever 10: vlan11: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc noqueue state UNKNOWN inet 10.0.11.12/24 brd 10.0.11.255 scope global vlan11 valid_lft forever preferred_lft forever inet 10.0.11.10/32 scope global vlan11 valid_lft forever preferred_lft forever [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ ssh heat-admin@172.16.0.9 hostname The authenticity of host \u0026#39;172.16.0.9 (172.16.0.9)\u0026#39; can\u0026#39;t be established. ECDSA key fingerprint is 3b:18:8f:29:85:bc:c3:89:00:ff:34:c0:df:45:a9:37. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added \u0026#39;172.16.0.9\u0026#39; (ECDSA) to the list of known hosts. overcloud-novacompute-0 [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ ssh heat-admin@172.16.0.9 /usr/sbin/ip -4 a 1: lo: \u0026lt;LOOPBACK,UP,LOWER_UP\u0026gt; mtu 65536 qdisc noqueue state UNKNOWN inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet 172.16.0.9/24 brd 172.16.0.255 scope global eth0 valid_lft forever preferred_lft forever 7: vlan13: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc noqueue state UNKNOWN inet 10.0.13.10/24 brd 10.0.13.255 scope global vlan13 valid_lft forever preferred_lft forever 8: vlan10: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc noqueue state UNKNOWN inet 10.0.10.12/24 brd 10.0.10.255 scope global vlan10 valid_lft forever preferred_lft forever 9: vlan11: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc noqueue state UNKNOWN inet 10.0.11.11/24 brd 10.0.11.255 scope global vlan11 valid_lft forever preferred_lft forever [stack@undercloud01 ~]$ Using OpenStack on Overcloud # Initial configuration # The Overcloud OpenStack installation is now complete. This is where some guides finish, however I want to show a few things so that it can be used. This is where a little OpenStack knowledge is useful. The first thing I did was upload the Debian OpenStack cloud image. You could pick any cloud image you like. I used the glance command line to upload the image directly from a http location. You can use the \u0026ldquo;- -file\u0026rdquo; option instead of the \u0026ldquo;- -location\u0026rdquo; option to upload from the local filesystem.\n[stack@undercloud01 ~]$ . overcloudrc [stack@undercloud01 ~]$ glance image-create --name debian-8.3.0-openstack-amd64 --disk-format qcow2 --container-format bare --location http://cdimage.debian.org/mirror/cdimage/openstack/8.3.0/debian-8.3.0-openstack-amd64.qcow2 --is-public True --progress +------------------+--------------------------------------+ | Property | Value | +------------------+--------------------------------------+ | checksum | None | | container_format | bare | | created_at | 2016-02-24T21:42:33.000000 | | deleted | False | | deleted_at | None | | disk_format | qcow2 | | id | a3e7e6dc-8c13-490f-a9b8-13af664ea409 | | is_public | True | | min_disk | 0 | | min_ram | 0 | | name | debian-8.3.0-openstack-amd64 | | owner | 4919e54fb87d4016988853e30fed423f | | protected | False | | size | 552301568 | | status | active | | updated_at | 2016-02-24T21:42:34.000000 | | virtual_size | None | +------------------+--------------------------------------+ [stack@undercloud01 ~]$ If you fancy using the dashboard (Horizon) instead and having a play round you can. By default there is a virtual host, so unless you do some extra DNS configuration you need to make a new entry in the /etc/hosts file:\n$ echo \u0026#34;10.0.0.100 overcloud-controller-0.localdomain\u0026#34; | sudo tee -a /etc/hosts 10.0.0.100 overcloud-controller-0.localdomain $ Once this is done you can visit the horizon dashboard at http://overcloud-controller-0.localdomain/ the username is admin and the password is in /home/stack/overcloudrc file.\nRemote machine access # In our virtual example the 10.0.0.0/24 is the external network. This is available from the libvirt host machine. In essence access from the libvirt host (my laptop in my case) can been seen as access from the internet. If however you use a larger test machine or a desktop and want to work on another machine I found the sshuttle tool very useful. In essence, from anywhere you \u0026ldquo;sshuttle user@libvirtmachine 10.0.0.0/24\u0026rdquo; and on that local machine the 10.0.0.0/24 network is accessible.\nKick the tires with tempest # There is test suite for OpenStack and it gets configured by default. This is not necessary, however I found it interesting so I have left it in here. You run the tempest utility on the undercloud machine and it runs test against the new cloud. It does all sorts of things to make sure its working. Here is a sample output of a run I tried. The first step is to set it up for a run:\n[stack@undercloud01 ~]$ . overcloudrc [stack@undercloud01 ~]$ mkdir ~/tempest [stack@undercloud01 ~]$ cd ~/tempest [stack@undercloud01 tempest]$ /usr/share/openstack-tempest-liberty/tools/configure-tempest-directory [stack@undercloud01 tempest]$ [stack@undercloud01 tempest]$ tools/config_tempest.py --deployer-input ~/tempest-deployer-input.conf --debug --create identity.uri $OS_AUTH_URL identity.admin_password $OS_PASSWORD 2016-02-25 10:48:09.934 3142 INFO tempest [-] Using tempest config file /etc/tempest/tempest.conf 2016-02-25 10:48:10.057 3142 INFO __main__ [-] Reading defaults from file \u0026#39;/home/stack/tempest/etc/default-overrides.conf\u0026#39; 2016-02-25 10:48:10.059 3142 INFO __main__ [-] Adding options from deployer-input file \u0026#39;/home/stack/tempest-deployer-input.conf\u0026#39; \u0026lt;SNIP\u0026gt; 2016-02-25 10:49:24.500 3710 INFO __main__ [-] Creating configuration file /home/stack/tempest/etc/tempest.conf [stack@undercloud01 tempest]$ Then run the tests, which will take a long time. The below output is actually from my faster test machine and it took an hour and a half to compete. As you can see not all the test passed, I\u0026rsquo;m not sure why.\n[stack@undercloud01 tempest]$ tools/run-tests.sh \u0026lt;SNIP\u0026gt; ====== Totals ====== Ran: 1496 tests in 5570.0000 sec. - Passed: 1323 - Skipped: 109 - Expected Fail: 0 - Unexpected Success: 0 - Failed: 64 Sum of execute time for each test: 7021.6725 sec. ============== Worker Balance ============== - Worker 0 (706 tests) =\u0026gt; 1:16:35.859043 - Worker 1 (790 tests) =\u0026gt; 1:32:32.510836 [stack@undercloud01 tempest]$ Create project and user # Now to do some more fun things and actually start an instance. Going from a bare OpenStack deployment to running instance takes a few steps.\nFirstly create a new project and user:\n[stack@undercloud01 ~]$ openstack project create thomas +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | None | | enabled | True | | id | de53721d068640cca8fb9b93b1deb389 | | name | thomas | +-------------+----------------------------------+ [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ openstack user create thomas --project thomas --password oom8Wei4nie5eeTi --email thomas@stewarts.org.uk +------------+----------------------------------+ | Field | Value | +------------+----------------------------------+ | email | thomas@stewarts.org.uk | | enabled | True | | id | f7be4d65419841f19cb9285dc8bf726d | | name | thomas | | project_id | de53721d068640cca8fb9b93b1deb389 | | username | thomas | +------------+----------------------------------+ [stack@undercloud01 ~]$ Then a overcloudrc.thomas file can be created so that operations can be performed as that user:\n[stack@undercloud01 ~]$ cat overcloudrc.thomas export OS_USERNAME=thomas export OS_TENANT_NAME=thomas export OS_PASSWORD=oom8Wei4nie5eeTi [stack@undercloud01 ~]$ Setup external network # The next thing to do is create the external network. This will allow access from the instances to the 10.0.0.0/24 network and the libvirst host. Which in turn allows access to the internet be it NATed.\nFirst we can see we don\u0026rsquo;t have any existing networks or subnets:\n[stack@undercloud01 ~]$ neutron net-list [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ neutron subnet-list [stack@undercloud01 ~]$ We create the network with the \u0026ldquo;neutron net-create\u0026rdquo; command. The \u0026ldquo;- -shared\u0026rdquo; option makes this network available to other tenants. The \u0026ldquo;- -provider\u0026rdquo; options are a but more scary \u0026ldquo;datacenter\u0026rdquo; is a bridge. It\u0026rsquo;s this that makes the link form the virtual networking components to the outside (confusingly which are also virtual)\n[stack@undercloud01 ~]$ neutron net-create external --shared --router:external --provider:physical_network datacentre --provider:network_type flat Created a new network: +---------------------------+--------------------------------------+ | Field | Value | +---------------------------+--------------------------------------+ | admin_state_up | True | | id | d2a804ae-399b-43c8-911d-fede4032f7e1 | | mtu | 0 | | name | external | | provider:network_type | flat | | provider:physical_network | datacentre | | provider:segmentation_id | | | router:external | True | | shared | True | | status | ACTIVE | | subnets | | | tenant_id | 4919e54fb87d4016988853e30fed423f | +---------------------------+--------------------------------------+ [stack@undercloud01 ~]$ Next we create a subnet for this network, note that this matches the ExternalAllocationPools option from the ~/templates/network-environment.yaml file.\n[stack@undercloud01 ~]$ neutron subnet-create external 10.0.0.0/24 --name external --allocation-pool start=10.0.0.100,end=10.0.0.200 --dns-nameserver 10.0.0.1 --gateway 10.0.0.1 Created a new subnet: +-------------------+----------------------------------------------+ | Field | Value | +-------------------+----------------------------------------------+ | allocation_pools | {\u0026#34;start\u0026#34;: \u0026#34;10.0.0.100\u0026#34;, \u0026#34;end\u0026#34;: \u0026#34;10.0.0.200\u0026#34;} | | cidr | 10.0.0.0/24 | | dns_nameservers | 10.0.0.1 | | enable_dhcp | True | | gateway_ip | 10.0.0.1 | | host_routes | | | id | b400a503-0e58-4b53-8fe0-6509770f7eb4 | | ip_version | 4 | | ipv6_address_mode | | | ipv6_ra_mode | | | name | external | | network_id | d2a804ae-399b-43c8-911d-fede4032f7e1 | | subnetpool_id | | | tenant_id | 4919e54fb87d4016988853e30fed423f | +-------------------+----------------------------------------------+ [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ neutron subnet-list +--------------------------------------+----------+-------------+----------------------------------------------+ | id | name | cidr | allocation_pools | +--------------------------------------+----------+-------------+----------------------------------------------+ | b400a503-0e58-4b53-8fe0-6509770f7eb4 | external | 10.0.0.0/24 | {\u0026#34;start\u0026#34;: \u0026#34;10.0.0.100\u0026#34;, \u0026#34;end\u0026#34;: \u0026#34;10.0.0.200\u0026#34;} | +--------------------------------------+----------+-------------+----------------------------------------------+ [stack@undercloud01 ~]$ Start using new user # This is the end of the administrator setup. Next we can login as out new user and start using the new cloud.\n[stack@undercloud01 ~]$ . overcloudrc.thomas [stack@undercloud01 ~]$ Create private network # First create a new private network and subnet for our machine to connect to:\n[stack@undercloud01 ~]$ neutron net-create private Created a new network: +-----------------+--------------------------------------+ | Field | Value | +-----------------+--------------------------------------+ | admin_state_up | True | | id | 848f7024-822a-4d76-86fd-cb008282025d | | mtu | 0 | | name | private | | router:external | False | | shared | False | | status | ACTIVE | | subnets | | | tenant_id | de53721d068640cca8fb9b93b1deb389 | +-----------------+--------------------------------------+ [stack@undercloud01 ~]$ neutron subnet-create private 192.168.100.0/24 --name private --dns-nameserver 8.8.8.8 --gateway 192.168.100.1 Created a new subnet: +-------------------+------------------------------------------------------+ | Field | Value | +-------------------+------------------------------------------------------+ | allocation_pools | {\u0026#34;start\u0026#34;: \u0026#34;192.168.100.2\u0026#34;, \u0026#34;end\u0026#34;: \u0026#34;192.168.100.254\u0026#34;} | | cidr | 192.168.100.0/24 | | dns_nameservers | 8.8.8.8 | | enable_dhcp | True | | gateway_ip | 192.168.100.1 | | host_routes | | | id | 8cc4e632-d86c-4bd8-a23f-7ea043f43430 | | ip_version | 4 | | ipv6_address_mode | | | ipv6_ra_mode | | | name | private | | network_id | 848f7024-822a-4d76-86fd-cb008282025d | | subnetpool_id | | | tenant_id | de53721d068640cca8fb9b93b1deb389 | +-------------------+------------------------------------------------------+ [stack@undercloud01 ~]$ We will need to get traffic from the private network to the external network, so we need to create a router:\n[stack@undercloud01 ~]$ neutron router-create router Created a new router: +-----------------------+--------------------------------------+ | Field | Value | +-----------------------+--------------------------------------+ | admin_state_up | True | | external_gateway_info | | | id | 28b17ce6-dbe4-4e5b-9c0e-432021b263ad | | name | router | | routes | | | status | ACTIVE | | tenant_id | de53721d068640cca8fb9b93b1deb389 | +-----------------------+--------------------------------------+ [stack@undercloud01 ~]$ Now we have to connect them all together. Set the routers default gateway to be the external router and then add an interface on the router to connect to the private network:\n[stack@undercloud01 ~]$ neutron router-gateway-set router external Set gateway for router router [stack@undercloud01 ~]$ neutron router-interface-add router private Added interface 1271b2c0-b231-4da7-9e88-9ed3ac1f4215 to router router. [stack@undercloud01 ~]$ Create security groups # Next are the security group rules. You can create multiple different security groups according to function. However for speed we just want to modify the default group. We want to allow all ICMP and SSH traffic.\n[stack@undercloud01 ~]$ nova secgroup-list-rules default +-------------+-----------+---------+----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+----------+--------------+ | | | | | default | | | | | | default | +-------------+-----------+---------+----------+--------------+ [stack@undercloud01 ~]$ nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | icmp | -1 | -1 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+ [stack@undercloud01 ~]$ nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | tcp | 22 | 22 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+ [stack@undercloud01 ~]$ nova secgroup-list-rules default +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | | | | | default | | tcp | 22 | 22 | 0.0.0.0/0 | | | | | | | default | | icmp | -1 | -1 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+ [stack@undercloud01 ~]$ Once we do create an instance we want to be able to ssh into it. With cloud computing static passwords for new instances are not really used. There is a program called cloud-init that is able to get ssh keys into newly create instances. So we need to create a new key for use to use. I copy the key from my tesk laptop onto the undercloud machine and upload the key.\nCreate SSH key # [stack@undercloud01 ~]$ scp thomas@10.0.0.1:.ssh/id_rsa.pub thomas-lenovo.pub id_rsa.pub 100% 395 0.4KB/s 00:00 [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ openstack keypair create --public-key thomas-lenovo.pub thomas-lenovo +-------------+-------------------------------------------------+ | Field | Value | +-------------+-------------------------------------------------+ | fingerprint | 1f:16:7b:89:e0:3f:13:5d:3e:bb:8d:7c:37:0b:58:e0 | | name | thomas-lenovo | | user_id | f7be4d65419841f19cb9285dc8bf726d | +-------------+-------------------------------------------------+ [stack@undercloud01 ~]$ Create floating IP # Generate a floating IP for us to use:\n[stack@undercloud01 ~]$ openstack ip floating pool list +----------+ | Name | +----------+ | external | +----------+ [stack@undercloud01 ~]$ openstack ip floating list [stack@undercloud01 ~]$ openstack ip floating create external +-------------+--------------------------------------+ | Field | Value | +-------------+--------------------------------------+ | fixed_ip | None | | id | e85a88b9-6050-4368-897b-545dd7601a21 | | instance_id | None | | ip | 10.0.0.101 | | pool | external | +-------------+--------------------------------------+ [stack@undercloud01 ~]$ Gather information for instance creation # Get the ID of the image:\n[stack@undercloud01 ~]$ openstack image list +--------------------------------------+------------------------------+ | ID | Name | +--------------------------------------+------------------------------+ | a3e7e6dc-8c13-490f-a9b8-13af664ea409 | debian-8.3.0-openstack-amd64 | +--------------------------------------+------------------------------+ [stack@undercloud01 ~]$ openstack flavor list +--------------------------------------+-----------+-------+------+-----------+-------+-----------+ | ID | Name | RAM | Disk | Ephemeral | VCPUs | Is Public | +--------------------------------------+-----------+-------+------+-----------+-------+-----------+ | 1 | m1.tiny | 512 | 1 | 0 | 1 | True | | 2 | m1.small | 2048 | 20 | 0 | 1 | True | | 3 | m1.medium | 4096 | 40 | 0 | 2 | True | | 4 | m1.large | 8192 | 80 | 0 | 4 | True | | 5 | m1.xlarge | 16384 | 160 | 0 | 8 | True | | a7cfedbc-2764-4f67-ab93-dcf1290e7387 | m1.demo | 512 | 10 | 0 | 1 | True | +--------------------------------------+-----------+-------+------+-----------+-------+-----------+ [stack@undercloud01 ~]$ Get the ID of the private subnet:\n[stack@undercloud01 ~]$ openstack network list +--------------------------------------+----------+--------------------------------------+ | ID | Name | Subnets | +--------------------------------------+----------+--------------------------------------+ | 848f7024-822a-4d76-86fd-cb008282025d | private | 8cc4e632-d86c-4bd8-a23f-7ea043f43430 | | d2a804ae-399b-43c8-911d-fede4032f7e1 | external | b400a503-0e58-4b53-8fe0-6509770f7eb4 | +--------------------------------------+----------+--------------------------------------+ [stack@undercloud01 ~]$ Create instance # [stack@undercloud01 ~]$ openstack server create --image debian-8.3.0-openstack-amd64 --flavor m1.small --key-name thomas-lenovo --nic net-id=private my_instance +--------------------------------------+---------------------------------------------------------------------+ | Field | Value | +--------------------------------------+---------------------------------------------------------------------+ | OS-DCF:diskConfig | MANUAL | | OS-EXT-AZ:availability_zone | | | OS-EXT-STS:power_state | 0 | | OS-EXT-STS:task_state | scheduling | | OS-EXT-STS:vm_state | building | | OS-SRV-USG:launched_at | None | | OS-SRV-USG:terminated_at | None | | accessIPv4 | | | accessIPv6 | | | addresses | | | adminPass | uHZq5raRkUMT | | config_drive | | | created | 2016-03-18T11:46:28Z | | flavor | m1.small (2) | | hostId | | | id | 77ab1773-b431-4812-963d-41f5db3bd2b4 | | image | debian-8.3.0-openstack-amd64 (e06f3280-3a0b-4c46-a9c5-91cae4b6a787) | | key_name | thomas | | name | my_instance | | os-extended-volumes:volumes_attached | [] | | progress | 0 | | project_id | 09bb44d7f42a49e9a6e98b64a277396a | | properties | | | security_groups | [{u\u0026#39;name\u0026#39;: u\u0026#39;default\u0026#39;}] | | status | BUILD | | updated | 2016-03-18T11:46:28Z | | user_id | f7ed24d64c03441a9586021abbbb92f8 | +--------------------------------------+---------------------------------------------------------------------+ [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ openstack ip floating add 10.0.0.104 my_instance [stack@undercloud01 ~]$ Instance is up # [stack@undercloud01 ~]$ ping -c 1 10.0.0.101 PING 10.0.0.101 (10.0.0.101) 56(84) bytes of data. 64 bytes from 10.0.0.101: icmp_seq=1 ttl=63 time=0.966 ms --- 10.0.0.104 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.966/0.966/0.966/0.000 ms [stack@undercloud01 ~]$ nc 10.0.0.101 22 SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u1 ^C [stack@undercloud01 ~]$ SSH to instance # [stack@undercloud01 ~]$ ssh debian@10.0.0.101 The authenticity of host \u0026#39;10.0.0.101 (10.0.0.101)\u0026#39; can\u0026#39;t be established. ECDSA key fingerprint is SHA256:nk4PviGqnBP0mz9Smf+14At2iZRIsYOrJss3+dOOWi4. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added \u0026#39;10.0.0.101\u0026#39; (ECDSA) to the list of known hosts. The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. X11 forwarding request failed debian@my-instance:~$ debian@my-instance:~$ df -h / Filesystem Size Used Avail Use% Mounted on /dev/vda1 20G 847M 19G 5% / debian@my-instance:~$ free -m total used free shared buffers cached Mem: 2010 110 1899 5 12 53 -/+ buffers/cache: 44 1966 Swap: 0 0 0 debian@my-instance:~$ debian@my-instance:~$ exit logout Connection to 10.0.0.101 closed. [stack@undercloud01 ~]$ Destroy instance # [stack@undercloud01 ~]$ openstack server list +--------------------------------------+-------------+--------+-----------------------------------+ | ID | Name | Status | Networks | +--------------------------------------+-------------+--------+-----------------------------------+ | 77ab1773-b431-4812-963d-41f5db3bd2b4 | my_instance | ACTIVE | private=192.168.100.5, 10.0.0.101 | +--------------------------------------+-------------+--------+-----------------------------------+ [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ openstack server delete my_instance [stack@undercloud01 ~]$ openstack server list [stack@undercloud01 ~]$ Heat example # [stack@undercloud01 ~]$ cat simple_template.yaml heat_template_version: 2015-04-30 description: Simple template to deploy a single compute instance resources: my_instance: type: OS::Nova::Server properties: key_name: thomas image: debian-8.3.0-openstack-amd64 flavor: m1.small networks: - network: private [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ heat stack-create -f simple_template.yaml my_stack +--------------------------------------+------------+--------------------+---------------------+--------------+ | id | stack_name | stack_status | creation_time | updated_time | +--------------------------------------+------------+--------------------+---------------------+--------------+ | 1c2b2007-faa3-4c2c-aed6-231e2416a511 | my_stack | CREATE_IN_PROGRESS | 2016-03-18T12:06:41 | None | +--------------------------------------+------------+--------------------+---------------------+--------------+ [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ heat stack-list +--------------------------------------+------------+-----------------+---------------------+--------------+ | id | stack_name | stack_status | creation_time | updated_time | +--------------------------------------+------------+-----------------+---------------------+--------------+ | 1c2b2007-faa3-4c2c-aed6-231e2416a511 | my_stack | CREATE_COMPLETE | 2016-03-18T12:06:41 | None | +--------------------------------------+------------+-----------------+---------------------+--------------+ [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ openstack server list +--------------------------------------+-----------------------------------+--------+-----------------------+ | ID | Name | Status | Networks | +--------------------------------------+-----------------------------------+--------+-----------------------+ | 403ed7c5-78bf-4303-af46-84faa375a7e8 | my_stack-my_instance-c3rcyfo5da7a | ACTIVE | private=192.168.100.6 | +--------------------------------------+-----------------------------------+--------+-----------------------+ [stack@undercloud01 ~]$ [stack@undercloud01 ~]$ heat stack-delete my_stack +--------------------------------------+------------+--------------------+---------------------+--------------+ | id | stack_name | stack_status | creation_time | updated_time | +--------------------------------------+------------+--------------------+---------------------+--------------+ | 1c2b2007-faa3-4c2c-aed6-231e2416a511 | my_stack | DELETE_IN_PROGRESS | 2016-03-18T12:06:41 | None | +--------------------------------------+------------+--------------------+---------------------+--------------+ [stack@undercloud01 ~]$ heat stack-list +----+------------+--------------+---------------+--------------+ | id | stack_name | stack_status | creation_time | updated_time | +----+------------+--------------+---------------+--------------+ +----+------------+--------------+---------------+--------------+ [stack@undercloud01 ~]$ ","date":"18 March 2016","externalUrl":null,"permalink":"/projects/openstackpoc/","section":"Projects","summary":"Introduction # This is a short howto on creating a small OpenStack proof of concept on CentOS. The aim is to create a proof of concept OpenStack Liberty deployment on a single Linux testing machine, where the deployment matches real world hardware deployments. The aim is not to just install all the OpenStack components in a single machine or virtual machine. The aim is to make use of Linux, KVM and libvirt to create virtual hardware to run the various OpenStack components to match a real world deployment. Each virtual machine represents what could be a physical host. It will use CentOS 7 as the base operating system and use the RDO OpenStack packages. This matches the Red Hat OpenStack Platform, however does not need subscriptions to install and test.\n","title":"OpenStack proof of concept","type":"projects"},{"content":" Intro # So I have an old Western Digital Sharespace NAS box that I used to use as my main home NAS. I\u0026rsquo;ve long since switched it off, support for it has more or less finished, there have been no updates in ages and the new WD support site does not list it anymore. That said it seems a shame to skip it so I tried a few times to re-purpose it. I did get root when I first got it, but was never able to do anything more as it had all my files on. After I stopped using it for a while I forgot about it. Some time later I found a few posts on the debian-arm mailing list from David Hicks, he had managed to get Debian installed at working! Yay I thought so I emailed him and he very helpfully gave me some instructions and some patches to get me started. Unfortunately I fell at the first hurdle and could not get the console working. Embarrassingly I had not turned flow control off within the minicom settings. After 18 months while working on a serial console for a Raspberry Pi it dawned on me that it was my mistake. So I got out the box and console cable and decided to have another go.\nA big thanks to David Hicks for giving me the right kernel patch and sending me in the right direction. To Western Digital\u0026rsquo;s credit they did release a GPL.zip type zip that appeared to contain a build system, gcc, kernel etc. However actually unpicking all the .config.old, .config.old2 files would have taken an age. Plus given that the Sharespace board is very much like the arm orion5x, the patch to get it working is not that big, so does not need the mountain of changes that Western Digital applied. I have attached the patch to this page.\nI have basically documented the entire process, rather than a list of commands to type, it\u0026rsquo;s more of a command log. That way if anyone does want to repeat, they can at least understand what to expect to see. Given this it\u0026rsquo;s rather longer than I expected. The original running Linux is too old to chroot into a new Linux and I did not try to get perl working in order to run debootstrap natively. So the process involved cross compiling a kernel and booting that in order to debootstrap a new system install.\nThe process:\ncreate some chroots compile kernel create initrd boot new kernel extract debootstrap and finish to temp partition which can act as rescue in case of later errors create actual system on raid1 and copy to there reboot do some clean up, backup mtd, setup uboot to boot automatically Some links:\nhttp://www.arm.linux.org.uk/developer/machines/ http://www.arm.linux.org.uk/developer/machines/list.php?id=3140 http://westerndigital.nas-central.org/wiki/Category:ShareSpace http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/tools/mach-types Patch:\nv3.10-sharespace.patch Setup Environment # Create a work area:\nthomas@diamond ~ $ mkdir /srv/store/sharespace thomas@diamond ~ $ cd /srv/store/sharespace thomas@diamond ~ $ Older kernels don\u0026rsquo;t know how to use gcc5, so create a jessie chroot to do some compiling:\nthomas@diamond /srv/store/sharespace $ sudo debootstrap --include=devio,u-boot-tools,build-essential,kernel-package,locales,curl,telnet,sudo jessie /srv/store/sharespace/jessie-x86_64/ http://httpredir.debian.org/debian/ I: Retrieving Release I: Retrieving Release.gpg I: Checking Release signature I: Valid Release signature (key id 75DDC3C4A499F1A18CB5F3C8CBF8D6FD518E17E1) I: Retrieving Packages I: Validating Packages I: Resolving dependencies of required packages... I: Resolving dependencies of base packages... I: Found additional required dependencies: acl adduser dmsetup insserv libaudit-common libaudit1 libbz2-1.0 libcap2 libcap2-bin libcryptsetup4 libdb5.3 libdebconfclient0 libdevmapper1.02.1 libgcrypt20 libgpg-error0 libkmod2 libncursesw5 libprocps3 libsemanage-common libsemanage1 libslang2 libsystemd0 libudev1 libustr-1.0-1 procps systemd systemd-sysv udev I: Found additional base dependencies: bc binutils bzip2 cpp cpp-4.9 docbook-xml docbook-xsl dpkg-dev file g++ g++-3.9 gcc gcc-4.9 gettext gettext-base intltool-debian libasan1 libasprintf0c2 libatomic1 libc-dev-bin libc6-dev libcilkrts5 libcloog-isl4 libcroco3 libcurl3 libdns-export100 libdpkg-perl libffi6 libgcc-4.9-dev libglib2.0-0 libgmp10 libgnutls-deb0-28 libgnutls-openssl27 libgomp1 libgssapi-krb5-2 libhogweed2 libicu52 libidn11 libirs-export91 libisc-export95 libisccfg-export90 libisl10 libitm1 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libldap-2.4-2 liblsan0 libmagic1 libmnl0 libmpc3 libmpfr4 libnetfilter-acct1 libnettle4 libnfnetlink0 libp11-kit0 libpsl0 libquadmath0 librtmp1 libsasl2-2 libsasl2-modules-db libssh2-1 libstdc++-4.9-dev libtasn1-6 libtimedate-perl libtsan0 libubsan0 libunistring0 libxml2 libxml2-utils libxslt1.1 linux-libc-dev lzma make patch perl perl-modules po-debconf sgml-base sgml-data xml-core xmlto xsltproc xz-utils I: Checking component main on http://httpredir.debian.org/debian... I: Retrieving acl 2.2.52-2 I: Validating acl 2.2.52-2 I: Retrieving libacl1 2.2.52-2 I: Validating libacl1 2.2.52-2 I: Retrieving adduser 3.113+nmu3 I: Validating adduser 3.113+nmu3 I: Retrieving apt 1.0.9.8.1 I: Validating apt 1.0.9.8.1 I: Retrieving apt-utils 1.0.9.8.1 I: Validating apt-utils 1.0.9.8.1 I: Retrieving libapt-inst1.5 1.0.9.8.1 I: Validating libapt-inst1.5 1.0.9.8.1 I: Retrieving libapt-pkg4.12 1.0.9.8.1 I: Validating libapt-pkg4.12 1.0.9.8.1 I: Retrieving libattr1 1:2.4.47-2 I: Validating libattr1 1:2.4.47-2 I: Retrieving libaudit-common 1:2.4-1 I: Validating libaudit-common 1:2.4-1 I: Retrieving libaudit1 1:2.4-1+b1 I: Validating libaudit1 1:2.4-1+b1 I: Retrieving base-files 8+deb8u2 I: Validating base-files 8+deb8u2 I: Retrieving base-passwd 3.5.37 I: Validating base-passwd 3.5.37 I: Retrieving bash 4.3-11+b1 I: Validating bash 4.3-11+b1 I: Retrieving bc 1.06.95-9 I: Validating bc 1.06.95-9 I: Retrieving libdns-export100 1:9.9.5.dfsg-9+deb8u2 I: Validating libdns-export100 1:9.9.5.dfsg-9+deb8u2 I: Retrieving libirs-export91 1:9.9.5.dfsg-9+deb8u2 I: Validating libirs-export91 1:9.9.5.dfsg-9+deb8u2 I: Retrieving libisc-export95 1:9.9.5.dfsg-9+deb8u2 I: Validating libisc-export95 1:9.9.5.dfsg-9+deb8u2 I: Retrieving libisccfg-export90 1:9.9.5.dfsg-9+deb8u2 I: Validating libisccfg-export90 1:9.9.5.dfsg-9+deb8u2 I: Retrieving binutils 2.25-5 I: Validating binutils 2.25-5 I: Retrieving libboost-iostreams1.55.0 1.55.0+dfsg-3 I: Validating libboost-iostreams1.55.0 1.55.0+dfsg-3 I: Retrieving bsdmainutils 9.0.6 I: Validating bsdmainutils 9.0.6 I: Retrieving build-essential 11.7 I: Validating build-essential 11.7 I: Retrieving bzip2 1.0.6-7+b3 I: Validating bzip2 1.0.6-7+b3 I: Retrieving libbz2-1.0 1.0.6-7+b3 I: Validating libbz2-1.0 1.0.6-7+b3 I: Retrieving libdebconfclient0 0.192 I: Validating libdebconfclient0 0.192 I: Retrieving libcloog-isl4 0.18.2-1+b2 I: Validating libcloog-isl4 0.18.2-1+b2 I: Retrieving coreutils 8.23-4 I: Validating coreutils 8.23-4 I: Retrieving cpio 2.11+dfsg-4.1 I: Validating cpio 2.11+dfsg-4.1 I: Retrieving cron 3.0pl1-127+deb8u1 I: Validating cron 3.0pl1-127+deb8u1 I: Retrieving libcryptsetup4 2:1.6.6-5 I: Validating libcryptsetup4 2:1.6.6-5 I: Retrieving curl 7.38.0-4+deb8u2 I: Validating curl 7.38.0-4+deb8u2 I: Retrieving libcurl3 7.38.0-4+deb8u2 I: Validating libcurl3 7.38.0-4+deb8u2 I: Retrieving libsasl2-2 2.1.26.dfsg1-13 I: Validating libsasl2-2 2.1.26.dfsg1-13 I: Retrieving libsasl2-modules-db 2.1.26.dfsg1-13 I: Validating libsasl2-modules-db 2.1.26.dfsg1-13 I: Retrieving dash 0.5.7-4+b1 I: Validating dash 0.5.7-4+b1 I: Retrieving libdb5.3 5.3.28-9 I: Validating libdb5.3 5.3.28-9 I: Retrieving debconf 1.5.56 I: Validating debconf 1.5.56 I: Retrieving debconf-i18n 1.5.56 I: Validating debconf-i18n 1.5.56 I: Retrieving debian-archive-keyring 2014.3 I: Validating debian-archive-keyring 2014.3 I: Retrieving debianutils 4.4+b1 I: Validating debianutils 4.4+b1 I: Retrieving devio 1.2-1+b1 I: Validating devio 1.2-1+b1 I: Retrieving diffutils 1:3.3-1+b1 I: Validating diffutils 1:3.3-1+b1 I: Retrieving dmidecode 2.12-3 I: Validating dmidecode 2.12-3 I: Retrieving docbook-xml 4.5-7.2 I: Validating docbook-xml 4.5-7.2 I: Retrieving docbook-xsl 1.78.1+dfsg-1 I: Validating docbook-xsl 1.78.1+dfsg-1 I: Retrieving dpkg 1.17.25 I: Validating dpkg 1.17.25 I: Retrieving dpkg-dev 1.17.25 I: Validating dpkg-dev 1.17.25 I: Retrieving libdpkg-perl 1.17.25 I: Validating libdpkg-perl 1.17.25 I: Retrieving e2fslibs 1.42.12-1.1 I: Validating e2fslibs 1.42.12-1.1 I: Retrieving e2fsprogs 1.42.12-1.1 I: Validating e2fsprogs 1.42.12-1.1 I: Retrieving libcomerr2 1.42.12-1.1 I: Validating libcomerr2 1.42.12-1.1 I: Retrieving libss2 1.42.12-1.1 I: Validating libss2 1.42.12-1.1 I: Retrieving file 1:5.22+15-2 I: Validating file 1:5.22+15-2 I: Retrieving libmagic1 1:5.22+15-2 I: Validating libmagic1 1:5.22+15-2 I: Retrieving findutils 4.4.2-9+b1 I: Validating findutils 4.4.2-9+b1 I: Retrieving gcc-4.8-base 4.8.4-1 I: Validating gcc-4.8-base 4.8.4-1 I: Retrieving cpp-4.9 4.9.2-10 I: Validating cpp-4.9 4.9.2-10 I: Retrieving g++-4.9 4.9.2-10 I: Validating g++-4.9 4.9.2-10 I: Retrieving gcc-4.9 4.9.2-10 I: Validating gcc-4.9 4.9.2-10 I: Retrieving gcc-4.9-base 4.9.2-10 I: Validating gcc-4.9-base 4.9.2-10 I: Retrieving libasan1 4.9.2-10 I: Validating libasan1 4.9.2-10 I: Retrieving libatomic1 4.9.2-10 I: Validating libatomic1 4.9.2-10 I: Retrieving libcilkrts5 4.9.2-10 I: Validating libcilkrts5 4.9.2-10 I: Retrieving libgcc-4.9-dev 4.9.2-10 I: Validating libgcc-4.9-dev 4.9.2-10 I: Retrieving libgcc1 1:4.9.2-10 I: Validating libgcc1 1:4.9.2-10 I: Retrieving libgomp1 4.9.2-10 I: Validating libgomp1 4.9.2-10 I: Retrieving libitm1 4.9.2-10 I: Validating libitm1 4.9.2-10 I: Retrieving liblsan0 4.9.2-10 I: Validating liblsan0 4.9.2-10 I: Retrieving libquadmath0 4.9.2-10 I: Validating libquadmath0 4.9.2-10 I: Retrieving libstdc++-4.9-dev 4.9.2-10 I: Validating libstdc++-4.9-dev 4.9.2-10 I: Retrieving libstdc++6 4.9.2-10 I: Validating libstdc++6 4.9.2-10 I: Retrieving libtsan0 4.9.2-10 I: Validating libtsan0 4.9.2-10 I: Retrieving libubsan0 4.9.2-10 I: Validating libubsan0 4.9.2-10 I: Retrieving cpp 4:4.9.2-2 I: Validating cpp 4:4.9.2-2 I: Retrieving g++ 4:4.9.2-2 I: Validating g++ 4:4.9.2-2 I: Retrieving gcc 4:4.9.2-2 I: Validating gcc 4:4.9.2-2 I: Retrieving libgdbm3 1.8.3-13.1 I: Validating libgdbm3 1.8.3-13.1 I: Retrieving gettext 0.19.3-2 I: Validating gettext 0.19.3-2 I: Retrieving gettext-base 0.19.3-2 I: Validating gettext-base 0.19.3-2 I: Retrieving libasprintf0c2 0.19.3-2 I: Validating libasprintf0c2 0.19.3-2 I: Retrieving libglib2.0-0 2.42.1-1 I: Validating libglib2.0-0 2.42.1-1 I: Retrieving libc-bin 2.19-18+deb8u1 I: Validating libc-bin 2.19-18+deb8u1 I: Retrieving libc-dev-bin 2.19-18+deb8u1 I: Validating libc-dev-bin 2.19-18+deb8u1 I: Retrieving libc6 2.19-18+deb8u1 I: Validating libc6 2.19-18+deb8u1 I: Retrieving libc6-dev 2.19-18+deb8u1 I: Validating libc6-dev 2.19-18+deb8u1 I: Retrieving locales 2.19-18+deb8u1 I: Validating locales 2.19-18+deb8u1 I: Retrieving multiarch-support 2.19-18+deb8u1 I: Validating multiarch-support 2.19-18+deb8u1 I: Retrieving libgmp10 2:6.0.0+dfsg-6 I: Validating libgmp10 2:6.0.0+dfsg-6 I: Retrieving gnupg 1.4.18-7 I: Validating gnupg 1.4.18-7 I: Retrieving gpgv 1.4.18-7 I: Validating gpgv 1.4.18-7 I: Retrieving libgnutls-deb0-28 3.3.8-6+deb8u3 I: Validating libgnutls-deb0-28 3.3.8-6+deb8u3 I: Retrieving libgnutls-openssl27 3.3.8-6+deb8u3 I: Validating libgnutls-openssl27 3.3.8-6+deb8u3 I: Retrieving grep 2.20-4.1 I: Validating grep 2.20-4.1 I: Retrieving groff-base 1.22.2-8 I: Validating groff-base 1.22.2-8 I: Retrieving gzip 1.6-4 I: Validating gzip 1.6-4 I: Retrieving hostname 3.15 I: Validating hostname 3.15 I: Retrieving libicu52 52.1-8+deb8u2 I: Validating libicu52 52.1-8+deb8u2 I: Retrieving ifupdown 0.7.53.1 I: Validating ifupdown 0.7.53.1 I: Retrieving init 1.22 I: Validating init 1.22 I: Retrieving init-system-helpers 1.22 I: Validating init-system-helpers 1.22 I: Retrieving insserv 1.14.0-5 I: Validating insserv 1.14.0-5 I: Retrieving intltool-debian 0.35.0+20060710.1 I: Validating intltool-debian 0.35.0+20060710.1 I: Retrieving iproute2 3.16.0-2 I: Validating iproute2 3.16.0-2 I: Retrieving iptables 1.4.21-2+b1 I: Validating iptables 1.4.21-2+b1 I: Retrieving libxtables10 1.4.21-2+b1 I: Validating libxtables10 1.4.21-2+b1 I: Retrieving iputils-ping 3:20121221-5+b2 I: Validating iputils-ping 3:20121221-5+b2 I: Retrieving isc-dhcp-client 4.3.1-6 I: Validating isc-dhcp-client 4.3.1-6 I: Retrieving isc-dhcp-common 4.3.1-6 I: Validating isc-dhcp-common 4.3.1-6 I: Retrieving libisl10 0.12.2-2 I: Validating libisl10 0.12.2-2 I: Retrieving libjson-c2 0.11-4 I: Validating libjson-c2 0.11-4 I: Retrieving kernel-package 13.014+nmu1 I: Validating kernel-package 13.014+nmu1 I: Retrieving libkeyutils1 1.5.9-5+b1 I: Validating libkeyutils1 1.5.9-5+b1 I: Retrieving kmod 18-3 I: Validating kmod 18-3 I: Retrieving libkmod2 18-3 I: Validating libkmod2 18-3 I: Retrieving libgssapi-krb5-2 1.12.1+dfsg-19 I: Validating libgssapi-krb5-2 1.12.1+dfsg-19 I: Retrieving libk5crypto3 1.12.1+dfsg-19 I: Validating libk5crypto3 1.12.1+dfsg-19 I: Retrieving libkrb5-3 1.12.1+dfsg-19 I: Validating libkrb5-3 1.12.1+dfsg-19 I: Retrieving libkrb5support0 1.12.1+dfsg-19 I: Validating libkrb5support0 1.12.1+dfsg-19 I: Retrieving less 458-3 I: Validating less 458-3 I: Retrieving libcap2 1:2.24-8 I: Validating libcap2 1:2.24-8 I: Retrieving libcap2-bin 1:2.24-8 I: Validating libcap2-bin 1:2.24-8 I: Retrieving libcroco3 0.6.8-3+b1 I: Validating libcroco3 0.6.8-3+b1 I: Retrieving libestr0 0.1.9-1.1 I: Validating libestr0 0.1.9-1.1 I: Retrieving libffi6 3.1-2+b2 I: Validating libffi6 3.1-2+b2 I: Retrieving libgcrypt20 1.6.3-2 I: Validating libgcrypt20 1.6.3-2 I: Retrieving libgpg-error0 1.17-3 I: Validating libgpg-error0 1.17-3 I: Retrieving libidn11 1.29-1+b2 I: Validating libidn11 1.29-1+b2 I: Retrieving liblocale-gettext-perl 1.05-8+b1 I: Validating liblocale-gettext-perl 1.05-8+b1 I: Retrieving liblogging-stdlog0 1.0.4-1 I: Validating liblogging-stdlog0 1.0.4-1 I: Retrieving liblognorm1 1.0.1-3 I: Validating liblognorm1 1.0.1-3 I: Retrieving libmnl0 1.0.3-5 I: Validating libmnl0 1.0.3-5 I: Retrieving libnetfilter-acct1 1.0.2-1.1 I: Validating libnetfilter-acct1 1.0.2-1.1 I: Retrieving libnfnetlink0 1.0.1-3 I: Validating libnfnetlink0 1.0.1-3 I: Retrieving libpipeline1 1.4.0-1 I: Validating libpipeline1 1.4.0-1 I: Retrieving libpsl0 0.5.1-1 I: Validating libpsl0 0.5.1-1 I: Retrieving libselinux1 2.3-2 I: Validating libselinux1 2.3-2 I: Retrieving libsemanage-common 2.3-1 I: Validating libsemanage-common 2.3-1 I: Retrieving libsemanage1 2.3-1+b1 I: Validating libsemanage1 2.3-1+b1 I: Retrieving libsepol1 2.3-2 I: Validating libsepol1 2.3-2 I: Retrieving libsigc++-2.0-0c2a 2.4.0-1 I: Validating libsigc++-2.0-0c2a 2.4.0-1 I: Retrieving libssh2-1 1.4.3-4.1 I: Validating libssh2-1 1.4.3-4.1 I: Retrieving libtasn1-6 4.2-3+deb8u1 I: Validating libtasn1-6 4.2-3+deb8u1 I: Retrieving libtext-charwidth-perl 0.04-7+b3 I: Validating libtext-charwidth-perl 0.04-7+b3 I: Retrieving libtext-iconv-perl 1.7-5+b2 I: Validating libtext-iconv-perl 1.7-5+b2 I: Retrieving libtext-wrapi18n-perl 0.06-7 I: Validating libtext-wrapi18n-perl 0.06-7 I: Retrieving libtimedate-perl 2.3000-2 I: Validating libtimedate-perl 2.3000-2 I: Retrieving libunistring0 0.9.3-5.2+b1 I: Validating libunistring0 0.9.3-5.2+b1 I: Retrieving libusb-0.1-4 2:0.1.12-25 I: Validating libusb-0.1-4 2:0.1.12-25 I: Retrieving libxml2 2.9.1+dfsg1-5 I: Validating libxml2 2.9.1+dfsg1-5 I: Retrieving libxml2-utils 2.9.1+dfsg1-5 I: Validating libxml2-utils 2.9.1+dfsg1-5 I: Retrieving libxslt1.1 1.1.28-2+b2 I: Validating libxslt1.1 1.1.28-2+b2 I: Retrieving xsltproc 1.1.28-2+b2 I: Validating xsltproc 1.1.28-2+b2 I: Retrieving linux-libc-dev 3.16.7-ckt11-1+deb8u3 I: Validating linux-libc-dev 3.16.7-ckt11-1+deb8u3 I: Retrieving logrotate 3.8.7-1+b1 I: Validating logrotate 3.8.7-1+b1 I: Retrieving lsb-base 4.1+Debian13+nmu1 I: Validating lsb-base 4.1+Debian13+nmu1 I: Retrieving dmsetup 2:1.02.90-2.2 I: Validating dmsetup 2:1.02.90-2.2 I: Retrieving libdevmapper1.02.1 2:1.02.90-2.2 I: Validating libdevmapper1.02.1 2:1.02.90-2.2 I: Retrieving lzma 9.22-2 I: Validating lzma 9.22-2 I: Retrieving make 4.0-8.1 I: Validating make 4.0-8.1 I: Retrieving man-db 2.7.0.2-5 I: Validating man-db 2.7.0.2-5 I: Retrieving manpages 3.74-1 I: Validating manpages 3.74-1 I: Retrieving mawk 1.3.3-17 I: Validating mawk 1.3.3-17 I: Retrieving libmpc3 1.0.2-1 I: Validating libmpc3 1.0.2-1 I: Retrieving libmpfr4 3.1.2-2 I: Validating libmpfr4 3.1.2-2 I: Retrieving nano 2.2.6-3 I: Validating nano 2.2.6-3 I: Retrieving libncurses5 5.9+20140913-1+b1 I: Validating libncurses5 5.9+20140913-1+b1 I: Retrieving libncursesw5 5.9+20140913-1+b1 I: Validating libncursesw5 5.9+20140913-1+b1 I: Retrieving libtinfo5 5.9+20140913-1+b1 I: Validating libtinfo5 5.9+20140913-1+b1 I: Retrieving ncurses-base 5.9+20140913-1 I: Validating ncurses-base 5.9+20140913-1 I: Retrieving ncurses-bin 5.9+20140913-1+b1 I: Validating ncurses-bin 5.9+20140913-1+b1 I: Retrieving net-tools 1.60-26+b1 I: Validating net-tools 1.60-26+b1 I: Retrieving netbase 5.3 I: Validating netbase 5.3 I: Retrieving netcat-traditional 1.10-41 I: Validating netcat-traditional 1.10-41 I: Retrieving telnet 0.17-36 I: Validating telnet 0.17-36 I: Retrieving libhogweed2 2.7.1-5 I: Validating libhogweed2 2.7.1-5 I: Retrieving libnettle4 2.7.1-5 I: Validating libnettle4 2.7.1-5 I: Retrieving libnewt0.52 0.52.17-1+b1 I: Validating libnewt0.52 0.52.17-1+b1 I: Retrieving whiptail 0.52.17-1+b1 I: Validating whiptail 0.52.17-1+b1 I: Retrieving nfacct 1.0.1-1.1 I: Validating nfacct 1.0.1-1.1 I: Retrieving libldap-2.4-2 2.4.40+dfsg-1 I: Validating libldap-2.4-2 2.4.40+dfsg-1 I: Retrieving libssl1.0.0 1.0.1k-3+deb8u1 I: Validating libssl1.0.0 1.0.1k-3+deb8u1 I: Retrieving libp11-kit0 0.20.7-1 I: Validating libp11-kit0 0.20.7-1 I: Retrieving libpam-modules 1.1.8-3.1 I: Validating libpam-modules 1.1.8-3.1 I: Retrieving libpam-modules-bin 1.1.8-3.1 I: Validating libpam-modules-bin 1.1.8-3.1 I: Retrieving libpam-runtime 1.1.8-3.1 I: Validating libpam-runtime 1.1.8-3.1 I: Retrieving libpam0g 1.1.8-3.1 I: Validating libpam0g 1.1.8-3.1 I: Retrieving patch 2.7.5-1 I: Validating patch 2.7.5-1 I: Retrieving libpcre3 2:8.35-3.3 I: Validating libpcre3 2:8.35-3.3 I: Retrieving perl 5.20.2-3+deb8u1 I: Validating perl 5.20.2-3+deb8u1 I: Retrieving perl-base 5.20.2-3+deb8u1 I: Validating perl-base 5.20.2-3+deb8u1 I: Retrieving perl-modules 5.20.2-3+deb8u1 I: Validating perl-modules 5.20.2-3+deb8u1 I: Retrieving po-debconf 1.0.16+nmu3 I: Validating po-debconf 1.0.16+nmu3 I: Retrieving libpopt0 1.16-10 I: Validating libpopt0 1.16-10 I: Retrieving libprocps3 2:3.3.9-9 I: Validating libprocps3 2:3.3.9-9 I: Retrieving procps 2:3.3.9-9 I: Validating procps 2:3.3.9-9 I: Retrieving libreadline6 6.3-8+b3 I: Validating libreadline6 6.3-8+b3 I: Retrieving readline-common 6.3-8 I: Validating readline-common 6.3-8 I: Retrieving rsyslog 8.4.2-1+deb8u1 I: Validating rsyslog 8.4.2-1+deb8u1 I: Retrieving librtmp1 2.4+20150115.gita107cef-1 I: Validating librtmp1 2.4+20150115.gita107cef-1 I: Retrieving sed 4.2.2-4+b1 I: Validating sed 4.2.2-4+b1 I: Retrieving sensible-utils 0.0.9 I: Validating sensible-utils 0.0.9 I: Retrieving sgml-base 1.26+nmu4 I: Validating sgml-base 1.26+nmu4 I: Retrieving sgml-data 2.0.10 I: Validating sgml-data 2.0.10 I: Retrieving login 1:4.2-3 I: Validating login 1:4.2-3 I: Retrieving passwd 1:4.2-3 I: Validating passwd 1:4.2-3 I: Retrieving libslang2 2.3.0-2 I: Validating libslang2 2.3.0-2 I: Retrieving startpar 0.59-3 I: Validating startpar 0.59-3 I: Retrieving sudo 1.8.10p3-1+deb8u2 I: Validating sudo 1.8.10p3-1+deb8u2 I: Retrieving libsystemd0 215-17+deb8u2 I: Validating libsystemd0 215-17+deb8u2 I: Retrieving libudev1 215-17+deb8u2 I: Validating libudev1 215-17+deb8u2 I: Retrieving systemd 215-17+deb8u2 I: Validating systemd 215-17+deb8u2 I: Retrieving systemd-sysv 215-17+deb8u2 I: Validating systemd-sysv 215-17+deb8u2 I: Retrieving udev 215-17+deb8u2 I: Validating udev 215-17+deb8u2 I: Retrieving initscripts 2.88dsf-59 I: Validating initscripts 2.88dsf-59 I: Retrieving sysv-rc 2.88dsf-59 I: Validating sysv-rc 2.88dsf-59 I: Retrieving sysvinit-utils 2.88dsf-59 I: Validating sysvinit-utils 2.88dsf-59 I: Retrieving tar 1.27.1-2+b1 I: Validating tar 1.27.1-2+b1 I: Retrieving tasksel 3.31+deb8u1 I: Validating tasksel 3.31+deb8u1 I: Retrieving tasksel-data 3.31+deb8u1 I: Validating tasksel-data 3.31+deb8u1 I: Retrieving traceroute 1:2.0.20-2+b1 I: Validating traceroute 1:2.0.20-2+b1 I: Retrieving tzdata 2015f-0+deb8u1 I: Validating tzdata 2015f-0+deb8u1 I: Retrieving u-boot-tools 2014.10+dfsg1-5 I: Validating u-boot-tools 2014.10+dfsg1-5 I: Retrieving libustr-1.0-1 1.0.4-3+b2 I: Validating libustr-1.0-1 1.0.4-3+b2 I: Retrieving bsdutils 1:2.25.2-6 I: Validating bsdutils 1:2.25.2-6 I: Retrieving libblkid1 2.25.2-6 I: Validating libblkid1 2.25.2-6 I: Retrieving libmount1 2.25.2-6 I: Validating libmount1 2.25.2-6 I: Retrieving libsmartcols1 2.25.2-6 I: Validating libsmartcols1 2.25.2-6 I: Retrieving libuuid1 2.25.2-6 I: Validating libuuid1 2.25.2-6 I: Retrieving mount 2.25.2-6 I: Validating mount 2.25.2-6 I: Retrieving util-linux 2.25.2-6 I: Validating util-linux 2.25.2-6 I: Retrieving vim-common 2:7.4.488-7 I: Validating vim-common 2:7.4.488-7 I: Retrieving vim-tiny 2:7.4.488-7 I: Validating vim-tiny 2:7.4.488-7 I: Retrieving wget 1.16-1 I: Validating wget 1.16-1 I: Retrieving xml-core 0.13+nmu2 I: Validating xml-core 0.13+nmu2 I: Retrieving xmlto 0.0.25-2 I: Validating xmlto 0.0.25-2 I: Retrieving liblzma5 5.1.1alpha+20120614-2+b3 I: Validating liblzma5 5.1.1alpha+20120614-2+b3 I: Retrieving xz-utils 5.1.1alpha+20120614-2+b3 I: Validating xz-utils 5.1.1alpha+20120614-2+b3 I: Retrieving zlib1g 1:1.2.8.dfsg-2+b1 I: Validating zlib1g 1:1.2.8.dfsg-2+b1 I: Chosen extractor for .deb packages: dpkg-deb I: Extracting acl... I: Extracting libacl1... I: Extracting adduser... I: Extracting libattr1... I: Extracting libaudit-common... I: Extracting libaudit1... I: Extracting base-files... I: Extracting base-passwd... I: Extracting bash... I: Extracting libbz2-1.0... I: Extracting libdebconfclient0... I: Extracting coreutils... I: Extracting libcryptsetup4... I: Extracting dash... I: Extracting libdb5.3... I: Extracting debconf... I: Extracting debconf-i18n... I: Extracting debianutils... I: Extracting diffutils... I: Extracting dpkg... I: Extracting e2fslibs... I: Extracting e2fsprogs... I: Extracting libcomerr2... I: Extracting libss2... I: Extracting findutils... I: Extracting gcc-4.8-base... I: Extracting gcc-4.9-base... I: Extracting libgcc1... I: Extracting libc-bin... I: Extracting libc6... I: Extracting multiarch-support... I: Extracting grep... I: Extracting gzip... I: Extracting hostname... I: Extracting init... I: Extracting insserv... I: Extracting libkmod2... I: Extracting libcap2... I: Extracting libcap2-bin... I: Extracting libgcrypt20... I: Extracting libgpg-error0... I: Extracting liblocale-gettext-perl... I: Extracting libselinux1... I: Extracting libsemanage-common... I: Extracting libsemanage1... I: Extracting libsepol1... I: Extracting libtext-charwidth-perl... I: Extracting libtext-iconv-perl... I: Extracting libtext-wrapi18n-perl... I: Extracting lsb-base... I: Extracting dmsetup... I: Extracting libdevmapper1.02.1... I: Extracting mawk... I: Extracting libncurses5... I: Extracting libncursesw5... I: Extracting libtinfo5... I: Extracting ncurses-base... I: Extracting ncurses-bin... I: Extracting libpam-modules... I: Extracting libpam-modules-bin... I: Extracting libpam-runtime... I: Extracting libpam0g... I: Extracting libpcre3... I: Extracting perl-base... I: Extracting libprocps3... I: Extracting procps... I: Extracting sed... I: Extracting sensible-utils... I: Extracting login... I: Extracting passwd... I: Extracting libslang2... I: Extracting startpar... I: Extracting libsystemd0... I: Extracting libudev1... I: Extracting systemd... I: Extracting systemd-sysv... I: Extracting udev... I: Extracting initscripts... I: Extracting sysv-rc... I: Extracting sysvinit-utils... I: Extracting tar... I: Extracting tzdata... I: Extracting libustr-1.0-1... I: Extracting bsdutils... I: Extracting libblkid1... I: Extracting libmount1... I: Extracting libsmartcols1... I: Extracting libuuid1... I: Extracting mount... I: Extracting util-linux... I: Extracting liblzma5... I: Extracting zlib1g... I: Installing core packages... I: Unpacking required packages... I: Unpacking acl... I: Unpacking libacl1:amd64... I: Unpacking adduser... I: Unpacking libattr1:amd64... I: Unpacking libaudit-common... I: Unpacking libaudit1:amd64... I: Unpacking base-files... I: Unpacking base-passwd... I: Unpacking bash... I: Unpacking libbz2-1.0:amd64... I: Unpacking libdebconfclient0:amd64... I: Unpacking coreutils... I: Unpacking libcryptsetup4:amd64... I: Unpacking dash... I: Unpacking libdb5.3:amd64... I: Unpacking debconf... I: Unpacking debconf-i18n... I: Unpacking debianutils... I: Unpacking diffutils... I: Unpacking dpkg... I: Unpacking e2fslibs:amd64... I: Unpacking e2fsprogs... I: Unpacking libcomerr2:amd64... I: Unpacking libss2:amd64... I: Unpacking findutils... I: Unpacking gcc-4.8-base:amd64... I: Unpacking gcc-4.9-base:amd64... I: Unpacking libgcc1:amd64... I: Unpacking libc-bin... I: Unpacking libc6:amd64... I: Unpacking multiarch-support... I: Unpacking grep... I: Unpacking gzip... I: Unpacking hostname... I: Unpacking init... I: Unpacking insserv... I: Unpacking libkmod2:amd64... I: Unpacking libcap2:amd64... I: Unpacking libcap2-bin... I: Unpacking libgcrypt20:amd64... I: Unpacking libgpg-error0:amd64... I: Unpacking liblocale-gettext-perl... I: Unpacking libselinux1:amd64... I: Unpacking libsemanage-common... I: Unpacking libsemanage1:amd64... I: Unpacking libsepol1:amd64... I: Unpacking libtext-charwidth-perl... I: Unpacking libtext-iconv-perl... I: Unpacking libtext-wrapi18n-perl... I: Unpacking lsb-base... I: Unpacking dmsetup... I: Unpacking libdevmapper1.02.1:amd64... I: Unpacking mawk... I: Unpacking libncurses5:amd64... I: Unpacking libncursesw5:amd64... I: Unpacking libtinfo5:amd64... I: Unpacking ncurses-base... I: Unpacking ncurses-bin... I: Unpacking libpam-modules:amd64... I: Unpacking libpam-modules-bin... I: Unpacking libpam-runtime... I: Unpacking libpam0g:amd64... I: Unpacking libpcre3:amd64... I: Unpacking perl-base... I: Unpacking libprocps3:amd64... I: Unpacking procps... I: Unpacking sed... I: Unpacking sensible-utils... I: Unpacking login... I: Unpacking passwd... I: Unpacking libslang2:amd64... I: Unpacking startpar... I: Unpacking libsystemd0:amd64... I: Unpacking libudev1:amd64... I: Unpacking systemd... I: Unpacking systemd-sysv... I: Unpacking udev... I: Unpacking initscripts... I: Unpacking sysv-rc... I: Unpacking sysvinit-utils... I: Unpacking tar... I: Unpacking tzdata... I: Unpacking libustr-1.0-1:amd64... I: Unpacking bsdutils... I: Unpacking libblkid1:amd64... I: Unpacking libmount1:amd64... I: Unpacking libsmartcols1:amd64... I: Unpacking libuuid1:amd64... I: Unpacking mount... I: Unpacking util-linux... I: Unpacking liblzma5:amd64... I: Unpacking zlib1g:amd64... I: Configuring required packages... I: Configuring gcc-4.8-base:amd64... I: Configuring lsb-base... I: Configuring sensible-utils... I: Configuring ncurses-base... I: Configuring libsemanage-common... I: Configuring gcc-4.9-base:amd64... I: Configuring libaudit-common... I: Configuring libc6:amd64... I: Configuring startpar... I: Configuring diffutils... I: Configuring insserv... I: Configuring findutils... I: Configuring debianutils... I: Configuring hostname... I: Configuring multiarch-support... I: Configuring mawk... I: Configuring libprocps3:amd64... I: Configuring libpcre3:amd64... I: Configuring libbz2-1.0:amd64... I: Configuring libkmod2:amd64... I: Configuring libgpg-error0:amd64... I: Configuring base-files... I: Configuring libdebconfclient0:amd64... I: Configuring libselinux1:amd64... I: Configuring libcomerr2:amd64... I: Configuring libslang2:amd64... I: Configuring libsepol1:amd64... I: Configuring libgcc1:amd64... I: Configuring libustr-1.0-1:amd64... I: Configuring libsmartcols1:amd64... I: Configuring libaudit1:amd64... I: Configuring libtinfo5:amd64... I: Configuring libudev1:amd64... I: Configuring libattr1:amd64... I: Configuring libss2:amd64... I: Configuring liblzma5:amd64... I: Configuring base-passwd... I: Configuring e2fslibs:amd64... I: Configuring libgcrypt20:amd64... I: Configuring libncursesw5:amd64... I: Configuring libdb5.3:amd64... I: Configuring zlib1g:amd64... I: Configuring libcap2:amd64... I: Configuring libsystemd0:amd64... I: Configuring libdevmapper1.02.1:amd64... I: Configuring libc-bin... I: Configuring libsemanage1:amd64... I: Configuring sysvinit-utils... I: Configuring libacl1:amd64... I: Configuring ncurses-bin... I: Configuring acl... I: Configuring libncurses5:amd64... I: Configuring libcap2-bin... I: Configuring bsdutils... I: Configuring coreutils... I: Configuring tar... I: Configuring dpkg... I: Configuring sed... I: Configuring perl-base... I: Configuring grep... I: Configuring debconf... I: Configuring tzdata... I: Configuring gzip... I: Configuring dash... I: Configuring libtext-iconv-perl... I: Configuring sysv-rc... I: Configuring liblocale-gettext-perl... I: Configuring libtext-charwidth-perl... I: Configuring libpam0g:amd64... I: Configuring libpam-modules-bin... I: Configuring bash... I: Configuring libtext-wrapi18n-perl... I: Configuring libpam-modules:amd64... I: Configuring libpam-runtime... I: Configuring debconf-i18n... I: Configuring passwd... I: Configuring login... I: Configuring adduser... I: Configuring libuuid1:amd64... I: Configuring libblkid1:amd64... I: Configuring libmount1:amd64... I: Configuring libcryptsetup4:amd64... I: Configuring mount... I: Configuring initscripts... I: Configuring util-linux... I: Configuring e2fsprogs... I: Configuring procps... I: Configuring udev... I: Configuring systemd... I: Configuring dmsetup... I: Configuring systemd-sysv... I: Configuring init... I: Configuring libc-bin... I: Unpacking the base system... I: Unpacking apt... I: Unpacking apt-utils... I: Unpacking libapt-inst1.5:amd64... I: Unpacking libapt-pkg4.12:amd64... I: Unpacking bc... I: Unpacking libdns-export100... I: Unpacking libirs-export91... I: Unpacking libisc-export95... I: Unpacking libisccfg-export90... I: Unpacking binutils... I: Unpacking libboost-iostreams1.55.0:amd64... I: Unpacking bsdmainutils... I: Unpacking build-essential... I: Unpacking bzip2... I: Unpacking libcloog-isl4:amd64... I: Unpacking cpio... I: Unpacking cron... I: Unpacking curl... I: Unpacking libcurl3:amd64... I: Unpacking libsasl2-2:amd64... I: Unpacking libsasl2-modules-db:amd64... I: Unpacking debian-archive-keyring... I: Unpacking devio... I: Unpacking dmidecode... I: Unpacking docbook-xml... I: Unpacking docbook-xsl... I: Unpacking dpkg-dev... I: Unpacking libdpkg-perl... I: Unpacking file... I: Unpacking libmagic1:amd64... I: Unpacking cpp-4.9... I: Unpacking g++-4.9... I: Unpacking gcc-4.9... I: Unpacking libasan1:amd64... I: Unpacking libatomic1:amd64... I: Unpacking libcilkrts5:amd64... I: Unpacking libgcc-4.9-dev:amd64... I: Unpacking libgomp1:amd64... I: Unpacking libitm1:amd64... I: Unpacking liblsan0:amd64... I: Unpacking libquadmath0:amd64... I: Unpacking libstdc++-4.9-dev:amd64... I: Unpacking libstdc++6:amd64... I: Unpacking libtsan0:amd64... I: Unpacking libubsan0:amd64... I: Unpacking cpp... I: Unpacking g++... I: Unpacking gcc... I: Unpacking libgdbm3:amd64... I: Unpacking gettext... I: Unpacking gettext-base... I: Unpacking libasprintf0c2:amd64... I: Unpacking libglib2.0-0:amd64... I: Unpacking libc-dev-bin... I: Unpacking libc6-dev:amd64... I: Unpacking locales... I: Unpacking libgmp10:amd64... I: Unpacking gnupg... I: Unpacking gpgv... I: Unpacking libgnutls-deb0-28:amd64... I: Unpacking libgnutls-openssl27:amd64... I: Unpacking groff-base... I: Unpacking libicu52:amd64... I: Unpacking ifupdown... I: Unpacking init-system-helpers... I: Unpacking intltool-debian... I: Unpacking iproute2... I: Unpacking iptables... I: Unpacking libxtables10... I: Unpacking iputils-ping... I: Unpacking isc-dhcp-client... I: Unpacking isc-dhcp-common... I: Unpacking libisl10:amd64... I: Unpacking libjson-c2:amd64... I: Unpacking kernel-package... I: Unpacking libkeyutils1:amd64... I: Unpacking kmod... I: Unpacking libgssapi-krb5-2:amd64... I: Unpacking libk5crypto3:amd64... I: Unpacking libkrb5-3:amd64... I: Unpacking libkrb5support0:amd64... I: Unpacking less... I: Unpacking libcroco3:amd64... I: Unpacking libestr0... I: Unpacking libffi6:amd64... I: Unpacking libidn11:amd64... I: Unpacking liblogging-stdlog0:amd64... I: Unpacking liblognorm1:amd64... I: Unpacking libmnl0:amd64... I: Unpacking libnetfilter-acct1:amd64... I: Unpacking libnfnetlink0:amd64... I: Unpacking libpipeline1:amd64... I: Unpacking libpsl0:amd64... I: Unpacking libsigc++-2.0-0c2a:amd64... I: Unpacking libssh2-1:amd64... I: Unpacking libtasn1-6:amd64... I: Unpacking libtimedate-perl... I: Unpacking libunistring0:amd64... I: Unpacking libusb-0.1-4:amd64... I: Unpacking libxml2:amd64... I: Unpacking libxml2-utils... I: Unpacking libxslt1.1:amd64... I: Unpacking xsltproc... I: Unpacking linux-libc-dev:amd64... I: Unpacking logrotate... I: Unpacking lzma... I: Unpacking make... I: Unpacking man-db... I: Unpacking manpages... I: Unpacking libmpc3:amd64... I: Unpacking libmpfr4:amd64... I: Unpacking nano... I: Unpacking net-tools... I: Unpacking netbase... I: Unpacking netcat-traditional... I: Unpacking telnet... I: Unpacking libhogweed2:amd64... I: Unpacking libnettle4:amd64... I: Unpacking libnewt0.52:amd64... I: Unpacking whiptail... I: Unpacking nfacct... I: Unpacking libldap-2.4-2:amd64... I: Unpacking libssl1.0.0:amd64... I: Unpacking libp11-kit0:amd64... I: Unpacking patch... I: Unpacking perl... I: Unpacking perl-modules... I: Unpacking po-debconf... I: Unpacking libpopt0:amd64... I: Unpacking libreadline6:amd64... I: Unpacking readline-common... I: Unpacking rsyslog... I: Unpacking librtmp1:amd64... I: Unpacking sgml-base... I: Unpacking sgml-data... I: Unpacking sudo... I: Unpacking tasksel... I: Unpacking tasksel-data... I: Unpacking traceroute... I: Unpacking u-boot-tools... I: Unpacking vim-common... I: Unpacking vim-tiny... I: Unpacking wget... I: Unpacking xml-core... I: Unpacking xmlto... I: Unpacking xz-utils... I: Configuring the base system... I: Configuring libquadmath0:amd64... I: Configuring libgomp1:amd64... I: Configuring libatomic1:amd64... I: Configuring readline-common... I: Configuring libgdbm3:amd64... I: Configuring manpages... I: Configuring libxtables10... I: Configuring cpio... I: Configuring libpopt0:amd64... I: Configuring kmod... I: Configuring libestr0... I: Configuring less... I: Configuring make... I: Configuring libssl1.0.0:amd64... I: Configuring sudo... I: Configuring dmidecode... I: Configuring gpgv... I: Configuring libsasl2-modules-db:amd64... I: Configuring liblogging-stdlog0:amd64... I: Configuring linux-libc-dev:amd64... I: Configuring perl-modules... I: Configuring libsasl2-2:amd64... I: Configuring u-boot-tools... I: Configuring netcat-traditional... I: Configuring libpipeline1:amd64... I: Configuring iproute2... I: Configuring libxml2:amd64... I: Configuring libtasn1-6:amd64... I: Configuring bzip2... I: Configuring libmagic1:amd64... I: Configuring libxslt1.1:amd64... I: Configuring perl... I: Configuring nano... I: Configuring libgmp10:amd64... I: Configuring libisc-export95... I: Configuring libssh2-1:amd64... I: Configuring patch... I: Configuring init-system-helpers... I: Configuring devio... I: Configuring libunistring0:amd64... I: Configuring libnettle4:amd64... I: Configuring xz-utils... I: Configuring debian-archive-keyring... I: Configuring libisl10:amd64... I: Configuring vim-common... I: Configuring libmpfr4:amd64... I: Configuring libcloog-isl4:amd64... I: Configuring libnfnetlink0:amd64... I: Configuring libmpc3:amd64... I: Configuring libstdc++6:amd64... I: Configuring lzma... I: Configuring binutils... I: Configuring libffi6:amd64... I: Configuring libc-dev-bin... I: Configuring libkeyutils1:amd64... I: Configuring libnewt0.52:amd64... I: Configuring bsdmainutils... I: Configuring net-tools... I: Configuring libc6-dev:amd64... I: Configuring cron... I: Configuring libmnl0:amd64... I: Configuring libapt-pkg4.12:amd64... I: Configuring libusb-0.1-4:amd64... I: Configuring locales... I: Configuring traceroute... I: Configuring logrotate... I: Configuring libitm1:amd64... I: Configuring libidn11:amd64... I: Configuring libreadline6:amd64... I: Configuring libjson-c2:amd64... I: Configuring libicu52:amd64... I: Configuring netbase... I: Configuring vim-tiny... I: Configuring libhogweed2:amd64... I: Configuring ifupdown... I: Configuring libisccfg-export90... I: Configuring libsigc++-2.0-0c2a:amd64... I: Configuring libtimedate-perl... I: Configuring libcilkrts5:amd64... I: Configuring libubsan0:amd64... I: Configuring libtsan0:amd64... I: Configuring groff-base... I: Configuring liblognorm1:amd64... I: Configuring libglib2.0-0:amd64... I: Configuring whiptail... I: Configuring libasprintf0c2:amd64... I: Configuring gnupg... I: Configuring libxml2-utils... I: Configuring libdpkg-perl... I: Configuring libpsl0:amd64... I: Configuring libboost-iostreams1.55.0:amd64... I: Configuring gettext-base... I: Configuring xsltproc... I: Configuring cpp-4.9... I: Configuring sgml-base... I: Configuring file... I: Configuring libdns-export100... I: Configuring libkrb5support0:amd64... I: Configuring liblsan0:amd64... I: Configuring libcroco3:amd64... I: Configuring dpkg-dev... I: Configuring iptables... I: Configuring telnet... I: Configuring libapt-inst1.5:amd64... I: Configuring libasan1:amd64... I: Configuring libp11-kit0:amd64... I: Configuring libgnutls-deb0-28:amd64... I: Configuring libgcc-4.9-dev:amd64... I: Configuring wget... I: Configuring apt... I: Configuring man-db... I: Configuring xml-core... I: Configuring libnetfilter-acct1:amd64... I: Configuring rsyslog... I: Configuring libstdc++-4.9-dev:amd64... I: Configuring cpp... I: Configuring libk5crypto3:amd64... I: Configuring nfacct... I: Configuring gettext... I: Configuring gcc-4.9... I: Configuring apt-utils... I: Configuring libirs-export91... I: Configuring librtmp1:amd64... I: Configuring gcc... I: Configuring intltool-debian... I: Configuring libldap-2.4-2:amd64... I: Configuring libgnutls-openssl27:amd64... I: Configuring g++-4.9... I: Configuring g++... I: Configuring libkrb5-3:amd64... I: Configuring iputils-ping... I: Configuring po-debconf... I: Configuring isc-dhcp-common... I: Configuring build-essential... I: Configuring isc-dhcp-client... I: Configuring libgssapi-krb5-2:amd64... I: Configuring libcurl3:amd64... I: Configuring curl... I: Configuring sgml-base... I: Configuring sgml-data... I: Configuring sgml-base... I: Configuring docbook-xml... I: Configuring xmlto... I: Configuring kernel-package... I: Configuring tasksel-data... I: Configuring tasksel... I: Configuring libc-bin... I: Configuring systemd... I: Base system installed successfully. thomas@diamond /srv/store/sharespace $ Do some basic setup inside the chroot:\nthomas@diamond /srv/store/sharespace $ grep thomas /etc/passwd | sudo tee -a /srv/store/sharespace/jessie-x86_64/etc/passwd [sudo] password for thomas: thomas:x:1000:1000:Thomas Stewart,,,:/home/thomas:/bin/bash thomas@diamond /srv/store/sharespace $ thomas@diamond /srv/store/sharespace $ grep ^thomas /etc/passwd | sudo tee -a /srv/store/sharespace/jessie-x86_64/etc/group thomas:x:1000:1000:Thomas Stewart,,,:/home/thomas:/bin/bash thomas@diamond /srv/store/sharespace $ Add a repo which has the arm cross compilers:\nthomas@diamond /srv/store/sharespace $ echo \u0026#34;deb http://emdebian.org/tools/debian jessie main\u0026#34; | sudo tee -a /srv/store/sharespace/jessie-x86_64/etc/apt/sources.list deb http://emdebian.org/tools/debian jessie main thomas@diamond /srv/store/sharespace $ thomas@diamond /srv/store/sharespace $ curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo chroot /srv/store/sharespace/jessie-x86_64 apt-key add - % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2398 100 2398 0 0 1551 0 0:00:01 0:00:01 --:--:-- 1552 OK thomas@diamond /srv/store/sharespace $ Add the armel architecture to the chroot:\nthomas@diamond /srv/store/sharespace $ sudo chroot /srv/store/sharespace/jessie-x86_64 dpkg --add-architecture armel thomas@diamond /srv/store/sharespace $ sudo chroot /srv/store/sharespace/jessie-x86_64 dpkg --print-architecture amd64 thomas@diamond /srv/store/sharespace $ sudo chroot /srv/store/sharespace/jessie-x86_64 dpkg --print-foreign-architectures armel thomas@diamond /srv/store/sharespace $ Update the packages:\nthomas@diamond /srv/store/sharespace $ sudo chroot /srv/store/sharespace/jessie-x86_64 apt-get update Hit http://emdebian.org jessie InRelease Hit http://emdebian.org jessie/main amd64 Packages Get:1 http://emdebian.org jessie/main armel Packages [7606 B] Ign http://emdebian.org jessie/main Translation-en Ign http://httpredir.debian.org jessie InRelease Hit http://httpredir.debian.org jessie Release.gpg Hit http://httpredir.debian.org jessie Release Hit http://httpredir.debian.org jessie/main amd64 Packages Get:2 http://httpredir.debian.org jessie/main armel Packages [6622 kB] Hit http://httpredir.debian.org jessie/main Translation-en Fetched 6629 kB in 10s (617 kB/s) Reading package lists... Done thomas@diamond /srv/store/sharespace $ Install the cross compiler and a statically linked armel busybox for use with the initramfs later:\nthomas@diamond /srv/store/sharespace $ sudo chroot /srv/store/sharespace/jessie-x86_64 apt-get install cross-gcc-dev crossbuild-essential-armel binutils-arm-linux-gnueabi busybox-static:armel Reading package lists... Done Building dependency tree... Done The following extra packages will be installed: ca-certificates cpp-4.9-arm-linux-gnueabi dpkg-cross fakeroot g++-4.9-arm-linux-gnueabi g++-arm-linux-gnueabi gcc-4.9-arm-linux-gnueabi gcc-4.9-base:armel gcc-arm-linux-gnueabi libasan1:armel libatomic1:armel libauthen-sasl-perl libc6:armel libc6-dev:armel libconfig-auto-perl libconfig-inifiles-perl libdebian-dpkgcross-perl libencode-locale-perl libexpat1 libfakeroot libfile-homedir-perl libfile-listing-perl libfile-which-perl libfont-afm-perl libgcc-4.9-dev:armel libgcc1:armel libgomp1:armel libhtml-form-perl libhtml-format-perl libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl libhttp-cookies-perl libhttp-daemon-perl libhttp-date-perl libhttp-message-perl libhttp-negotiate-perl libio-html-perl libio-socket-ssl-perl libio-string-perl liblist-moreutils-perl liblwp-mediatypes-perl liblwp-protocol-https-perl libmailtools-perl libnet-http-perl libnet-smtp-ssl-perl libnet-ssleay-perl libstdc++-4.9-dev:armel libstdc++6:armel libubsan0:armel liburi-perl libwww-perl libwww-robotrules-perl libxml-namespacesupport-perl libxml-parser-perl libxml-sax-base-perl libxml-sax-expat-perl libxml-sax-perl libxml-simple-perl libyaml-libyaml-perl libyaml-perl linux-libc-dev:armel openssl realpath ucf Suggested packages: binutils-doc gcc-4.9-locales binutils-multiarch gcc-4.9-doc libstdc++6-4.9-dbg:armel libgcc1-dbg:armel libgomp1-dbg:armel libitm1-dbg:armel libatomic1-dbg:armel libasan1-dbg:armel liblsan0-dbg:armel libtsan0-dbg:armel libubsan0-dbg:armel libcilkrts5-dbg:armel libquadmath-dbg:armel libdigest-hmac-perl libgssapi-perl glibc-doc:armel locales:armel manpages-dev:armel libdata-dump-perl libcrypt-ssleay-perl libstdc++-4.9-doc:armel libauthen-ntlm-perl libyaml-shell-perl The following NEW packages will be installed: binutils-arm-linux-gnueabi busybox-static:armel ca-certificates cpp-4.9-arm-linux-gnueabi cross-gcc-dev crossbuild-essential-armel dpkg-cross fakeroot g++-4.9-arm-linux-gnueabi g++-arm-linux-gnueabi gcc-4.9-arm-linux-gnueabi gcc-4.9-base:armel gcc-arm-linux-gnueabi libasan1:armel libatomic1:armel libauthen-sasl-perl libc6:armel libc6-dev:armel libconfig-auto-perl libconfig-inifiles-perl libdebian-dpkgcross-perl libencode-locale-perl libexpat1 libfakeroot libfile-homedir-perl libfile-listing-perl libfile-which-perl libfont-afm-perl libgcc-4.9-dev:armel libgcc1:armel libgomp1:armel libhtml-form-perl libhtml-format-perl libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl libhttp-cookies-perl libhttp-daemon-perl libhttp-date-perl libhttp-message-perl libhttp-negotiate-perl libio-html-perl libio-socket-ssl-perl libio-string-perl liblist-moreutils-perl liblwp-mediatypes-perl liblwp-protocol-https-perl libmailtools-perl libnet-http-perl libnet-smtp-ssl-perl libnet-ssleay-perl libstdc++-4.9-dev:armel libstdc++6:armel libubsan0:armel liburi-perl libwww-perl libwww-robotrules-perl libxml-namespacesupport-perl libxml-parser-perl libxml-sax-base-perl libxml-sax-expat-perl libxml-sax-perl libxml-simple-perl libyaml-libyaml-perl libyaml-perl linux-libc-dev:armel openssl realpath ucf 0 upgraded, 69 newly installed, 0 to remove and 1 not upgraded. Need to get 33.0 MB of archives. After this operation, 124 MB of additional disk space will be used. Do you want to continue? [Y/n] Get:1 http://emdebian.org/tools/debian/ jessie/main cpp-4.9-arm-linux-gnueabi amd64 4.9.2-10 [5196 kB] Get:2 http://httpredir.debian.org/debian/ jessie/main gcc-4.9-base armel 4.9.2-10 [160 kB] Get:3 http://emdebian.org/tools/debian/ jessie/main gcc-4.9-arm-linux-gnueabi amd64 4.9.2-10 [5213 kB] Get:4 http://httpredir.debian.org/debian/ jessie/main libgcc1 armel 1:4.9.2-10 [41.4 kB] Get:5 http://httpredir.debian.org/debian/ jessie/main libc6 armel 2.19-18+deb8u1 [4126 kB] Get:6 http://emdebian.org/tools/debian/ jessie/main gcc-arm-linux-gnueabi all 4.9.2-10.1 [2776 B] Get:7 http://emdebian.org/tools/debian/ jessie/main g++-4.9-arm-linux-gnueabi amd64 4.9.2-10 [5473 kB] Get:8 http://emdebian.org/tools/debian/ jessie/main g++-arm-linux-gnueabi all 4.9.2-10.1 [2680 B] Get:9 http://emdebian.org/tools/debian/ jessie/main libdebian-dpkgcross-perl all 2.6.11~emdeb8 [28.9 kB] Get:10 http://emdebian.org/tools/debian/ jessie/main dpkg-cross all 2.6.11~emdeb8 [53.7 kB] Get:11 http://emdebian.org/tools/debian/ jessie/main crossbuild-essential-armel all 11.7+nmu1 [6176 B] Get:12 http://httpredir.debian.org/debian/ jessie/main libstdc++6 armel 4.9.2-10 [234 kB] Get:13 http://httpredir.debian.org/debian/ jessie/main libasan1 armel 4.9.2-10 [165 kB] Get:14 http://httpredir.debian.org/debian/ jessie/main libatomic1 armel 4.9.2-10 [6742 B] Get:15 http://httpredir.debian.org/debian/ jessie/main libexpat1 amd64 2.1.0-6+deb8u1 [80.0 kB] Get:16 http://httpredir.debian.org/debian/ jessie/main libgomp1 armel 4.9.2-10 [36.5 kB] Get:17 http://httpredir.debian.org/debian/ jessie/main libubsan0 armel 4.9.2-10 [68.5 kB] Get:18 http://httpredir.debian.org/debian/ jessie/main ucf all 3.0030 [69.7 kB] Get:19 http://httpredir.debian.org/debian/ jessie/main openssl amd64 1.0.1k-3+deb8u1 [677 kB] Get:20 http://httpredir.debian.org/debian/ jessie/main ca-certificates all 20141019 [200 kB] Get:21 http://httpredir.debian.org/debian/ jessie/main linux-libc-dev armel 3.16.7-ckt11-1+deb8u3 [976 kB] Get:22 http://httpredir.debian.org/debian/ jessie/main libc6-dev armel 2.19-18+deb8u1 [1781 kB] Get:23 http://httpredir.debian.org/debian/ jessie/main binutils-arm-linux-gnueabi amd64 2.25-5 [3721 kB] Get:24 http://httpredir.debian.org/debian/ jessie/main libgcc-4.9-dev armel 4.9.2-10 [361 kB] Get:25 http://httpredir.debian.org/debian/ jessie/main libstdc++-4.9-dev armel 4.9.2-10 [1140 kB] Get:26 http://httpredir.debian.org/debian/ jessie/main liblist-moreutils-perl amd64 0.33-2+b1 [44.4 kB] Get:27 http://httpredir.debian.org/debian/ jessie/main libconfig-inifiles-perl all 2.83-3 [54.0 kB] Get:28 http://httpredir.debian.org/debian/ jessie/main libio-string-perl all 1.08-3 [12.3 kB] Get:29 http://httpredir.debian.org/debian/ jessie/main libxml-namespacesupport-perl all 1.11-1 [14.8 kB] Get:30 http://httpredir.debian.org/debian/ jessie/main libxml-sax-base-perl all 1.07-1 [23.1 kB] Get:31 http://httpredir.debian.org/debian/ jessie/main libxml-sax-perl all 0.99+dfsg-2 [68.3 kB] Get:32 http://httpredir.debian.org/debian/ jessie/main liburi-perl all 1.64-1 [95.5 kB] Get:33 http://httpredir.debian.org/debian/ jessie/main libencode-locale-perl all 1.03-1 [13.6 kB] Get:34 http://httpredir.debian.org/debian/ jessie/main libhttp-date-perl all 6.02-1 [10.7 kB] Get:35 http://httpredir.debian.org/debian/ jessie/main libfile-listing-perl all 6.04-1 [10.3 kB] Get:36 http://httpredir.debian.org/debian/ jessie/main libhtml-tagset-perl all 3.20-2 [13.5 kB] Get:37 http://httpredir.debian.org/debian/ jessie/main libhtml-parser-perl amd64 3.71-1+b3 [109 kB] Get:38 http://httpredir.debian.org/debian/ jessie/main libhtml-tree-perl all 5.03-1 [210 kB] Get:39 http://httpredir.debian.org/debian/ jessie/main libio-html-perl all 1.001-1 [17.6 kB] Get:40 http://httpredir.debian.org/debian/ jessie/main liblwp-mediatypes-perl all 6.02-1 [22.1 kB] Get:41 http://httpredir.debian.org/debian/ jessie/main libhttp-message-perl all 6.06-1 [80.1 kB] Get:42 http://httpredir.debian.org/debian/ jessie/main libhttp-cookies-perl all 6.01-1 [17.4 kB] Get:43 http://httpredir.debian.org/debian/ jessie/main libhttp-negotiate-perl all 6.00-2 [13.6 kB] Get:44 http://httpredir.debian.org/debian/ jessie/main libnet-ssleay-perl amd64 1.65-1+b1 [277 kB] Get:45 http://httpredir.debian.org/debian/ jessie/main libio-socket-ssl-perl all 2.002-2+deb8u1 [172 kB] Get:46 http://httpredir.debian.org/debian/ jessie/main libnet-http-perl all 6.07-1 [24.8 kB] Get:47 http://httpredir.debian.org/debian/ jessie/main liblwp-protocol-https-perl all 6.06-2 [9582 B] Get:48 http://httpredir.debian.org/debian/ jessie/main libwww-robotrules-perl all 6.01-1 [14.3 kB] Get:49 http://httpredir.debian.org/debian/ jessie/main libwww-perl all 6.08-1 [194 kB] Get:50 http://httpredir.debian.org/debian/ jessie/main libxml-parser-perl amd64 2.41-3 [215 kB] Get:51 http://httpredir.debian.org/debian/ jessie/main libxml-sax-expat-perl all 0.40-2 [12.9 kB] Get:52 http://httpredir.debian.org/debian/ jessie/main libxml-simple-perl all 2.20-1 [74.7 kB] Get:53 http://httpredir.debian.org/debian/ jessie/main libyaml-perl all 1.13-1 [69.7 kB] Get:54 http://httpredir.debian.org/debian/ jessie/main libconfig-auto-perl all 0.44-1 [19.5 kB] Get:55 http://httpredir.debian.org/debian/ jessie/main libfile-which-perl all 1.09-1 [13.1 kB] Get:56 http://httpredir.debian.org/debian/ jessie/main libfile-homedir-perl all 1.00-1 [48.9 kB] Get:57 http://httpredir.debian.org/debian/ jessie/main libfakeroot amd64 1.20.2-1 [44.7 kB] Get:58 http://httpredir.debian.org/debian/ jessie/main fakeroot amd64 1.20.2-1 [84.7 kB] Get:59 http://httpredir.debian.org/debian/ jessie/main libauthen-sasl-perl all 2.1600-1 [50.8 kB] Get:60 http://httpredir.debian.org/debian/ jessie/main libfont-afm-perl all 1.20-1 [14.4 kB] Get:61 http://httpredir.debian.org/debian/ jessie/main libhtml-form-perl all 6.03-1 [23.9 kB] Get:62 http://httpredir.debian.org/debian/ jessie/main libhtml-format-perl all 2.11-1 [43.1 kB] Get:63 http://httpredir.debian.org/debian/ jessie/main libhttp-daemon-perl all 6.01-1 [17.3 kB] Get:64 http://httpredir.debian.org/debian/ jessie/main libnet-smtp-ssl-perl all 1.01-3 [5996 B] Get:65 http://httpredir.debian.org/debian/ jessie/main libmailtools-perl all 2.13-1 [96.6 kB] Get:66 http://httpredir.debian.org/debian/ jessie/main libyaml-libyaml-perl amd64 0.41-6 [67.0 kB] Get:67 http://httpredir.debian.org/debian/ jessie/main realpath all 8.23-4 [18.0 kB] Get:68 http://httpredir.debian.org/debian/ jessie/main busybox-static armel 1:1.22.0-9+deb8u1 [717 kB] Get:69 http://httpredir.debian.org/debian/ jessie/main cross-gcc-dev all 14+deb8u1 [17.3 kB] Fetched 33.0 MB in 26s (1243 kB/s) perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = \u0026#34;en_GB:en\u0026#34;, LC_ALL = (unset), LANG = \u0026#34;en_GB.UTF-8\u0026#34; are supported and installed on your system. perl: warning: Falling back to the standard locale (\u0026#34;C\u0026#34;). locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory Extracting templates from packages: 100% Preconfiguring packages ... perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = \u0026#34;en_GB:en\u0026#34;, LC_ALL = (unset), LANG = \u0026#34;en_GB.UTF-8\u0026#34; are supported and installed on your system. perl: warning: Falling back to the standard locale (\u0026#34;C\u0026#34;). E: Can not write log (Is /dev/pts mounted?) - posix_openpt (2: No such file or directory) Selecting previously unselected package gcc-4.9-base:armel. (Reading database ... 17028 files and directories currently installed.) Preparing to unpack .../gcc-4.9-base_4.9.2-10_armel.deb ... Unpacking gcc-4.9-base:armel (4.9.2-10) ... Selecting previously unselected package libgcc1:armel. Preparing to unpack .../libgcc1_1%3a4.9.2-10_armel.deb ... Unpacking libgcc1:armel (1:4.9.2-10) ... Selecting previously unselected package libc6:armel. Preparing to unpack .../libc6_2.19-18+deb8u1_armel.deb ... Unpacking libc6:armel (2.19-18+deb8u1) ... Selecting previously unselected package libstdc++6:armel. Preparing to unpack .../libstdc++6_4.9.2-10_armel.deb ... Unpacking libstdc++6:armel (4.9.2-10) ... Selecting previously unselected package libasan1:armel. Preparing to unpack .../libasan1_4.9.2-10_armel.deb ... Unpacking libasan1:armel (4.9.2-10) ... Selecting previously unselected package libatomic1:armel. Preparing to unpack .../libatomic1_4.9.2-10_armel.deb ... Unpacking libatomic1:armel (4.9.2-10) ... Selecting previously unselected package libexpat1:amd64. Preparing to unpack .../libexpat1_2.1.0-6+deb8u1_amd64.deb ... Unpacking libexpat1:amd64 (2.1.0-6+deb8u1) ... Selecting previously unselected package libgomp1:armel. Preparing to unpack .../libgomp1_4.9.2-10_armel.deb ... Unpacking libgomp1:armel (4.9.2-10) ... Selecting previously unselected package libubsan0:armel. Preparing to unpack .../libubsan0_4.9.2-10_armel.deb ... Unpacking libubsan0:armel (4.9.2-10) ... Selecting previously unselected package ucf. Preparing to unpack .../archives/ucf_3.0030_all.deb ... Moving old data out of the way Unpacking ucf (3.0030) ... Selecting previously unselected package openssl. Preparing to unpack .../openssl_1.0.1k-3+deb8u1_amd64.deb ... Unpacking openssl (1.0.1k-3+deb8u1) ... Selecting previously unselected package ca-certificates. Preparing to unpack .../ca-certificates_20141019_all.deb ... Unpacking ca-certificates (20141019) ... Selecting previously unselected package linux-libc-dev:armel. Preparing to unpack .../linux-libc-dev_3.16.7-ckt11-1+deb8u3_armel.deb ... Unpacking linux-libc-dev:armel (3.16.7-ckt11-1+deb8u3) ... Selecting previously unselected package libc6-dev:armel. Preparing to unpack .../libc6-dev_2.19-18+deb8u1_armel.deb ... Unpacking libc6-dev:armel (2.19-18+deb8u1) ... Selecting previously unselected package cpp-4.9-arm-linux-gnueabi. Preparing to unpack .../cpp-4.9-arm-linux-gnueabi_4.9.2-10_amd64.deb ... Unpacking cpp-4.9-arm-linux-gnueabi (4.9.2-10) ... Selecting previously unselected package binutils-arm-linux-gnueabi. Preparing to unpack .../binutils-arm-linux-gnueabi_2.25-5_amd64.deb ... Unpacking binutils-arm-linux-gnueabi (2.25-5) ... Selecting previously unselected package libgcc-4.9-dev:armel. Preparing to unpack .../libgcc-4.9-dev_4.9.2-10_armel.deb ... Unpacking libgcc-4.9-dev:armel (4.9.2-10) ... Selecting previously unselected package gcc-4.9-arm-linux-gnueabi. Preparing to unpack .../gcc-4.9-arm-linux-gnueabi_4.9.2-10_amd64.deb ... Unpacking gcc-4.9-arm-linux-gnueabi (4.9.2-10) ... Selecting previously unselected package gcc-arm-linux-gnueabi. Preparing to unpack .../gcc-arm-linux-gnueabi_4.9.2-10.1_all.deb ... Unpacking gcc-arm-linux-gnueabi (4.9.2-10.1) ... Selecting previously unselected package libstdc++-4.9-dev:armel. Preparing to unpack .../libstdc++-4.9-dev_4.9.2-10_armel.deb ... Unpacking libstdc++-4.9-dev:armel (4.9.2-10) ... Selecting previously unselected package g++-4.9-arm-linux-gnueabi. Preparing to unpack .../g++-4.9-arm-linux-gnueabi_4.9.2-10_amd64.deb ... Unpacking g++-4.9-arm-linux-gnueabi (4.9.2-10) ... Selecting previously unselected package g++-arm-linux-gnueabi. Preparing to unpack .../g++-arm-linux-gnueabi_4.9.2-10.1_all.deb ... Unpacking g++-arm-linux-gnueabi (4.9.2-10.1) ... Selecting previously unselected package liblist-moreutils-perl. Preparing to unpack .../liblist-moreutils-perl_0.33-2+b1_amd64.deb ... Unpacking liblist-moreutils-perl (0.33-2+b1) ... Selecting previously unselected package libconfig-inifiles-perl. Preparing to unpack .../libconfig-inifiles-perl_2.83-3_all.deb ... Unpacking libconfig-inifiles-perl (2.83-3) ... Selecting previously unselected package libio-string-perl. Preparing to unpack .../libio-string-perl_1.08-3_all.deb ... Unpacking libio-string-perl (1.08-3) ... Selecting previously unselected package libxml-namespacesupport-perl. Preparing to unpack .../libxml-namespacesupport-perl_1.11-1_all.deb ... Unpacking libxml-namespacesupport-perl (1.11-1) ... Selecting previously unselected package libxml-sax-base-perl. Preparing to unpack .../libxml-sax-base-perl_1.07-1_all.deb ... Unpacking libxml-sax-base-perl (1.07-1) ... Selecting previously unselected package libxml-sax-perl. Preparing to unpack .../libxml-sax-perl_0.99+dfsg-2_all.deb ... Unpacking libxml-sax-perl (0.99+dfsg-2) ... Selecting previously unselected package liburi-perl. Preparing to unpack .../liburi-perl_1.64-1_all.deb ... Unpacking liburi-perl (1.64-1) ... Selecting previously unselected package libencode-locale-perl. Preparing to unpack .../libencode-locale-perl_1.03-1_all.deb ... Unpacking libencode-locale-perl (1.03-1) ... Selecting previously unselected package libhttp-date-perl. Preparing to unpack .../libhttp-date-perl_6.02-1_all.deb ... Unpacking libhttp-date-perl (6.02-1) ... Selecting previously unselected package libfile-listing-perl. Preparing to unpack .../libfile-listing-perl_6.04-1_all.deb ... Unpacking libfile-listing-perl (6.04-1) ... Selecting previously unselected package libhtml-tagset-perl. Preparing to unpack .../libhtml-tagset-perl_3.20-2_all.deb ... Unpacking libhtml-tagset-perl (3.20-2) ... Selecting previously unselected package libhtml-parser-perl. Preparing to unpack .../libhtml-parser-perl_3.71-1+b3_amd64.deb ... Unpacking libhtml-parser-perl (3.71-1+b3) ... Selecting previously unselected package libhtml-tree-perl. Preparing to unpack .../libhtml-tree-perl_5.03-1_all.deb ... Unpacking libhtml-tree-perl (5.03-1) ... Selecting previously unselected package libio-html-perl. Preparing to unpack .../libio-html-perl_1.001-1_all.deb ... Unpacking libio-html-perl (1.001-1) ... Selecting previously unselected package liblwp-mediatypes-perl. Preparing to unpack .../liblwp-mediatypes-perl_6.02-1_all.deb ... Unpacking liblwp-mediatypes-perl (6.02-1) ... Selecting previously unselected package libhttp-message-perl. Preparing to unpack .../libhttp-message-perl_6.06-1_all.deb ... Unpacking libhttp-message-perl (6.06-1) ... Selecting previously unselected package libhttp-cookies-perl. Preparing to unpack .../libhttp-cookies-perl_6.01-1_all.deb ... Unpacking libhttp-cookies-perl (6.01-1) ... Selecting previously unselected package libhttp-negotiate-perl. Preparing to unpack .../libhttp-negotiate-perl_6.00-2_all.deb ... Unpacking libhttp-negotiate-perl (6.00-2) ... Selecting previously unselected package libnet-ssleay-perl. Preparing to unpack .../libnet-ssleay-perl_1.65-1+b1_amd64.deb ... Unpacking libnet-ssleay-perl (1.65-1+b1) ... Selecting previously unselected package libio-socket-ssl-perl. Preparing to unpack .../libio-socket-ssl-perl_2.002-2+deb8u1_all.deb ... Unpacking libio-socket-ssl-perl (2.002-2+deb8u1) ... Selecting previously unselected package libnet-http-perl. Preparing to unpack .../libnet-http-perl_6.07-1_all.deb ... Unpacking libnet-http-perl (6.07-1) ... Selecting previously unselected package liblwp-protocol-https-perl. Preparing to unpack .../liblwp-protocol-https-perl_6.06-2_all.deb ... Unpacking liblwp-protocol-https-perl (6.06-2) ... Selecting previously unselected package libwww-robotrules-perl. Preparing to unpack .../libwww-robotrules-perl_6.01-1_all.deb ... Unpacking libwww-robotrules-perl (6.01-1) ... Selecting previously unselected package libwww-perl. Preparing to unpack .../libwww-perl_6.08-1_all.deb ... Unpacking libwww-perl (6.08-1) ... Selecting previously unselected package libxml-parser-perl. Preparing to unpack .../libxml-parser-perl_2.41-3_amd64.deb ... Unpacking libxml-parser-perl (2.41-3) ... Selecting previously unselected package libxml-sax-expat-perl. Preparing to unpack .../libxml-sax-expat-perl_0.40-2_all.deb ... Unpacking libxml-sax-expat-perl (0.40-2) ... Selecting previously unselected package libxml-simple-perl. Preparing to unpack .../libxml-simple-perl_2.20-1_all.deb ... Unpacking libxml-simple-perl (2.20-1) ... Selecting previously unselected package libyaml-perl. Preparing to unpack .../libyaml-perl_1.13-1_all.deb ... Unpacking libyaml-perl (1.13-1) ... Selecting previously unselected package libconfig-auto-perl. Preparing to unpack .../libconfig-auto-perl_0.44-1_all.deb ... Unpacking libconfig-auto-perl (0.44-1) ... Selecting previously unselected package libfile-which-perl. Preparing to unpack .../libfile-which-perl_1.09-1_all.deb ... Unpacking libfile-which-perl (1.09-1) ... Selecting previously unselected package libfile-homedir-perl. Preparing to unpack .../libfile-homedir-perl_1.00-1_all.deb ... Unpacking libfile-homedir-perl (1.00-1) ... Selecting previously unselected package libdebian-dpkgcross-perl. Preparing to unpack .../libdebian-dpkgcross-perl_2.6.11~emdeb8_all.deb ... Unpacking libdebian-dpkgcross-perl (2.6.11~emdeb8) ... Selecting previously unselected package dpkg-cross. Preparing to unpack .../dpkg-cross_2.6.11~emdeb8_all.deb ... Unpacking dpkg-cross (2.6.11~emdeb8) ... Selecting previously unselected package crossbuild-essential-armel. Preparing to unpack .../crossbuild-essential-armel_11.7+nmu1_all.deb ... Unpacking crossbuild-essential-armel (11.7+nmu1) ... Selecting previously unselected package libfakeroot:amd64. Preparing to unpack .../libfakeroot_1.20.2-1_amd64.deb ... Unpacking libfakeroot:amd64 (1.20.2-1) ... Selecting previously unselected package fakeroot. Preparing to unpack .../fakeroot_1.20.2-1_amd64.deb ... Unpacking fakeroot (1.20.2-1) ... Selecting previously unselected package libauthen-sasl-perl. Preparing to unpack .../libauthen-sasl-perl_2.1600-1_all.deb ... Unpacking libauthen-sasl-perl (2.1600-1) ... Selecting previously unselected package libfont-afm-perl. Preparing to unpack .../libfont-afm-perl_1.20-1_all.deb ... Unpacking libfont-afm-perl (1.20-1) ... Selecting previously unselected package libhtml-form-perl. Preparing to unpack .../libhtml-form-perl_6.03-1_all.deb ... Unpacking libhtml-form-perl (6.03-1) ... Selecting previously unselected package libhtml-format-perl. Preparing to unpack .../libhtml-format-perl_2.11-1_all.deb ... Unpacking libhtml-format-perl (2.11-1) ... Selecting previously unselected package libhttp-daemon-perl. Preparing to unpack .../libhttp-daemon-perl_6.01-1_all.deb ... Unpacking libhttp-daemon-perl (6.01-1) ... Selecting previously unselected package libnet-smtp-ssl-perl. Preparing to unpack .../libnet-smtp-ssl-perl_1.01-3_all.deb ... Unpacking libnet-smtp-ssl-perl (1.01-3) ... Selecting previously unselected package libmailtools-perl. Preparing to unpack .../libmailtools-perl_2.13-1_all.deb ... Unpacking libmailtools-perl (2.13-1) ... Selecting previously unselected package libyaml-libyaml-perl. Preparing to unpack .../libyaml-libyaml-perl_0.41-6_amd64.deb ... Unpacking libyaml-libyaml-perl (0.41-6) ... Selecting previously unselected package realpath. Preparing to unpack .../realpath_8.23-4_all.deb ... Unpacking realpath (8.23-4) ... Selecting previously unselected package busybox-static. Preparing to unpack .../busybox-static_1%3a1.22.0-9+deb8u1_armel.deb ... Unpacking busybox-static (1:1.22.0-9+deb8u1) ... Selecting previously unselected package cross-gcc-dev. Preparing to unpack .../cross-gcc-dev_14+deb8u1_all.deb ... Unpacking cross-gcc-dev (14+deb8u1) ... Processing triggers for man-db (2.7.0.2-5) ... Setting up gcc-4.9-base:armel (4.9.2-10) ... Setting up libexpat1:amd64 (2.1.0-6+deb8u1) ... Setting up ucf (3.0030) ... locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory Setting up openssl (1.0.1k-3+deb8u1) ... Setting up ca-certificates (20141019) ... locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory Setting up linux-libc-dev:armel (3.16.7-ckt11-1+deb8u3) ... Setting up cpp-4.9-arm-linux-gnueabi (4.9.2-10) ... Setting up binutils-arm-linux-gnueabi (2.25-5) ... Setting up liblist-moreutils-perl (0.33-2+b1) ... Setting up libconfig-inifiles-perl (2.83-3) ... Setting up libio-string-perl (1.08-3) ... Setting up libxml-namespacesupport-perl (1.11-1) ... Setting up libxml-sax-base-perl (1.07-1) ... Setting up libxml-sax-perl (0.99+dfsg-2) ... update-perl-sax-parsers: Registering Perl SAX parser XML::SAX::PurePerl with priority 10... update-perl-sax-parsers: Updating overall Perl SAX parser modules info file... locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory Creating config file /etc/perl/XML/SAX/ParserDetails.ini with new version Setting up liburi-perl (1.64-1) ... Setting up libencode-locale-perl (1.03-1) ... Setting up libhttp-date-perl (6.02-1) ... Setting up libfile-listing-perl (6.04-1) ... Setting up libhtml-tagset-perl (3.20-2) ... Setting up libhtml-parser-perl (3.71-1+b3) ... Setting up libhtml-tree-perl (5.03-1) ... Setting up libio-html-perl (1.001-1) ... Setting up liblwp-mediatypes-perl (6.02-1) ... Setting up libhttp-message-perl (6.06-1) ... Setting up libhttp-cookies-perl (6.01-1) ... Setting up libhttp-negotiate-perl (6.00-2) ... Setting up libnet-ssleay-perl (1.65-1+b1) ... Setting up libio-socket-ssl-perl (2.002-2+deb8u1) ... Setting up libnet-http-perl (6.07-1) ... Setting up libwww-robotrules-perl (6.01-1) ... Setting up libyaml-perl (1.13-1) ... Setting up libfile-which-perl (1.09-1) ... Setting up libfile-homedir-perl (1.00-1) ... Setting up libfakeroot:amd64 (1.20.2-1) ... Setting up fakeroot (1.20.2-1) ... update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode Setting up libauthen-sasl-perl (2.1600-1) ... Setting up libfont-afm-perl (1.20-1) ... Setting up libhtml-form-perl (6.03-1) ... Setting up libhtml-format-perl (2.11-1) ... Setting up libhttp-daemon-perl (6.01-1) ... Setting up libnet-smtp-ssl-perl (1.01-3) ... Setting up libmailtools-perl (2.13-1) ... Setting up libyaml-libyaml-perl (0.41-6) ... Setting up realpath (8.23-4) ... Setting up busybox-static (1:1.22.0-9+deb8u1) ... Setting up cross-gcc-dev (14+deb8u1) ... Setting up libgcc1:armel (1:4.9.2-10) ... Setting up libc6:armel (2.19-18+deb8u1) ... Setting up libstdc++6:armel (4.9.2-10) ... Setting up libasan1:armel (4.9.2-10) ... Setting up libatomic1:armel (4.9.2-10) ... Setting up libgomp1:armel (4.9.2-10) ... Setting up libubsan0:armel (4.9.2-10) ... Setting up libc6-dev:armel (2.19-18+deb8u1) ... Setting up libgcc-4.9-dev:armel (4.9.2-10) ... Setting up gcc-4.9-arm-linux-gnueabi (4.9.2-10) ... Setting up gcc-arm-linux-gnueabi (4.9.2-10.1) ... Setting up libstdc++-4.9-dev:armel (4.9.2-10) ... Setting up g++-4.9-arm-linux-gnueabi (4.9.2-10) ... Setting up g++-arm-linux-gnueabi (4.9.2-10.1) ... Setting up libwww-perl (6.08-1) ... Setting up libxml-parser-perl (2.41-3) ... Setting up libxml-sax-expat-perl (0.40-2) ... update-perl-sax-parsers: Registering Perl SAX parser XML::SAX::Expat with priority 50... update-perl-sax-parsers: Updating overall Perl SAX parser modules info file... locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory Replacing config file /etc/perl/XML/SAX/ParserDetails.ini with new version Setting up libxml-simple-perl (2.20-1) ... Setting up libconfig-auto-perl (0.44-1) ... Setting up libdebian-dpkgcross-perl (2.6.11~emdeb8) ... Setting up dpkg-cross (2.6.11~emdeb8) ... locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory Setting up crossbuild-essential-armel (11.7+nmu1) ... Setting up liblwp-protocol-https-perl (6.06-2) ... Processing triggers for libc-bin (2.19-18+deb8u1) ... Processing triggers for ca-certificates (20141019) ... Updating certificates in /etc/ssl/certs... 173 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d....done. thomas@diamond /srv/store/sharespace $ Configure locates so stop the annoying locale warnings:\nthomas@diamond /srv/store/sharespace $ sudo chroot /srv/store/sharespace/jessie-x86_64 dpkg-reconfigure locales perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = \u0026#34;en_GB:en\u0026#34;, LC_ALL = (unset), LANG = \u0026#34;en_GB.UTF-8\u0026#34; are supported and installed on your system. perl: warning: Falling back to the standard locale (\u0026#34;C\u0026#34;). locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory /usr/bin/locale: Cannot set LC_CTYPE to default locale: No such file or directory /usr/bin/locale: Cannot set LC_MESSAGES to default locale: No such file or directory /usr/bin/locale: Cannot set LC_ALL to default locale: No such file or directory Generating locales (this might take a while)... en_GB.UTF-8... done Generation complete. thomas@diamond /srv/store/sharespace $ Install git:\nthomas@diamond /srv/store/sharespace $ sudo chroot /srv/store/sharespace/jessie-x86_64 apt-get install git Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: git-man libbsd0 libcurl3-gnutls libedit2 liberror-perl libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxext6 libxmuu1 openssh-client rsync xauth Suggested packages: git-daemon-run git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch git-cvs git-mediawiki git-svn ssh-askpass libpam-ssh keychain monkeysphere openssh-server Recommended packages: ssh-client The following NEW packages will be installed: git git-man libbsd0 libcurl3-gnutls libedit2 liberror-perl libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxext6 libxmuu1 openssh-client rsync xauth 0 upgraded, 16 newly installed, 0 to remove and 1 not upgraded. Need to get 7,456 kB of archives. After this operation, 32.6 MB of additional disk space will be used. Do you want to continue? [Y/n] Get:1 http://httpredir.debian.org/debian/ jessie/main libbsd0 amd64 0.7.0-2 [67.9 kB] Get:2 http://httpredir.debian.org/debian/ jessie/main libedit2 amd64 3.1-20140620-2 [85.1 kB] Get:3 http://httpredir.debian.org/debian/ jessie/main libcurl3-gnutls amd64 7.38.0-4+deb8u2 [251 kB] Get:4 http://httpredir.debian.org/debian/ jessie/main libxau6 amd64 1:1.0.8-1 [20.7 kB] Get:5 http://httpredir.debian.org/debian/ jessie/main libxdmcp6 amd64 1:1.1.1-1+b1 [24.9 kB] Get:6 http://httpredir.debian.org/debian/ jessie/main libxcb1 amd64 1.10-3+b1 [44.4 kB] Get:7 http://httpredir.debian.org/debian/ jessie/main libx11-data all 2:1.6.2-3 [126 kB] Get:8 http://httpredir.debian.org/debian/ jessie/main libx11-6 amd64 2:1.6.2-3 [729 kB] Get:9 http://httpredir.debian.org/debian/ jessie/main libxext6 amd64 2:1.3.3-1 [52.7 kB] Get:10 http://httpredir.debian.org/debian/ jessie/main libxmuu1 amd64 2:1.1.2-1 [23.3 kB] Get:11 http://httpredir.debian.org/debian/ jessie/main openssh-client amd64 1:6.7p1-5 [691 kB] Get:12 http://httpredir.debian.org/debian/ jessie/main liberror-perl all 0.17-1.1 [22.4 kB] Get:13 http://httpredir.debian.org/debian/ jessie/main git-man all 1:2.1.4-2.1 [1,266 kB] Get:14 http://httpredir.debian.org/debian/ jessie/main git amd64 1:2.1.4-2.1 [3,624 kB] Get:15 http://httpredir.debian.org/debian/ jessie/main rsync amd64 3.1.1-3 [390 kB] Get:16 http://httpredir.debian.org/debian/ jessie/main xauth amd64 1:1.0.9-1 [38.2 kB] Fetched 7,456 kB in 8s (859 kB/s) E: Can not write log (Is /dev/pts mounted?) - posix_openpt (2: No such file or directory) Selecting previously unselected package libbsd0:amd64. (Reading database ... 19184 files and directories currently installed.) Preparing to unpack .../libbsd0_0.7.0-2_amd64.deb ... Unpacking libbsd0:amd64 (0.7.0-2) ... Selecting previously unselected package libedit2:amd64. Preparing to unpack .../libedit2_3.1-20140620-2_amd64.deb ... Unpacking libedit2:amd64 (3.1-20140620-2) ... Selecting previously unselected package libcurl3-gnutls:amd64. Preparing to unpack .../libcurl3-gnutls_7.38.0-4+deb8u2_amd64.deb ... Unpacking libcurl3-gnutls:amd64 (7.38.0-4+deb8u2) ... Selecting previously unselected package libxau6:amd64. Preparing to unpack .../libxau6_1%3a1.0.8-1_amd64.deb ... Unpacking libxau6:amd64 (1:1.0.8-1) ... Selecting previously unselected package libxdmcp6:amd64. Preparing to unpack .../libxdmcp6_1%3a1.1.1-1+b1_amd64.deb ... Unpacking libxdmcp6:amd64 (1:1.1.1-1+b1) ... Selecting previously unselected package libxcb1:amd64. Preparing to unpack .../libxcb1_1.10-3+b1_amd64.deb ... Unpacking libxcb1:amd64 (1.10-3+b1) ... Selecting previously unselected package libx11-data. Preparing to unpack .../libx11-data_2%3a1.6.2-3_all.deb ... Unpacking libx11-data (2:1.6.2-3) ... Selecting previously unselected package libx11-6:amd64. Preparing to unpack .../libx11-6_2%3a1.6.2-3_amd64.deb ... Unpacking libx11-6:amd64 (2:1.6.2-3) ... Selecting previously unselected package libxext6:amd64. Preparing to unpack .../libxext6_2%3a1.3.3-1_amd64.deb ... Unpacking libxext6:amd64 (2:1.3.3-1) ... Selecting previously unselected package libxmuu1:amd64. Preparing to unpack .../libxmuu1_2%3a1.1.2-1_amd64.deb ... Unpacking libxmuu1:amd64 (2:1.1.2-1) ... Selecting previously unselected package openssh-client. Preparing to unpack .../openssh-client_1%3a6.7p1-5_amd64.deb ... Unpacking openssh-client (1:6.7p1-5) ... Selecting previously unselected package liberror-perl. Preparing to unpack .../liberror-perl_0.17-1.1_all.deb ... Unpacking liberror-perl (0.17-1.1) ... Selecting previously unselected package git-man. Preparing to unpack .../git-man_1%3a2.1.4-2.1_all.deb ... Unpacking git-man (1:2.1.4-2.1) ... Selecting previously unselected package git. Preparing to unpack .../git_1%3a2.1.4-2.1_amd64.deb ... Unpacking git (1:2.1.4-2.1) ... Selecting previously unselected package rsync. Preparing to unpack .../rsync_3.1.1-3_amd64.deb ... Unpacking rsync (3.1.1-3) ... Selecting previously unselected package xauth. Preparing to unpack .../xauth_1%3a1.0.9-1_amd64.deb ... Unpacking xauth (1:1.0.9-1) ... Processing triggers for man-db (2.7.0.2-5) ... Processing triggers for systemd (215-17+deb8u2) ... Setting up libbsd0:amd64 (0.7.0-2) ... Setting up libedit2:amd64 (3.1-20140620-2) ... Setting up libcurl3-gnutls:amd64 (7.38.0-4+deb8u2) ... Setting up libxau6:amd64 (1:1.0.8-1) ... Setting up libxdmcp6:amd64 (1:1.1.1-1+b1) ... Setting up libxcb1:amd64 (1.10-3+b1) ... Setting up libx11-data (2:1.6.2-3) ... Setting up libx11-6:amd64 (2:1.6.2-3) ... Setting up libxext6:amd64 (2:1.3.3-1) ... Setting up libxmuu1:amd64 (2:1.1.2-1) ... Setting up openssh-client (1:6.7p1-5) ... Setting up liberror-perl (0.17-1.1) ... Setting up git-man (1:2.1.4-2.1) ... Setting up git (1:2.1.4-2.1) ... Setting up rsync (3.1.1-3) ... Failed to read /proc/cmdline. Ignoring: No such file or directory Setting up xauth (1:1.0.9-1) ... Processing triggers for libc-bin (2.19-18+deb8u1) ... Processing triggers for systemd (215-17+deb8u2) ... thomas@diamond /srv/store/sharespace $ Create a home directory to do work inside the chroot, copy the sharespace kernel patch, create a link so that \u0026ldquo;arm-linux-gnueabiobjcopy\u0026rdquo; works:\nthomas@diamond /srv/store/sharespace $ sudo mkdir jessie-x86_64/home/thomas thomas@diamond /srv/store/sharespace $ sudo chown thomas:thomas jessie-x86_64/home/thomas thomas@diamond /srv/store/sharespace $ cp /srv/store/sharespace/v3.10-sharespace.patch /srv/store/sharespace/jessie-x86_64/home/thomas/ thomas@diamond /srv/store/sharespace $ ln -s /usr/bin/arm-linux-gnueabi-objcopy /usr/bin/arm-linux-gnueabiobjcopy thomas@diamond /srv/store/sharespace $ Mount proc and sys. Then chroot in as thomas:\nthomas@diamond /srv/store/sharespace $ cd jessie-x86_64/ thomas@diamond /srv/store/sharespace/jessie-x86_64 $ sudo mount -t proc proc proc thomas@diamond /srv/store/sharespace/jessie-x86_64 $ sudo mount -t sysfs sysfs sys thomas@diamond /srv/store/sharespace/jessie-x86_64 $ thomas@diamond /srv/store/sharespace/jessie-x86_64 $ sudo chroot /srv/store/sharespace/jessie-x86_64 su - thomas su: Authentication failure (Ignored) thomas@diamond:~$ Get Compiling # Get the latest linux source from git:\nthomas@diamond:~$ git clone https://github.com/torvalds/linux.git Cloning into \u0026#39;linux\u0026#39;... remote: Counting objects: 4370680, done. remote: Total 4370680 (delta 0), reused 0 (delta 0), pack-reused 4370680 Receiving objects: 100% (4370680/4370680), 1.12 GiB | 6.24 MiB/s, done. Resolving deltas: 100% (3664432/3664432), done. Checking connectivity... done. Checking out files: 100% (51567/51567), done. thomas@diamond:~$ Checkout v3.10, create a new branch called v3.10-sharespace and apply the patch:\nthomas@diamond:~$ cd linux/ thomas@diamond:~/linux$ git checkout -b v3.10-sharespace v3.10 Checking out files: 100% (41519/41519), done. Switched to a new branch \u0026#39;v3.10-sharespace\u0026#39; thomas@diamond:~/linux$ cat ~/v3.10-sharespace.patch | patch -p1 patching file .config patching file arch/arm/mach-orion5x/Kconfig patching file arch/arm/mach-orion5x/Makefile patching file arch/arm/mach-orion5x/sharespace-setup.c patching file arch/arm/tools/mach-types thomas@diamond:~/linux$ Set some environment variables and compile the kernel:\nthomas@diamond:~/linux$ export CC=/usr/bin/arm-linux-gnueabi-gcc thomas@diamond:~/linux$ export KPKG_ARCH=armel thomas@diamond:~/linux$ export DPKG_ARCH=armel thomas@diamond:~/linux$ export DEB_HOST_ARCH=armel thomas@diamond:~/linux$ make-kpkg -j 4 --initrd --rootcmd fakeroot --arch arm --subarch orion5x --arch_in_name --revision 1.sharespace --cross_compile arm-linux-gnueabi kernel-image dpkg-architecture: warning: specified GNU system type arm-linux-gnu does not match gcc system type arm-linux-gnueabi, try setting a correct CC environment variable dpkg-architecture: warning: specified GNU system type arm-linux-gnu does not match gcc system type arm-linux-gnueabi, try setting a correct CC environment variable dpkg-architecture: warning: specified GNU system type arm-linux-gnu does not match gcc system type arm-linux-gnueabi, try setting a correct CC environment variable ====== making target debian/stamp/conf/minimal_debian [new prereqs: ]====== This is kernel package version 13.014+nmu1. test -d debian || mkdir debian SNIP some verbose output, press enter a few times for kernel default config values and wait.\nmake[1]: Entering directory \u0026#39;/home/thomas/linux\u0026#39; CHK include/generated/uapi/linux/version.h HOSTCC scripts/genksyms/genksyms.o CC scripts/mod/empty.o HOSTCC scripts/selinux/genheaders/genheaders HOSTCC scripts/mod/mk_elfconfig HOSTCC scripts/selinux/mdp/mdp CC scripts/mod/devicetable-offsets.s MKELF scripts/mod/elfconfig.h GEN scripts/mod/devicetable-offsets.h HOSTCC scripts/mod/modpost.o \u0026lt;SNIP\u0026gt; CC init/main.o CC arch/arm/vfp/vfpmodule.o CC arch/arm/kernel/elf.o GEN usr/initramfs_data.cpio \u0026lt;SNIP\u0026gt; chown -R root:root /home/thomas/linux/debian/linux-image-3.10.0+-orion5x dpkg --build /home/thomas/linux/debian/linux-image-3.10.0+-orion5x .. dpkg-deb: building package `linux-image-3.10.0+-orion5x\u0026#39; in `../linux-image-3.10.0+-orion5x_1.sharespace_armel.deb\u0026#39;. make[2]: Leaving directory \u0026#39;/home/thomas/linux\u0026#39; make[1]: Leaving directory \u0026#39;/home/thomas/linux\u0026#39; thomas@diamond:~/linux$ thomas@diamond:~/linux$ exit Exit the chroot and install the newly created deb inside. This means /boot has armel code, but we are never booting this chroot so it just makes it easier to get the linux image and modules:\nthomas@diamond ~ $ sudo chroot /srv/store/sharespace/jessie-x86_64 dpkg -i /home/thomas/linux-image-3.10.0+-orion5x_1.sharespace_armel.deb Selecting previously unselected package linux-image-3.10.0+-orion5x. (Reading database ... 20358 files and directories currently installed.) Preparing to unpack .../linux-image-3.10.0+-orion5x_1.sharespace_armel.deb ... Done. Unpacking linux-image-3.10.0+-orion5x (1.sharespace) ... Setting up linux-image-3.10.0+-orion5x (1.sharespace) ... Running depmod. Examining /etc/kernel/postinst.d. run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.10.0+ /boot/vmlinuz-3.10.0+ thomas@diamond ~ $ Setup armel chroot # Create another chroot, but this time a foreign armel one. We need some bins and libs to construct an initrd and this will serve as the chroot to be installed as it\u0026rsquo;s much easier to make a foreign one on x86_64 than try to get debootstrap working with next to no other tools:\nthomas@diamond ~ $ sudo debootstrap --verbose --foreign --arch=armel --include=initramfs-tools,ssh,file,mdadm,pv,file jessie /srv/store/sharespace/jessie-armel http://httpredir.debian.org/debian/ I: Retrieving Release I: Retrieving Release.gpg I: Checking Release signature I: Valid Release signature (key id 75DDC3C4A499F1A18CB5F3C8CBF8D6FD518E17E1) I: Retrieving Packages I: Validating Packages I: Resolving dependencies of required packages... I: Resolving dependencies of base packages... I: Found additional required dependencies: acl adduser dmsetup insserv libaudit-common libaudit1 libbz2-1.0 libcap2 libcap2-bin libcryptsetup4 libdb5.3 libdebconfclient0 libdevmapper1.02.1 libgcrypt20 libgpg-error0 libkmod2 libncursesw5 libprocps3 libsemanage-common libsemanage1 libslang2 libsystemd0 libudev1 libustr-1.0-1 procps systemd systemd-sysv udev I: Found additional base dependencies: klibc-utils libbsd0 libdns-export100 libedit2 libffi6 libgmp10 libgnutls-deb0-28 libgnutls-openssl27 libgssapi-krb5-2 libhogweed2 libicu52 libidn11 libirs-export91 libisc-export95 libisccfg-export90 libk5crypto3 libkeyutils1 libklibc libkrb5-3 libkrb5support0 libmagic1 libmnl0 libnetfilter-acct1 libnettle4 libnfnetlink0 libp11-kit0 libpsl0 libtasn1-6 libwrap0 openssh-client openssh-server openssh-sftp-server I: Checking component main on http://httpredir.debian.org/debian... I: Retrieving acl 2.2.52-2 I: Validating acl 2.2.52-2 I: Retrieving libacl1 2.2.52-2 I: Validating libacl1 2.2.52-2 I: Retrieving adduser 3.113+nmu3 I: Validating adduser 3.113+nmu3 I: Retrieving apt 1.0.9.8.1 I: Validating apt 1.0.9.8.1 I: Retrieving apt-utils 1.0.9.8.1 I: Validating apt-utils 1.0.9.8.1 I: Retrieving libapt-inst1.5 1.0.9.8.1 I: Validating libapt-inst1.5 1.0.9.8.1 I: Retrieving libapt-pkg4.12 1.0.9.8.1 I: Validating libapt-pkg4.12 1.0.9.8.1 I: Retrieving libattr1 1:2.4.47-2 I: Validating libattr1 1:2.4.47-2 I: Retrieving libaudit-common 1:2.4-1 I: Validating libaudit-common 1:2.4-1 I: Retrieving libaudit1 1:2.4-1+b1 I: Validating libaudit1 1:2.4-1+b1 I: Retrieving base-files 8+deb8u2 I: Validating base-files 8+deb8u2 I: Retrieving base-passwd 3.5.37 I: Validating base-passwd 3.5.37 I: Retrieving bash 4.3-11+b1 I: Validating bash 4.3-11+b1 I: Retrieving libdns-export100 1:9.9.5.dfsg-9+deb8u2 I: Validating libdns-export100 1:9.9.5.dfsg-9+deb8u2 I: Retrieving libirs-export91 1:9.9.5.dfsg-9+deb8u2 I: Validating libirs-export91 1:9.9.5.dfsg-9+deb8u2 I: Retrieving libisc-export95 1:9.9.5.dfsg-9+deb8u2 I: Validating libisc-export95 1:9.9.5.dfsg-9+deb8u2 I: Retrieving libisccfg-export90 1:9.9.5.dfsg-9+deb8u2 I: Validating libisccfg-export90 1:9.9.5.dfsg-9+deb8u2 I: Retrieving libboost-iostreams1.55.0 1.55.0+dfsg-3 I: Validating libboost-iostreams1.55.0 1.55.0+dfsg-3 I: Retrieving bsdmainutils 9.0.6 I: Validating bsdmainutils 9.0.6 I: Retrieving libbz2-1.0 1.0.6-7+b3 I: Validating libbz2-1.0 1.0.6-7+b3 I: Retrieving libdebconfclient0 0.192 I: Validating libdebconfclient0 0.192 I: Retrieving coreutils 8.23-4 I: Validating coreutils 8.23-4 I: Retrieving cpio 2.11+dfsg-4.1 I: Validating cpio 2.11+dfsg-4.1 I: Retrieving cron 3.0pl1-127+deb8u1 I: Validating cron 3.0pl1-127+deb8u1 I: Retrieving libcryptsetup4 2:1.6.6-5 I: Validating libcryptsetup4 2:1.6.6-5 I: Retrieving dash 0.5.7-4+b1 I: Validating dash 0.5.7-4+b1 I: Retrieving libdb5.3 5.3.28-9 I: Validating libdb5.3 5.3.28-9 I: Retrieving debconf 1.5.56 I: Validating debconf 1.5.56 I: Retrieving debconf-i18n 1.5.56 I: Validating debconf-i18n 1.5.56 I: Retrieving debian-archive-keyring 2014.3 I: Validating debian-archive-keyring 2014.3 I: Retrieving debianutils 4.4+b1 I: Validating debianutils 4.4+b1 I: Retrieving diffutils 1:3.3-1+b1 I: Validating diffutils 1:3.3-1+b1 I: Retrieving dpkg 1.17.25 I: Validating dpkg 1.17.25 I: Retrieving e2fslibs 1.42.12-1.1 I: Validating e2fslibs 1.42.12-1.1 I: Retrieving e2fsprogs 1.42.12-1.1 I: Validating e2fsprogs 1.42.12-1.1 I: Retrieving libcomerr2 1.42.12-1.1 I: Validating libcomerr2 1.42.12-1.1 I: Retrieving libss2 1.42.12-1.1 I: Validating libss2 1.42.12-1.1 I: Retrieving file 1:5.22+15-2 I: Validating file 1:5.22+15-2 I: Retrieving libmagic1 1:5.22+15-2 I: Validating libmagic1 1:5.22+15-2 I: Retrieving findutils 4.4.2-9+b1 I: Validating findutils 4.4.2-9+b1 I: Retrieving gcc-4.8-base 4.8.4-1 I: Validating gcc-4.8-base 4.8.4-1 I: Retrieving gcc-4.9-base 4.9.2-10 I: Validating gcc-4.9-base 4.9.2-10 I: Retrieving libgcc1 1:4.9.2-10 I: Validating libgcc1 1:4.9.2-10 I: Retrieving libstdc++6 4.9.2-10 I: Validating libstdc++6 4.9.2-10 I: Retrieving libgdbm3 1.8.3-13.1 I: Validating libgdbm3 1.8.3-13.1 I: Retrieving libc-bin 2.19-18+deb8u1 I: Validating libc-bin 2.19-18+deb8u1 I: Retrieving libc6 2.19-18+deb8u1 I: Validating libc6 2.19-18+deb8u1 I: Retrieving multiarch-support 2.19-18+deb8u1 I: Validating multiarch-support 2.19-18+deb8u1 I: Retrieving libgmp10 2:6.0.0+dfsg-6 I: Validating libgmp10 2:6.0.0+dfsg-6 I: Retrieving gnupg 1.4.18-7 I: Validating gnupg 1.4.18-7 I: Retrieving gpgv 1.4.18-7 I: Validating gpgv 1.4.18-7 I: Retrieving libgnutls-deb0-28 3.3.8-6+deb8u3 I: Validating libgnutls-deb0-28 3.3.8-6+deb8u3 I: Retrieving libgnutls-openssl27 3.3.8-6+deb8u3 I: Validating libgnutls-openssl27 3.3.8-6+deb8u3 I: Retrieving grep 2.20-4.1 I: Validating grep 2.20-4.1 I: Retrieving groff-base 1.22.2-8 I: Validating groff-base 1.22.2-8 I: Retrieving gzip 1.6-4 I: Validating gzip 1.6-4 I: Retrieving hostname 3.15 I: Validating hostname 3.15 I: Retrieving libicu52 52.1-8+deb8u2 I: Validating libicu52 52.1-8+deb8u2 I: Retrieving ifupdown 0.7.53.1 I: Validating ifupdown 0.7.53.1 I: Retrieving init 1.22 I: Validating init 1.22 I: Retrieving init-system-helpers 1.22 I: Validating init-system-helpers 1.22 I: Retrieving initramfs-tools 0.120 I: Validating initramfs-tools 0.120 I: Retrieving insserv 1.14.0-5 I: Validating insserv 1.14.0-5 I: Retrieving iproute2 3.16.0-2 I: Validating iproute2 3.16.0-2 I: Retrieving iptables 1.4.21-2+b1 I: Validating iptables 1.4.21-2+b1 I: Retrieving libxtables10 1.4.21-2+b1 I: Validating libxtables10 1.4.21-2+b1 I: Retrieving iputils-ping 3:20121221-5+b2 I: Validating iputils-ping 3:20121221-5+b2 I: Retrieving isc-dhcp-client 4.3.1-6 I: Validating isc-dhcp-client 4.3.1-6 I: Retrieving isc-dhcp-common 4.3.1-6 I: Validating isc-dhcp-common 4.3.1-6 I: Retrieving libjson-c2 0.11-4 I: Validating libjson-c2 0.11-4 I: Retrieving libkeyutils1 1.5.9-5+b1 I: Validating libkeyutils1 1.5.9-5+b1 I: Retrieving klibc-utils 2.0.4-2 I: Validating klibc-utils 2.0.4-2 I: Retrieving libklibc 2.0.4-2 I: Validating libklibc 2.0.4-2 I: Retrieving kmod 18-3 I: Validating kmod 18-3 I: Retrieving libkmod2 18-3 I: Validating libkmod2 18-3 I: Retrieving libgssapi-krb5-2 1.12.1+dfsg-19 I: Validating libgssapi-krb5-2 1.12.1+dfsg-19 I: Retrieving libk5crypto3 1.12.1+dfsg-19 I: Validating libk5crypto3 1.12.1+dfsg-19 I: Retrieving libkrb5-3 1.12.1+dfsg-19 I: Validating libkrb5-3 1.12.1+dfsg-19 I: Retrieving libkrb5support0 1.12.1+dfsg-19 I: Validating libkrb5support0 1.12.1+dfsg-19 I: Retrieving less 458-3 I: Validating less 458-3 I: Retrieving libbsd0 0.7.0-2 I: Validating libbsd0 0.7.0-2 I: Retrieving libcap2 1:2.24-8 I: Validating libcap2 1:2.24-8 I: Retrieving libcap2-bin 1:2.24-8 I: Validating libcap2-bin 1:2.24-8 I: Retrieving libedit2 3.1-20140620-2 I: Validating libedit2 3.1-20140620-2 I: Retrieving libestr0 0.1.9-1.1 I: Validating libestr0 0.1.9-1.1 I: Retrieving libffi6 3.1-2+b2 I: Validating libffi6 3.1-2+b2 I: Retrieving libgcrypt20 1.6.3-2 I: Validating libgcrypt20 1.6.3-2 I: Retrieving libgpg-error0 1.17-3 I: Validating libgpg-error0 1.17-3 I: Retrieving libidn11 1.29-1+b2 I: Validating libidn11 1.29-1+b2 I: Retrieving liblocale-gettext-perl 1.05-8+b1 I: Validating liblocale-gettext-perl 1.05-8+b1 I: Retrieving liblogging-stdlog0 1.0.4-1 I: Validating liblogging-stdlog0 1.0.4-1 I: Retrieving liblognorm1 1.0.1-3 I: Validating liblognorm1 1.0.1-3 I: Retrieving libmnl0 1.0.3-5 I: Validating libmnl0 1.0.3-5 I: Retrieving libnetfilter-acct1 1.0.2-1.1 I: Validating libnetfilter-acct1 1.0.2-1.1 I: Retrieving libnfnetlink0 1.0.1-3 I: Validating libnfnetlink0 1.0.1-3 I: Retrieving libpipeline1 1.4.0-1 I: Validating libpipeline1 1.4.0-1 I: Retrieving libpsl0 0.5.1-1 I: Validating libpsl0 0.5.1-1 I: Retrieving libselinux1 2.3-2 I: Validating libselinux1 2.3-2 I: Retrieving libsemanage-common 2.3-1 I: Validating libsemanage-common 2.3-1 I: Retrieving libsemanage1 2.3-1+b1 I: Validating libsemanage1 2.3-1+b1 I: Retrieving libsepol1 2.3-2 I: Validating libsepol1 2.3-2 I: Retrieving libsigc++-2.0-0c2a 2.4.0-1 I: Validating libsigc++-2.0-0c2a 2.4.0-1 I: Retrieving libtasn1-6 4.2-3+deb8u1 I: Validating libtasn1-6 4.2-3+deb8u1 I: Retrieving libtext-charwidth-perl 0.04-7+b3 I: Validating libtext-charwidth-perl 0.04-7+b3 I: Retrieving libtext-iconv-perl 1.7-5+b2 I: Validating libtext-iconv-perl 1.7-5+b2 I: Retrieving libtext-wrapi18n-perl 0.06-7 I: Validating libtext-wrapi18n-perl 0.06-7 I: Retrieving libusb-0.1-4 2:0.1.12-25 I: Validating libusb-0.1-4 2:0.1.12-25 I: Retrieving logrotate 3.8.7-1+b1 I: Validating logrotate 3.8.7-1+b1 I: Retrieving lsb-base 4.1+Debian13+nmu1 I: Validating lsb-base 4.1+Debian13+nmu1 I: Retrieving dmsetup 2:1.02.90-2.2 I: Validating dmsetup 2:1.02.90-2.2 I: Retrieving libdevmapper1.02.1 2:1.02.90-2.2 I: Validating libdevmapper1.02.1 2:1.02.90-2.2 I: Retrieving man-db 2.7.0.2-5 I: Validating man-db 2.7.0.2-5 I: Retrieving manpages 3.74-1 I: Validating manpages 3.74-1 I: Retrieving mawk 1.3.3-17 I: Validating mawk 1.3.3-17 I: Retrieving mdadm 3.3.2-5 I: Validating mdadm 3.3.2-5 I: Retrieving nano 2.2.6-3 I: Validating nano 2.2.6-3 I: Retrieving libncurses5 5.9+20140913-1+b1 I: Validating libncurses5 5.9+20140913-1+b1 I: Retrieving libncursesw5 5.9+20140913-1+b1 I: Validating libncursesw5 5.9+20140913-1+b1 I: Retrieving libtinfo5 5.9+20140913-1+b1 I: Validating libtinfo5 5.9+20140913-1+b1 I: Retrieving ncurses-base 5.9+20140913-1 I: Validating ncurses-base 5.9+20140913-1 I: Retrieving ncurses-bin 5.9+20140913-1+b1 I: Validating ncurses-bin 5.9+20140913-1+b1 I: Retrieving net-tools 1.60-26+b1 I: Validating net-tools 1.60-26+b1 I: Retrieving netbase 5.3 I: Validating netbase 5.3 I: Retrieving netcat-traditional 1.10-41 I: Validating netcat-traditional 1.10-41 I: Retrieving libhogweed2 2.7.1-5 I: Validating libhogweed2 2.7.1-5 I: Retrieving libnettle4 2.7.1-5 I: Validating libnettle4 2.7.1-5 I: Retrieving libnewt0.52 0.52.17-1+b1 I: Validating libnewt0.52 0.52.17-1+b1 I: Retrieving whiptail 0.52.17-1+b1 I: Validating whiptail 0.52.17-1+b1 I: Retrieving nfacct 1.0.1-1.1 I: Validating nfacct 1.0.1-1.1 I: Retrieving openssh-client 1:6.7p1-5 I: Validating openssh-client 1:6.7p1-5 I: Retrieving openssh-server 1:6.7p1-5 I: Validating openssh-server 1:6.7p1-5 I: Retrieving openssh-sftp-server 1:6.7p1-5 I: Validating openssh-sftp-server 1:6.7p1-5 I: Retrieving ssh 1:6.7p1-5 I: Validating ssh 1:6.7p1-5 I: Retrieving libssl1.0.0 1.0.1k-3+deb8u1 I: Validating libssl1.0.0 1.0.1k-3+deb8u1 I: Retrieving libp11-kit0 0.20.7-1 I: Validating libp11-kit0 0.20.7-1 I: Retrieving libpam-modules 1.1.8-3.1 I: Validating libpam-modules 1.1.8-3.1 I: Retrieving libpam-modules-bin 1.1.8-3.1 I: Validating libpam-modules-bin 1.1.8-3.1 I: Retrieving libpam-runtime 1.1.8-3.1 I: Validating libpam-runtime 1.1.8-3.1 I: Retrieving libpam0g 1.1.8-3.1 I: Validating libpam0g 1.1.8-3.1 I: Retrieving libpcre3 2:8.35-3.3 I: Validating libpcre3 2:8.35-3.3 I: Retrieving perl-base 5.20.2-3+deb8u1 I: Validating perl-base 5.20.2-3+deb8u1 I: Retrieving libpopt0 1.16-10 I: Validating libpopt0 1.16-10 I: Retrieving libprocps3 2:3.3.9-9 I: Validating libprocps3 2:3.3.9-9 I: Retrieving procps 2:3.3.9-9 I: Validating procps 2:3.3.9-9 I: Retrieving pv 1.5.7-2 I: Validating pv 1.5.7-2 I: Retrieving libreadline6 6.3-8+b3 I: Validating libreadline6 6.3-8+b3 I: Retrieving readline-common 6.3-8 I: Validating readline-common 6.3-8 I: Retrieving rsyslog 8.4.2-1+deb8u1 I: Validating rsyslog 8.4.2-1+deb8u1 I: Retrieving sed 4.2.2-4+b1 I: Validating sed 4.2.2-4+b1 I: Retrieving sensible-utils 0.0.9 I: Validating sensible-utils 0.0.9 I: Retrieving login 1:4.2-3 I: Validating login 1:4.2-3 I: Retrieving passwd 1:4.2-3 I: Validating passwd 1:4.2-3 I: Retrieving libslang2 2.3.0-2 I: Validating libslang2 2.3.0-2 I: Retrieving startpar 0.59-3 I: Validating startpar 0.59-3 I: Retrieving libsystemd0 215-17+deb8u2 I: Validating libsystemd0 215-17+deb8u2 I: Retrieving libudev1 215-17+deb8u2 I: Validating libudev1 215-17+deb8u2 I: Retrieving systemd 215-17+deb8u2 I: Validating systemd 215-17+deb8u2 I: Retrieving systemd-sysv 215-17+deb8u2 I: Validating systemd-sysv 215-17+deb8u2 I: Retrieving udev 215-17+deb8u2 I: Validating udev 215-17+deb8u2 I: Retrieving initscripts 2.88dsf-59 I: Validating initscripts 2.88dsf-59 I: Retrieving sysv-rc 2.88dsf-59 I: Validating sysv-rc 2.88dsf-59 I: Retrieving sysvinit-utils 2.88dsf-59 I: Validating sysvinit-utils 2.88dsf-59 I: Retrieving tar 1.27.1-2+b1 I: Validating tar 1.27.1-2+b1 I: Retrieving tasksel 3.31+deb8u1 I: Validating tasksel 3.31+deb8u1 I: Retrieving tasksel-data 3.31+deb8u1 I: Validating tasksel-data 3.31+deb8u1 I: Retrieving libwrap0 7.6.q-25 I: Validating libwrap0 7.6.q-25 I: Retrieving traceroute 1:2.0.20-2+b1 I: Validating traceroute 1:2.0.20-2+b1 I: Retrieving tzdata 2015f-0+deb8u1 I: Validating tzdata 2015f-0+deb8u1 I: Retrieving libustr-1.0-1 1.0.4-3+b2 I: Validating libustr-1.0-1 1.0.4-3+b2 I: Retrieving bsdutils 1:2.25.2-6 I: Validating bsdutils 1:2.25.2-6 I: Retrieving libblkid1 2.25.2-6 I: Validating libblkid1 2.25.2-6 I: Retrieving libmount1 2.25.2-6 I: Validating libmount1 2.25.2-6 I: Retrieving libsmartcols1 2.25.2-6 I: Validating libsmartcols1 2.25.2-6 I: Retrieving libuuid1 2.25.2-6 I: Validating libuuid1 2.25.2-6 I: Retrieving mount 2.25.2-6 I: Validating mount 2.25.2-6 I: Retrieving util-linux 2.25.2-6 I: Validating util-linux 2.25.2-6 I: Retrieving vim-common 2:7.4.488-7 I: Validating vim-common 2:7.4.488-7 I: Retrieving vim-tiny 2:7.4.488-7 I: Validating vim-tiny 2:7.4.488-7 I: Retrieving wget 1.16-1 I: Validating wget 1.16-1 I: Retrieving liblzma5 5.1.1alpha+20120614-2+b3 I: Validating liblzma5 5.1.1alpha+20120614-2+b3 I: Retrieving zlib1g 1:1.2.8.dfsg-2+b1 I: Validating zlib1g 1:1.2.8.dfsg-2+b1 I: Chosen extractor for .deb packages: dpkg-deb I: Extracting acl... I: Extracting libacl1... I: Extracting adduser... I: Extracting libattr1... I: Extracting libaudit-common... I: Extracting libaudit1... I: Extracting base-files... I: Extracting base-passwd... I: Extracting bash... I: Extracting libbz2-1.0... I: Extracting libdebconfclient0... I: Extracting coreutils... I: Extracting libcryptsetup4... I: Extracting dash... I: Extracting libdb5.3... I: Extracting debconf... I: Extracting debconf-i18n... I: Extracting debianutils... I: Extracting diffutils... I: Extracting dpkg... I: Extracting e2fslibs... I: Extracting e2fsprogs... I: Extracting libcomerr2... I: Extracting libss2... I: Extracting findutils... I: Extracting gcc-4.8-base... I: Extracting gcc-4.9-base... I: Extracting libgcc1... I: Extracting libc-bin... I: Extracting libc6... I: Extracting multiarch-support... I: Extracting grep... I: Extracting gzip... I: Extracting hostname... I: Extracting init... I: Extracting insserv... I: Extracting libkmod2... I: Extracting libcap2... I: Extracting libcap2-bin... I: Extracting libgcrypt20... I: Extracting libgpg-error0... I: Extracting liblocale-gettext-perl... I: Extracting libselinux1... I: Extracting libsemanage-common... I: Extracting libsemanage1... I: Extracting libsepol1... I: Extracting libtext-charwidth-perl... I: Extracting libtext-iconv-perl... I: Extracting libtext-wrapi18n-perl... I: Extracting lsb-base... I: Extracting dmsetup... I: Extracting libdevmapper1.02.1... I: Extracting mawk... I: Extracting libncurses5... I: Extracting libncursesw5... I: Extracting libtinfo5... I: Extracting ncurses-base... I: Extracting ncurses-bin... I: Extracting libpam-modules... I: Extracting libpam-modules-bin... I: Extracting libpam-runtime... I: Extracting libpam0g... I: Extracting libpcre3... I: Extracting perl-base... I: Extracting libprocps3... I: Extracting procps... I: Extracting sed... I: Extracting sensible-utils... I: Extracting login... I: Extracting passwd... I: Extracting libslang2... I: Extracting startpar... I: Extracting libsystemd0... I: Extracting libudev1... I: Extracting systemd... I: Extracting systemd-sysv... I: Extracting udev... I: Extracting initscripts... I: Extracting sysv-rc... I: Extracting sysvinit-utils... I: Extracting tar... I: Extracting tzdata... I: Extracting libustr-1.0-1... I: Extracting bsdutils... I: Extracting libblkid1... I: Extracting libmount1... I: Extracting libsmartcols1... I: Extracting libuuid1... I: Extracting mount... I: Extracting util-linux... I: Extracting liblzma5... I: Extracting zlib1g... thomas@diamond ~ $ Create a tar of the entire chroot, at 176M we could almost tftp the lot on newer larger ram\u0026rsquo;ed machines:\nthomas@diamond ~ $ sudo tar cf /srv/store/sharespace/jessie-armel.tar -C /srv/store/sharespace jessie-armel thomas@diamond ~ $ thomas@diamond ~ $ ls -lah /srv/store/sharespace/jessie-armel.tar -rw-r--r-- 1 root root 176M Oct 14 21:07 /srv/store/sharespace/jessie-armel.tar thomas@diamond ~ $ Build images # Chroot back in as root to create the kernel. First we create some magic bytes to prepend to the image, something related to the hardware (Thanks again David Hicks). Then we use the mkimage tool to create a Linux image that u-boot will load:\nthomas@diamond ~ $ sudo chroot /srv/store/sharespace/jessie-x86_64 root@diamond:/# devio \u0026#39;wl 0xe3a01c0c,4\u0026#39; \u0026#39;wl 0xe3811044,4\u0026#39; \u0026gt; /boot/vmlinuz.magic root@diamond:/# root@diamond:/# cat /boot/vmlinuz.magic /boot/vmlinuz-3.10.0+ \u0026gt; /boot/vmlinuz-3.10.0+.withmagic root@diamond:/# root@diamond:/# mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n \u0026#34;SharespaceKImage\u0026#34; -d /boot/vmlinuz-3.10.0+.withmagic /boot/uImage Image Name: SharespaceKImage Created: Tue Oct 13 15:17:20 2015 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1499600 Bytes = 1464.45 kB = 1.43 MB Load Address: 00008000 Entry Point: 00008000 root@diamond:/# Create an initial ram disk structure. Thanks Gentoo! https://wiki.gentoo.org/wiki/Custom_Initramfs\nroot@diamond:/# mkdir -p /boot/initramfs/{bin,dev,etc,lib/arm-linux-gnueabi,lib/modules,mnt/root,proc,sbin,sys} root@diamond:/# cp -a /dev/{null,console,tty} /boot/initramfs/dev/ root@diamond:/# mknod /boot/initramfs/dev/sda b 8 0 root@diamond:/# mknod /boot/initramfs/dev/sda1 b 8 1 root@diamond:/# mknod /boot/initramfs/dev/sda2 b 8 2 root@diamond:/# mknod /boot/initramfs/dev/sda3 b 8 3 root@diamond:/# mknod /boot/initramfs/dev/sda4 b 8 4 root@diamond:/# mknod /boot/initramfs/dev/sdb b 8 16 root@diamond:/# mknod /boot/initramfs/dev/sdb1 b 8 17 root@diamond:/# mknod /boot/initramfs/dev/sdb2 b 8 18 root@diamond:/# mknod /boot/initramfs/dev/sdb3 b 8 19 root@diamond:/# mknod /boot/initramfs/dev/sdb4 b 8 20 root@diamond:/# mknod /boot/initramfs/dev/sdc b 8 32 root@diamond:/# mknod /boot/initramfs/dev/sdc1 b 8 33 root@diamond:/# mknod /boot/initramfs/dev/sdc2 b 8 34 root@diamond:/# mknod /boot/initramfs/dev/sdc3 b 8 35 root@diamond:/# mknod /boot/initramfs/dev/sdc4 b 8 36 root@diamond:/# mknod /boot/initramfs/dev/sdd b 8 48 root@diamond:/# mknod /boot/initramfs/dev/sdd1 b 8 49 root@diamond:/# mknod /boot/initramfs/dev/sdd2 b 8 50 root@diamond:/# mknod /boot/initramfs/dev/sdd3 b 8 51 root@diamond:/# mknod /boot/initramfs/dev/sdd4 b 8 52 root@diamond:/# root@diamond:/# cp /bin/busybox /boot/initramfs/bin root@diamond:/# cd /boot/initramfs/bin root@diamond:/boot/initramfs/bin# ln -s busybox mount root@diamond:/boot/initramfs/bin# ln -s busybox sh root@diamond:/boot/initramfs/bin# cd root@diamond:/# root@diamond:/# cp -a /lib/modules/3.10.0+ /boot/initramfs/lib/modules root@diamond:/# echo \u0026#34;/lib/arm-linux-gnueabi\u0026#34;\u0026gt; /boot/initramfs/etc/ld.so.conf Create a very basic /init script, note it will not switch_root or pivot_root. We land with some networking and the ability to see disks if we are lucky:\nroot@diamond:/# cat \u0026lt;\u0026lt; EOF \u0026gt; /boot/initramfs/init \u0026gt; #!/bin/busybox sh \u0026gt; set -x \u0026gt; mount -t proc none /proc \u0026gt; mount -t sysfs none /sys \u0026gt; modprobe \u0026gt; modprobe mv643xx_eth \u0026gt; modprobe mvmdio \u0026gt; ip link set eth0 up \u0026gt; ip addr add 192.168.1.10/24 dev eth0 \u0026gt; ip route add default via 192.168.1.254 dev eth0 \u0026gt; modprobe libata \u0026gt; modprobe sata_mv \u0026gt; modprobe sd_mod \u0026gt; modprobe ext2 \u0026gt; modprobe ext3 \u0026gt; modprobe ext4 \u0026gt; echo \u0026#34;exec /sbin/switch_root /mnt/root /sbin/init\u0026#34; \u0026gt; exec sh \u0026gt; EOF root@diamond:/# chmod +x /boot/initramfs/init root@diamond:/# root@diamond:~# exit exit thomas@diamond ~ $ Exit the chroot and copy some useful bits (like a system linker!) from the armel chroot into the ramdisk:\nthomas@diamond ~ $ sudo cp -a /srv/store/sharespace/jessie-armel/lib/ld-linux.so.3 /srv/store/sharespace/jessie-x86_64/boot/initramfs/lib thomas@diamond ~ $ sudo cp -a /srv/store/sharespace/jessie-armel/lib/arm-linux-gnueabi/l* /srv/store/sharespace/jessie-x86_64/boot/initramfs/lib/arm-linux-gnueabi/ thomas@diamond ~ $ sudo cp -a /srv/store/sharespace/jessie-armel/sbin/switch_root /srv/store/sharespace/jessie-armel/sbin/fdisk /srv/store/sharespace/jessie-armel/sbin/mk* /srv/store/sharespace/jessie-x86_64/boot/initramfs/sbin/ Back into the chroot as root and create the cpio.gz file that will be the initrd. Again the mkimage tool needs to bless the image:\nthomas@diamond ~ $ sudo chroot /srv/store/sharespace/jessie-x86_64 root@diamond:/# cd /boot/initramfs root@diamond:/boot/initramfs# find . -print0 | cpio --null -o --format=newc | gzip \u0026gt; /boot/initrd.img-3.10.0+ 140700 blocks root@diamond:/boot/initramfs# mkimage -A arm -O linux -T ramdisk -C gzip -a 0x0 -e 0x0 -n \u0026#34;SharespaceInitrd\u0026#34; -d /boot/initrd.img-3.10.0+ /boot/uInitrd Image Name: SharespaceInitrd Created: Wed Oct 14 20:31:57 2015 Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 26486373 Bytes = 25865.60 kB = 25.26 MB Load Address: 00000000 Entry Point: 00000000 root@diamond:/boot/initramfs# Copy Images # Copy images to tftp server:\nthomas@diamond ~ $ scp /srv/store/sharespace/jessie-x86_64/boot/u* jasper:/srv/tftp uImage 100% 1465KB 1.4MB/s 00:00 uInitrd 100% 25MB 12.6MB/s 00:02 thomas@diamond ~ $ Serial # It\u0026rsquo;s 3v line level, so there both worked for me: http://www.ftdichip.com/Products/Cables/USBTTLSerial.htm and http://www.ftdichip.com/Products/Cables/RPi.htm\nSee here for the pinout: http://westerndigital.nas-central.org/wiki/Category:ShareSpace#Serial_Access\nSetup minicom:\nthomas@diamond ~ $ cat /etc/minicom/minirc.wd # Machine-generated file - use \u0026#34;minicom -s\u0026#34; to change parameters. pu port /dev/ttyUSB0 pu baudrate 115200 pu bits 8 pu parity N pu stopbits 1 pu rtscts No thomas@diamond ~ $ Run minicom:\nthomas@diamond ~ $ mincom wd Booting # Switch on the Sharespace an interrupt the boot my pressing any key to get to the Marvell uboot prompt:\n__ __ _ _ | \\/ | __ _ _ ____ _____| | | | |\\/| |/ _` | \u0026#39;__\\ \\ / / _ \\ | | | | | | (_| | | \\ V / __/ | | |_| |_|\\__,_|_| \\_/ \\___|_|_| _ _ ____ _ | | | | | __ ) ___ ___ | |_ | | | |___| _ \\ / _ \\ / _ \\| __| | |_| |___| |_) | (_) | (_) | |_ \\___/ |____/ \\___/ \\___/ \\__| ** Forcing LOADER mode only ** ** MARVELL BOARD: DB-88F5X81-DDR2-A/B LE U-Boot 1.1.4 (Aug 4 2008 - 09:35:54) Marvell version: 2.3.23 U-Boot code: 00200000 -\u0026gt; 0026FFF0 BSS: -\u0026gt; 0027AD18 Soc: 88F5281 D0 (DDR2) CPU running @ 500Mhz SysClock = 166Mhz , TClock = 166Mhz DRAM CS[0] base 0x00000000 size 128MB DRAM Total size 128MB 32bit width [16384kB@ff000000] Flash: 16 MB Addresses 4M - 0M are saved for the U-Boot usage. Mem malloc Initialization (4M - 3M): Done CPU : ARM926 (Rev 0) Streaming disabled VFP initialized to Run Fast Mode. USB 0: host mode PCI 0: PCI Express Root Complex Interface CPU: Write allocate enabled Net: egiga0 [PRIME] Hit any key to stop autoboot: 0 Marvell\u0026gt;\u0026gt; Setup env for booting manually, set server ip, reset the ide, copy images to ram, set some parameters for the kernel:\nMarvell\u0026gt;\u0026gt; setenv serverip 192.168.1.252 Marvell\u0026gt;\u0026gt; setenv bootargs console=ttyS0,115200 Marvell\u0026gt;\u0026gt; Marvell\u0026gt;\u0026gt; ide reset Reset IDE: Marvell Serial ATA Adapter Found adapter at bus 0, device 1 ... Scanning channels Device 0: OK Model: ST3160812AS Firm: 3.ADJ Ser#: 5LSEMXAY Type: Hard Disk Supports 48-bit addressing Capacity: 152587.8 MB = 149.0 GB (312500000 x 512) Device 1: OK Model: ST3160812AS Firm: 3.ADJ Ser#: 5LSEG2XA Type: Hard Disk Supports 48-bit addressing Capacity: 152587.8 MB = 149.0 GB (312500000 x 512) Device 2: OK Model: ST3160812AS Firm: 3.ADJ Ser#: 5LSEMBH2 Type: Hard Disk Supports 48-bit addressing Capacity: 152587.8 MB = 149.0 GB (312500000 x 512) Device 3: OK Model: ST3160812AS Firm: 3.ADJ Ser#: 5LSEE8ZG Type: Hard Disk Supports 48-bit addressing Capacity: 152587.8 MB = 149.0 GB (312500000 x 512) Marvell\u0026gt;\u0026gt; tftpboot 0x800000 uImage Using egiga0 device TFTP from server 192.168.1.252; our IP address is 192.168.1.2 Filename \u0026#39;uImage\u0026#39;. Load address: 0x800000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ################################# done Bytes transferred = 1499664 (16e210 hex) Marvell\u0026gt;\u0026gt; tftpboot 0x01100000 uInitrd Using egiga0 device TFTP from server 192.168.1.252; our IP address is 192.168.1.2 Filename \u0026#39;uInitrd\u0026#39;. Load address: 0x1100000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ####################################### done Bytes transferred = 26486437 (19426a5 hex) Marvell\u0026gt;\u0026gt; Boot from memory:\nMarvell\u0026gt;\u0026gt; bootm 0x800000 0x01100000 ## Booting image at 00800000 ... Image Name: SharespaceKImage Created: 2015-10-13 15:17:20 UTC Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1499600 Bytes = 1.4 MB Load Address: 00008000 Entry Point: 00008000 Verifying Checksum ... OK OK ## Loading Ramdisk Image at 01100000 ... Image Name: SharespaceInitrd Created: 2015-10-14 20:31:57 UTC Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 26486373 Bytes = 25.3 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Starting kernel ... Uncompressing Linux... done, booting the kernel. [ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Initializing cgroup subsys cpuacct [ 0.000000] Linux version 3.10.0+ (thomas@diamond) (gcc version 4.9.2 ( 4.9.2-10) ) #2 Tue Oct 13 14:50:33 UTC 2015 [ 0.000000] CPU: Feroceon [41069260] revision 0 (ARMv5TEJ), cr=00053177 [ 0.000000] CPU: VIVT data cache, VIVT instruction cache [ 0.000000] Machine: WD Sharespace [ 0.000000] Clearing invalid memory bank 0KB@0x00000000 [ 0.000000] Clearing invalid memory bank 0KB@0x00000000 [ 0.000000] Clearing invalid memory bank 0KB@0x00000000 [ 0.000000] Ignoring unrecognised tag 0x00000000 [ 0.000000] Ignoring unrecognised tag 0x00000000 [ 0.000000] Ignoring unrecognised tag 0x00000000 [ 0.000000] Ignoring unrecognised tag 0x41000403 [ 0.000000] Memory policy: ECC disabled, Data cache writeback [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 32512 [ 0.000000] Kernel command line: root=/dev/mtdblock2 console=ttyS0,115200 init=/etc/rc.preroot [ 0.000000] PID hash table entries: 512 (order: -1, 2048 bytes) [ 0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes) [ 0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes) [ 0.000000] allocated 262144 bytes of page_cgroup [ 0.000000] please try \u0026#39;cgroup_disable=memory\u0026#39; option if you don\u0026#39;t want memory cgroups [ 0.000000] Memory: 128MB = 128MB total [ 0.000000] Memory: 99448k/99448k available, 31624k reserved, 0K highmem [ 0.000000] Virtual kernel memory layout: [ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB) [ 0.000000] fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB) [ 0.000000] vmalloc : 0xc8800000 - 0xff000000 ( 872 MB) [ 0.000000] lowmem : 0xc0000000 - 0xc8000000 ( 128 MB) [ 0.000000] modules : 0xbf000000 - 0xc0000000 ( 16 MB) [ 0.000000] .text : 0xc0008000 - 0xc03985ec (3650 kB) [ 0.000000] .init : 0xc0399000 - 0xc03bb1a4 ( 137 kB) [ 0.000000] .data : 0xc03bc000 - 0xc03fb8e0 ( 255 kB) [ 0.000000] .bss : 0xc03fb8e0 - 0xc043b710 ( 256 kB) [ 0.000000] NR_IRQS:64 [ 0.000000] sched_clock: 32 bits at 166MHz, resolution 5ns, wraps every 25769ms [ 0.000000] Console: colour dummy device 80x30 [ 10.201318] Calibrating delay loop... 498.89 BogoMIPS (lpj=2494464) [ 10.261035] pid_max: default: 32768 minimum: 301 [ 10.261201] Security Framework initialized [ 10.261286] Mount-cache hash table entries: 512 [ 10.262302] Initializing cgroup subsys memory [ 10.262421] Initializing cgroup subsys devices [ 10.262443] Initializing cgroup subsys freezer [ 10.262460] Initializing cgroup subsys net_cls [ 10.262478] Initializing cgroup subsys blkio [ 10.262495] Initializing cgroup subsys perf_event [ 10.262651] CPU: Testing write buffer coherency: ok [ 10.263321] Setting up static identity map for 0xc028f6b8 - 0xc028f6f4 [ 10.265238] devtmpfs: initialized [ 10.267703] regulator-dummy: no parameters [ 10.268106] NET: Registered protocol family 16 [ 10.269870] DMA: preallocated 256 KiB pool for atomic coherent allocations [ 10.270793] Orion ID: MV88F5281-D0. TCLK=166666667. [ 10.270860] Orion: Applying 5281 D0 WFI workaround. [ 10.272754] PCI host bridge to bus 0000:00 [ 10.272791] pci_bus 0000:00: root bus resource [mem 0xe0000000-0xe7ffffff] [ 10.272818] pci_bus 0000:00: root bus resource [io 0x1000-0xffff] [ 10.272843] pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff] [ 10.273760] PCI: bus0: Fast back to back transfers disabled [ 10.273853] pci 0000:00:01.0: BAR 0: assigned [mem 0xe0000000-0xe00fffff 64bit] [ 10.273894] pci 0000:00:01.0: BAR 2: assigned [io 0x1000-0x10ff] [ 10.277418] bio: create slab \u0026lt;bio-0\u0026gt; at 0 [ 10.279467] Switching to clocksource orion_clocksource [ 10.298778] NET: Registered protocol family 2 [ 10.299907] TCP established hash table entries: 1024 (order: 1, 8192 bytes) [ 10.299983] TCP bind hash table entries: 1024 (order: 0, 4096 bytes) [ 10.300030] TCP: Hash tables configured (established 1024 bind 1024) [ 10.300261] TCP: reno registered [ 10.300288] UDP hash table entries: 256 (order: 0, 4096 bytes) [ 10.300334] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes) [ 10.300734] NET: Registered protocol family 1 [ 10.301164] Unpacking initramfs... [ 17.080003] Freeing initrd memory: 25860K (c1101000 - c2a42000) [ 17.081189] audit: initializing netlink socket (disabled) [ 17.081256] type=2000 audit(6.870:1): initialized [ 17.082546] VFS: Disk quotas dquot_6.5.2 [ 17.082632] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 17.082903] msgmni has been set to 244 [ 17.084377] alg: No test for stdrng (krng) [ 17.084539] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252) [ 17.084816] io scheduler noop registered [ 17.084838] io scheduler deadline registered [ 17.084881] io scheduler cfq registered (default) [ 17.085435] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled [ 17.106884] serial8250.0: ttyS0 at MMIO 0xf1012000 (irq = 3) is a 16550A [ 17.571348] console [ttyS0] enabled [ 17.595654] serial8250.1: ttyS1 at MMIO 0xf1012100 (irq = 4) is a 16550A [ 17.603801] physmap platform flash device: 01000000 at ff000000 [ 17.610093] physmap-flash.0: Found 1 x16 devices at 0x0 in 8-bit bank. Manufacturer ID 0x000001 Chip ID 0x002101 [ 17.620293] Amd/Fujitsu Extended Query Table at 0x0040 [ 17.625422] Amd/Fujitsu Extended Query version 1.3. [ 17.630487] number of CFI chips: 1 [ 17.634833] Creating 5 MTD partitions on \u0026#34;physmap-flash.0\u0026#34;: [ 17.640454] 0x000000ca0000-0x000000cc0000 : \u0026#34;U-Boot environment\u0026#34; [ 17.648164] 0x000000e80000-0x000000f80000 : \u0026#34;Pre-RootFS\u0026#34; [ 17.655205] 0x000000cc0000-0x000000e80000 : \u0026#34;Kernel\u0026#34; [ 17.661842] 0x000000000000-0x000000ca0000 : \u0026#34;Full RootFS\u0026#34; [ 17.668843] 0x000000f80000-0x000001000000 : \u0026#34;U-Boot\u0026#34; [ 17.676431] mousedev: PS/2 mouse device common for all mice [ 17.682457] i2c /dev entries driver [ 17.686794] rtc-pcf8563 0-0051: chip found, driver version 0.4.3 [ 17.694719] rtc-pcf8563 0-0051: rtc core: registered rtc-pcf8563 as rtc0 [ 17.702116] TCP: cubic registered [ 17.705432] NET: Registered protocol family 17 [ 17.709986] VFP support v0.3: implementor 41 architecture 1 part 10 variant 9 rev 0 [ 17.718504] registered taskstats version 1 [ 17.724556] rtc-pcf8563 0-0051: setting system clock to 2015-10-15 08:35:18 UTC (1444898118) [ 17.734177] Freeing unused kernel memory: 136K (c0399000 - c03bb000) + mount -t proc none /proc + mount -t sysfs none /sys + modprobe + modprobe mv643xx_eth [ 17.771585] mv643xx_eth: MV-643xx 10/100/1000 ethernet driver version 1.4 [ 17.778666] libphy: PHY orion-mdio-mii:08 not found [ 17.783623] platform mv643xx_eth_port.0: Driver mv643xx_eth_port requests probe deferral + modprobe mvmdio [ 17.810749] libphy: orion_mdio_bus: probed [ 17.816660] mv643xx_eth_port mv643xx_eth_port.0 eth0: port 0 with MAC address 00:90:a9:5e:36:99 + ip link set eth0 up + ip addr add 192.168.1.10/24 dev eth0 + ip route add default via 192.168.1.254 dev eth0 + modprobe libata [ 17.886844] SCSI subsystem initialized + modprobe sata_mv [ 17.940058] sata_mv 0000:00:01.0: Gen-IIE 32 slots 4 ports SCSI mode IRQ via INTx [ 17.961799] scsi0 : sata_mv [ 17.965210] scsi1 : sata_mv [ 17.968584] scsi2 : sata_mv [ 17.972027] scsi3 : sata_mv [ 17.975253] ata1: SATA max UDMA/133 mmio m1048576@0xe0000000 port 0xe0022000 irq 11 [ 17.982943] ata2: SATA max UDMA/133 mmio m1048576@0xe0000000 port 0xe0024000 irq 11 [ 17.990611] ata3: SATA max UDMA/133 mmio m1048576@0xe0000000 port 0xe0026000 irq 11 [ 17.998245] ata4: SATA max UDMA/133 mmio m1048576@0xe0000000 port 0xe0028000 irq 11 [ 18.509589] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 18.589623] ata1.00: ATA-7: ST3160812AS, 3.ADJ, max UDMA/133 [ 18.595269] ata1.00: 312500000 sectors, multi 0: LBA48 NCQ (depth 31/32) [ 18.679638] ata1.00: configured for UDMA/133 [ 18.684591] scsi 0:0:0:0: Direct-Access ATA ST3160812AS 3.AD PQ: 0 ANSI: 5 [ 19.199586] ata2: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 19.259627] ata2.00: ATA-7: ST3160812AS, 3.ADJ, max UDMA/133 [ 19.265276] ata2.00: 312500000 sectors, multi 0: LBA48 NCQ (depth 31/32) [ 19.349638] ata2.00: configured for UDMA/133 [ 19.354586] scsi 1:0:0:0: Direct-Access ATA ST3160812AS 3.AD PQ: 0 ANSI: 5 [ 19.869593] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 19.949622] ata3.00: ATA-7: ST3160812AS, 3.ADJ, max UDMA/133 [ 19.955275] ata3.00: 312500000 sectors, multi 0: LBA48 NCQ (depth 31/32) [ 20.039636] ata3.00: configured for UDMA/133 [ 20.044614] scsi 2:0:0:0: Direct-Access ATA ST3160812AS 3.AD PQ: 0 ANSI: 5 [ 20.559588] ata4: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 20.639622] ata4.00: ATA-7: ST3160812AS, 3.ADJ, max UDMA/133 [ 20.645273] ata4.00: 312500000 sectors, multi 0: LBA48 NCQ (depth 31/32) [ 20.729639] ata4.00: configured for UDMA/133 [ 20.734605] scsi 3:0:0:0: Direct-Access ATA ST3160812AS 3.AD PQ: 0 ANSI: 5 + modprobe sd_mod [ 20.775185] sd 0:0:0:0: [sda] 312500000 512-byte logical blocks: (160 GB/149 GiB) [ 20.783392] sd 1:0:0:0: [sdb] 312500000 512-byte logical blocks: (160 GB/149 GiB) [ 20.791547] sd 2:0:0:0: [sdc] 312500000 512-byte logical blocks: (160 GB/149 GiB) [ 20.799842] sd 3:0:0:0: [sdd] 312500000 512-byte logical blocks: (160 GB/149 GiB) [ 20.808346] sd 0:0:0:0: [sda] Write Protect is off [ 20.814525] sd 1:0:0:0: [sdb] Write Protect is off [ 20.819912] sd 2:0:0:0: [sdc] Write Protect is off [ 20.825374] sd 3:0:0:0: [sdd] Write Protect is off [ 20.830527] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn\u0026#39;t support DPO or FUA [ 20.839771] sd 1:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn\u0026#39;t support DPO or FUA [ 20.849341] sd 2:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn\u0026#39;t support DPO or FUA [ 20.858706] sd 3:0:0:0: [sdd] Write cache: enabled, read cache: enabled, doesn\u0026#39;t support DPO or FUA [ 20.896594] sdc: sdc1 sdc2 sdc3 sdc4 [ 20.901134] sda: sda1 sda2 sda3 sda4 [ 20.905624] sdb: sdb1 sdb2 sdb3 sdb4 [ 20.909996] sdd: sdd1 [ 20.919401] sd 3:0:0:0: [sdd] Attached SCSI disk [ 20.927484] sd 0:0:0:0: [sda] Attached SCSI disk [ 20.932841] sd 1:0:0:0: [sdb] Attached SCSI disk [ 20.938295] sd 2:0:0:0: [sdc] Attached SCSI disk + modprobe ext2 + modprobe ext3 + modprobe ext4 + echo exec /sbin/switch_root /mnt/root /sbin/init exec /sbin/switch_root /mnt/root /sbin/init + exec sh BusyBox v1.22.1 (Debian 1:1.22.0-9+deb8u1) built-in shell (ash) Enter \u0026#39;help\u0026#39; for a list of built-in commands. sh: can\u0026#39;t access tty; job control turned off / # [ 21.494807] mv643xx_eth_port mv643xx_eth_port.0 eth0: link up, 1000 Mb/s, full duplex, flow control disabled / # Install system # Partition temporary root filesystem:\n/ # mknod /dev/zero c 1 5 / # dd if=/dev/zero of=/dev/sdd bs=1M count=10 10+0 records in 10+0 records out / # fdisk /dev/sdd Device contains neither a valid DOS partition table, nor Sun, SGI, OSF or GPT disklabel Building a new DOS disklabel. Changes will remain in memory only, until you decide to write them. After that the previous content won\u0026#39;t be recoverable. The number of cylinders for this disk is set to 19452. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): p Disk /dev/sdd: 160.0 GB, 160000000000 bytes 255 heads, 63 sectors/track, 19452 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-19452, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-19452, default 19452): +1024M Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table [ 131.952808] sdd: sdd1 / # Make and mount temp root filesystem:\n/ # mkfs.ext4 /dev/sdd1 mke2fs 1.42.12 (29-Aug-2014) ext2fs_check_if_mount: Can\u0026#39;t check if filesystem is mounted due to missing mtab file while determining. Creating filesystem with 251007 4k blocks and 62848 inodes Filesystem UUID: 5dd4f9a8-7376-11e5-9202-0090a95e3699 Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done / # mount -t ext4 /dev/sdd1 /mnt/root [ 231.518123] EXT4-fs (sdd1): mounted filesystem with ordered data mode. Opts: (null) / # Copy armel chroot tar from build pc to sharespace via netcat:\n/ # cd /mnt/root /mnt/root # ip -4 a show dev eth0 2: eth0: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc mq qlen 1000 inet 192.168.1.10/24 scope global eth0 valid_lft forever preferred_lft forever /mnt/root # nc -l -p 9999 | tar xf - Meanwhile on the host computer:\nthomas@diamond ~ $ pv /srv/store/sharespace/jessie-armel.tar | nc 192.168.1.10 9999 175MiB 0:00:25 [ 6.8MiB/s] [=======================================================\u0026gt;] 100% thomas@diamond ~ $ After which the sharespace returns with:\n/mnt/root # Copy kernel dev from build pc to sharespace via netcat:\n/mnt/root # nc -l -p 9999 \u0026gt; linux-image-3.10.0+-orion5x_1.sharespace_armel.deb /mnt/root # Meanwhile on the host computer:\nthomas@diamond ~ $ pv /srv/store/sharespace/jessie-x86_64/home/thomas/linux-image-3.10.0+-orion5x_1.sharespace_armel.deb | nc 192.168.1.10 9999 15.2MiB 0:00:01 [12.9MiB/s] [=======================================================\u0026gt;] 100% thomas@diamond ~ $ Move the files to the root dir:\n/mnt/root # mv jessie-armel/* . /mnt/root # rmdir jessie-armel /mnt/root # cp -a /dev/sd* /mnt/root/dev/ /mnt/root # ls bin dev lib root sys var boot etc lost+found run tmp debootstrap home proc sbin usr /mnt/root # Finish the debootstrap:\n/mnt/root # mount -t proc proc proc /mnt/root # mount -t sysfs sysfs sys /mnt/root # chroot /mnt/root /bin/sh: 0: can\u0026#39;t access tty; job control turned off # ./debootstrap/debootstrap --verbose --second-stage I: Keyring file not available at /usr/share/keyrings/debian-archive-keyring.gpg; switching to https min I: Installing core packages... I: Installing core packages... I: Unpacking required packages... I: Unpacking acl... I: Unpacking libacl1:armel... I: Unpacking adduser... I: Unpacking libattr1:armel... I: Unpacking libaudit-common... I: Unpacking libaudit1:armel... I: Unpacking base-files... I: Unpacking base-passwd... I: Unpacking bash... I: Unpacking libbz2-1.0:armel... I: Unpacking libdebconfclient0:armel... I: Unpacking coreutils... I: Unpacking libcryptsetup4:armel... I: Unpacking dash... I: Unpacking libdb5.3:armel... I: Unpacking debconf... I: Unpacking debconf-i18n... I: Unpacking debianutils... I: Unpacking diffutils... I: Unpacking dpkg... I: Unpacking e2fslibs:armel... I: Unpacking e2fsprogs... I: Unpacking libcomerr2:armel... I: Unpacking libss2:armel... I: Unpacking findutils... I: Unpacking gcc-4.8-base:armel... I: Unpacking gcc-4.9-base:armel... I: Unpacking libgcc1:armel... I: Unpacking libc-bin... I: Unpacking libc6:armel... I: Unpacking multiarch-support... I: Unpacking grep... I: Unpacking gzip... I: Unpacking hostname... I: Unpacking init... I: Unpacking insserv... I: Unpacking libkmod2:armel... I: Unpacking libcap2:armel... I: Unpacking libcap2-bin... I: Unpacking libgcrypt20:armel... I: Unpacking libgpg-error0:armel... I: Unpacking liblocale-gettext-perl... I: Unpacking libselinux1:armel... I: Unpacking libsemanage-common... I: Unpacking libsemanage1:armel... I: Unpacking libsepol1:armel... I: Unpacking libtext-charwidth-perl... I: Unpacking libtext-iconv-perl... I: Unpacking libtext-wrapi18n-perl... I: Unpacking lsb-base... I: Unpacking dmsetup... I: Unpacking libdevmapper1.02.1:armel... I: Unpacking mawk... I: Unpacking libncurses5:armel... I: Unpacking libncursesw5:armel... I: Unpacking libtinfo5:armel... I: Unpacking ncurses-base... I: Unpacking ncurses-bin... I: Unpacking libpam-modules:armel... I: Unpacking libpam-modules-bin... I: Unpacking libpam-runtime... I: Unpacking libpam0g:armel... I: Unpacking libpcre3:armel... I: Unpacking perl-base... I: Unpacking libprocps3:armel... I: Unpacking procps... I: Unpacking sed... I: Unpacking sensible-utils... I: Unpacking login... I: Unpacking passwd... I: Unpacking libslang2:armel... I: Unpacking startpar... I: Unpacking libsystemd0:armel... I: Unpacking libudev1:armel... I: Unpacking systemd... I: Unpacking systemd-sysv... I: Unpacking udev... I: Unpacking initscripts... I: Unpacking sysv-rc... I: Unpacking sysvinit-utils... I: Unpacking tar... I: Unpacking tzdata... I: Unpacking libustr-1.0-1:armel... I: Unpacking bsdutils... I: Unpacking libblkid1:armel... I: Unpacking libmount1:armel... I: Unpacking libsmartcols1:armel... I: Unpacking libuuid1:armel... I: Unpacking mount... I: Unpacking util-linux... I: Unpacking liblzma5:armel... I: Unpacking zlib1g:armel... I: Configuring required packages... I: Configuring gcc-4.8-base:armel... I: Configuring lsb-base... I: Configuring sensible-utils... I: Configuring ncurses-base... I: Configuring libsemanage-common... I: Configuring gcc-4.9-base:armel... I: Configuring libaudit-common... I: Configuring libc6:armel... I: Configuring startpar... I: Configuring diffutils... I: Configuring insserv... I: Configuring findutils... I: Configuring debianutils... I: Configuring hostname... I: Configuring multiarch-support... I: Configuring mawk... I: Configuring libprocps3:armel... I: Configuring libpcre3:armel... I: Configuring libbz2-1.0:armel... I: Configuring libkmod2:armel... I: Configuring libgpg-error0:armel... I: Configuring base-files... I: Configuring libdebconfclient0:armel... I: Configuring libselinux1:armel... I: Configuring libcomerr2:armel... I: Configuring libslang2:armel... I: Configuring libsepol1:armel... I: Configuring libgcc1:armel... I: Configuring libustr-1.0-1:armel... I: Configuring libsmartcols1:armel... I: Configuring libaudit1:armel... I: Configuring libtinfo5:armel... I: Configuring libudev1:armel... I: Configuring libattr1:armel... I: Configuring libss2:armel... I: Configuring liblzma5:armel... I: Configuring base-passwd... I: Configuring e2fslibs:armel... I: Configuring libgcrypt20:armel... I: Configuring libncursesw5:armel... I: Configuring libdb5.3:armel... I: Configuring zlib1g:armel... I: Configuring libcap2:armel... I: Configuring libsystemd0:armel... I: Configuring libdevmapper1.02.1:armel... I: Configuring libc-bin... I: Configuring libsemanage1:armel... I: Configuring sysvinit-utils... I: Configuring libacl1:armel... I: Configuring ncurses-bin... I: Configuring acl... I: Configuring libncurses5:armel... I: Configuring libcap2-bin... I: Configuring bsdutils... I: Configuring coreutils... I: Configuring tar... I: Configuring dpkg... I: Configuring sed... I: Configuring perl-base... I: Configuring grep... I: Configuring debconf... I: Configuring tzdata... I: Configuring gzip... I: Configuring dash... I: Configuring libtext-iconv-perl... I: Configuring sysv-rc... I: Configuring liblocale-gettext-perl... I: Configuring libtext-charwidth-perl... I: Configuring libpam0g:armel... I: Configuring initscripts... I: Configuring libpam-modules-bin... I: Configuring bash... I: Configuring procps... I: Configuring libtext-wrapi18n-perl... I: Configuring libpam-modules:armel... I: Configuring libpam-runtime... I: Configuring debconf-i18n... I: Configuring passwd... I: Configuring login... I: Configuring adduser... I: Configuring libuuid1:armel... I: Configuring libblkid1:armel... I: Configuring libmount1:armel... I: Configuring util-linux... I: Configuring libcryptsetup4:armel... I: Configuring mount... I: Configuring e2fsprogs... I: Configuring udev... I: Configuring systemd... I: Configuring dmsetup... I: Configuring systemd-sysv... I: Configuring init... I: Configuring libc-bin... I: Unpacking the base system... I: Unpacking apt... I: Unpacking apt-utils... I: Unpacking libapt-inst1.5:armel... I: Unpacking libapt-pkg4.12:armel... I: Unpacking libdns-export100... I: Unpacking libirs-export91... I: Unpacking libisc-export95... I: Unpacking libisccfg-export90... I: Unpacking libboost-iostreams1.55.0:armel... I: Unpacking bsdmainutils... I: Unpacking cpio... I: Unpacking cron... I: Unpacking debian-archive-keyring... I: Unpacking file... I: Unpacking libmagic1:armel... I: Unpacking libstdc++6:armel... I: Unpacking libgdbm3:armel... I: Unpacking libgmp10:armel... I: Unpacking gnupg... I: Unpacking gpgv... I: Unpacking libgnutls-deb0-28:armel... I: Unpacking libgnutls-openssl27:armel... I: Unpacking groff-base... I: Unpacking libicu52:armel... I: Unpacking ifupdown... I: Unpacking init-system-helpers... I: Unpacking initramfs-tools... I: Unpacking iproute2... I: Unpacking iptables... I: Unpacking libxtables10... I: Unpacking iputils-ping... I: Unpacking isc-dhcp-client... I: Unpacking isc-dhcp-common... I: Unpacking libjson-c2:armel... I: Unpacking libkeyutils1:armel... I: Unpacking klibc-utils... I: Unpacking libklibc... I: Unpacking kmod... I: Unpacking libgssapi-krb5-2:armel... I: Unpacking libk5crypto3:armel... I: Unpacking libkrb5-3:armel... I: Unpacking libkrb5support0:armel... I: Unpacking less... I: Unpacking libbsd0:armel... I: Unpacking libedit2:armel... I: Unpacking libestr0... I: Unpacking libffi6:armel... I: Unpacking libidn11:armel... I: Unpacking liblogging-stdlog0:armel... I: Unpacking liblognorm1:armel... I: Unpacking libmnl0:armel... I: Unpacking libnetfilter-acct1:armel... I: Unpacking libnfnetlink0:armel... I: Unpacking libpipeline1:armel... I: Unpacking libpsl0:armel... I: Unpacking libsigc++-2.0-0c2a:armel... I: Unpacking libtasn1-6:armel... I: Unpacking libusb-0.1-4:armel... I: Unpacking logrotate... I: Unpacking man-db... I: Unpacking manpages... I: Unpacking mdadm... I: Unpacking nano... I: Unpacking net-tools... I: Unpacking netbase... I: Unpacking netcat-traditional... I: Unpacking libhogweed2:armel... I: Unpacking libnettle4:armel... I: Unpacking libnewt0.52:armel... I: Unpacking whiptail... I: Unpacking nfacct... I: Unpacking openssh-client... I: Unpacking openssh-server... I: Unpacking openssh-sftp-server... I: Unpacking ssh... I: Unpacking libssl1.0.0:armel... I: Unpacking libp11-kit0:armel... I: Unpacking libpopt0:armel... I: Unpacking pv... I: Unpacking libreadline6:armel... I: Unpacking readline-common... I: Unpacking rsyslog... I: Unpacking tasksel... I: Unpacking tasksel-data... I: Unpacking libwrap0:armel... I: Unpacking traceroute... I: Unpacking vim-common... I: Unpacking vim-tiny... I: Unpacking wget... I: Configuring the base system... I: Configuring readline-common... I: Configuring libgdbm3:armel... I: Configuring manpages... I: Configuring libxtables10... I: Configuring cpio... I: Configuring libpopt0:armel... I: Configuring kmod... I: Configuring libestr0... I: Configuring less... I: Configuring pv... I: Configuring libssl1.0.0:armel... I: Configuring libklibc... I: Configuring gpgv... I: Configuring liblogging-stdlog0:armel... I: Configuring netcat-traditional... I: Configuring libpipeline1:armel... I: Configuring iproute2... I: Configuring libbsd0:armel... I: Configuring mdadm... I: Configuring libtasn1-6:armel... I: Configuring libmagic1:armel... I: Configuring nano... I: Configuring libgmp10:armel... I: Configuring libisc-export95... I: Configuring init-system-helpers... I: Configuring libnettle4:armel... I: Configuring debian-archive-keyring... I: Configuring vim-common... I: Configuring libnfnetlink0:armel... I: Configuring libstdc++6:armel... I: Configuring libffi6:armel... I: Configuring libkeyutils1:armel... I: Configuring libnewt0.52:armel... I: Configuring bsdmainutils... I: Configuring net-tools... I: Configuring cron... I: Configuring libmnl0:armel... I: Configuring libapt-pkg4.12:armel... I: Configuring libusb-0.1-4:armel... I: Configuring traceroute... I: Configuring logrotate... I: Configuring libidn11:armel... I: Configuring libreadline6:armel... I: Configuring libjson-c2:armel... I: Configuring libwrap0:armel... I: Configuring libicu52:armel... I: Configuring netbase... I: Configuring libedit2:armel... I: Configuring vim-tiny... I: Configuring klibc-utils... I: Configuring libhogweed2:armel... I: Configuring ifupdown... I: Configuring libisccfg-export90... I: Configuring libsigc++-2.0-0c2a:armel... I: Configuring groff-base... I: Configuring liblognorm1:armel... I: Configuring whiptail... I: Configuring gnupg... I: Configuring libpsl0:armel... I: Configuring libboost-iostreams1.55.0:armel... I: Configuring initramfs-tools... I: Configuring file... I: Configuring libdns-export100... I: Configuring libkrb5support0:armel... I: Configuring iptables... I: Configuring libapt-inst1.5:armel... I: Configuring libp11-kit0:armel... I: Configuring libgnutls-deb0-28:armel... I: Configuring wget... I: Configuring apt... I: Configuring man-db... I: Configuring libnetfilter-acct1:armel... I: Configuring rsyslog... I: Configuring libk5crypto3:armel... I: Configuring nfacct... I: Configuring apt-utils... I: Configuring libirs-export91... I: Configuring libgnutls-openssl27:armel... I: Configuring libkrb5-3:armel... I: Configuring iputils-ping... I: Configuring isc-dhcp-common... I: Configuring isc-dhcp-client... I: Configuring libgssapi-krb5-2:armel... I: Configuring openssh-client... I: Configuring openssh-sftp-server... I: Configuring openssh-server... I: Configuring ssh... I: Configuring tasksel... I: Configuring tasksel-data... I: Configuring libc-bin... I: Configuring systemd... I: Configuring initramfs-tools... I: Base system installed successfully. # Do some basic setup inside the new system, password, new user, hostname, fstab, networking, install the kernel:\n# stty erase ^H # passwd Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully # adduser thomas Adding user `thomas\u0026#39; ... Adding new group `thomas\u0026#39; (1000) ... Adding new user `thomas\u0026#39; (1000) with group `thomas\u0026#39; ... Creating home directory `/home/thomas\u0026#39; ... Copying files from `/etc/skel\u0026#39; ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for thomas Enter the new value, or press ENTER for the default Full Name []: Thomas Stewart Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] # # echo \u0026#34;sharespace\u0026#34; \u0026gt; /etc/hostname # echo \u0026#34;/dev/sdd1 / ext3 defaults,noatime,errors=remount-ro 0 1\u0026#34; \u0026gt; /etc/fstab # cat \u0026lt;\u0026lt; EOF \u0026gt; /etc/network/interfaces \u0026gt; auto lo \u0026gt; iface lo inet loopback \u0026gt; \u0026gt; auto eth0 \u0026gt; iface eth0 inet dhcp \u0026gt; EOF # # dpkg -i linux-image-3.10.0+-orion5x_1.sharespace_armel.deb Selecting previously unselected package linux-image-3.10.0+-orion5x. (Reading database ... 10083 files and directories currently installed.) Preparing to unpack linux-image-3.10.0+-orion5x_1.sharespace_armel.deb ... Done. Unpacking linux-image-3.10.0+-orion5x (1.sharespace) ... Setting up linux-image-3.10.0+-orion5x (1.sharespace) ... Hmm. There is a symbolic link /lib/modules/3.10.0+/build However, I can not read it: No such file or directory Therefore, I am deleting /lib/modules/3.10.0+/build Hmm. The package shipped with a symbolic link /lib/modules/3.10.0+/source However, I can not read the target: No such file or directory Therefore, I am deleting /lib/modules/3.10.0+/source Running depmod. Examining /etc/kernel/postinst.d. run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.10.0+ /boot/vmlinuz-3.10.0+ run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.10.0+ /boot/vmlinuz-3.10.0+ update-initramfs: Generating /boot/initrd.img-3.10.0+ W: mdadm: /etc/mdadm/mdadm.conf defines no arrays. W: mkconf: MD subsystem is not loaded, thus I cannot scan for arrays. W: mdadm: failed to auto-generate temporary mdadm.conf file. W: mdadm: no configuration file available. I: mdadm: letting initramfs assemble auto-detected arrays. # Erase sda, sdb and sdc:\n# dd if=/dev/zero bs=1M count=10 of=/dev/sda 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied, 0.318227 s, 33.0 MB/s # dd if=/dev/zero bs=1M count=10 of=/dev/sdb 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied, 0.318631 s, 32.9 MB/s # dd if=/dev/zero bs=1M count=10 of=/dev/sdc 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied, 0.319021 s, 32.9 MB/s # Partition the actual disks for the new root filesystem:\n# fdisk /dev/sda Welcome to fdisk (util-linux 2.25.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x65d89d7e. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): First sector (2048-312499999, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-312499999, default 312499999): +10G Created a new partition 1 of type \u0026#39;Linux\u0026#39; and of size 10 GiB. Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p Partition number (2-4, default 2): First sector (20973568-312499999, default 20973568): Last sector, +sectors or +size{K,M,G,T,P} (20973568-312499999, default 312499999): Created a new partition 2 of type \u0026#39;Linux\u0026#39; and of size 139 GiB. Command (m for help): t Partition number (1,2, default 2): 1 Hex code (type L to list all codes): fd Changed type of partition \u0026#39;Linux\u0026#39; to \u0026#39;Linux raid autodetect\u0026#39;. Command (m for help): t Partition number (1,2, default 2): 2 Hex code (type L to list all codes): fd Changed type of partition \u0026#39;Linux\u0026#39; to \u0026#39;Linux raid autodetect\u0026#39;. Command (m for help): p Disk /dev/sda: 149 GiB, 160000000000 bytes, 312500000 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x65d89d7e Device Boot Start End Sectors Size Id Type /dev/sda1 2048 20973567 20971520 10G fd Linux raid autodetect /dev/sda2 20973568 312499999 291526432 139G fd Linux raid autodetect Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. [ 2164.700550] sda: sda1 sda2 Syncing disks. # fdisk /dev/sdb Welcome to fdisk (util-linux 2.25.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0xb40ce87f. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): First sector (2048-312499999, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-312499999, default 312499999): +10G Created a new partition 1 of type \u0026#39;Linux\u0026#39; and of size 10 GiB. Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p Partition number (2-4, default 2): First sector (20973568-312499999, default 20973568): Last sector, +sectors or +size{K,M,G,T,P} (20973568-312499999, default 312499999): Created a new partition 2 of type \u0026#39;Linux\u0026#39; and of size 139 GiB. Command (m for help): t Partition number (1,2, default 2): 1 Hex code (type L to list all codes): fd Changed type of partition \u0026#39;Linux\u0026#39; to \u0026#39;Linux raid autodetect\u0026#39;. Command (m for help): t Partition number (1,2, default 2): 2 Hex code (type L to list all codes): fd Changed type of partition \u0026#39;Linux\u0026#39; to \u0026#39;Linux raid autodetect\u0026#39;. Command (m for help): p Disk /dev/sdb: 149 GiB, 160000000000 bytes, 312500000 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xb40ce87f Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 20973567 20971520 10G fd Linux raid autodetect /dev/sdb2 20973568 312499999 291526432 139G fd Linux raid autodetect Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. [ 2195.146742] sdb: sdb1 sdb2 Syncing disks. # fdisk /dev/sdc Welcome to fdisk (util-linux 2.25.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x0f18ca52. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): First sector (2048-312499999, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-312499999, default 312499999): +10G Created a new partition 1 of type \u0026#39;Linux\u0026#39; and of size 10 GiB. Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p Partition number (2-4, default 2): First sector (20973568-312499999, default 20973568): Last sector, +sectors or +size{K,M,G,T,P} (20973568-312499999, default 312499999): Created a new partition 2 of type \u0026#39;Linux\u0026#39; and of size 139 GiB. Command (m for help): t Partition number (1,2, default 2): 1 Hex code (type L to list all codes): fd Changed type of partition \u0026#39;Linux\u0026#39; to \u0026#39;Linux raid autodetect\u0026#39;. Command (m for help): t Partition number (1,2, default 2): 2 Hex code (type L to list all codes): fd Changed type of partition \u0026#39;Linux\u0026#39; to \u0026#39;Linux raid autodetect\u0026#39;. Command (m for help): p Disk /dev/sdc: 149 GiB, 160000000000 bytes, 312500000 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x0f18ca52 Device Boot Start End Sectors Size Id Type /dev/sdc1 2048 20973567 20971520 10G fd Linux raid autodetect /dev/sdc2 20973568 312499999 291526432 139G fd Linux raid autodetect Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. [ 2233.149041] sdc: sdc1 sdc2 Syncing disks. # Create a raid1 mirror of sda1, sdb1, sdc1 and missing. The disk sdd1 it still used for the temp root and can be added to the mirror later:\n# modprobe raid1 [ 360.935350] md: raid1 personality registered for level 1 # # mdadm -C /dev/md0 -l 1 -n 4 /dev/sd[abc]1 missing mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store \u0026#39;/boot\u0026#39; on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? y mdadm: Defaulting to version 1.2 metadata [ 372.071509] md: bind\u0026lt;sda1\u0026gt; [ 372.077087] md: bind\u0026lt;sdb1\u0026gt; [ 372.088851] md: bind\u0026lt;sdc1\u0026gt; [ 372.093167] md/raid1:md0: not clean -- starting background reconstruction [ 372.099994] md/raid1:md0: active with 3 out of 4 mirrors [ 372.105509] md0: detected capacity change from 0 to 10729029632 [ 372.111661] md: md0 switched to read-write mode. mdadm: array /dev/md0 started. [ 372.118248] md: resync of RAID array md0 [ 372.123143] md: minimum _guaranteed_ speed: 1000 KB/sec/disk. [ 372.128962] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for res. [ 372.138348] md: using 128k window, over a total of 10477568k. # Make filesystem:\n# mkfs -t ext4 /dev/md0 mke2fs 1.42.12 (29-Aug-2014) [ 415.024825] md0: unknown partition table ext2fs_check_if_mount: Can\u0026#39;t check if filesystem is mounted due to missing mtab file while determining. Creating filesystem with 2619392 4k blocks and 655360 inodes Filesystem UUID: 3e5881c6-b5f8-4b1e-a953-31d5f5c76588 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done # # exit / # After a little time the raid resync completes:\n[ 628.443261] md: md0: resync done. Then: / # cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdc1[2] sdb1[1] sda1[0] 10477568 blocks super 1.2 [4/3] [UUU_] unused devices: \u0026lt;none\u0026gt; / # Umount the pseudo file systems and copy the temp root to the new root:\n/ # umount /mnt/root/proc / # umount /mnt/root/sys / # mkdir /mnt/rootnew / # mount -t ext4 /mnt/root/dev/md0 /mnt/rootnew [ 485.376000] EXT4-fs (md0): mounted filesystem with ordered data mode. Opts: (null) / # cp -a /mnt/root/* /mnt/rootnew/ / # umount /mnt/root / # / # umount /sys / # umount /proc Switch root to the new root and we get a running Debian system:\n/ # exec /sbin/switch_root /mnt/rootnew /sbin/init switch_root: failed to mount moving /dev to /mnt/rootnew/dev: Invalid argument switch_root: forcing unmount of /dev switch_root: failed to mount moving /proc to /mnt/rootnew/proc: Invalid argument switch_root: forcing unmount of /proc switch_root: failed to mount moving /sys to /mnt/rootnew/sys: Invalid argument switch_root: forcing unmount of /sys switch_root: failed to mount moving /run to /mnt/rootnew/run: No such file or directory switch_root: forcing unmount of /run [ 137.564436] systemd[1]: systemd 215 running in system mode. (+PAM +AUDIT +SELINUX +IMA +SYSVINIT +L) [ 137.578360] systemd[1]: Detected architecture \u0026#39;arm\u0026#39;. Welcome to Debian GNU/Linux 8 (jessie)! [ 137.719546] systemd[1]: Inserted module \u0026#39;autofs4\u0026#39; [ 137.794065] NET: Registered protocol family 10 [ 137.800254] systemd[1]: Inserted module \u0026#39;ipv6\u0026#39; [ 137.819434] systemd[1]: Set hostname to \u0026lt;sharespace\u0026gt;. [ 138.543444] systemd[1]: Cannot add dependency job for unit dbus.socket, ignoring: Unit dbus.socket . [ 138.556660] systemd[1]: Cannot add dependency job for unit display-manager.service, ignoring: Unit . [ 138.578621] systemd[1]: Starting Forward Password Requests to Wall Directory Watch. [ 138.587084] systemd[1]: Started Forward Password Requests to Wall Directory Watch. [ 138.594888] systemd[1]: Expecting device dev-ttyS0.device... Expecting device dev-ttyS0.device... [ 138.620085] systemd[1]: Starting Remote File Systems (Pre). [ OK ] Reached target Remote File Systems (Pre). [ 138.650029] systemd[1]: Reached target Remote File Systems (Pre). [ 138.656347] systemd[1]: Starting Encrypted Volumes. [ OK ] Reached target Encrypted Volumes. [ 138.680166] systemd[1]: Reached target Encrypted Volumes. [ 138.685818] systemd[1]: Starting Dispatch Password Requests to Console Directory Watch. [ 138.694343] systemd[1]: Started Dispatch Password Requests to Console Directory Watch. [ 138.702475] systemd[1]: Starting Paths. [ OK ] Reached target Paths. [ 138.720036] systemd[1]: Reached target Paths. [ 138.724705] systemd[1]: Starting Arbitrary Executable File Formats File System Automount Point. [ OK ] Set up automount Arbitrary Executable File Formats F...utomount Point. [ 138.760043] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Po. [ 138.769655] systemd[1]: Starting Swap. [ OK ] Reached target Swap. [ 138.790033] systemd[1]: Reached target Swap. [ 138.794503] systemd[1]: Starting Root Slice. [ OK ] Created slice Root Slice. [ 138.820028] systemd[1]: Created slice Root Slice. [ 138.824921] systemd[1]: Starting User and Session Slice. [ OK ] Created slice User and Session Slice. [ 138.850038] systemd[1]: Created slice User and Session Slice. [ 138.855973] systemd[1]: Starting Delayed Shutdown Socket. [ OK ] Listening on Delayed Shutdown Socket. [ 138.880036] systemd[1]: Listening on Delayed Shutdown Socket. [ 138.885975] systemd[1]: Starting /dev/initctl Compatibility Named Pipe. [ OK ] Listening on /dev/initctl Compatibility Named Pipe. [ 138.910036] systemd[1]: Listening on /dev/initctl Compatibility Named Pipe. [ 138.917183] systemd[1]: Starting Journal Socket (/dev/log). [ OK ] Listening on Journal Socket (/dev/log). [ 138.940030] systemd[1]: Listening on Journal Socket (/dev/log). [ 138.946199] systemd[1]: Starting udev Control Socket. [ OK ] Listening on udev Control Socket. [ 138.970037] systemd[1]: Listening on udev Control Socket. [ 138.975683] systemd[1]: Starting udev Kernel Socket. [ OK ] Listening on udev Kernel Socket. [ 139.000015] systemd[1]: Listening on udev Kernel Socket. [ 139.005554] systemd[1]: Starting Journal Socket. [ OK ] Listening on Journal Socket. [ 139.030038] systemd[1]: Listening on Journal Socket. [ 139.035318] systemd[1]: Starting System Slice. [ OK ] Created slice System Slice. [ 139.060037] systemd[1]: Created slice System Slice. [ 139.065245] systemd[1]: Started File System Check on Root Device. [ 139.071536] systemd[1]: Starting system-getty.slice. [ OK ] Created slice system-getty.slice. [ 139.100031] systemd[1]: Created slice system-getty.slice. [ 139.105618] systemd[1]: Starting system-serial\\x2dgetty.slice. [ OK ] Created slice system-serial\\x2dgetty.slice. [ 139.130036] systemd[1]: Created slice system-serial\\x2dgetty.slice. [ 139.136615] systemd[1]: Starting Increase datagram queue length... Starting Increase datagram queue length... [ 139.165989] systemd[1]: Mounting POSIX Message Queue File System... Mounting POSIX Message Queue File System... [ 139.206177] systemd[1]: Starting Create list of required static device nodes for the current kernel. Starting Create list of required static device nodes...rrent kernel... [ 139.256481] systemd[1]: Starting udev Coldplug all Devices... Starting udev Coldplug all Devices... [ 139.309447] systemd[1]: Mounted Huge Pages File System. [ 139.321239] systemd[1]: Mounting Debug File System... Mounting Debug File System... [ 139.417909] systemd[1]: Starting Load Kernel Modules... Starting Load Kernel Modules... [ 139.474404] systemd[1]: Started Set Up Additional Binary Formats. [ 139.490093] systemd[1]: Starting Slices. [ OK ] Reached target Slices. [ 139.510066] systemd[1]: Reached target Slices. [ 139.516625] systemd[1]: Starting Remount Root and Kernel File Systems... Starting Remount Root and Kernel File Systems... [ OK ] Mounted Debug File System. [ 139.590105] systemd[1]: Mounted Debug File System. [ OK ] Mounted POSIX Message Queue File System. [ 139.620075] systemd[1]: Mounted POSIX Message Queue File System. [ OK ] Started Increase datagram queue length. [ 139.634970] systemd[1]: Started Increase datagram queue length. [ OK ] Started Create list of required static device nodes ...current kernel. [ 139.670049] systemd[1]: Started Create list of required static device nodes for the current kernel. [ OK ] Started Load Kernel Modules. [ 139.713168] systemd[1]: Started Load Kernel Modules. [ 139.720079] EXT4-fs (md0): re-mounted. Opts: errors=remount-ro [ OK ] Started Remount Root and Kernel File Systems. [ 139.820104] systemd[1]: Started Remount Root and Kernel File Systems. [ OK ] Started udev Coldplug all Devices. [ 139.940029] systemd[1]: Started udev Coldplug all Devices. [ 140.216230] systemd[1]: Starting Various fixups to make systemd work better on Debian... Starting Various fixups to make systemd work better on Debian... [ 140.256454] systemd[1]: Starting Load/Save Random Seed... Starting Load/Save Random Seed... [ 140.296116] systemd[1]: Mounted FUSE Control File System. [ 140.315340] systemd[1]: Mounted Configuration File System. [ 140.323687] systemd[1]: Starting Apply Kernel Variables... Starting Apply Kernel Variables... [ 140.362728] systemd[1]: Starting Create Static Device Nodes in /dev... Starting Create Static Device Nodes in /dev... [ 140.426145] systemd[1]: Starting Syslog Socket. [ OK ] Listening on Syslog Socket. [ 140.460126] systemd[1]: Listening on Syslog Socket. [ 140.465256] systemd[1]: Starting Sockets. [ OK ] Reached target Sockets. [ 140.480259] systemd[1]: Reached target Sockets. [ 140.485016] systemd[1]: Starting Journal Service... Starting Journal Service... [ OK ] Started Journal Service. [ 140.526862] systemd[1]: Started Journal Service. [ OK ] Started Various fixups to make systemd work better on Debian. [ OK ] Started Load/Save Random Seed. [ OK ] Started Apply Kernel Variables. [ OK ] Started Create Static Device Nodes in /dev. Starting udev Kernel Device Manager... [ OK ] Reached target Local File Systems (Pre). [ OK [ 141.035222] systemd-udevd[135]: starting version 215 ] Started udev Kernel Device Manager. Starting Copy rules generated while the root was ro... Starting LSB: MD array assembly... [ OK ] Started Copy rules generated while the root was ro. [ 141.768622] orion_wdt: Initial timeout 25 sec [ 141.831251] usbcore: registered new interface driver usbfs [ 141.836848] usbcore: registered new interface driver hub [ OK ] Started LSB: MD array assembly. [ OK ] Reached target Local File Systems. Starting Create Volatile Files and Directories... [ OK ] Reached target Remote File Systems. Starting Trigger Flushing of Journal to Persistent Storage... [ 142.080123] sd 0:0:0:0: Attached scsi generic sg0 type 0 Starting LSB: Raise network interfaces.... [ 142.167596] usbcore: registered new device driver usb [ OK ] Started Create Volatile Files and Directories. [ 142.377853] sd 1:0:0:0: Attached scsi generic sg1 type 0 [ 142.396333] systemd-journald[133]: Received request to flush runtime journal from PID 1 [ 142.479188] ehci_hcd: USB 2.0 \u0026#39;Enhanced\u0026#39; Host Controller (EHCI) Driver [ OK ] Started Trigger Flushing of Journal to Persistent Storage. [ 142.562344] sd 2:0:0:0: Attached scsi generic sg2 type 0 [ OK ] Found device /dev/ttyS0. [ 142.615927] sd 3:0:0:0: Attached scsi generic sg3 type 0 [ 142.651137] ehci-orion: EHCI orion driver [ 142.655246] orion-ehci orion-ehci.0: EHCI Host Controller Starting Update UTMP about System Boot/Shutdown... [ OK ] Started Update UTMP about System Boot/Shutdown. [ 142.819966] orion-ehci orion-ehci.0: new USB bus registered, assigned bus number 1 [ 142.827819] orion-ehci orion-ehci.0: irq 17, io mem 0xf1050000 [ 143.029993] orion-ehci orion-ehci.0: USB 2.0 started, EHCI 1.00 [ 143.036023] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002 [ 143.042970] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 143.050307] usb usb1: Product: EHCI Host Controller [ 143.055177] usb usb1: Manufacturer: Linux 3.10.0+ ehci_hcd [ 143.060765] usb usb1: SerialNumber: orion-ehci.0 [ 143.200511] hub 1-0:1.0: USB hub found [ 143.204286] hub 1-0:1.0: 1 port detected [ 143.519918] usb 1-1: new high-speed USB device number 2 using orion-ehci [ 143.682257] usb 1-1: New USB device found, idVendor=05e3, idProduct=0608 [ 143.688983] usb 1-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0 [ 143.696191] usb 1-1: Product: USB2.0 Hub [ 143.719326] hub 1-1:1.0: USB hub found [ 143.727271] hub 1-1:1.0: 4 ports detected Starting MD array monitor... [ OK ] Started MD array monitor. [ OK ] Started LSB: Raise network interfaces.. [ OK ] Reached target Network. [ OK ] Reached target System Initialization. [ OK ] Reached target Timers. [ OK ] Reached target Basic System. Starting OpenBSD Secure Shell server... [ OK ] Started OpenBSD Secure Shell server. Starting Regular background program processing daemon... [ OK ] Started Regular background program processing daemon. Starting /etc/rc.local Compatibility... Starting getty on tty2-tty6 if dbus and logind are not available... Starting System Logging Service... Starting Permit User Sessions... [ OK ] Started /etc/rc.local Compatibility. [ OK ] Started Permit User Sessions. [ OK ] Started System Logging Service. Starting Getty on tty2... [ OK ] Started Getty on tty2. Starting Getty on tty1... [ OK ] Started Getty on tty1. Starting Serial Getty on ttyS0... [ OK ] Started Serial Getty on ttyS0. [ OK ] Started getty on tty2-tty6 if dbus and logind are not available. Starting Getty on tty6... [ OK ] Started Getty on tty6. Starting Getty on tty5... [ OK ] Started Getty on tty5. Starting Getty on tty4... [ OK ] Started Getty on tty4. Starting Getty on tty3... [ OK ] Started Getty on tty3. [ OK ] Reached target Login Prompts. [ OK ] Reached target Multi-User System. [ OK ] Reached target Graphical Interface. Starting Update UTMP about System Runlevel Changes... [ OK ] Started Update UTMP about System Runlevel Changes. Debian GNU/Linux 8 sharespace ttyS0 sharespace login: We can login:\nDebian GNU/Linux 8 sharespace ttyS0 sharespace login: root Password: Linux sharespace 3.10.0+ #2 Tue Oct 13 14:50:33 UTC 2015 armv5tel The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. root@sharespace:~# Update the fstab and the initrd image:\nroot@sharespace:~# echo \u0026#34;/dev/md0 / ext4 defaults,noatime,errors=remount-ro 0 1\u0026#34; \u0026gt; /etc/fstab root@sharespace:~# update-initramfs -u -k all update-initramfs: Generating /boot/initrd.img-3.10.0+ W: mdadm: /etc/mdadm/mdadm.conf defines no arrays. I: mdadm: auto-generated temporary mdadm.conf configuration file. I: mdadm: will start all available MD arrays from the initial ramdisk. I: mdadm: use `dpkg-reconfigure --priority=low mdadm` to change this. root@sharespace:~# mkimage -bash: mkimage: command not found root@sharespace:~# apt-get install u-boot-tools Reading package lists... Done Building dependency tree... Done The following NEW packages will be installed: u-boot-tools 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 71.6 kB of archives. After this operation, 207 kB of additional disk space will be used. Get:1 http://httpredir.debian.org/debian/ jessie/main u-boot-tools armel 2014.10+dfsg1-5 [71.6 kB] Fetched 71.6 kB in 1s (54.8 kB/s) Selecting previously unselected package u-boot-tools. (Reading database ... 12693 files and directories currently installed.) Preparing to unpack .../u-boot-tools_2014.10+dfsg1-5_armel.deb ... Unpacking u-boot-tools (2014.10+dfsg1-5) ... Processing triggers for man-db (2.7.0.2-5) ... Setting up u-boot-tools (2014.10+dfsg1-5) ... root@sharespace:~# root@sharespace:~# mkimage -A arm -O linux -T ramdisk -C gzip -a 0x0 -e 0x0 -n \u0026#34;SharespaceInitrd\u0026#34; -d /boot/initrd.img-3.10.0+ /boot/uInitrd Image Name: SharespaceInitrd Created: Thu Oct 15 21:19:14 2015 Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 8892065 Bytes = 8683.66 kB = 8.48 MB Load Address: 00000000 Entry Point: 00000000 root@sharespace:~# Copy the initrd to the tftp server and reboot:\nroot@sharespace:~# scp /boot/uInitrd thomas@jasper:/srv/tftp/uInitrd2 The authenticity of host \u0026#39;jasper (192.168.1.252)\u0026#39; can\u0026#39;t be established. ECDSA key fingerprint is 1d:b2:69:5e:17:17:41:fe:6f:a7:ad:29:f9:f2:01:ac. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added \u0026#39;jasper,192.168.1.252\u0026#39; (ECDSA) to the list of known hosts. thomas@jasper\u0026#39;s password: uInitrd 100% 8684KB 4.2MB/s 00:02 root@sharespace:~# root@sharespace:~# reboot Interrupt uboot again and manually boot like before, but this time use the updated initrd:\n__ __ _ _ | \\/ | __ _ _ ____ _____| | | | |\\/| |/ _` | \u0026#39;__\\ \\ / / _ \\ | | | | | | (_| | | \\ V / __/ | | |_| |_|\\__,_|_| \\_/ \\___|_|_| _ _ ____ _ | | | | | __ ) ___ ___ | |_ | | | |___| _ \\ / _ \\ / _ \\| __| | |_| |___| |_) | (_) | (_) | |_ \\___/ |____/ \\___/ \\___/ \\__| ** Forcing LOADER mode only ** ** MARVELL BOARD: DB-88F5X81-DDR2-A/B LE U-Boot 1.1.4 (Aug 4 2008 - 09:35:54) Marvell version: 2.3.23 U-Boot code: 00200000 -\u0026gt; 0026FFF0 BSS: -\u0026gt; 0027AD18 Soc: 88F5281 D0 (DDR2) CPU running @ 500Mhz SysClock = 166Mhz , TClock = 166Mhz DRAM CS[0] base 0x00000000 size 128MB DRAM Total size 128MB 32bit width [16384kB@ff000000] Flash: 16 MB Addresses 4M - 0M are saved for the U-Boot usage. Mem malloc Initialization (4M - 3M): Done CPU : ARM926 (Rev 0) Streaming disabled VFP initialized to Run Fast Mode. USB 0: host mode PCI 0: PCI Express Root Complex Interface CPU: Write allocate enabled Net: egiga0 [PRIME] Hit any key to stop autoboot: 0 Marvell\u0026gt;\u0026gt; setenv serverip 192.168.1.252 Marvell\u0026gt;\u0026gt; setenv bootargs console=ttyS0,115200 root=/dev/md0 Marvell\u0026gt;\u0026gt; ide reset Reset IDE: Marvell Serial ATA Adapter Found adapter at bus 0, device 1 ... Scanning channels Device 0: OK Model: ST3160812AS Firm: 3.ADJ Ser#: 5LSEMXAY Type: Hard Disk Supports 48-bit addressing Capacity: 152587.8 MB = 149.0 GB (312500000 x 512) Device 1: OK Model: ST3160812AS Firm: 3.ADJ Ser#: 5LSEG2XA Type: Hard Disk Supports 48-bit addressing Capacity: 152587.8 MB = 149.0 GB (312500000 x 512) Device 2: OK Model: ST3160812AS Firm: 3.ADJ Ser#: 5LSEMBH2 Type: Hard Disk Supports 48-bit addressing Capacity: 152587.8 MB = 149.0 GB (312500000 x 512) Device 3: OK Model: ST3160812AS Firm: 3.ADJ Ser#: 5LSEE8ZG Type: Hard Disk Supports 48-bit addressing Capacity: 152587.8 MB = 149.0 GB (312500000 x 512) Marvell\u0026gt;\u0026gt; tftpboot 0x800000 uImage Using egiga0 device TFTP from server 192.168.1.252; our IP address is 192.168.1.2 Filename \u0026#39;uImage\u0026#39;. Load address: 0x800000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ################################# done Bytes transferred = 1499664 (16e210 hex) Marvell\u0026gt;\u0026gt; tftpboot 0x01100000 uInitrd2 Using egiga0 device TFTP from server 192.168.1.252; our IP address is 192.168.1.2 Filename \u0026#39;uInitrd2\u0026#39;. Load address: 0x1100000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ############################################### done Bytes transferred = 8892129 (87aee1 hex) Marvell\u0026gt;\u0026gt; Boot the system:\nMarvell\u0026gt;\u0026gt; bootm 0x800000 0x01100000 ## Booting image at 00800000 ... Image Name: SharespaceKImage Created: 2015-10-13 15:17:20 UTC Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1499600 Bytes = 1.4 MB Load Address: 00008000 Entry Point: 00008000 Verifying Checksum ... OK OK ## Loading Ramdisk Image at 01100000 ... Image Name: SharespaceInitrd Created: 2015-10-15 21:19:14 UTC Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 8892065 Bytes = 8.5 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Starting kernel ... Uncompressing Linux... done, booting the kernel. [ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Initializing cgroup subsys cpuacct [ 0.000000] Linux version 3.10.0+ (thomas@diamond) (gcc version 4.9.2 ( 4.9.2-10) ) #2 Tue Oct 13 14:50:33 UTC 2015 [ 0.000000] CPU: Feroceon [41069260] revision 0 (ARMv5TEJ), cr=00053177 [ 0.000000] CPU: VIVT data cache, VIVT instruction cache [ 0.000000] Machine: WD Sharespace [ 0.000000] Clearing invalid memory bank 0KB@0x00000000 [ 0.000000] Clearing invalid memory bank 0KB@0x00000000 [ 0.000000] Clearing invalid memory bank 0KB@0x00000000 [ 0.000000] Ignoring unrecognised tag 0x00000000 [ 0.000000] Ignoring unrecognised tag 0x00000000 [ 0.000000] Ignoring unrecognised tag 0x00000000 [ 0.000000] Ignoring unrecognised tag 0x41000403 [ 0.000000] Memory policy: ECC disabled, Data cache writeback [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 32512 [ 0.000000] Kernel command line: console=ttyS0,115200 root=/dev/md0 [ 0.000000] PID hash table entries: 512 (order: -1, 2048 bytes) [ 0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes) [ 0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes) [ 0.000000] allocated 262144 bytes of page_cgroup [ 0.000000] please try \u0026#39;cgroup_disable=memory\u0026#39; option if you don\u0026#39;t want memory cgroups [ 0.000000] Memory: 128MB = 128MB total [ 0.000000] Memory: 116632k/116632k available, 14440k reserved, 0K highmem [ 0.000000] Virtual kernel memory layout: [ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB) [ 0.000000] fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB) [ 0.000000] vmalloc : 0xc8800000 - 0xff000000 ( 872 MB) [ 0.000000] lowmem : 0xc0000000 - 0xc8000000 ( 128 MB) [ 0.000000] modules : 0xbf000000 - 0xc0000000 ( 16 MB) [ 0.000000] .text : 0xc0008000 - 0xc03985ec (3650 kB) [ 0.000000] .init : 0xc0399000 - 0xc03bb1a4 ( 137 kB) [ 0.000000] .data : 0xc03bc000 - 0xc03fb8e0 ( 255 kB) [ 0.000000] .bss : 0xc03fb8e0 - 0xc043b710 ( 256 kB) [ 0.000000] NR_IRQS:64 [ 0.000000] sched_clock: 32 bits at 166MHz, resolution 5ns, wraps every 25769ms [ 0.000000] Console: colour dummy device 80x30 [ 24.503378] Calibrating delay loop... 498.89 BogoMIPS (lpj=2494464) [ 24.563097] pid_max: default: 32768 minimum: 301 [ 24.563262] Security Framework initialized [ 24.563347] Mount-cache hash table entries: 512 [ 24.564363] Initializing cgroup subsys memory [ 24.564482] Initializing cgroup subsys devices [ 24.564504] Initializing cgroup subsys freezer [ 24.564523] Initializing cgroup subsys net_cls [ 24.564541] Initializing cgroup subsys blkio [ 24.564558] Initializing cgroup subsys perf_event [ 24.564715] CPU: Testing write buffer coherency: ok [ 24.565380] Setting up static identity map for 0xc028f6b8 - 0xc028f6f4 [ 24.567296] devtmpfs: initialized [ 24.569738] regulator-dummy: no parameters [ 24.570135] NET: Registered protocol family 16 [ 24.571888] DMA: preallocated 256 KiB pool for atomic coherent allocations [ 24.572802] Orion ID: MV88F5281-D0. TCLK=166666667. [ 24.572869] Orion: Applying 5281 D0 WFI workaround. [ 24.574738] PCI host bridge to bus 0000:00 [ 24.574776] pci_bus 0000:00: root bus resource [mem 0xe0000000-0xe7ffffff] [ 24.574803] pci_bus 0000:00: root bus resource [io 0x1000-0xffff] [ 24.574829] pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff] [ 24.575744] PCI: bus0: Fast back to back transfers disabled [ 24.575839] pci 0000:00:01.0: BAR 0: assigned [mem 0xe0000000-0xe00fffff 64bit] [ 24.575880] pci 0000:00:01.0: BAR 2: assigned [io 0x1000-0x10ff] [ 24.579415] bio: create slab \u0026lt;bio-0\u0026gt; at 0 [ 24.581459] Switching to clocksource orion_clocksource [ 24.600861] NET: Registered protocol family 2 [ 24.601988] TCP established hash table entries: 1024 (order: 1, 8192 bytes) [ 24.602064] TCP bind hash table entries: 1024 (order: 0, 4096 bytes) [ 24.602110] TCP: Hash tables configured (established 1024 bind 1024) [ 24.602342] TCP: reno registered [ 24.602371] UDP hash table entries: 256 (order: 0, 4096 bytes) [ 24.602419] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes) [ 24.602818] NET: Registered protocol family 1 [ 24.603246] Unpacking initramfs... [ 26.695165] Freeing initrd memory: 8676K (c1101000 - c197a000) [ 26.696361] audit: initializing netlink socket (disabled) [ 26.696429] type=2000 audit(2.180:1): initialized [ 26.697709] VFS: Disk quotas dquot_6.5.2 [ 26.697799] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 26.698069] msgmni has been set to 244 [ 26.699549] alg: No test for stdrng (krng) [ 26.699720] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252) [ 26.700008] io scheduler noop registered [ 26.700030] io scheduler deadline registered [ 26.700073] io scheduler cfq registered (default) [ 26.700645] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled [ 26.722158] serial8250.0: ttyS0 at MMIO 0xf1012000 (irq = 3) is a 16550A [ 27.184376] console [ttyS0] enabled [ 27.208687] serial8250.1: ttyS1 at MMIO 0xf1012100 (irq = 4) is a 16550A [ 27.216903] physmap platform flash device: 01000000 at ff000000 [ 27.223205] physmap-flash.0: Found 1 x16 devices at 0x0 in 8-bit bank. Manufacturer ID 0x000001 Chip ID 0x002101 [ 27.233408] Amd/Fujitsu Extended Query Table at 0x0040 [ 27.238536] Amd/Fujitsu Extended Query version 1.3. [ 27.243601] number of CFI chips: 1 [ 27.266581] Creating 5 MTD partitions on \u0026#34;physmap-flash.0\u0026#34;: [ 27.272212] 0x000000ca0000-0x000000cc0000 : \u0026#34;U-Boot environment\u0026#34; [ 27.279911] 0x000000e80000-0x000000f80000 : \u0026#34;Pre-RootFS\u0026#34; [ 27.286927] 0x000000cc0000-0x000000e80000 : \u0026#34;Kernel\u0026#34; [ 27.293585] 0x000000000000-0x000000ca0000 : \u0026#34;Full RootFS\u0026#34; [ 27.300621] 0x000000f80000-0x000001000000 : \u0026#34;U-Boot\u0026#34; [ 27.308253] mousedev: PS/2 mouse device common for all mice [ 27.314282] i2c /dev entries driver [ 27.318636] rtc-pcf8563 0-0051: chip found, driver version 0.4.3 [ 27.326557] rtc-pcf8563 0-0051: rtc core: registered rtc-pcf8563 as rtc0 [ 27.333961] TCP: cubic registered [ 27.337279] NET: Registered protocol family 17 [ 27.341819] VFP support v0.3: implementor 41 architecture 1 part 10 variant 9 rev 0 [ 27.350392] registered taskstats version 1 [ 27.356450] rtc-pcf8563 0-0051: setting system clock to 2015-10-16 07:59:39 UTC (1444982379) [ 27.366082] Freeing unused kernel memory: 136K (c0399000 - c03bb000) Loading, please wait... [ 27.490971] systemd-udevd[49]: starting version 215 [ 27.652231] mv643xx_eth: MV-643xx 10/100/1000 ethernet driver version 1.4 [ 27.676979] SCSI subsystem initialized [ 27.716131] libphy: orion_mdio_bus: probed [ 27.726932] mv643xx_eth_port mv643xx_eth_port.0 eth0: port 0 with MAC address 00:90:a9:5e:36:99 [ 27.782424] usbcore: registered new interface driver usbfs [ 27.788016] usbcore: registered new interface driver hub [ 27.824009] sata_mv 0000:00:01.0: Gen-IIE 32 slots 4 ports SCSI mode IRQ via INTx [ 27.856121] usbcore: registered new device driver usb [ 27.880123] ehci_hcd: USB 2.0 \u0026#39;Enhanced\u0026#39; Host Controller (EHCI) Driver [ 27.932717] ehci-orion: EHCI orion driver [ 27.936835] orion-ehci orion-ehci.0: EHCI Host Controller [ 27.961954] scsi0 : sata_mv [ 27.971030] scsi1 : sata_mv [ 27.980102] scsi2 : sata_mv [ 27.989220] scsi3 : sata_mv [ 27.992590] ata1: SATA max UDMA/133 mmio m1048576@0xe0000000 port 0xe0022000 irq 11 [ 28.000230] ata2: SATA max UDMA/133 mmio m1048576@0xe0000000 port 0xe0024000 irq 11 [ 28.007900] ata3: SATA max UDMA/133 mmio m1048576@0xe0000000 port 0xe0026000 irq 11 [ 28.015558] ata4: SATA max UDMA/133 mmio m1048576@0xe0000000 port 0xe0028000 irq 11 [ 28.024011] orion-ehci orion-ehci.0: new USB bus registered, assigned bus number 1 [ 28.060144] orion-ehci orion-ehci.0: irq 17, io mem 0xf1050000 [ 28.101646] orion-ehci orion-ehci.0: USB 2.0 started, EHCI 1.00 [ 28.107677] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002 [ 28.114510] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 28.121734] usb usb1: Product: EHCI Host Controller [ 28.126605] usb usb1: Manufacturer: Linux 3.10.0+ ehci_hcd [ 28.132101] usb usb1: SerialNumber: orion-ehci.0 [ 28.246148] hub 1-0:1.0: USB hub found [ 28.249929] hub 1-0:1.0: 1 port detected [ 28.531602] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 28.591572] usb 1-1: new high-speed USB device number 2 using orion-ehci [ 28.598406] ata1.00: ATA-7: ST3160812AS, 3.ADJ, max UDMA/133 [ 28.604121] ata1.00: 312500000 sectors, multi 0: LBA48 NCQ (depth 31/32) [ 28.681662] ata1.00: configured for UDMA/133 [ 28.686602] scsi 0:0:0:0: Direct-Access ATA ST3160812AS 3.AD PQ: 0 ANSI: 5 [ 28.753414] usb 1-1: New USB device found, idVendor=05e3, idProduct=0608 [ 28.760122] usb 1-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0 [ 28.767286] usb 1-1: Product: USB2.0 Hub [ 28.776708] hub 1-1:1.0: USB hub found [ 28.783780] hub 1-1:1.0: 4 ports detected [ 29.201580] ata2: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 29.281615] ata2.00: ATA-7: ST3160812AS, 3.ADJ, max UDMA/133 [ 29.287262] ata2.00: 312500000 sectors, multi 0: LBA48 NCQ (depth 31/32) [ 29.371628] ata2.00: configured for UDMA/133 [ 29.376587] scsi 1:0:0:0: Direct-Access ATA ST3160812AS 3.AD PQ: 0 ANSI: 5 [ 29.891584] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 29.971614] ata3.00: ATA-7: ST3160812AS, 3.ADJ, max UDMA/133 [ 29.977261] ata3.00: 312500000 sectors, multi 0: LBA48 NCQ (depth 31/32) [ 30.061630] ata3.00: configured for UDMA/133 [ 30.066609] scsi 2:0:0:0: Direct-Access ATA ST3160812AS 3.AD PQ: 0 ANSI: 5 [ 30.581579] ata4: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 30.661658] ata4.00: ATA-7: ST3160812AS, 3.ADJ, max UDMA/133 [ 30.667311] ata4.00: 312500000 sectors, multi 0: LBA48 NCQ (depth 31/32) [ 30.751645] ata4.00: configured for UDMA/133 [ 30.756610] scsi 3:0:0:0: Direct-Access ATA ST3160812AS 3.AD PQ: 0 ANSI: 5 [ 30.819060] sd 0:0:0:0: [sda] 312500000 512-byte logical blocks: (160 GB/149 GiB) [ 30.835216] sd 0:0:0:0: [sda] Write Protect is off [ 30.844559] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn\u0026#39;t support DPO or FUA [ 30.855377] sd 1:0:0:0: [sdb] 312500000 512-byte logical blocks: (160 GB/149 GiB) [ 30.864072] sd 2:0:0:0: [sdc] 312500000 512-byte logical blocks: (160 GB/149 GiB) [ 30.872785] sd 3:0:0:0: [sdd] 312500000 512-byte logical blocks: (160 GB/149 GiB) [ 30.882911] sd 1:0:0:0: [sdb] Write Protect is off [ 30.888492] sd 2:0:0:0: [sdc] Write Protect is off [ 30.896377] sd 3:0:0:0: [sdd] Write Protect is off [ 30.903583] sd 1:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn\u0026#39;t support DPO or FUA [ 30.912982] sd 2:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn\u0026#39;t support DPO or FUA [ 30.922243] sd 3:0:0:0: [sdd] Write cache: enabled, read cache: enabled, doesn\u0026#39;t support DPO or FUA [ 30.931795] sda: sda1 sda2 [ 30.950785] sd 0:0:0:0: [sda] Attached SCSI disk [ 30.969668] sdc: sdc1 sdc2 [ 30.973346] sdb: sdb1 sdb2 [ 30.976891] sdd: sdd1 [ 30.988846] sd 3:0:0:0: [sdd] Attached SCSI disk [ 30.994368] sd 2:0:0:0: [sdc] Attached SCSI disk [ 30.999922] sd 1:0:0:0: [sdb] Attached SCSI disk [ 31.017508] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 31.024347] sd 1:0:0:0: Attached scsi generic sg1 type 0 [ 31.030523] sd 2:0:0:0: Attached scsi generic sg2 type 0 [ 31.036780] sd 3:0:0:0: Attached scsi generic sg3 type 0 [ 31.693721] md: bind\u0026lt;sda1\u0026gt; [ 31.718082] md: bind\u0026lt;sdb1\u0026gt; [ 31.763352] md: bind\u0026lt;sdc1\u0026gt; [ 31.803163] md: raid1 personality registered for level 1 [ 31.812269] md/raid1:md0: active with 3 out of 4 mirrors [ 31.817745] md0: detected capacity change from 0 to 10729029632 [ 31.828439] md0: unknown partition table Begin: Loading essential drivers ... done. Begin: Running /scripts/init-premount ... done. Begin: Mounting root file system ... Begin: Running /scripts/local-top ... Begin: Assembling all MD arrays ... Failure: failed to assemble all arrays. done. done. Begin: Running /scripts/local-premount ... done. Begin: Checking root file system ... fsck from util-linux 2.25.2 fsck: error 2 (No such file or directory) while executing fsck.ext4 for /dev/md0 fsck exited with status code 8 done. Warning: File system check failed but did not detect errors [ 37.486137] EXT4-fs (md0): mounted filesystem with ordered data mode. Opts: (null) done. Begin: Running /scripts/local-bottom ... done. Begin: Running /scripts/init-bottom ... done. [ 38.068739] systemd[1]: systemd 215 running in system mode. (+PAM +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ -SECCOMP -APPARMOR) [ 38.082671] systemd[1]: Detected architecture \u0026#39;arm\u0026#39;. Welcome to Debian GNU/Linux 8 (jessie)! [ 38.222922] systemd[1]: Inserted module \u0026#39;autofs4\u0026#39; [ 38.297798] NET: Registered protocol family 10 [ 38.303886] systemd[1]: Inserted module \u0026#39;ipv6\u0026#39; [ 38.322594] systemd[1]: Set hostname to \u0026lt;sharespace\u0026gt;. [ 39.054761] systemd[1]: Cannot add dependency job for unit dbus.socket, ignoring: Unit dbus.socket failed to load: No such file or directory. [ 39.067975] systemd[1]: Cannot add dependency job for unit display-manager.service, ignoring: Unit display-manager.service failed to load: No such file. [ 39.088903] systemd[1]: Starting Forward Password Requests to Wall Directory Watch. [ 39.097401] systemd[1]: Started Forward Password Requests to Wall Directory Watch. [ 39.105216] systemd[1]: Expecting device dev-ttyS0.device... Expecting device dev-ttyS0.device... [ 39.131819] systemd[1]: Starting Remote File Systems (Pre). [ OK ] Reached target Remote File Systems (Pre). [ 39.161769] systemd[1]: Reached target Remote File Systems (Pre). [ 39.168090] systemd[1]: Starting Encrypted Volumes. [ OK ] Reached target Encrypted Volumes. [ 39.191770] systemd[1]: Reached target Encrypted Volumes. [ 39.197420] systemd[1]: Starting Dispatch Password Requests to Console Directory Watch. [ 39.205945] systemd[1]: Started Dispatch Password Requests to Console Directory Watch. [ 39.214085] systemd[1]: Starting Paths. [ OK ] Reached target Paths. [ 39.231769] systemd[1]: Reached target Paths. [ 39.236451] systemd[1]: Starting Arbitrary Executable File Formats File System Automount Point. [ OK ] Set up automount Arbitrary Executable File Formats F...utomount Point. [ 39.271779] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point. [ 39.281399] systemd[1]: Starting Swap. [ OK ] Reached target Swap. [ 39.301769] systemd[1]: Reached target Swap. [ 39.306246] systemd[1]: Starting Root Slice. [ OK ] Created slice Root Slice. [ 39.331768] systemd[1]: Created slice Root Slice. [ 39.336675] systemd[1]: Starting User and Session Slice. [ OK ] Created slice User and Session Slice. [ 39.361779] systemd[1]: Created slice User and Session Slice. [ 39.367717] systemd[1]: Starting Delayed Shutdown Socket. [ OK ] Listening on Delayed Shutdown Socket. [ 39.391781] systemd[1]: Listening on Delayed Shutdown Socket. [ 39.397726] systemd[1]: Starting /dev/initctl Compatibility Named Pipe. [ OK ] Listening on /dev/initctl Compatibility Named Pipe. [ 39.421779] systemd[1]: Listening on /dev/initctl Compatibility Named Pipe. [ 39.428932] systemd[1]: Starting Journal Socket (/dev/log). [ OK ] Listening on Journal Socket (/dev/log). [ 39.451779] systemd[1]: Listening on Journal Socket (/dev/log). [ 39.457955] systemd[1]: Starting udev Control Socket. [ OK ] Listening on udev Control Socket. [ 39.481775] systemd[1]: Listening on udev Control Socket. [ 39.487431] systemd[1]: Starting udev Kernel Socket. [ OK ] Listening on udev Kernel Socket. [ 39.511778] systemd[1]: Listening on udev Kernel Socket. [ 39.517324] systemd[1]: Starting Journal Socket. [ OK ] Listening on Journal Socket. [ 39.541775] systemd[1]: Listening on Journal Socket. [ 39.547059] systemd[1]: Starting System Slice. [ OK ] Created slice System Slice. [ 39.571778] systemd[1]: Created slice System Slice. [ 39.576997] systemd[1]: Starting File System Check on Root Device... Starting File System Check on Root Device... [ 39.607499] systemd[1]: Starting system-getty.slice. [ OK ] Created slice system-getty.slice. [ 39.641819] systemd[1]: Created slice system-getty.slice. [ 39.647404] systemd[1]: Starting system-serial\\x2dgetty.slice. [ OK ] Created slice system-serial\\x2dgetty.slice. [ 39.671790] systemd[1]: Created slice system-serial\\x2dgetty.slice. [ 39.681922] systemd[1]: Starting Increase datagram queue length... Starting Increase datagram queue length... [ 39.694550] systemd[1]: Mounting POSIX Message Queue File System... Mounting POSIX Message Queue File System... [ 39.735004] systemd[1]: Starting Create list of required static device nodes for the current kernel... Starting Create list of required static device nodes...rrent kernel... [ 39.789722] systemd[1]: Starting udev Coldplug all Devices... Starting udev Coldplug all Devices... [ 39.858812] systemd[1]: Mounted Huge Pages File System. [ 39.892169] systemd[1]: Mounting Debug File System... Mounting Debug File System... [ 39.951245] systemd[1]: Starting Load Kernel Modules... Starting Load Kernel Modules... [ 40.019203] systemd[1]: Started Set Up Additional Binary Formats. [ 40.031928] systemd[1]: Starting Slices. [ OK ] Reached target Slices. [ 40.061826] systemd[1]: Reached target Slices. [ OK ] Mounted Debug File System. [ 40.091800] systemd[1]: Mounted Debug File System. [ OK ] Mounted POSIX Message Queue File System. [ 40.111773] systemd[1]: Mounted POSIX Message Queue File System. [ OK ] Started File System Check on Root Device. [ 40.141780] systemd[1]: Started File System Check on Root Device. [ OK ] Started Increase datagram queue length. [ 40.173286] systemd[1]: Started Increase datagram queue length. [ OK ] Started Create list of required static device nodes ...current kernel. [ 40.201790] systemd[1]: Started Create list of required static device nodes for the current kernel. [ OK ] Started Load Kernel Modules. [ 40.251859] systemd[1]: Started Load Kernel Modules. [ OK ] Started udev Coldplug all Devices. [ 40.391778] systemd[1]: Started udev Coldplug all Devices. [ 40.669619] systemd[1]: Mounted FUSE Control File System. [ 40.675961] systemd[1]: Mounted Configuration File System. [ 40.681725] systemd[1]: Starting Apply Kernel Variables... Starting Apply Kernel Variables... [ 40.708442] systemd[1]: Starting Create Static Device Nodes in /dev... Starting Create Static Device Nodes in /dev... [ 40.748132] systemd[1]: Starting Syslog Socket. [ OK ] Listening on Syslog Socket. [ 40.781866] systemd[1]: Listening on Syslog Socket. [ 40.786992] systemd[1]: Starting Sockets. [ OK ] Reached target Sockets. [ 40.799982] systemd[1]: Reached target Sockets. [ 40.804789] systemd[1]: Starting Journal Service... Starting Journal Service... [ OK ] Started Journal Service. [ 40.849598] systemd[1]: Started Journal Service. Starting Remount Root and Kernel File Systems... [ OK ] Started Apply Kernel Variables. [ OK ] Started Create Static Device Nodes in /dev. [ 41.022599] EXT4-fs (md0): re-mounted. Opts: errors=remount-ro [ OK ] Started Remount Root and Kernel File Systems. Starting Load/Save Random Seed... Starting udev Kernel Device Manager... [ OK ] Reached target Local File Systems (Pre). [ OK ] Started Load/Save Random Seed. [ 41.414282] systemd-udevd[166]: starting version 215 [ OK ] Started udev Kernel Device Manager. Starting Copy rules generated while the root was ro... Starting LSB: MD array assembly... [ 17.095408] systemd-fsck[138]: /dev/md0: clean, 14460/655360 files, 188506/2619392 blocks [ OK ] Started Copy rules generated while the root was ro. [ 42.238460] orion_wdt: Initial timeout 25 sec [ OK ] Started LSB: MD array assembly. [ OK ] Reached target Local File Systems. Starting Create Volatile Files and Directories... [ OK ] Reached target Remote File Systems. Starting Trigger Flushing of Journal to Persistent Storage... Starting LSB: Raise network interfaces.... [ OK ] Started Create Volatile Files and Directories. [ 43.127737] systemd-journald[160]: Received request to flush runtime journal from PID 1 [ OK ] Started Trigger Flushing of Journal to Persistent Storage. [ OK ] Found device /dev/ttyS0. Starting Update UTMP about System Boot/Shutdown... [ OK ] Started Update UTMP about System Boot/Shutdown. Starting MD array monitor... [ OK ] Started MD array monitor. [ 45.118396] mv643xx_eth_port mv643xx_eth_port.0 eth0: link down [ 45.126274] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready [ 49.030696] mv643xx_eth_port mv643xx_eth_port.0 eth0: link up, 1000 Mb/s, full duplex, flow control disabled [ 49.040563] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [ OK ] Started LSB: Raise network interfaces.. [ OK ] Reached target Network. [ OK ] Reached target System Initialization. [ OK ] Reached target Timers. [ OK ] Reached target Basic System. Starting OpenBSD Secure Shell server... [ OK ] Started OpenBSD Secure Shell server. Starting Regular background program processing daemon... [ OK ] Started Regular background program processing daemon. Starting /etc/rc.local Compatibility... Starting getty on tty2-tty6 if dbus and logind are not available... Starting System Logging Service... Starting Permit User Sessions... [ OK ] Started /etc/rc.local Compatibility. [ OK ] Started Permit User Sessions. [ OK ] Started System Logging Service. [ OK ] Started getty on tty2-tty6 if dbus and logind are not available. Starting Getty on tty6... [ OK ] Started Getty on tty6. Starting Getty on tty5... [ OK ] Started Getty on tty5. Starting Getty on tty4... [ OK ] Started Getty on tty4. Starting Getty on tty3... [ OK ] Started Getty on tty3. Starting Getty on tty2... [ OK ] Started Getty on tty2. Starting Getty on tty1... [ OK ] Started Getty on tty1. Starting Serial Getty on ttyS0... [ OK ] Started Serial Getty on ttyS0. [ OK ] Reached target Login Prompts. [ OK ] Reached target Multi-User System. [ OK ] Reached target Graphical Interface. Starting Update UTMP about System Runlevel Changes... [ OK ] Started Update UTMP about System Runlevel Changes. Debian GNU/Linux 8 sharespace ttyS0 sharespace login: root Password: Last login: Thu Oct 15 21:30:42 UTC 2015 on ttyS0 Linux sharespace 3.10.0+ #2 Tue Oct 13 14:50:33 UTC 2015 armv5tel The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. root@sharespace:~# Yay, straight into a Debian system. We can even ssh in remotely:\nthomas@diamond ~ $ ssh thomas@sharespace The authenticity of host \u0026#39;sharespace (192.168.1.205)\u0026#39; can\u0026#39;t be established. ECDSA key fingerprint is SHA256:JxzLBSrM9ipqWnWHS1iqvzC/7O5d24fj3BbV12CnwSs. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added \u0026#39;sharespace,192.168.1.205\u0026#39; (ECDSA) to the list of known hosts. thomas@sharespace\u0026#39;s password: X11 forwarding request failed The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Fri Oct 16 08:01:48 2015 from diamond.lan thomas@sharespace:~$ thomas@sharespace:~$ su - Password: root@sharespace:~# Do some more basic setup of the system:\nroot@sharespace:~# dpkg-reconfigure tzdata Current default time zone: \u0026#39;Europe/London\u0026#39; Local time is now: Fri Oct 16 15:12:41 BST 2015. Universal Time is now: Fri Oct 16 14:12:41 UTC 2015. root@sharespace:~# root@sharespace:~# apt-get install locales Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: locales 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 3908 kB of archives. After this operation, 16.3 MB of additional disk space will be used. Get:1 http://httpredir.debian.org/debian/ jessie/main locales all 2.19-18+deb8u1 [3908 kB] Fetched 3908 kB in 4s (972 kB/s) Preconfiguring packages ... Selecting previously unselected package locales. (Reading database ... 15713 files and directories currently installed.) Preparing to unpack .../locales_2.19-18+deb8u1_all.deb ... Unpacking locales (2.19-18+deb8u1) ... Processing triggers for man-db (2.7.0.2-5) ... Setting up locales (2.19-18+deb8u1) ... Generating locales (this might take a while)... Generation complete. root@sharespace:~# dpkg-reconfigure locales Generating locales (this might take a while)... en_GB.UTF-8... done Generation complete. root@sharespace:~# Update Linux and initrd images:\nroot@sharespace:~# devio \u0026#39;wl 0xe3a01c0c,4\u0026#39; \u0026#39;wl 0xe3811044,4\u0026#39; \u0026gt; /boot/vmlinuz.magic root@sharespace:~# cat /boot/vmlinuz.magic /boot/vmlinuz-3.10.0+ \u0026gt; /boot/vmlinuz-3.10.0+.withmagic root@sharespace:~# mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n \u0026#34;SharespaceKImage\u0026#34; -d /boot/vmlinuz-3.10.0+.withmagic /boot/uImage Image Name: SharespaceKImage Created: Sat Oct 17 12:52:29 2015 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1499600 Bytes = 1464.45 kB = 1.43 MB Load Address: 00008000 Entry Point: 00008000 root@sharespace:~# update-initramfs -k all -u update-initramfs: Generating /boot/initrd.img-3.10.0+ W: mdadm: /etc/mdadm/mdadm.conf defines no arrays. I: mdadm: auto-generated temporary mdadm.conf configuration file. I: mdadm: will start all available MD arrays from the initial ramdisk. I: mdadm: use `dpkg-reconfigure --priority=low mdadm` to change this. root@sharespace:~# mkimage -A arm -O linux -T ramdisk -C gzip -a 0x0 -e 0x0 -n \u0026#34;SharespaceInitrd\u0026#34; -d /boot/initrd.img-3.10.0+ /boot/uInitrd Image Name: SharespaceInitrd Created: Sat Oct 17 12:53:57 2015 Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 8892506 Bytes = 8684.09 kB = 8.48 MB Load Address: 00000000 Entry Point: 00000000 root@sharespace:~# Backup the mtd devices, so we can always return to the original firmware.\nroot@sharespace:~# for n in `seq 0 4`; do dd bs=1M if=/dev/mtdblock$n of=mtdblock$n; done 0+1 records in 0+1 records out 131072 bytes (131 kB) copied, 0.0573625 s, 2.3 MB/s 1+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.426814 s, 2.5 MB/s 1+1 records in 1+1 records out 1835008 bytes (1.8 MB) copied, 0.728559 s, 2.5 MB/s 12+1 records in 12+1 records out 13238272 bytes (13 MB) copied, 5.20929 s, 2.5 MB/s 0+1 records in 0+1 records out 524288 bytes (524 kB) copied, 0.22142 s, 2.4 MB/s root@sharespace:~# file mtd* mtdblock0: data mtdblock1: Linux Compressed ROM File System data, little endian size 1044480 version #2 sorted_dirs CRC 0xd377554a, edition 0, 547 blocks, 263 files mtdblock2: u-boot legacy uImage, Linux-2.6.12.6-arm1, Linux/ARM, OS Kernel Image (Not compressed), 1746428 bytes, Mon Aug 16 08:24:03 2010, Load Address: 0x00008000, Entry Point: 0x00008000, Header CRC: 0x21C649FF, Data CRC: 0x9B2DDA69 mtdblock3: Linux jffs2 filesystem data little endian mtdblock4: data root@sharespace:~# tar cvzf mtdbackup.tar.gz mtd* mtdblock0 mtdblock1 mtdblock2 mtdblock3 mtdblock4 root@sharespace:~# root@sharespace:~# scp mtdbackup.tar.gz thomas@jasper: thomas@jasper\u0026#39;s password: mtdbackup.tar.gz 100% 15MB 4.9MB/s 00:03 root@sharespace:~# Inspect the mtd devices with mtdinfo:\nroot@sharespace:~# apt-get install mtd-utils Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: liblzo2-2 The following NEW packages will be installed: liblzo2-2 mtd-utils 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 209 kB of archives. After this operation, 862 kB of additional disk space will be used. Do you want to continue? [Y/n] Get:1 http://httpredir.debian.org/debian/ jessie/main liblzo2-2 armel 2.08-1.2 [46.5 kB] Get:2 http://httpredir.debian.org/debian/ jessie/main mtd-utils armel 1:1.5.1-1 [163 kB] Fetched 209 kB in 1s (109 kB/s) Selecting previously unselected package liblzo2-2:armel. (Reading database ... 16639 files and directories currently installed.) Preparing to unpack .../liblzo2-2_2.08-1.2_armel.deb ... Unpacking liblzo2-2:armel (2.08-1.2) ... Selecting previously unselected package mtd-utils. Preparing to unpack .../mtd-utils_1%3a1.5.1-1_armel.deb ... Unpacking mtd-utils (1:1.5.1-1) ... Processing triggers for man-db (2.7.0.2-5) ... Setting up liblzo2-2:armel (2.08-1.2) ... Setting up mtd-utils (1:1.5.1-1) ... Processing triggers for libc-bin (2.19-18+deb8u1) ... root@sharespace:~# root@sharespace:~# mtdinfo -a Count of MTD devices: 5 Present MTD devices: mtd0, mtd1, mtd2, mtd3, mtd4 Sysfs interface supported: yes mtd0 Name: U-Boot environment Type: nor Eraseblock size: 131072 bytes, 128.0 KiB Amount of eraseblocks: 1 (131072 bytes, 128.0 KiB) Minimum input/output unit size: 1 byte Sub-page size: 1 byte Character device major/minor: 90:0 Bad blocks are allowed: false Device is writable: false mtd1 Name: Pre-RootFS Type: nor Eraseblock size: 131072 bytes, 128.0 KiB Amount of eraseblocks: 8 (1048576 bytes, 1024.0 KiB) Minimum input/output unit size: 1 byte Sub-page size: 1 byte Character device major/minor: 90:2 Bad blocks are allowed: false Device is writable: true mtd2 Name: Kernel Type: nor Eraseblock size: 131072 bytes, 128.0 KiB Amount of eraseblocks: 14 (1835008 bytes, 1.8 MiB) Minimum input/output unit size: 1 byte Sub-page size: 1 byte Character device major/minor: 90:4 Bad blocks are allowed: false Device is writable: true mtd3 Name: Full RootFS Type: nor Eraseblock size: 131072 bytes, 128.0 KiB Amount of eraseblocks: 101 (13238272 bytes, 12.6 MiB) Minimum input/output unit size: 1 byte Sub-page size: 1 byte Character device major/minor: 90:6 Bad blocks are allowed: false Device is writable: true mtd4 Name: U-Boot Type: nor Eraseblock size: 131072 bytes, 128.0 KiB Amount of eraseblocks: 4 (524288 bytes, 512.0 KiB) Minimum input/output unit size: 1 byte Sub-page size: 1 byte Character device major/minor: 90:8 Bad blocks are allowed: false Device is writable: false root@sharespace:~# So we want to use /dev/mtdblock2 for the kernel and /dev/mtdblock3 for the initrd. The sizes will fit 1835008\u0026gt;1499664 and 13238272\u0026gt;8892570:\nroot@sharespace:~# ls -l /boot/u* -rw-r--r-- 1 root root 1499664 Oct 17 12:52 /boot/uImage -rw-r--r-- 1 root root 8892570 Oct 17 12:53 /boot/uInitrd root@sharespace:~# root@sharespace:~# cat /boot/uImage \u0026gt; /dev/mtdblock2 root@sharespace:~# cat /boot/uInitrd \u0026gt; /dev/mtdblock3 root@sharespace:~# Back on the console reboot back to the uboot:\nroot@sharespace:~# reboot Starting Synchronise Hardware Clock to System Clock... [ OK ] Reached target Unmount All Filesystems. [ OK ] Stopped target Graphical Interface. [ OK ] Stopped target Multi-User System. Stopping OpenBSD Secure Shell server... Stopping System Logging Service... Stopping Regular background program processing daemon... [ OK ] Stopped target Login Prompts. Stopping Getty on tty6... Stopping Getty on tty5... Stopping Getty on tty4... Stopping Getty on tty3... Stopping Getty on tty2... Stopping Getty on tty1... Stopping Serial Getty on ttyS Stopping getty on tty2-tty6 if dbus and logind are not . [ OK ] Stopped getty on tty2-tty6 if dbus and logind are not available. [100877.524750] rtc-pcf8563 0-0051: retrieved date/time is not valid. [ OK ] Stopped Regular background program processing daemon. [ OK ] Stopped Getty on tty6. [ OK ] Stopped OpenBSD Secure Shell server. [ OK ] Stopped Getty on tty5. [ OK ] Stopped Getty on tty4. [ OK ] Stopped Getty on tty3. [ OK ] Stopped System Logging Service. [ OK ] Stopped Getty on tty2. [ OK ] Stopped Getty on tty1. [ OK ] Stopped Serial Getty on ttyS0. [ OK ] Removed slice system-serial\\x2dgetty.slice. [ OK ] Removed slice system-getty.slice. Stopping /etc/rc.local Compatibility... [ OK ] Stopped /etc/rc.local Compatibility. [ OK ] Stopped target Network. Stopping Permit User Sessions... [ OK ] Stopped Permit User Sessions. [ OK ] Stopped target Basic System. [ OK ] Stopped target Slices. [ OK ] Removed slice User and Session Slice. [ OK ] Stopped target Paths. [ OK ] Stopped target Timers. [ OK ] Stopped target Sockets. [ OK ] Closed Syslog Socket. [ OK ] Stopped target System Initialization. Stopping Update UTMP about System Boot/Shutdown... [ OK ] Stopped target Encrypted Volumes. Stopping Apply Kernel Variables... [ OK ] Stopped Apply Kernel Variables. Stopping Load Kernel Modules... [ OK ] Stopped Load Kernel Modules. Stopping LSB: Raise network interfaces.... [ OK ] Stopped target Swap. [ OK ] Stopped target Remote File Systems. [ OK ] Stopped target Remote File Systems (Pre). [ OK ] Stopped Update UTMP about System Boot/Shutdown. Stopping Create Volatile Files and Directories... [ OK ] Stopped Create Volatile Files and Directories. [ OK ] Stopped LSB: Raise network interfaces.. Stopping Load/Save Random Seed... [ OK ] Stopped target Local File Systems. [ OK ] Stopped target Local File Systems (Pre). Stopping Create Static Device Nodes in /dev... [ OK ] Stopped Create Static Device Nodes in /dev. Stopping LSB: MD array assembly... [ OK ] Stopped Load/Save Random Seed. [ OK ] Stopped LSB: MD array assembly. Stopping Remount Root and Kernel File Systems... [ OK ] Stopped Remount Root and Kernel File Systems. [ OK ] Started Synchronise Hardware Clock to System Clock. [ OK ] Reached target Shutdown. [100888.653397] watchdog watchdog0: watchdog did not stop! [100888.744893] systemd-shutdown[1]: Sending SIGTERM to remaining processes... [100888.793092] systemd-journald[160]: Received SIGTERM from PID 1 (systemd-shutdow). [100888.935927] systemd-shutdown[1]: Sending SIGKILL to remaining processes... [100888.971829] systemd-shutdown[1]: Hardware watchdog \u0026#39;Orion Watchdog\u0026#39;, version 0 [100888.982955] systemd-shutdown[1]: Unmounting file systems. [100888.989969] systemd-shutdown[1]: Unmounting /sys/kernel/debug. [100888.996058] systemd-shutdown[1]: Unmounting /dev/mqueue. [100889.312553] EXT4-fs (md0): re-mounted. Opts: (null) [100889.324376] EXT4-fs (md0): re-mounted. Opts: (null) [100889.329352] EXT4-fs (md0): re-mounted. Opts: (null) [100889.334412] systemd-shutdown[1]: All filesystems unmounted. [100889.340090] systemd-shutdown[1]: Deactivating swaps. [100889.345565] systemd-shutdown[1]: All swaps deactivated. [100889.350897] systemd-shutdown[1]: Detaching loop devices. [100889.389110] systemd-shutdown[1]: All loop devices detached. [100889.394868] systemd-shutdown[1]: Detaching DM devices. [100889.400974] systemd-shutdown[1]: All DM devices detached. [100889.490273] systemd-shutdown[1]: Rebooting. [100890.572277] sd 3:0:0:0: [sdd] Synchronizing SCSI cache [100890.577818] sd 2:0:0:0: [sdc] Synchronizing SCSI cache [100890.583311] sd 1:0:0:0: [sdb] Synchronizing SCSI cache [100890.588774] sd 0:0:0:0: [sda] Synchronizing SCSI cache [100890.594657] Restarting system. Interrupt the boot:\n__ __ _ _ | \\/ | __ _ _ ____ _____| | | | |\\/| |/ _` | \u0026#39;__\\ \\ / / _ \\ | | | | | | (_| | | \\ V / __/ | | |_| |_|\\__,_|_| \\_/ \\___|_|_| _ _ ____ _ | | | | | __ ) ___ ___ | |_ | | | |___| _ \\ / _ \\ / _ \\| __| | |_| |___| |_) | (_) | (_) | |_ \\___/ |____/ \\___/ \\___/ \\__| ** Forcing LOADER mode only ** ** MARVELL BOARD: DB-88F5X81-DDR2-A/B LE U-Boot 1.1.4 (Aug 4 2008 - 09:35:54) Marvell version: 2.3.23 U-Boot code: 00200000 -\u0026gt; 0026FFF0 BSS: -\u0026gt; 0027AD18 Soc: 88F5281 D0 (DDR2) CPU running @ 500Mhz SysClock = 166Mhz , TClock = 166Mhz DRAM CS[0] base 0x00000000 size 128MB DRAM Total size 128MB 32bit width [16384kB@ff000000] Flash: 16 MB Addresses 4M - 0M are saved for the U-Boot usage. Mem malloc Initialization (4M - 3M): Done CPU : ARM926 (Rev 0) Streaming disabled VFP initialized to Run Fast Mode. USB 0: host mode PCI 0: PCI Express Root Complex Interface CPU: Write allocate enabled Net: egiga0 [PRIME] Hit any key to stop autoboot: 0 Marvell\u0026gt;\u0026gt; Run a printenv to save the original uboot environment:\nMarvell\u0026gt;\u0026gt; printenv baudrate=115200 loads_echo=0 rootpath=/mnt/ARM_FS/ cpuName=926 mfgmodel=s6m4nc bootargs_root=root=/dev/md0 rw CASset=min MALLOC_len=1 ethprime=egiga0 netbsd_gw=192.168.0.254 netbsd_mask=255.255.255.0 netbsd_fs=nfs netbsd_server=192.168.0.1 netbsd_rootdev=mgi0 netbsd_add=0x800000 netbsd_get=tftpboot $(netbsd_add) $(image_name) netbsd_set_args=setenv bootargs nfsroot=$(netbsd_server):$(rootpath) fs=$(netbsd_fs) ip=$(ipaddr) serverip=$(netbsd_server) mask=$(netbsd_mask) gw=$(netbsd_gw) rootdev=$(netb) netbsd_boot=bootm $(netbsd_add) $(bootargs) netbsd_bootcmd=run netbsd_get ; run netbsd_set_args ; run netbsd_boot bootargs_end=:::DB88FXX81:egiga0:none image_name=uImage standalone=fsload 0x400000 $(image_name);setenv bootargs $(bootargs) root=/dev/mtdblock0 rw ip=$(ipaddr):$(serverip)$(bootargs_end); bootm 0x400000; eth1addr=00:00:00:00:51:82 usb0Mode=host ethact=egiga0 bootcmd=ide reset; bootm 0xFFCC0000 bootargs=root=/dev/mtdblock2 console=ttyS0,115200 init=/etc/rc.preroot ipaddr=192.168.1.2 serverip=192.168.1.100 model=WVLXN customer=Wendy serial_number=5565N01001G91300105J0E1 ethaddr=00:90:A9:5E:36:99 serialNo=WU4N19130201 modelname=WDA4NC40000 runintime=12000 ftpserver=192.168.43.4 testfile=100M extendDiskMode=extend raidlevel=5 mkraid5=ok mfgtest_state=final_tested_ok fw_ver=2.3.02 stdin=serial stdout=serial stderr=serial enaDebugLed=yes enaMonExt=no enaFlashBuf=yes enaCpuStream=no enaVFP=yes enaWrAllo=yes enaICPref=yes enaDCPref=yes bootdelay=3 disaMvPnp=no overEthAddr=no Environment size: 1528/65532 bytes Marvell\u0026gt;\u0026gt; Backup the bootcmd and bootargs variables to bootcmdorig and bootcmdorig respectfully:\nMarvell\u0026gt;\u0026gt; printenv bootcmd bootcmd=ide reset; bootm 0xFFCC0000 Marvell\u0026gt;\u0026gt; setenv bootcmdorig ide reset\\;bootm 0xFFCC0000 Marvell\u0026gt;\u0026gt; printenv bootcmdorig bootcmdorig=ide reset;bootm 0xFFCC0000 Marvell\u0026gt;\u0026gt; Marvell\u0026gt;\u0026gt; Marvell\u0026gt;\u0026gt; printenv bootargs bootargs=root=/dev/mtdblock2 console=ttyS0,115200 init=/etc/rc.preroot Marvell\u0026gt;\u0026gt; setenv bootargsorig root=/dev/mtdblock2 console=ttyS0,115200 init=/etc/rc.preroot Marvell\u0026gt;\u0026gt; printenv bootargsorig bootargsorig=root=/dev/mtdblock2 console=ttyS0,115200 init=/etc/rc.preroot Marvell\u0026gt;\u0026gt; Set a new bootargs to only say use serial console and have the rootfs as md0:\nMarvell\u0026gt;\u0026gt; setenv bootargs console=ttyS0,115200 root=/dev/md0 Marvell\u0026gt;\u0026gt; printenv bootargs bootargs=console=ttyS0,115200 root=/dev/md0 Set a new bootcmd to reset the ide, copy from the start of mtd3 to 0x01100000 for the length of mtd3, then boot code from the mtd2 and the copied location:\nMarvell\u0026gt;\u0026gt; setenv bootcmd ide reset\\; cp 0xff000000 0x01100000 0xca0000\\; bootm 0xffcc0000 0x01100000 Marvell\u0026gt;\u0026gt; printenv bootcmd bootcmd=ide reset; cp 0xff000000 0x01100000 0xca0000; bootm 0xffcc0000 0x01100000 Save the new environment:\nMarvell\u0026gt;\u0026gt; saveenv Saving Environment to Flash... . Un-Protected 1 sectors Erasing Flash... . done Erased 1 sectors Writing to Flash... done . Protected 1 sectors Marvell\u0026gt;\u0026gt; Reboot and don\u0026rsquo;t interrupt the boot:\nMarvell\u0026gt;\u0026gt; reset __ __ _ _ | \\/ | __ _ _ ____ _____| | | | |\\/| |/ _` | \u0026#39;__\\ \\ / / _ \\ | | | | | | (_| | | \\ V / __/ | | |_| |_|\\__,_|_| \\_/ \\___|_|_| _ _ ____ _ | | | | | __ ) ___ ___ | |_ | | | |___| _ \\ / _ \\ / _ \\| __| | |_| |___| |_) | (_) | (_) | |_ \\___/ |____/ \\___/ \\___/ \\__| ** Forcing LOADER mode only ** ** MARVELL BOARD: DB-88F5X81-DDR2-A/B LE U-Boot 1.1.4 (Aug 4 2008 - 09:35:54) Marvell version: 2.3.23 U-Boot code: 00200000 -\u0026gt; 0026FFF0 BSS: -\u0026gt; 0027AD18 Soc: 88F5281 D0 (DDR2) CPU running @ 500Mhz SysClock = 166Mhz , TClock = 166Mhz DRAM CS[0] base 0x00000000 size 128MB DRAM Total size 128MB 32bit width [16384kB@ff000000] Flash: 16 MB Addresses 4M - 0M are saved for the U-Boot usage. Mem malloc Initialization (4M - 3M): Done CPU : ARM926 (Rev 0) Streaming disabled VFP initialized to Run Fast Mode. USB 0: host mode PCI 0: PCI Express Root Complex Interface CPU: Write allocate enabled Net: egiga0 [PRIME] Hit any key to stop autoboot: 0 Reset IDE: Marvell Serial ATA Adapter Found adapter at bus 0, device 1 ... Scanning channels Device 0: OK Model: ST3160812AS Firm: 3.ADJ Ser#: 5LSEMXAY Type: Hard Disk Supports 48-bit addressing Capacity: 152587.8 MB = 149.0 GB (312500000 x 512) Device 1: OK Model: ST3160812AS Firm: 3.ADJ Ser#: 5LSEG2XA Type: Hard Disk Supports 48-bit addressing Capacity: 152587.8 MB = 149.0 GB (312500000 x 512) Device 2: OK Model: ST3160812AS Firm: 3.ADJ Ser#: 5LSEMBH2 Type: Hard Disk Supports 48-bit addressing Capacity: 152587.8 MB = 149.0 GB (312500000 x 512) Device 3: OK Model: ST3160812AS Firm: 3.ADJ Ser#: 5LSEE8ZG Type: Hard Disk Supports 48-bit addressing Capacity: 152587.8 MB = 149.0 GB (312500000 x 512) ## Booting image at ffcc0000 ... Image Name: SharespaceKImage Created: 2015-10-17 11:52:29 UTC Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1499600 Bytes = 1.4 MB Load Address: 00008000 Entry Point: 00008000 Verifying Checksum ... OK OK ## Loading Ramdisk Image at 01100000 ... Image Name: SharespaceInitrd Created: 2015-10-17 11:53:57 UTC Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 8892506 Bytes = 8.5 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Starting kernel ... Uncompressing Linux... done, booting the kernel. [ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Initializing cgroup subsys cpuacct [ 0.000000] Linux version 3.10.0+ (thomas@diamond) (gcc version 4.9.2 ( 4.9.2-10) ) #2 Tue Oct 13 14:50:33 UTC 2015 [ 0.000000] CPU: Feroceon [41069260] revision 0 (ARMv5TEJ), cr=00053177 [ 0.000000] CPU: VIVT data cache, VIVT instruction cache [ 0.000000] Machine: WD Sharespace [ 0.000000] Clearing invalid memory bank 0KB@0x00000000 [ 0.000000] Clearing invalid memory bank 0KB@0x00000000 [ 0.000000] Clearing invalid memory bank 0KB@0x00000000 [ 0.000000] Ignoring unrecognised tag 0x00000000 [ 0.000000] Ignoring unrecognised tag 0x00000000 [ 0.000000] Ignoring unrecognised tag 0x00000000 [ 0.000000] Ignoring unrecognised tag 0x41000403 [ 0.000000] Memory policy: ECC disabled, Data cache writeback [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 32512 [ 0.000000] Kernel command line: console=ttyS0,115200 root=/dev/md0 [ 0.000000] PID hash table entries: 512 (order: -1, 2048 bytes) [ 0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes) [ 0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes) [ 0.000000] allocated 262144 bytes of page_cgroup [ 0.000000] please try \u0026#39;cgroup_disable=memory\u0026#39; option if you don\u0026#39;t want memory cgroups [ 0.000000] Memory: 128MB = 128MB total [ 0.000000] Memory: 116628k/116628k available, 14444k reserved, 0K highmem [ 0.000000] Virtual kernel memory layout: [ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB) [ 0.000000] fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB) [ 0.000000] vmalloc : 0xc8800000 - 0xff000000 ( 872 MB) [ 0.000000] lowmem : 0xc0000000 - 0xc8000000 ( 128 MB) [ 0.000000] modules : 0xbf000000 - 0xc0000000 ( 16 MB) [ 0.000000] .text : 0xc0008000 - 0xc03985ec (3650 kB) [ 0.000000] .init : 0xc0399000 - 0xc03bb1a4 ( 137 kB) [ 0.000000] .data : 0xc03bc000 - 0xc03fb8e0 ( 255 kB) [ 0.000000] .bss : 0xc03fb8e0 - 0xc043b710 ( 256 kB) [ 0.000000] NR_IRQS:64 [ 0.000000] sched_clock: 32 bits at 166MHz, resolution 5ns, wraps every 25769ms [ 0.000000] Console: colour dummy device 80x30 [ 3.403756] Calibrating delay loop... 498.89 BogoMIPS (lpj=2494464) [ 3.463476] pid_max: default: 32768 minimum: 301 [ 3.463644] Security Framework initialized [ 3.463732] Mount-cache hash table entries: 512 [ 3.464749] Initializing cgroup subsys memory [ 3.464872] Initializing cgroup subsys devices [ 3.464893] Initializing cgroup subsys freezer [ 3.464911] Initializing cgroup subsys net_cls [ 3.464928] Initializing cgroup subsys blkio [ 3.464945] Initializing cgroup subsys perf_event [ 3.465100] CPU: Testing write buffer coherency: ok [ 3.465767] Setting up static identity map for 0xc028f6b8 - 0xc028f6f4 [ 3.467683] devtmpfs: initialized [ 3.470127] regulator-dummy: no parameters [ 3.470526] NET: Registered protocol family 16 [ 3.472279] DMA: preallocated 256 KiB pool for atomic coherent allocations [ 3.473192] Orion ID: MV88F5281-D0. TCLK=166666667. [ 3.473258] Orion: Applying 5281 D0 WFI workaround. [ 3.475123] PCI host bridge to bus 0000:00 [ 3.475161] pci_bus 0000:00: root bus resource [mem 0xe0000000-0xe7ffffff] [ 3.475187] pci_bus 0000:00: root bus resource [io 0x1000-0xffff] [ 3.475212] pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff] [ 3.476125] PCI: bus0: Fast back to back transfers disabled [ 3.476219] pci 0000:00:01.0: BAR 0: assigned [mem 0xe0000000-0xe00fffff 64bit] [ 3.476260] pci 0000:00:01.0: BAR 2: assigned [io 0x1000-0x10ff] [ 3.479795] bio: create slab \u0026lt;bio-0\u0026gt; at 0 [ 3.481840] Switching to clocksource orion_clocksource [ 3.501250] NET: Registered protocol family 2 [ 3.502377] TCP established hash table entries: 1024 (order: 1, 8192 bytes) [ 3.502454] TCP bind hash table entries: 1024 (order: 0, 4096 bytes) [ 3.502499] TCP: Hash tables configured (established 1024 bind 1024) [ 3.502733] TCP: reno registered [ 3.502761] UDP hash table entries: 256 (order: 0, 4096 bytes) [ 3.502808] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes) [ 3.503203] NET: Registered protocol family 1 [ 3.503636] Unpacking initramfs... [ 5.595781] Freeing initrd memory: 8680K (c1101000 - c197b000) [ 5.596974] audit: initializing netlink socket (disabled) [ 5.597042] type=2000 audit(2.180:1): initialized [ 5.598312] VFS: Disk quotas dquot_6.5.2 [ 5.598399] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 5.598676] msgmni has been set to 244 [ 5.600159] alg: No test for stdrng (krng) [ 5.600324] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252) [ 5.600615] io scheduler noop registered [ 5.600636] io scheduler deadline registered [ 5.600679] io scheduler cfq registered (default) [ 5.601250] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled [ 5.622761] serial8250.0: ttyS0 at MMIO 0xf1012000 (irq = 3) is a 16550A [ 6.084924] console [ttyS0] enabled [ 6.109233] serial8250.1: ttyS1 at MMIO 0xf1012100 (irq = 4) is a 16550A [ 6.117440] physmap platform flash device: 01000000 at ff000000 [ 6.123733] physmap-flash.0: Found 1 x16 devices at 0x0 in 8-bit bank. Manufacturer ID 0x000001 Chip ID 0x002101 [ 6.133938] Amd/Fujitsu Extended Query Table at 0x0040 [ 6.139066] Amd/Fujitsu Extended Query version 1.3. [ 6.144121] number of CFI chips: 1 [ 6.167114] Creating 5 MTD partitions on \u0026#34;physmap-flash.0\u0026#34;: [ 6.172742] 0x000000ca0000-0x000000cc0000 : \u0026#34;U-Boot environment\u0026#34; [ 6.180443] 0x000000e80000-0x000000f80000 : \u0026#34;Pre-RootFS\u0026#34; [ 6.187445] 0x000000cc0000-0x000000e80000 : \u0026#34;Kernel\u0026#34; [ 6.194109] 0x000000000000-0x000000ca0000 : \u0026#34;Full RootFS\u0026#34; [ 6.201133] 0x000000f80000-0x000001000000 : \u0026#34;U-Boot\u0026#34; [ 6.208766] mousedev: PS/2 mouse device common for all mice [ 6.214807] i2c /dev entries driver [ 6.219164] rtc-pcf8563 0-0051: chip found, driver version 0.4.3 [ 6.227087] rtc-pcf8563 0-0051: rtc core: registered rtc-pcf8563 as rtc0 [ 6.234488] TCP: cubic registered [ 6.237800] NET: Registered protocol family 17 [ 6.242343] VFP support v0.3: implementor 41 architecture 1 part 10 variant 9 rev 0 [ 6.250905] registered taskstats version 1 [ 6.256968] rtc-pcf8563 0-0051: setting system clock to 2015-10-17 12:19:13 UTC (1445084353) [ 6.266595] Freeing unused kernel memory: 136K (c0399000 - c03bb000) Loading, please wait... [ 6.391481] systemd-udevd[49]: starting version 215 [ 6.550395] mv643xx_eth: MV-643xx 10/100/1000 ethernet driver version 1.4 [ 6.582561] SCSI subsystem initialized [ 6.637468] libphy: orion_mdio_bus: probed [ 6.643526] mv643xx_eth_port mv643xx_eth_port.0 eth0: port 0 with MAC address 00:90:a9:5e:36:99 [ 6.690600] usbcore: registered new interface driver usbfs [ 6.712826] usbcore: registered new interface driver hub [ 6.726302] sata_mv 0000:00:01.0: Gen-IIE 32 slots 4 ports SCSI mode IRQ via INTx [ 6.749930] usbcore: registered new device driver usb [ 6.778052] ehci_hcd: USB 2.0 \u0026#39;Enhanced\u0026#39; Host Controller (EHCI) Driver [ 6.830876] ehci-orion: EHCI orion driver [ 6.851494] scsi0 : sata_mv [ 6.860598] scsi1 : sata_mv [ 6.864256] orion-ehci orion-ehci.0: EHCI Host Controller [ 6.869688] orion-ehci orion-ehci.0: new USB bus registered, assigned bus number 1 [ 6.877375] scsi2 : sata_mv [ 6.884911] scsi3 : sata_mv [ 6.888223] ata1: SATA max UDMA/133 mmio m1048576@0xe0000000 port 0xe0022000 irq 11 [ 6.895919] ata2: SATA max UDMA/133 mmio m1048576@0xe0000000 port 0xe0024000 irq 11 [ 6.903588] ata3: SATA max UDMA/133 mmio m1048576@0xe0000000 port 0xe0026000 irq 11 [ 6.911222] ata4: SATA max UDMA/133 mmio m1048576@0xe0000000 port 0xe0028000 irq 11 [ 6.957435] orion-ehci orion-ehci.0: irq 17, io mem 0xf1050000 [ 7.002032] orion-ehci orion-ehci.0: USB 2.0 started, EHCI 1.00 [ 7.008069] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002 [ 7.014902] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 7.022133] usb usb1: Product: EHCI Host Controller [ 7.026996] usb usb1: Manufacturer: Linux 3.10.0+ ehci_hcd [ 7.032492] usb usb1: SerialNumber: orion-ehci.0 [ 7.146526] hub 1-0:1.0: USB hub found [ 7.150307] hub 1-0:1.0: 1 port detected [ 7.421959] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 7.491941] usb 1-1: new high-speed USB device number 2 using orion-ehci [ 7.502002] ata1.00: ATA-7: ST3160812AS, 3.ADJ, max UDMA/133 [ 7.507684] ata1.00: 312500000 sectors, multi 0: LBA48 NCQ (depth 31/32) [ 7.592023] ata1.00: configured for UDMA/133 [ 7.596981] scsi 0:0:0:0: Direct-Access ATA ST3160812AS 3.AD PQ: 0 ANSI: 5 [ 7.644456] usb 1-1: New USB device found, idVendor=05e3, idProduct=0608 [ 7.651165] usb 1-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0 [ 7.658329] usb 1-1: Product: USB2.0 Hub [ 7.667750] hub 1-1:1.0: USB hub found [ 7.674820] hub 1-1:1.0: 4 ports detected [ 8.111960] ata2: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 8.191999] ata2.00: ATA-7: ST3160812AS, 3.ADJ, max UDMA/133 [ 8.197649] ata2.00: 312500000 sectors, multi 0: LBA48 NCQ (depth 31/32) [ 8.282012] ata2.00: configured for UDMA/133 [ 8.286973] scsi 1:0:0:0: Direct-Access ATA ST3160812AS 3.AD PQ: 0 ANSI: 5 [ 8.801966] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 8.881997] ata3.00: ATA-7: ST3160812AS, 3.ADJ, max UDMA/133 [ 8.887648] ata3.00: 312500000 sectors, multi 0: LBA48 NCQ (depth 31/32) [ 8.972011] ata3.00: configured for UDMA/133 [ 8.977004] scsi 2:0:0:0: Direct-Access ATA ST3160812AS 3.AD PQ: 0 ANSI: 5 [ 9.491959] ata4: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 9.572017] ata4.00: ATA-7: ST3160812AS, 3.ADJ, max UDMA/133 [ 9.577673] ata4.00: 312500000 sectors, multi 0: LBA48 NCQ (depth 31/32) [ 9.662015] ata4.00: configured for UDMA/133 [ 9.666970] scsi 3:0:0:0: Direct-Access ATA ST3160812AS 3.AD PQ: 0 ANSI: 5 [ 9.729213] sd 0:0:0:0: [sda] 312500000 512-byte logical blocks: (160 GB/149 GiB) [ 9.745382] sd 0:0:0:0: [sda] Write Protect is off [ 9.754816] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn\u0026#39;t support DPO or FUA [ 9.765636] sd 1:0:0:0: [sdb] 312500000 512-byte logical blocks: (160 GB/149 GiB) [ 9.774329] sd 2:0:0:0: [sdc] 312500000 512-byte logical blocks: (160 GB/149 GiB) [ 9.783165] sd 3:0:0:0: [sdd] 312500000 512-byte logical blocks: (160 GB/149 GiB) [ 9.793309] sd 1:0:0:0: [sdb] Write Protect is off [ 9.798787] sd 2:0:0:0: [sdc] Write Protect is off [ 9.807065] sd 3:0:0:0: [sdd] Write Protect is off [ 9.813811] sd 1:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn\u0026#39;t support DPO or FUA [ 9.823221] sd 2:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn\u0026#39;t support DPO or FUA [ 9.832729] sda: sda1 sda2 [ 9.836082] sd 3:0:0:0: [sdd] Write cache: enabled, read cache: enabled, doesn\u0026#39;t support DPO or FUA [ 9.848922] sd 0:0:0:0: [sda] Attached SCSI disk [ 9.884687] sdc: sdc1 sdc2 [ 9.888228] sdb: sdb1 sdb2 [ 9.894331] sdd: sdd1 [ 9.904212] sd 2:0:0:0: [sdc] Attached SCSI disk [ 9.909818] sd 3:0:0:0: [sdd] Attached SCSI disk [ 9.914796] sd 1:0:0:0: [sdb] Attached SCSI disk [ 9.932677] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 9.939347] sd 1:0:0:0: Attached scsi generic sg1 type 0 [ 9.945583] sd 2:0:0:0: Attached scsi generic sg2 type 0 [ 9.951785] sd 3:0:0:0: Attached scsi generic sg3 type 0 [ 10.565897] md: bind\u0026lt;sdb1\u0026gt; [ 10.624252] md: bind\u0026lt;sdc1\u0026gt; [ 10.691729] md: bind\u0026lt;sda1\u0026gt; [ 10.717852] md: raid1 personality registered for level 1 [ 10.726918] md/raid1:md0: active with 3 out of 4 mirrors [ 10.732502] md0: detected capacity change from 0 to 10729029632 [ 10.749957] md0: unknown partition table Begin: Loading essential drivers ... done. Begin: Running /scripts/init-premount ... done. Begin: Mounting root file system ... Begin: Running /scripts/local-top ... Begin: Assembling all MD arrays ... Failure: failed to assemble all a. done. done. Begin: Running /scripts/local-premount ... done. Begin: Checking root file system ... fsck from util-linux 2.25.2 fsck: error 2 (No such file or directory) while executing fsck.ext4 for /dev/md0 fsck exited with status code 8 done. Warning: File system check failed but did not detect errors [ 16.399060] EXT4-fs (md0): mounted filesystem with ordered data mode. Opts: (null) done. Begin: Running /scripts/local-bottom ... done. Begin: Running /scripts/init-bottom ... done. [ 17.014342] systemd[1]: systemd 215 running in system mode. (+PAM +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ -SECCOMP -AP) [ 17.028273] systemd[1]: Detected architecture \u0026#39;arm\u0026#39;. Welcome to Debian GNU/Linux 8 (jessie)! [ 17.185989] systemd[1]: Inserted module \u0026#39;autofs4\u0026#39; [ 17.261364] NET: Registered protocol family 10 [ 17.267452] systemd[1]: Inserted module \u0026#39;ipv6\u0026#39; [ 17.285742] systemd[1]: Set hostname to \u0026lt;sharespace\u0026gt;. [ 18.076128] systemd[1]: Cannot add dependency job for unit dbus.socket, ignoring: Unit dbus.socket failed to load: No such file or directory. [ 18.089408] systemd[1]: Cannot add dependency job for unit display-manager.service, ignoring: Unit display-manager.service failed to load: No. [ 18.110440] systemd[1]: Starting Forward Password Requests to Wall Directory Watch. [ 18.118956] systemd[1]: Started Forward Password Requests to Wall Directory Watch. [ 18.126771] systemd[1]: Expecting device dev-ttyS0.device... Expecting device dev-ttyS0.device... [ 18.152206] systemd[1]: Starting Remote File Systems (Pre). [ OK ] Reached target Remote File Systems (Pre). [ 18.182152] systemd[1]: Reached target Remote File Systems (Pre). [ 18.188471] systemd[1]: Starting Encrypted Volumes. [ OK ] Reached target Encrypted Volumes. [ 18.212155] systemd[1]: Reached target Encrypted Volumes. [ 18.217812] systemd[1]: Starting Dispatch Password Requests to Console Directory Watch. [ 18.226326] systemd[1]: Started Dispatch Password Requests to Console Directory Watch. [ 18.234464] systemd[1]: Starting Paths. [ OK ] Reached target Paths. [ 18.252154] systemd[1]: Reached target Paths. [ 18.256833] systemd[1]: Starting Arbitrary Executable File Formats File System Automount Point. [ OK ] Set up automount Arbitrary Executable File Formats F...utomount Point. [ 18.292164] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point. [ 18.301780] systemd[1]: Starting Swap. [ OK ] Reached target Swap. [ 18.322151] systemd[1]: Reached target Swap. [ 18.326622] systemd[1]: Starting Root Slice. [ OK ] Created slice Root Slice. [ 18.352155] systemd[1]: Created slice Root Slice. [ 18.357055] systemd[1]: Starting User and Session Slice. [ OK ] Created slice User and Session Slice. [ 18.382161] systemd[1]: Created slice User and Session Slice. [ 18.388101] systemd[1]: Starting Delayed Shutdown Socket. [ OK ] Listening on Delayed Shutdown Socket. [ 18.412161] systemd[1]: Listening on Delayed Shutdown Socket. [ 18.418103] systemd[1]: Starting /dev/initctl Compatibility Named Pipe. [ OK ] Listening on /dev/initctl Compatibility Named Pipe. [ 18.442159] systemd[1]: Listening on /dev/initctl Compatibility Named Pipe. [ 18.449306] systemd[1]: Starting Journal Socket (/dev/log). [ OK ] Listening on Journal Socket (/dev/log). [ 18.472164] systemd[1]: Listening on Journal Socket (/dev/log). [ 18.478343] systemd[1]: Starting udev Control Socket. [ OK ] Listening on udev Control Socket. [ 18.502158] systemd[1]: Listening on udev Control Socket. [ 18.507817] systemd[1]: Starting udev Kernel Socket. [ OK ] Listening on udev Kernel Socket. [ 18.532158] systemd[1]: Listening on udev Kernel Socket. [ 18.537710] systemd[1]: Starting Journal Socket. [ OK ] Listening on Journal Socket. [ 18.562160] systemd[1]: Listening on Journal Socket. [ 18.567447] systemd[1]: Starting System Slice. [ OK ] Created slice System Slice. [ 18.592157] systemd[1]: Created slice System Slice. [ 18.597367] systemd[1]: Starting File System Check on Root Device... Starting File System Check on Root Device... [ 18.628092] systemd[1]: Starting system-getty.slice. [ OK ] Created slice system-getty.slice. [ 18.662199] systemd[1]: Created slice system-getty.slice. [ 18.667789] systemd[1]: Starting system-serial\\x2dgetty.slice. [ OK ] Created slice system-serial\\x2dgetty.slice. [ 18.692295] systemd[1]: Created slice system-serial\\x2dgetty.slice. [ 18.698927] systemd[1]: Starting Increase datagram queue length... Starting Increase datagram queue length... [ 18.715131] systemd[1]: Mounting POSIX Message Queue File System... Mounting POSIX Message Queue File System... [ 18.755326] systemd[1]: Starting Create list of required static device nodes for the current kernel... Starting Create list of required static device nodes...rrent kernel... [ 18.777287] systemd[1]: Starting udev Coldplug all Devices... Starting udev Coldplug all Devices... [ 18.799112] systemd[1]: Mounted Huge Pages File System. [ 18.832847] systemd[1]: Mounting Debug File System... Mounting Debug File System... [ 18.947596] systemd[1]: Starting Load Kernel Modules... Starting Load Kernel Modules... [ 19.037337] systemd[1]: Started Set Up Additional Binary Formats. [ 19.049995] systemd[1]: Starting Slices. [ OK [ 19.055626] systemd[1]: Reached target Slices. ] Reached target Slices. [ OK [ 19.079426] systemd[1]: Mounted Debug File System. ] Mounted Debug [ 19.085968] systemd[1]: Mounted POSIX Message Queue File System. File System. [ OK ] Mounted POSIX Message Queue File System. [ OK [ 19.100109] systemd[1]: Started Increase datagram queue length. ] Started Increase datagram queue length. [ OK [ 19.123594] systemd[1]: Started Create list of required static device nodes for the current kernel. ] Started Create list of required static device nodes ...current kernel. [ OK [ 19.155235] systemd[1]: Started Load Kernel Modules. ] Started Load Kernel Modules. [ OK ] Started File System Check on Root Device. [ 19.262223] systemd[1]: Started File System Check on Root Device. [ OK ] Started udev Coldplug all Devices. [ 19.342159] systemd[1]: Started udev Coldplug all Devices. [ 19.624096] systemd[1]: Starting Remount Root and Kernel File Systems... Starting Remount Root and Kernel File Systems... [ 19.658588] systemd[1]: Mounted FUSE Control File System. [ 19.672152] systemd[1]: Mounted Configuration File System. [ 19.677876] systemd[1]: Starting Apply Kernel Variables... Starting Apply Kernel Variables... [ 19.718887] systemd[1]: Starting Create Static Device Nodes in /dev... [ 19.726914] EXT4-fs (md0): re-mounted. Opts: errors=remount-ro Starting Create Static Device Nodes in /dev... [ 19.768280] systemd[1]: Starting Syslog Socket. [ OK ] Listening on Syslog Socket. [ 19.802265] systemd[1]: Listening on Syslog Socket. [ 19.807395] systemd[1]: Starting Sockets. [ OK ] Reached target Sockets. [ 19.842240] systemd[1]: Reached target Sockets. [ 19.846997] systemd[1]: Starting Journal Service... Starting Journal Service... [ OK ] Started Journal Service. [ 19.887520] systemd[1]: Started Journal Service. [ OK ] Started Remount Root and Kernel File Systems. [ OK ] Started Apply Kernel Variables. [ OK ] Started Create Static Device Nodes in /dev. Starting udev Kernel Device Manager... Starting Load/Save Random Seed... [ OK ] Reached target Local File Systems (Pre). [ OK [ 20.322335] systemd-udevd[165]: starting version 215 ] Started udev Kernel Device Manager. Starting Copy rules generated while the root was ro... Starting LSB: MD array assembly... [ OK ] Started Load/Save Random Seed. [ OK ] Started Copy rules generated while the root was ro. [ 17.399679] systemd-fsck[138]: /dev/md0: clean, 19343/655360 files, 228741/2619392 blocks [ 21.187252] orion_wdt: Initial timeout 25 sec [ OK ] Started LSB: MD array assembly. [ OK ] Reached target Local File Systems. Starting Create Volatile Files and Directories... [ OK ] Reached target Remote File Systems. Starting Trigger Flushing of Journal to Persistent Storage... Starting LSB: Raise network interfaces.... [ OK ] Started Create Volatile Files and Directories. [ 21.786834] systemd-journald[163]: Received request to flush runtime journal from PID 1 [ OK ] Started Trigger Flushing of Journal to Persistent Storage. Starting Update UTMP about System Boot/Shutdown... [ OK ] Started Update UTMP about System Boot/Shutdown. [ OK ] Found device /dev/ttyS0. Starting MD array monitor... [ OK ] Started MD array monitor. [ 23.956378] mv643xx_eth_port mv643xx_eth_port.0 eth0: link down [ 23.964239] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready [ 27.594868] mv643xx_eth_port mv643xx_eth_port.0 eth0: link up, 1000 Mb/s, full duplex, flow control disabled [ 27.604748] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [ OK ] Started LSB: Raise network interfaces.. [ OK ] Reached target Network. [ OK ] Reached target System Initialization. [ OK ] Reached target Timers. [ OK ] Reached target Basic System. Starting OpenBSD Secure Shell server... [ OK ] Started OpenBSD Secure Shell server. Starting Regular background program processing daemon... [ OK ] Started Regular background program processing daemon. Starting /etc/rc.local Compatibility... Starting getty on tty2-tty6 if dbus and logind are not available... Starting System Logging Service... Starting Permit User Sessions... [ OK ] Started /etc/rc.local Compatibility. [ OK ] Started Permit User Sessions. [ OK ] Started System Logging Service. [ OK ] Started getty on tty2-tty6 if dbus and logind are not available. Starting Getty on tty6... [ OK ] Started Getty on tty6. Starting Getty on tty5... [ OK ] Started Getty on tty5. Starting Getty on tty4... [ OK ] Started Getty on tty4. Starting Getty on tty3... [ OK ] Started Getty on tty3. Starting Getty on tty2... [ OK ] Started Getty on tty2. Starting Getty on tty1... [ OK ] Started Getty on tty1. Starting Serial Getty on ttyS0... [ OK ] Started Serial Getty on ttyS0. [ OK ] Reached target Login Prompts. [ OK ] Reached target Multi-User System. [ OK ] Reached target Graphical Interface. Starting Update UTMP about System Runlevel Changes... [ OK ] Started Update UTMP about System Runlevel Changes. Debian GNU/Linux 8 sharespace ttyS0 sharespace login: root Password: Last login: Sat Oct 17 13:12:38 BST 2015 on ttyS0 Linux sharespace 3.10.0+ #2 Tue Oct 13 14:50:33 UTC 2015 armv5tel The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. root@sharespace:~# Yay, we have a working system. Erase sdd and partition it:\nroot@sharespace:~# dd if=/dev/zero of=/dev/sdd bs=1M count=10 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied, 0.426046 s, 24.6 MB/s root@sharespace:~# fdisk /dev/sdd Welcome to fdisk (util-linux 2.25.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x23b5f5ce. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): First sector (2048-312499999, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-312499999, default 312499999): +10G Created a new partition 1 of type \u0026#39;Linux\u0026#39; and of size 10 GiB. Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p Partition number (2-4, default 2): First sector (20973568-312499999, default 20973568): Last sector, +sectors or +size{K,M,G,T,P} (20973568-312499999, default 312499999): Created a new partition 2 of type \u0026#39;Linux\u0026#39; and of size 139 GiB. Command (m for help): t Partition number (1,2, default 2): 1 Hex code (type L to list all codes): fd Changed type of partition \u0026#39;Linux\u0026#39; to \u0026#39;Linux raid autodetect\u0026#39;. Command (m for help): t Partition number (1,2, default 2): 2 Hex code (type L to list all codes): fd Changed type of partition \u0026#39;Linux\u0026#39; to \u0026#39;Linux raid autodetect\u0026#39;. Command (m for help): p Disk /dev/sdd: 149 GiB, 160000000000 bytes, 312500000 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x23b5f5ce Device Boot Start End Sectors Size Id Type /dev/sdd1 2048 20973567 20971520 10G fd Linux raid autodetect /dev/sdd2 20973568 312499999 291526432 139G fd Linux raid autodetect Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. root@sharespace:~# Add sdd1 to md0:\nroot@sharespace:~# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sda1[0] sdc1[2] sdb1[1] 10477568 blocks super 1.2 [4/3] [UUU_] unused devices: \u0026lt;none\u0026gt; root@sharespace:~# mdadm /dev/md0 -a /dev/sdd1 mdadm: added /dev/sdd1 root@sharespace:~# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdd1[4] sda1[0] sdc1[2] sdb1[1] 10477568 blocks super 1.2 [4/3] [UUU_] [\u0026gt;....................] recovery = 2.8% (302080/10477568) finish=2.2min speed=75520K/sec unused devices: \u0026lt;none\u0026gt; root@sharespace:~# Create a new raid5 of the rest of the disks:\nroot@sharespace:~# mdadm -C /dev/md1 -l 5 -n 4 /dev/sd[abcd]2 mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md1 started. root@sharespace:~# cat /proc/mdstat Personalities : [raid1] [raid6] [raid5] [raid4] md1 : active raid5 sdd2[4] sdc2[2] sdb2[1] sda2[0] 436895232 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [UUU_] resync=DELAYED bitmap: 2/2 pages [8KB], 65536KB chunk md0 : active raid1 sdd1[4] sda1[0] sdc1[2] sdb1[1] 10477568 blocks super 1.2 [4/3] [UUU_] [========\u0026gt;............] recovery = 41.4% (4344256/10477568) finish=1.5min speed=65221K/sec unused devices: \u0026lt;none\u0026gt; root@sharespace:~# Make a new ext4 filesystem on the raid5:\nroot@sharespace:~# mkfs -t ext4 /dev/md1 mke2fs 1.42.12 (29-Aug-2014) Creating filesystem with 109223808 4k blocks and 27312128 inodes Filesystem UUID: e08c751b-43db-4518-8bb2-44112c3484cc Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done root@sharespace:~# Create fstab entry, mount point and mount it:\nroot@sharespace:~# echo \u0026#34;/dev/md1 /srv/store ext4 defaults,noatime,errors=remount-ro 0 2\u0026#34; \u0026gt;\u0026gt; /etc/fstab root@sharespace:~# mount /srv/store root@sharespace:~# df -h /srv/store/ Filesystem Size Used Avail Use% Mounted on /dev/md1 410G 71M 390G 1% /srv/store root@sharespace:~# ","date":"17 October 2015","externalUrl":null,"permalink":"/projects/wdsharespacedebootstrap/","section":"Projects","summary":"Intro # So I have an old Western Digital Sharespace NAS box that I used to use as my main home NAS. I’ve long since switched it off, support for it has more or less finished, there have been no updates in ages and the new WD support site does not list it anymore. That said it seems a shame to skip it so I tried a few times to re-purpose it. I did get root when I first got it, but was never able to do anything more as it had all my files on. After I stopped using it for a while I forgot about it. Some time later I found a few posts on the debian-arm mailing list from David Hicks, he had managed to get Debian installed at working! Yay I thought so I emailed him and he very helpfully gave me some instructions and some patches to get me started. Unfortunately I fell at the first hurdle and could not get the console working. Embarrassingly I had not turned flow control off within the minicom settings. After 18 months while working on a serial console for a Raspberry Pi it dawned on me that it was my mistake. So I got out the box and console cable and decided to have another go.\n","title":"WD Sharespace Debootstrap","type":"projects"},{"content":"","date":"23 June 2015","externalUrl":null,"permalink":"/tags/gnome/","section":"Tags","summary":"","title":"Gnome","type":"tags"},{"content":"Black titles in Gnome3! ","date":"23 June 2015","externalUrl":null,"permalink":"/posts/gnome3blacktitles/","section":"Posts","summary":"Black titles in Gnome3! ","title":"Gnome3 Black Titles","type":"posts"},{"content":"I recently had to use kdump to do some investigation into why my Lenovo W540 started crashing with recent Linux kernels. It all started when I upgraded from Linux 3.14 to 3.16 and I started having random crashes soon after booting. Being lazy I just ignored it and continued to use the old kernel expecting the issue to go away. However try as I might the issue persisted in 3.17, 3.18, 3.19 and 4.0.\nI tried and failed to find the issue with a git bisect, however that method led me down a dead end as I think the issue can happen after an hour of uptime. I think the git bisect started bisecting down the wrong side because I marked the wrong things good and bad. I then got bored and left the issue for another few months.\nI then decided to do something about it. So I methodically compiled each kernel by hand and ran each and recorded what worked and what didn\u0026rsquo;t. I found that 3.14 was solid, 3.15 had issues with resolution but was ok, 3.16 was ok-ish and 3.17 to 4.0 were not. Sometimes booting and getting to gdm, sometimes not booting and sometimes running for a few minutes after logging in. This confirmed what I\u0026rsquo;d been experiencing in the past.\nI decided to give kdump a try in order to capture that must be some sort of kernel issue as the system seemed to lock up when X was running and I was getting no output or logs.\nThis doubles as a quick setup guide for kdump on Debian and to document process I went through to workaround my issue.\nSo, what is kexec? A very hand wavy explanation of kdump is that if the kernel has issues, it kexecs from its current running position to a fixed area of memory that happens to have an entire copy of Linux that\u0026rsquo;s not running. With any luck this copy of Linux runs and takes a copy of memory and saves it to disk so that later you can look at it and see what happened. This is why I wanted it!\nArch Linux seems to have taken the spot for random Linux documentation from Google and it\u0026rsquo;s guide gives a nice overview to complement the official documentation.\nStep one is to install the right packages, you need to install kdump-tools and crash. These provide the kdump functionality and the tools to read the kernel dumps. You also need to \u0026ldquo;-dbg\u0026rdquo; (linux-image-$(uname -r)-dbg) version of linux-image that contains all the various debugging symbols, eg linux-image-4.0.0-1-amd64-dbg.\nStep two is to enable it. It needs some kernel parameters, so edit /etc/default/grub and run update-grub afterwards, something like this works for me:\n$ grep GRUB_CMDLINE_LINUX /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT=\u0026#34;quiet splash crashkernel=256M nmi_watchdog=1\u0026#34; thomas@NBENG0008:~$ Then enabled the kdump tools by editing /etc/default/kdump-tools, without comments I have:\n$ egrep -v \u0026#34;^$|^#\u0026#34; /etc/default/kdump-tools USE_KDUMP=1 KDUMP_COREDIR=\u0026#34;/var/crash\u0026#34; $ I also enabled sysreq by creating /etc/sysctl.d/sysrq.conf:\n$ cat /etc/sysctl.d/sysrq.conf kernel.sysrq = 1 $ Step three is to reboot to a known working kernel, check its setup ok and force a panic to make sure it all works. So /proc/sys/kernel/sysrq and /sys/kernel/kexec_crash_loaded should both have 1, if not then something is not quite right.\n$ grep . /proc/sys/kernel/sysrq /sys/kernel/kexec_crash_loaded /proc/sys/kernel/sysrq:1 /sys/kernel/kexec_crash_loaded:1 $ You can trigger a panic by writing c to /proc/sysrq-trigger:\n# echo c \u0026gt; /proc/sysrq-trigger With any luck this will trigger panic and the system will save the Linux dump and reboot. After the reboot you should find a new directory in /var/crash and inside a dmesg and dump file, one is the dmesg at the panic and is the dumpfile (eg /var/crash/201505221009/dmesg.201505221009 and /var/crash/201505221009/dump.201505221009). Sure enough the dmesg has a panic at the bottom:\n$ sudo egrep \u0026#34;SysRq|BUG\u0026#34; /var/crash/201505221009/dmesg.201505221009 [ 142.135864] SysRq : Trigger a crash [ 142.137034] BUG: unable to handle kernel NULL pointer dereference at (null) $ The dump file can be viewed with the crash tool:\n$ sudo crash /usr/lib/debug/boot/vmlinux-3.14-2-amd64 /var/crash/201505221009/dump.201505221009 crash 7.0.8 Copyright (C) 2002-2014 Red Hat, Inc. Copyright (C) 2004, 2005, 2006, 2010 IBM Corporation Copyright (C) 1999-2006 Hewlett-Packard Co Copyright (C) 2005, 2006, 2011, 2012 Fujitsu Limited Copyright (C) 2006, 2007 VA Linux Systems Japan K.K. Copyright (C) 2005, 2011 NEC Corporation Copyright (C) 1999, 2002, 2007 Silicon Graphics, Inc. Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc. This program is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Enter \u0026#34;help copying\u0026#34; to see the conditions. This program has absolutely no warranty. Enter \u0026#34;help warranty\u0026#34; for details. GNU gdb (GDB) 7.6 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later \u0026lt;http://gnu.org/licenses/gpl.html\u0026gt; This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type \u0026#34;show copying\u0026#34; and \u0026#34;show warranty\u0026#34; for details. This GDB was configured as \u0026#34;x86_64-unknown-linux-gnu\u0026#34;... KERNEL: /usr/lib/debug/boot/vmlinux-3.14-2-amd64 DUMPFILE: /var/crash/201505221009/dump.201505221009 [PARTIAL DUMP] CPUS: 4 DATE: Fri May 22 10:09:44 2015 UPTIME: 00:02:22 LOAD AVERAGE: 0.45, 0.36, 0.14 TASKS: 326 NODENAME: NBENG0008 RELEASE: 3.14-2-amd64 VERSION: #1 SMP Debian 3.14.15-2 (2014-08-09) MACHINE: x86_64 (2693 Mhz) MEMORY: 15.9 GB PANIC: \u0026#34;Oops: 0002 [#1] SMP \u0026#34; (check log for details) PID: 2735 COMMAND: \u0026#34;bash\u0026#34; TASK: ffff88046c5eaa60 [THREAD_INFO: ffff88046c99e000] CPU: 1 STATE: TASK_RUNNING (PANIC) crash\u0026gt; I then rebooted to my unreliable kernel to get a dump of my issue. Sure enough the system crashed and I got a dump! (Please note that the crash tool can be funny about the version of Linux running, you may need to update it if it\u0026rsquo;s old and looking at a new kernel with a greater major version that it\u0026rsquo;s aware of, see Debian bug 699367. I got a dump!\nIt seems to be the PANIC and COMMAND lines that are interesting:\n$ sudo crash /usr/lib/debug/boot/vmlinux-4.0.0-1-amd64 /var/crash/201505221035/dump.201505221035 crash 7.1.0 Copyright (C) 2002-2014 Red Hat, Inc. Copyright (C) 2004, 2005, 2006, 2010 IBM Corporation Copyright (C) 1999-2006 Hewlett-Packard Co Copyright (C) 2005, 2006, 2011, 2012 Fujitsu Limited Copyright (C) 2006, 2007 VA Linux Systems Japan K.K. Copyright (C) 2005, 2011 NEC Corporation Copyright (C) 1999, 2002, 2007 Silicon Graphics, Inc. Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc. This program is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Enter \u0026#34;help copying\u0026#34; to see the conditions. This program has absolutely no warranty. Enter \u0026#34;help warranty\u0026#34; for details. GNU gdb (GDB) 7.6 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later \u0026lt;http://gnu.org/licenses/gpl.html\u0026gt; This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type \u0026#34;show copying\u0026#34; and \u0026#34;show warranty\u0026#34; for details. This GDB was configured as \u0026#34;x86_64-unknown-linux-gnu\u0026#34;... KERNEL: /usr/lib/debug/boot/vmlinux-4.0.0-1-amd64 DUMPFILE: /var/crash/201505221035/dump.201505221035 [PARTIAL DUMP] CPUS: 4 DATE: Fri May 22 10:35:36 2015 UPTIME: 00:01:16 LOAD AVERAGE: 2.44, 0.75, 0.26 TASKS: 397 NODENAME: NBENG0008 RELEASE: 4.0.0-1-amd64 VERSION: #1 SMP Debian 4.0.2-1 (2015-05-11) MACHINE: x86_64 (2693 Mhz) MEMORY: 15.9 GB PANIC: \u0026#34;BUG: unable to handle kernel paging request at ffff8805660b7ffc\u0026#34; PID: 40 COMMAND: \u0026#34;kworker/0:1\u0026#34; TASK: ffff88046bb26310 [THREAD_INFO: ffff88046b528000] CPU: 0 STATE: TASK_RUNNING (PANIC) crash\u0026gt; Next I did a little reading to try to understand what to do next! These seemed interesting:\nhttp://people.redhat.com/~anderson/crash_whitepaper/ http://www.makelinux.net/ldd3/chp-4-sect-5 http://www.dedoimedo.com/computers/crash-analyze.html Running a backtrace with the bt seemed interesting. It seems like the evo_wait function inside the nouveau module dereferenced some memory causing the kernel paging request failure (Notice that the big numbers are not just cpu registers, some have meaning described in the above links, eg CS):\ncrash\u0026gt; bt PID: 40 TASK: ffff88046bb26310 CPU: 0 COMMAND: \u0026#34;kworker/0:1\u0026#34; #0 [ffff88046b52b990] machine_kexec at ffffffff81050b39 #1 [ffff88046b52b9e0] crash_kexec at ffffffff810ee06c #2 [ffff88046b52bab0] oops_end at ffffffff81017638 #3 [ffff88046b52bad0] no_context at ffffffff8105c4e6 #4 [ffff88046b52bb30] page_fault at ffffffff81566348 [exception RIP: evo_wait+83] RIP: ffffffffa0406bf3 RSP: ffff88046b52bbe8 RFLAGS: 00010206 RAX: ffff8804660b8000 RBX: 000000003fffffff RCX: 0000000000000000 RDX: ffff88046b52bfd8 RSI: ffff88046bb26310 RDI: ffff88046be20010 RBP: ffff88046691f608 R8: ffff88046b528000 R9: 0000000000000000 R10: 00000000000000ab R11: 0000000000000450 R12: 000000004000001f R13: ffff88046691f708 R14: ffff880466249800 R15: 0000000000000001 ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018 #5 [ffff88046b52bc10] nv50_display_init at ffffffffa04076ed [nouveau] #6 [ffff88046b52bc40] nouveau_display_init at ffffffffa04052da [nouveau] #7 [ffff88046b52bc60] nouveau_display_resume at ffffffffa0405c2a [nouveau] #8 [ffff88046b52bc90] nouveau_do_suspend at ffffffffa03f7e52 [nouveau] #9 [ffff88046b52bcd0] nouveau_pmops_runtime_suspend at ffffffffa03f86e1 [nouveau] #10 [ffff88046b52bd00] pci_pm_runtime_suspend at ffffffff813123f0 #11 [ffff88046b52bd30] __rpm_callback at ffffffff813fa47d #12 [ffff88046b52bd50] rpm_callback at ffffffff813fa51f #13 [ffff88046b52bd70] rpm_suspend at ffffffff813fa675 #14 [ffff88046b52bdf0] pm_runtime_work at ffffffff813fbdaa #15 [ffff88046b52be10] process_one_work at ffffffff81084f82 #16 [ffff88046b52be60] worker_thread at ffffffff81085ab3 #17 [ffff88046b52bed0] kthread at ffffffff8108aa41 #18 [ffff88046b52bf50] ret_from_fork at ffffffff815640d8 crash\u0026gt; After a bit more playing I found out that you could load the module symbols with the mod command and then show the disassembly with the c code line numbers with the dis command:\ncrash\u0026gt; mod -s nouveau MODULE NAME SIZE OBJECT FILE ffffffffa048d1c0 nouveau 1298432 /lib/modules/4.0.0-1-amd64/kernel/drivers/gpu/drm/nouveau/nouveau.ko crash\u0026gt; crash\u0026gt; dis -l evo_wait /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 414 0xffffffffa0406ba0 \u0026lt;evo_wait\u0026gt;: nopl 0x0(%rax,%rax,1) [FTRACE NOP] 0xffffffffa0406ba5 \u0026lt;evo_wait+5\u0026gt;: push %r13 0xffffffffa0406ba7 \u0026lt;evo_wait+7\u0026gt;: push %r12 0xffffffffa0406ba9 \u0026lt;evo_wait+9\u0026gt;: mov %esi,%r12d 0xffffffffa0406bac \u0026lt;evo_wait+12\u0026gt;: push %rbp 0xffffffffa0406bad \u0026lt;evo_wait+13\u0026gt;: push %rbx 0xffffffffa0406bae \u0026lt;evo_wait+14\u0026gt;: mov %rdi,%rbp 0xffffffffa0406bb1 \u0026lt;evo_wait+17\u0026gt;: sub $0x8,%rsp /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 416 0xffffffffa0406bb5 \u0026lt;evo_wait+21\u0026gt;: mov 0x8(%rdi),%rax 0xffffffffa0406bb9 \u0026lt;evo_wait+25\u0026gt;: mov 0x40(%rax),%rdi 0xffffffffa0406bbd \u0026lt;evo_wait+29\u0026gt;: test %rdi,%rdi 0xffffffffa0406bc0 \u0026lt;evo_wait+32\u0026gt;: je 0xffffffffa0406ca8 \u0026lt;evo_wait+264\u0026gt; 0xffffffffa0406bc6 \u0026lt;evo_wait+38\u0026gt;: callq 0xffffffff812eb2f0 \u0026lt;ioread32\u0026gt; 0xffffffffa0406bcb \u0026lt;evo_wait+43\u0026gt;: shr $0x2,%eax /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 418 0xffffffffa0406bce \u0026lt;evo_wait+46\u0026gt;: lea 0x100(%rbp),%r13 /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 416 0xffffffffa0406bd5 \u0026lt;evo_wait+53\u0026gt;: mov %eax,%ebx /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 418 0xffffffffa0406bd7 \u0026lt;evo_wait+55\u0026gt;: mov %r13,%rdi /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 419 0xffffffffa0406bda \u0026lt;evo_wait+58\u0026gt;: add %ebx,%r12d /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 418 0xffffffffa0406bdd \u0026lt;evo_wait+61\u0026gt;: callq 0xffffffff81561cd0 \u0026lt;mutex_lock\u0026gt; /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 419 0xffffffffa0406be2 \u0026lt;evo_wait+66\u0026gt;: cmp $0x3f7,%r12d 0xffffffffa0406be9 \u0026lt;evo_wait+73\u0026gt;: jbe 0xffffffffa0406c78 \u0026lt;evo_wait+216\u0026gt; /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 420 0xffffffffa0406bef \u0026lt;evo_wait+79\u0026gt;: mov 0x58(%rbp),%rax 0xffffffffa0406bf3 \u0026lt;evo_wait+83\u0026gt;: movl $0x20000000,(%rax,%rbx,4) /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 422 0xffffffffa0406bfa \u0026lt;evo_wait+90\u0026gt;: mov 0x8(%rbp),%rdi 0xffffffffa0406bfe \u0026lt;evo_wait+94\u0026gt;: mov 0x40(%rdi),%rsi 0xffffffffa0406c02 \u0026lt;evo_wait+98\u0026gt;: test %rsi,%rsi 0xffffffffa0406c05 \u0026lt;evo_wait+101\u0026gt;: je 0xffffffffa0406c90 \u0026lt;evo_wait+240\u0026gt; 0xffffffffa0406c0b \u0026lt;evo_wait+107\u0026gt;: xor %edi,%edi 0xffffffffa0406c0d \u0026lt;evo_wait+109\u0026gt;: callq 0xffffffff812eb3c0 \u0026lt;iowrite32\u0026gt; /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 423 0xffffffffa0406c12 \u0026lt;evo_wait+114\u0026gt;: mov 0x8(%rbp),%rax 0xffffffffa0406c16 \u0026lt;evo_wait+118\u0026gt;: xor %ebx,%ebx 0xffffffffa0406c18 \u0026lt;evo_wait+120\u0026gt;: mov 0x30(%rax),%rdi 0xffffffffa0406c1c \u0026lt;evo_wait+124\u0026gt;: callq 0xffffffffa03b9970 \u0026lt;nv_device\u0026gt; /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/include/nvkm/subdev/timer.h: 43 0xffffffffa0406c21 \u0026lt;evo_wait+129\u0026gt;: mov $0xa,%esi 0xffffffffa0406c26 \u0026lt;evo_wait+134\u0026gt;: mov %rax,%rdi 0xffffffffa0406c29 \u0026lt;evo_wait+137\u0026gt;: callq 0xffffffffa036ee50 \u0026lt;nvkm_subdev\u0026gt; /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 423 0xffffffffa0406c2e \u0026lt;evo_wait+142\u0026gt;: xor %r8d,%r8d 0xffffffffa0406c31 \u0026lt;evo_wait+145\u0026gt;: mov $0xffffffff,%ecx 0xffffffffa0406c36 \u0026lt;evo_wait+150\u0026gt;: mov $0x4,%edx 0xffffffffa0406c3b \u0026lt;evo_wait+155\u0026gt;: mov $0x77359400,%esi 0xffffffffa0406c40 \u0026lt;evo_wait+160\u0026gt;: mov %rax,%rdi 0xffffffffa0406c43 \u0026lt;evo_wait+163\u0026gt;: callq 0xffffffffa03b6540 \u0026lt;nvkm_timer_wait_eq\u0026gt; 0xffffffffa0406c48 \u0026lt;evo_wait+168\u0026gt;: test %al,%al 0xffffffffa0406c4a \u0026lt;evo_wait+170\u0026gt;: jne 0xffffffffa0406c7c \u0026lt;evo_wait+220\u0026gt; /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 424 0xffffffffa0406c4c \u0026lt;evo_wait+172\u0026gt;: mov %r13,%rdi 0xffffffffa0406c4f \u0026lt;evo_wait+175\u0026gt;: callq 0xffffffff81561b40 \u0026lt;mutex_unlock\u0026gt; /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 425 0xffffffffa0406c54 \u0026lt;evo_wait+180\u0026gt;: mov 0x8(%rbp),%rax 0xffffffffa0406c58 \u0026lt;evo_wait+184\u0026gt;: mov $0xffffffffa045fa4c,%rdx 0xffffffffa0406c5f \u0026lt;evo_wait+191\u0026gt;: mov $0x1,%esi 0xffffffffa0406c64 \u0026lt;evo_wait+196\u0026gt;: mov 0x30(%rax),%rdi 0xffffffffa0406c68 \u0026lt;evo_wait+200\u0026gt;: xor %eax,%eax 0xffffffffa0406c6a \u0026lt;evo_wait+202\u0026gt;: callq 0xffffffffa036ea10 \u0026lt;nv_printk_\u0026gt; /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 426 0xffffffffa0406c6f \u0026lt;evo_wait+207\u0026gt;: xor %eax,%eax 0xffffffffa0406c71 \u0026lt;evo_wait+209\u0026gt;: jmp 0xffffffffa0406c83 \u0026lt;evo_wait+227\u0026gt; 0xffffffffa0406c73 \u0026lt;evo_wait+211\u0026gt;: nopl 0x0(%rax,%rax,1) 0xffffffffa0406c78 \u0026lt;evo_wait+216\u0026gt;: shl $0x2,%rbx /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 432 0xffffffffa0406c7c \u0026lt;evo_wait+220\u0026gt;: mov %rbx,%rax 0xffffffffa0406c7f \u0026lt;evo_wait+223\u0026gt;: add 0x58(%rbp),%rax /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 433 0xffffffffa0406c83 \u0026lt;evo_wait+227\u0026gt;: add $0x8,%rsp 0xffffffffa0406c87 \u0026lt;evo_wait+231\u0026gt;: pop %rbx 0xffffffffa0406c88 \u0026lt;evo_wait+232\u0026gt;: pop %rbp 0xffffffffa0406c89 \u0026lt;evo_wait+233\u0026gt;: pop %r12 0xffffffffa0406c8b \u0026lt;evo_wait+235\u0026gt;: pop %r13 0xffffffffa0406c8d \u0026lt;evo_wait+237\u0026gt;: retq 0xffffffffa0406c8e \u0026lt;evo_wait+238\u0026gt;: xchg %ax,%ax /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 422 0xffffffffa0406c90 \u0026lt;evo_wait+240\u0026gt;: xor %ecx,%ecx 0xffffffffa0406c92 \u0026lt;evo_wait+242\u0026gt;: xor %edx,%edx 0xffffffffa0406c94 \u0026lt;evo_wait+244\u0026gt;: mov $0x4,%esi 0xffffffffa0406c99 \u0026lt;evo_wait+249\u0026gt;: callq 0xffffffffa03681f0 \u0026lt;nvif_object_wr\u0026gt; 0xffffffffa0406c9e \u0026lt;evo_wait+254\u0026gt;: jmpq 0xffffffffa0406c12 \u0026lt;evo_wait+114\u0026gt; 0xffffffffa0406ca3 \u0026lt;evo_wait+259\u0026gt;: nopl 0x0(%rax,%rax,1) /build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 416 0xffffffffa0406ca8 \u0026lt;evo_wait+264\u0026gt;: xor %edx,%edx 0xffffffffa0406caa \u0026lt;evo_wait+266\u0026gt;: mov $0x4,%esi 0xffffffffa0406caf \u0026lt;evo_wait+271\u0026gt;: mov %rax,%rdi 0xffffffffa0406cb2 \u0026lt;evo_wait+274\u0026gt;: callq 0xffffffffa0368180 \u0026lt;nvif_object_rd\u0026gt; 0xffffffffa0406cb7 \u0026lt;evo_wait+279\u0026gt;: jmpq 0xffffffffa0406bcb \u0026lt;evo_wait+43\u0026gt; 0xffffffffa0406cbc \u0026lt;evo_wait+284\u0026gt;: nopl 0x0(%rax) crash\u0026gt; So it seems this is the point that it dies:\n/build/linux-Xbe5gu/linux-4.0.2/drivers/gpu/drm/nouveau/nv50_display.c: 420 0xffffffffa0406bef \u0026lt;evo_wait+79\u0026gt;: mov 0x58(%rbp),%rax 0xffffffffa0406bf3 \u0026lt;evo_wait+83\u0026gt;: movl $0x20000000,(%rax,%rbx,4) Looking at nv50_display.c it seems that it\u0026rsquo;s this assignment that fails:\ndmac-\u0026gt;ptr[put] = 0x20000000; dmac is actually a pointer that\u0026rsquo;s passed into the evo_wait function, this is where I stood back.\nI also had a look at /var/crash/201505221035/dmesg.201505221035 and noticed that just before the panic a nouveau error is kprintf\u0026rsquo;ed (about 60 microseconds)!\n[ 62.297649] usb 1-7: reset full-speed USB device number 2 using xhci_hcd [ 76.792370] nouveau E[ DRM] failed to idle channel 0xcccc0001 [DRM] [ 76.792430] BUG: unable to handle kernel paging request at ffff8805660b7ffc [ 76.792455] IP: [\u0026lt;ffffffffa0406bf3\u0026gt;] evo_wait+0x53/0x120 [nouveau] I then did some googling for \u0026ldquo;failed to idle channel\u0026rdquo; and found freedesktop.org bug 69488. So I added \u0026ldquo;nouveau.runpm=0\u0026rdquo; to my boot parameters and rebooted and it\u0026rsquo;s stable now!\nI also filed a bug at https://bugs.freedesktop.org 90682.\n","date":"27 May 2015","externalUrl":null,"permalink":"/posts/kdump/","section":"Posts","summary":"I recently had to use kdump to do some investigation into why my Lenovo W540 started crashing with recent Linux kernels. It all started when I upgraded from Linux 3.14 to 3.16 and I started having random crashes soon after booting. Being lazy I just ignored it and continued to use the old kernel expecting the issue to go away. However try as I might the issue persisted in 3.17, 3.18, 3.19 and 4.0.\n","title":"Kdump","type":"posts"},{"content":" Introduction # My ISP doesn\u0026rsquo;t provide IPv6 and the wireless router they give out does not work with IPv6 Tunnels. So I set up a Raspberry Pi as a router on a stick to route IPv6 on my home network to my IPv6 tunnel provider over IPv4. I mostly did this to start getting familiar with IPv6; it does work and my home computers and phone get IPv6 addresses on the Internet. I occasionally do a netstat and see a bunch of tcp6 connections established to google, facebook and youtube. My one worry was the performance of the Raspberry Pi, it\u0026rsquo;s a single core Arm v6 running at 700Mhz with a 100M ethernet that sits on the USB bus. I have in the past noticed that when the Raspberry Pi is busy (mostly with cron) the ability for it to forward packets does slow down. Very occasionally it drops packets and makes the connection unusable for a short while. My internet connection is FTTC/fiber to the cabinet and +100M, so I\u0026rsquo;m already limiting my connection speed if they go over the Raspberry Pi. I always meant to run some benchmarks on the Pi to see just how fast it can ship packets. With the advent of the newer Raspberry Pi 2 with its quad Core Arm v8 running at 900Mhz I decided to do some proper testing.\nSetup # I used a Dlink DGS-1008D unmanaged switch to connect my desktop, a laptop Lenovo X220 (Intel Core i5-2520), a Raspberry Pi Model B and a Raspberry 2 Pi Model B. I also configured the test laptop to use its ethernet port as a bridge and installed a new virtual machine which connects to that bridge also. So all 4 test machines are bridged together at layer 2. I installed all the machines with Debian testing/sid and updated them all. I wanted to first see what the hardware can do, so I have a fairly stripped down setup. Almost no processes are running and the iptable modules are not loaded. So on all 4 machines \u0026ldquo;iptables-save\u0026rdquo; produces nothing. The test laptop was running Gnome 3, however during the testing the test laptop and virtual machine were practically idle. Both machines are capable of saturating a 1G link. Any background processes running should not interfere with saturating a 100M link with tcp.\nThe plan was to use iperf to test networking from the laptop to virtual machine via a layer 3 router, in this case a Raspberry Pi router on a stick. This is not the same test as my original usage, ie routing IPv6 traffic to an IPv6 tunnel over IPv4. However I wanted to see how fast it would route and forward packets. Also to make sure everything went via the Raspberry Pi I turned off ICMP redirects on all 4 machines using:\necho 0 | tee /proc/sys/net/ipv4/conf/*/accept_redirects /proc/sys/net/ipv4/conf/*/send_redirects Addresses # So all 4 machines are connected to the same layer 2 bridge. The 192.168.1.0/24 addresses are given out by my home Internet router. I chose the 10.0.0.0/8 addresses to test with. For the IPv6 addresses I generated 4 address ranges from the simple dns generator.\nThey were allocated as follows:\nDevice IPv4 Address IPv6 Address Laptop 192.168.1.64/24\n10.0.0.5/24\n10.0.2.5/24 fd2b:656a:6fdb:a3a8::5/64\nfd57:d1b1:9c79:40af::5/64 Virtual Machine 192.168.1.65/24\n10.0.1.5/24\n10.0.3.5/24 fd14:9aa4:e604:ec36::1/64\nfd45:64bf:295c:5631::1/64 Raspberry Pi 10.0.0.1/24 10.0.1.1/24 fd2b:656a:6fdb:a3a8::1/64\nfd14:9aa4:e604:ec36::2/64 Raspberry Pi 2 10.0.2.1/24 10.0.3.1/24 fd57:d1b1:9c79:40af::1/64\nfd45:64bf:295c:5631::2/64 The routing tables look as follows:\nDevice Route Laptop 10.0.0.0/24 dev br0 proto kernel scope link src 10.0.0.5 10.0.1.0/24 via 10.0.0.1 dev br0 10.0.2.0/24 dev br0 proto kernel scope link src 10.0.2.5 10.0.3.0/24 via 10.0.2.1 dev br0 Virtual Machine 10.0.0.0/24 via 10.0.1.1 dev eth0 10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.5 10.0.2.0/24 via 10.0.3.1 dev eth0 10.0.3.0/24 dev eth0 proto kernel scope link src 10.0.3.5 Laptop fd14:9aa4:e604:ec36::/64 via fd2b:656a:6fdb:a3a8::1 dev br0 metric 1024\nfd2b:656a:6fdb:a3a8::/64 dev br0 proto kernel metric 256\nfd45:64bf:295c:5631::/64 via fd57:d1b1:9c79:40af::1 dev br0 metric 1024\nfd57:d1b1:9c79:40af::/64 dev br0 proto kernel metric 256 Virtual Machine fd14:9aa4:e604:ec36::/64 via fd2b:656a:6fdb:a3a8::1 dev br0 metric 1024\nfd2b:656a:6fdb:a3a8::/64 dev br0 proto kernel metric 256\nfd45:64bf:295c:5631::/64 via fd57:d1b1:9c79:40af::1 dev br0 metric 1024\nfd57:d1b1:9c79:40af::/64 dev br0 proto kernel metric 256\nRaspberry Pi fd14:9aa4:e604:ec36::1 dev ipv6tun metric 1024\nfd14:9aa4:e604:ec36::/64 dev ipv6tun proto kernel metric 256\nfd2b:656a:6fdb:a3a8::/64 dev eth0 proto kernel metric 256\nRaspberry Pi 2 fd45:64bf:295c:5631::1 dev ipv6tun metric 1024\nfd45:64bf:295c:5631::/64 dev ipv6tun proto kernel metric 256\nfd57:d1b1:9c79:40af::/64 dev eth0 proto kernel metric 256\nGeneral info (version, arch, cpuinfo, memory) # I decided that during the write up I would not obscure the machines when pasting commands. The laptop is known as lenovo, the virtual machine is debian, the raspberry pi is lace and the raspberry pi 2 is jessie-rpi. This is just some general information about the machines. Also note that the machines are not running NTP, so timestamps sometimes look odd.\nLaptop # root@lenovo:~# cat /etc/debian_version 8.0 root@lenovo:~# root@lenovo:~# uname -a Linux lenovo 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt4-3 (2015-02-03) x86_64 GNU/Linux root@lenovo:~# root@lenovo:~# dpkg-architecture | grep DEB_HOST_ARCH DEB_HOST_ARCH=amd64 DEB_HOST_ARCH_BITS=64 DEB_HOST_ARCH_CPU=amd64 DEB_HOST_ARCH_ENDIAN=little DEB_HOST_ARCH_OS=linux root@lenovo:~# root@lenovo:~# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 42 model name : Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz stepping : 7 microcode : 0x29 cpu MHz : 2538.964 cache size : 3072 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 2 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid bogomips : 4984.14 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 42 model name : Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz stepping : 7 microcode : 0x29 cpu MHz : 2579.589 cache size : 3072 KB physical id : 0 siblings : 2 core id : 1 cpu cores : 2 apicid : 2 initial apicid : 2 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid bogomips : 4984.14 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: root@lenovo:~# root@lenovo:~# free -m total used free shared buffers cached Mem: 15966 1325 14641 90 42 563 -/+ buffers/cache: 719 15246 Swap: 7590 0 7590 root@lenovo:~# Virtual Machine # root@debian:~# cat /etc/debian_version 8.0 root@debian:~# root@debian:~# uname -a Linux debian 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt4-3 (2015-02-03) x86_64 GNU/Linux root@debian:~# root@debian:~# dpkg-architecture | grep DEB_HOST_ARCH DEB_HOST_ARCH=amd64 DEB_HOST_ARCH_BITS=64 DEB_HOST_ARCH_CPU=amd64 DEB_HOST_ARCH_ENDIAN=little DEB_HOST_ARCH_OS=linux root@debian:~# root@debian:~# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 42 model name : Intel Xeon E312xx (Sandy Bridge) stepping : 1G microcode : 0x1 cpu MHz : 2491.904 cache size : 4096 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx hypervisor lahf_lm xsaveopt bogomips : 4983.80 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: root@debian:~# root@debian:~# free -m total used free shared buffers cached Mem: 1000 84 915 4 6 36 -/+ buffers/cache: 41 959 Swap: 707 0 707 root@debian:~# Raspberry Pi # root@lace:~# cat /etc/debian_version 8.0 root@lace:~# root@lace:~# uname -a Linux lace 3.18.7+ #755 PREEMPT Thu Feb 12 17:14:31 GMT 2015 armv6l GNU/Linux root@lace:~# root@lace:~# dpkg-architecture | grep DEB_HOST_ARCH DEB_HOST_ARCH=armel DEB_HOST_ARCH_BITS=32 DEB_HOST_ARCH_CPU=arm DEB_HOST_ARCH_ENDIAN=little DEB_HOST_ARCH_OS=linux root@lace:~# root@lace:~# cat /proc/cpuinfo processor : 0 model name : ARMv6-compatible processor rev 7 (v6l) BogoMIPS : 2.00 Features : half thumb fastmult vfp edsp java tls CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xb76 CPU revision : 7 Hardware : BCM2708 Revision : 000e Serial : 00000000364a1b21 root@lace:~# root@lace:~# free -m total used free shared buffers cached Mem: 435 56 379 4 7 30 -/+ buffers/cache: 17 417 Swap: 255 0 255 root@lace:~# Raspberry Pi 2 # root@jessie-rpi:~# cat /etc/debian_version 8.0 root@jessie-rpi:~# root@jessie-rpi:~# uname -a Linux jessie-rpi 3.18.0-trunk-rpi2 #1 SMP PREEMPT Debian 3.18.5-1~exp1.co1 (2015-02-02) armv7l GNU/Linux root@jessie-rpi:~# root@jessie-rpi:~# dpkg-architecture | grep DEB_HOST_ARCH DEB_HOST_ARCH=armhf DEB_HOST_ARCH_BITS=32 DEB_HOST_ARCH_CPU=arm DEB_HOST_ARCH_ENDIAN=little DEB_HOST_ARCH_OS=linux root@jessie-rpi:~# root@jessie-rpi:~# cat /proc/cpuinfo processor : 0 model name : ARMv7 Processor rev 5 (v7l) BogoMIPS : 38.40 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xc07 CPU revision : 5 processor : 1 model name : ARMv7 Processor rev 5 (v7l) BogoMIPS : 38.40 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xc07 CPU revision : 5 processor : 2 model name : ARMv7 Processor rev 5 (v7l) BogoMIPS : 38.40 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xc07 CPU revision : 5 processor : 3 model name : ARMv7 Processor rev 5 (v7l) BogoMIPS : 38.40 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xc07 CPU revision : 5 Hardware : BCM2709 Revision : 0000 Serial : 0000000000000000 root@jessie-rpi:~# root@jessie-rpi:~# free -m total used free shared buffers cached Mem: 925 62 863 6 8 27 -/+ buffers/cache: 25 899 Swap: 0 0 0 root@jessie-rpi:~# Network Settings # Next follows the actual network settings I used.\nLaptop # root@lenovo:~# cat /etc/network/interfaces iface eth0 inet manual auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_maxwait 0 auto br0:1 iface br0:1 inet static address 10.0.0.5 netmask 255.255.255.0 post-up /sbin/ip route add 10.0.1.0/24 via 10.0.0.1 dev br0 pre-down /sbin/ip route del 10.0.1.0/24 via 10.0.0.1 dev br0 auto br0:2 iface br0:2 inet static address 10.0.2.5 netmask 255.255.255.0 post-up /sbin/ip route add 10.0.3.0/24 via 10.0.2.1 dev br0 pre-down /sbin/ip route del 10.0.3.0/24 via 10.0.2.1 dev br0 root@lenovo:~# root@lenovo:~# ip -4 addr show br0 5: br0: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc noqueue state UP group default inet 192.168.1.64/24 brd 192.168.1.255 scope global br0 valid_lft forever preferred_lft forever inet 10.0.0.5/24 brd 10.0.0.255 scope global br0:1 valid_lft forever preferred_lft forever inet 10.0.2.5/24 brd 10.0.2.255 scope global br0:2 valid_lft forever preferred_lft forever root@lenovo:~# root@lenovo:~# ip route default via 192.168.1.254 dev br0 10.0.0.0/24 dev br0 proto kernel scope link src 10.0.0.5 10.0.1.0/24 via 10.0.0.1 dev br0 10.0.2.0/24 dev br0 proto kernel scope link src 10.0.2.5 10.0.3.0/24 via 10.0.2.1 dev br0 169.254.0.0/16 dev br0 scope link metric 1000 192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.64 root@lenovo:~# root@lenovo:~# brctl show bridge name bridge id STP enabled interfaces br0 8000.f0def1db3597 no eth0 vnet0 root@lenovo:~# Virtual Machine # root@debian:~# cat /etc/network/interfaces auto eth0 iface eth0 inet dhcp auto eth0:1 iface eth0:1 inet static address 10.0.1.5 netmask 255.255.255.0 post-up /sbin/ip route add 10.0.0.0/24 via 10.0.1.1 dev eth0 pre-down /sbin/ip route del 10.0.0.0/24 via 10.0.1.1 dev eth0 auto eth0:2 iface eth0:2 inet static address 10.0.3.5 netmask 255.255.255.0 post-up /sbin/ip route add 10.0.2.0/24 via 10.0.3.1 dev eth0 pre-down /sbin/ip route del 10.0.2.0/24 via 10.0.3.1 dev eth0 root@debian:~# root@debian:~# ip -4 addr show eth0 2: eth0: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 inet 192.168.1.65/24 brd 192.168.1.255 scope global eth0 valid_lft forever preferred_lft forever inet 10.0.1.5/24 brd 10.0.1.255 scope global eth0:1 valid_lft forever preferred_lft forever inet 10.0.3.5/24 brd 10.0.3.255 scope global eth0:2 valid_lft forever preferred_lft forever root@debian:~# root@debian:~# ip route default via 192.168.1.254 dev eth0 10.0.0.0/24 via 10.0.1.1 dev eth0 10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.5 10.0.2.0/24 via 10.0.3.1 dev eth0 10.0.3.0/24 dev eth0 proto kernel scope link src 10.0.3.5 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.65 root@debian:~# Raspberry Pi # root@lace:~# cat /etc/network/interfaces auto eth0:0 iface eth0:0 inet static address 10.0.0.1 netmask 255.255.255.0 auto eth0:1 iface eth0:1 inet static address 10.0.1.1 netmask 255.255.255.0 root@lace:~# root@lace:~# ip -4 addr 1: lo: \u0026lt;LOOPBACK,UP,LOWER_UP\u0026gt; mtu 65536 qdisc noqueue state UNKNOWN group default inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 inet 10.0.0.1/24 brd 10.0.0.255 scope global eth0:0 valid_lft forever preferred_lft forever inet 10.0.1.1/24 brd 10.0.1.255 scope global eth0:1 valid_lft forever preferred_lft forever root@lace:~# root@lace:~# ip route 10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.1 10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.1 root@lace:~# root@lace:~# cat /proc/sys/net/ipv4/ip_forward 1 root@lace:~# Raspberry Pi 2 # root@jessie-rpi:~# cat /etc/network/interfaces auto eth0:0 iface eth0:0 inet static address 10.0.2.1 netmask 255.255.255.0 auto eth0:1 iface eth0:1 inet static address 10.0.3.1 netmask 255.255.255.0 root@jessie-rpi:~# root@jessie-rpi:~# ip -4 addr show eth0 2: eth0: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 inet 10.0.2.1/24 brd 10.0.2.255 scope global eth0:0 valid_lft forever preferred_lft forever inet 10.0.3.1/24 brd 10.0.3.255 scope global eth0:1 valid_lft forever preferred_lft forever root@jessie-rpi:~# root@jessie-rpi:~# ip route 10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.1 10.0.3.0/24 dev eth0 proto kernel scope link src 10.0.3.1 root@jessie-rpi:~# root@jessie-rpi:~# cat /proc/sys/net/ipv4/ip_forward 1 root@jessie-rpi:~# IPv6 Network Settings # Lenovo # section in /etc/network/interfaces:\nauto br0:3 iface br0:3 inet6 static address fd2b:656a:6fdb:a3a8::5 netmask 64 post-up /sbin/ip route add fd14:9aa4:e604:ec36::/64 via fd2b:656a:6fdb:a3a8::1 dev br0 pre-down /sbin/ip route del fd14:9aa4:e604:ec36::/64 via fd2b:656a:6fdb:a3a8::1 dev br0 auto br0:4 iface br0:4 inet6 static address fd57:d1b1:9c79:40af::5 netmask 64 post-up /sbin/ip route add fd45:64bf:295c:5631::/64 via fd57:d1b1:9c79:40af::1 dev br0 pre-down /sbin/ip route del fd45:64bf:295c:5631::/64 via fd57:d1b1:9c79:40af::1 dev br0 root@lenovo:~# ip -6 addr 1: lo: \u0026lt;LOOPBACK,UP,LOWER_UP\u0026gt; mtu 65536 inet6 ::1/128 scope host valid_lft forever preferred_lft forever 5: br0: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 inet6 fd57:d1b1:9c79:40af::5/64 scope global deprecated valid_lft forever preferred_lft 0sec inet6 fd2b:656a:6fdb:a3a8::5/64 scope global deprecated valid_lft forever preferred_lft 0sec inet6 fe80::f2de:f1ff:fedb:3597/64 scope link valid_lft forever preferred_lft forever 6: vnet0: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qlen 500 inet6 fe80::fc54:ff:fe99:771d/64 scope link valid_lft forever preferred_lft forever root@lenovo:~# root@lenovo:~# ip -6 route fd14:9aa4:e604:ec36::/64 via fd2b:656a:6fdb:a3a8::1 dev br0 metric 1024 fd2b:656a:6fdb:a3a8::/64 dev br0 proto kernel metric 256 fd45:64bf:295c:5631::/64 via fd57:d1b1:9c79:40af::1 dev br0 metric 1024 fd57:d1b1:9c79:40af::/64 dev br0 proto kernel metric 256 fe80::/64 dev br0 proto kernel metric 256 fe80::/64 dev vnet0 proto kernel metric 256 root@lenovo:~# Virtual Machine # section in /etc/network/interfaces:\nauto ipv6tun iface ipv6tun inet6 v4tunnel address fd14:9aa4:e604:ec36::1 netmask 64 endpoint 10.0.1.1 local 10.0.1.5 ttl 255 post-up /sbin/ip route add fd2b:656a:6fdb:a3a8::/64 via fd14:9aa4:e604:ec36::2 dev ipv6tun pre-down /sbin/ip route del fd2b:656a:6fdb:a3a8::/64 via fd14:9aa4:e604:ec36::2 dev ipv6tun auto ipv6tun2 iface ipv6tun2 inet6 v4tunnel address fd45:64bf:295c:5631::1 netmask 64 endpoint 10.0.3.1 local 10.0.3.5 ttl 255 post-up /sbin/ip route add fd57:d1b1:9c79:40af::/64 via fd45:64bf:295c:5631::2 dev ipv6tun2 pre-down /sbin/ip route del fd57:d1b1:9c79:40af::/64 via fd45:64bf:295c:5631::2 dev ipv6tun2 thomas@debian:~$ ip -6 addr 1: lo: \u0026lt;LOOPBACK,UP,LOWER_UP\u0026gt; mtu 65536 inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qlen 1000 inet6 fe80::5054:ff:fe99:771d/64 scope link valid_lft forever preferred_lft forever 10: ipv6tun@NONE: \u0026lt;POINTOPOINT,NOARP,UP,LOWER_UP\u0026gt; mtu 1480 inet6 fd14:9aa4:e604:ec36::1/64 scope global valid_lft forever preferred_lft forever inet6 fe80::a00:105/64 scope link valid_lft forever preferred_lft forever 11: ipv6tun2@NONE: \u0026lt;POINTOPOINT,NOARP,UP,LOWER_UP\u0026gt; mtu 1480 inet6 fd45:64bf:295c:5631::1/64 scope global valid_lft forever preferred_lft forever inet6 fe80::a00:305/64 scope link valid_lft forever preferred_lft forever thomas@debian:~$ thomas@debian:~$ ip -6 route fd14:9aa4:e604:ec36::/64 dev ipv6tun proto kernel metric 256 fd2b:656a:6fdb:a3a8::/64 via fd14:9aa4:e604:ec36::2 dev ipv6tun metric 1024 fd45:64bf:295c:5631::/64 dev ipv6tun2 proto kernel metric 256 fd57:d1b1:9c79:40af::/64 via fd45:64bf:295c:5631::2 dev ipv6tun2 metric 1024 fe80::/64 dev eth0 proto kernel metric 256 fe80::/64 dev ipv6tun proto kernel metric 256 fe80::/64 dev ipv6tun2 proto kernel metric 256 thomas@debian:~$ Raspberry Pi # section in /etc/network/interfaces:\nauto eth0:2 iface eth0:2 inet6 static address fd2b:656a:6fdb:a3a8::1 netmask 64 auto ipv6tun iface ipv6tun inet6 v4tunnel address fd14:9aa4:e604:ec36::2 netmask 64 endpoint 10.0.1.5 local 10.0.1.1 ttl 255 gateway fd14:9aa4:e604:ec36::1 root@lace:~# ip -6 addr 1: lo: \u0026lt;LOOPBACK,UP,LOWER_UP\u0026gt; mtu 65536 inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qlen 1000 inet6 fd2b:656a:6fdb:a3a8::1/64 scope global deprecated valid_lft forever preferred_lft 0sec inet6 fe80::ba27:ebff:fe4a:1b21/64 scope link valid_lft forever preferred_lft forever 7: ipv6tun@NONE: \u0026lt;POINTOPOINT,NOARP,UP,LOWER_UP\u0026gt; mtu 1480 inet6 fd14:9aa4:e604:ec36::2/64 scope global valid_lft forever preferred_lft forever inet6 fe80::a00:101/64 scope link valid_lft forever preferred_lft forever root@lace:~# root@lace:~# ip -6 route fd14:9aa4:e604:ec36::1 dev ipv6tun metric 1024 fd14:9aa4:e604:ec36::/64 dev ipv6tun proto kernel metric 256 fd2b:656a:6fdb:a3a8::/64 dev eth0 proto kernel metric 256 fe80::/64 dev eth0 proto kernel metric 256 fe80::/64 dev ipv6tun proto kernel metric 256 default via fd14:9aa4:e604:ec36::1 dev ipv6tun metric 1024 root@lace:~# root@lace:~# cat /proc/sys/net/ipv6/conf/all/forwarding 1 root@lace:~# Raspberry Pi 2 # section in /etc/network/interfaces:\nauto eth0:2 iface eth0:2 inet6 static address fd57:d1b1:9c79:40af::1 netmask 64 auto ipv6tun iface ipv6tun inet6 v4tunnel address fd45:64bf:295c:5631::2 netmask 64 endpoint 10.0.3.5 local 10.0.3.1 ttl 255 gateway fd45:64bf:295c:5631::1 root@jessie-rpi:~# ip -6 addr 1: lo: \u0026lt;LOOPBACK,UP,LOWER_UP\u0026gt; mtu 65536 inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: \u0026lt;BROADCAST,MULTICAST,UP,LOWER_UP\u0026gt; mtu 1500 qlen 1000 inet6 fd57:d1b1:9c79:40af::1/64 scope global deprecated valid_lft forever preferred_lft 0sec inet6 fe80::ba27:ebff:fe27:51b9/64 scope link valid_lft forever preferred_lft forever 4: ipv6tun@NONE: \u0026lt;POINTOPOINT,NOARP,UP,LOWER_UP\u0026gt; mtu 1480 inet6 fd45:64bf:295c:5631::2/64 scope global valid_lft forever preferred_lft forever inet6 fe80::a00:301/64 scope link valid_lft forever preferred_lft forever root@jessie-rpi:~# root@jessie-rpi:~# ip -6 route fd45:64bf:295c:5631::1 dev ipv6tun metric 1024 fd45:64bf:295c:5631::/64 dev ipv6tun proto kernel metric 256 fd57:d1b1:9c79:40af::/64 dev eth0 proto kernel metric 256 fe80::/64 dev eth0 proto kernel metric 256 fe80::/64 dev ipv6tun proto kernel metric 256 default via fd45:64bf:295c:5631::1 dev ipv6tun metric 1024 root@jessie-rpi:~# root@jessie-rpi:~# cat /proc/sys/net/ipv6/conf/all/forwarding 1 root@jessie-rpi:~# Process tables # As I mentioned the Raspberry machines were fairly simple without many background tasks running that could potentially effect the results. Next is the full process listing from both.\nRaspberry Pi # root@lace:~# ps auxww USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.4 0.8 5324 3840 ? Ss 11:16 0:05 /sbin/init root 2 0.0 0.0 0 0 ? S 11:16 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 11:16 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S 11:16 0:00 [rcu_preempt] root 8 0.0 0.0 0 0 ? S 11:16 0:00 [rcu_sched] root 9 0.0 0.0 0 0 ? S 11:16 0:00 [rcu_bh] root 10 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [khelper] root 11 0.0 0.0 0 0 ? S 11:16 0:00 [kdevtmpfs] root 12 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [netns] root 13 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [perf] root 14 0.0 0.0 0 0 ? S 11:16 0:00 [khungtaskd] root 15 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [writeback] root 16 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [crypto] root 17 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [bioset] root 18 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [kblockd] root 20 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [rpciod] root 21 0.0 0.0 0 0 ? S 11:16 0:00 [kswapd0] root 22 0.0 0.0 0 0 ? S 11:16 0:00 [fsnotify_mark] root 23 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [nfsiod] root 29 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [kthrotld] root 30 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [VCHIQ-0] root 31 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [VCHIQr-0] root 32 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [VCHIQs-0] root 33 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [iscsi_eh] root 34 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [dwc_otg] root 35 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [DWC Notificatio] root 36 0.0 0.0 0 0 ? S 11:16 0:00 [kworker/u2:1] root 37 0.0 0.0 0 0 ? S 11:16 0:00 [VCHIQka-0] root 38 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [SMIO] root 39 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [deferwq] root 40 0.0 0.0 0 0 ? S 11:16 0:00 [kworker/u2:2] root 42 0.0 0.0 0 0 ? S 11:16 0:00 [mmcqd/0] root 43 0.0 0.0 0 0 ? S 11:16 0:00 [scsi_eh_0] root 44 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [scsi_tmf_0] root 45 0.0 0.0 0 0 ? S 11:16 0:00 [usb-storage] root 46 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [kworker/0:1H] root 47 0.0 0.0 0 0 ? S 11:16 0:00 [jbd2/sda1-8] root 48 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [ext4-rsv-conver] root 49 0.0 0.0 0 0 ? S\u0026lt; 11:16 0:00 [ipv6_addrconf] root 80 0.0 0.5 8132 2520 ? Ss 11:17 0:00 /lib/systemd/systemd-journald root 81 0.0 0.0 0 0 ? S 11:17 0:00 [kauditd] root 91 0.0 0.6 11116 2716 ? Ss 11:17 0:00 /lib/systemd/systemd-udevd root 272 0.0 0.9 7896 4368 ? Ss 11:17 0:00 /usr/sbin/sshd -D root 275 0.0 0.4 3348 2092 ? Ss 11:17 0:00 /lib/systemd/systemd-logind root 315 0.0 0.3 3976 1708 tty1 Ss+ 11:17 0:00 /sbin/agetty --noclear tty1 linux root 317 0.0 0.4 3796 1980 ttyAMA0 Ss+ 11:17 0:00 /sbin/agetty --keep-baud 115200 38400 9600 ttyAMA0 vt102 root 413 0.0 0.0 0 0 ? S 11:22 0:00 [kworker/0:0] root 425 0.0 0.0 0 0 ? S 11:32 0:00 [kworker/0:1] root 426 0.3 1.1 11468 5312 ? Ss 11:35 0:00 sshd: root@pts/0 root 428 0.4 0.9 6088 4192 pts/0 Ss 11:35 0:00 -bash root 450 0.0 0.0 0 0 ? S 11:37 0:00 [kworker/0:2] root 623 0.0 0.4 4668 2104 pts/0 R+ 11:39 0:00 ps auxww root@lace:~# Raspberry Pi 2 # root@jessie-rpi:~# ps auxww USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.2 0.3 4364 3056 ? Ss 00:16 0:04 /sbin/init root 2 0.0 0.0 0 0 ? S 00:16 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 00:16 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S 00:16 0:00 [kworker/u8:0] root 7 0.0 0.0 0 0 ? S 00:16 0:00 [rcu_preempt] root 8 0.0 0.0 0 0 ? S 00:16 0:00 [rcu_sched] root 9 0.0 0.0 0 0 ? S 00:16 0:00 [rcu_bh] root 10 0.0 0.0 0 0 ? S 00:16 0:00 [migration/0] root 11 0.0 0.0 0 0 ? S 00:16 0:00 [watchdog/0] root 12 0.0 0.0 0 0 ? S 00:16 0:00 [watchdog/1] root 13 0.0 0.0 0 0 ? S 00:16 0:00 [migration/1] root 14 0.0 0.0 0 0 ? S 00:16 0:00 [ksoftirqd/1] root 16 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [kworker/1:0H] root 17 0.0 0.0 0 0 ? S 00:16 0:00 [watchdog/2] root 18 0.0 0.0 0 0 ? S 00:16 0:00 [migration/2] root 19 0.0 0.0 0 0 ? S 00:16 0:00 [ksoftirqd/2] root 21 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [kworker/2:0H] root 22 0.0 0.0 0 0 ? S 00:16 0:00 [watchdog/3] root 23 0.0 0.0 0 0 ? S 00:16 0:00 [migration/3] root 24 0.0 0.0 0 0 ? S 00:16 0:00 [ksoftirqd/3] root 26 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [kworker/3:0H] root 27 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [khelper] root 28 0.0 0.0 0 0 ? S 00:16 0:00 [kdevtmpfs] root 29 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [netns] root 30 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [perf] root 31 0.0 0.0 0 0 ? S 00:16 0:00 [khungtaskd] root 32 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [writeback] root 33 0.0 0.0 0 0 ? SN 00:16 0:00 [ksmd] root 34 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [crypto] root 35 0.0 0.0 0 0 ? S 00:16 0:00 [kworker/1:1] root 36 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [kintegrityd] root 37 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [bioset] root 38 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [kblockd] root 39 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [devfreq_wq] root 40 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [rpciod] root 41 0.0 0.0 0 0 ? S 00:16 0:00 [kswapd0] root 42 0.0 0.0 0 0 ? S 00:16 0:00 [fsnotify_mark] root 43 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [nfsiod] root 53 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [kthrotld] root 54 0.0 0.0 0 0 ? S 00:16 0:00 [kworker/0:1] root 55 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [VCHIQ-0] root 56 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [VCHIQr-0] root 57 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [VCHIQs-0] root 58 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [iscsi_eh] root 59 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [dwc_otg] root 60 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [DWC Notificatio] root 62 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [ipv6_addrconf] root 63 0.0 0.0 0 0 ? S 00:16 0:00 [mmcqd/0] root 64 0.0 0.0 0 0 ? S 00:16 0:00 [VCHIQka-0] root 65 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [SMIO] root 66 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [deferwq] root 67 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [kworker/0:1H] root 68 0.0 0.0 0 0 ? S 00:16 0:00 [jbd2/mmcblk0p2-] root 69 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [ext4-rsv-conver] root 70 0.0 0.0 0 0 ? S 00:16 0:00 [kworker/2:1] root 84 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [kworker/2:1H] root 94 0.0 0.2 9196 2156 ? Ss 00:16 0:00 /lib/systemd/systemd-journald root 95 0.0 0.0 0 0 ? S 00:16 0:00 [kauditd] root 97 0.0 0.0 0 0 ? S\u0026lt; 00:16 0:00 [kworker/3:1H] root 109 0.0 0.0 0 0 ? S 00:17 0:00 [kworker/0:2] root 112 0.0 0.0 0 0 ? S\u0026lt; 00:17 0:00 [kworker/1:1H] root 115 0.0 0.2 10692 2388 ? Ss 00:17 0:00 /lib/systemd/systemd-udevd root 121 0.0 0.0 0 0 ? S 00:17 0:00 [kworker/3:2] root 143 0.0 0.0 0 0 ? S\u0026lt; 00:17 0:00 [bcm2708_spi.0] root 149 0.0 0.0 0 0 ? S 00:17 0:00 [kworker/u8:2] root 262 0.0 0.3 6524 3700 ? Ss 00:17 0:00 /usr/sbin/sshd -D root 267 0.0 0.1 2672 1660 ? Ss 00:17 0:00 /lib/systemd/systemd-logind root 286 0.0 0.2 4280 2592 ? Ss 00:17 0:00 /usr/sbin/irqbalance --pid=/var/run/irqbalance.pid root 297 0.0 0.1 3544 1300 tty1 Ss+ 00:17 0:00 /sbin/agetty --noclear tty1 linux root 298 0.0 0.1 3364 1608 ttyAMA0 Ss+ 00:17 0:00 /sbin/agetty --keep-baud 115200 38400 9600 ttyAMA0 vt102 root 356 0.0 0.0 0 0 ? S 00:22 0:00 [kworker/2:0] root 376 0.0 0.0 0 0 ? S 00:32 0:00 [kworker/1:0] root 377 0.0 0.0 0 0 ? S 00:32 0:00 [kworker/3:0] root 384 0.2 0.4 10060 4420 ? Rs 00:36 0:00 sshd: root@pts/0 root 386 0.0 0.2 4516 2672 pts/0 Ss 00:37 0:00 -bash root 432 0.0 0.0 0 0 ? S 00:39 0:00 [kworker/0:0] root 435 0.0 0.0 0 0 ? S 00:39 0:00 [kworker/1:2] root 501 0.0 0.0 0 0 ? S 00:39 0:00 [kworker/2:2] root 533 0.0 0.2 31596 2260 ? Ssl 00:40 0:00 /usr/sbin/rsyslogd -n root 591 0.0 0.0 0 0 ? S 00:40 0:00 [kworker/3:1] root 610 0.0 0.1 4220 1728 pts/0 R+ 00:41 0:00 ps auxww root@jessie-rpi:~# Testing the Setup # I wanted to make sure that my setup worked.\nPing test Raspberry Pi # root@lenovo:~# ping -n -c 1 10.0.1.5 PING 10.0.1.5 (10.0.1.5) 56(84) bytes of data. 64 bytes from 10.0.1.5: icmp_seq=1 ttl=63 time=1.05 ms --- 10.0.1.5 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1.058/1.058/1.058/0.000 ms root@lenovo:~# root@debian:~# ping -n -c 1 10.0.0.5 PING 10.0.0.5 (10.0.0.5) 56(84) bytes of data. 64 bytes from 10.0.0.5: icmp_seq=1 ttl=63 time=1.17 ms --- 10.0.0.5 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1.174/1.174/1.174/0.000 ms root@debian:~# on lace:\n15:36:22.694730 IP 10.0.0.5 \u0026gt; 10.0.1.5: ICMP echo request, id 6361, seq 1, length 64 15:36:22.694839 IP 10.0.0.5 \u0026gt; 10.0.1.5: ICMP echo request, id 6361, seq 1, length 64 15:36:22.695393 IP 10.0.1.5 \u0026gt; 10.0.0.5: ICMP echo reply, id 6361, seq 1, length 64 15:36:22.695466 IP 10.0.1.5 \u0026gt; 10.0.0.5: ICMP echo reply, id 6361, seq 1, length 64 15:39:08.508467 IP 10.0.1.5 \u0026gt; 10.0.0.5: ICMP echo request, id 617, seq 1, length 64 15:39:08.508573 IP 10.0.1.5 \u0026gt; 10.0.0.5: ICMP echo request, id 617, seq 1, length 64 15:39:08.509071 IP 10.0.0.5 \u0026gt; 10.0.1.5: ICMP echo reply, id 617, seq 1, length 64 15:39:08.509145 IP 10.0.0.5 \u0026gt; 10.0.1.5: ICMP echo reply, id 617, seq 1, length 64 root@lenovo:~# ping6 -n -c 1 fd14:9aa4:e604:ec36::1 PING fd14:9aa4:e604:ec36::1(fd14:9aa4:e604:ec36::1) 56 data bytes 64 bytes from fd14:9aa4:e604:ec36::1: icmp_seq=1 ttl=63 time=1.81 ms --- fd14:9aa4:e604:ec36::1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1.815/1.815/1.815/0.000 ms root@lenovo:~# 16:50:59.673220 IP6 fd2b:656a:6fdb:a3a8::5 \u0026gt; fd14:9aa4:e604:ec36::1: ICMP6, echo request, seq 1, length 64 16:50:59.673591 IP 10.0.1.1 \u0026gt; 10.0.1.5: IP6 fd2b:656a:6fdb:a3a8::5 \u0026gt; fd14:9aa4:e604:ec36::1: ICMP6, echo request, seq 1, length 64 16:50:59.674247 IP 10.0.1.5 \u0026gt; 10.0.1.1: IP6 fd14:9aa4:e604:ec36::1 \u0026gt; fd2b:656a:6fdb:a3a8::5: ICMP6, echo reply, seq 1, length 64 16:50:59.674526 IP6 fd14:9aa4:e604:ec36::1 \u0026gt; fd2b:656a:6fdb:a3a8::5: ICMP6, echo reply, seq 1, length 64 root@debian:~# ping6 -n -c 1 fd2b:656a:6fdb:a3a8::5 PING fd2b:656a:6fdb:a3a8::5(fd2b:656a:6fdb:a3a8::5) 56 data bytes 64 bytes from fd2b:656a:6fdb:a3a8::5: icmp_seq=1 ttl=63 time=1.59 ms --- fd2b:656a:6fdb:a3a8::5 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1.592/1.592/1.592/0.000 ms root@debian:~# 16:52:24.635238 IP 10.0.1.5 \u0026gt; 10.0.1.1: IP6 fd14:9aa4:e604:ec36::1 \u0026gt; fd2b:656a:6fdb:a3a8::5: ICMP6, echo request, seq 1, length 64 16:52:24.635535 IP6 fd14:9aa4:e604:ec36::1 \u0026gt; fd2b:656a:6fdb:a3a8::5: ICMP6, echo request, seq 1, length 64 16:52:24.636044 IP6 fd2b:656a:6fdb:a3a8::5 \u0026gt; fd14:9aa4:e604:ec36::1: ICMP6, echo reply, seq 1, length 64 16:52:24.636270 IP 10.0.1.1 \u0026gt; 10.0.1.5: IP6 fd2b:656a:6fdb:a3a8::5 \u0026gt; fd14:9aa4:e604:ec36::1: ICMP6, echo reply, seq 1, length 64 Ping test Raspberry Pi 2 # root@lenovo:~# ping -n -c 1 10.0.3.5 PING 10.0.3.5 (10.0.3.5) 56(84) bytes of data. 64 bytes from 10.0.3.5: icmp_seq=1 ttl=63 time=0.938 ms --- 10.0.3.5 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.938/0.938/0.938/0.000 ms root@lenovo:~# root@debian:~# ping -n -c 1 10.0.2.5 PING 10.0.2.5 (10.0.2.5) 56(84) bytes of data. 64 bytes from 10.0.2.5: icmp_seq=1 ttl=63 time=0.948 ms --- 10.0.2.5 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.948/0.948/0.948/0.000 ms root@debian:~# on jessie-rpi:\n04:41:49.288131 IP 10.0.2.5 \u0026gt; 10.0.3.5: ICMP echo request, id 6432, seq 1, length 64 04:41:49.288194 IP 10.0.2.5 \u0026gt; 10.0.3.5: ICMP echo request, id 6432, seq 1, length 64 04:41:49.288634 IP 10.0.3.5 \u0026gt; 10.0.2.5: ICMP echo reply, id 6432, seq 1, length 64 04:41:49.288664 IP 10.0.3.5 \u0026gt; 10.0.2.5: ICMP echo reply, id 6432, seq 1, length 64 04:42:29.480065 IP 10.0.3.5 \u0026gt; 10.0.2.5: ICMP echo request, id 619, seq 1, length 64 04:42:29.480147 IP 10.0.3.5 \u0026gt; 10.0.2.5: ICMP echo request, id 619, seq 1, length 64 04:42:29.480540 IP 10.0.2.5 \u0026gt; 10.0.3.5: ICMP echo reply, id 619, seq 1, length 64 04:42:29.480577 IP 10.0.2.5 \u0026gt; 10.0.3.5: ICMP echo reply, id 619, seq 1, length 64 root@lenovo:~# ping6 -n -c 1 fd45:64bf:295c:5631::1 PING fd45:64bf:295c:5631::1(fd45:64bf:295c:5631::1) 56 data bytes 64 bytes from fd45:64bf:295c:5631::1: icmp_seq=1 ttl=63 time=1.30 ms --- fd45:64bf:295c:5631::1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1.301/1.301/1.301/0.000 ms root@lenovo:~# 05:55:27.640219 IP6 fd57:d1b1:9c79:40af::5 \u0026gt; fd45:64bf:295c:5631::1: ICMP6, echo request, seq 1, length 64 05:55:27.640458 IP 10.0.3.1 \u0026gt; 10.0.3.5: IP6 fd57:d1b1:9c79:40af::5 \u0026gt; fd45:64bf:295c:5631::1: ICMP6, echo request, seq 1, length 64 05:55:27.641028 IP 10.0.3.5 \u0026gt; 10.0.3.1: IP6 fd45:64bf:295c:5631::1 \u0026gt; fd57:d1b1:9c79:40af::5: ICMP6, echo reply, seq 1, length 64 05:55:27.641146 IP6 fd45:64bf:295c:5631::1 \u0026gt; fd57:d1b1:9c79:40af::5: ICMP6, echo reply, seq 1, length 64 root@debian:~# ping6 -n -c 1 fd57:d1b1:9c79:40af::5 PING fd57:d1b1:9c79:40af::5(fd57:d1b1:9c79:40af::5) 56 data bytes 64 bytes from fd57:d1b1:9c79:40af::5: icmp_seq=1 ttl=63 time=1.41 ms --- fd57:d1b1:9c79:40af::5 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1.411/1.411/1.411/0.000 ms root@debian:~# 05:56:18.711525 IP 10.0.3.5 \u0026gt; 10.0.3.1: IP6 fd45:64bf:295c:5631::1 \u0026gt; fd57:d1b1:9c79:40af::5: ICMP6, echo request, seq 1, length 64 05:56:18.711745 IP6 fd45:64bf:295c:5631::1 \u0026gt; fd57:d1b1:9c79:40af::5: ICMP6, echo request, seq 1, length 64 05:56:18.712165 IP6 fd57:d1b1:9c79:40af::5 \u0026gt; fd45:64bf:295c:5631::1: ICMP6, echo reply, seq 1, length 64 05:56:18.712290 IP 10.0.3.1 \u0026gt; 10.0.3.5: IP6 fd57:d1b1:9c79:40af::5 \u0026gt; fd45:64bf:295c:5631::1: ICMP6, echo reply, seq 1, length 64 iperf to test 1G links on Laptop and Virtual machine # These iperf tests were run from another machine on my network and show that both the laptop and the virtual machine are capable of handling the traffic.\nhomas@diamond:~$ iperf3 -c 192.168.1.64 -i 1 -t 10 Connecting to host 192.168.1.64, port 5201 [ 4] local 192.168.1.149 port 53778 connected to 192.168.1.64 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 112 MBytes 943 Mbits/sec 0 147 KBytes [ 4] 1.00-2.00 sec 112 MBytes 941 Mbits/sec 0 160 KBytes [ 4] 2.00-3.00 sec 112 MBytes 942 Mbits/sec 0 160 KBytes [ 4] 3.00-4.00 sec 112 MBytes 941 Mbits/sec 0 165 KBytes [ 4] 4.00-5.00 sec 112 MBytes 941 Mbits/sec 0 168 KBytes [ 4] 5.00-6.00 sec 112 MBytes 941 Mbits/sec 0 168 KBytes [ 4] 6.00-7.00 sec 112 MBytes 941 Mbits/sec 0 168 KBytes [ 4] 7.00-8.00 sec 112 MBytes 941 Mbits/sec 0 174 KBytes [ 4] 8.00-9.00 sec 101 MBytes 848 Mbits/sec 0 178 KBytes [ 4] 9.00-10.00 sec 101 MBytes 849 Mbits/sec 0 182 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 1.07 GBytes 923 Mbits/sec 0 sender [ 4] 0.00-10.00 sec 1.07 GBytes 923 Mbits/sec receiver iperf Done. thomas@diamond:~$ iperf3 -c 192.168.1.65 -i 1 -t 10 Connecting to host 192.168.1.65, port 5201 [ 4] local 192.168.1.149 port 44367 connected to 192.168.1.65 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 112 MBytes 940 Mbits/sec 0 194 KBytes [ 4] 1.00-2.00 sec 112 MBytes 942 Mbits/sec 0 238 KBytes [ 4] 2.00-3.00 sec 112 MBytes 941 Mbits/sec 0 260 KBytes [ 4] 3.00-4.00 sec 112 MBytes 939 Mbits/sec 0 301 KBytes [ 4] 4.00-5.00 sec 112 MBytes 941 Mbits/sec 0 321 KBytes [ 4] 5.00-6.00 sec 112 MBytes 942 Mbits/sec 0 338 KBytes [ 4] 6.00-7.00 sec 112 MBytes 940 Mbits/sec 0 366 KBytes [ 4] 7.00-8.00 sec 112 MBytes 942 Mbits/sec 0 382 KBytes [ 4] 8.00-9.00 sec 112 MBytes 941 Mbits/sec 0 390 KBytes [ 4] 9.00-10.00 sec 112 MBytes 941 Mbits/sec 0 397 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 1.10 GBytes 941 Mbits/sec 0 sender [ 4] 0.00-10.00 sec 1.09 GBytes 941 Mbits/sec receiver iperf Done. thomas@diamond:~$ iperf to test internal laptop bridge # root@lenovo:~# iperf3 -c 192.168.1.65 -i 1 -t 10 Connecting to host 192.168.1.65, port 5201 [ 4] local 192.168.1.64 port 45713 connected to 192.168.1.65 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 1.82 GBytes 15.6 Gbits/sec 0 2.27 MBytes [ 4] 1.00-2.00 sec 1.84 GBytes 15.8 Gbits/sec 0 3.00 MBytes [ 4] 2.00-3.00 sec 1.80 GBytes 15.5 Gbits/sec 0 3.01 MBytes [ 4] 3.00-4.00 sec 1.75 GBytes 15.0 Gbits/sec 0 3.01 MBytes [ 4] 4.00-5.00 sec 1.83 GBytes 15.7 Gbits/sec 0 3.01 MBytes [ 4] 5.00-6.00 sec 1.79 GBytes 15.4 Gbits/sec 0 3.01 MBytes [ 4] 6.00-7.00 sec 1.78 GBytes 15.3 Gbits/sec 0 3.01 MBytes [ 4] 7.00-8.00 sec 1.83 GBytes 15.7 Gbits/sec 0 3.01 MBytes [ 4] 8.00-9.00 sec 1.83 GBytes 15.7 Gbits/sec 0 3.01 MBytes [ 4] 9.00-10.00 sec 1.82 GBytes 15.6 Gbits/sec 0 3.01 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 18.1 GBytes 15.5 Gbits/sec 0 sender [ 4] 0.00-10.00 sec 18.1 GBytes 15.5 Gbits/sec receiver iperf Done. root@lenovo:~# Tests # IPv4 # No Monitoring # Raspberry Pi # root@lenovo:~# iperf3 -c 10.0.1.5 -i 30 -t 900 Connecting to host 10.0.1.5, port 5201 [ 4] local 10.0.0.5 port 43257 connected to 10.0.1.5 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-30.00 sec 236 MBytes 66.1 Mbits/sec 254 1.19 MBytes [ 4] 30.00-60.00 sec 233 MBytes 65.0 Mbits/sec 128 1.58 MBytes [ 4] 60.00-90.00 sec 234 MBytes 65.4 Mbits/sec 210 1.19 MBytes [ 4] 90.00-120.00 sec 231 MBytes 64.7 Mbits/sec 130 1.87 MBytes [ 4] 120.00-150.00 sec 235 MBytes 65.7 Mbits/sec 273 1.23 MBytes [ 4] 150.00-180.00 sec 235 MBytes 65.7 Mbits/sec 334 1.08 MBytes [ 4] 180.00-210.00 sec 234 MBytes 65.3 Mbits/sec 116 1.25 MBytes [ 4] 210.00-240.00 sec 235 MBytes 65.6 Mbits/sec 317 1.18 MBytes [ 4] 240.00-270.00 sec 235 MBytes 65.7 Mbits/sec 110 1.36 MBytes [ 4] 270.00-300.00 sec 230 MBytes 64.4 Mbits/sec 248 1.16 MBytes [ 4] 300.00-330.00 sec 235 MBytes 65.7 Mbits/sec 86 1.68 MBytes [ 4] 330.00-360.00 sec 236 MBytes 66.1 Mbits/sec 358 1.21 MBytes [ 4] 360.00-390.00 sec 236 MBytes 66.1 Mbits/sec 171 1.95 MBytes [ 4] 390.00-420.00 sec 234 MBytes 65.4 Mbits/sec 272 1.21 MBytes [ 4] 420.00-450.00 sec 236 MBytes 66.0 Mbits/sec 291 1.11 MBytes [ 4] 450.00-480.00 sec 236 MBytes 66.1 Mbits/sec 186 1.28 MBytes [ 4] 480.00-510.00 sec 236 MBytes 66.1 Mbits/sec 302 1.17 MBytes [ 4] 510.00-540.00 sec 234 MBytes 65.3 Mbits/sec 137 1.36 MBytes [ 4] 540.00-570.00 sec 233 MBytes 65.2 Mbits/sec 184 1.16 MBytes [ 4] 570.00-600.00 sec 235 MBytes 65.7 Mbits/sec 119 1.56 MBytes [ 4] 600.00-630.00 sec 236 MBytes 66.1 Mbits/sec 480 1.05 MBytes [ 4] 630.00-660.00 sec 235 MBytes 65.7 Mbits/sec 52 1.21 MBytes [ 4] 660.00-690.00 sec 236 MBytes 66.0 Mbits/sec 336 1.18 MBytes [ 4] 690.00-720.00 sec 236 MBytes 66.0 Mbits/sec 184 1.43 MBytes [ 4] 720.00-750.02 sec 235 MBytes 65.8 Mbits/sec 293 1.19 MBytes [ 4] 750.02-780.00 sec 235 MBytes 65.8 Mbits/sec 167 1.62 MBytes [ 4] 780.00-810.00 sec 234 MBytes 65.4 Mbits/sec 202 1.21 MBytes [ 4] 810.00-840.00 sec 236 MBytes 66.0 Mbits/sec 339 1.25 MBytes [ 4] 840.00-870.00 sec 235 MBytes 65.8 Mbits/sec 334 1.18 MBytes [ 4] 870.00-900.00 sec 233 MBytes 65.1 Mbits/sec 114 1.36 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 6.88 GBytes 65.6 Mbits/sec 6727 sender [ 4] 0.00-900.00 sec 6.88 GBytes 65.6 Mbits/sec receiver iperf Done. root@lenovo:~# root@lenovo:~# iperf3 -c 10.0.1.5 -i 30 -t 900 -R Connecting to host 10.0.1.5, port 5201 Reverse mode, remote host 10.0.1.5 is sending [ 4] local 10.0.0.5 port 43738 connected to 10.0.1.5 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-30.00 sec 222 MBytes 62.2 Mbits/sec [ 4] 30.00-60.00 sec 225 MBytes 62.9 Mbits/sec [ 4] 60.00-90.00 sec 222 MBytes 62.2 Mbits/sec [ 4] 90.00-120.00 sec 223 MBytes 62.4 Mbits/sec [ 4] 120.00-150.00 sec 223 MBytes 62.3 Mbits/sec [ 4] 150.00-180.00 sec 223 MBytes 62.4 Mbits/sec [ 4] 180.00-210.00 sec 222 MBytes 62.2 Mbits/sec [ 4] 210.00-240.00 sec 225 MBytes 62.9 Mbits/sec [ 4] 240.00-270.00 sec 225 MBytes 62.8 Mbits/sec [ 4] 270.00-300.00 sec 225 MBytes 62.8 Mbits/sec [ 4] 300.00-330.00 sec 223 MBytes 62.3 Mbits/sec [ 4] 330.00-360.00 sec 226 MBytes 63.3 Mbits/sec [ 4] 360.00-390.00 sec 224 MBytes 62.5 Mbits/sec [ 4] 390.00-420.00 sec 222 MBytes 62.2 Mbits/sec [ 4] 420.00-450.00 sec 227 MBytes 63.5 Mbits/sec [ 4] 450.00-480.00 sec 227 MBytes 63.4 Mbits/sec [ 4] 480.00-510.00 sec 223 MBytes 62.3 Mbits/sec [ 4] 510.00-540.00 sec 224 MBytes 62.8 Mbits/sec [ 4] 540.00-570.00 sec 225 MBytes 62.9 Mbits/sec [ 4] 570.00-600.00 sec 227 MBytes 63.6 Mbits/sec [ 4] 600.00-630.00 sec 226 MBytes 63.3 Mbits/sec [ 4] 630.00-660.00 sec 227 MBytes 63.5 Mbits/sec [ 4] 660.00-690.00 sec 226 MBytes 63.2 Mbits/sec [ 4] 690.00-720.00 sec 227 MBytes 63.4 Mbits/sec [ 4] 720.00-750.00 sec 226 MBytes 63.2 Mbits/sec [ 4] 750.00-780.00 sec 227 MBytes 63.4 Mbits/sec [ 4] 780.00-810.00 sec 227 MBytes 63.4 Mbits/sec [ 4] 810.00-840.00 sec 226 MBytes 63.2 Mbits/sec [ 4] 840.00-870.00 sec 227 MBytes 63.3 Mbits/sec [ 4] 870.00-900.00 sec 226 MBytes 63.2 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 6.59 GBytes 62.9 Mbits/sec 817 sender [ 4] 0.00-900.00 sec 6.59 GBytes 62.9 Mbits/sec receiver iperf Done. root@lenovo:~# Raspberry Pi 2 # root@lenovo:~# iperf3 -c 10.0.3.5 -i 30 -t 900 Connecting to host 10.0.3.5, port 5201 [ 4] local 10.0.2.5 port 33128 connected to 10.0.3.5 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-30.00 sec 322 MBytes 90.1 Mbits/sec 175 1.89 MBytes [ 4] 30.00-60.00 sec 321 MBytes 89.8 Mbits/sec 165 1.26 MBytes [ 4] 60.00-90.00 sec 320 MBytes 89.4 Mbits/sec 68 1.51 MBytes [ 4] 90.00-120.00 sec 320 MBytes 89.4 Mbits/sec 192 1.25 MBytes [ 4] 120.00-150.00 sec 320 MBytes 89.4 Mbits/sec 56 1.39 MBytes [ 4] 150.00-180.00 sec 320 MBytes 89.4 Mbits/sec 194 1.17 MBytes [ 4] 180.00-210.00 sec 321 MBytes 89.8 Mbits/sec 55 1.35 MBytes [ 4] 210.00-240.00 sec 320 MBytes 89.4 Mbits/sec 104 1.15 MBytes [ 4] 240.00-270.00 sec 320 MBytes 89.4 Mbits/sec 64 1.32 MBytes [ 4] 270.00-300.00 sec 320 MBytes 89.5 Mbits/sec 176 1.07 MBytes [ 4] 300.00-330.00 sec 320 MBytes 89.4 Mbits/sec 88 1.26 MBytes [ 4] 330.00-360.00 sec 319 MBytes 89.1 Mbits/sec 209 1.50 MBytes [ 4] 360.00-390.00 sec 320 MBytes 89.5 Mbits/sec 134 1.18 MBytes [ 4] 390.00-420.00 sec 320 MBytes 89.5 Mbits/sec 104 1.32 MBytes [ 4] 420.00-450.00 sec 319 MBytes 89.1 Mbits/sec 149 1.16 MBytes [ 4] 450.00-480.00 sec 320 MBytes 89.5 Mbits/sec 73 1.32 MBytes [ 4] 480.00-510.00 sec 316 MBytes 88.4 Mbits/sec 114 2.53 MBytes [ 4] 510.00-540.00 sec 316 MBytes 88.4 Mbits/sec 226 1.14 MBytes [ 4] 540.00-570.00 sec 318 MBytes 89.0 Mbits/sec 107 1.32 MBytes [ 4] 570.00-600.00 sec 320 MBytes 89.4 Mbits/sec 178 1.19 MBytes [ 4] 600.00-630.00 sec 321 MBytes 89.8 Mbits/sec 78 1.31 MBytes [ 4] 630.00-660.00 sec 319 MBytes 89.1 Mbits/sec 160 1.10 MBytes [ 4] 660.00-690.00 sec 321 MBytes 89.8 Mbits/sec 120 1.26 MBytes [ 4] 690.00-720.00 sec 317 MBytes 88.7 Mbits/sec 145 1.08 MBytes [ 4] 720.00-750.00 sec 320 MBytes 89.5 Mbits/sec 98 1.27 MBytes [ 4] 750.00-780.00 sec 320 MBytes 89.4 Mbits/sec 45 2.07 MBytes [ 4] 780.00-810.00 sec 318 MBytes 88.8 Mbits/sec 178 1.31 MBytes [ 4] 810.00-840.00 sec 320 MBytes 89.5 Mbits/sec 88 2.12 MBytes [ 4] 840.00-870.00 sec 320 MBytes 89.5 Mbits/sec 150 1.27 MBytes [ 4] 870.00-900.00 sec 319 MBytes 89.1 Mbits/sec 49 1.79 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 9.36 GBytes 89.3 Mbits/sec 3742 sender [ 4] 0.00-900.00 sec 9.36 GBytes 89.3 Mbits/sec receiver iperf Done. root@lenovo:~# root@lenovo:~# iperf3 -c 10.0.3.5 -i 30 -t 900 -R Connecting to host 10.0.3.5, port 5201 Reverse mode, remote host 10.0.3.5 is sending [ 4] local 10.0.2.5 port 33581 connected to 10.0.3.5 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-30.00 sec 280 MBytes 78.2 Mbits/sec [ 4] 30.00-60.00 sec 279 MBytes 77.9 Mbits/sec [ 4] 60.00-90.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 90.00-120.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 120.00-150.00 sec 279 MBytes 77.9 Mbits/sec [ 4] 150.00-180.00 sec 279 MBytes 77.9 Mbits/sec [ 4] 180.00-210.00 sec 278 MBytes 77.9 Mbits/sec [ 4] 210.00-240.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 240.00-270.00 sec 278 MBytes 77.9 Mbits/sec [ 4] 270.00-300.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 300.00-330.00 sec 278 MBytes 77.6 Mbits/sec [ 4] 330.00-360.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 360.00-390.00 sec 279 MBytes 77.9 Mbits/sec [ 4] 390.00-420.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 420.00-450.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 450.00-480.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 480.00-510.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 510.00-540.00 sec 279 MBytes 77.9 Mbits/sec [ 4] 540.00-570.00 sec 279 MBytes 77.9 Mbits/sec [ 4] 570.00-600.00 sec 279 MBytes 77.9 Mbits/sec [ 4] 600.00-630.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 630.00-660.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 660.00-690.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 690.00-720.00 sec 279 MBytes 77.9 Mbits/sec [ 4] 720.00-750.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 750.00-780.00 sec 278 MBytes 77.8 Mbits/sec [ 4] 780.00-810.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 810.00-840.00 sec 279 MBytes 77.9 Mbits/sec [ 4] 840.00-870.00 sec 278 MBytes 77.8 Mbits/sec [ 4] 870.00-900.00 sec 279 MBytes 78.0 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 8.17 GBytes 78.0 Mbits/sec 40 sender [ 4] 0.00-900.00 sec 8.17 GBytes 78.0 Mbits/sec receiver iperf Done. root@lenovo:~# With dstat Monitoring # Raspberry Pi # root@lenovo:~# iperf3 -c 10.0.1.5 -i 30 -t 900 Connecting to host 10.0.1.5, port 5201 [ 4] local 10.0.0.5 port 43319 connected to 10.0.1.5 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-30.00 sec 235 MBytes 65.7 Mbits/sec 390 1.19 MBytes [ 4] 30.00-60.00 sec 234 MBytes 65.4 Mbits/sec 253 1.18 MBytes [ 4] 60.00-90.00 sec 233 MBytes 65.3 Mbits/sec 298 1.05 MBytes [ 4] 90.00-120.00 sec 232 MBytes 65.0 Mbits/sec 71 1.22 MBytes [ 4] 120.00-150.00 sec 234 MBytes 65.3 Mbits/sec 319 1.16 MBytes [ 4] 150.00-180.00 sec 235 MBytes 65.6 Mbits/sec 299 1.17 MBytes [ 4] 180.00-210.00 sec 235 MBytes 65.6 Mbits/sec 170 1.94 MBytes [ 4] 210.00-240.00 sec 235 MBytes 65.7 Mbits/sec 323 1.22 MBytes [ 4] 240.00-270.00 sec 235 MBytes 65.7 Mbits/sec 318 1.05 MBytes [ 4] 270.00-300.00 sec 231 MBytes 64.7 Mbits/sec 112 1.22 MBytes [ 4] 300.00-330.00 sec 231 MBytes 64.7 Mbits/sec 314 1.65 MBytes [ 4] 330.00-360.00 sec 234 MBytes 65.4 Mbits/sec 262 1.23 MBytes [ 4] 360.00-390.00 sec 231 MBytes 64.6 Mbits/sec 214 1.14 MBytes [ 4] 390.00-420.00 sec 232 MBytes 64.9 Mbits/sec 107 1.31 MBytes [ 4] 420.00-450.00 sec 234 MBytes 65.4 Mbits/sec 296 1.88 MBytes [ 4] 450.00-480.00 sec 234 MBytes 65.3 Mbits/sec 232 1.24 MBytes [ 4] 480.00-510.00 sec 235 MBytes 65.7 Mbits/sec 332 1.60 MBytes [ 4] 510.00-540.00 sec 235 MBytes 65.7 Mbits/sec 288 1.19 MBytes [ 4] 540.00-570.00 sec 233 MBytes 65.1 Mbits/sec 134 1.68 MBytes [ 4] 570.00-600.00 sec 231 MBytes 64.7 Mbits/sec 226 1.21 MBytes [ 4] 600.00-630.00 sec 235 MBytes 65.7 Mbits/sec 167 2.01 MBytes [ 4] 630.00-660.00 sec 231 MBytes 64.7 Mbits/sec 412 1.81 MBytes [ 4] 660.00-690.00 sec 235 MBytes 65.7 Mbits/sec 256 1.21 MBytes [ 4] 690.00-720.00 sec 233 MBytes 65.0 Mbits/sec 142 1.98 MBytes [ 4] 720.00-750.00 sec 234 MBytes 65.4 Mbits/sec 459 1.15 MBytes [ 4] 750.00-780.00 sec 232 MBytes 65.0 Mbits/sec 162 1.35 MBytes [ 4] 780.00-810.00 sec 231 MBytes 64.7 Mbits/sec 269 1.11 MBytes [ 4] 810.00-840.00 sec 234 MBytes 65.4 Mbits/sec 324 1.70 MBytes [ 4] 840.00-870.00 sec 231 MBytes 64.7 Mbits/sec 297 1.60 MBytes [ 4] 870.00-900.00 sec 231 MBytes 64.6 Mbits/sec 231 1.10 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 6.83 GBytes 65.2 Mbits/sec 7677 sender [ 4] 0.00-900.00 sec 6.83 GBytes 65.2 Mbits/sec receiver iperf Done. root@lenovo:~# root@lace:~# dstat --nocolor -l -c --top-cpu -n 30 \u0026gt; res ^Croot@lace:~# cat res ---load-avg--- ----total-cpu-usage---- -most-expensive- -net/total- 1m 5m 15m |usr sys idl wai hiq siq| cpu process | recv send 0 0.01 0.05| 0 0 90 0 0 10|ksoftirqd/0 9.7| 0 0 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 19B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.1| 22B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 19B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 20B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 22B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.1| 19B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 22B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 26B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 19B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.1| 19B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 54B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 24B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.1| 29B 12B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 22B 11B 0.16 0.05 0.06| 0 0 54 0 0 45|ksoftirqd/0 42|3951k 3999k 0.49 0.14 0.08| 0 0 0 0 0 100|ksoftirqd/0 93|8450k 8612k 0.80 0.25 0.12| 0 0 0 0 0 99|ksoftirqd/0 92|8315k 8486k 1.14 0.39 0.17| 0 0 0 0 0 100|ksoftirqd/0 93|8485k 8663k 1.20 0.48 0.21| 0 0 0 0 0 99|ksoftirqd/0 92|8324k 8487k 1.32 0.57 0.25| 0 0 1 0 0 99|ksoftirqd/0 92|8408k 3968M 1.25 0.63 0.28| 0 0 0 0 0 100|ksoftirqd/0 94|3968M 8589k 1.15 0.67 0.30| 0 0 0 0 0 100|ksoftirqd/0 94|8573k 8748k 1.23 0.73 0.34| 0 0 0 0 0 100|ksoftirqd/0 92|8351k 8511k 1.07 0.74 0.35| 0 0 0 0 0 100|ksoftirqd/0 91|8396k 8561k 1.04 0.76 0.37| 0 0 0 0 0 100|ksoftirqd/0 93|8501k 8670k 1.27 0.85 0.41| 0 0 0 0 0 100|ksoftirqd/0 92|8280k 8451k 1.16 0.86 0.43| 0 0 0 0 0 100|ksoftirqd/0 92|8343k 8499k 1.10 0.88 0.45| 0 0 0 0 0 100|ksoftirqd/0 92|8382k 8561k 1.08 0.89 0.47| 0 0 0 0 0 100|ksoftirqd/0 93|8316k 8485k 1.05 0.90 0.48| 0 0 0 0 0 100|ksoftirqd/0 93|8465k 8631k 1.03 0.91 0.50| 0 0 0 0 0 100|ksoftirqd/0 94|8397k 8560k 1.08 0.93 0.52| 0 0 0 0 0 100|ksoftirqd/0 94|8478k 8644k 1.12 0.96 0.54| 0 0 0 0 0 100|ksoftirqd/0 93|8507k 8674k 1.07 0.96 0.56| 0 0 0 0 0 100|ksoftirqd/0 91|8241k 8406k 1.05 0.96 0.57| 0 0 0 0 0 100|ksoftirqd/0 92|8369k 8543k 1.03 0.96 0.59| 0 0 0 0 0 100|ksoftirqd/0 94|8534k 3968M 1.07 0.98 0.60| 0 0 0 0 0 100|ksoftirqd/0 91|8306k 8475k 1.04 0.99 0.62| 0 0 0 0 0 100|ksoftirqd/0 93|3968M 8649k 1.03 0.99 0.63| 0 0 0 0 0 100|ksoftirqd/0 93|8409k 8573k 1.02 0.99 0.64| 0 0 0 0 0 100|ksoftirqd/0 93|8406k 8563k 1.01 0.99 0.65| 0 0 0 0 0 100|ksoftirqd/0 92|8358k 8526k 1.13 1.02 0.67| 0 0 1 0 0 99|ksoftirqd/0 91|8288k 8453k 1.13 1.03 0.69| 0 0 0 0 0 100|ksoftirqd/0 93|8447k 8621k 1.08 1.03 0.70| 0 0 0 0 0 99|ksoftirqd/0 92|8262k 8419k 0.83 0.98 0.69| 0 0 44 0 0 56|ksoftirqd/0 51|4485k 4597k 0.50 0.88 0.67| 0 0 100 0 0 0|kworker/0:1 0.1| 19B 11B 0.30 0.80 0.65| 0 0 100 0 0 0|kworker/0:1 0.0| 22B 11B 0.18 0.72 0.63| 0 0 100 0 0 0|kworker/0:1 0.0| 22B 11B 0.11 0.65 0.61| 0 0 100 0 0 0|kworker/0:1 0.1| 26B 11B root@lace:~# Raspberry Pi 2 # root@lenovo:~# iperf3 -c 10.0.3.5 -i 30 -t 900 Connecting to host 10.0.3.5, port 5201 [ 4] local 10.0.2.5 port 33166 connected to 10.0.3.5 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-30.00 sec 321 MBytes 89.9 Mbits/sec 234 1.28 MBytes [ 4] 30.00-60.00 sec 321 MBytes 89.8 Mbits/sec 88 1.52 MBytes [ 4] 60.00-90.00 sec 320 MBytes 89.5 Mbits/sec 151 1.24 MBytes [ 4] 90.00-120.00 sec 321 MBytes 89.7 Mbits/sec 63 1.59 MBytes [ 4] 120.00-150.00 sec 320 MBytes 89.5 Mbits/sec 166 1.25 MBytes [ 4] 150.00-180.00 sec 320 MBytes 89.5 Mbits/sec 83 1.44 MBytes [ 4] 180.00-210.00 sec 320 MBytes 89.4 Mbits/sec 151 1.75 MBytes [ 4] 210.00-240.00 sec 320 MBytes 89.4 Mbits/sec 207 1.29 MBytes [ 4] 240.00-270.00 sec 319 MBytes 89.1 Mbits/sec 51 1.80 MBytes [ 4] 270.00-300.00 sec 320 MBytes 89.4 Mbits/sec 262 1.05 MBytes [ 4] 300.00-330.00 sec 320 MBytes 89.5 Mbits/sec 69 1.30 MBytes [ 4] 330.00-360.00 sec 319 MBytes 89.1 Mbits/sec 129 1.12 MBytes [ 4] 360.00-390.00 sec 320 MBytes 89.5 Mbits/sec 69 1.31 MBytes [ 4] 390.00-420.00 sec 319 MBytes 89.1 Mbits/sec 128 1.10 MBytes [ 4] 420.00-450.00 sec 320 MBytes 89.4 Mbits/sec 69 1.30 MBytes [ 4] 450.00-480.00 sec 319 MBytes 89.1 Mbits/sec 146 1.06 MBytes [ 4] 480.00-510.00 sec 321 MBytes 89.8 Mbits/sec 72 1.28 MBytes [ 4] 510.00-540.00 sec 319 MBytes 89.1 Mbits/sec 143 1.09 MBytes [ 4] 540.00-570.00 sec 320 MBytes 89.5 Mbits/sec 117 1.27 MBytes [ 4] 570.00-600.00 sec 319 MBytes 89.1 Mbits/sec 47 1.95 MBytes [ 4] 600.00-630.00 sec 320 MBytes 89.4 Mbits/sec 235 1.41 MBytes [ 4] 630.00-660.00 sec 320 MBytes 89.5 Mbits/sec 117 1.75 MBytes [ 4] 660.00-690.00 sec 320 MBytes 89.4 Mbits/sec 166 1.26 MBytes [ 4] 690.00-720.00 sec 319 MBytes 89.1 Mbits/sec 72 1.66 MBytes [ 4] 720.00-750.00 sec 317 MBytes 88.8 Mbits/sec 166 1.30 MBytes [ 4] 750.00-780.00 sec 320 MBytes 89.5 Mbits/sec 101 1.59 MBytes [ 4] 780.00-810.00 sec 320 MBytes 89.5 Mbits/sec 161 1.26 MBytes [ 4] 810.00-840.00 sec 320 MBytes 89.5 Mbits/sec 84 1.39 MBytes [ 4] 840.00-870.00 sec 317 MBytes 88.7 Mbits/sec 167 1.31 MBytes [ 4] 870.00-900.00 sec 317 MBytes 88.6 Mbits/sec 81 1.49 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 9.36 GBytes 89.3 Mbits/sec 3795 sender [ 4] 0.00-900.00 sec 9.36 GBytes 89.3 Mbits/sec receiver iperf Done. root@lenovo:~# root@jessie-rpi:~# dstat --nocolor -l -c --top-cpu -n 30 \u0026gt; res ^Croot@jessie-rpi:~# cat res ---load-avg--- ----total-cpu-usage---- -most-expensive- -net/total- 1m 5m 15m |usr sys idl wai hiq siq| cpu process | recv send 0 0.01 0.05| 0 0 99 0 0 1|ksoftirqd/0 0.8| 0 0 0 0.01 0.05| 0 0 100 0 0 0|sshd: root@pt0.0| 22B 11B 0 0.01 0.05| 0 0 100 0 0 0|irqbalance 0.0| 19B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/u8:2 0.0| 22B 11B 0 0.01 0.05| 0 0 100 0 0 0|irqbalance 0.0| 22B 11B 0 0.01 0.05| 0 0 100 0 0 0|irqbalance 0.0| 25B 11B 0 0.01 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.3| 11M 11M 0 0.01 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.4|3971M 11M 0.07 0.03 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.5| 11M 11M 0.04 0.03 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.4| 11M 12M 0.09 0.04 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.3| 11M 11M 0.06 0.04 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.3| 11M 11M 0.09 0.05 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.5| 11M 11M 0.19 0.08 0.06| 0 0 97 0 0 3|ksoftirqd/0 2.5| 11M 11M 0.12 0.07 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.6| 11M 11M 0.07 0.06 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.4| 11M 11M 0.04 0.06 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.4| 11M 3971M 0.03 0.05 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.6| 11M 11M 0.10 0.06 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.4| 11M 11M 0.13 0.07 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.6|3971M 11M 0.14 0.08 0.06| 0 0 97 0 0 3|ksoftirqd/0 2.5| 11M 11M 0.09 0.07 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.4| 11M 11M 0.05 0.07 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.4| 11M 11M 0.03 0.06 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.5| 11M 11M 0.15 0.09 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.5| 11M 11M 0.09 0.08 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.5| 11M 11M 0.05 0.07 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.4| 11M 11M 0.11 0.08 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.4| 11M 11M 0.07 0.07 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.4| 11M 3971M 0.04 0.07 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.5| 11M 11M 0.11 0.08 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.7| 11M 11M 0.06 0.07 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.3|3971M 11M 0.04 0.06 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.3| 11M 11M 0.02 0.06 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.4| 11M 11M 0.01 0.05 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.6| 11M 11M 0.07 0.06 0.05| 0 0 97 0 0 3|ksoftirqd/0 2.6| 11M 11M 0.04 0.06 0.05| 0 0 100 0 0 0|ksoftirqd/0 0.1| 281k 308k 0.03 0.05 0.05| 0 0 100 0 0 0|irqbalance 0.0| 24B 11B 0.02 0.05 0.05| 0 0 100 0 0 0|kworker/u8:2 0.0| 22B 11B 0.01 0.04 0.05| 0 0 100 0 0 0|irqbalance 0.0| 21B 11B 0.01 0.04 0.05| 0 0 100 0 0 0|irqbalance 0.0| 22B 11B 0 0.04 0.05| 0 0 100 0 0 0|irqbalance 0.0| 20B 11B root@jessie-rpi:~# With dstat Monitoring (reverse) # Raspberry Pi # root@lenovo:~# iperf3 -c 10.0.1.5 -i 30 -t 900 -R Connecting to host 10.0.1.5, port 5201 Reverse mode, remote host 10.0.1.5 is sending [ 4] local 10.0.0.5 port 43353 connected to 10.0.1.5 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-30.00 sec 225 MBytes 63.0 Mbits/sec [ 4] 30.00-60.00 sec 222 MBytes 62.2 Mbits/sec [ 4] 60.00-90.00 sec 227 MBytes 63.4 Mbits/sec [ 4] 90.00-120.00 sec 226 MBytes 63.3 Mbits/sec [ 4] 120.00-150.00 sec 226 MBytes 63.2 Mbits/sec [ 4] 150.00-180.00 sec 226 MBytes 63.2 Mbits/sec [ 4] 180.00-210.00 sec 226 MBytes 63.3 Mbits/sec [ 4] 210.00-240.00 sec 226 MBytes 63.2 Mbits/sec [ 4] 240.00-270.00 sec 226 MBytes 63.3 Mbits/sec [ 4] 270.00-300.00 sec 226 MBytes 63.2 Mbits/sec [ 4] 300.00-330.00 sec 226 MBytes 63.3 Mbits/sec [ 4] 330.00-360.00 sec 226 MBytes 63.3 Mbits/sec [ 4] 360.00-390.00 sec 226 MBytes 63.2 Mbits/sec [ 4] 390.00-420.00 sec 226 MBytes 63.1 Mbits/sec [ 4] 420.00-450.00 sec 226 MBytes 63.2 Mbits/sec [ 4] 450.00-480.00 sec 226 MBytes 63.2 Mbits/sec [ 4] 480.00-510.00 sec 226 MBytes 63.2 Mbits/sec [ 4] 510.00-540.00 sec 226 MBytes 63.2 Mbits/sec [ 4] 540.00-570.00 sec 227 MBytes 63.3 Mbits/sec [ 4] 570.00-600.00 sec 226 MBytes 63.3 Mbits/sec [ 4] 600.00-630.00 sec 225 MBytes 63.0 Mbits/sec [ 4] 630.00-660.00 sec 226 MBytes 63.2 Mbits/sec [ 4] 660.00-690.00 sec 226 MBytes 63.2 Mbits/sec [ 4] 690.00-720.00 sec 226 MBytes 63.2 Mbits/sec [ 4] 720.00-750.00 sec 226 MBytes 63.2 Mbits/sec [ 4] 750.00-780.00 sec 226 MBytes 63.1 Mbits/sec [ 4] 780.00-810.00 sec 226 MBytes 63.3 Mbits/sec [ 4] 810.00-840.00 sec 225 MBytes 63.0 Mbits/sec [ 4] 840.00-870.00 sec 226 MBytes 63.3 Mbits/sec [ 4] 870.00-900.00 sec 226 MBytes 63.1 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 6.62 GBytes 63.2 Mbits/sec 47 sender [ 4] 0.00-900.00 sec 6.62 GBytes 63.2 Mbits/sec receiver iperf Done. root@lenovo:~# root@lace:~# dstat --nocolor -l -c --top-cpu -n 30 \u0026gt; res ^Croot@lace:~# cat res ---load-avg--- ----total-cpu-usage---- -most-expensive- -net/total- 1m 5m 15m |usr sys idl wai hiq siq| cpu process | recv send 0 0.01 0.05| 0 0 90 0 0 10|ksoftirqd/0 9.3| 0 0 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:2 0.1| 22B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:2 0.0| 53B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:2 0.0| 19B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 30B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 22B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.1| 20B 11B 0.16 0.05 0.06| 0 0 93 0 0 7|ksoftirqd/0 6.8| 741k 743k 0.60 0.17 0.10| 0 0 0 0 0 100|ksoftirqd/0 92|8164k 8302k 0.76 0.25 0.13| 0 0 0 0 0 100|ksoftirqd/0 93|7936k 8128k 0.92 0.34 0.16| 0 0 0 0 0 100|ksoftirqd/0 92|8219k 8371k 0.95 0.40 0.18| 0 0 0 0 0 99|ksoftirqd/0 92|8067k 8234k 0.97 0.45 0.21| 0 0 0 0 0 100|ksoftirqd/0 93|8157k 8300k 0.98 0.50 0.23| 0 0 0 0 0 100|ksoftirqd/0 93|8189k 8341k 0.99 0.55 0.26| 0 0 0 0 0 100|ksoftirqd/0 93|8091k 8242k 1.11 0.62 0.29| 0 0 0 0 0 100|ksoftirqd/0 93|8203k 3968M 1.12 0.67 0.32| 0 0 0 0 0 100|ksoftirqd/0 92|8064k 8218k 1.19 0.74 0.35| 0 0 0 0 0 100|ksoftirqd/0 92|3967M 8205k 1.17 0.78 0.38| 0 0 0 0 0 100|ksoftirqd/0 94|8185k 8344k 1.15 0.81 0.40| 0 0 0 0 0 100|ksoftirqd/0 93|8126k 8280k 1.25 0.88 0.44| 0 0 0 0 0 100|ksoftirqd/0 93|8161k 8309k 1.27 0.92 0.46| 0 0 0 0 0 100|ksoftirqd/0 92|8180k 8335k 1.33 0.97 0.50| 0 0 0 0 0 100|ksoftirqd/0 93|8132k 8284k 1.25 0.99 0.52| 0 0 0 0 0 100|ksoftirqd/0 92|8072k 8248k 1.33 1.04 0.55| 0 0 0 0 0 100|ksoftirqd/0 93|8101k 8230k 1.42 1.10 0.59| 0 0 0 0 0 100|ksoftirqd/0 93|8100k 8255k 1.38 1.12 0.61| 0 0 0 0 0 100|ksoftirqd/0 93|8149k 8301k 1.23 1.11 0.62| 0 0 0 0 0 100|ksoftirqd/0 93|8173k 8333k 1.19 1.11 0.64| 0 0 0 0 0 99|ksoftirqd/0 92|8197k 8353k 1.31 1.15 0.67| 0 0 0 0 0 100|ksoftirqd/0 92|7992k 8158k 1.30 1.17 0.69| 0 0 0 0 0 100|ksoftirqd/0 93|8098k 8229k 1.67 1.28 0.74| 0 0 0 0 0 100|ksoftirqd/0 93|8251k 8414k 1.46 1.27 0.75| 0 0 0 0 0 100|ksoftirqd/0 92|8010k 3967M 1.28 1.24 0.76| 0 0 0 0 0 100|ksoftirqd/0 93|8119k 8277k 1.23 1.23 0.78| 0 0 0 0 0 100|ksoftirqd/0 93|8161k 8292k 1.22 1.23 0.79| 0 0 0 0 0 99|ksoftirqd/0 92|3967M 8221k 1.13 1.21 0.79| 0 0 0 0 0 100|ksoftirqd/0 94|8120k 8278k 1.08 1.19 0.80| 0 0 6 0 0 94|ksoftirqd/0 87|7492k 7664k 0.65 1.07 0.77| 0 0 100 0 0 0|kworker/0:2 0.1| 26B 15B 0.40 0.97 0.75| 0 0 100 0 0 0|kworker/0:2 0.0| 85B 11B 0.24 0.88 0.72| 0 0 100 0 0 0|kworker/0:2 0.0| 22B 11B 0.15 0.79 0.70| 0 0 100 0 0 0|kworker/0:2 0.1| 22B 11B 0.09 0.72 0.68| 0 0 100 0 0 0|kworker/0:2 0.0| 22B 11B 0.05 0.65 0.66| 0 0 100 0 0 0|kworker/0:2 0.0| 20B 11B 0.03 0.59 0.64| 0 0 100 0 0 0|kworker/0:2 0.1| 20B 11B 0.02 0.53 0.62| 0 0 100 0 0 0|kworker/0:2 0.0| 28B 11B 0.01 0.48 0.60| 0 0 100 0 0 0|kworker/0:2 0.0| 22B 11B 0.01 0.43 0.58| 0 0 100 0 0 0|kworker/0:2 0.1| 19B 11B 0 0.39 0.56| 0 0 100 0 0 0|kworker/0:2 0.0| 26B 11B 0 0.36 0.54| 0 0 100 0 0 0|kworker/0:2 0.0| 19B 11B 0 0.32 0.52| 0 0 100 0 0 0|kworker/0:2 0.1| 51B 11B 0 0.29 0.51| 0 0 100 0 0 0|kworker/0:2 0.0| 24B 12B 0 0.26 0.49| 0 0 100 0 0 0|kworker/0:2 0.0| 29B 11B 0 0.24 0.48| 0 0 100 0 0 0|kworker/0:2 0.0| 19B 11B 0 0.22 0.46| 0 0 100 0 0 0|kworker/0:2 0.1| 19B 11B 0 0.19 0.45| 0 0 100 0 0 0|kworker/0:2 0.0| 19B 11B 0 0.18 0.43| 0 0 100 0 0 0|kworker/0:2 0.0| 24B 11B root@lace:~# Raspberry Pi 2 # root@lenovo:~# iperf3 -c 10.0.3.5 -i 30 -t 900 -R Connecting to host 10.0.3.5, port 5201 Reverse mode, remote host 10.0.3.5 is sending [ 4] local 10.0.2.5 port 33208 connected to 10.0.3.5 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-30.00 sec 281 MBytes 78.6 Mbits/sec [ 4] 30.00-60.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 60.00-90.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 90.00-120.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 120.00-150.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 150.00-180.00 sec 278 MBytes 77.7 Mbits/sec [ 4] 180.00-210.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 210.00-240.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 240.00-270.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 270.00-300.00 sec 281 MBytes 78.5 Mbits/sec [ 4] 300.00-330.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 330.00-360.00 sec 279 MBytes 77.9 Mbits/sec [ 4] 360.00-390.00 sec 278 MBytes 77.9 Mbits/sec [ 4] 390.00-420.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 420.00-450.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 450.00-480.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 480.00-510.00 sec 279 MBytes 77.9 Mbits/sec [ 4] 510.00-540.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 540.00-570.00 sec 278 MBytes 77.9 Mbits/sec [ 4] 570.00-600.00 sec 279 MBytes 77.9 Mbits/sec [ 4] 600.00-630.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 630.00-660.00 sec 279 MBytes 77.9 Mbits/sec [ 4] 660.00-690.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 690.00-720.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 720.00-750.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 750.00-780.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 780.00-810.00 sec 279 MBytes 77.9 Mbits/sec [ 4] 810.00-840.00 sec 279 MBytes 77.9 Mbits/sec [ 4] 840.00-870.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 870.00-900.00 sec 279 MBytes 78.0 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 8.18 GBytes 78.1 Mbits/sec 85 sender [ 4] 0.00-900.00 sec 8.18 GBytes 78.1 Mbits/sec receiver iperf Done. root@lenovo:~# root@jessie-rpi:~# dstat --nocolor -l -c --top-cpu -n 30 \u0026gt; res ^Croot@jessie-rpi:~# cat res ---load-avg--- ----total-cpu-usage---- -most-expensive- -net/total- 1m 5m 15m |usr sys idl wai hiq siq| cpu process | recv send 0.08 0.03 0.05| 0 0 99 0 0 1|ksoftirqd/0 0.6| 0 0 0.05 0.03 0.05| 0 0 100 0 0 0|kworker/u8:2 0.0| 24B 11B 0.03 0.03 0.05| 0 0 100 0 0 0|irqbalance 0.0| 36B 11B 0.02 0.02 0.05| 0 0 100 0 0 0|kworker/1:2 0.0| 52B 11B 0.01 0.02 0.05| 0 0 100 0 0 0|irqbalance 0.0| 24B 11B 0.01 0.02 0.05| 0 0 100 0 0 0|kworker/u8:2 0.0| 39B 11B 0.14 0.05 0.05| 0 0 96 0 0 4|ksoftirqd/0 3.6|9420k 9606k 0.14 0.06 0.06| 0 0 95 0 0 5|ksoftirqd/0 4.2| 10M 10M 0.09 0.05 0.05| 0 0 95 0 0 5|ksoftirqd/0 4.3| 10M 10M 0.05 0.05 0.05| 0 0 95 0 0 5|ksoftirqd/0 4.1| 10M 10M 0.17 0.07 0.06| 0 0 95 0 0 5|ksoftirqd/0 4.2| 10M 10M 0.17 0.08 0.06| 0 0 95 0 0 5|ksoftirqd/0 4.1|9999k 3969M 0.23 0.11 0.07| 0 0 95 0 0 5|ksoftirqd/0 4.2| 10M 10M 0.31 0.14 0.08| 0 0 95 0 0 5|ksoftirqd/0 4.2| 10M 10M 0.24 0.14 0.08| 0 0 95 0 0 5|ksoftirqd/0 4.2| 10M 10M 0.28 0.16 0.09| 0 0 95 0 0 5|ksoftirqd/0 4.3|3969M 10M 0.24 0.16 0.09| 0 0 95 0 0 5|ksoftirqd/0 4.3| 10M 10M 0.14 0.15 0.09| 0 0 95 0 0 5|ksoftirqd/0 4.2| 10M 10M 0.09 0.13 0.09| 0 0 95 0 0 5|ksoftirqd/0 4.2|9991k 10M 0.11 0.14 0.09| 0 0 95 0 0 5|ksoftirqd/0 4.2| 10M 10M 0.07 0.12 0.09| 0 0 95 0 0 5|ksoftirqd/0 4.2| 10M 10M 0.12 0.13 0.09| 0 0 95 0 0 5|ksoftirqd/0 4.1| 10M 10M 0.15 0.13 0.09| 0 0 95 0 0 5|ksoftirqd/0 4.1| 10M 10M 0.09 0.12 0.09| 0 0 95 0 0 5|ksoftirqd/0 4.1| 10M 10M 0.19 0.14 0.10| 0 0 95 0 0 5|ksoftirqd/0 4.2| 10M 3969M 0.19 0.14 0.10| 0 0 95 0 0 5|ksoftirqd/0 4.1|9985k 10M 0.22 0.16 0.11| 0 0 95 0 0 5|ksoftirqd/0 4.2| 10M 10M 0.27 0.18 0.12| 0 0 95 0 0 5|ksoftirqd/0 4.1| 10M 10M 0.32 0.19 0.12| 0 0 95 0 0 5|ksoftirqd/0 4.2|3969M 10M 0.20 0.17 0.12| 0 0 95 0 0 5|ksoftirqd/0 4.1| 10M 10M 0.25 0.19 0.13| 0 0 95 0 0 5|ksoftirqd/0 4.2| 10M 10M 0.20 0.19 0.13| 0 0 95 0 0 5|ksoftirqd/0 4.3| 10M 10M 0.19 0.18 0.13| 0 0 95 0 0 5|ksoftirqd/0 4.1| 10M 10M 0.11 0.17 0.13| 0 0 95 0 0 5|ksoftirqd/0 4.2| 10M 10M 0.20 0.18 0.14| 0 0 95 0 0 5|ksoftirqd/0 4.2| 10M 10M 0.18 0.18 0.14| 0 0 95 0 0 5|ksoftirqd/0 4.2| 10M 10M 0.11 0.16 0.13| 0 0 100 0 0 0|ksoftirqd/0 0.4| 802k 834k 0.07 0.15 0.13| 0 0 100 0 0 0|kworker/3:0 0.0| 34B 11B 0.04 0.13 0.13| 0 0 100 0 0 0|irqbalance 0.0| 51B 11B 0.03 0.12 0.13| 0 0 100 0 0 0|irqbalance 0.0| 31B 11B 0.02 0.11 0.12| 0 0 100 0 0 0|irqbalance 0.0| 38B 11B 0.01 0.10 0.12| 0 0 100 0 0 0|kworker/1:2 0.0| 22B 11B 0.01 0.09 0.12| 0 0 100 0 0 0|irqbalance 0.0| 20B 11B 0 0.08 0.11| 0 0 100 0 0 0|kworker/3:0 0.0| 23B 11B 0 0.07 0.11| 0 0 100 0 0 0|irqbalance 0.0| 22B 11B 0 0.07 0.11| 0 0 100 0 0 0|irqbalance 0.0| 77B 11B 0 0.06 0.10| 0 0 100 0 0 0|kworker/3:0 0.0| 19B 11B root@jessie-rpi:~# IPv6 # No Monitoring # Raspberry Pi # root@lenovo:~# iperf3 -c fd14:9aa4:e604:ec36::1 -i 30 -t 900 Connecting to host fd14:9aa4:e604:ec36::1, port 5201 [ 4] local fd2b:656a:6fdb:a3a8::5 port 35754 connected to fd14:9aa4:e604:ec36::1 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-30.00 sec 171 MBytes 47.7 Mbits/sec 83 1.38 MBytes [ 4] 30.00-60.00 sec 169 MBytes 47.3 Mbits/sec 84 1.65 MBytes [ 4] 60.00-90.00 sec 170 MBytes 47.6 Mbits/sec 68 1.67 MBytes [ 4] 90.00-120.00 sec 170 MBytes 47.6 Mbits/sec 74 1.48 MBytes [ 4] 120.00-150.00 sec 170 MBytes 47.6 Mbits/sec 12 1.73 MBytes [ 4] 150.00-180.00 sec 169 MBytes 47.2 Mbits/sec 253 1.69 MBytes [ 4] 180.00-210.00 sec 170 MBytes 47.7 Mbits/sec 104 1.23 MBytes [ 4] 210.00-240.00 sec 170 MBytes 47.6 Mbits/sec 337 1.82 MBytes [ 4] 240.00-270.00 sec 169 MBytes 47.3 Mbits/sec 250 1.26 MBytes [ 4] 270.00-300.00 sec 170 MBytes 47.6 Mbits/sec 82 1.55 MBytes [ 4] 300.00-330.00 sec 169 MBytes 47.3 Mbits/sec 483 1.53 MBytes [ 4] 330.00-360.00 sec 171 MBytes 47.7 Mbits/sec 177 1000 KBytes [ 4] 360.00-390.00 sec 171 MBytes 47.8 Mbits/sec 20 1.22 MBytes [ 4] 390.00-420.00 sec 169 MBytes 47.3 Mbits/sec 429 1.94 MBytes [ 4] 420.00-450.00 sec 170 MBytes 47.6 Mbits/sec 18 1.23 MBytes [ 4] 450.00-480.00 sec 170 MBytes 47.6 Mbits/sec 184 1.79 MBytes [ 4] 480.00-510.00 sec 169 MBytes 47.2 Mbits/sec 329 1.31 MBytes [ 4] 510.00-540.00 sec 171 MBytes 47.9 Mbits/sec 23 1.24 MBytes [ 4] 540.00-570.00 sec 169 MBytes 47.2 Mbits/sec 275 1.49 MBytes [ 4] 570.00-600.00 sec 171 MBytes 47.9 Mbits/sec 12 1.33 MBytes [ 4] 600.00-630.00 sec 170 MBytes 47.6 Mbits/sec 111 1.33 MBytes [ 4] 630.00-660.00 sec 170 MBytes 47.5 Mbits/sec 134 1.49 MBytes [ 4] 660.00-690.00 sec 169 MBytes 47.2 Mbits/sec 218 1.52 MBytes [ 4] 690.00-720.00 sec 171 MBytes 47.7 Mbits/sec 317 1.39 MBytes [ 4] 720.00-750.00 sec 169 MBytes 47.3 Mbits/sec 33 1.75 MBytes [ 4] 750.00-780.00 sec 170 MBytes 47.6 Mbits/sec 189 1.65 MBytes [ 4] 780.00-810.00 sec 170 MBytes 47.6 Mbits/sec 37 1.07 MBytes [ 4] 810.00-840.00 sec 170 MBytes 47.5 Mbits/sec 353 1.19 MBytes [ 4] 840.00-870.00 sec 168 MBytes 47.0 Mbits/sec 569 1.61 MBytes [ 4] 870.00-900.00 sec 170 MBytes 47.7 Mbits/sec 189 1.77 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 4.98 GBytes 47.5 Mbits/sec 5447 sender [ 4] 0.00-900.00 sec 4.98 GBytes 47.5 Mbits/sec receiver iperf Done. root@lenovo:~# root@lenovo:~# iperf3 -c fd14:9aa4:e604:ec36::1 -i 30 -t 900 -R Connecting to host fd14:9aa4:e604:ec36::1, port 5201 Reverse mode, remote host fd14:9aa4:e604:ec36::1 is sending [ 4] local fd2b:656a:6fdb:a3a8::5 port 35760 connected to fd14:9aa4:e604:ec36::1 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-30.00 sec 179 MBytes 50.0 Mbits/sec [ 4] 30.00-60.00 sec 180 MBytes 50.4 Mbits/sec [ 4] 60.00-90.00 sec 180 MBytes 50.4 Mbits/sec [ 4] 90.00-120.00 sec 181 MBytes 50.5 Mbits/sec [ 4] 120.00-150.00 sec 180 MBytes 50.4 Mbits/sec [ 4] 150.00-180.00 sec 179 MBytes 50.1 Mbits/sec [ 4] 180.00-210.00 sec 180 MBytes 50.3 Mbits/sec [ 4] 210.00-240.00 sec 181 MBytes 50.7 Mbits/sec [ 4] 240.00-270.00 sec 179 MBytes 50.1 Mbits/sec [ 4] 270.00-300.00 sec 180 MBytes 50.3 Mbits/sec [ 4] 300.00-330.00 sec 180 MBytes 50.3 Mbits/sec [ 4] 330.00-360.00 sec 181 MBytes 50.5 Mbits/sec [ 4] 360.00-390.00 sec 181 MBytes 50.6 Mbits/sec [ 4] 390.00-420.00 sec 179 MBytes 50.1 Mbits/sec [ 4] 420.00-450.00 sec 181 MBytes 50.7 Mbits/sec [ 4] 450.00-480.00 sec 180 MBytes 50.2 Mbits/sec [ 4] 480.00-510.00 sec 180 MBytes 50.3 Mbits/sec [ 4] 510.00-540.00 sec 180 MBytes 50.3 Mbits/sec [ 4] 540.00-570.00 sec 179 MBytes 50.1 Mbits/sec [ 4] 570.00-600.00 sec 180 MBytes 50.5 Mbits/sec [ 4] 600.00-630.00 sec 180 MBytes 50.4 Mbits/sec [ 4] 630.00-660.00 sec 181 MBytes 50.5 Mbits/sec [ 4] 660.00-690.00 sec 181 MBytes 50.6 Mbits/sec [ 4] 690.00-720.00 sec 180 MBytes 50.3 Mbits/sec [ 4] 720.00-750.00 sec 180 MBytes 50.4 Mbits/sec [ 4] 750.00-780.00 sec 180 MBytes 50.4 Mbits/sec [ 4] 780.00-810.00 sec 179 MBytes 50.1 Mbits/sec [ 4] 810.00-840.00 sec 181 MBytes 50.6 Mbits/sec [ 4] 840.00-870.00 sec 180 MBytes 50.4 Mbits/sec [ 4] 870.00-900.00 sec 181 MBytes 50.6 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 5.28 GBytes 50.4 Mbits/sec 16915 sender [ 4] 0.00-900.00 sec 5.28 GBytes 50.4 Mbits/sec receiver iperf Done. root@lenovo:~# Raspberry Pi 2 # root@lenovo:~# iperf3 -c fd45:64bf:295c:5631::1 -i 30 -t 900 Connecting to host fd45:64bf:295c:5631::1, port 5201 [ 4] local fd57:d1b1:9c79:40af::5 port 43677 connected to fd45:64bf:295c:5631::1 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-30.00 sec 307 MBytes 85.8 Mbits/sec 21 2.04 MBytes [ 4] 30.00-60.00 sec 308 MBytes 86.2 Mbits/sec 18 1.20 MBytes [ 4] 60.00-90.00 sec 305 MBytes 85.2 Mbits/sec 18 1.25 MBytes [ 4] 90.00-120.00 sec 306 MBytes 85.5 Mbits/sec 20 1.27 MBytes [ 4] 120.00-150.00 sec 307 MBytes 85.9 Mbits/sec 8 2.00 MBytes [ 4] 150.00-180.00 sec 306 MBytes 85.5 Mbits/sec 8 1.59 MBytes [ 4] 180.00-210.00 sec 307 MBytes 85.8 Mbits/sec 4 2.01 MBytes [ 4] 210.00-240.00 sec 306 MBytes 85.6 Mbits/sec 6 1.70 MBytes [ 4] 240.00-270.00 sec 307 MBytes 85.9 Mbits/sec 6 2.09 MBytes [ 4] 270.00-300.00 sec 306 MBytes 85.5 Mbits/sec 21 1.25 MBytes [ 4] 300.00-330.00 sec 307 MBytes 85.8 Mbits/sec 9 2.11 MBytes [ 4] 330.00-360.00 sec 307 MBytes 85.8 Mbits/sec 11 1.31 MBytes [ 4] 360.00-390.00 sec 305 MBytes 85.4 Mbits/sec 15 1.44 MBytes [ 4] 390.00-420.00 sec 305 MBytes 85.4 Mbits/sec 43 1.96 MBytes [ 4] 420.00-450.00 sec 304 MBytes 85.1 Mbits/sec 8 1.32 MBytes [ 4] 450.00-480.00 sec 306 MBytes 85.4 Mbits/sec 7 1.60 MBytes [ 4] 480.00-510.00 sec 306 MBytes 85.5 Mbits/sec 16 1.21 MBytes [ 4] 510.00-540.00 sec 306 MBytes 85.4 Mbits/sec 18 1.42 MBytes [ 4] 540.00-570.00 sec 307 MBytes 85.9 Mbits/sec 3 1.86 MBytes [ 4] 570.00-600.00 sec 306 MBytes 85.6 Mbits/sec 6 2.07 MBytes [ 4] 600.00-630.00 sec 306 MBytes 85.6 Mbits/sec 20 1.09 MBytes [ 4] 630.00-660.00 sec 305 MBytes 85.4 Mbits/sec 3 1.36 MBytes [ 4] 660.00-690.00 sec 307 MBytes 85.8 Mbits/sec 10 1.99 MBytes [ 4] 690.00-720.00 sec 306 MBytes 85.5 Mbits/sec 24 1.59 MBytes [ 4] 720.00-750.00 sec 307 MBytes 85.8 Mbits/sec 7 1.25 MBytes [ 4] 750.00-780.00 sec 306 MBytes 85.5 Mbits/sec 6 1.80 MBytes [ 4] 780.00-810.00 sec 307 MBytes 85.8 Mbits/sec 7 1.94 MBytes [ 4] 810.00-840.00 sec 306 MBytes 85.5 Mbits/sec 25 1.17 MBytes [ 4] 840.00-870.00 sec 303 MBytes 84.7 Mbits/sec 5 1.38 MBytes [ 4] 870.00-900.00 sec 303 MBytes 84.7 Mbits/sec 30 1.23 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 8.96 GBytes 85.6 Mbits/sec 403 sender [ 4] 0.00-900.00 sec 8.96 GBytes 85.5 Mbits/sec receiver iperf Done. root@lenovo:~# root@lenovo:~# iperf3 -c fd45:64bf:295c:5631::1 -i 30 -t 900 -R Connecting to host fd45:64bf:295c:5631::1, port 5201 Reverse mode, remote host fd45:64bf:295c:5631::1 is sending [ 4] local fd57:d1b1:9c79:40af::5 port 43685 connected to fd45:64bf:295c:5631::1 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-30.00 sec 280 MBytes 78.4 Mbits/sec [ 4] 30.00-60.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 60.00-90.00 sec 278 MBytes 77.8 Mbits/sec [ 4] 90.00-120.00 sec 281 MBytes 78.5 Mbits/sec [ 4] 120.00-150.00 sec 278 MBytes 77.8 Mbits/sec [ 4] 150.00-180.00 sec 278 MBytes 77.8 Mbits/sec [ 4] 180.00-210.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 210.00-240.00 sec 278 MBytes 77.7 Mbits/sec [ 4] 240.00-270.00 sec 281 MBytes 78.6 Mbits/sec [ 4] 270.00-300.00 sec 280 MBytes 78.3 Mbits/sec [ 4] 300.00-330.00 sec 277 MBytes 77.3 Mbits/sec [ 4] 330.00-360.00 sec 281 MBytes 78.7 Mbits/sec [ 4] 360.00-390.00 sec 277 MBytes 77.5 Mbits/sec [ 4] 390.00-420.00 sec 279 MBytes 77.9 Mbits/sec [ 4] 420.00-450.00 sec 278 MBytes 77.8 Mbits/sec [ 4] 450.00-480.00 sec 277 MBytes 77.3 Mbits/sec [ 4] 480.00-510.00 sec 281 MBytes 78.4 Mbits/sec [ 4] 510.00-540.00 sec 278 MBytes 77.9 Mbits/sec [ 4] 540.00-570.00 sec 278 MBytes 77.6 Mbits/sec [ 4] 570.00-600.00 sec 286 MBytes 79.9 Mbits/sec [ 4] 600.00-630.00 sec 280 MBytes 78.3 Mbits/sec [ 4] 630.00-660.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 660.00-690.00 sec 280 MBytes 78.3 Mbits/sec [ 4] 690.00-720.00 sec 282 MBytes 78.9 Mbits/sec [ 4] 720.00-750.00 sec 280 MBytes 78.4 Mbits/sec [ 4] 750.00-780.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 780.00-810.00 sec 282 MBytes 78.8 Mbits/sec [ 4] 810.00-840.00 sec 279 MBytes 77.9 Mbits/sec [ 4] 840.00-870.00 sec 281 MBytes 78.6 Mbits/sec [ 4] 870.00-900.00 sec 282 MBytes 78.9 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 8.19 GBytes 78.2 Mbits/sec 5357 sender [ 4] 0.00-900.00 sec 8.19 GBytes 78.2 Mbits/sec receiver iperf Done. root@lenovo:~# With dstat Monitoring # Raspberry Pi # root@lenovo:~# iperf3 -c fd14:9aa4:e604:ec36::1 -i 30 -t 900 Connecting to host fd14:9aa4:e604:ec36::1, port 5201 [ 4] local fd2b:656a:6fdb:a3a8::5 port 35801 connected to fd14:9aa4:e604:ec36::1 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-30.00 sec 170 MBytes 47.6 Mbits/sec 21 1.69 MBytes [ 4] 30.00-60.00 sec 167 MBytes 46.7 Mbits/sec 226 1.25 MBytes [ 4] 60.00-90.00 sec 170 MBytes 47.6 Mbits/sec 497 1.64 MBytes [ 4] 90.00-120.00 sec 169 MBytes 47.3 Mbits/sec 133 1.00 MBytes [ 4] 120.00-150.00 sec 169 MBytes 47.3 Mbits/sec 117 1.24 MBytes [ 4] 150.00-180.00 sec 170 MBytes 47.6 Mbits/sec 178 1.30 MBytes [ 4] 180.00-210.00 sec 169 MBytes 47.2 Mbits/sec 107 1.65 MBytes [ 4] 210.00-240.00 sec 169 MBytes 47.3 Mbits/sec 85 1.78 MBytes [ 4] 240.00-270.00 sec 169 MBytes 47.2 Mbits/sec 241 974 KBytes [ 4] 270.00-300.00 sec 169 MBytes 47.1 Mbits/sec 41 1.25 MBytes [ 4] 300.00-330.00 sec 169 MBytes 47.2 Mbits/sec 468 1.50 MBytes [ 4] 330.00-360.00 sec 169 MBytes 47.3 Mbits/sec 11 1.35 MBytes [ 4] 360.00-390.00 sec 168 MBytes 47.0 Mbits/sec 125 1.69 MBytes [ 4] 390.00-420.00 sec 170 MBytes 47.5 Mbits/sec 63 1.42 MBytes [ 4] 420.00-450.00 sec 169 MBytes 47.2 Mbits/sec 62 1.74 MBytes [ 4] 450.00-480.00 sec 169 MBytes 47.3 Mbits/sec 259 1.48 MBytes [ 4] 480.00-510.00 sec 169 MBytes 47.2 Mbits/sec 45 1.21 MBytes [ 4] 510.00-540.00 sec 170 MBytes 47.5 Mbits/sec 36 1.49 MBytes [ 4] 540.00-570.00 sec 169 MBytes 47.3 Mbits/sec 151 1.13 MBytes [ 4] 570.00-600.00 sec 169 MBytes 47.3 Mbits/sec 335 1.19 MBytes [ 4] 600.00-630.00 sec 169 MBytes 47.2 Mbits/sec 202 1.53 MBytes [ 4] 630.00-660.00 sec 169 MBytes 47.4 Mbits/sec 173 1.55 MBytes [ 4] 660.00-690.00 sec 170 MBytes 47.5 Mbits/sec 44 1.02 MBytes [ 4] 690.00-720.00 sec 168 MBytes 46.9 Mbits/sec 288 1.83 MBytes [ 4] 720.00-750.00 sec 169 MBytes 47.3 Mbits/sec 261 1.17 MBytes [ 4] 750.00-780.00 sec 169 MBytes 47.3 Mbits/sec 506 1.65 MBytes [ 4] 780.00-810.00 sec 169 MBytes 47.3 Mbits/sec 117 1.21 MBytes [ 4] 810.00-840.00 sec 171 MBytes 47.7 Mbits/sec 68 1.25 MBytes [ 4] 840.00-870.00 sec 169 MBytes 47.3 Mbits/sec 26 1.64 MBytes [ 4] 870.00-900.00 sec 170 MBytes 47.5 Mbits/sec 27 1.46 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 4.96 GBytes 47.3 Mbits/sec 4913 sender [ 4] 0.00-900.00 sec 4.95 GBytes 47.3 Mbits/sec receiver iperf Done. root@lenovo:~# root@lenovo:~# iperf3 -c fd14:9aa4:e604:ec36::1 -i 30 -t 900 -R Connecting to host fd14:9aa4:e604:ec36::1, port 5201 Reverse mode, remote host fd14:9aa4:e604:ec36::1 is sending [ 4] local fd2b:656a:6fdb:a3a8::5 port 35805 connected to fd14:9aa4:e604:ec36::1 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-30.00 sec 178 MBytes 49.7 Mbits/sec [ 4] 30.00-60.00 sec 179 MBytes 50.1 Mbits/sec [ 4] 60.00-90.00 sec 179 MBytes 50.1 Mbits/sec [ 4] 90.00-120.00 sec 179 MBytes 50.2 Mbits/sec [ 4] 120.00-150.00 sec 179 MBytes 50.0 Mbits/sec [ 4] 150.00-180.00 sec 181 MBytes 50.5 Mbits/sec [ 4] 180.00-210.00 sec 179 MBytes 50.0 Mbits/sec [ 4] 210.00-240.00 sec 180 MBytes 50.2 Mbits/sec [ 4] 240.00-270.00 sec 179 MBytes 50.2 Mbits/sec [ 4] 270.00-300.00 sec 180 MBytes 50.3 Mbits/sec [ 4] 300.00-330.00 sec 179 MBytes 50.1 Mbits/sec [ 4] 330.00-360.00 sec 178 MBytes 49.8 Mbits/sec [ 4] 360.00-390.00 sec 179 MBytes 50.1 Mbits/sec [ 4] 390.00-420.00 sec 180 MBytes 50.4 Mbits/sec [ 4] 420.00-450.00 sec 179 MBytes 50.2 Mbits/sec [ 4] 450.00-480.00 sec 179 MBytes 50.1 Mbits/sec [ 4] 480.00-510.00 sec 178 MBytes 49.7 Mbits/sec [ 4] 510.00-540.00 sec 179 MBytes 50.1 Mbits/sec [ 4] 540.00-570.00 sec 179 MBytes 50.1 Mbits/sec [ 4] 570.00-600.00 sec 180 MBytes 50.2 Mbits/sec [ 4] 600.00-630.00 sec 180 MBytes 50.2 Mbits/sec [ 4] 630.00-660.00 sec 180 MBytes 50.2 Mbits/sec [ 4] 660.00-690.00 sec 180 MBytes 50.4 Mbits/sec [ 4] 690.00-720.00 sec 179 MBytes 49.9 Mbits/sec [ 4] 720.00-750.00 sec 179 MBytes 50.2 Mbits/sec [ 4] 750.00-780.00 sec 180 MBytes 50.4 Mbits/sec [ 4] 780.00-810.00 sec 179 MBytes 49.9 Mbits/sec [ 4] 810.00-840.00 sec 179 MBytes 50.1 Mbits/sec [ 4] 840.00-870.00 sec 180 MBytes 50.2 Mbits/sec [ 4] 870.00-900.00 sec 179 MBytes 50.1 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 5.26 GBytes 50.2 Mbits/sec 16654 sender [ 4] 0.00-900.00 sec 5.25 GBytes 50.1 Mbits/sec receiver iperf Done. root@lenovo:~# root@lace:~# dstat --nocolor -l -c --top-cpu -n 30 \u0026gt; res ^Croot@lace:~# cat res ---load-avg--- ----total-cpu-usage---- -most-expensive- -net/total- 1m 5m 15m |usr sys idl wai hiq siq| cpu process | recv send 0 0.01 0.05| 0 0 93 0 0 7|ksoftirqd/0 6.4| 0 0 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.1| 18B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 48B 11B 0 0.01 0.05| 0 0 100 0 0 0|sshd: root@pt0.0| 16B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.1| 24B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 17B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 16B 11B 0 0.01 0.05| 0 0 100 0 0 0|sshd: root@pt0.0| 16B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.1| 16B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 16B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 20B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.1| 16B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 32B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 16B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.1| 17B 11B 0 0.01 0.05| 0 0 100 0 0 0|kworker/0:1 0.0| 16B 11B 0 0.01 0.05| 0 0 100 0 0 0|sshd: root@pt0.0| 16B 11B 0.16 0.05 0.06| 0 0 75 0 0 24|ksoftirqd/0 23|1601k 3097k 0.69 0.19 0.10| 0 0 0 0 0 100|ksoftirqd/0 93|3966M 12M 0.88 0.28 0.14| 0 0 1 0 0 99|ksoftirqd/0 91|6371k 12M 0.93 0.35 0.16| 0 0 0 0 0 100|ksoftirqd/0 93|6500k 12M 1.08 0.44 0.20| 0 0 0 0 0 100|ksoftirqd/0 93|6388k 12M 1.11 0.51 0.23| 0 0 0 0 0 100|ksoftirqd/0 93|6423k 12M 1.32 0.62 0.28| 0 0 0 0 0 100|ksoftirqd/0 93|6455k 12M 1.25 0.67 0.31| 0 0 0 0 0 100|ksoftirqd/0 93|6391k 12M 1.17 0.70 0.32| 0 0 0 0 0 100|ksoftirqd/0 93|6494k 12M 1.18 0.75 0.35| 0 0 0 0 0 100|ksoftirqd/0 93|6385k 12M 1.16 0.79 0.38| 0 0 0 0 0 99|ksoftirqd/0 92|6407k 12M 1.15 0.82 0.40| 0 0 0 0 0 99|ksoftirqd/0 93|6405k 12M 1.20 0.87 0.43| 0 0 0 0 0 100|ksoftirqd/0 93|6424k 12M 1.31 0.93 0.46| 0 0 0 0 0 100|ksoftirqd/0 93|6447k 12M 1.29 0.96 0.49| 0 0 0 0 0 100|ksoftirqd/0 93|6438k 12M 1.28 1.00 0.52| 0 0 0 0 0 100|ksoftirqd/0 93|6373k 12M 1.39 1.06 0.55| 0 0 0 0 0 100|ksoftirqd/0 93|6448k 12M 1.29 1.07 0.57| 0 0 0 0 0 100|ksoftirqd/0 93|6412k 12M 1.23 1.08 0.59| 0 0 0 0 0 100|ksoftirqd/0 93|6428k 3972M 1.14 1.07 0.61| 0 0 0 0 0 99|ksoftirqd/0 93|6459k 12M 1.21 1.10 0.63| 0 0 0 0 0 100|ksoftirqd/0 93|6422k 12M 1.21 1.10 0.65| 0 0 0 0 0 100|ksoftirqd/0 93|6449k 12M 1.18 1.11 0.66| 0 0 0 0 0 100|ksoftirqd/0 93|6334k 12M 1.11 1.10 0.67| 0 0 0 0 0 100|ksoftirqd/0 93|3966M 12M 1.12 1.10 0.69| 0 0 0 0 0 100|ksoftirqd/0 93|6385k 12M 1.07 1.09 0.70| 0 0 0 0 0 100|ksoftirqd/0 94|6466k 12M 1.10 1.10 0.71| 0 0 0 0 0 100|ksoftirqd/0 93|6424k 12M 1.18 1.12 0.73| 0 0 0 0 0 100|ksoftirqd/0 93|6451k 12M 1.30 1.16 0.76| 0 0 0 0 0 100|ksoftirqd/0 93|6483k 12M 1.36 1.19 0.78| 0 0 0 0 0 100|ksoftirqd/0 93|6418k 12M 1.14 1.16 0.78| 0 0 23 0 0 77|ksoftirqd/0 71|4832k 9442k 0.69 1.05 0.76| 0 0 100 0 0 0|kworker/0:2 0.0| 16B 13B 0.42 0.95 0.73| 0 0 100 0 0 0|kworker/0:2 0.1| 16B 11B 0.25 0.86 0.71| 0 0 100 0 0 0|kworker/0:2 0.0| 16B 11B 0.15 0.77 0.69| 0 0 100 0 0 0|kworker/0:2 0.0| 52B 11B 0.09 0.70 0.66| 0 0 100 0 0 0|kworker/0:2 0.0| 24B 11B 0.06 0.63 0.64| 0 0 100 0 0 0|kworker/0:2 0.1| 17B 12B 0.03 0.57 0.62| 0 0 100 0 0 0|kworker/0:2 0.0| 16B 11B 0.02 0.52 0.60| 0 0 100 0 0 0|kworker/0:2 0.0| 17B 11B 0.01 0.47 0.58| 0 0 100 0 0 0|kworker/0:2 0.1| 16B 11B 0.01 0.42 0.57| 0 0 100 0 0 0|kworker/0:2 0.0| 16B 11B 0.24 0.43 0.56| 0 0 60 0 0 39|ksoftirqd/0 37|5213k 2727k 0.70 0.52 0.59| 0 0 0 0 0 100|ksoftirqd/0 93| 13M 6975k 1.10 0.63 0.62| 0 0 0 0 0 100|ksoftirqd/0 93| 13M 6965k 1.13 0.68 0.64| 0 0 0 0 0 100|ksoftirqd/0 94| 13M 6922k 1.16 0.73 0.66| 0 0 0 0 0 100|ksoftirqd/0 94| 13M 6984k 1.09 0.75 0.67| 0 0 0 0 0 100|ksoftirqd/0 93| 13M 6912k 1.06 0.78 0.68| 0 0 0 0 0 100|ksoftirqd/0 94| 13M 6959k 1.04 0.80 0.69| 0 0 0 0 0 100|ksoftirqd/0 94| 13M 7005k 1.02 0.82 0.70| 0 0 0 0 0 100|ksoftirqd/0 94| 13M 6917k 1.01 0.84 0.71| 0 0 0 0 0 100|ksoftirqd/0 94| 13M 3966M 1.01 0.85 0.72| 0 0 0 0 0 100|ksoftirqd/0 94| 13M 6945k 1.08 0.88 0.73| 0 0 0 0 0 100|ksoftirqd/0 93| 13M 6861k 1.05 0.89 0.74| 0 0 0 0 0 100|ksoftirqd/0 94| 13M 6996k 1.03 0.90 0.75| 0 0 0 0 0 100|ksoftirqd/0 93| 13M 6929k 1.09 0.93 0.76| 0 0 0 0 0 100|ksoftirqd/0 94|3972M 6967k 1.12 0.95 0.78| 0 0 0 0 0 100|ksoftirqd/0 94| 13M 6973k 1.13 0.97 0.79| 0 0 2 0 0 98|ksoftirqd/0 91| 13M 6872k 1.14 0.99 0.80| 0 0 0 0 0 99|ksoftirqd/0 93| 13M 6974k 1.21 1.02 0.81| 0 0 0 0 0 99|ksoftirqd/0 93| 13M 6912k 1.13 1.02 0.82| 0 0 0 0 0 100|ksoftirqd/0 93| 13M 7015k 1.08 1.02 0.83| 0 0 0 0 0 100|ksoftirqd/0 93| 13M 6941k 1.05 1.01 0.83| 0 0 0 0 0 100|ksoftirqd/0 94| 13M 6959k 1.03 1.01 0.84| 0 0 0 0 0 100|ksoftirqd/0 94| 13M 6990k 1.23 1.06 0.86| 0 0 0 0 0 100|ksoftirqd/0 94| 13M 6957k 1.22 1.07 0.87| 0 0 0 0 0 100|ksoftirqd/0 93| 13M 6945k 1.28 1.10 0.88| 0 0 0 0 0 100|ksoftirqd/0 93| 13M 6952k 1.17 1.09 0.89| 0 0 0 0 0 100|ksoftirqd/0 94| 13M 6932k 1.10 1.08 0.89| 0 0 0 0 0 100|ksoftirqd/0 93| 13M 6984k 1.06 1.07 0.89| 0 0 0 0 0 100|ksoftirqd/0 94| 13M 6946k 1.24 1.11 0.91| 0 0 0 0 0 100|ksoftirqd/0 93| 13M 6930k 0.99 1.07 0.90| 0 0 37 0 0 62|ksoftirqd/0 58|8011k 3964M 0.60 0.97 0.87| 0 0 100 0 0 0|kworker/0:1 0.0| 17B 11B 0.36 0.88 0.85| 0 0 100 0 0 0|kworker/0:2 0.0| 16B 11B 0.22 0.79 0.82| 0 0 100 0 0 0|kworker/0:2 0.0| 18B 11B 0.13 0.72 0.79| 0 0 100 0 0 0|kworker/0:2 0.0| 16B 11B 0.08 0.65 0.77| 0 0 100 0 0 0|kworker/0:2 0.1| 17B 11B 0.05 0.59 0.75| 0 0 100 0 0 0|kworker/0:2 0.0| 16B 11B root@lace:~# Raspberry Pi 2 # root@lenovo:~# iperf3 -c fd45:64bf:295c:5631::1 -i 30 -t 900 Connecting to host fd45:64bf:295c:5631::1, port 5201 [ 4] local fd57:d1b1:9c79:40af::5 port 43707 connected to fd45:64bf:295c:5631::1 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-30.00 sec 303 MBytes 84.8 Mbits/sec 38 1.18 MBytes [ 4] 30.00-60.00 sec 303 MBytes 84.7 Mbits/sec 14 1.37 MBytes [ 4] 60.00-90.00 sec 303 MBytes 84.7 Mbits/sec 10 1.59 MBytes [ 4] 90.00-120.00 sec 303 MBytes 84.7 Mbits/sec 15 1.07 MBytes [ 4] 120.00-150.00 sec 304 MBytes 85.0 Mbits/sec 18 1.35 MBytes [ 4] 150.00-180.00 sec 304 MBytes 85.0 Mbits/sec 18 1.29 MBytes [ 4] 180.00-210.00 sec 303 MBytes 84.7 Mbits/sec 17 1.81 MBytes [ 4] 210.00-240.00 sec 303 MBytes 84.8 Mbits/sec 9 2.07 MBytes [ 4] 240.00-270.00 sec 303 MBytes 84.8 Mbits/sec 6 1.73 MBytes [ 4] 270.00-300.00 sec 303 MBytes 84.8 Mbits/sec 2 2.14 MBytes [ 4] 300.00-330.00 sec 302 MBytes 84.4 Mbits/sec 32 1.24 MBytes [ 4] 330.00-360.00 sec 303 MBytes 84.8 Mbits/sec 9 1.47 MBytes [ 4] 360.00-390.00 sec 302 MBytes 84.4 Mbits/sec 14 1.86 MBytes [ 4] 390.00-420.00 sec 303 MBytes 84.8 Mbits/sec 29 1.33 MBytes [ 4] 420.00-450.00 sec 302 MBytes 84.4 Mbits/sec 13 1.95 MBytes [ 4] 450.00-480.00 sec 303 MBytes 84.8 Mbits/sec 14 1.25 MBytes [ 4] 480.00-510.00 sec 303 MBytes 84.7 Mbits/sec 70 1.43 MBytes [ 4] 510.00-540.00 sec 304 MBytes 85.1 Mbits/sec 19 1.28 MBytes [ 4] 540.00-570.00 sec 303 MBytes 84.8 Mbits/sec 19 1.76 MBytes [ 4] 570.00-600.00 sec 304 MBytes 85.1 Mbits/sec 10 1.84 MBytes [ 4] 600.00-630.00 sec 302 MBytes 84.4 Mbits/sec 20 1.45 MBytes [ 4] 630.00-660.00 sec 301 MBytes 84.1 Mbits/sec 6 1.31 MBytes [ 4] 660.00-690.00 sec 304 MBytes 85.1 Mbits/sec 52 1.20 MBytes [ 4] 690.00-720.00 sec 302 MBytes 84.3 Mbits/sec 5 1.30 MBytes [ 4] 720.00-750.00 sec 303 MBytes 84.7 Mbits/sec 10 2.06 MBytes [ 4] 750.00-780.00 sec 303 MBytes 84.7 Mbits/sec 215 1.76 MBytes [ 4] 780.00-810.00 sec 302 MBytes 84.4 Mbits/sec 6 2.09 MBytes [ 4] 810.00-840.00 sec 302 MBytes 84.5 Mbits/sec 31 1.24 MBytes [ 4] 840.00-870.00 sec 304 MBytes 85.1 Mbits/sec 2 1.46 MBytes [ 4] 870.00-900.00 sec 303 MBytes 84.8 Mbits/sec 12 2.01 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 8.88 GBytes 84.7 Mbits/sec 735 sender [ 4] 0.00-900.00 sec 8.88 GBytes 84.7 Mbits/sec receiver iperf Done. root@lenovo:~# root@lenovo:~# iperf3 -c fd45:64bf:295c:5631::1 -i 30 -t 900 -R Connecting to host fd45:64bf:295c:5631::1, port 5201 Reverse mode, remote host fd45:64bf:295c:5631::1 is sending [ 4] local fd57:d1b1:9c79:40af::5 port 43715 connected to fd45:64bf:295c:5631::1 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-30.00 sec 278 MBytes 77.8 Mbits/sec [ 4] 30.00-60.00 sec 280 MBytes 78.3 Mbits/sec [ 4] 60.00-90.00 sec 281 MBytes 78.4 Mbits/sec [ 4] 90.00-120.00 sec 282 MBytes 78.7 Mbits/sec [ 4] 120.00-150.00 sec 280 MBytes 78.3 Mbits/sec [ 4] 150.00-180.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 180.00-210.00 sec 280 MBytes 78.3 Mbits/sec [ 4] 210.00-240.00 sec 283 MBytes 79.1 Mbits/sec [ 4] 240.00-270.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 270.00-300.00 sec 280 MBytes 78.3 Mbits/sec [ 4] 300.00-330.00 sec 281 MBytes 78.4 Mbits/sec [ 4] 330.00-360.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 360.00-390.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 390.00-420.00 sec 278 MBytes 77.8 Mbits/sec [ 4] 420.00-450.00 sec 281 MBytes 78.5 Mbits/sec [ 4] 450.00-480.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 480.00-510.00 sec 280 MBytes 78.4 Mbits/sec [ 4] 510.00-540.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 540.00-570.00 sec 280 MBytes 78.3 Mbits/sec [ 4] 570.00-600.00 sec 278 MBytes 77.7 Mbits/sec [ 4] 600.00-630.00 sec 279 MBytes 78.1 Mbits/sec [ 4] 630.00-660.00 sec 278 MBytes 77.8 Mbits/sec [ 4] 660.00-690.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 690.00-720.00 sec 277 MBytes 77.6 Mbits/sec [ 4] 720.00-750.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 750.00-780.00 sec 280 MBytes 78.2 Mbits/sec [ 4] 780.00-810.00 sec 281 MBytes 78.5 Mbits/sec [ 4] 810.00-840.00 sec 280 MBytes 78.3 Mbits/sec [ 4] 840.00-870.00 sec 279 MBytes 78.0 Mbits/sec [ 4] 870.00-900.00 sec 278 MBytes 77.8 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 8.19 GBytes 78.2 Mbits/sec 5911 sender [ 4] 0.00-900.00 sec 8.19 GBytes 78.2 Mbits/sec receiver iperf Done. root@lenovo:~# root@jessie-rpi:~# dstat --nocolor -l -c --top-cpu -n 30 \u0026gt; res ^Croot@jessie-rpi:~# cat res ---load-avg--- ----total-cpu-usage---- -most-expensive- -net/total- 1m 5m 15m |usr sys idl wai hiq siq| cpu process | recv send 0 0.01 0.05| 0 0 99 0 0 1|ksoftirqd/0 0.5| 0 0 0 0.01 0.05| 0 0 100 0 0 0|irqbalance 0.1| 18B 11B 0 0.01 0.05| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.01 0.05| 0 0 100 0 0 0|irqbalance 0.1| 48B 11B 0 0.01 0.05| 0 0 100 0 0 0|irqbalance 0.0| 24B 11B 0 0.01 0.05| 0 0 100 0 0 0|irqbalance 0.1| 20B 11B 0 0.01 0.05| 0 0 95 0 0 5|ksoftirqd/0 5.3|3343k 6476k 0.40 0.11 0.08| 0 0 81 0 0 19|ksoftirqd/0 17| 11M 22M 0.58 0.18 0.10| 0 0 81 0 0 19|ksoftirqd/0 18| 11M 22M 0.82 0.27 0.13| 0 0 80 0 0 19|ksoftirqd/0 18| 11M 22M 0.83 0.33 0.16| 0 0 80 0 0 20|ksoftirqd/0 18| 11M 22M 0.77 0.36 0.17| 0 0 80 0 0 20|ksoftirqd/0 19| 11M 3981M 0.79 0.40 0.19| 0 0 81 0 0 19|ksoftirqd/0 18| 11M 22M 0.69 0.41 0.20| 0 0 81 0 0 19|ksoftirqd/0 18| 11M 22M 0.74 0.45 0.22| 0 0 80 0 0 20|ksoftirqd/0 19| 11M 22M 0.77 0.49 0.24| 0 0 80 0 0 20|ksoftirqd/0 18| 11M 22M 0.75 0.51 0.25| 0 0 80 0 0 20|ksoftirqd/0 19|3971M 22M 0.69 0.52 0.27| 0 0 81 0 0 19|ksoftirqd/0 17| 11M 22M 0.67 0.54 0.28| 0 0 81 0 0 19|ksoftirqd/0 18| 11M 22M 0.74 0.56 0.30| 0 0 82 0 0 18|ksoftirqd/0 16| 11M 22M 0.64 0.56 0.31| 0 0 81 0 0 19|ksoftirqd/0 17| 11M 22M 0.78 0.60 0.33| 0 0 80 0 0 20|ksoftirqd/0 18| 11M 22M 0.80 0.62 0.34| 0 0 81 0 0 19|ksoftirqd/0 18| 11M 22M 0.56 0.58 0.34| 0 0 80 0 0 19|ksoftirqd/0 18| 11M 3981M 0.65 0.60 0.35| 0 0 81 0 0 19|ksoftirqd/0 18| 11M 22M 0.51 0.58 0.35| 0 0 80 0 0 20|ksoftirqd/0 19| 11M 22M 0.56 0.58 0.36| 0 0 80 0 0 20|ksoftirqd/0 19| 11M 22M 0.54 0.58 0.36| 0 0 80 0 0 19|ksoftirqd/0 18| 11M 22M 0.59 0.58 0.37| 0 0 81 0 0 19|ksoftirqd/0 18|3971M 22M 0.75 0.62 0.39| 0 0 81 0 0 18|ksoftirqd/0 17| 11M 22M 0.67 0.61 0.40| 0 0 82 0 0 18|ksoftirqd/0 17| 11M 22M 0.64 0.62 0.41| 0 0 80 0 0 20|ksoftirqd/0 19| 11M 22M 0.73 0.64 0.42| 0 0 80 0 0 20|ksoftirqd/0 18| 11M 22M 0.75 0.66 0.43| 0 0 80 0 0 20|ksoftirqd/0 19| 11M 22M 0.60 0.63 0.43| 0 0 80 0 0 19|ksoftirqd/0 18| 11M 22M 0.49 0.60 0.43| 0 0 81 0 0 19|ksoftirqd/0 18| 11M 3981M 0.49 0.59 0.43| 0 0 87 0 0 13|ksoftirqd/0 13|8100k 15M 0.29 0.53 0.41| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0.18 0.48 0.40| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0.11 0.44 0.39| 0 0 100 0 0 0|irqbalance 0.1| 17B 11B 0.06 0.39 0.38| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0.04 0.36 0.36| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0.02 0.32 0.35| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0.01 0.29 0.34| 0 0 100 0 0 0|irqbalance 0.1| 17B 11B 0.01 0.26 0.33| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0.01 0.24 0.32| 0 0 100 0 0 0|irqbalance 0.1| 18B 11B 0 0.22 0.31| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.19 0.30| 0 0 100 0 0 0|irqbalance 0.1| 17B 11B 0 0.18 0.29| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.16 0.28| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.14 0.27| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.13 0.26| 0 0 100 0 0 0|irqbalance 0.1| 49B 11B 0 0.12 0.26| 0 0 100 0 0 0|irqbalance 0.0| 24B 11B 0 0.11 0.25| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.10 0.24| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.09 0.23| 0 0 100 0 0 0|irqbalance 0.1| 20B 11B 0 0.08 0.22| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.07 0.22| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.07 0.21| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.06 0.20| 0 0 100 0 0 0|irqbalance 0.1| 17B 11B 0 0.05 0.20| 0 0 100 0 0 0|irqbalance 0.0| 32B 11B 0 0.05 0.19| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.04 0.19| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.04 0.18| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.04 0.18| 0 0 100 0 0 0|irqbalance 0.0| 17B 11B 0 0.03 0.17| 0 0 100 0 0 0|irqbalance 0.1| 18B 11B 0 0.03 0.16| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.03 0.16| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.03 0.15| 0 0 100 0 0 0|irqbalance 0.0| 17B 11B 0 0.02 0.15| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.02 0.14| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.02 0.14| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.01 0.13| 0 0 100 0 0 0|irqbalance 0.0| 17B 11B 0 0.01 0.13| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.01 0.13| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.01 0.12| 0 0 100 0 0 0|irqbalance 0.1| 50B 11B 0 0.01 0.12| 0 0 100 0 0 0|irqbalance 0.0| 17B 11B 0 0.01 0.12| 0 0 100 0 0 0|irqbalance 0.1| 24B 11B 0 0.01 0.11| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.01 0.11| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.01 0.11| 0 0 100 0 0 0|irqbalance 0.0| 17B 11B 0 0.01 0.11| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.01 0.10| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0.08 0.03 0.11| 0 0 100 0 0 0|ksoftirqd/0 0.3|1316k 684k 0.22 0.07 0.12| 0 0 91 0 0 9|ksoftirqd/0 7.6| 20M 11M 0.21 0.08 0.12| 0 0 92 0 0 8|ksoftirqd/0 6.7| 20M 11M 0.35 0.12 0.13| 0 0 92 0 0 8|ksoftirqd/0 6.8| 20M 11M 0.27 0.13 0.14| 0 0 92 0 0 8|ksoftirqd/0 7.2| 20M 11M 0.30 0.15 0.14| 0 0 92 0 0 8|ksoftirqd/0 7.0|3980M 11M 0.31 0.17 0.15| 0 0 91 0 0 9|ksoftirqd/0 7.4| 20M 11M 0.30 0.18 0.15| 0 0 92 0 0 8|ksoftirqd/0 7.0| 20M 11M 0.30 0.19 0.16| 0 0 92 0 0 8|ksoftirqd/0 7.3| 20M 11M 0.44 0.24 0.17| 0 0 92 0 0 8|ksoftirqd/0 7.3| 20M 11M 0.34 0.23 0.17| 0 0 92 0 0 8|ksoftirqd/0 7.0| 20M 11M 0.36 0.24 0.18| 0 0 92 0 0 8|ksoftirqd/0 6.8| 20M 11M 0.43 0.27 0.19| 0 0 91 0 0 8|ksoftirqd/0 7.3| 20M 3970M 0.34 0.26 0.19| 0 0 92 0 0 8|ksoftirqd/0 7.0| 20M 11M 0.29 0.25 0.19| 0 0 93 0 0 7|ksoftirqd/0 6.3| 20M 11M 0.42 0.29 0.20| 0 0 92 0 0 8|ksoftirqd/0 7.0| 20M 11M 0.43 0.31 0.21| 0 0 92 0 0 8|ksoftirqd/0 6.7| 20M 11M 0.52 0.34 0.23| 0 0 92 0 0 8|ksoftirqd/0 6.6| 20M 11M 0.44 0.34 0.23| 0 0 92 0 0 8|ksoftirqd/0 6.8| 20M 11M 0.34 0.33 0.23| 0 0 92 0 0 8|ksoftirqd/0 7.1|3979M 11M 0.34 0.33 0.23| 0 0 92 0 0 8|ksoftirqd/0 6.7| 20M 10M 0.26 0.31 0.23| 0 0 92 0 0 8|ksoftirqd/0 7.1| 20M 11M 0.41 0.35 0.24| 0 0 92 0 0 8|ksoftirqd/0 6.6| 20M 11M 0.38 0.34 0.24| 0 0 92 0 0 8|ksoftirqd/0 6.8| 20M 11M 0.35 0.34 0.24| 0 0 92 0 0 8|ksoftirqd/0 6.9| 20M 10M 0.35 0.34 0.25| 0 0 92 0 0 7|ksoftirqd/0 6.5| 20M 11M 0.40 0.36 0.25| 0 0 92 0 0 8|ksoftirqd/0 7.2| 20M 3970M 0.25 0.32 0.24| 0 0 92 0 0 7|ksoftirqd/0 6.4| 20M 11M 0.21 0.31 0.24| 0 0 92 0 0 8|ksoftirqd/0 6.6| 20M 11M 0.26 0.31 0.24| 0 0 93 0 0 7|ksoftirqd/0 6.4| 20M 11M 0.21 0.30 0.24| 0 0 92 0 0 8|ksoftirqd/0 7.1| 19M 10M 0.13 0.27 0.23| 0 0 100 0 0 0|irqbalance 0.0| 17B 11B 0.08 0.24 0.22| 0 0 100 0 0 0|irqbalance 0.1| 18B 11B 0.05 0.22 0.22| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0.03 0.20 0.21| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0.02 0.18 0.21| 0 0 100 0 0 0|irqbalance 0.0| 17B 11B 0.01 0.16 0.20| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0.01 0.15 0.19| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.13 0.19| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.12 0.18| 0 0 100 0 0 0|irqbalance 0.0| 17B 11B 0 0.11 0.18| 0 0 100 0 0 0|irqbalance 0.1| 48B 11B 0 0.10 0.17| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.09 0.16| 0 0 100 0 0 0|irqbalance 0.1| 26B 11B 0 0.08 0.16| 0 0 100 0 0 0|irqbalance 0.0| 13B 7B 0 0.07 0.15| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.07 0.15| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.06 0.14| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.05 0.14| 0 0 100 0 0 0|irqbalance 0.0| 17B 11B 0 0.05 0.13| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0.06 0.06 0.13| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0.04 0.05 0.13| 0 0 100 0 0 0|irqbalance 0.1| 32B 11B 0.02 0.05 0.13| 0 0 100 0 0 0|irqbalance 0.0| 17B 11B 0.01 0.04 0.13| 0 0 100 0 0 0|irqbalance 0.1| 18B 11B 0.01 0.04 0.12| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.04 0.12| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.03 0.12| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.03 0.11| 0 0 100 0 0 0|irqbalance 0.1| 17B 11B 0 0.03 0.11| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.03 0.11| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.02 0.11| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.02 0.10| 0 0 100 0 0 0|irqbalance 0.1| 17B 11B 0 0.02 0.10| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.01 0.10| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.01 0.09| 0 0 100 0 0 0|irqbalance 0.0| 18B 11B 0 0.01 0.09| 0 0 100 0 0 0|irqbalance 0.1| 17B 11B 0 0.01 0.09| 0 0 100 0 0 0|irqbalance 0.0| 48B 11B 0 0.01 0.08| 0 0 100 0 0 0|irqbalance 0.1| 24B 11B 0 0.01 0.08| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.01 0.08| 0 0 100 0 0 0|irqbalance 0.1| 17B 11B 0 0.01 0.08| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.01 0.07| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.01 0.07| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.01 0.07| 0 0 100 0 0 0|irqbalance 0.1| 17B 11B 0 0.01 0.06| 0 0 100 0 0 0|irqbalance 0.0| 18B 11B 0 0.01 0.06| 0 0 100 0 0 0|irqbalance 0.1| 32B 11B 0 0.01 0.06| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.01 0.06| 0 0 100 0 0 0|irqbalance 0.1| 17B 11B 0 0.01 0.05| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.01 0.05| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.01 0.05| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0 0.01 0.05| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.01 0.05| 0 0 100 0 0 0|irqbalance 0.0| 17B 11B 0 0.01 0.05| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0 0.01 0.05| 0 0 100 0 0 0|irqbalance 0.0| 18B 11B root@jessie-rpi:~# IPv6 with iptables # Setup # ferm.conf # domain (ip ip6) chain (INPUT OUTPUT FORWARD) policy DROP; domain (ip ip6) chain (INPUT OUTPUT FORWARD) { mod conntrack ctstate INVALID DROP; mod conntrack ctstate (ESTABLISHED RELATED) ACCEPT; } domain (ip ip6) chain INPUT interface lo ACCEPT; domain (ip ip6) chain OUTPUT outerface lo ACCEPT; domain ip chain (INPUT OUTPUT FORWARD) proto icmp ACCEPT; domain ip6 chain (INPUT OUTPUT FORWARD) proto icmpv6 ACCEPT; domain (ip ip6) chain INPUT proto tcp dport (ssh 5102) ACCEPT; domain (ip ip6) chain OUTPUT { proto ipv6 daddr (10.0.1.5 10.0.3.5) ACCEPT; proto (tcp udp) dport domain ACCEPT; proto tcp dport ssh ACCEPT; } domain ip6 chain FORWARD saddr (fd2b:656a:6fdb:a3a8::/64 fd57:d1b1:9c79:40af::/64) ACCEPT; domain ip chain INPUT LOG log-prefix \u0026#39;iptables CHAIN=INPUT \u0026#39;; domain ip chain OUTPUT LOG log-prefix \u0026#39;iptables CHAIN=OUTPUT \u0026#39;; domain ip chain FORWARD LOG log-prefix \u0026#39;iptables CHAIN=FORWARD \u0026#39;; domain ip6 chain INPUT LOG log-prefix \u0026#39;iptables CHAIN=INPUT \u0026#39;; domain ip6 chain OUTPUT LOG log-prefix \u0026#39;iptables CHAIN=OUTPUT \u0026#39;; domain ip6 chain FORWARD LOG log-prefix \u0026#39;iptables CHAIN=FORWARD \u0026#39;; domain ip chain (INPUT OUTPUT FORWARD) REJECT reject-with icmp-admin-prohibited; domain ip6 chain (INPUT OUTPUT FORWARD) REJECT reject-with icmp6-adm-prohibited; iptables-save # # Generated by iptables-save v1.4.21 on Fri Jan 2 03:09:52 1970 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] -A INPUT -m conntrack --ctstate INVALID -j DROP -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 5102 -j ACCEPT -A INPUT -j LOG --log-prefix \u0026#34;iptables CHAIN=INPUT \u0026#34; -A INPUT -j REJECT --reject-with icmp-admin-prohibited -A FORWARD -m conntrack --ctstate INVALID -j DROP -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -p icmp -j ACCEPT -A FORWARD -j LOG --log-prefix \u0026#34;iptables CHAIN=FORWARD \u0026#34; -A FORWARD -j REJECT --reject-with icmp-admin-prohibited -A OUTPUT -m conntrack --ctstate INVALID -j DROP -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -o lo -j ACCEPT -A OUTPUT -p icmp -j ACCEPT -A OUTPUT -d 10.0.1.5/32 -p ipv6 -j ACCEPT -A OUTPUT -d 10.0.3.5/32 -p ipv6 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT -A OUTPUT -j LOG --log-prefix \u0026#34;iptables CHAIN=OUTPUT \u0026#34; -A OUTPUT -j REJECT --reject-with icmp-admin-prohibited COMMIT # Completed on Fri Jan 2 03:09:52 1970 # Generated by ip6tables-save v1.4.21 on Fri Jan 2 04:38:40 1970 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] -A INPUT -m conntrack --ctstate INVALID -j DROP -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p ipv6-icmp -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 5102 -j ACCEPT -A INPUT -j LOG --log-prefix \u0026#34;iptables CHAIN=INPUT \u0026#34; -A INPUT -j REJECT --reject-with icmp6-adm-prohibited -A FORWARD -m conntrack --ctstate INVALID -j DROP -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -p ipv6-icmp -j ACCEPT -A FORWARD -s fd2b:656a:6fdb:a3a8::/64 -j ACCEPT -A FORWARD -s fd57:d1b1:9c79:40af::/64 -j ACCEPT -A FORWARD -j LOG --log-prefix \u0026#34;iptables CHAIN=FORWARD \u0026#34; -A FORWARD -j REJECT --reject-with icmp6-adm-prohibited -A OUTPUT -m conntrack --ctstate INVALID -j DROP -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -o lo -j ACCEPT -A OUTPUT -p ipv6-icmp -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT -A OUTPUT -j LOG --log-prefix \u0026#34;iptables CHAIN=OUTPUT \u0026#34; -A OUTPUT -j REJECT --reject-with icmp6-adm-prohibited COMMIT # Completed on Fri Jan 2 04:38:40 1970 No Monitoring # Raspberry Pi # root@lenovo:~# iperf3 -c fd14:9aa4:e604:ec36::1 -i 30 -t 900 Connecting to host fd14:9aa4:e604:ec36::1, port 5201 [ 4] local fd2b:656a:6fdb:a3a8::5 port 35939 connected to fd14:9aa4:e604:ec36::1 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-30.00 sec 118 MBytes 33.1 Mbits/sec 261 1.22 MBytes [ 4] 30.00-60.00 sec 117 MBytes 32.6 Mbits/sec 51 1.52 MBytes [ 4] 60.00-90.00 sec 118 MBytes 33.0 Mbits/sec 72 1.56 MBytes [ 4] 90.00-120.00 sec 119 MBytes 33.3 Mbits/sec 103 1.79 MBytes [ 4] 120.00-150.00 sec 118 MBytes 32.9 Mbits/sec 94 1.92 MBytes [ 4] 150.00-180.00 sec 118 MBytes 32.9 Mbits/sec 160 1.48 MBytes [ 4] 180.00-210.00 sec 118 MBytes 32.9 Mbits/sec 211 1.69 MBytes [ 4] 210.00-240.00 sec 118 MBytes 32.9 Mbits/sec 101 1.58 MBytes [ 4] 240.00-270.00 sec 117 MBytes 32.8 Mbits/sec 166 1.92 MBytes [ 4] 270.00-300.00 sec 118 MBytes 33.0 Mbits/sec 107 1.33 MBytes [ 4] 300.00-330.00 sec 118 MBytes 32.9 Mbits/sec 187 1.62 MBytes [ 4] 330.00-360.00 sec 117 MBytes 32.8 Mbits/sec 63 2.26 MBytes [ 4] 360.00-390.00 sec 117 MBytes 32.7 Mbits/sec 603 1.63 MBytes [ 4] 390.00-420.00 sec 119 MBytes 33.1 Mbits/sec 382 1.33 MBytes [ 4] 420.00-450.00 sec 119 MBytes 33.2 Mbits/sec 32 1.57 MBytes [ 4] 450.00-480.00 sec 118 MBytes 32.9 Mbits/sec 297 1.76 MBytes [ 4] 480.00-510.00 sec 117 MBytes 32.8 Mbits/sec 115 1.84 MBytes [ 4] 510.00-540.00 sec 118 MBytes 32.9 Mbits/sec 166 1.96 MBytes [ 4] 540.00-570.00 sec 118 MBytes 33.1 Mbits/sec 195 1.56 MBytes [ 4] 570.00-600.00 sec 118 MBytes 33.0 Mbits/sec 140 1.19 MBytes [ 4] 600.00-630.00 sec 118 MBytes 32.9 Mbits/sec 262 1.69 MBytes [ 4] 630.00-660.00 sec 118 MBytes 33.0 Mbits/sec 264 1.30 MBytes [ 4] 660.00-690.00 sec 118 MBytes 33.1 Mbits/sec 117 1.54 MBytes [ 4] 690.00-720.00 sec 118 MBytes 33.1 Mbits/sec 72 1.41 MBytes [ 4] 720.00-750.00 sec 117 MBytes 32.6 Mbits/sec 102 1.76 MBytes [ 4] 750.00-780.00 sec 118 MBytes 33.0 Mbits/sec 265 1.21 MBytes [ 4] 780.00-810.00 sec 118 MBytes 33.1 Mbits/sec 26 1.77 MBytes [ 4] 810.00-840.00 sec 118 MBytes 32.9 Mbits/sec 159 1.30 MBytes [ 4] 840.00-870.00 sec 117 MBytes 32.8 Mbits/sec 293 1.20 MBytes [ 4] 870.00-900.00 sec 118 MBytes 32.9 Mbits/sec 56 1.62 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 3.45 GBytes 32.9 Mbits/sec 5122 sender [ 4] 0.00-900.00 sec 3.45 GBytes 32.9 Mbits/sec receiver iperf Done. root@lenovo:~# root@lenovo:~# iperf3 -c fd14:9aa4:e604:ec36::1 -i 30 -t 900 -R Connecting to host fd14:9aa4:e604:ec36::1, port 5201 Reverse mode, remote host fd14:9aa4:e604:ec36::1 is sending [ 4] local fd2b:656a:6fdb:a3a8::5 port 35963 connected to fd14:9aa4:e604:ec36::1 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-30.00 sec 123 MBytes 34.4 Mbits/sec [ 4] 30.00-60.00 sec 125 MBytes 35.0 Mbits/sec [ 4] 60.00-90.02 sec 124 MBytes 34.7 Mbits/sec [ 4] 90.02-120.00 sec 124 MBytes 34.7 Mbits/sec [ 4] 120.00-150.00 sec 124 MBytes 34.7 Mbits/sec [ 4] 150.00-180.00 sec 125 MBytes 35.0 Mbits/sec [ 4] 180.00-210.00 sec 124 MBytes 34.5 Mbits/sec [ 4] 210.00-240.00 sec 123 MBytes 34.5 Mbits/sec [ 4] 240.00-270.00 sec 124 MBytes 34.7 Mbits/sec [ 4] 270.00-300.00 sec 124 MBytes 34.8 Mbits/sec [ 4] 300.00-330.00 sec 124 MBytes 34.6 Mbits/sec [ 4] 330.00-360.00 sec 124 MBytes 34.7 Mbits/sec [ 4] 360.00-390.00 sec 125 MBytes 34.8 Mbits/sec [ 4] 390.00-420.00 sec 125 MBytes 34.8 Mbits/sec [ 4] 420.00-450.00 sec 124 MBytes 34.6 Mbits/sec [ 4] 450.00-480.00 sec 125 MBytes 35.0 Mbits/sec [ 4] 480.00-510.00 sec 125 MBytes 35.0 Mbits/sec [ 4] 510.00-540.00 sec 125 MBytes 34.9 Mbits/sec [ 4] 540.00-570.00 sec 126 MBytes 35.1 Mbits/sec [ 4] 570.00-600.00 sec 124 MBytes 34.7 Mbits/sec [ 4] 600.00-630.00 sec 123 MBytes 34.4 Mbits/sec [ 4] 630.00-660.00 sec 126 MBytes 35.1 Mbits/sec [ 4] 660.00-690.00 sec 125 MBytes 34.9 Mbits/sec [ 4] 690.00-720.00 sec 125 MBytes 35.0 Mbits/sec [ 4] 720.00-750.00 sec 124 MBytes 34.8 Mbits/sec [ 4] 750.00-780.00 sec 125 MBytes 34.9 Mbits/sec [ 4] 780.00-810.00 sec 124 MBytes 34.8 Mbits/sec [ 4] 810.00-840.00 sec 125 MBytes 34.8 Mbits/sec [ 4] 840.00-870.00 sec 124 MBytes 34.8 Mbits/sec [ 4] 870.00-900.00 sec 125 MBytes 35.1 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 3.65 GBytes 34.8 Mbits/sec 16597 sender [ 4] 0.00-900.00 sec 3.65 GBytes 34.8 Mbits/sec receiver iperf Done. root@lenovo:~# Raspberry Pi 2 # root@lenovo:~# iperf3 -c fd45:64bf:295c:5631::1 -i 30 -t 900 Connecting to host fd45:64bf:295c:5631::1, port 5201 [ 4] local fd57:d1b1:9c79:40af::5 port 43866 connected to fd45:64bf:295c:5631::1 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-30.00 sec 239 MBytes 66.9 Mbits/sec 110 813 KBytes [ 4] 30.00-60.00 sec 238 MBytes 66.6 Mbits/sec 23 1.31 MBytes [ 4] 60.00-90.00 sec 236 MBytes 66.1 Mbits/sec 18 2.40 MBytes [ 4] 90.00-120.00 sec 236 MBytes 66.1 Mbits/sec 289 2.03 MBytes [ 4] 120.00-150.00 sec 237 MBytes 66.4 Mbits/sec 177 1.41 MBytes [ 4] 150.00-180.00 sec 236 MBytes 66.1 Mbits/sec 116 1.75 MBytes [ 4] 180.00-210.00 sec 236 MBytes 66.1 Mbits/sec 63 1.59 MBytes [ 4] 210.00-240.00 sec 238 MBytes 66.5 Mbits/sec 88 1.19 MBytes [ 4] 240.00-270.00 sec 238 MBytes 66.5 Mbits/sec 41 1.66 MBytes [ 4] 270.00-300.00 sec 235 MBytes 65.7 Mbits/sec 197 1.53 MBytes [ 4] 300.00-330.00 sec 238 MBytes 66.5 Mbits/sec 45 1.13 MBytes [ 4] 330.00-360.00 sec 237 MBytes 66.4 Mbits/sec 324 1.95 MBytes [ 4] 360.00-390.00 sec 238 MBytes 66.4 Mbits/sec 62 1.45 MBytes [ 4] 390.00-420.00 sec 238 MBytes 66.5 Mbits/sec 21 1.79 MBytes [ 4] 420.00-450.00 sec 237 MBytes 66.4 Mbits/sec 181 1.83 MBytes [ 4] 450.00-480.00 sec 236 MBytes 66.0 Mbits/sec 80 1.88 MBytes [ 4] 480.00-510.00 sec 237 MBytes 66.3 Mbits/sec 32 1.74 MBytes [ 4] 510.00-540.00 sec 237 MBytes 66.4 Mbits/sec 82 1.18 MBytes [ 4] 540.00-570.00 sec 238 MBytes 66.6 Mbits/sec 55 1.33 MBytes [ 4] 570.00-600.00 sec 236 MBytes 66.1 Mbits/sec 69 1.80 MBytes [ 4] 600.00-630.00 sec 236 MBytes 66.1 Mbits/sec 387 1.31 MBytes [ 4] 630.00-660.00 sec 236 MBytes 65.9 Mbits/sec 16 1.72 MBytes [ 4] 660.00-690.00 sec 238 MBytes 66.5 Mbits/sec 85 1.85 MBytes [ 4] 690.00-720.00 sec 237 MBytes 66.2 Mbits/sec 44 1.83 MBytes [ 4] 720.00-750.00 sec 236 MBytes 66.1 Mbits/sec 57 1.63 MBytes [ 4] 750.00-780.00 sec 238 MBytes 66.4 Mbits/sec 79 1.87 MBytes [ 4] 780.00-810.00 sec 236 MBytes 65.9 Mbits/sec 28 1.82 MBytes [ 4] 810.00-840.00 sec 237 MBytes 66.3 Mbits/sec 83 1.79 MBytes [ 4] 840.00-870.00 sec 235 MBytes 65.7 Mbits/sec 209 1.78 MBytes [ 4] 870.00-900.00 sec 235 MBytes 65.7 Mbits/sec 14 1.57 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 6.94 GBytes 66.2 Mbits/sec 3075 sender [ 4] 0.00-900.00 sec 6.94 GBytes 66.2 Mbits/sec receiver iperf Done. root@lenovo:~# root@lenovo:~# iperf3 -c fd45:64bf:295c:5631::1 -i 30 -t 900 -R Connecting to host fd45:64bf:295c:5631::1, port 5201 Reverse mode, remote host fd45:64bf:295c:5631::1 is sending [ 4] local fd57:d1b1:9c79:40af::5 port 43870 connected to fd45:64bf:295c:5631::1 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-30.00 sec 247 MBytes 69.2 Mbits/sec [ 4] 30.00-60.00 sec 249 MBytes 69.7 Mbits/sec [ 4] 60.00-90.00 sec 249 MBytes 69.6 Mbits/sec [ 4] 90.00-120.00 sec 249 MBytes 69.7 Mbits/sec [ 4] 120.00-150.00 sec 249 MBytes 69.6 Mbits/sec [ 4] 150.00-180.00 sec 249 MBytes 69.6 Mbits/sec [ 4] 180.00-210.00 sec 250 MBytes 69.8 Mbits/sec [ 4] 210.00-240.00 sec 248 MBytes 69.3 Mbits/sec [ 4] 240.00-270.00 sec 249 MBytes 69.6 Mbits/sec [ 4] 270.00-300.00 sec 248 MBytes 69.5 Mbits/sec [ 4] 300.00-330.00 sec 250 MBytes 69.8 Mbits/sec [ 4] 330.00-360.00 sec 248 MBytes 69.3 Mbits/sec [ 4] 360.00-390.00 sec 247 MBytes 69.0 Mbits/sec [ 4] 390.00-420.00 sec 249 MBytes 69.6 Mbits/sec [ 4] 420.00-450.00 sec 249 MBytes 69.6 Mbits/sec [ 4] 450.00-480.00 sec 249 MBytes 69.5 Mbits/sec [ 4] 480.00-510.00 sec 247 MBytes 69.0 Mbits/sec [ 4] 510.00-540.00 sec 249 MBytes 69.6 Mbits/sec [ 4] 540.00-570.00 sec 246 MBytes 68.9 Mbits/sec [ 4] 570.00-600.00 sec 249 MBytes 69.6 Mbits/sec [ 4] 600.00-630.00 sec 249 MBytes 69.6 Mbits/sec [ 4] 630.00-660.00 sec 248 MBytes 69.4 Mbits/sec [ 4] 660.00-690.00 sec 243 MBytes 67.9 Mbits/sec [ 4] 690.00-720.00 sec 247 MBytes 69.2 Mbits/sec [ 4] 720.00-750.00 sec 249 MBytes 69.7 Mbits/sec [ 4] 750.00-780.00 sec 249 MBytes 69.6 Mbits/sec [ 4] 780.00-810.00 sec 250 MBytes 69.8 Mbits/sec [ 4] 810.00-840.00 sec 249 MBytes 69.5 Mbits/sec [ 4] 840.00-870.00 sec 249 MBytes 69.7 Mbits/sec [ 4] 870.00-900.00 sec 249 MBytes 69.6 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 7.28 GBytes 69.5 Mbits/sec 16734 sender [ 4] 0.00-900.00 sec 7.28 GBytes 69.5 Mbits/sec receiver iperf Done. root@lenovo:~# With dstat Monitoring # Raspberry Pi # root@lenovo:~# iperf3 -c fd14:9aa4:e604:ec36::1 -i 30 -t 900 Connecting to host fd14:9aa4:e604:ec36::1, port 5201 [ 4] local fd2b:656a:6fdb:a3a8::5 port 35898 connected to fd14:9aa4:e604:ec36::1 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-30.00 sec 118 MBytes 32.9 Mbits/sec 90 1.84 MBytes [ 4] 30.00-60.00 sec 116 MBytes 32.6 Mbits/sec 353 1.31 MBytes [ 4] 60.00-90.00 sec 117 MBytes 32.8 Mbits/sec 247 1.52 MBytes [ 4] 90.00-120.00 sec 118 MBytes 32.9 Mbits/sec 97 1.60 MBytes [ 4] 120.00-150.00 sec 117 MBytes 32.8 Mbits/sec 68 1.91 MBytes [ 4] 150.00-180.00 sec 116 MBytes 32.5 Mbits/sec 359 1.58 MBytes [ 4] 180.00-210.00 sec 118 MBytes 32.9 Mbits/sec 94 1.72 MBytes [ 4] 210.00-240.00 sec 117 MBytes 32.7 Mbits/sec 309 1.12 MBytes [ 4] 240.00-270.00 sec 118 MBytes 32.9 Mbits/sec 119 1.53 MBytes [ 4] 270.00-300.00 sec 118 MBytes 33.0 Mbits/sec 1 2.00 MBytes [ 4] 300.00-330.00 sec 117 MBytes 32.6 Mbits/sec 151 1.20 MBytes [ 4] 330.00-360.00 sec 118 MBytes 33.0 Mbits/sec 28 1.47 MBytes [ 4] 360.00-390.00 sec 117 MBytes 32.8 Mbits/sec 121 1.39 MBytes [ 4] 390.00-420.00 sec 118 MBytes 33.0 Mbits/sec 59 1.54 MBytes [ 4] 420.00-450.00 sec 118 MBytes 33.0 Mbits/sec 63 1.57 MBytes [ 4] 450.00-480.00 sec 118 MBytes 32.9 Mbits/sec 38 1.70 MBytes [ 4] 480.00-510.00 sec 117 MBytes 32.7 Mbits/sec 24 1.55 MBytes [ 4] 510.00-540.00 sec 117 MBytes 32.8 Mbits/sec 61 1.19 MBytes [ 4] 540.00-570.00 sec 117 MBytes 32.8 Mbits/sec 77 1.67 MBytes [ 4] 570.00-600.00 sec 117 MBytes 32.8 Mbits/sec 128 1.55 MBytes [ 4] 600.00-630.00 sec 117 MBytes 32.7 Mbits/sec 111 1.37 MBytes [ 4] 630.00-660.00 sec 118 MBytes 33.0 Mbits/sec 18 1.84 MBytes [ 4] 660.00-690.00 sec 117 MBytes 32.6 Mbits/sec 147 1.79 MBytes [ 4] 690.00-720.00 sec 118 MBytes 32.9 Mbits/sec 147 1.16 MBytes [ 4] 720.00-750.00 sec 117 MBytes 32.6 Mbits/sec 176 1.46 MBytes [ 4] 750.00-780.00 sec 118 MBytes 33.0 Mbits/sec 120 1.93 MBytes [ 4] 780.00-810.00 sec 117 MBytes 32.8 Mbits/sec 310 1.53 MBytes [ 4] 810.00-840.00 sec 118 MBytes 32.9 Mbits/sec 23 1.51 MBytes [ 4] 840.00-870.00 sec 117 MBytes 32.6 Mbits/sec 140 1.81 MBytes [ 4] 870.00-900.00 sec 117 MBytes 32.8 Mbits/sec 99 1.34 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 3.44 GBytes 32.8 Mbits/sec 3778 sender [ 4] 0.00-900.00 sec 3.44 GBytes 32.8 Mbits/sec receiver iperf Done. root@lenovo:~# root@lenovo:~# iperf3 -c fd14:9aa4:e604:ec36::1 -i 30 -t 900 -R Connecting to host fd14:9aa4:e604:ec36::1, port 5201 Reverse mode, remote host fd14:9aa4:e604:ec36::1 is sending [ 4] local fd2b:656a:6fdb:a3a8::5 port 35904 connected to fd14:9aa4:e604:ec36::1 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-30.00 sec 122 MBytes 34.2 Mbits/sec [ 4] 30.00-60.00 sec 124 MBytes 34.7 Mbits/sec [ 4] 60.00-90.00 sec 125 MBytes 34.9 Mbits/sec [ 4] 90.00-120.00 sec 124 MBytes 34.6 Mbits/sec [ 4] 120.00-150.00 sec 125 MBytes 35.0 Mbits/sec [ 4] 150.00-180.00 sec 124 MBytes 34.6 Mbits/sec [ 4] 180.00-210.00 sec 124 MBytes 34.5 Mbits/sec [ 4] 210.00-240.00 sec 124 MBytes 34.6 Mbits/sec [ 4] 240.00-270.00 sec 124 MBytes 34.6 Mbits/sec [ 4] 270.00-300.00 sec 125 MBytes 34.9 Mbits/sec [ 4] 300.00-330.00 sec 124 MBytes 34.6 Mbits/sec [ 4] 330.00-360.00 sec 124 MBytes 34.6 Mbits/sec [ 4] 360.00-390.00 sec 124 MBytes 34.8 Mbits/sec [ 4] 390.00-420.00 sec 124 MBytes 34.7 Mbits/sec [ 4] 420.00-450.00 sec 124 MBytes 34.6 Mbits/sec [ 4] 450.00-480.00 sec 124 MBytes 34.7 Mbits/sec [ 4] 480.00-510.00 sec 124 MBytes 34.7 Mbits/sec [ 4] 510.00-540.00 sec 122 MBytes 34.1 Mbits/sec [ 4] 540.00-570.00 sec 124 MBytes 34.7 Mbits/sec [ 4] 570.00-600.00 sec 124 MBytes 34.6 Mbits/sec [ 4] 600.00-630.00 sec 123 MBytes 34.5 Mbits/sec [ 4] 630.00-660.00 sec 125 MBytes 34.9 Mbits/sec [ 4] 660.00-690.00 sec 123 MBytes 34.3 Mbits/sec [ 4] 690.00-720.00 sec 124 MBytes 34.6 Mbits/sec [ 4] 720.00-750.00 sec 125 MBytes 34.9 Mbits/sec [ 4] 750.00-780.00 sec 123 MBytes 34.3 Mbits/sec [ 4] 780.00-810.00 sec 124 MBytes 34.7 Mbits/sec [ 4] 810.00-840.00 sec 125 MBytes 34.9 Mbits/sec [ 4] 840.00-870.00 sec 124 MBytes 34.6 Mbits/sec [ 4] 870.00-900.00 sec 122 MBytes 34.1 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 3.63 GBytes 34.6 Mbits/sec 16597 sender [ 4] 0.00-900.00 sec 3.63 GBytes 34.6 Mbits/sec receiver iperf Done. root@lenovo:~# root@lace:~# dstat --nocolor -l -c --top-cpu -n 30 \u0026gt; res ^Croot@lace:~# cat res ---load-avg--- ----total-cpu-usage---- -most-expensive- -net/total- 1m 5m 15m |usr sys idl wai hiq siq| cpu process | recv send 0 0.01 0.05| 0 0 91 0 0 9|ksoftirqd/0 8.3| 0 0 0.08 0.03 0.05| 0 0 73 0 0 27|ksoftirqd/0 25|1231k 2364k 0.55 0.15 0.09| 0 0 0 0 0 99|ksoftirqd/0 90|4407k 8560k 0.73 0.23 0.12| 0 0 0 0 0 100|ksoftirqd/0 92|4503k 8751k 0.91 0.32 0.15| 0 0 0 0 0 99|ksoftirqd/0 91|4448k 8650k 1.00 0.40 0.19| 0 0 0 0 0 99|ksoftirqd/0 92|4460k 8676k 1.17 0.51 0.23| 0 0 0 0 0 99|ksoftirqd/0 90|4442k 8624k 1.40 0.62 0.27| 0 0 0 0 0 99|ksoftirqd/0 91|4490k 8744k 1.40 0.69 0.31| 0 0 0 0 0 99|ksoftirqd/0 90|4384k 8530k 1.24 0.72 0.33| 0 0 0 0 0 100|ksoftirqd/0 91|4521k 8785k 1.15 0.75 0.35| 0 0 0 0 0 100|ksoftirqd/0 91|4443k 8651k 1.16 0.79 0.38| 0 0 0 0 0 100|ksoftirqd/0 92|4476k 8695k 1.24 0.84 0.41| 0 0 0 0 0 99|ksoftirqd/0 90|4424k 8627k 1.20 0.87 0.43| 0 0 0 0 0 100|ksoftirqd/0 92|4484k 8735k 1.12 0.88 0.45| 0 0 0 0 0 100|ksoftirqd/0 91|4478k 8703k 1.07 0.89 0.47| 0 0 0 0 0 100|ksoftirqd/0 91|4475k 8723k 1.04 0.90 0.48| 0 0 0 0 0 100|ksoftirqd/0 92|4469k 8692k 1.16 0.94 0.51| 0 0 0 0 0 99|ksoftirqd/0 92|4484k 3968M 1.10 0.95 0.52| 0 1 0 0 0 99|ksoftirqd/0 91|4421k 8609k 1.19 0.99 0.55| 0 0 0 0 0 100|ksoftirqd/0 91|4436k 8634k 1.28 1.03 0.58| 0 0 0 0 0 100|ksoftirqd/0 91|4479k 8724k 1.24 1.05 0.60| 0 0 0 0 0 100|ksoftirqd/0 91|4450k 8651k 1.42 1.11 0.63| 0 0 0 0 0 99|ksoftirqd/0 92|4456k 8685k 1.25 1.10 0.65| 0 0 0 0 0 99|ksoftirqd/0 91|4447k 8662k 1.29 1.12 0.67| 0 0 0 0 0 100|ksoftirqd/0 91|4464k 8695k 1.17 1.11 0.68| 0 0 0 0 0 99|ksoftirqd/0 91|4475k 8701k 1.25 1.13 0.70| 0 0 0 0 0 100|ksoftirqd/0 91|4458k 8665k 1.15 1.12 0.71| 0 0 0 0 0 100|ksoftirqd/0 91|3964M 8677k 1.09 1.10 0.72| 0 0 0 0 0 99|ksoftirqd/0 91|4461k 8671k 1.12 1.11 0.73| 0 0 0 0 0 100|ksoftirqd/0 92|4450k 8666k 1.13 1.12 0.75| 0 0 0 0 0 100|ksoftirqd/0 92|4481k 8721k 0.92 1.07 0.74| 0 0 24 0 0 75|ksoftirqd/0 67|3229k 6301k 0.56 0.97 0.72| 0 0 100 0 0 0|kworker/0:2 0.1| 17B 13B 0.34 0.88 0.70| 0 0 100 0 0 0|kworker/u2:2 0.0| 16B 11B 0.61 0.89 0.71| 0 0 27 0 0 73|ksoftirqd/0 68|6775k 3544k 1.03 0.96 0.74| 0 0 0 0 0 100|ksoftirqd/0 91|9100k 4799k 1.08 0.98 0.75| 0 0 0 0 0 99|ksoftirqd/0 92|9092k 4794k 1.11 1.00 0.76| 0 0 0 0 0 100|ksoftirqd/0 92|9202k 4847k 1.13 1.02 0.78| 0 0 0 0 0 99|ksoftirqd/0 92|9150k 4827k 1.16 1.03 0.79| 0 0 0 0 0 100|ksoftirqd/0 92|9138k 4820k 1.10 1.03 0.79| 0 0 0 0 0 99|ksoftirqd/0 92|9073k 4781k 1.13 1.04 0.81| 0 0 0 0 0 99|ksoftirqd/0 92|9139k 4808k 1.23 1.07 0.82| 0 0 0 0 0 99|ksoftirqd/0 91|9019k 4762k 1.20 1.08 0.83| 0 0 0 0 0 100|ksoftirqd/0 92|9242k 4862k 1.40 1.14 0.86| 0 0 0 0 0 100|ksoftirqd/0 92|9167k 4830k 1.36 1.16 0.88| 0 0 0 0 0 99|ksoftirqd/0 91|9132k 4820k 1.22 1.14 0.88| 0 0 0 0 0 100|ksoftirqd/0 92|9159k 4811k 1.13 1.13 0.88| 0 0 0 0 0 100|ksoftirqd/0 92|9042k 4768k 1.08 1.12 0.88| 0 0 0 0 0 100|ksoftirqd/0 92|9180k 4848k 1.05 1.10 0.89| 0 0 0 0 0 100|ksoftirqd/0 91|9096k 4787k 1.10 1.11 0.90| 0 0 0 0 0 100|ksoftirqd/0 92|9077k 3964M 1.06 1.10 0.90| 0 0 0 0 0 99|ksoftirqd/0 90|9108k 4810k 1.31 1.15 0.92| 0 0 0 0 0 100|ksoftirqd/0 91|9082k 4782k 1.19 1.14 0.93| 0 0 0 0 0 100|ksoftirqd/0 91|9144k 4826k 1.11 1.13 0.93| 0 0 0 0 0 100|ksoftirqd/0 92|9129k 4799k 1.07 1.11 0.93| 0 0 0 0 0 99|ksoftirqd/0 91|9034k 4777k 1.23 1.15 0.95| 0 0 0 0 0 99|ksoftirqd/0 92|9152k 4821k 1.20 1.15 0.96| 0 0 0 0 0 99|ksoftirqd/0 92|9171k 4818k 1.18 1.15 0.96| 0 0 0 0 0 99|ksoftirqd/0 91|9087k 4806k 1.11 1.14 0.96| 0 0 0 0 0 99|ksoftirqd/0 92|9041k 4777k 1.15 1.14 0.97| 0 0 0 0 0 99|ksoftirqd/0 92|3968M 4786k 1.16 1.15 0.97| 0 0 0 0 0 100|ksoftirqd/0 93|9196k 4855k 1.23 1.16 0.98| 0 0 0 0 0 99|ksoftirqd/0 91|9108k 4794k 1.19 1.16 0.99| 0 0 1 0 0 99|ksoftirqd/0 91|9058k 4785k 0.88 1.10 0.97| 0 0 72 0 0 28|ksoftirqd/0 25|2413k 1279k 0.54 0.99 0.94| 0 0 100 0 0 0|kworker/u2:1 0.0| 17B 11B 0.32 0.90 0.91| 0 0 99 0 0 0|kworker/0:2 0.0| 48B 11B 0.20 0.81 0.88| 0 0 99 0 0 0|kworker/0:2 0.1| 24B 11B 0.12 0.73 0.85| 0 0 100 0 0 0|kworker/0:2 0.0| 18B 11B root@lace:~# Raspberry Pi 2 # root@lenovo:~# iperf3 -c fd45:64bf:295c:5631::1 -i 30 -t 900 Connecting to host fd45:64bf:295c:5631::1, port 5201 [ 4] local fd57:d1b1:9c79:40af::5 port 43781 connected to fd45:64bf:295c:5631::1 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-30.00 sec 238 MBytes 66.7 Mbits/sec 128 1.18 MBytes [ 4] 30.00-60.00 sec 239 MBytes 66.8 Mbits/sec 35 1.42 MBytes [ 4] 60.00-90.00 sec 238 MBytes 66.4 Mbits/sec 424 1.26 MBytes [ 4] 90.00-120.00 sec 238 MBytes 66.5 Mbits/sec 45 1.45 MBytes [ 4] 120.00-150.00 sec 237 MBytes 66.1 Mbits/sec 38 1.58 MBytes [ 4] 150.00-180.00 sec 238 MBytes 66.7 Mbits/sec 93 1.29 MBytes [ 4] 180.00-210.00 sec 238 MBytes 66.6 Mbits/sec 258 1.82 MBytes [ 4] 210.00-240.00 sec 236 MBytes 66.0 Mbits/sec 103 1.61 MBytes [ 4] 240.00-270.00 sec 237 MBytes 66.3 Mbits/sec 118 1.47 MBytes [ 4] 270.00-300.00 sec 236 MBytes 66.1 Mbits/sec 162 1.76 MBytes [ 4] 300.00-330.00 sec 237 MBytes 66.3 Mbits/sec 120 1.59 MBytes [ 4] 330.00-360.00 sec 237 MBytes 66.4 Mbits/sec 57 1.23 MBytes [ 4] 360.00-390.00 sec 238 MBytes 66.5 Mbits/sec 170 1.51 MBytes [ 4] 390.00-420.00 sec 237 MBytes 66.2 Mbits/sec 167 1.80 MBytes [ 4] 420.00-450.00 sec 239 MBytes 66.8 Mbits/sec 97 1.25 MBytes [ 4] 450.00-480.00 sec 238 MBytes 66.5 Mbits/sec 55 1.82 MBytes [ 4] 480.00-510.00 sec 237 MBytes 66.4 Mbits/sec 183 1.15 MBytes [ 4] 510.00-540.00 sec 237 MBytes 66.2 Mbits/sec 19 1.47 MBytes [ 4] 540.00-570.00 sec 238 MBytes 66.5 Mbits/sec 39 1.59 MBytes [ 4] 570.00-600.00 sec 236 MBytes 65.9 Mbits/sec 110 1.87 MBytes [ 4] 600.00-630.00 sec 234 MBytes 65.6 Mbits/sec 121 1.17 MBytes [ 4] 630.00-660.00 sec 238 MBytes 66.5 Mbits/sec 92 1.46 MBytes [ 4] 660.00-690.00 sec 234 MBytes 65.5 Mbits/sec 51 1.77 MBytes [ 4] 690.00-720.00 sec 231 MBytes 64.5 Mbits/sec 39 1.82 MBytes [ 4] 720.00-750.00 sec 236 MBytes 66.1 Mbits/sec 64 1.76 MBytes [ 4] 750.00-780.00 sec 236 MBytes 65.9 Mbits/sec 63 1.33 MBytes [ 4] 780.00-810.00 sec 237 MBytes 66.2 Mbits/sec 50 1.76 MBytes [ 4] 810.00-840.00 sec 239 MBytes 66.8 Mbits/sec 28 1.82 MBytes [ 4] 840.00-870.00 sec 238 MBytes 66.6 Mbits/sec 20 1.81 MBytes [ 4] 870.00-900.00 sec 236 MBytes 66.0 Mbits/sec 82 1.91 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 6.94 GBytes 66.2 Mbits/sec 3031 sender [ 4] 0.00-900.00 sec 6.94 GBytes 66.2 Mbits/sec receiver iperf Done. root@lenovo:~# root@lenovo:~# iperf3 -c fd45:64bf:295c:5631::1 -i 30 -t 900 -R Connecting to host fd45:64bf:295c:5631::1, port 5201 Reverse mode, remote host fd45:64bf:295c:5631::1 is sending [ 4] local fd57:d1b1:9c79:40af::5 port 43787 connected to fd45:64bf:295c:5631::1 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-30.00 sec 248 MBytes 69.4 Mbits/sec [ 4] 30.00-60.00 sec 247 MBytes 69.1 Mbits/sec [ 4] 60.00-90.00 sec 239 MBytes 66.8 Mbits/sec [ 4] 90.00-120.00 sec 249 MBytes 69.5 Mbits/sec [ 4] 120.00-150.00 sec 249 MBytes 69.5 Mbits/sec [ 4] 150.00-180.00 sec 249 MBytes 69.6 Mbits/sec [ 4] 180.00-210.00 sec 247 MBytes 69.2 Mbits/sec [ 4] 210.00-240.00 sec 248 MBytes 69.3 Mbits/sec [ 4] 240.00-270.00 sec 247 MBytes 69.2 Mbits/sec [ 4] 270.00-300.00 sec 249 MBytes 69.5 Mbits/sec [ 4] 300.00-330.00 sec 250 MBytes 69.9 Mbits/sec [ 4] 330.00-360.00 sec 248 MBytes 69.4 Mbits/sec [ 4] 360.00-390.00 sec 250 MBytes 69.8 Mbits/sec [ 4] 390.00-420.00 sec 249 MBytes 69.6 Mbits/sec [ 4] 420.00-450.00 sec 249 MBytes 69.5 Mbits/sec [ 4] 450.00-480.00 sec 246 MBytes 68.8 Mbits/sec [ 4] 480.00-510.00 sec 250 MBytes 69.9 Mbits/sec [ 4] 510.00-540.00 sec 249 MBytes 69.6 Mbits/sec [ 4] 540.00-570.00 sec 249 MBytes 69.6 Mbits/sec [ 4] 570.00-600.00 sec 248 MBytes 69.5 Mbits/sec [ 4] 600.00-630.00 sec 249 MBytes 69.5 Mbits/sec [ 4] 630.00-660.00 sec 248 MBytes 69.3 Mbits/sec [ 4] 660.00-690.00 sec 250 MBytes 69.9 Mbits/sec [ 4] 690.00-720.00 sec 247 MBytes 69.1 Mbits/sec [ 4] 720.00-750.00 sec 250 MBytes 70.0 Mbits/sec [ 4] 750.00-780.00 sec 249 MBytes 69.6 Mbits/sec [ 4] 780.00-810.00 sec 250 MBytes 69.9 Mbits/sec [ 4] 810.00-840.00 sec 248 MBytes 69.5 Mbits/sec [ 4] 840.00-870.00 sec 248 MBytes 69.4 Mbits/sec [ 4] 870.00-900.00 sec 248 MBytes 69.4 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-900.00 sec 7.27 GBytes 69.4 Mbits/sec 17251 sender [ 4] 0.00-900.00 sec 7.27 GBytes 69.4 Mbits/sec receiver iperf Done. root@lenovo:~# root@jessie-rpi:~# dstat --nocolor -l -c --top-cpu -n 30 \u0026gt; res ^Croot@jessie-rpi:~# cat res ---load-avg--- ----total-cpu-usage---- -most-expensive- -net/total- 1m 5m 15m |usr sys idl wai hiq siq| cpu process | recv send 0 0.01 0.05| 0 0 99 0 0 1|ksoftirqd/0 0.7| 0 0 0.05 0.03 0.05| 0 0 100 0 0 0|irqbalance 0.0| 28B 17B 0.03 0.03 0.05| 0 0 100 0 0 0|irqbalance 0.1| 17B 11B 0.02 0.02 0.05| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0.06 0.04 0.05| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0.09 0.05 0.05| 0 0 100 0 0 0|irqbalance 0.0| 18B 11B 0.31 0.11 0.07| 0 0 86 0 0 14|ksoftirqd/0 14|5529k 10M 0.64 0.21 0.10| 0 0 76 0 0 24|ksoftirqd/0 23|9027k 17M 0.78 0.28 0.13| 0 0 77 0 0 23|ksoftirqd/0 23|3968M 17M 0.99 0.38 0.17| 0 0 76 0 0 24|ksoftirqd/0 23|9083k 17M 1.12 0.47 0.21| 0 0 77 0 0 23|ksoftirqd/0 23|8975k 17M 1.07 0.52 0.23| 0 0 77 0 0 23|ksoftirqd/0 22|8990k 17M 0.95 0.55 0.25| 0 0 76 0 0 24|ksoftirqd/0 23|9042k 17M 0.97 0.59 0.28| 0 0 76 0 0 24|ksoftirqd/0 23|9025k 17M 0.90 0.62 0.29| 0 0 77 0 0 23|ksoftirqd/0 23|8942k 17M 0.86 0.64 0.31| 0 0 76 0 0 23|ksoftirqd/0 23|9003k 3977M 0.92 0.67 0.33| 0 0 76 0 0 23|ksoftirqd/0 23|9023k 17M 0.80 0.67 0.34| 0 0 76 0 0 23|ksoftirqd/0 23|9002k 17M 0.88 0.70 0.36| 0 0 76 0 0 23|ksoftirqd/0 23|8975k 17M 1.00 0.75 0.39| 0 0 76 0 0 24|ksoftirqd/0 23|9052k 17M 1.00 0.77 0.41| 0 0 76 0 0 24|ksoftirqd/0 23|9024k 17M 0.93 0.78 0.42| 0 0 76 0 0 24|ksoftirqd/0 23|8996k 17M 0.96 0.80 0.44| 0 0 76 0 0 24|ksoftirqd/0 23|9054k 17M 0.97 0.82 0.46| 0 0 76 0 0 23|ksoftirqd/0 23|8931k 17M 0.98 0.83 0.47| 0 0 76 0 0 24|ksoftirqd/0 23|3968M 17M 0.86 0.82 0.48| 0 0 76 0 0 24|ksoftirqd/0 23|9012k 17M 0.86 0.82 0.49| 0 0 77 0 0 23|ksoftirqd/0 22|8842k 17M 0.91 0.84 0.51| 0 0 76 0 0 23|ksoftirqd/0 23|8966k 17M 0.95 0.85 0.52| 0 0 76 0 0 23|ksoftirqd/0 23|9020k 17M 0.97 0.87 0.54| 0 0 77 0 0 23|ksoftirqd/0 22|8730k 17M 0.98 0.88 0.55| 0 0 77 0 0 23|ksoftirqd/0 23|8914k 17M 0.99 0.89 0.57| 0 0 77 0 0 23|ksoftirqd/0 23|8979k 3977M 0.99 0.90 0.58| 0 0 77 0 0 23|ksoftirqd/0 23|9003k 17M 0.88 0.88 0.59| 0 0 77 0 0 23|ksoftirqd/0 23|8936k 17M 0.92 0.89 0.60| 0 0 76 0 0 24|ksoftirqd/0 23|9051k 17M 0.95 0.90 0.61| 0 0 77 0 0 23|ksoftirqd/0 23|8974k 17M 0.75 0.86 0.61| 0 0 91 0 0 9|ksoftirqd/0 9.0|3524k 6898k 0.45 0.78 0.59| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B 0.28 0.70 0.57| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0.17 0.64 0.55| 0 0 100 0 0 0|irqbalance 0.0| 17B 11B 0.10 0.58 0.53| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0.35 0.59 0.54| 0 0 79 0 0 21|ksoftirqd/0 20| 15M 8066k 0.60 0.63 0.55| 0 0 75 0 0 25|ksoftirqd/0 24| 18M 9614k 0.76 0.66 0.57| 0 0 76 0 0 24|ksoftirqd/0 23| 17M 9340k 0.85 0.69 0.58| 0 0 76 0 0 24|ksoftirqd/0 24|3977M 9495k 0.91 0.72 0.60| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 9632k 0.95 0.75 0.61| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 9666k 0.97 0.77 0.62| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 9582k 0.98 0.80 0.63| 0 0 75 0 0 25|ksoftirqd/0 24| 18M 9591k 0.88 0.78 0.63| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 9621k 0.93 0.80 0.64| 0 0 75 0 0 25|ksoftirqd/0 24| 18M 9584k 1.02 0.84 0.66| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 3969M 1.14 0.89 0.68| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 9613k 1.08 0.90 0.69| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 9663k 0.99 0.89 0.70| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 9641k 1.00 0.90 0.70| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 9633k 1.00 0.91 0.71| 0 0 75 0 0 25|ksoftirqd/0 24| 18M 9577k 1.00 0.92 0.72| 0 0 75 0 0 25|ksoftirqd/0 24| 18M 9637k 1.00 0.93 0.73| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 9671k 1.00 0.93 0.74| 0 0 75 0 0 25|ksoftirqd/0 25|3977M 9611k 1.00 0.94 0.75| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 9653k 1.00 0.95 0.76| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 9610k 0.92 0.93 0.76| 0 0 75 0 0 25|ksoftirqd/0 24| 18M 9596k 0.95 0.94 0.77| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 9676k 0.97 0.95 0.78| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 9605k 0.93 0.94 0.78| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 9658k 0.96 0.94 0.78| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 3969M 0.91 0.93 0.78| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 9680k 0.95 0.94 0.79| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 9614k 0.97 0.94 0.80| 0 0 75 0 0 25|ksoftirqd/0 24| 18M 9614k 0.98 0.95 0.80| 0 0 75 0 0 25|ksoftirqd/0 25| 18M 9645k 0.65 0.87 0.78| 0 0 96 0 0 4|ksoftirqd/0 4.2|3064k 1641k 0.39 0.79 0.76| 0 0 100 0 0 0|irqbalance 0.1| 48B 11B 0.24 0.71 0.73| 0 0 100 0 0 0|irqbalance 0.0| 25B 11B 0.14 0.65 0.71| 0 0 100 0 0 0|irqbalance 0.1| 16B 11B 0.09 0.58 0.69| 0 0 100 0 0 0|irqbalance 0.0| 16B 11B root@jessie-rpi:~# Results # \u0026mdash; Forward\nMbit/s Forward\nMbit/s\n(%cpu) Reverse\nMbit/s Reverse\nMbit/s\n(%cpu) Forward\nMbit/s Forward\nMbit/s\n(cpu%) Reverse\nMbit/s Reverse\nMbit/s\n(%cpu) Forward\nMbit/s Forward\nMbit/s\n(%cpu) Reverse\nMbit/s Reverse\nMbit/s\n(%cpu) \u0026mdash; IPv4 \u0026mdash; \u0026mdash; \u0026mdash; IPv6 \u0026mdash; \u0026mdash; \u0026mdash; \u0026mdash; \u0026mdash; IPv6 with iptables \u0026mdash; RPi 65.6 65.2\n(100%) 62.9 63.2\n(100%) 47.5 47.3\n(100%) 50.4 50.2\n(100%) 32.9 32.8\n(100%) 34.8 34.6\n(100%) RPi2 89.3 89.3\n(3%) 78.0 78.1\n(5%) 85.6 84.7\n(20%) 78.2 78.2\n(8%) 66.2 66.2\n(23%) 69.5 69.4\n(25%) ","date":"25 February 2015","externalUrl":null,"permalink":"/projects/raspberrypirouterbenchmark/","section":"Projects","summary":"Introduction # My ISP doesn’t provide IPv6 and the wireless router they give out does not work with IPv6 Tunnels. So I set up a Raspberry Pi as a router on a stick to route IPv6 on my home network to my IPv6 tunnel provider over IPv4. I mostly did this to start getting familiar with IPv6; it does work and my home computers and phone get IPv6 addresses on the Internet. I occasionally do a netstat and see a bunch of tcp6 connections established to google, facebook and youtube. My one worry was the performance of the Raspberry Pi, it’s a single core Arm v6 running at 700Mhz with a 100M ethernet that sits on the USB bus. I have in the past noticed that when the Raspberry Pi is busy (mostly with cron) the ability for it to forward packets does slow down. Very occasionally it drops packets and makes the connection unusable for a short while. My internet connection is FTTC/fiber to the cabinet and +100M, so I’m already limiting my connection speed if they go over the Raspberry Pi. I always meant to run some benchmarks on the Pi to see just how fast it can ship packets. With the advent of the newer Raspberry Pi 2 with its quad Core Arm v8 running at 900Mhz I decided to do some proper testing.\n","title":"Raspberry Pi Router Benchmark","type":"projects"},{"content":"Port knocking is the act of connecting to a port or sequence of ports that in turn opens up another port. There are many methods to do this; read more about them on the Port Knocking page on the Arch Linux wiki. I like just using the built in iptables module recent. I have used this for years to have port 22 closed unless the right port connection sequence is performed. This does not really give much more security, but it does clean up the system log from failed password attempts.\nMore recently I needed to ssh to my machine from an Internet connection that only allowed port 80(http) or port 443(https) traffic. One way to do this is run a second IP on the machine, however that feels like a bit of a waste of an IP. So I decided to combine both the iptables recent module and iptables port redirecting. My solution is to search for some secret text in the https connection and if this secret text is found, to remember that source IP and when the next connection comes in redirect to port 22 just for that source IP. Thus connecting to the sshd process.\nFirst you need to search for tcp connections coming in the INPUT chain of the filter table. We are only interested in tcp connections to port 443. Also we need that this connection is established, so make sure to have this rule before any blanket acceptance of established connections. To help with performance we only want to search for text at the start of the connection; we don\u0026rsquo;t care about long-standing connections. If all these things match then we set the recent name to ssh. This records the source IP in temporary memory that can be later checked. Something like this works for me:\niptables -A INPUT -p tcp -m tcp --dport 443 -m conntrack --ctstate ESTABLISHED -m connbytes --connbytes 0:255 --connbytes-mode bytes --connbytes-dir original -m string --string \u0026#34;secret\u0026#34; --algo bm --to 65535 -m recent --set --name ssh --rsource -j ACCEPT Next we want to insert a rule in the PREROUTING chain in the nat table. We only want to match on tcp connections to port 443. We also check to see if the source IP address is in the ssh recent storage. If all these things are true, then redirect this connection to port 22. Again, something like this works for me:\niptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -m recent --rcheck --seconds 300 --name ssh --rsource -j REDIRECT --to-ports 22 Then in my ~/.ssh/config file I can put in a stanza like this:\nHost bob HostName bob.example.org ProxyCommand sh -c \u0026#39;echo \u0026#34;secret\u0026#34; | nc -w30 %h 443 \u0026amp;\u0026gt; /dev/null \u0026amp;\u0026amp; nc -w30 %h 443\u0026#39; Finally remember to change the secret to something long. Also if you happen to use ferm iptables, then this should work:\ndomain ip chain INPUT proto tcp dport 443 mod conntrack ctstate ESTABLISHED mod connbytes connbytes 0:255 connbytes-dir original connbytes-mode bytes mod string algo bm string \u0026#34;secret\u0026#34; mod recent name ssh set ACCEPT; domain ip table nat chain PREROUTING proto tcp dport 443 mod recent name ssh rcheck seconds 300 REDIRECT to-ports 22; ","date":"21 January 2015","externalUrl":null,"permalink":"/posts/portknockhttp/","section":"Posts","summary":"Port knocking is the act of connecting to a port or sequence of ports that in turn opens up another port. There are many methods to do this; read more about them on the Port Knocking page on the Arch Linux wiki. I like just using the built in iptables module recent. I have used this for years to have port 22 closed unless the right port connection sequence is performed. This does not really give much more security, but it does clean up the system log from failed password attempts.\n","title":"Port Knock with HTTP","type":"posts"},{"content":"If you try to extract a initrd and only file some uncompressed cpio:\n$ file /boot/initrd.img-3.14-1-amd64 /boot/initrd.img-3.14-1-amd64: ASCII cpio archive (SVR4 with no CRC) $ cat /boot/initrd.img-3.14-1-amd64 | cpio -t kernel kernel/x86 kernel/x86/microcode kernel/x86/microcode/GenuineIntel.bin 42 blocks $ Don\u0026rsquo;t fear, the real initrd is stored just after that in the same file. Extract as follows:\n$ cat /boot/initrd.img-3.14-1-amd64 | cpio -t | grep blocks 42 blocks $ $ dd if=/boot/initrd.img-3.14-1-amd64 bs=1 skip=$(( 41*512 )) count=512 2\u0026gt; /dev/null | hd | grep \u0026#34;1f 8b 08\u0026#34; 00000090 1f 8b 08 00 b4 00 bd 53 00 03 ec 5b 7d 78 53 55 |.......S...[}xSU| $ $ dd if=/boot/initrd.img-3.14-1-amd64 bs=1 skip=$(( 41*512 + 0x90 )) | file - /dev/stdin: gzip compressed data, last modified: Wed Jul 9 09:43:32 2014, from Unix $ $ grep COMPRESS= /etc/initramfs-tools/initramfs.conf COMPRESS=gzip $ $ dd if=/boot/initrd.img-3.14-1-amd64 bs=1 skip=$(( 41*512 + 0x90 )) | gunzip | cpio -i $ $ ls bin conf etc init lib lib64 run sbin scripts $ ","date":"14 July 2014","externalUrl":null,"permalink":"/posts/extractainitrdwithmicrocode/","section":"Posts","summary":"If you try to extract a initrd and only file some uncompressed cpio:\n","title":"How to extract a initrd with a microcode header","type":"posts"},{"content":"","date":"27 March 2014","externalUrl":null,"permalink":"/tags/hardware/","section":"Tags","summary":"","title":"Hardware","type":"tags"},{"content":"The Three \u0026lsquo;T\u0026rsquo;s represent how one should approach the usage of USB memory sticks; being Temporary Transfer of Transient data.\n","date":"27 March 2014","externalUrl":null,"permalink":"/posts/thethreets/","section":"Posts","summary":"The Three ‘T’s represent how one should approach the usage of USB memory sticks; being Temporary Transfer of Transient data.\n","title":"The Three Ts","type":"posts"},{"content":"I have migrated to a new Open PGP key please read my transition statement.\nOld Key:\npub 1024D/68A70C48 2003-02-11 [expires: 2014-03-19] Key fingerprint = DCCD 7DCB A74A 3E3B 60D5 DF4C FC1D 1ECA 68A7 0C48 uid [ultimate] Thomas Stewart \u0026lt;thomas@stewarts.org.uk\u0026gt; New Key:\npub 4096R/CD617CF2 2013-03-18 [expires: 2016-03-18] Key fingerprint = 217D 695D ACE2 AE40 F9FE B0C0 85C8 5556 CD61 7CF2 uid [ultimate] Thomas Stewart \u0026lt;thomas@stewarts.org.uk\u0026gt; public-key.asc (both public keys locally hosted) Old Public Key (from key server) New Public Key (from key server)\nKey info for thomas@stewarts.org.uk\nOld Key Stats New Key Stats\nSome excellent Open PGP resources and help:\nhttps://we.riseup.net/riseuplabs+paow/openpgp-best-practices http://ekaia.org/blog/2009/05/10/creating-new-gpgkey/ http://www.apache.org/dev/openpgp.html http://www.apache.org/dev/key-transition.html http://www.debian-administration.org/users/dkg/weblog/48 http://keyring.debian.org/creating-key.html ","date":"19 March 2014","externalUrl":null,"permalink":"/posts/openpgp/","section":"Posts","summary":"I have migrated to a new Open PGP key please read my transition statement.\n","title":"Open PGP","type":"posts"},{"content":"","date":"19 March 2014","externalUrl":null,"permalink":"/tags/pgp/","section":"Tags","summary":"","title":"Pgp","type":"tags"},{"content":"Here are my essential films. It\u0026rsquo;s somewhere between my favourite films and a list of films that must be seen. It\u0026rsquo;s in alphabetical order and I was originally aiming for the 50 mark, however there are too many good films so the current count is 83. The main table is generated from films.txt with getimdb.py (needs updating from MoinMoin to MD syntax). I\u0026rsquo;ve also cross-referenced this list with the Bechdel Test Movie List on a Essential Films Bechdel Test\nTitle Year IMDB Rating Runtime Genres Director Cast 2001: A Space Odyssey 1968 8.3 149 Adventure, Sci-Fi Stanley Kubrick Keir Dullea, Gary Lockwood A Bridge Too Far 1977 7.4 175 Drama, History, War Richard Attenborough Siem Vroom, Marlies van Alcmaer A Fistful of Dollars 1964 8.0 99 Action, Drama, Western Sergio Leone Clint Eastwood, Marianne Koch A Good Year 2006 7.0 117 Comedy, Drama, Romance Ridley Scott Freddie Highmore, Albert Finney Airplane! 1980 7.7 88 Comedy Jim Abrahams Kareem Abdul-Jabbar, Lloyd Bridges Aliens 1986 8.3 137 Action, Adventure, Sci-Fi, Thriller James Cameron Sigourney Weaver, Carrie Henn Amélie 2001 8.3 122 Comedy, Romance Jean-Pierre Jeunet Audrey Tautou, Mathieu Kassovitz Apollo 13 1995 7.6 140 Adventure, Drama, History Ron Howard Tom Hanks, Bill Paxton Back to the Future 1985 8.5 116 Adventure, Comedy, Sci-Fi Robert Zemeckis Michael J. Fox, Christopher Lloyd Blade 1998 7.1 120 Action, Horror, Sci-Fi Stephen Norrington Wesley Snipes, Stephen Dorff Blade Runner 1982 8.1 117 Action, Sci-Fi, Thriller Ridley Scott Harrison Ford, Rutger Hauer Blazing Saddles 1974 7.7 93 Comedy, Western Mel Brooks Cleavon Little, Gene Wilder Catch Me If You Can 2002 8.1 141 Biography, Crime, Drama Steven Spielberg Leonardo DiCaprio, Tom Hanks Clear and Present Danger 1994 6.9 141 Action, Crime, Drama, Thriller Phillip Noyce Harrison Ford, Willem Dafoe Clerks 1994 7.7 92 Comedy Kevin Smith Brian O\u0026rsquo;Halloran, Jeff Anderson Dirty Harry 1971 7.7 102 Action, Crime, Thriller Don Siegel Clint Eastwood, Harry Guardino District 9 2009 7.9 112 Action, Sci-Fi, Thriller Neill Blomkamp Sharlto Copley, Jason Cope Dr. No 1962 7.2 110 Action, Adventure, Thriller Terence Young Sean Connery, Ursula Andress Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb 1964 8.4 95 Comedy Stanley Kubrick Peter Sellers, George C. Scott Erin Brockovich 2000 7.3 131 Biography, Drama Steven Soderbergh Julia Roberts, David Brisbin Ferris Bueller\u0026rsquo;s Day Off 1986 7.8 103 Comedy John Hughes Matthew Broderick, Alan Ruck For a Few Dollars More 1965 8.3 132 Western Sergio Leone Clint Eastwood, Lee Van Cleef Forrest Gump 1994 8.8 142 Drama, Romance Robert Zemeckis Tom Hanks, Rebecca Williams From Russia with Love 1963 7.4 115 Action, Adventure, Thriller Terence Young Sean Connery, Daniela Bianchi Full Metal Jacket 1987 8.3 116 Drama, War Stanley Kubrick Matthew Modine, Adam Baldwin Garden State 2004 7.4 102 Comedy, Drama, Romance Zach Braff Zach Braff, Kenneth Graymez Goldfinger 1964 7.7 110 Action, Adventure, Thriller Guy Hamilton Sean Connery, Gert Fröbe Gone with the Wind 1939 8.1 238 Drama, History, Romance, War Victor Fleming Thomas Mitchell, Barbara O\u0026rsquo;Neil Good Will Hunting 1997 8.3 126 Drama, Romance Gus Van Sant Matt Damon, Ben Affleck Ice Cold in Alex 1958 7.8 130 Adventure, Drama, War J. Lee Thompson John Mills, Sylvia Syms Inception 2010 8.8 148 Action, Adventure, Sci-Fi, Thriller Christopher Nolan Leonardo DiCaprio, Joseph Gordon-Levitt Indiana Jones and the Last Crusade 1989 8.2 127 Action, Adventure Steven Spielberg Harrison Ford, Sean Connery Indiana Jones and the Temple of Doom 1984 7.6 118 Action, Adventure Steven Spielberg Harrison Ford, Kate Capshaw Jaws 1975 8.0 124 Adventure, Thriller Steven Spielberg Roy Scheider, Robert Shaw Jurassic Park 1993 8.1 127 Action, Adventure, Sci-Fi, Thriller Steven Spielberg Sam Neill, Laura Dern Just Like Heaven 2005 6.7 95 Comedy, Drama, Fantasy, Romance Mark Waters Reese Witherspoon, Mark Ruffalo Lawrence of Arabia 1962 8.3 228 Adventure, Biography, Drama, History, War David Lean Peter O\u0026rsquo;Toole, Alec Guinness Legally Blonde 2001 6.3 96 Comedy, Romance Robert Luketic Reese Witherspoon, Luke Wilson Little Miss Sunshine 2006 7.8 101 Comedy, Drama Jonathan Dayton Abigail Breslin, Greg Kinnear North by Northwest 1959 8.3 136 Adventure, Mystery, Thriller Alfred Hitchcock Cary Grant, Eva Marie Saint Notting Hill 1999 7.1 124 Comedy, Drama, Romance Roger Michell Julia Roberts, Hugh Grant Once Upon a Time in the West 1968 8.5 165 Western Sergio Leone Claudia Cardinale, Henry Fonda Paint Your Wagon 1969 6.6 164 Comedy, Drama, Musical, Romance, Western Joshua Logan Lee Marvin, Clint Eastwood Pan\u0026rsquo;s Labyrinth 2006 8.2 118 Drama, Fantasy, War Guillermo del Toro Ivana Baquero, Sergi López Papillon 1973 8.0 151 Biography, Crime, Drama Franklin J. Schaffner Steve McQueen, Dustin Hoffman Planes, Trains \u0026amp; Automobiles 1987 7.6 93 Comedy, Drama John Hughes Steve Martin, John Candy Play Misty for Me 1971 7.0 102 Drama, Thriller Clint Eastwood Clint Eastwood, Jessica Walter Pulp Fiction 1994 8.9 154 Crime, Drama Quentin Tarantino Tim Roth, Amanda Plummer Raiders of the Lost Ark 1981 8.4 115 Action, Adventure Steven Spielberg Harrison Ford, Karen Allen Requiem for a Dream 2000 8.3 102 Drama Darren Aronofsky Ellen Burstyn, Jared Leto Ringu 1998 7.2 96 Horror, Mystery Hideo Nakata Nanako Matsushima, Miki Nakatani Roman Holiday 1953 8.0 118 Comedy, Romance William Wyler Gregory Peck, Audrey Hepburn Romeo + Juliet 1996 6.7 120 Drama, Romance Baz Luhrmann Leonardo DiCaprio, Claire Danes Saving Private Ryan 1998 8.6 169 Drama, War Steven Spielberg Tom Hanks, Tom Sizemore Scarface 1983 8.3 170 Crime, Drama Brian De Palma Al Pacino, Steven Bauer Schindler\u0026rsquo;s List 1993 8.9 195 Biography, Drama, History Steven Spielberg Liam Neeson, Ben Kingsley Snatch 2000 8.3 104 Comedy, Crime Guy Ritchie Benicio Del Toro, Dennis Farina Spirited Away 2001 8.6 125 Animation, Adventure, Family, Fantasy, Mystery Hayao Miyazaki Rumi Hiiragi, Miyu Irino Taken 2008 7.8 90 Action, Thriller Pierre Morel Liam Neeson, Maggie Grace Terminator 2: Judgment Day 1991 8.5 137 Action, Sci-Fi James Cameron Arnold Schwarzenegger, Linda Hamilton The Big Lebowski 1998 8.1 117 Comedy, Crime, Sport Joel Coen Jeff Bridges, John Goodman The Blues Brothers 1980 7.9 133 Adventure, Comedy, Crime, Music, Musical John Landis Tom Erhart, Gerald Walling The Breakfast Club 1985 7.9 97 Comedy, Drama John Hughes Emilio Estevez, Paul Gleason The Conversation 1974 7.8 113 Drama, Mystery, Thriller Francis Ford Coppola Gene Hackman, John Cazale The Departed 2006 8.5 151 Crime, Drama, Thriller Martin Scorsese Leonardo DiCaprio, Matt Damon The Fugitive 1993 7.8 130 Action, Crime, Drama, Mystery, Thriller Andrew Davis Harrison Ford, Tommy Lee Jones The Godfather 1972 9.2 175 Crime, Drama Francis Ford Coppola Marlon Brando, Al Pacino The Good, the Bad and the Ugly 1966 8.8 161 Western Sergio Leone Eli Wallach, Clint Eastwood The Graduate 1967 8.0 106 Comedy, Drama, Romance Mike Nichols Anne Bancroft, Dustin Hoffman The Great Escape 1963 8.2 172 Adventure, Drama, History, Thriller, War John Sturges Steve McQueen, James Garner The Hangover 2009 7.7 100 Comedy Todd Phillips Bradley Cooper, Ed Helms The Little Mermaid 1989 7.6 83 Animation, Family, Fantasy, Musical, Romance Ron Clements Rene Auberjonois, Christopher Daniel Barnes The Matrix 1999 8.7 136 Action, Sci-Fi Lana Wachowski Keanu Reeves, Laurence Fishburne The Pianist 2002 8.5 150 Biography, Drama, Music, War Roman Polanski Adrien Brody, Emilia Fox The Shawshank Redemption 1994 9.3 142 Drama Frank Darabont Tim Robbins, Morgan Freeman The Shining 1980 8.4 146 Drama, Horror Stanley Kubrick Jack Nicholson, Shelley Duvall The Silence of the Lambs 1991 8.6 118 Crime, Drama, Thriller Jonathan Demme Jodie Foster, Lawrence A. Bonney The Wicker Man 1973 7.5 88 Horror, Mystery, Thriller Robin Hardy Edward Woodward, Christopher Lee Three Colors: Blue 1993 7.9 94 Drama, Music, Mystery, Romance Krzysztof Kieslowski Juliette Binoche, Benoît Régent Trainspotting 1996 8.1 93 Drama Danny Boyle Ewan McGregor, Ewen Bremner Uncle Buck 1989 7.0 100 Comedy John Hughes John Candy, Jean Louisa Kelly Walk the Line 2005 7.8 136 Biography, Drama, Music, Romance James Mangold Joaquin Phoenix, Reese Witherspoon Where Eagles Dare 1968 7.7 158 Action, Adventure, War Brian G. Hutton Richard Burton, Clint Eastwood Decade Count 1990 21 2000 18 1980 16 1960 14 1970 9 1950 3 2010 1 1930 1 Genre Count Drama 42 Comedy 23 Adventure 20 Action 20 Thriller 20 Romance 16 Crime 13 Sci-Fi 10 War 10 Mystery 7 Biography 7 Western 6 History 6 Music 4 Fantasy 4 Horror 4 Musical 3 Family 2 Animation 2 Sport 1 Director Count Steven Spielberg 8 Stanley Kubrick 4 Sergio Leone 4 John Hughes 4 Terence Young 2 Ridley Scott 2 James Cameron 2 Francis Ford Coppola 2 Robert Zemeckis 2 Actor Count Harrison Ford 7 Clint Eastwood 7 Arnold Montey 6 Jimmy Star 5 Sean Connery 5 Antonio Molino Rojo 4 Richard Farnsworth 4 Frank Braña 4 Tom Hanks 4 Benito Stefanelli 4 Aldo Sambrell 4 Leonardo DiCaprio 4 Lorenzo Robledo 4 Enrique Santiago 3 Bob Simmons 3 Paul Maxwell 3 Richard Attenborough 3 Bob Harks 3 Nikki Van der Zyl 3 John Candy 3 Victor Harrington 3 Burnell Tucker 3 George Fargo 3 Lois Maxwell 3 Philip Stone 3 Laurence Herder 3 Ted Grossman 3 Xander Berkeley 3 Peter Evans 3 Steven Spielberg 3 Roy Beck 3 Harry Fielder 3 Joseph Bradley 3 Boyd Cabeen 3 Mario Brega 3 Bernard Lee 3 Reese Witherspoon 3 Matt Damon 3 Pat Roach 3 Arthur Tovey 3 Ricardo Palacios 3 Vivian Kubrick 3 David Daniel 3 Denholm Elliott 3 Pauline Chamberlain 3 Aileen Lewis 3 Mark Rolston 3 Kadrolsha Ona Carole 3 Anthony Chinn 3 Edie McClurg 3 Antonio Palombi 3 Nazzareno Natale 3 ","date":"24 November 2013","externalUrl":null,"permalink":"/projects/essentialfilms/","section":"Projects","summary":"Here are my essential films. It’s somewhere between my favourite films and a list of films that must be seen. It’s in alphabetical order and I was originally aiming for the 50 mark, however there are too many good films so the current count is 83. The main table is generated from films.txt with getimdb.py (needs updating from MoinMoin to MD syntax). I’ve also cross-referenced this list with the Bechdel Test Movie List on a Essential Films Bechdel Test\n","title":"Essential Films","type":"projects"},{"content":"","date":"18 November 2013","externalUrl":null,"permalink":"/tags/latex/","section":"Tags","summary":"","title":"Latex","type":"tags"},{"content":"Every so often I find myself recommending LaTeX to people that are either starting a PhD or are struggling with writing their thesis up in Microsoft Word. Over the years I found myself rewriting and improving the same email explaining what LaTeX is and why you should use it. I\u0026rsquo;ve decided to just publish it and email people a link instead.\nAs you probably know Microsoft Word (and OpenOffice) can be extremely frustrating at times. There is an alternative called LaTeX, it is a different sort of word processor, initially it seems very odd but after you get over the initial change in mindset, you will wonder how you used Word at all to create documents of more than 10 pages. The main advantage is that you just do the writing, then later it makes it pretty for you. This means that while you are writing you don\u0026rsquo;t waste your time with formatting. It does all the formatting for you as well as creating the table of contents, list of figures, page numbers, etc. It is also totally free. I have a few links for you to peruse at your leisure. Don\u0026rsquo;t be intimidated; it\u0026rsquo;s a lot easier than it looks.\nA very short page about what it is: http://scottmcpeak.com/latex/whatislatex.html and why to use it: http://latexforhumans.wordpress.com/2008/10/07/why-use-latex/\nA short write up about it: http://www.osnews.com/story/10766 and some pros and cons: http://openwetware.org/wiki/Word_vs._LaTeX\nReasons to use it if you\u0026rsquo;re a typesetting geek: http://nitens.org/taraborelli/latex and the detailed Wikipedia page about it: http://en.wikipedia.org/wiki/LaTeX\nThe main program for LaTeX on Windows is called MiKTeX, you can get it here: http://miktex.org/\nNext you need an editor to edit the files, there are loads out there. Notepad will do, my favourite is Vim, but there are other ones with useful, helpful and cool features. My brother recommends: http://www.winshell.de/\nThen you will need a thesis template that looks good. My brother recommends: http://www.sunilpatel.co.uk/thesis-template/. The information about this template is actually formatted in the form of a thesis, it gives information about LaTeX in general and information about that template. To see what that template looks like have a look at: http://www.sunilpatel.co.uk/wp-content/uploads/2010/08/Thesis-Template-Help.pdf\nMy favourite guide to learn LaTeX is the \u0026ldquo;A (Not So) Short Introduction to !LaTeX2e\u0026rdquo; which is here: http://tobi.oetiker.ch/lshort/lshort.pdf\nI did a very quick search for LaTeX and EndNote and there seems to be ways to use EndNote in LaTeX. (http://www.rhizobia.co.nz/latex/convert, http://www.academicproductivity.com/2008/using-endnote-with-latex/). There also seems to be Reference Manager integration too. If you don\u0026rsquo;t like them or don\u0026rsquo;t like !EndNote or want to maintain some sanity then use http://www.mendeley.com/\nWhat about supervisors making corrections? They will still want to continue torturing themselves with Microsoft Word, just use http://latex2rtf.sourceforge.net/ to convert your LaTeX document to RTF (which works in Word). Then supervisors can correct with track changes to their hearts content and you can update your original LaTeX document.\nHere is a real example\nGive it at least a try, it could save you hours in the long run. I used it for my final year write up and my brother used it for his PhD thesis. As do many thousands of other people. Let me know how you get on or if you need any help with it. Google is your friend. :-)\n","date":"18 November 2013","externalUrl":null,"permalink":"/posts/latex/","section":"Posts","summary":"Every so often I find myself recommending LaTeX to people that are either starting a PhD or are struggling with writing their thesis up in Microsoft Word. Over the years I found myself rewriting and improving the same email explaining what LaTeX is and why you should use it. I’ve decided to just publish it and email people a link instead.\n","title":"LaTeX","type":"posts"},{"content":"There are only four types of film! For a while I (and possibly others) have been able to categorise all films into four different types. I can\u0026rsquo;t imagine coming up with such an idea. Perhaps I read it somewhere, or read it in relation stories and writing in general. However no one I have spoken to has heard of it and I\u0026rsquo;ve not been able to find out much about it. The classic example is the original Star Wars trilogy, A New Hope is \u0026ldquo;into and out of hole\u0026rdquo;, Empire is \u0026ldquo;into hole\u0026rdquo; and Jedi is \u0026ldquo;out of hole\u0026rdquo;.\ninto and out of hole # Nearly all films fit in this category. The film starts, everything is happy and then something bad happens. Later on the people overcome the issue and the film ends.\ninto hole # This is the next most common category, these films can be quite depressing. The film starts, everything is generally fine and then it just gets worse for the people and the film ends. A very good example of this is Requiem for a Dream.\nout of hole # These are even rarer than the above. Everything starts out bad and when the film ends everything is fine.\nno hole or hole # The last type completes the pattern and arguably is two types combined. However I don\u0026rsquo;t think this matters as this type is extremely rare. In essence nothing bad or good happens which will mean the film is probably rubbish.\n","date":"21 August 2013","externalUrl":null,"permalink":"/posts/typesoffilm/","section":"Posts","summary":"There are only four types of film! For a while I (and possibly others) have been able to categorise all films into four different types. I can’t imagine coming up with such an idea. Perhaps I read it somewhere, or read it in relation stories and writing in general. However no one I have spoken to has heard of it and I’ve not been able to find out much about it. The classic example is the original Star Wars trilogy, A New Hope is “into and out of hole”, Empire is “into hole” and Jedi is “out of hole”.\n","title":"Type of Film","type":"posts"},{"content":"I have no name! ","date":"6 August 2013","externalUrl":null,"permalink":"/posts/ihavenoname/","section":"Posts","summary":"I have no name! ","title":"I have no name","type":"posts"},{"content":" ","date":"6 June 2013","externalUrl":null,"permalink":"/posts/whisky/","section":"Posts","summary":"","title":"Whisky","type":"posts"},{"content":"","date":"6 June 2013","externalUrl":null,"permalink":"/tags/whisky/","section":"Tags","summary":"","title":"Whisky","type":"tags"},{"content":"","date":"7 May 2013","externalUrl":null,"permalink":"/tags/wikipedia/","section":"Tags","summary":"","title":"Wikipedia","type":"tags"},{"content":"Wikipedia cookies are now good for 180 days instead of 30! Edit April 2013: sadly they are now back to the annoying 30 days:(\nEdit April 2020: Hooray, we are back again to 365! ","date":"7 May 2013","externalUrl":null,"permalink":"/posts/wikipedia180/","section":"Posts","summary":"Wikipedia cookies are now good for 180 days instead of 30! ","title":"Wikipedia 180","type":"posts"},{"content":"I recently found out about the Bechdel Test, I was interested in how many of my Essential Films passed the test. So I used the Bechdel Test Movie List to cross-reference. I did some horrible HTML dumps and scripting to do this; after I finished I found out that they provide an API that can search based on IMDb ID. I currently have 79 films in my list; 64 have ratings listed, or 81% of them.\nBreakdown of results Fewer than two women in these movies 23% There are two or more women in this movie, but they don\u0026rsquo;t talk to each other 27% There are two or more women in this movie, but they only talk to each other about a man 9% There are two or more women in this movie and they talk to each other 41% And here are the films that are rated:\nFewer than two women in these movies 2001: A Space Odyssey Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb For a Few Dollars More Full Metal Jacket Good Will Hunting Indiana Jones and the Last Crusade Indiana Jones and the Temple of Doom Lawrence of Arabia Papillon Raiders of the Lost Ark Saving Private Ryan Snatch. The Good, the Bad and the Ugly The Great Escape The Shawshank Redemption There are two or more women in these movies, but they don\u0026rsquo;t talk to each other Airplane! Back to the Future Blade Blade Runner Blazing Saddles Catch Me If You Can Clerks. Forrest Gump Goldfinger Jaws North By Northwest Once Upon a Time in the West Planes, Trains \u0026amp; Automobiles The Big Lebowski The Blues Brothers The Departed The Godfather There are two or more women in these movies, but they only talk to each other about a man Ferris Bueller\u0026rsquo;s Day Off Paint Your Wagon The Fugitive The Graduate The Shining Trainspotting There are two or more women in these movies and they talk to each other about something other than a man Aliens Apollo 13 El laberinto del fauno (Pan\u0026rsquo;s Labyrinth) Erin Brockovich Garden State Gone with the Wind Inception Jurassic Park Just Like Heaven Legally Blonde Little Miss Sunshine Notting Hill Play Misty for Me Pulp Fiction Requiem for a Dream Schindler\u0026rsquo;s List Spirited Away Taken The Breakfast Club The Matrix The Silence of the Lambs The Wicker Man Three Colors: Blue Uncle Buck Walk the Line Where Eagles Dare ","date":"31 January 2013","externalUrl":null,"permalink":"/posts/essentialfilmsbechdeltest/","section":"Posts","summary":"I recently found out about the Bechdel Test, I was interested in how many of my Essential Films passed the test. So I used the Bechdel Test Movie List to cross-reference. I did some horrible HTML dumps and scripting to do this; after I finished I found out that they provide an API that can search based on IMDb ID. I currently have 79 films in my list; 64 have ratings listed, or 81% of them.\n","title":"Essential Films Bechdel Test","type":"posts"},{"content":"I have a Barclaycard credit card and a Halifax credit card. I recently decided to experiment to try to find out how much it costs to use them abroad to withdraw cash from an ATM. I might be crazy, but I wanted to know! Both cards have particular offers that mean you don\u0026rsquo;t get charged as much as most cards do to withdraw cash. I did a cash withdrawal of €50 from an ATM on both cards on the same day. Anyway, on with the results:\nCard Money Withdrawn Cost on Bill Overall Rate Historical rate from ex.com Historical rate from issuer Rate difference Barclaycard (Visa) €50 £42.37 (including £1.23 transaction fee) 1.1801 1.2177 1.2225 -0.0424 Halifax (Mastercard) €50 £40.95 1.2210 1.2177 1.2251 -0.0041 As I expected, my Halifax card was better!\nSee:\nhttp://www.xe.com/currencytables/ http://www.visaeurope.com/en/cardholders/exchange_rates.aspx https://www.mastercard.com/global/currencyconversion/index.html ","date":"23 January 2013","externalUrl":null,"permalink":"/projects/creditcardexchangerates/","section":"Projects","summary":"I have a Barclaycard credit card and a Halifax credit card. I recently decided to experiment to try to find out how much it costs to use them abroad to withdraw cash from an ATM. I might be crazy, but I wanted to know! Both cards have particular offers that mean you don’t get charged as much as most cards do to withdraw cash. I did a cash withdrawal of €50 from an ATM on both cards on the same day. Anyway, on with the results:\n","title":"Credit Card Exchange Rates","type":"projects"},{"content":"","date":"23 January 2013","externalUrl":null,"permalink":"/tags/creditcard/","section":"Tags","summary":"","title":"Creditcard","type":"tags"},{"content":"","date":"23 January 2013","externalUrl":null,"permalink":"/tags/exchangerate/","section":"Tags","summary":"","title":"Exchangerate","type":"tags"},{"content":"Look at Debian Buzz running on bochs: ","date":"24 December 2012","externalUrl":null,"permalink":"/posts/debianbuzz/","section":"Posts","summary":"Look at Debian Buzz running on bochs: ","title":"Debian Buzz (1.1)","type":"posts"},{"content":"","date":"9 December 2012","externalUrl":null,"permalink":"/tags/windows/","section":"Tags","summary":"","title":"Windows","type":"tags"},{"content":"Ever used a laptop with a wireless and a copper network interface? Practically every laptop has both, so chances are you have. Have you ever wondered what happens if you plug in with copper, turn wireless on and have both interfaces configured with an IP address? I decided to do this and have a quick look at the routing table to see what goes on.\nTL;DR Windows is sane and uses copper if you configure both.\nHere is a sample ipconfig with some slight anonymization:\n\u0026gt;ipconfig Windows IP Configuration Wireless LAN adapter Wireless Network Connection: Connection-specific DNS Suffix . : example.com IPv4 Address. . . . . . . . . . . : 10.0.2.24 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 10.0.2.1 Ethernet adapter Local Area Connection: Connection-specific DNS Suffix . : example.com IPv4 Address. . . . . . . . . . . : 10.0.1.24 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 10.0.1.1 Tunnel adapter isatap.example.com: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : example.com Tunnel adapter Local Area Connection* 11: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : \u0026gt; and here is the routing table:\n\u0026gt;netstat -rn =========================================================================== Interface List 14...10 0b a9 96 fc 2c ......Intel(R) Centrino(R) Advanced-N 6205 11...00 21 cc ba 7f 38 ......Intel(R) 82579LM Gigabit Network Connection 1...........................Software Loopback Interface 1 13...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter 10...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface =========================================================================== IPv4 Route Table =========================================================================== Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 10.0.1.1 10.0.1.24 10 0.0.0.0 0.0.0.0 10.0.2.1 10.0.2.24 30 127.0.0.0 255.0.0.0 On-link 127.0.0.1 306 127.0.0.1 255.255.255.255 On-link 127.0.0.1 306 127.255.255.255 255.255.255.255 On-link 127.0.0.1 306 10.0.1.0 255.255.255.0 On-link 10.0.1.24 266 10.0.1.24 255.255.255.255 On-link 10.0.1.24 266 10.0.1.255 255.255.255.255 On-link 10.0.1.24 266 10.0.2.0 255.255.255.0 On-link 10.0.2.24 286 10.0.2.24 255.255.255.255 On-link 10.0.2.24 286 10.0.2.255 255.255.255.255 On-link 10.0.2.24 286 224.0.0.0 240.0.0.0 On-link 127.0.0.1 306 224.0.0.0 240.0.0.0 On-link 10.0.1.24 266 224.0.0.0 240.0.0.0 On-link 10.0.2.24 286 255.255.255.255 255.255.255.255 On-link 127.0.0.1 306 255.255.255.255 255.255.255.255 On-link 10.0.1.24 266 255.255.255.255 255.255.255.255 On-link 10.0.2.24 286 =========================================================================== Persistent Routes: None =========================================================================== Persistent Routes: None \u0026gt; As you can see there are two default gateways (i.e. destination 0.0.0.0) and the one with the lowest metric uses the 10.0.1.24 interface, which is the copper one. So it turns out that Windows seems sane and favours the faster copper interface when both are configured and working.\nAs an aside on Linux using a default network-manager setup, it also seems sane. You get one default gateway but the copper interface is used if it is available. The default gateway changes when the network interfaces go up and down.\n","date":"9 December 2012","externalUrl":null,"permalink":"/posts/wirelessandcopperroutingonwindows/","section":"Posts","summary":"Ever used a laptop with a wireless and a copper network interface? Practically every laptop has both, so chances are you have. Have you ever wondered what happens if you plug in with copper, turn wireless on and have both interfaces configured with an IP address? I decided to do this and have a quick look at the routing table to see what goes on.\n","title":"Wireless and Copper Routing on Windows","type":"posts"},{"content":"While waiting to be connected to my new ISP I was forced to use a 3G dongle for my main Internet connection. Yikes you say! Well it\u0026rsquo;s not entirely crap, I get about 2M and ssh is mostly usable. It\u0026rsquo;s like having a cable modem in 2000. As a side note giffgaff make this sort of thing really quite easy (and cheap). Anyway while browsing I noticed the usual crap low res images that appear when surfing on mobile phones, so I decided to do some investigation into what was going on. It turns out to just be fairly straightforward, all web traffic is just transparently proxied. So all that happens is a simple JavaScript injection.\nSay there is a simple website with the following HTML:\n\u0026lt;html\u0026gt; \u0026lt;head\u0026gt;\u0026lt;title\u0026gt;Test\u0026lt;/title\u0026gt;\u0026lt;/head\u0026gt; \u0026lt;body\u0026gt;\u0026lt;img src=\u0026#34;0239-mod.png\u0026#34; /\u0026gt;\u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; When I load that file I actually get the following:\n\u0026lt;html\u0026gt;\u0026lt;script src=\u0026#34;http://1.2.3.4/bmi-int-js/bmi.js\u0026#34; language=\u0026#34;javascript\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;head\u0026gt;\u0026lt;title\u0026gt;Test\u0026lt;/title\u0026gt;\u0026lt;/head\u0026gt; \u0026lt;body\u0026gt;\u0026lt;img src=\u0026#34;0239-mod.png\u0026#34; /\u0026gt;\u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt;\u0026lt;script language=\u0026#34;javascript\u0026#34;\u0026gt; \u0026lt;!--bmi_SafeAddOnload(bmi_load,\u0026#34;bmi_orig_img\u0026#34;,0);//--\u0026gt; \u0026lt;/script\u0026gt; Yikes was my first reaction, bmi.js was nice and unreadable, however if you reformat it a bit it\u0026rsquo;s mostly readable, it\u0026rsquo;s on pastebin if you\u0026rsquo;re interested. As an aside 1.2.3.4 is actually a bogon network! Whois says \u0026ldquo;Address blocks listed with this contact are withheld from general use and are only routed briefly for passive testing.\u0026rdquo; Well at least they are not using genuine allocated addresses. I\u0026rsquo;d be more worried of the mess it left the HTML in!\nAfter a bit of googling, it turns out it\u0026rsquo;s been going on for a while, bmi is some bytemobile product. As ever a stackoverflow was most useful. It seems some operators allow you to turn it off.\n3ghtmlabusetest.html 3ghtmlabusetest.result.html ","date":"11 October 2012","externalUrl":null,"permalink":"/posts/3ghtmlabuse/","section":"Posts","summary":"While waiting to be connected to my new ISP I was forced to use a 3G dongle for my main Internet connection. Yikes you say! Well it’s not entirely crap, I get about 2M and ssh is mostly usable. It’s like having a cable modem in 2000. As a side note giffgaff make this sort of thing really quite easy (and cheap). Anyway while browsing I noticed the usual crap low res images that appear when surfing on mobile phones, so I decided to do some investigation into what was going on. It turns out to just be fairly straightforward, all web traffic is just transparently proxied. So all that happens is a simple JavaScript injection.\n","title":"3G HTML Abuse","type":"posts"},{"content":"","date":"11 October 2012","externalUrl":null,"permalink":"/tags/html/","section":"Tags","summary":"","title":"Html","type":"tags"},{"content":"","date":"11 October 2012","externalUrl":null,"permalink":"/tags/mobile/","section":"Tags","summary":"","title":"Mobile","type":"tags"},{"content":"So you have a mobile broadband dongle and you want to use it on Linux, one option is to just plug it in and from Gnome 3 it just works and can be set-up instantly with NetworkManager. However I require something more permanent, something that will start at boot, be less interactive and stay up. There is a lot of misinformation out there about how to do this with various programs and scripts to copy and paste. Lots of wvdial configurations and lots of poking about in /etc/ppp creating and modifying files etc.\nThanks to the wonder that is Debian, it\u0026rsquo;s quite easy to get a nice setup without copying and pasting loads of config and scattering a dozen files all over /etc. I wanted a nice minimal set-up that will cope with Debian upgrades without breaking horrendously. All you need to do is create a new file in /etc/ppp/peers called something sensible like /etc/ppp/peers/giffgaff. Here is my config:\nuser \u0026#34;giffgaff\u0026#34; password \u0026#34;password\u0026#34; connect \u0026#34;/usr/sbin/chat -v -f /etc/chatscripts/gprs -T giffgaff.com\u0026#34; ttyUSB0 115200 noipdefault usepeerdns defaultroute persist noauth passive holdoff 10 maxfail 0 debug You might need to change some of the above. It\u0026rsquo;s got the gprs username and password. It turns out that Debian already has a chatscript for gprs included in the ppp package, so we don\u0026rsquo;t need to mess about with that. We just pass in the APN to that script via the -T parameter. You will have to know these options, however the mobile-broadband-provider-info package contains a file (/usr/share/mobile-broadband-provider-info/serviceproviders.xml) that has all these in, this file is used for all the automatic set-up with NetworkManager. The rest of the options are quite straightforward and they are all listed in the pppd(8) man page.\nNext is the automatically starting at boot, for this we edit the /etc/network/interfaces file. Just add the stanza below:\nauto ppp0 iface ppp0 inet ppp provider giffgaff Then the ppp0 interface will just start at boot and the usual Debian ifup and ifdown commands will work. Something like vnstat will be good enough to capture and log the traffic.\n","date":"11 July 2012","externalUrl":null,"permalink":"/posts/minimalpppdsetupforgprsdongles/","section":"Posts","summary":"So you have a mobile broadband dongle and you want to use it on Linux, one option is to just plug it in and from Gnome 3 it just works and can be set-up instantly with NetworkManager. However I require something more permanent, something that will start at boot, be less interactive and stay up. There is a lot of misinformation out there about how to do this with various programs and scripts to copy and paste. Lots of wvdial configurations and lots of poking about in /etc/ppp creating and modifying files etc.\n","title":"Minimal pppd Setup For GPRS Dongles","type":"posts"},{"content":"TL;DR - Buy Super Unleaded petrol! (or don\u0026rsquo;t)\nI usually buy my petrol from Tesco for my Celica, I mostly use their super unleaded 99 octane. I have tried both the normal and the super, I\u0026rsquo;ve not really noticed a massive difference, however the super feels better, but that could just be me imagining it. So I decided to do a not particularly scientific experiment to find out which one really is best. Is that extra 5p per litre worth it? I get petrol every week and a half or so and fill my 50 litre tank, so that\u0026rsquo;s about £85 difference.\nMy Celica does not have mileage readout so I had to calculate it the old fashioned way. Which is: get the tank almost empty, fill it to the brim, take note of the odometer reading, drive until the tank is almost empty, fill it again to the brim and take note of the odometer reading again. That way the petrol sloshing about in the bottom of the tank is not counted. The odometer difference is the total distance and the amount filled the second time is the fuel volume. I did this twice, once with regular and once with super. Between each test I did a complete fill to make sure each test only had the fuel of that test.\nOn with the results:\nFuel Type Miles Litres Paid Cost per Litre Mileage Pounds per mile Regular 334.5 mi 52.09 l £ 69.23 £ 1.329 29.19 mpg 4.832 mi / £ Super 333.3 mi 50.01 l £ 68.96 £ 1.379 30.30 mpg 4.833 mi / £ So as you can see the numbers are all very similar, the Super is 1 mpg better but as it costs a little more it actually works out the same! So I\u0026rsquo;m going to stick with super which feels better and gets me an extra 15 miles per tank.\n","date":"23 May 2012","externalUrl":null,"permalink":"/posts/mileage/","section":"Posts","summary":"TL;DR - Buy Super Unleaded petrol! (or don’t)\n","title":"Mileage","type":"posts"},{"content":"","date":"23 May 2012","externalUrl":null,"permalink":"/tags/mileage/","section":"Tags","summary":"","title":"Mileage","type":"tags"},{"content":" imdbgraphdot.py imdbgraph.movies.p imdbgraph.png imdbgraph.ps imdbgraph.py imdbgraph.results.p imdbgraph.svg ","date":"10 May 2012","externalUrl":null,"permalink":"/posts/imdbgraph/","section":"Posts","summary":" imdbgraphdot.py imdbgraph.movies.p imdbgraph.png imdbgraph.ps imdbgraph.py imdbgraph.results.p imdbgraph.svg ","title":"IMDB Graph","type":"posts"},{"content":"What has Gnome 3 done to my g\u0026rsquo;s: ","date":"10 November 2011","externalUrl":null,"permalink":"/posts/mygs/","section":"Posts","summary":"What has Gnome 3 done to my g’s: ","title":"My g's","type":"posts"},{"content":"This is a panoramic I took from the top of our apartment in Sharm el-Sheikh in Egypt: This is a panoramic I took from the top of the Panoramic bar in Naama Bay, Sharm el-Sheikh in Egypt: This is a panoramic I took from the top of the Montets lift at the top of one of the glaciers in Val d\u0026rsquo;Isere (2011): This is a panoramic I took from somewhere in Courchevel or Meribel (2010): This is a panoramic I took at the Oslo ski jump These are three panoramics I took when skiing in 2008? (Chamonix and Zermatt) ","date":"19 October 2011","externalUrl":null,"permalink":"/posts/panoramics/","section":"Posts","summary":"This is a panoramic I took from the top of our apartment in Sharm el-Sheikh in Egypt: ","title":"Panoramics","type":"posts"},{"content":"","date":"29 September 2011","externalUrl":null,"permalink":"/tags/birthday/","section":"Tags","summary":"","title":"Birthday","type":"tags"},{"content":"birthday.html\n","date":"29 September 2011","externalUrl":null,"permalink":"/posts/thirtiethbirthday/","section":"Posts","summary":"birthday.html\n","title":"Thirtieth Birthday","type":"posts"},{"content":" ","date":"24 August 2011","externalUrl":null,"permalink":"/posts/hydralvm/","section":"Posts","summary":"","title":"Hydra LVM","type":"posts"},{"content":"","date":"24 August 2011","externalUrl":null,"permalink":"/tags/lvm/","section":"Tags","summary":"","title":"Lvm","type":"tags"},{"content":"","date":"1 June 2011","externalUrl":null,"permalink":"/tags/coffee/","section":"Tags","summary":"","title":"Coffee","type":"tags"},{"content":"Whenever I buy coffee I usually get a small or a medium. Up to now I\u0026rsquo;ve always seemed to enjoy the small ones more. I\u0026rsquo;ve always assumed it was because a medium was too much of a good thing, which has led me to hardly ever get a large.\nHowever I was thinking recently that maybe I was wrong and the small ones just taste better. This led me to wonder why. Anyone that knows me knows that I love milk. I thought that maybe I liked more milky ones better. I decided to conduct an experiment; over a few days I got a small, medium and large coffee to measure how much milk will fit in each one.\nI didn\u0026rsquo;t bother measuring the volume of the paper cups I just read the volume from some text on the bottom of the Starbucks cups, assumed each shot was 30ml and I also did not take into account milk foam or dead space at the top of the cup. Anyway here are the results:\nCup Size Cup Volume (ml) Shots Coffee Volume (ml) Total Milk (ml) Milk to Coffee Ratio Large 605.8 3 3*30=90 605.8-90=515.8 515.8/90=5.73 Medium 473 2 2*30=60 473-60=413 413/60=6.88 Small 355 1 1*30=30ml 355-30=325 325/30=10.83 I can now conclusively state that the milk to coffee ratio is highest for small cups, almost double that of the medium and large. Whereas large and medium are relatively similar. Further investigation will be required to measure the cups and shot sizes more accurately. As well as real mugs rather than paper ones. As a side note, getting a medium with one shot will result in a milk to coffee ratio of around 15, which could even be too milky for me! However a large with two shots comes in around at 9 which is similar to the small ratio.\nFrom now on I will just get smalls and if I want more I\u0026rsquo;ll just buy two cups!\n","date":"1 June 2011","externalUrl":null,"permalink":"/posts/milktocoffeeratio/","section":"Posts","summary":"Whenever I buy coffee I usually get a small or a medium. Up to now I’ve always seemed to enjoy the small ones more. I’ve always assumed it was because a medium was too much of a good thing, which has led me to hardly ever get a large.\n","title":"Milk to Coffee Ratio","type":"posts"},{"content":"The BBC Big Read Top 100 Book list\nhttps://www.bbc.co.uk/arts/bigread/top100.shtml https://www.bbc.co.uk/programmes/p050hqy1?page=1\n","date":"22 May 2011","externalUrl":null,"permalink":"/posts/bigreadtop100/","section":"Posts","summary":"The BBC Big Read Top 100 Book list\n","title":"Big Read Top 100","type":"posts"},{"content":"","date":"22 May 2011","externalUrl":null,"permalink":"/tags/books/","section":"Tags","summary":"","title":"Books","type":"tags"},{"content":"","date":"22 May 2011","externalUrl":null,"permalink":"/tags/reading/","section":"Tags","summary":"","title":"Reading","type":"tags"},{"content":"","date":"29 March 2011","externalUrl":null,"permalink":"/tags/nagios/","section":"Tags","summary":"","title":"Nagios","type":"tags"},{"content":"I use nagios to monitor servers. It\u0026rsquo;s great. I just thought I would share a quick snippet that I just put in my vimrc. It sorts the servers listed in host_name lines so they are in alphabetical order. Put the following in your vimrc, move your cursor over a host_name line and hit F2 and it will sort the server list.\nmap #2 V:! sed \u0026#39;s/host_name//\u0026#39; \\| sed \u0026#39;s/[ \\t]//g\u0026#39; \\| tr \u0026#39;,\u0026#39; \u0026#39;\\n\u0026#39; \\| sort \\| uniq \\| xargs \\| sed \u0026#39;s/ /, /g\u0026#39; \\| sed \u0026#39;s/^/\\thost_name\\t\\t\\t/\u0026#39; ","date":"29 March 2011","externalUrl":null,"permalink":"/posts/vimrcfornagios/","section":"Posts","summary":"I use nagios to monitor servers. It’s great. I just thought I would share a quick snippet that I just put in my vimrc. It sorts the servers listed in host_name lines so they are in alphabetical order. Put the following in your vimrc, move your cursor over a host_name line and hit F2 and it will sort the server list.\n","title":"vimrc for nagios","type":"posts"},{"content":"Petrol prices are always on the rise. I decided to do some analysis on some raw data comparing the price of Brent crude oil and the price of petrol. The details of the analysis are on my site. I found out that there is a direct correlation between the price of Brent crude oil and the price of petrol at the pump excluding duty and VAT.\nI concluded that if the price of Brent crude oil stays at $115 per barrel then the price of petrol will increase to 136.14 +/- 3.92 pence per litre, with petrol at around 125 at the time of the analysis.\n","date":"28 March 2011","externalUrl":null,"permalink":"/posts/petrolprice/","section":"Posts","summary":"Petrol prices are always on the rise. I decided to do some analysis on some raw data comparing the price of Brent crude oil and the price of petrol. The details of the analysis are on my site. I found out that there is a direct correlation between the price of Brent crude oil and the price of petrol at the pump excluding duty and VAT.\n","title":"Petrol Price","type":"posts"},{"content":"Petrol prices always seem to be in the news. This is mostly because it costs a lot of money and continues to increase all the time. Duty increases and VAT increases are both usually blamed. Also the price of crude oil is often blamed. This made me wonder if there was an actual correlation between crude oil and petrol at the pump. I did a little searching but did not find anything solid. In fact the graphs I did find were particularly bad, including one graph that plotted crude oil and petrol using different scales on the same graph. Some did produce vaguely interesting graphs but few provide their sources and none provided the raw source data.\nI decided to take matters into my own hands and do some data analysis on the raw data. Getting hold of this data actually proved to be quite difficult. After quite a bit of searching I eventually found historical prices of Brent Crude Oil on the US Energy Information Administration website. I found historical UK fuel prices on the UK Department of Energy and Climate Change. I even found historical exchange rates on Oanda.\nCurrently I drive a petrol-fueled car so I concentrated on petrol and discarded diesel. I expect diesel prices are quite similar. The crude oil and petrol figures I obtained were weekly averages. I decided to use Excel to do most of my analysis, this is mostly because I\u0026rsquo;m more familiar with it and did not want to learn another package at the same time. I had just under 8 years of data to work with. I first worked on the petrol figures, I deducted the VAT rate at the time and then deducted the petrol duty amount at the time, both of which were helpfully included in the data. I then worked out the monthly average for both sets of figures. I did this because the dates for crude oil and petrol did not match up. I used the historical exchange rates to calculate the price of Brent crude oil in pounds (it is usually quoted in US Dollars). I was then able to plot the petrol price against the Brent crude for each month for the past 8 years. After quite some time battling with Excel I managed to produce something that is not too far from what I wanted.\nAs you can see, this produces quite a positive correlation; this actually surprised me. Linear regression calculated R^2^ as 0.9691. It was at this point that I started hitting problems with Excel\u0026rsquo;s data analysis as well as my own statistical knowledge. Excel\u0026rsquo;s regression add-in in the data analysis pack was able to produce some figures, but I did not find them very useful. I then turned to my friendly local statistician. She loaded all my data into minitab. This turned out to be quite a cool program allowing the user to quickly analyze the data. It produced the same regression equation as Excel. It also produced many more numbers as well as 4 little residual plots that look quite pretty.\nMinitab then calculated a prediction point for a Brent crude oil value of £71.7, i.e. the current price of a barrel of Brent crude oil is $115 (on 11/03/2011). It was able to calculate confidence and prediction intervals. It can predict future values of fuel based on the Brent crude oil price. If Brent crude oil stays at the current price of $115 per barrel and duty and VAT are added back on it gives the price of petrol at the pump at 136.14 +-3.92 ppl. This is interesting as the lower prediction is 132.22 which is fairly close to today’s current price (11/03/2011).\nI also drew up a quick plot projecting the petrol price if the price of Brent crude oil continues to rise by another 50p\nThe generic formula is: Unleaded Petrol at Pump = ((7.08+(b/u)*0.661)+d)*v. Where b is the Price of Brent Crude oil, u is the USD2GBP rate, d is the duty and v is the VAT. The above graph uses this: ((7.08+(Brent Crude/1.60129)*0.661)+58.95)*1.2.\nI have more ideas for analysis. I wanted to try to calculate the lag between crude oil price changes and petrol prices but I\u0026rsquo;m not really sure this is possible with the current data. Plus I don\u0026rsquo;t have any idea how to do this. I did graph duty against time, interestingly this was quite linear even though duty up to now was supposed to be tracking inflation, however fuel affects inflation so I\u0026rsquo;m not so sure.\nI\u0026rsquo;ve also got a copy of the spreadsheet I used for my analysis: oil20110312.xlsx, sorry it\u0026rsquo;s in Open XML. It\u0026rsquo;s released under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License..\n","date":"28 March 2011","externalUrl":null,"permalink":"/projects/petrolprice/","section":"Projects","summary":"Petrol prices always seem to be in the news. This is mostly because it costs a lot of money and continues to increase all the time. Duty increases and VAT increases are both usually blamed. Also the price of crude oil is often blamed. This made me wonder if there was an actual correlation between crude oil and petrol at the pump. I did a little searching but did not find anything solid. In fact the graphs I did find were particularly bad, including one graph that plotted crude oil and petrol using different scales on the same graph. Some did produce vaguely interesting graphs but few provide their sources and none provided the raw source data.\n","title":"Petrol Price","type":"projects"},{"content":"I love going to the cinema. I usually go once a week to my local Cineworld multiplex. Their website has changed a few times over the years. Generally the changes have all been improvements and my local cinema listing is good. However all cinema websites I have found lack an important view on the listings data. That is a chronological order rather than a film title order. Why is this useful you ask? Well if I want to go to the cinema on a particular evening I really don\u0026rsquo;t care what other films are showing outside my allocated timeslot. I want to be able to easily see which films are going to start say between 7 and 8 that I have not already seen.\nCineworld Scraper # So what I did first was email their webmaster, after which I got no response. So I then decided to try to have a go at it myself. To show a different view of the data I needed an actual data source. So I emailed a few other sites to ask where they got their listings data. Surprise surprise no response from them either. They say if you want something done, do it yourself. So I did.\nI wrote a script that downloads the raw html pages from the cineworld website and parses it and produces an xml file with the listings data. Initially it was a perl script that was rather hacky and very prone to breakage. It then got rewritten using a few cpan modules to parse the html and use xpath to search for the relevant bits of data. I then rewrote it in a more general form in python.\nThe source is available and is licensed under the GPLv3 or later, its complete history is also available via git.\nCurrently it is croned to get my local cinemas listings and creates the http://www.stewarts.org.uk/cw/cw.xml each night (Currently broken). I\u0026rsquo;m not sure if cinemas use an XML or have any standards so I went with my own dtd which heavily reflects the data that Cineworld expose.\nChooser # Having an XML file with the raw data is all very cool but it does not really solve the problem. So next I created a transform that displays all the showings in chronological order and outputs to a html file that is easily viewable in both a normal browser and a phone (be warned the resultant html is quite large). Both web browsers don\u0026rsquo;t have good enough xml/xstl brains to do the transform so the output (cw.html) is pre-generated each night at the end of the scrape process.\nI then added some more javascript that tries to make the film selection process easier. One link to only show films in my usual time slot and one to show films that are going to start in the next hour. There are also links to hide showings, this javascript stores the films that are seen in a cookie. So the next time the page is viewed it will not show it. This it not ideal, but it works.\nAn Alternative # Recently I found out with the help of google that Cineworld themselves publish more of the raw listings data on their site. It seems to be quite a new thing, 03/03/2009 according to the http://www.cineworld.co.uk/syndication/Readme.txt. A http://www.cineworld.co.uk/syndication/ list shows all the available exports but the main one seems to be http://www.cineworld.co.uk/syndication/listings.xml. I\u0026rsquo;m not sure why they split the data into so many xml files. The dtd is quite similar but I\u0026rsquo;m not sure I like all of their choices. Plus they don\u0026rsquo;t actually export all the data, for instance no link to thumbnail of movie, which is a showstopper for me.\n","date":"13 March 2011","externalUrl":null,"permalink":"/projects/cineworldscrape/","section":"Projects","summary":"I love going to the cinema. I usually go once a week to my local Cineworld multiplex. Their website has changed a few times over the years. Generally the changes have all been improvements and my local cinema listing is good. However all cinema websites I have found lack an important view on the listings data. That is a chronological order rather than a film title order. Why is this useful you ask? Well if I want to go to the cinema on a particular evening I really don’t care what other films are showing outside my allocated timeslot. I want to be able to easily see which films are going to start say between 7 and 8 that I have not already seen.\n","title":"Cineworld Scrape","type":"projects"},{"content":"A colleague asked me how much bandwidth Spotify uses. I basically had no idea. I want to run Spotify on my mobile at some point, so it got me thinking. I decided to do some basic analysis. I ran the client behind a http proxy for a day or so and ran a tcpdump at the same time with a filter to capture all the traffic to the proxy. The dump ran from 19/10/2010 11:46 to 20/10/2010 17:19 and produced a 362M capture file. For the most part I was not playing any music, then for the last few hours I played music I had not played before.\nI then started trying to analyse the dump. As amazing as Wireshark is it\u0026rsquo;s really not too good at looking at large dumps or large amounts of data. I then found Chaosreader which made it very easy. It basically looks at one big pcap file and splits it into the individual tcp streams, analyses them and produces a nice html report. Check out the example report for some examples of what it can do.\nThe Spotify client tries a few ways of connecting. It first tries to connect to a server on port 4070, which fails because the proxy does not allow CONNECTs to that port.\nc: CONNECT A1.spotify.com:4070 HTTP/1.0 s: HTTP/1.0 403 Forbidden Next it tries port 80, which is also blocked.\nc: CONNECT A2.spotify.com:80 HTTP/1.0 s: HTTP/1.0 403 Forbidden And finally it tries 443 and establishes an SSL connection. It is this connection that lasts for the duration that the Spotify client runs.\nc: CONNECT A3.spotify.com:443 HTTP/1.0 s: HTTP/1.0 200 Connection established I\u0026rsquo;ll get back to the main stream of data in a minute. While the client is running it makes various requests to some other sites. I think these only happen when Spotify social is turned on. There are many short lived connections to Twitter and Facebook.\nGET http://api.twitter.com/1/statuses/user_timeline.json?id=spotify\u0026amp;count=100\u0026amp;since_id=1\u0026amp;include_entities=true HTTP/1.1 Host: api.twitter.com User-Agent: Spotify-Win32/0.71/40800213 Keep-Alive: 300 Connection: keep-alive Accept-Encoding: gzip It made 354 connections and GET requests to the above twitter json api. It also made 89 connections and GET requests to the below Facebook api. This works out at about 12 connections per hour for twitter and 3 connections per hour for Facebook. Which all sounds quite reasonable.\nGET http://api.facebook.com/restserver.php?api_key=VERYLONGREQUESTSTRING HTTP/1.1 Host: api.facebook.com User-Agent: Spotify-Win32/0.71/40800213 Keep-Alive: 300 Connection: keep-alive Accept-Encoding: gzip Now back to the main stream. Once the client gets a connection to the Spotify servers and it establishes what looks like an encrypted stream. Once this happens the entirety of the conversation with the server looks like gibberish. This is a bit annoying as I can\u0026rsquo;t really look further into how it works. However I\u0026rsquo;m still able to see how much data is transferred and thus can calculate average data rates.\nI looked at the TCP stream between 0:00 and 6:00. The music was stopped for the whole of the time. As you might expect not much activity happened during this time, 7.5 KiB was sent to the server and 9.7 KiB was received. The average packet size was 77 bytes long. The overall data rate was 5 bytes per second, i.e. 0.005 KiB/s. Almost no traffic!\nI also looked at the half hour window from 12:00 to 12:30 where I played music I had not played before and thus was not cached locally. Spotify relies heavily on local cache, ~/.wine/drive_c/users/thomas/Local Settings/Application Data/Spotify/Storage is currently 1.2G on my work desktop where I don\u0026rsquo;t have any offline play lists. During this 30 minute window, 10.2 KiB was sent from the server and 26.4 MiB was received. The average packet size was 775 bytes long. The overall data rate was 16.5 KiB/s. This is a lot less than I expected.\nAfter looking at the Wikipedia list of mobile telephone bandwidths I conclude that to run Spotify on a phone both GSM and GPRS are too slow, 1.8 KiB/s and 7.2 KiB/s respectively. Only EDGE and faster is good enough at 48KiB/s. Of course this assumes that the mobile client uses the same bandwidth. The other thing to note is that an 8M internet connection should be able to sustain 62 Spotify users, assuming that they are all listening to new music.\n(Note: I did most of this back in October 2010 but only got round to writing the concluding 4 paragraphs today.)\n","date":"4 March 2011","externalUrl":null,"permalink":"/posts/spotifytrafficanalysis/","section":"Posts","summary":"A colleague asked me how much bandwidth Spotify uses. I basically had no idea. I want to run Spotify on my mobile at some point, so it got me thinking. I decided to do some basic analysis. I ran the client behind a http proxy for a day or so and ran a tcpdump at the same time with a filter to capture all the traffic to the proxy. The dump ran from 19/10/2010 11:46 to 20/10/2010 17:19 and produced a 362M capture file. For the most part I was not playing any music, then for the last few hours I played music I had not played before.\n","title":"Spotify Traffic Analysis","type":"posts"},{"content":"This year seems to have flown by so it\u0026rsquo;s resolutions time again. I\u0026rsquo;ve done quite well; I managed to stay relatively healthy and read loads of books but I failed completely to keep up to date with LWN.\nIncluding the books from July, I\u0026rsquo;ve managed to read 18 books, which is ace! Please make recommendations.\nThe Magicians - Lev Grossman Woken Furies - Richard K. Morgan A Thief of Time - Terry Pratchett Making Money - Terry Pratchett Ender\u0026rsquo;s Game - Orson Scott Card Century Rain - Alastair Reynolds Terry Pratchett - Going Postal Total Poker - David Spanier The Girl with the Dragon Tattoo - Stieg Larsson The Girl Who Played with Fire - Stieg Larsson The Girl Who Kicked the Hornets\u0026rsquo; Nest - Stieg Larsson As for this year\u0026rsquo;s resolutions, it\u0026rsquo;s almost going to be the same.\nStay super healthy for January and February, except for Little Christmas and Skiing Keeping to my minimum weekly gym schedule, 3 morning swims, 2 morning spins, 2 afternoon spins, 2 afternoon yogas, 1-2 weekend weights and cv. No snacks during the day. No cake or chocolate (except for cake club). Herbal tea during the day with no milk. No burgers, chips or beer. No getting drunk. Drinking loads of water. Start reading LWN again. ","date":"4 January 2011","externalUrl":null,"permalink":"/posts/newyear2011/","section":"Posts","summary":"This year seems to have flown by so it’s resolutions time again. I’ve done quite well; I managed to stay relatively healthy and read loads of books but I failed completely to keep up to date with LWN.\n","title":"New Year's resolutions 2011","type":"posts"},{"content":"","date":"4 January 2011","externalUrl":null,"permalink":"/tags/resolutions/","section":"Tags","summary":"","title":"Resolutions","type":"tags"},{"content":"Too many tabs! ","date":"22 November 2010","externalUrl":null,"permalink":"/posts/toomanytabs/","section":"Posts","summary":"Too many tabs! ","title":"Too Many Tabs","type":"posts"},{"content":"","date":"15 November 2010","externalUrl":null,"permalink":"/tags/rsync/","section":"Tags","summary":"","title":"Rsync","type":"tags"},{"content":"Rsync is ace. It\u0026rsquo;s also available for Windows as part of the Cygwin distro. Every time I need it I have to do a token Cygwin install, install rsync, copy out the various rsync files and remove the Cygwin install. Here, mostly for my pleasure, is a very out of date zip with just the rsync files in!\ncygwin-rsync.zip\n","date":"15 November 2010","externalUrl":null,"permalink":"/posts/rsyncforwindows/","section":"Posts","summary":"Rsync is ace. It’s also available for Windows as part of the Cygwin distro. Every time I need it I have to do a token Cygwin install, install rsync, copy out the various rsync files and remove the Cygwin install. Here, mostly for my pleasure, is a very out of date zip with just the rsync files in!\n","title":"Rsync for Windows","type":"posts"},{"content":"","date":"6 October 2010","externalUrl":null,"permalink":"/tags/disk/","section":"Tags","summary":"","title":"Disk","type":"tags"},{"content":"","date":"6 October 2010","externalUrl":null,"permalink":"/tags/fsck/","section":"Tags","summary":"","title":"Fsck","type":"tags"},{"content":"On Sunday (03/10/2010) my laptop had a bad crash. The screen went blank; I could still see the cursor and move it around, but could do nothing else. I could not even log in on a virtual console. After I typed the user name it came straight back with a login prompt again. I rebooted, grub loaded, Linux ran, the initramfs loaded and started and then it moaned about not being able to mount the root filesystem and dropped me to a prompt.\nAfter this I decided to pull out my GRML recovery CD. What happened next could only be described as major filesystem corruption. I ran the usual \u0026ldquo;sudo fsck -C -t ext3 -f -y /dev/mapper/ikaite-root\u0026rdquo; inside a script session to capture the output. This grew to 42M (a clean fsck is about 150k of script output). After it finally finished I ran it again and it came back clean. After I mounted the filesystem, there were no files left, and around 6,000 entries in lost+found. Looks like I\u0026rsquo;ll be reinstalling it!\nI then did some minor analysis on the fsck output. First I wanted to see what the common errors and questions were. A quick use of sed to remove numbers enabled me to count them up with: \u0026ldquo;cat fsck.root | sed \u0026rsquo;s/[0-9][0-9]*//g\u0026rsquo; | sort | uniq -c | grep -v \u0026ldquo;^ 1\u0026rdquo; | sort -n | tail -10\u0026rdquo; produces:\n32901 Inode has imagic flag set. Clear? yes 34415 Illegal block number passed to extfs_test_block_bitmap # for multiply claimed block map 36479 Inode , i_size is , should be . Fix? yes 40991 Inode has a extra size () which is invalid 41422 Inode , i_blocks is , should be . Fix? yes 41438 Inode is in use, but has dtime set. Fix? yes 45689 Fix? yes 61402 Illegal block # () in inode . CLEARED. 73733 Clear? yes 425742\nSomething else I noticed was that there were many \u0026ldquo;WARNING: PROGRAMMING BUG IN E2FSCK\u0026rdquo;! messages; there were 23 of them!\n","date":"6 October 2010","externalUrl":null,"permalink":"/posts/majorfilesystemcorruption/","section":"Posts","summary":"On Sunday (03/10/2010) my laptop had a bad crash. The screen went blank; I could still see the cursor and move it around, but could do nothing else. I could not even log in on a virtual console. After I typed the user name it came straight back with a login prompt again. I rebooted, grub loaded, Linux ran, the initramfs loaded and started and then it moaned about not being able to mount the root filesystem and dropped me to a prompt.\n","title":"Major Filesystem Corruption","type":"posts"},{"content":"","date":"17 September 2010","externalUrl":null,"permalink":"/tags/backup/","section":"Tags","summary":"","title":"Backup","type":"tags"},{"content":"","date":"17 September 2010","externalUrl":null,"permalink":"/tags/netbackup/","section":"Tags","summary":"","title":"Netbackup","type":"tags"},{"content":"This is a quick guide on how to configure an ODBC connection from windows to a Symantec OpsCenter Server. OpsCenter is a Symantec product that integrates various backup products including Netbackup to generate various reports and warnings about how the systems are performing. It used to be a purchasable option with NetBackup 6, however since the release of NetBackup 7 a cut down version is bundled in. It works quite well and can generate pretty reports in various forms and do various things to them. However it\u0026rsquo;s not very customisable. OpsCenter actually uses SQL Anywhere RDBMS as a back end for all the data. Thus if ODBC is configured anything can query the very same data and produce reports. I\u0026rsquo;m going to use crystal reports to generate many pretty pie charts.\nStep one is to download the ODBC driver, I\u0026rsquo;m guessing that any SQL Anywhere driver would work however it seems better to use a more officially one. There is one on the Veritas ftp site, ftp://ftp.veritas.com/pub/opscenter/sqlanywhere_11_odbc.zip Veritas used to make NetBackup until they got bought by Symantec. I\u0026rsquo;m not sure about the licensing of this, it looks really like the SQL Anywhere driver. Anyway licensing aside, unzip and install the driver. In ODBC Data Source Administrator add a new data source with the driver \u0026ldquo;OPSCENTER SQL Anywhere\u0026rdquo;. The next part is the tricky bit, most settings were either guessed, googled or found out from digging about in /opt on the OpsCenter server. In the ODBC tab give it a meaningful \u0026ldquo;Data source name\u0026rdquo; In the Login tab use the \u0026ldquo;DBA\u0026rdquo; as the \u0026ldquo;User ID\u0026rdquo; and \u0026ldquo;SQL\u0026rdquo; as the \u0026ldquo;Password\u0026rdquo;, (yes every OpsCenter install has this default username and password open to the world for all to use, yikes!) In the \u0026ldquo;Server name\u0026rdquo; you put in a concatenation of \u0026ldquo;OPSCENTER_\u0026rdquo; and the OpsCenter host name, eg \u0026ldquo;OPSCENTER_kunzite\u0026rdquo; In the Network tab check TCP/IP and uncheck \u0026ldquo;Shared memory\u0026rdquo;. In the TCP/IP box enter \u0026ldquo;HOST=hostname;PORT=13786\u0026rdquo; replacing hostname with the OpsCenter hostname, eg \u0026ldquo;HOST=kunzite;PORT=13786\u0026rdquo;. In the Advanced tab enter \u0026ldquo;utf8\u0026rdquo; in the \u0026ldquo;Character set\u0026rdquo;. That is it, ODBC aware applications can now query the database! ","date":"17 September 2010","externalUrl":null,"permalink":"/posts/odbc2opscenteraccess/","section":"Posts","summary":"This is a quick guide on how to configure an ODBC connection from windows to a Symantec OpsCenter Server. OpsCenter is a Symantec product that integrates various backup products including Netbackup to generate various reports and warnings about how the systems are performing. It used to be a purchasable option with NetBackup 6, however since the release of NetBackup 7 a cut down version is bundled in. It works quite well and can generate pretty reports in various forms and do various things to them. However it’s not very customisable. OpsCenter actually uses SQL Anywhere RDBMS as a back end for all the data. Thus if ODBC is configured anything can query the very same data and produce reports. I’m going to use crystal reports to generate many pretty pie charts.\n","title":"ODBC 2 OpsCenter Access","type":"posts"},{"content":"OpsCenter is a Symantec product that makes reports for various backup products including Symantec NetBackup. I recently decided that I wanted to improve the reporting of our backups so looked into playing with OpsCenter. It turns out that it\u0026rsquo;s not actually that configurable, which is a shame as it\u0026rsquo;s mostly quite good.\nIt does however use a standard RDBMS that appears to be an OEMed version of Sybase\u0026rsquo;s SQL Anywhere to store the data. I thought: great, now I\u0026rsquo;ll be able to use my own tools to query and report on the backend. I want to make pretty pie charts, report on total data transferred and as well as actual important things like jobs that have failed.\nI did a bit of light googling without much success; however I was convinced that I could configure an ODBC driver on Windows to talk to the database so that Crystal Reports could create said pie charts!\nI then remembered, we pay quite a substantial amount of money to Symantec for support. I thought, amazing I\u0026rsquo;ll just ask them: they can tell me how to configure the ODBC driver and save me a bunch of time figuring it out! Roll forward one month of emails (they don\u0026rsquo;t seem to like the phone), and I got this conclusion:\nOn 2010-09-13 06:21, enterprise_support@symantec.com wrote: \u0026gt; Further to our discussion regarding this case, it has been confirmed \u0026gt; by backline that we can only provide you the ODBC drivers for the \u0026gt; OpsCenter(As ****** has already sent to you), however unfortunately we \u0026gt; cannot support or provide the technical know how regarding integrating \u0026gt; OpsCenter database with any third party front end reporting software \u0026gt; like Crystal Reports. So much for support! The age old saying: if you want something done, do it yourself, thus I have documented ODBC 2 OpsCenter Access for anyone else out there that needs it! I really wish I could use something more free to do all this stuff.\n","date":"16 September 2010","externalUrl":null,"permalink":"/posts/odbc2opscenter/","section":"Posts","summary":"OpsCenter is a Symantec product that makes reports for various backup products including Symantec NetBackup. I recently decided that I wanted to improve the reporting of our backups so looked into playing with OpsCenter. It turns out that it’s not actually that configurable, which is a shame as it’s mostly quite good.\n","title":"ODBC 2 OpsCenter","type":"posts"},{"content":"","date":"27 August 2010","externalUrl":null,"permalink":"/tags/sms/","section":"Tags","summary":"","title":"Sms","type":"tags"},{"content":"I use Nagios for monitoring. Up to recently I used a regular modem to send sms text messages to various people when systems are going wrong. The way this works is by using smsclient which dials up to a TAP server. [TAP] (http://en.wikipedia.org/wiki/Telelocator_Alphanumeric_Protocol) is a fairly archaic way of sending messages. It\u0026rsquo;s been fairly reliable however it has two major drawbacks, sending takes a long time and it\u0026rsquo;s limited to 160 characters. As far as I can tell it will not do long text messages, which are really just multiple short message combined together in a special way.\nI wanted a better way! Something that sounded nice was using the mobile network to send messages, that way I could bypass most of the internal infrastructure and take the notifying system as out of band as possible. After a good bit of research I finally settled on a Maestro 100 from RF Solutions. It also turns out that smstools can use it out of the box. I\u0026rsquo;m so pleased!\n","date":"27 August 2010","externalUrl":null,"permalink":"/posts/smsnotificationsfornagios/","section":"Posts","summary":"I use Nagios for monitoring. Up to recently I used a regular modem to send sms text messages to various people when systems are going wrong. The way this works is by using smsclient which dials up to a TAP server. [TAP] (http://en.wikipedia.org/wiki/Telelocator_Alphanumeric_Protocol) is a fairly archaic way of sending messages. It’s been fairly reliable however it has two major drawbacks, sending takes a long time and it’s limited to 160 characters. As far as I can tell it will not do long text messages, which are really just multiple short message combined together in a special way.\n","title":"SMS Notifications for Nagios","type":"posts"},{"content":"I was looking at a development web site I am involved with and I was interested in where the site was in the big bad world, so I decided to traceroute to it [1]. What seemed very unusual was that the 5th hop reported an IP address in the 10.0.0.0/8 private address space. To quote Sam \u0026ldquo;10.what now?\u0026rdquo;. I\u0026rsquo;m still amazed that packets with private source addresses are routed across the Internet![2]\n[1] $ sudo traceroute -m 10 -N 1 -M default 78.86.199.179 traceroute to 78.86.199.179 (78.86.199.179), 10 hops max, 40 byte packets 1 80-68-93-1.no-reverse-dns-set.bytemark.co.uk (80.68.93.1) 0.389 ms 0.174 ms 0.154 ms 2 89-16-188-3.no-reverse-dns-set.bytemark.co.uk (89.16.188.3) 0.366 ms 0.440 ms 0.326 ms 3 gi4-19.cr01.thn.bytemark.co.uk (80.68.80.73) 6.822 ms 6.707 ms 7.314 ms 4 * * linx-gw1.betherenow.co.uk (195.66.224.232) 11.099 ms 5 10.1.3.177 (10.1.3.177) 9.041 ms 8.237 ms 7.706 ms 6 * * * 7 * * * 8 * * * 9 * * * 10 * * * $ $ sudo traceroute -m 10 -N 1 -M icmp 78.86.199.179 traceroute to 78.86.199.179 (78.86.199.179), 10 hops max, 40 byte packets 1 80-68-93-1.no-reverse-dns-set.bytemark.co.uk (80.68.93.1) 0.216 ms 0.134 ms 0.092 ms 2 89-16-188-3.no-reverse-dns-set.bytemark.co.uk (89.16.188.3) 0.404 ms 0.382 ms 0.451 ms 3 gi4-19.cr01.thn.bytemark.co.uk (80.68.80.73) 8.107 ms 7.459 ms 7.462 ms 4 linx-gw1.betherenow.co.uk (195.66.224.232) 7.653 ms 7.440 ms 8.356 ms 5 10.1.3.177 (10.1.3.177) 10.940 ms 20.268 ms 9.236 ms 6 * * * 7 * * * 8 * * * 9 * * * 10 * * * $ $ sudo traceroute -m 10 -N 1 -M tcp 78.86.199.179 traceroute to 78.86.199.179 (78.86.199.179), 10 hops max, 40 byte packets 1 80-68-93-1.no-reverse-dns-set.bytemark.co.uk (80.68.93.1) 0.323 ms 0.437 ms 0.200 ms 2 89-16-188-3.no-reverse-dns-set.bytemark.co.uk (89.16.188.3) 0.446 ms 0.333 ms 0.391 ms 3 gi4-19.cr01.thn.bytemark.co.uk (80.68.80.73) 7.120 ms 6.713 ms 6.800 ms 4 linx-gw1.betherenow.co.uk (195.66.224.232) 7.925 ms 7.737 ms 7.881 ms 5 10.1.3.177 (10.1.3.177) 7.816 ms 7.500 ms 8.614 ms 6 78-86-199-179.zone2.bethere.co.uk (78.86.199.179) 21.213 ms 21.239 ms 21.242 ms 7 78-86-199-179.zone2.bethere.co.uk (78.86.199.179) 20.770 ms 21.662 ms 22.061 ms $ $ sudo traceroute -m 10 -N 1 -M udp 78.86.199.179 traceroute to 78.86.199.179 (78.86.199.179), 10 hops max, 40 byte packets 1 80-68-93-1.no-reverse-dns-set.bytemark.co.uk (80.68.93.1) 0.276 ms 0.096 ms 0.091 ms 2 89-16-188-3.no-reverse-dns-set.bytemark.co.uk (89.16.188.3) 0.444 ms 0.409 ms 0.403 ms 3 gi4-19.cr01.thn.bytemark.co.uk (80.68.80.73) 6.747 ms 6.797 ms 6.844 ms 4 * linx-gw1.betherenow.co.uk (195.66.224.232) 7.620 ms 7.488 ms 5 10.1.3.177 (10.1.3.177) 8.766 ms 7.501 ms 8.638 ms 6 * * * 7 * * * 8 * * * 9 * * * 10 * * * $ $ sudo traceroute -m 10 -N 1 -M raw 78.86.199.179 traceroute to 78.86.199.179 (78.86.199.179), 10 hops max, 40 byte packets 1 80-68-93-1.no-reverse-dns-set.bytemark.co.uk (80.68.93.1) 0.314 ms 0.097 ms 0.093 ms 2 89-16-188-3.no-reverse-dns-set.bytemark.co.uk (89.16.188.3) 0.378 ms 0.412 ms 0.330 ms 3 gi4-19.cr01.thn.bytemark.co.uk (80.68.80.73) 23.388 ms 8.331 ms 7.084 ms 4 linx-gw1.betherenow.co.uk (195.66.224.232) 8.294 ms 7.517 ms 8.027 ms 5 10.1.3.177 (10.1.3.177) 8.502 ms 7.589 ms 7.450 ms 6 * * * 7 * * * 8 * * * 9 * * * 10 * * * $ [2] $ tshark -r cap -R \u0026#34;ip.src == 10.0.0.0/8\u0026#34; 177 8.113729 10.1.3.177 -\u0026gt; 80.68.93.148 ICMP Time-to-live exceeded (Time to live exceeded in transit) 183 8.122267 10.1.3.177 -\u0026gt; 80.68.93.148 ICMP Time-to-live exceeded (Time to live exceeded in transit) 187 8.130944 10.1.3.177 -\u0026gt; 80.68.93.148 ICMP Time-to-live exceeded (Time to live exceeded in transit) $ ","date":"29 July 2010","externalUrl":null,"permalink":"/posts/weirdtraceroute/","section":"Posts","summary":"I was looking at a development web site I am involved with and I was interested in where the site was in the big bad world, so I decided to traceroute to it [1]. What seemed very unusual was that the 5th hop reported an IP address in the 10.0.0.0/8 private address space. To quote Sam “10.what now?”. I’m still amazed that packets with private source addresses are routed across the Internet![2]\n","title":"Weird Traceroute","type":"posts"},{"content":"","date":"22 July 2010","externalUrl":null,"permalink":"/tags/gym/","section":"Tags","summary":"","title":"Gym","type":"tags"},{"content":"I go to spinning quite a bit and I think I have had six teachers over the last year since I started. I think every teacher has one phrase they use most; this is not a bad thing, it\u0026rsquo;s just something I have noticed. I present an anonymous list of them here.\nbutts over the saddles quarter turn begin with the end in mind go go go go go go go go go go go go go go go go go go go go thumbs on the ends of the handlebars ","date":"22 July 2010","externalUrl":null,"permalink":"/posts/spinningphrases/","section":"Posts","summary":"I go to spinning quite a bit and I think I have had six teachers over the last year since I started. I think every teacher has one phrase they use most; this is not a bad thing, it’s just something I have noticed. I present an anonymous list of them here.\n","title":"Spinning Phrases","type":"posts"},{"content":"Recently I needed to find a way to search for accounts in an active directory that are enabled and have not logged on for a while. Fortunately there is a lastLogon attribute, unfortunately this is not replicated across the various domain controllers. Lord only knows why, but lastLogon is the number of 100 nano second intervals since 1601, fortunately this is documented.\nTo accomplish this I wrote a python script to do all this searching and just in case this is useful for anyone else, I have made the lastlogon script available. It will need editing before it works mind.\nTime passes, 9 months in fact and a similar audit is scheduled. Of course I completely forgot that I had written the above, so I set about to write a script to do the above. It turned out as I was less rushed I ended up doing it more efficiently. I now make one ldap bind to each dc in turn, whereas before I made one ldap bind to each dc for each user! Plus the new version is slightly easier to read. I present the improved enabled.and.not.loggedon script for all!\n","date":"8 July 2010","externalUrl":null,"permalink":"/posts/lastlogon/","section":"Posts","summary":"Recently I needed to find a way to search for accounts in an active directory that are enabled and have not logged on for a while. Fortunately there is a lastLogon attribute, unfortunately this is not replicated across the various domain controllers. Lord only knows why, but lastLogon is the number of 100 nano second intervals since 1601, fortunately this is documented.\n","title":"Last Logon","type":"posts"},{"content":"Since Christmas I have been up to loads. I went skiing in March and I went to Cuba in June. I have done well with resolutions, I managed to stay super healthy for January and managed to mostly keep to it since. However I utterly failed to read LWN :-(\nI did however keep up the reading and by my standards I have read loads! So far I have read:\nGuards! Guards! - Terry Pratchett Blow Fly - Patricia Cornwell Twilight - Stephenie Meyer Starship Troopers - Robert A. Heinlein Altered Carbon - Richard K. Morgan Broken Angels - Richard K. Morgan New Moon - Stephenie Meyer I\u0026rsquo;m currently reading The Magicians - Lev Grossman. I\u0026rsquo;m also almost finished the backlog of books everyone suggested after Christmas, so any recommendations are most welcome!\n","date":"5 July 2010","externalUrl":null,"permalink":"/posts/resolutionsandreading/","section":"Posts","summary":"Since Christmas I have been up to loads. I went skiing in March and I went to Cuba in June. I have done well with resolutions, I managed to stay super healthy for January and managed to mostly keep to it since. However I utterly failed to read LWN :-(\n","title":"New Year's resolutions 2010","type":"posts"},{"content":" ","date":"20 April 2010","externalUrl":null,"permalink":"/posts/skiboots/","section":"Posts","summary":" ","title":"Ski Boots","type":"posts"},{"content":"","date":"20 April 2010","externalUrl":null,"permalink":"/tags/skiing/","section":"Tags","summary":"","title":"Skiing","type":"tags"},{"content":"It\u0026rsquo;s time for some new year\u0026rsquo;s resolutions! Hopefully if they are cast in stone (well blog) there is more of a chance of success.\nStay super healthy for January: Keeping to my minimum weekly gym schedule, 3 morning swims, 2 morning spins, 2-3 afternoon spins, 2 afternoon yogas, 1-2 weekend weights and cv. No snacks during the day. No cake or chocolate. Herbal tea during the day with no milk. No burgers, chips or beer. No getting drunk. Drinking loads of water. Read more books, not reference books, what I call story books. I think a realistic goal is one chapter a week. I have started with Terry Pratchett\u0026rsquo;s \u0026ldquo;Guards! Guards!\u0026rdquo;, feel free to recommend books. Start reading LWN again. ","date":"4 January 2010","externalUrl":null,"permalink":"/posts/newyear2010/","section":"Posts","summary":"It’s time for some new year’s resolutions! Hopefully if they are cast in stone (well blog) there is more of a chance of success.\n","title":"New Year's resolutions 2010","type":"posts"},{"content":"I passed my amateur radio Intermediate exam, so now I can kick out 50W! My new call sign is 2E0TDS. My thanks go to all at SADARS that helped with the practical day and two days of lectures and exams. All I need now is some sort of radio!\n","date":"27 November 2009","externalUrl":null,"permalink":"/posts/passedintermediateexam/","section":"Posts","summary":"I passed my amateur radio Intermediate exam, so now I can kick out 50W! My new call sign is 2E0TDS. My thanks go to all at SADARS that helped with the practical day and two days of lectures and exams. All I need now is some sort of radio!\n","title":"Passed Intermediate Exam","type":"posts"},{"content":"","date":"20 November 2009","externalUrl":null,"permalink":"/tags/dublin/","section":"Tags","summary":"","title":"Dublin","type":"tags"},{"content":"Last week I got back from a little holiday in Dublin. I went over for my cousin\u0026rsquo;s graduation. I had an amazing time, it was a very relaxed and slow paced get away from everything. We went to all sorts of different cafes, restaurants and live music bars in the evening. It felt so luxurious to stay in a hotel in the centre of town, we were able to roll out of which ever bar we were in, hail a cab and be back home in no time. Coming back to a made bed and fresh towels can\u0026rsquo;t be beaten.\nA few places stood out. One night we went for a Mexican in Acapulca which was amazing in itself but it was topped off by their \u0026ldquo;Deep Fried Ice Cream\u0026rdquo; desert. We also went to a restaurant type cafe one day. I can\u0026rsquo;t remember the name of it now, but it served the best hot chocolate I have ever had. Then there was the Queen of Tarts which is a lovely little cafe with amazing carrot cake.\nWe did not stay in the hotel for the whole time, the last night one of my cousins friends put us up in their amazing house. They took us to a very strange but also very cool place that only served tea. It was called The Tea Garden. It had one of the most relaxing atmospheres I have been in. It was divided up into small booths with raised floors, cushions and small tables. We took our shoes off and sat round the small table and just relaxed! The waitress then came round and was able to recommend which teas to try. It was cool socialising without booze. When the tea came the pots had little night lights to keep them warm. We then just whiled the time away chatting.\nIt was not all food and drink mind, we did fit in a trip to the Book of Kells. We finished the trip off on the last day with a late afternoon visit to Bewley\u0026rsquo;s.\n","date":"20 November 2009","externalUrl":null,"permalink":"/posts/dublintrip/","section":"Posts","summary":"Last week I got back from a little holiday in Dublin. I went over for my cousin’s graduation. I had an amazing time, it was a very relaxed and slow paced get away from everything. We went to all sorts of different cafes, restaurants and live music bars in the evening. It felt so luxurious to stay in a hotel in the centre of town, we were able to roll out of which ever bar we were in, hail a cab and be back home in no time. Coming back to a made bed and fresh towels can’t be beaten.\n","title":"Dublin Trip","type":"posts"},{"content":"","date":"20 November 2009","externalUrl":null,"permalink":"/tags/holiday/","section":"Tags","summary":"","title":"Holiday","type":"tags"},{"content":"","date":"20 November 2009","externalUrl":null,"permalink":"/tags/ireland/","section":"Tags","summary":"","title":"Ireland","type":"tags"},{"content":"ExtraIDE is a patch to the Linux kernel to enable more than the standard 20 IDE disk drives in a Linux system, as each IDE controller that is driven by the old style drivers be it PATA or SATA (ie not libata). Each IDE channel takes up two drive slots and letters even if the physical card has only one sata disk per channel attached. This severely limits the total IDE disks in one system. This patch adds four extra major device numbers and the necessary bits to extend past ide[0-9] and hda[a-t] to ide[0-9a-d] and hda[a-zA]. The real fix is to improve the libata drivers to include support for my old broken controllers or upgrade to new sata controllers. In any case I have actually run with some form of this patch for the best part of 3 years. It was never really worth submitting to the main line, but I did post it to the LKML.\nextraide-2.6.15.patch extraide-2.6.29.4.patch ","date":"4 November 2009","externalUrl":null,"permalink":"/projects/extraide/","section":"Projects","summary":"ExtraIDE is a patch to the Linux kernel to enable more than the standard 20 IDE disk drives in a Linux system, as each IDE controller that is driven by the old style drivers be it PATA or SATA (ie not libata). Each IDE channel takes up two drive slots and letters even if the physical card has only one sata disk per channel attached. This severely limits the total IDE disks in one system. This patch adds four extra major device numbers and the necessary bits to extend past ide[0-9] and hda[a-t] to ide[0-9a-d] and hda[a-zA]. The real fix is to improve the libata drivers to include support for my old broken controllers or upgrade to new sata controllers. In any case I have actually run with some form of this patch for the best part of 3 years. It was never really worth submitting to the main line, but I did post it to the LKML.\n","title":"Extra IDE","type":"projects"},{"content":"","date":"9 October 2009","externalUrl":null,"permalink":"/tags/benchmark/","section":"Tags","summary":"","title":"Benchmark","type":"tags"},{"content":"","date":"9 October 2009","externalUrl":null,"permalink":"/tags/gpg/","section":"Tags","summary":"","title":"Gpg","type":"tags"},{"content":"After reading depesz\u0026rsquo;s great speeding-up-dumprestore-process blog post, I started thinking about how to securely transfer a file from one server to another in the fastest possible way. The problem being that scp/sftp is slow for various reasons. ftp, http, nc, cifs, rsync are all plain text so can be quickly discounted. I don\u0026rsquo;t know if ssltunnel suffers from the same window limitations that ssh suffers from. I guess using a dedicated VPN would do the trick. However I liked the idea of using gpg. I was not sure which cipher to use so I decided to run a few benchmarks to see. The results are on my site. Once the encrypted file has been created then it can be transferred using any of the available plain text mechanisms. I think nc or ftp have the least overhead.\n","date":"9 October 2009","externalUrl":null,"permalink":"/posts/gpgbenchcipher/","section":"Posts","summary":"After reading depesz’s great speeding-up-dumprestore-process blog post, I started thinking about how to securely transfer a file from one server to another in the fastest possible way. The problem being that scp/sftp is slow for various reasons. ftp, http, nc, cifs, rsync are all plain text so can be quickly discounted. I don’t know if ssltunnel suffers from the same window limitations that ssh suffers from. I guess using a dedicated VPN would do the trick. However I liked the idea of using gpg. I was not sure which cipher to use so I decided to run a few benchmarks to see. The results are on my site. Once the encrypted file has been created then it can be transferred using any of the available plain text mechanisms. I think nc or ftp have the least overhead.\n","title":"GPG Bench Cipher","type":"posts"},{"content":"","date":"9 October 2009","externalUrl":null,"permalink":"/tags/openphp/","section":"Tags","summary":"","title":"Openphp","type":"tags"},{"content":"I benchmarked a few of the gpg ciphers. I created a 1GB file from /dev/urandom with dd. Running \u0026ldquo;gpg \u0026ndash;version\u0026rdquo; gives a list of available ciphers. I then ran \u0026ldquo;time cat test | gpg \u0026ndash;symmetric \u0026ndash;cipher-algo TWOFISH \u0026gt; test.enc\u0026rdquo; for each cipher to see how fast they all were. It\u0026rsquo;s not amazingly accurate but it gave a good indication which one to avoid! I ran this on my \u0026ldquo;Intel(R) Core(TM)2 CPU 6400 @ 2.13GHz\u0026rdquo;, 2.6.30 gives this 4256 bogomips for what it\u0026rsquo;s worth. Anyway, on with the results.\nCipher Time 3DES 2m26.740s CAST5 1m29.993s BLOWFISH 1m31.629s AES 1m26.921s AES192 1m31.041s AES256 1m33.717s TWOFISH 1m28.190s I also ran a new file of the same size but just zeros. The results were all more or less the same, I\u0026rsquo;m not sure why the times are so much shorter, I guess all the algorithms are good at optimizing zeros. Also dd takes about 15 seconds to write a 1G file \u0026ldquo;time echo $(dd if=/dev/zero bs=1M count=1024 of=test; sync)\u0026rdquo;, this equates to about 70MB/s write speed which sounds in the right ballpark.\nCipher Time 3DES 0m25.998s CAST5 0m26.112s BLOWFISH 0m25.927s AES 0m27.275s AES192 0m27.265s AES256 0m26.926s TWOFISH 0m27.481s So don\u0026rsquo;t use 3DES, otherwise they are all pretty much the same. To improve it more I should probably make an effort to idle the CPU and make the file a lot bigger or store the file in ram, but I can\u0026rsquo;t be bothered.\n","date":"9 October 2009","externalUrl":null,"permalink":"/projects/gpgbenchcipher/","section":"Projects","summary":"I benchmarked a few of the gpg ciphers. I created a 1GB file from /dev/urandom with dd. Running “gpg –version” gives a list of available ciphers. I then ran “time cat test | gpg –symmetric –cipher-algo TWOFISH \u003e test.enc” for each cipher to see how fast they all were. It’s not amazingly accurate but it gave a good indication which one to avoid! I ran this on my “Intel(R) Core(TM)2 CPU 6400 @ 2.13GHz”, 2.6.30 gives this 4256 bogomips for what it’s worth. Anyway, on with the results.\n","title":"GPG Bench Cipher","type":"projects"},{"content":"","date":"15 September 2009","externalUrl":null,"permalink":"/tags/aoe/","section":"Tags","summary":"","title":"Aoe","type":"tags"},{"content":"So today I played a bit with some big cheap disks. I have 3 fairly old desktops each with 4*1TB disks, all exported via ATA over Ethernet to a much more modern sort of disk head. Basically it\u0026rsquo;s a \u0026ldquo;build a large store on half a shoe string\u0026rdquo; project. I\u0026rsquo;ve not quite got the network side of it sorted yet. Currently the disk head\u0026rsquo;s gigabit card is being saturated. On a single disk node each disk can do about 80M read sustained. If all 4 are read at the same time it goes down to about 50M, which is 200M in total. Which seems quite amazing for a Pentium 4 3.0Ghz. Also this seems a bit high as the PCI bus can only do 133M, I\u0026rsquo;m guessing that the onboard sata ports are somehow separated from the extra pci sata card I added. Interestingly one disk node can sustain 80M read from disk to the disk head. Again this backs down to 30M if all 4 disks are read, that\u0026rsquo;s 120M total, no surprise this is saturating the gigabit link. So the major bottleneck is the disk head. Currently max raid sync speed is 10M, ie 120M total for 12 disks. Ideally 3 nics in the disk head would be best, but then there is no way for the data to get to the disk head.\nThe /proc/mdstat seems quite impressive (slow rate due to mkfs):\nmd0 : active raid5 etherd/e3.12[12] etherd/e3.11[10] etherd/e3.10[9] etherd/e3.9[8] etherd/e2.8[7] etherd/e2.7[6] etherd/e2.6[5] etherd/e2.5[4] etherd/e1.4[3] etherd/e1.3[2] etherd/e1.2[1] etherd/e1.1[0] 10721828480 blocks level 5, 64k chunk, algorithm 2 [12/11] [UUUUUUUUUUU_] [==\u0026gt;..................] recovery = 13.4% (130652288/974711680) finish=158828.3min speed=87K/sec The mkfs looks like it won\u0026#39;t finish for ages, also there\u0026#39;s still no definitive information about stride, stripe and other random things. $ sudo mkfs -t ext3 -E stride=16,stripe-width=176 /dev/soda/store mke2fs 1.41.3 (12-Oct-2008) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 670121984 inodes, 2680456192 blocks 134022809 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=0 81802 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848, 512000000, 550731776, 644972544, 1934917632, 2560000000 Writing inode tables: 3351/81802 ","date":"15 September 2009","externalUrl":null,"permalink":"/posts/bigdisk/","section":"Posts","summary":"So today I played a bit with some big cheap disks. I have 3 fairly old desktops each with 4*1TB disks, all exported via ATA over Ethernet to a much more modern sort of disk head. Basically it’s a “build a large store on half a shoe string” project. I’ve not quite got the network side of it sorted yet. Currently the disk head’s gigabit card is being saturated. On a single disk node each disk can do about 80M read sustained. If all 4 are read at the same time it goes down to about 50M, which is 200M in total. Which seems quite amazing for a Pentium 4 3.0Ghz. Also this seems a bit high as the PCI bus can only do 133M, I’m guessing that the onboard sata ports are somehow separated from the extra pci sata card I added. Interestingly one disk node can sustain 80M read from disk to the disk head. Again this backs down to 30M if all 4 disks are read, that’s 120M total, no surprise this is saturating the gigabit link. So the major bottleneck is the disk head. Currently max raid sync speed is 10M, ie 120M total for 12 disks. Ideally 3 nics in the disk head would be best, but then there is no way for the data to get to the disk head.\n","title":"Big Disk","type":"posts"},{"content":"","date":"15 September 2009","externalUrl":null,"permalink":"/tags/mdadm/","section":"Tags","summary":"","title":"Mdadm","type":"tags"},{"content":"AnchorFix is a Greasemonkey script that I wrote to fix anchor links. This script searches for links that have anchors and adds an anchor icon that links to that anchor. Use case: sending a URL to someone without having to scroll to the top to find an anchor link or worse reading the HTML source and hand editing the URL to add the anchor. It also searches for links that link to an anchor on the current page and signifies this by adding an anchor icon after the link text. Use case: reading a page with a menu system at the top; some links are off site and some are anchors to the current page. After reading the whole page which links are worth clicking, the anchor indicates this.\nFirst you need Greasemonkey installed then install the script. It is available locally or on the userscripts server.\n","date":"1 September 2009","externalUrl":null,"permalink":"/posts/anchorfix/","section":"Posts","summary":"AnchorFix is a Greasemonkey script that I wrote to fix anchor links. This script searches for links that have anchors and adds an anchor icon that links to that anchor. Use case: sending a URL to someone without having to scroll to the top to find an anchor link or worse reading the HTML source and hand editing the URL to add the anchor. It also searches for links that link to an anchor on the current page and signifies this by adding an anchor icon after the link text. Use case: reading a page with a menu system at the top; some links are off site and some are anchors to the current page. After reading the whole page which links are worth clicking, the anchor indicates this.\n","title":"Anchor Fix","type":"posts"},{"content":"(Update 01/09/2009 - All of the below is now not necessary as the latest firmware has an option from the web interface to turn on remote root ssh shell access, YAY for Western Digital!)\nI recently bought a Western Digital ShareSpace. It\u0026rsquo;s a larger version of the My Book World range of Products which have quite a following at WDMBWE. Mine is a 4TB version which has four 1TB drives in a raid 5 configuration giving 2.7T usable. They all run Linux, the Share Space ones seem to have some sort of u-boot and have the root file system on the first partition of the disks. Unfortunately getting a shell on these boxes is a bit harder than the original devices.\nMartin Hinner\u0026rsquo;s method at his site does not work because the firmware got a major overhaul. The original My Book World\u0026rsquo;s used perl (/auth/firmware_upgrade.pl) but the newer Share Space devices use php (/admin/system_firmware_manual.php). My first thought was to implement a similar hack that Martin used, amazingly Western Digital put a link to the main code on their website. This gives all the juicy details about how the upgrade process works.\nThe automatic update process gives the western digital webpage its version number and it returns if there is an update or not along with a link to the firmware blob. This believe it or not, is a tar.gz with the 1st and 16th block swapped where blocks are 5k. Due to the way the upgrade process works there is no easy way to hook into the upgrade process. If a manual firmware image is selected it gets downloaded and a script on the device installs the update. If you could trick the upgrade process into thinking it is a service pack update it will run a pre-install script inside the firmware blob. However the service pack install file (/etc/sp) does not exist so I abandoned this method.\nTelnet # The easiest way I found was to add a telnet service. To do this I removed the first disk (bottom) and connected it via a SATA to USB converter to my laptop. I did see an existing wiki page about how to do this, but it missed out some large details. It is important to edit the filesystem as a broken raid1 mirror, or else on the next boot the root filesystem mirrors will not be in sync. The next time the device boots it will notice one disk is more up to date and resync the other three and as it\u0026rsquo;s only 200M it\u0026rsquo;s very quick to sync. Something like this worked for me:\nsudo mdadm --assemble /dev/md0 /dev/sdb1 sudo mdadm --run /dev/md0 sudo mount /dev/md0 /mnt Next edit /mnt/etc/init.d/rcS and find the \u0026ldquo;Start Network\u0026rdquo; comment and add the telnet lines in so it looks like this:\n# Start Network \u0026amp;\u0026amp; HTTPD /etc/init.d/S40network restart /etc/init.d/S55mini_httpd restart echo \u0026#34;telnet stream tcp nowait root /usr/sbin/telnetd /usr/sbin/telnetd\u0026#34; \u0026gt;\u0026gt;/etc/inetd.conf /etc/init.d/S60inetd start FACTORY_DEFAULT_FLAG=/etc/.factory_restore GENERAL_RESTORE_FLAG=/etc/.general_restore Now you will have a working telnet daemon but no user to login as, the default user admin does not have shell set. I just blanked the root users password by editing /mnt/etc/passwd and making the root line look like: root::0:0:root:/root:/bin/sh\nThen unmount it and stop the md device with \u0026ldquo;umount /mnt\u0026rdquo; and \u0026ldquo;mdadm -S /dev/md0\u0026rdquo;. Pop the disk back in and as soon as it starts pinging you should be able to login as root. At which point I set a new root user\u0026rsquo;s password with passwd. Then ipkg can be installed in /opt and once a reliable ssh daemon is working the above hack in rcS can be removed.\n","date":"1 September 2009","externalUrl":null,"permalink":"/projects/wdsharespace/","section":"Projects","summary":"(Update 01/09/2009 - All of the below is now not necessary as the latest firmware has an option from the web interface to turn on remote root ssh shell access, YAY for Western Digital!)\n","title":"WD ShareSpace","type":"projects"},{"content":"So my gym is closed for 10 days for a refurbishment. They are going to replace all the cardio equipment with new kit. I\u0026rsquo;ll be able to check my progress online and I\u0026rsquo;ll be able to plug in a video iPod and watch on the screen. The problem is, while it\u0026rsquo;s closed I have no gym to go to! So I decided to try some classes instead. Tonight I tried a yoga class and it was great - both relaxing and tiring at the same time. I really enjoyed it and think I\u0026rsquo;ll be going more often in the future; hopefully it will help improve my skiing.\n","date":"12 August 2009","externalUrl":null,"permalink":"/posts/yoga/","section":"Posts","summary":"So my gym is closed for 10 days for a refurbishment. They are going to replace all the cardio equipment with new kit. I’ll be able to check my progress online and I’ll be able to plug in a video iPod and watch on the screen. The problem is, while it’s closed I have no gym to go to! So I decided to try some classes instead. Tonight I tried a yoga class and it was great - both relaxing and tiring at the same time. I really enjoyed it and think I’ll be going more often in the future; hopefully it will help improve my skiing.\n","title":"Yoga","type":"posts"},{"content":"I went to Tony and Grainne\u0026rsquo;s wedding on Friday. It was a lovely day and I wish them all the best in the future.\nAnyway, I learnt something while at the hotel that annoyed me: the name of the meal at the wedding reception. Hint: it\u0026rsquo;s not lunch. It\u0026rsquo;s called the Wedding reception. I\u0026rsquo;m not entirely sure why, but it really does get on my nerves.\n","date":"3 August 2009","externalUrl":null,"permalink":"/posts/weddingmeal/","section":"Posts","summary":"I went to Tony and Grainne’s wedding on Friday. It was a lovely day and I wish them all the best in the future.\n","title":"Wedding Meal","type":"posts"},{"content":"I got back on Monday night after cutting it worryingly close to get to the airport; two hours in advance, try 40 min! Only for Ryanair to delay the flight by an hour and tell no one. Then there\u0026rsquo;s the Post Holiday Blues, aka PTD. It hit bad on Tuesday night but I think I\u0026rsquo;m used to the grindstone again now.\nAlso I\u0026rsquo;m not laughing now:\n$ psql -c \u0026#34;select count(*) from rssr.entries where read = false;\u0026#34; rssr count ------- 9941 (1 row) $ In other news I might be going to see \u0026ldquo;STOCKWELL: THE INQUEST\u0026rdquo; in the Landor Theatre on Monday night. My post holiday resolution is to go to London for more culture.\n","date":"24 July 2009","externalUrl":null,"permalink":"/posts/holidayreturn2009/","section":"Posts","summary":"I got back on Monday night after cutting it worryingly close to get to the airport; two hours in advance, try 40 min! Only for Ryanair to delay the flight by an hour and tell no one. Then there’s the Post Holiday Blues, aka PTD. It hit bad on Tuesday night but I think I’m used to the grindstone again now.\n","title":"I'm back from Ireland","type":"posts"},{"content":"","date":"24 July 2009","externalUrl":null,"permalink":"/tags/rss/","section":"Tags","summary":"","title":"Rss","type":"tags"},{"content":"No Internet for 2 weeks, just as I catch up on my feeds too!\n$ psql -c \u0026#34;select count(*) from rssr.entries where read = false;\u0026#34; rssr count ------- 0 (1 row) $ ","date":"2 July 2009","externalUrl":null,"permalink":"/posts/holiday2009/","section":"Posts","summary":"No Internet for 2 weeks, just as I catch up on my feeds too!\n","title":"I'm off on my holidays","type":"posts"},{"content":"","date":"24 June 2009","externalUrl":null,"permalink":"/tags/cineworld/","section":"Tags","summary":"","title":"Cineworld","type":"tags"},{"content":"I just found out that Cineworld have a public XML data source. It\u0026rsquo;s over in the syndication subdir of their main site. There are more technical details over on my CineworldScrape page. I feel a bit sad in a way, my scraper has been working for more or less 3 years now in some form or another. The annoying thing is that they don\u0026rsquo;t actually export all the data I use. Being quite visual I have grown used to using the thumbnails that each movie has to help me pick which films to see. Apart from this it\u0026rsquo;s a great step forward. However, the problem is there\u0026rsquo;s no knowing if Cineworld will pull this service or even if they want it public. For now I\u0026rsquo;ll continue to use my scraper.\n","date":"24 June 2009","externalUrl":null,"permalink":"/posts/cineworldscrapexmldatasource/","section":"Posts","summary":"I just found out that Cineworld have a public XML data source. It’s over in the syndication subdir of their main site. There are more technical details over on my CineworldScrape page. I feel a bit sad in a way, my scraper has been working for more or less 3 years now in some form or another. The annoying thing is that they don’t actually export all the data I use. Being quite visual I have grown used to using the thumbnails that each movie has to help me pick which films to see. Apart from this it’s a great step forward. However, the problem is there’s no knowing if Cineworld will pull this service or even if they want it public. For now I’ll continue to use my scraper.\n","title":"Cineworld have a public xml data source","type":"posts"},{"content":"","date":"18 June 2009","externalUrl":null,"permalink":"/tags/amaterradio/","section":"Tags","summary":"","title":"Amaterradio","type":"tags"},{"content":"I passed my foundation exam on Sunday. Big thanks to all the helpful folk at SADARS. I am now M6TDS.\n","date":"18 June 2009","externalUrl":null,"permalink":"/posts/passedfoundationexam/","section":"Posts","summary":"I passed my foundation exam on Sunday. Big thanks to all the helpful folk at SADARS. I am now M6TDS.\n","title":"Passed Foundation Exam","type":"posts"},{"content":"","date":"17 June 2009","externalUrl":null,"permalink":"/tags/google/","section":"Tags","summary":"","title":"Google","type":"tags"},{"content":"My google is now very light Green!\nepiphany as a reference!\n","date":"17 June 2009","externalUrl":null,"permalink":"/posts/greengoogle/","section":"Posts","summary":"My google is now very light Green!\n","title":"Green Google","type":"posts"},{"content":"Today I found out where Linux exposes the extra routing information gathered from ICMP redirects. ip route show cache will show the entire cached routing table. It\u0026rsquo;s a bit hard to read so ip route show cache 1.2.3.4 is better. For example 192.168.1.0/24 is a network that is connected via a host on my 192.168.0/24 network. My default gateway (192.168.0.1) has a static routing entry to the host that gateways for the 192.168.1.0/24 network (192.168.0.57). So when a random host on the 192.168.0.0/24 network pings a host on the 192.168.1.0/24 network it first sends to 192.168.0.1 but it sends an ICMP redirect saying that in the future it would be better to just send direct to 192.168.0.57.\n$ ip route show cache 192.168.1.20 $ ping 192.168.1.20 PING 192.168.1.20 (192.168.1.20) 56(84) bytes of data. 64 bytes from 192.168.1.20: icmp_seq=1 ttl=63 time=2.25 ms From 192.168.0.1: icmp_seq=2 Redirect Host(New nexthop: 192.168.0.57) 64 bytes from 192.168.1.20: icmp_seq=2 ttl=63 time=2.34 ms 64 bytes from 192.168.1.20: icmp_seq=3 ttl=63 time=1.32 ms 64 bytes from 192.168.1.20: icmp_seq=4 ttl=63 time=1.24 ms ^C --- 192.168.1.20 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3012ms rtt min/avg/max/mdev = 1.241/1.791/2.344/0.511 ms $ $ ip route show cache 192.168.1.20 192.168.1.20 from 192.168.0.62 via 192.168.0.57 dev eth1 cache mtu 1500 advmss 1460 hoplimit 64 192.168.1.20 via 192.168.0.57 dev eth1 src 192.168.0.62 cache mtu 1500 advmss 1460 hoplimit 64 $ The Guide to IP Layer Network Administration with Linux is an excellent guide!\n","date":"13 June 2009","externalUrl":null,"permalink":"/posts/icmpedirect/","section":"Posts","summary":"Today I found out where Linux exposes the extra routing information gathered from ICMP redirects. ip route show cache will show the entire cached routing table. It’s a bit hard to read so ip route show cache 1.2.3.4 is better. For example 192.168.1.0/24 is a network that is connected via a host on my 192.168.0/24 network. My default gateway (192.168.0.1) has a static routing entry to the host that gateways for the 192.168.1.0/24 network (192.168.0.57). So when a random host on the 192.168.0.0/24 network pings a host on the 192.168.1.0/24 network it first sends to 192.168.0.1 but it sends an ICMP redirect saying that in the future it would be better to just send direct to 192.168.0.57.\n","title":"ICMP Redirect","type":"posts"},{"content":"I learned over the years to read the old ide subsystem errors for Linux and generally am able to get a feel for the sort of hardware error that\u0026rsquo;s coming. However I have yet to really get a feel for the libata errors, I\u0026rsquo;m not really used to reading the errors. A friend linked me to a page on the libata wiki.\n","date":"12 June 2009","externalUrl":null,"permalink":"/posts/libataerrors/","section":"Posts","summary":"I learned over the years to read the old ide subsystem errors for Linux and generally am able to get a feel for the sort of hardware error that’s coming. However I have yet to really get a feel for the libata errors, I’m not really used to reading the errors. A friend linked me to a page on the libata wiki.\n","title":"Libata Errors","type":"posts"},{"content":"","date":"11 June 2009","externalUrl":null,"permalink":"/tags/science/","section":"Tags","summary":"","title":"Science","type":"tags"},{"content":"I can do Tomography!\n","date":"11 June 2009","externalUrl":null,"permalink":"/posts/tomography/","section":"Posts","summary":"I can do Tomography!\n","title":"Tomography","type":"posts"},{"content":"","date":"6 June 2009","externalUrl":null,"permalink":"/tags/fedora/","section":"Tags","summary":"","title":"Fedora","type":"tags"},{"content":"I played with Fedora more today. There are loads of packages in the default repos these days. However I still find myself missing things from Debian. For example, I can\u0026rsquo;t do a \u0026ldquo;yum search\u0026rdquo; while doing a \u0026ldquo;yum upgrade\u0026rdquo;. Why? I also miss the small helper scripts that save on legwork. For example update-grub: in Debian when a new kernel gets installed the initrd and grub get updated and it just works. With Fedora I have to manually update the grub config and if I forget to create the initrd, it means a trip to the 13 PCs I just upgraded!\n","date":"6 June 2009","externalUrl":null,"permalink":"/posts/fedoraneedslegwork/","section":"Posts","summary":"I played with Fedora more today. There are loads of packages in the default repos these days. However I still find myself missing things from Debian. For example, I can’t do a “yum search” while doing a “yum upgrade”. Why? I also miss the small helper scripts that save on legwork. For example update-grub: in Debian when a new kernel gets installed the initrd and grub get updated and it just works. With Fedora I have to manually update the grub config and if I forget to create the initrd, it means a trip to the 13 PCs I just upgraded!\n","title":"Fedora needs legwork","type":"posts"},{"content":"","date":"6 June 2009","externalUrl":null,"permalink":"/tags/yum/","section":"Tags","summary":"","title":"Yum","type":"tags"},{"content":"I have finally documented CineworldScrape and made it available to the general public. So with any luck Google will index it!\n","date":"31 May 2009","externalUrl":null,"permalink":"/posts/cineworldscraperelease/","section":"Posts","summary":"I have finally documented CineworldScrape and made it available to the general public. So with any luck Google will index it!\n","title":"CineworldScrape released to public","type":"posts"},{"content":"","date":"31 May 2009","externalUrl":null,"permalink":"/tags/webscrapers/","section":"Tags","summary":"","title":"Webscrapers","type":"tags"},{"content":"Finally a I have a blog!\n","date":"27 May 2009","externalUrl":null,"permalink":"/posts/firstpost/","section":"Posts","summary":"Finally a I have a blog!\n","title":"First Post!","type":"posts"},{"content":"Debian everything else is inferior (mostly).\n","date":"27 May 2009","externalUrl":null,"permalink":"/posts/linuxdistributions/","section":"Posts","summary":"Debian everything else is inferior (mostly).\n","title":"Linux Distributions","type":"posts"},{"content":" /proc/mdstat information # Linux has a software RAID subsystem and it is called md. It is generally quite well documented. However the md status file in the proc pseudo filesystem is not documented at all. So this is one of those cases where you have to read the source to understand what\u0026rsquo;s going on. I\u0026rsquo;ll jump right in, this is what my mdstat looks like:\n$ cat /proc/mdstat Personalities : [raid1] md1 : active raid1 hde2[0] hdg2[1] 224187008 blocks [2/2] [UU] md0 : active raid1 hde1[0] hdg1[1] 20008832 blocks [2/2] [UU] unused devices: \u0026lt; none \u0026gt; $ The first line is just a list of personalities that the kernel supports, and by personalities it means what RAID methods are available. If md is compiled into the kernel this list will be static, but if md is compiled as modules the list can change as you insert the various modules. The available personalities in Linux are linear, raid0, raid1, raid5 and raid6. The file then consists of a number of stanzas, where each one represents each md device. The above example shows md0 and md1. The array can then be either \u0026ldquo;active\u0026rdquo; or \u0026ldquo;inactive\u0026rdquo;. For instance if it\u0026rsquo;s raid1 it can be active with one block device, whereas if it\u0026rsquo;s raid0 and the array consists of two devices it will be inactive if only one is added. It can also have a \u0026ldquo;read-only\u0026rdquo; attribute In md0 section in this example the \u0026ldquo;raid1\u0026rdquo; signifies what personality the array is Next is the complete list of block devices that make up the array, in square brackets is the device number in the arrays superblock. There can also be an optional (F) next to the device, this signifies the device has failed either due to a read failure or manually failed with an mdadm command. The first thing on the next line if the arrays size in blocks. The rest of the line is personality dependent, for linear and raid0 it just shows the rounding in k and the chunksize in k respectfully. When using raid1 you get more useful information. First is a set of square brackets with 2 numbers in. The first number is the number of devices in the mirror and the second number is the number of working devices. Next is another set of square brackets, this time each character represents a block device. If the character is a \u0026ldquo;U\u0026rdquo; then the devices is up to date, however if the character is a \u0026ldquo;\u0026rdquo; the devices is not up to date. Raid5 and raid6 are similar but I can\u0026rsquo;t test that. If the array has an available device that needs to sync, then more lines are shown, if not then the stanza finishes. Linux is clever about syncing devices, it does not interrupt normal operation or impact on performance. If arrays are on the same device it will only sync them one at a time. And for this reason \u0026ldquo;resync=DELAYED\u0026rdquo; appears when the array is queued for a sync. If the device happens to be re-syncing there is a little progress bar, the eta and a speed current speed. As a side note if you reboot before the sync is done, it is just started from scratch again on the next boot. A little scary, but this is what a mdstat look like when there are failed devices:-\n$ cat /proc/mdstat Personalities : [raid1] md2 : active raid1 hde1[0] hdi1[1] 244195904 blocks [2/2] [UU] md1 : active raid1 hda2[0] 2168704 blocks [2/1] [U_] md0 : active raid1 hda1[0] 7823552 blocks [2/1] [U_] unused devices: \u0026lt; none \u0026gt; $ This is less scary; this is sample output when an array is syncing\nPersonalities : [raid1] md1 : active raid1 sdb3[2] sda3[0] 214178496 blocks [2/1] [U_] resync=DELAYED md0 : active raid1 sdb2[2] sda2[0] 20008832 blocks [2/1] [U_] [==\u0026gt;..................] recovery = 13.6% (2728704/20008832) finish=9.5min speed=30003K/sec unused devices: This is what\u0026rsquo;s logged to syslog\nFeb 17 19:13:49 localhost kernel: md: trying to hot-add unknown-block(22,1) to md0 ... Feb 17 19:13:49 localhost kernel: md: bind Feb 17 19:13:49 localhost kernel: RAID1 conf printout: Feb 17 19:13:49 localhost kernel: --- wd:1 rd:2 Feb 17 19:13:49 localhost kernel: disk 0, wo:0, o:1, dev:hda1 Feb 17 19:13:49 localhost kernel: disk 1, wo:1, o:1, dev:hdc1 Feb 17 19:13:49 localhost kernel: md: syncing RAID array md0 Feb 17 19:13:49 localhost kernel: md: minimum _guaranteed_ reconstruction speed: 1000 KB/sec/disc. Feb 17 19:13:49 localhost kernel: md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for reconstruction. Feb 17 19:13:49 localhost kernel: md: using 128k window, over a total of 15007488 blocks. Feb 17 19:26:15 localhost kernel: md: md0: sync done. Feb 17 19:26:15 localhost kernel: RAID1 conf printout: Feb 17 19:26:15 localhost kernel: --- wd:2 rd:2 Feb 17 19:26:15 localhost kernel: disk 0, wo:0, o:1, dev:hda1 Feb 17 19:26:15 localhost kernel: disk 1, wo:0, o:1, dev:hdc1 Here is large raid5 which uses aoe components.\nPersonalities : [raid6] [raid5] [raid4] md0 : active raid5 etherd/e1.1p1[0] sdb1[5] sda1[4] etherd/e1.3p1[3] etherd/e1.2p1[2] sdd1[1] 4883799680 blocks level 5, 64k chunk, algorithm 2 [6/6] [UUUUUU] bitmap: 2/233 pages [8KB], 2048KB chunk unused devices: \u0026lt;none\u0026gt; As a side note the documentation has improved since I wrote this, the Linux Raid wiki has some more useful information about mdstat.\n","date":"27 May 2009","externalUrl":null,"permalink":"/posts/linuxmd/","section":"Posts","summary":"/proc/mdstat information # Linux has a software RAID subsystem and it is called md. It is generally quite well documented. However the md status file in the proc pseudo filesystem is not documented at all. So this is one of those cases where you have to read the source to understand what’s going on. I’ll jump right in, this is what my mdstat looks like:\n","title":"Linux MD","type":"posts"},{"content":"","date":"27 May 2009","externalUrl":null,"permalink":"/tags/mp3/","section":"Tags","summary":"","title":"Mp3","type":"tags"},{"content":"","date":"27 May 2009","externalUrl":null,"permalink":"/tags/music/","section":"Tags","summary":"","title":"Music","type":"tags"},{"content":"","date":"27 May 2009","externalUrl":null,"permalink":"/tags/perl/","section":"Tags","summary":"","title":"Perl","type":"tags"},{"content":" The Fine Art of Playlists # I make my playlists with mkplaylist. You will have to edit the script to make it work, change $base to the base dir for all your mp3s. Then make new makeplaylist entries, each one is for each playlist, the makeplaylist function takes directories as parameters and it recurses into them and writes a playlist to the right file. It also writes the extended information.\n","date":"27 May 2009","externalUrl":null,"permalink":"/posts/playlists/","section":"Posts","summary":"The Fine Art of Playlists # I make my playlists with mkplaylist. You will have to edit the script to make it work, change $base to the base dir for all your mp3s. Then make new makeplaylist entries, each one is for each playlist, the makeplaylist function takes directories as parameters and it recurses into them and writes a playlist to the right file. It also writes the extended information.\n","title":"Playlists","type":"posts"},{"content":"Bash is a good shell, my .bashrc is available for all to see!\n","date":"21 May 2009","externalUrl":null,"permalink":"/posts/bash/","section":"Posts","summary":"Bash is a good shell, my .bashrc is available for all to see!\n","title":"Bash","type":"posts"},{"content":"","date":"21 May 2009","externalUrl":null,"permalink":"/tags/bash/","section":"Tags","summary":"","title":"Bash","type":"tags"},{"content":"To see how hardy DDS tapes were, I decided to do some tests. I apologise for the image quality. Anyway, on with the show.\nBefore # My main test was to see how strong the cassettes actually are, so I decided to run one over with my car. Three times. Surprisingly the only thing to break was the case and the flap at the front, the main body stayed intact. I only rolled over it. I think if I hit it at speed, it would be toast.\nHere is a plain old DDS 4 tape, 20G native, 40G compressed: After # ","date":"21 May 2009","externalUrl":null,"permalink":"/projects/ddsdestruction/","section":"Projects","summary":"To see how hardy DDS tapes were, I decided to do some tests. I apologise for the image quality. Anyway, on with the show.\n","title":"DDS Destruction","type":"projects"},{"content":"Firefox is an amazing browser, sometimes I think I would not browse as much as I do if it were not around. Here is my user.js which has taken many years to perfect.\nI maintain a small list of essential add-ons for it:\nFlashblock UnMHT FireGestures AutoAuth Adblock Plus Firebug Greasemonkey It\u0026rsquo;s All Text! JavaScript Debugger ","date":"21 May 2009","externalUrl":null,"permalink":"/posts/firefox/","section":"Posts","summary":"Firefox is an amazing browser, sometimes I think I would not browse as much as I do if it were not around. Here is my user.js which has taken many years to perfect.\n","title":"Firefox","type":"posts"},{"content":"","date":"21 May 2009","externalUrl":null,"permalink":"/tags/firefox/","section":"Tags","summary":"","title":"Firefox","type":"tags"},{"content":"Greasemonkey is a Firefox extension that lets you edit the DOM (ie the page) on the fly after the page is downloaded and parsed, but before it is rendered. Thus making it very easy to tweak pages slightly. For example it could search text for text that starts with http:// but is not a link, and replace the text with a link to the location. This provides a very powerful way to edit web pages on the fly.\nDive Into Greasemonkey is an excellent guide for greasemonkey. It covers installing it all the way to very complex examples.\nIn the start most people added their scripts to a Wiki (Dead). This soon exploded with user contributed scripts, hundreds of them. This soon grew very big, fortunately help was at hand and userscripts.org (Dead) was created. It is a much better repository.\nI wrote some (UPDATE: now unmaintained) greatemonkey scripts:\nDLC (Dead Link Checker) - 28/10/2005 dlc.user.js\nScanHDPricePerGB - 21/01/2007 ScanHDPricePerGB.user.js scanppg.png\nIMDBRatingAdj - 03/02/2009 IMDBRatingAdj.user.js\n","date":"21 May 2009","externalUrl":null,"permalink":"/posts/greasemonkey/","section":"Posts","summary":"Greasemonkey is a Firefox extension that lets you edit the DOM (ie the page) on the fly after the page is downloaded and parsed, but before it is rendered. Thus making it very easy to tweak pages slightly. For example it could search text for text that starts with http:// but is not a link, and replace the text with a link to the location. This provides a very powerful way to edit web pages on the fly.\n","title":"Greasemonkey","type":"posts"},{"content":"","date":"21 May 2009","externalUrl":null,"permalink":"/tags/hen/","section":"Tags","summary":"","title":"Hen","type":"tags"},{"content":"","date":"21 May 2009","externalUrl":null,"permalink":"/tags/sysadmin/","section":"Tags","summary":"","title":"Sysadmin","type":"tags"},{"content":" ","date":"21 May 2009","externalUrl":null,"permalink":"/posts/thehen/","section":"Posts","summary":"","title":"The Hen","type":"posts"},{"content":"Vim is a good text editor; my .vimrc is available for all to see!\n","date":"21 May 2009","externalUrl":null,"permalink":"/posts/vim/","section":"Posts","summary":"Vim is a good text editor; my .vimrc is available for all to see!\n","title":"Vim","type":"posts"},{"content":"","date":"21 May 2009","externalUrl":null,"permalink":"/tags/vim/","section":"Tags","summary":"","title":"Vim","type":"tags"},{"content":"","date":"5 May 2009","externalUrl":null,"permalink":"/tags/tomtom/","section":"Tags","summary":"","title":"Tomtom","type":"tags"},{"content":"tomtom.idiots.txt\n","date":"5 May 2009","externalUrl":null,"permalink":"/posts/tomtomsupport/","section":"Posts","summary":"tomtom.idiots.txt\n","title":"TomTom Support","type":"posts"},{"content":" skiline.pdf\n","date":"25 February 2009","externalUrl":null,"permalink":"/posts/skiwelt2009/","section":"Posts","summary":" skiline.pdf\n","title":"Ski Welt 2009","type":"posts"},{"content":" ","date":"13 February 2009","externalUrl":null,"permalink":"/posts/scratchedalloy/","section":"Posts","summary":"","title":"Scratched Alloy","type":"posts"},{"content":"Looking at a year\u0026rsquo;s worth of dropped packets. Plotting the time of day on the X-axis and TCP/UDP port number on the Y-axis.\ndrops.ps\n","date":"5 December 2008","externalUrl":null,"permalink":"/posts/dropedtraffic/","section":"Posts","summary":"Looking at a year’s worth of dropped packets. Plotting the time of day on the X-axis and TCP/UDP port number on the Y-axis.\n","title":"Dropped Traffic","type":"posts"},{"content":"","date":"5 December 2008","externalUrl":null,"permalink":"/tags/iptables/","section":"Tags","summary":"","title":"Iptables","type":"tags"},{"content":" ","date":"20 November 2008","externalUrl":null,"permalink":"/posts/badasspower/","section":"Posts","summary":" ","title":"Bad Ass Power","type":"posts"},{"content":"","date":"20 November 2008","externalUrl":null,"permalink":"/tags/power/","section":"Tags","summary":"","title":"Power","type":"tags"},{"content":"","date":"20 November 2008","externalUrl":null,"permalink":"/tags/threephase/","section":"Tags","summary":"","title":"Threephase","type":"tags"},{"content":"","date":"6 October 2008","externalUrl":null,"permalink":"/tags/hdr/","section":"Tags","summary":"","title":"Hdr","type":"tags"},{"content":"","date":"6 October 2008","externalUrl":null,"permalink":"/tags/photograph/","section":"Tags","summary":"","title":"Photograph","type":"tags"},{"content":" ","date":"6 October 2008","externalUrl":null,"permalink":"/posts/wgchdr/","section":"Posts","summary":"","title":"WGC HDR","type":"posts"},{"content":"spiderunder spidernormal spiderover spiderhdr quadunder quadnormal quadover quadhdr ","date":"24 September 2008","externalUrl":null,"permalink":"/posts/hdr/","section":"Posts","summary":"spiderunder spidernormal spiderover spiderhdr ","title":"HDR","type":"posts"},{"content":" ","date":"17 June 2008","externalUrl":null,"permalink":"/posts/stalbanswifi/","section":"Posts","summary":"","title":"St. Albans Wi-Fi","type":"posts"},{"content":"","date":"17 June 2008","externalUrl":null,"permalink":"/tags/wifi/","section":"Tags","summary":"","title":"Wifi","type":"tags"},{"content":"","date":"13 May 2008","externalUrl":null,"permalink":"/tags/bigend/","section":"Tags","summary":"","title":"Bigend","type":"tags"},{"content":"","date":"13 May 2008","externalUrl":null,"permalink":"/tags/celica/","section":"Tags","summary":"","title":"Celica","type":"tags"},{"content":"Recording2.wav\n","date":"13 May 2008","externalUrl":null,"permalink":"/posts/thebigend/","section":"Posts","summary":"Recording2.wav\n","title":"The Big End","type":"posts"},{"content":" ","date":"19 March 2008","externalUrl":null,"permalink":"/posts/cartaxgifs/","section":"Posts","summary":" ","title":"Car Tax Gifs","type":"posts"},{"content":"","date":"19 March 2008","externalUrl":null,"permalink":"/tags/cartax/","section":"Tags","summary":"","title":"Cartax","type":"tags"},{"content":"","date":"16 March 2008","externalUrl":null,"permalink":"/tags/cooling/","section":"Tags","summary":"","title":"Cooling","type":"tags"},{"content":"","date":"16 March 2008","externalUrl":null,"permalink":"/tags/datacentre/","section":"Tags","summary":"","title":"Datacentre","type":"tags"},{"content":"Runaway temperature, 10 degrees an hour temp.pdf\nStable temperature temp.ps\n","date":"16 March 2008","externalUrl":null,"permalink":"/posts/machineroomtemperature/","section":"Posts","summary":"Runaway temperature, 10 degrees an hour temp.pdf\n","title":"Machine Room Temperature","type":"posts"},{"content":" ","date":"22 February 2008","externalUrl":null,"permalink":"/posts/nagiosloaded/","section":"Posts","summary":"","title":"Nagios Loaded","type":"posts"},{"content":"","date":"22 February 2008","externalUrl":null,"permalink":"/tags/nagois/","section":"Tags","summary":"","title":"Nagois","type":"tags"},{"content":"","date":"4 February 2008","externalUrl":null,"permalink":"/tags/hugin/","section":"Tags","summary":"","title":"Hugin","type":"tags"},{"content":" ","date":"4 February 2008","externalUrl":null,"permalink":"/posts/huginishard/","section":"Posts","summary":"","title":"Hugin is Hard","type":"posts"},{"content":"","date":"4 February 2008","externalUrl":null,"permalink":"/tags/panoramic/","section":"Tags","summary":"","title":"Panoramic","type":"tags"},{"content":"chfconv.tex chfconv.pdf\n","date":"23 January 2008","externalUrl":null,"permalink":"/posts/chfconvcards/","section":"Posts","summary":"chfconv.tex chfconv.pdf\n","title":"CHF currency conversion cards","type":"posts"},{"content":" ","date":"17 December 2007","externalUrl":null,"permalink":"/posts/oddfont/","section":"Posts","summary":"","title":"Odd Font","type":"posts"},{"content":"","date":"25 November 2007","externalUrl":null,"permalink":"/tags/font/","section":"Tags","summary":"","title":"Font","type":"tags"},{"content":" ","date":"25 November 2007","externalUrl":null,"permalink":"/posts/fontsettings/","section":"Posts","summary":" ","title":"Font Settings","type":"posts"},{"content":"","date":"15 November 2007","externalUrl":null,"permalink":"/tags/ttrss/","section":"Tags","summary":"","title":"Ttrss","type":"tags"},{"content":"Highest average entries per day for the last 7 days for all entries\nselect ttrss_feeds.title as feed, count(ttrss_user_entries.ref_id)/7 as postsperday from ttrss_feeds, ttrss_user_entries, ttrss_entries where ttrss_feeds.id = ttrss_user_entries.feed_id and ttrss_user_entries.ref_id = ttrss_entries.id and overlaps(ttrss_entries.date_entered, ttrss_entries.date_entered, now() - interval \u0026#39;7 day\u0026#39;, now()) group by ttrss_feeds.title order by postsperday desc limit 10; Lowest average entries per day for the last 7 days for all entries\nselect ttrss_feeds.title as feed, count(ttrss_user_entries.ref_id)/7 as postsperday from ttrss_feeds, ttrss_user_entries, ttrss_entries where ttrss_feeds.id = ttrss_user_entries.feed_id and ttrss_user_entries.ref_id = ttrss_entries.id and overlaps(ttrss_entries.date_entered, ttrss_entries.date_entered, now() - interval \u0026#39;7 day\u0026#39;, now()) group by ttrss_feeds.title order by postsperday limit 10; Average reads per hour for the last 7 days\nselect extract(hour from last_read) as hour, count(int_id)/7 as reads from ttrss_user_entries where last_read \u0026gt; 0 and overlaps(last_read, last_read, now() - interval \u0026#39;7 day\u0026#39;, now()) group by hour order by hour; ","date":"15 November 2007","externalUrl":null,"permalink":"/posts/ttrssqueries/","section":"Posts","summary":"Highest average entries per day for the last 7 days for all entries\n","title":"TTRSS Queries","type":"posts"},{"content":" ","date":"23 September 2007","externalUrl":null,"permalink":"/posts/bigspider/","section":"Posts","summary":"","title":"Big Spider","type":"posts"},{"content":" ","date":"23 September 2007","externalUrl":null,"permalink":"/posts/centreofgravity/","section":"Posts","summary":"","title":"Centre of Gravity","type":"posts"},{"content":"","date":"23 September 2007","externalUrl":null,"permalink":"/tags/physics/","section":"Tags","summary":"","title":"Physics","type":"tags"},{"content":"","date":"23 September 2007","externalUrl":null,"permalink":"/tags/spider/","section":"Tags","summary":"","title":"Spider","type":"tags"},{"content":"","date":"7 August 2007","externalUrl":null,"permalink":"/tags/pv/","section":"Tags","summary":"","title":"Pv","type":"tags"},{"content":"(Update: never sent upstream, but was implemented by someone else) pv.patch\n","date":"7 August 2007","externalUrl":null,"permalink":"/posts/pvlinerate/","section":"Posts","summary":"(Update: never sent upstream, but was implemented by someone else) pv.patch\n","title":"pv line rate","type":"posts"},{"content":"","date":"2 July 2007","externalUrl":null,"permalink":"/tags/bonnie/","section":"Tags","summary":"","title":"Bonnie","type":"tags"},{"content":"bonnie.pdf\n","date":"2 July 2007","externalUrl":null,"permalink":"/posts/diskfailurebenchmark/","section":"Posts","summary":"bonnie.pdf\n","title":"Disk Failure Benchmark","type":"posts"},{"content":"","date":"2 July 2007","externalUrl":null,"permalink":"/tags/md/","section":"Tags","summary":"","title":"Md","type":"tags"},{"content":" lvm.md.overhead.html lvm.md.overhead.pdf lvm.md.overhead.raw lvm.md.overhead.raw2 lvm.md.overhead.raw.csv lvm.md.overhead.txt ","date":"4 April 2007","externalUrl":null,"permalink":"/posts/lvmmdoverhead/","section":"Posts","summary":" lvm.md.overhead.html lvm.md.overhead.pdf lvm.md.overhead.raw lvm.md.overhead.raw2 lvm.md.overhead.raw.csv lvm.md.overhead.txt ","title":"LVM MD Overhead","type":"posts"},{"content":" Grab: debian-bo.img.bz2 $ bunzip2 debian-bo.img.bz2 $ sudo qemu-system-i386 -hda debian-bo.img -net nic,model=ne2k_isa -net tap $ sudo brctl addif virbr0 tap0 Username: root, Password: password Edit /etc/init.d/network to configure network ","date":"25 March 2007","externalUrl":null,"permalink":"/posts/debianbo/","section":"Posts","summary":" Grab: debian-bo.img.bz2 $ bunzip2 debian-bo.img.bz2 $ sudo qemu-system-i386 -hda debian-bo.img -net nic,model=ne2k_isa -net tap $ sudo brctl addif virbr0 tap0 Username: root, Password: password Edit /etc/init.d/network to configure network ","title":"Debian Bo (1.3)","type":"posts"},{"content":" ","date":"15 March 2007","externalUrl":null,"permalink":"/posts/googlereader/","section":"Posts","summary":"","title":"Google Reader","type":"posts"},{"content":"","date":"15 March 2007","externalUrl":null,"permalink":"/tags/googlereader/","section":"Tags","summary":"","title":"Googlereader","type":"tags"},{"content":"","date":"15 March 2007","externalUrl":null,"permalink":"/tags/internet/","section":"Tags","summary":"","title":"Internet","type":"tags"},{"content":"internet.pdf\n","date":"15 March 2007","externalUrl":null,"permalink":"/posts/internetharmful/","section":"Posts","summary":"internet.pdf\n","title":"The Internet Considered Harmful","type":"posts"},{"content":"","date":"12 March 2007","externalUrl":null,"permalink":"/tags/freeauth/","section":"Tags","summary":"","title":"Freeauth","type":"tags"},{"content":"FreeAuth.jad FreeAuth.jar\n","date":"12 March 2007","externalUrl":null,"permalink":"/posts/freeauth/","section":"Posts","summary":"FreeAuth.jad FreeAuth.jar\n","title":"Freeauth Mod","type":"posts"},{"content":"","date":"12 March 2007","externalUrl":null,"permalink":"/tags/otp/","section":"Tags","summary":"","title":"Otp","type":"tags"},{"content":"I\u0026rsquo;ve written a patch to coreutils to add a \u0026ldquo;-w\u0026rdquo; option to df to make the output wider and on one line. Patch: coreutils-6.7-df.patch Pre-compiled binary: df\nNormal output:\n$ ./df -h / Filesystem Size Used Avail Use% Mounted on /dev/mapper/nvme0n1p3_crypt 468G 370G 75G 84% / New output:\n$ ./df -hw / Filesystem Size Used Avail Use% Mounted on /dev/mapper/nvme0n1p3_crypt 468G 370G 75G 84% / Update 03/06/2020: This patch never made it in, but at some point this happened without a wide option as the standard output now looks like:\n$ /bin/df -h / Filesystem Size Used Avail Use% Mounted on /dev/mapper/nvme0n1p3_crypt 468G 370G 75G 84% / ","date":"19 January 2007","externalUrl":null,"permalink":"/posts/widedf/","section":"Posts","summary":"I’ve written a patch to coreutils to add a “-w” option to df to make the output wider and on one line. Patch: coreutils-6.7-df.patch Pre-compiled binary: df\n","title":"Wide DF","type":"posts"},{"content":"stp\n","date":"19 November 2006","externalUrl":null,"permalink":"/posts/signtextprogram/","section":"Posts","summary":"stp\n","title":"Sign Text Program","type":"posts"},{"content":"","date":"16 October 2006","externalUrl":null,"permalink":"/tags/map/","section":"Tags","summary":"","title":"Map","type":"tags"},{"content":"sillytube.html\n","date":"16 October 2006","externalUrl":null,"permalink":"/posts/sillytubemirror/","section":"Posts","summary":"sillytube.html\n","title":"Silly Tube Mirror","type":"posts"},{"content":"","date":"16 October 2006","externalUrl":null,"permalink":"/tags/tube/","section":"Tags","summary":"","title":"Tube","type":"tags"},{"content":"","date":"23 September 2006","externalUrl":null,"permalink":"/tags/minicom/","section":"Tags","summary":"","title":"Minicom","type":"tags"},{"content":" ","date":"23 September 2006","externalUrl":null,"permalink":"/posts/minicomstatus/","section":"Posts","summary":" ","title":"Minicom Status","type":"posts"},{"content":"","date":"23 September 2006","externalUrl":null,"permalink":"/tags/terminal/","section":"Tags","summary":"","title":"Terminal","type":"tags"},{"content":" ","date":"14 August 2006","externalUrl":null,"permalink":"/posts/graphicaldi/","section":"Posts","summary":" ","title":"Graphical DI","type":"posts"},{"content":"","date":"11 August 2006","externalUrl":null,"permalink":"/tags/nfs/","section":"Tags","summary":"","title":"Nfs","type":"tags"},{"content":"nfsvsiscsi.html\n","date":"11 August 2006","externalUrl":null,"permalink":"/posts/nfsvsiscsi/","section":"Posts","summary":"nfsvsiscsi.html\n","title":"NFS vs SCSI","type":"posts"},{"content":"","date":"11 August 2006","externalUrl":null,"permalink":"/tags/scsi/","section":"Tags","summary":"","title":"Scsi","type":"tags"},{"content":"rhr.c\n","date":"9 July 2006","externalUrl":null,"permalink":"/posts/redhatreleasefaker/","section":"Posts","summary":"rhr.c\n","title":"Red Hat Release Faker","type":"posts"},{"content":"","date":"9 July 2006","externalUrl":null,"permalink":"/tags/redhat/","section":"Tags","summary":"","title":"Redhat","type":"tags"},{"content":"","date":"1 June 2006","externalUrl":null,"permalink":"/tags/ubuntu/","section":"Tags","summary":"","title":"Ubuntu","type":"tags"},{"content":" ","date":"1 June 2006","externalUrl":null,"permalink":"/posts/ubuntudapper/","section":"Posts","summary":"","title":"Ubuntu Dapper","type":"posts"},{"content":" ","date":"31 May 2006","externalUrl":null,"permalink":"/posts/loadsoftemporaryinternetfiles/","section":"Posts","summary":"","title":"Loads of Temporary Internet Files","type":"posts"},{"content":"","date":"10 May 2006","externalUrl":null,"permalink":"/tags/pc/","section":"Tags","summary":"","title":"Pc","type":"tags"},{"content":" ","date":"10 May 2006","externalUrl":null,"permalink":"/posts/pctemperature/","section":"Posts","summary":"","title":"PC Temperature","type":"posts"},{"content":"","date":"10 May 2006","externalUrl":null,"permalink":"/tags/rrdtool/","section":"Tags","summary":"","title":"Rrdtool","type":"tags"},{"content":"mkthumbs\n","date":"29 April 2006","externalUrl":null,"permalink":"/posts/makethumbnails/","section":"Posts","summary":"mkthumbs\n","title":"Make Thumbnails","type":"posts"},{"content":"My Celica! ","date":"29 April 2006","externalUrl":null,"permalink":"/posts/celica/","section":"Posts","summary":"My Celica! ","title":"My Celica","type":"posts"},{"content":" ","date":"2 April 2006","externalUrl":null,"permalink":"/posts/googlerosegarden/","section":"Posts","summary":"","title":"Google Rose Garden","type":"posts"},{"content":"","date":"28 February 2006","externalUrl":null,"permalink":"/tags/bonding/","section":"Tags","summary":"","title":"Bonding","type":"tags"},{"content":"speed.dvi speed.pdf\n","date":"28 February 2006","externalUrl":null,"permalink":"/posts/bondingbenchmarking/","section":"Posts","summary":"speed.dvi speed.pdf\n","title":"Bonding Benchmarking","type":"posts"},{"content":" ","date":"2 February 2006","externalUrl":null,"permalink":"/posts/bigferritecore/","section":"Posts","summary":"","title":"Big Ferrite Core","type":"posts"},{"content":"","date":"2 February 2006","externalUrl":null,"permalink":"/tags/electronics/","section":"Tags","summary":"","title":"Electronics","type":"tags"},{"content":"","date":"31 January 2006","externalUrl":null,"permalink":"/tags/tft/","section":"Tags","summary":"","title":"Tft","type":"tags"},{"content":" ","date":"31 January 2006","externalUrl":null,"permalink":"/posts/tft/","section":"Posts","summary":" ","title":"TFT","type":"posts"},{"content":"exim.conf\n","date":"30 January 2006","externalUrl":null,"permalink":"/posts/debianeximconf/","section":"Posts","summary":"exim.conf\n","title":"Debian Exim Config","type":"posts"},{"content":"","date":"30 January 2006","externalUrl":null,"permalink":"/tags/email/","section":"Tags","summary":"","title":"Email","type":"tags"},{"content":"","date":"30 January 2006","externalUrl":null,"permalink":"/tags/exim/","section":"Tags","summary":"","title":"Exim","type":"tags"},{"content":"","date":"19 January 2006","externalUrl":null,"permalink":"/tags/nasa/","section":"Tags","summary":"","title":"Nasa","type":"tags"},{"content":" ","date":"19 January 2006","externalUrl":null,"permalink":"/posts/nasacountdown/","section":"Posts","summary":"","title":"NASA Countdown","type":"posts"},{"content":"","date":"17 January 2006","externalUrl":null,"permalink":"/tags/fanless/","section":"Tags","summary":"","title":"Fanless","type":"tags"},{"content":"","date":"17 January 2006","externalUrl":null,"permalink":"/tags/reserator/","section":"Tags","summary":"","title":"Reserator","type":"tags"},{"content":" ","date":"17 January 2006","externalUrl":null,"permalink":"/posts/zalmanreserator/","section":"Posts","summary":" ","title":"Zalman Reserator","type":"posts"},{"content":"letter.tex\n","date":"8 January 2006","externalUrl":null,"permalink":"/posts/latexletter/","section":"Posts","summary":"letter.tex\n","title":"LaTeX Letter","type":"posts"},{"content":"","date":"1 October 2005","externalUrl":null,"permalink":"/tags/elvish/","section":"Tags","summary":"","title":"Elvish","type":"tags"},{"content":" ","date":"1 October 2005","externalUrl":null,"permalink":"/posts/pelalilinelvish/","section":"Posts","summary":"","title":"Pelalil in Elvish","type":"posts"},{"content":"eb-lite-alpha-13.tar.gz\n","date":"22 September 2005","externalUrl":null,"permalink":"/posts/eb-lite-alpha-13/","section":"Posts","summary":"eb-lite-alpha-13.tar.gz\n","title":"Everybuddy Lite","type":"posts"},{"content":"","date":"22 July 2005","externalUrl":null,"permalink":"/tags/scarygoround/","section":"Tags","summary":"","title":"Scarygoround","type":"tags"},{"content":" ","date":"22 July 2005","externalUrl":null,"permalink":"/posts/sonofmongor/","section":"Posts","summary":" ","title":"Son of Mongor","type":"posts"},{"content":"","date":"5 July 2005","externalUrl":null,"permalink":"/tags/comics/","section":"Tags","summary":"","title":"Comics","type":"tags"},{"content":" ","date":"5 July 2005","externalUrl":null,"permalink":"/posts/shelleyandamy/","section":"Posts","summary":" ","title":"Shelley and Amy","type":"posts"},{"content":"Place these files in a web dir and visit from mobile:\nblankoperatorlogo.html blankoperatorlogo.nol Also set mime time with, eg .htaccess: AddType image/vnd.nok-oplogo-color nol\n","date":"6 June 2005","externalUrl":null,"permalink":"/posts/blankoperatorlogo/","section":"Posts","summary":"Place these files in a web dir and visit from mobile:\n","title":"Blank Operator Logo","type":"posts"},{"content":"","date":"6 June 2005","externalUrl":null,"permalink":"/tags/nokia/","section":"Tags","summary":"","title":"Nokia","type":"tags"},{"content":"I went to live8 in Hyde Park, and it was ACE!\nWe just joined the queue to get in at hyde park corner Just at the top of hyde park One of the northern gates blocked off Getting there We made it inside! Only to find we wernt quite there yet Loads of people People gather before it starts Everyone hops up as it begins Bill Gates!!! Dido Dido We were here ","date":"4 June 2005","externalUrl":null,"permalink":"/posts/live8/","section":"Posts","summary":"I went to live8 in Hyde Park, and it was ACE!\n","title":"Live 8","type":"posts"},{"content":" ","date":"27 May 2005","externalUrl":null,"permalink":"/posts/deskfan/","section":"Posts","summary":"","title":"Desk Fan","type":"posts"},{"content":"","date":"27 May 2005","externalUrl":null,"permalink":"/tags/fan/","section":"Tags","summary":"","title":"Fan","type":"tags"},{"content":"","date":"26 April 2005","externalUrl":null,"permalink":"/tags/csharp/","section":"Tags","summary":"","title":"Csharp","type":"tags"},{"content":"HideMouse.exe HideMouse.zip\n","date":"26 April 2005","externalUrl":null,"permalink":"/posts/hidemouse/","section":"Posts","summary":"HideMouse.exe HideMouse.zip\n","title":"Hide Mouse","type":"posts"},{"content":"","date":"26 April 2005","externalUrl":null,"permalink":"/tags/mouse/","section":"Tags","summary":"","title":"Mouse","type":"tags"},{"content":"tpac ","date":"22 March 2005","externalUrl":null,"permalink":"/posts/tpac/","section":"Posts","summary":"tpac ","title":"tpac","type":"posts"},{"content":"backup\n","date":"17 February 2005","externalUrl":null,"permalink":"/posts/backupscript/","section":"Posts","summary":"backup\n","title":"Backup Script","type":"posts"},{"content":"bluelock\n","date":"17 February 2005","externalUrl":null,"permalink":"/posts/bluelock/","section":"Posts","summary":"bluelock\n","title":"Bluelock","type":"posts"},{"content":"","date":"17 February 2005","externalUrl":null,"permalink":"/tags/bluetooth/","section":"Tags","summary":"","title":"Bluetooth","type":"tags"},{"content":"","date":"17 February 2005","externalUrl":null,"permalink":"/tags/solaris/","section":"Tags","summary":"","title":"Solaris","type":"tags"},{"content":"","date":"17 February 2005","externalUrl":null,"permalink":"/tags/tape/","section":"Tags","summary":"","title":"Tape","type":"tags"},{"content":"Here are the photos I took while skiing in Bulgaria ","date":"10 February 2005","externalUrl":null,"permalink":"/posts/bulgariaski2005/","section":"Posts","summary":"Here are the photos I took while skiing in Bulgaria ","title":"Bulgaria Ski 2005","type":"posts"},{"content":"geekcode\n","date":"15 December 2004","externalUrl":null,"permalink":"/posts/geekcode/","section":"Posts","summary":"geekcode\n","title":"Geekcode","type":"posts"},{"content":"","date":"15 December 2004","externalUrl":null,"permalink":"/tags/geekcode/","section":"Tags","summary":"","title":"Geekcode","type":"tags"},{"content":"sendbreak.c\n","date":"16 November 2004","externalUrl":null,"permalink":"/posts/sendbreak/","section":"Posts","summary":"sendbreak.c\n","title":"Sendbreak","type":"posts"},{"content":"","date":"16 November 2004","externalUrl":null,"permalink":"/tags/serial/","section":"Tags","summary":"","title":"Serial","type":"tags"},{"content":"mkplaylist\n","date":"11 June 2004","externalUrl":null,"permalink":"/posts/mkplaylist/","section":"Posts","summary":"mkplaylist\n","title":"Make Playlist","type":"posts"},{"content":"","date":"11 June 2004","externalUrl":null,"permalink":"/tags/playlist/","section":"Tags","summary":"","title":"Playlist","type":"tags"},{"content":"wshaper\n","date":"11 June 2004","externalUrl":null,"permalink":"/posts/wshaper/","section":"Posts","summary":"wshaper\n","title":"Wonder Shaper","type":"posts"},{"content":"\u003c!DOCTYPE HTML\u003e /tomsweb/ Found The document has moved here.\n","externalUrl":null,"permalink":"/tomsweb/","section":"TomsWeb","summary":"\u003c!DOCTYPE HTML\u003e /tomsweb/ Found The document has moved here.\n","title":"","type":"page"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"}]