Thicket data repository for the EEG
at main 32 kB view raw
1{ 2 "id": "https://mort.io/blog/mediapc/", 3 "title": "Renovating an old media PC", 4 "link": "https://mort.io/blog/mediapc/", 5 "updated": "2020-08-28T00:00:00", 6 "published": "2020-08-28T00:00:00", 7 "summary": "<p>Some notes from my first attempt to renovate an old media PC that had a SYSLINUX\ninstall without any package management, and a crufty BIOS. Probably outdated\nnow, but I may go back to it one day…</p>\n<p>First, some background links:</p>\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Cylinder-head-sector\">https://en.wikipedia.org/wiki/Cylinder-head-sector</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/FAT_boot_sector\">https://en.wikipedia.org/wiki/FAT_boot_sector</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Logical_Block_Addressing#CHS_conversion\">https://en.wikipedia.org/wiki/Logical_Block_Addressing#CHS_conversion</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Master_Boot_Record\">https://en.wikipedia.org/wiki/Master_Boot_Record</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Volume_boot_record\">https://en.wikipedia.org/wiki/Volume_boot_record</a></li>\n<li><a href=\"https://wiki.archlinux.org/index.php/Syslinux\">https://wiki.archlinux.org/index.php/Syslinux</a></li>\n<li><a href=\"https://wiki.syslinux.org/wiki/index.php?title=Common_Problems#Failed_to_load_ldlinux\">https://wiki.syslinux.org/wiki/index.php?title=Common_Problems#Failed_to_load_ldlinux</a></li>\n<li><a href=\"https://wiki.syslinux.org/wiki/index.php?title=Hardware_Compatibility#USB_related_problems\">https://wiki.syslinux.org/wiki/index.php?title=Hardware_Compatibility#USB_related_problems</a></li>\n<li><a href=\"https://wiki.syslinux.org/wiki/index.php?title=Hdt_(Hardware_Detection_Tool)\">https://wiki.syslinux.org/wiki/index.php?title=Hdt_(Hardware_Detection_Tool)</a></li>\n</ul>\n<p>I explored two ways forward: <a href=\"https://www.syslinux.org/\">SYSLINUX</a> and\n<a href=\"https://www.gnu.org/software/grub/index.html\">GRUB</a>.</p>\n<h2><a href=\"https://mort.io/blog/mediapc/#syslinux\">SYSLINUX</a></h2>\n<p>I found that getting SYSLINUX working required moving the partition to 0/1/1 –\nusing sectors per track of 63 or 32, and heads per cylinder or 16 or 64 with\nappropriate cylinder values simply didn’t help.</p>\n<p>Diagnosed by observing that console displayed only CRLF but no banner –\nSYSLINUX code ends up with the banner to be displayed just falling into the\nsecond sector on the disk, so it can’t be read unless the geometry is correct.\nDon’t ask why old fashioned whirling metal disk geometry needs to be set for a\nUSB stick, you’ll be sad.</p>\n<h3><a href=\"https://mort.io/blog/mediapc/#formatting-the-usb-stick\">Formatting the USB stick</a></h3>\n<p>Some runes, use at your own risk.</p>\n<pre><code><span><span><span>sudo</span></span><span> dd if=/dev/zero of=/dev/sdd status=progress bs=1M count=256</span>\n</span><span><span><span>sudo</span></span><span> fdisk /dev/sdd <span><span>&lt;&lt;</span><span>EOF</span></span><span>\n</span></span></span><span><span><span>o\n</span></span></span><span><span><span>x\n</span></span></span><span><span><span>h\n</span></span></span><span><span><span>64\n</span></span></span><span><span><span>s\n</span></span></span><span><span><span>32\n</span></span></span><span><span><span>r\n</span></span></span><span><span><span>n\n</span></span></span><span><span><span>p\n</span></span></span><span><span><span>1\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>t\n</span></span></span><span><span><span>6\n</span></span></span><span><span><span>a\n</span></span></span><span><span><span>1\n</span></span></span><span><span><span>w\n</span></span></span><span><span><span>\n</span></span></span><span><span><span><span>EOF</span></span></span>\n</span><span><span><span>sudo</span></span><span> mkfs.fat /dev/sdd1</span>\n</span></code></pre>\n<p>One exciting gotcha: the <code>fdisk</code> utility in the <code>util-linux</code> package <strong>didn’t\nwork</strong> – but the one in <code>busybox</code> did!</p>\n<h3><a href=\"https://mort.io/blog/mediapc/#putting-mbr-in-place\">Putting MBR in place</a></h3>\n<pre><code><span><span><span>sudo</span></span><span> dd bs=440 count=1 conv=notrunc if=/usr/share/syslinux/mbr.bin of=/dev/sdd</span>\n</span></code></pre>\n<h3><a href=\"https://mort.io/blog/mediapc/#obtaining-and-installing-memtest86\">Obtaining and installing </a><a href=\"https://www.memtest86.com/\"><code>memtest86</code></a></h3>\n<pre><code><span><span><span>cd</span></span>\n</span><span><span><span>wget</span></span><span> http://memtest.org/download/4.10/memtest86+-4.10.zip</span>\n</span><span><span><span>unzip</span></span><span> memtest86+-4.10.zip</span>\n</span><span><span><span>sudo</span></span><span> cp <span><span>~</span></span>/memtest86+-4.10.bin /mnt/boot/</span>\n</span></code></pre>\n<h3><a href=\"https://mort.io/blog/mediapc/#putting-locally-built-syslinux-in-place\">Putting locally built SYSLINUX in place</a></h3>\n<pre><code><span><span><span>sudo</span></span><span> mount /dev/sdd1 /mnt</span>\n</span><span><span><span>sudo</span></span><span> mkdir<span><span> -</span>p</span> /mnt/boot/syslinux</span>\n</span><span><span><span>sudo</span></span><span> syslinux<span><span> --</span>directory</span> boot/syslinux<span><span> --</span>install</span> /dev/sdd1</span>\n</span><span><span><span>sudo</span></span><span> cp /usr/share/syslinux/<span>*</span>.c32 /mnt/boot/syslinux/</span>\n</span><span><span><span>cd</span></span><span> <span><span>~</span></span>/syslinux</span>\n</span><span><span><span>make</span></span><span> bios</span>\n</span><span><span><span>sudo</span></span><span> cp <span><span>~</span></span>/syslinux/bios/com32/hdt/hdt.c32 /mnt/boot/syslinux/</span>\n</span><span><span><span>sudo</span></span><span> cp /usr/share/hwdata/pci.ids /mnt/boot/syslinux</span>\n</span></code></pre>\n<pre><code><span><span><span>sudo</span></span><span> sh<span><span> -</span>c</span> <span><span>&quot;</span>cat &gt; /mnt/boot/syslinux/syslinux.cfg<span>&quot;</span></span> <span><span>&lt;&lt;</span><span>EOF</span></span><span>\n</span></span></span><span><span><span># UI menu.c32\n</span></span></span><span><span><span>PROMPT 1\n</span></span></span><span><span><span>DEFAULT hdt\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>LABEL some_label\n</span></span></span><span><span><span> LINUX memdisk\n</span></span></span><span><span><span> INITRD ../alpine-standard-3.12.0-x86_64.iso\n</span></span></span><span><span><span> APPEND iso-scan/filename=../alpine-standard-3.12.0-x86_64.iso\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>LABEL memtest\n</span></span></span><span><span><span> LINUX ../memtest86+-4.10.bin\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>LABEL hdt\n</span></span></span><span><span><span> COM32 hdt.c32\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>LABEL reboot\n</span></span></span><span><span><span> COM32 reboot.c32\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>LABEL poweroff\n</span></span></span><span><span><span> COM32 poweroff.c32\n</span></span></span><span><span><span><span>EOF</span></span></span>\n</span></code></pre>\n<p>Unfortunately, getting <code>hdt</code> working required rebuilding as the Alpine package\nversion doesn’t appear to statically link against libupload.a from SYSLINUX\ntree so doesn’t work. Fixing required <code>make bios</code> in the SYSLINUX tree after\ninstalling dependencies including:</p>\n<pre><code><span><span><span>sudo</span></span><span> apk<span><span> -</span>U</span> add nasm xzlinux-headers util-linux-dev</span>\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/mediapc/#grub\">GRUB</a></h2>\n<p>Similar behaviour: GRUB2 displayed the <code>GRUB </code> message and nothing else, The\n<a href=\"https://help.ubuntu.com/community/Grub2/Troubleshooting#GRUB\">Ubuntu wiki</a> says\nthis is the “can’t find MBR or euqivalent” information. In fact, it’s the same\nissue: subsequent progress requires reading the second sector, but I had a\nCHS/LBA mismatch meant it wasn’t reading from the right sector and so hanging.</p>\n<h3><a href=\"https://mort.io/blog/mediapc/#to-wipe-the-stick\">To wipe the stick</a></h3>\n<pre><code><span><span><span>sudo</span></span><span> dd if=/dev/zero of=/dev/sdd status=progress bs=4M</span>\n</span></code></pre>\n<h3><a href=\"https://mort.io/blog/mediapc/#to-partition-the-stick\">To partition the stick</a></h3>\n<p>In this case, to be bootable with a single <code>ext4</code> partition</p>\n<pre><code><span><span><span>sudo</span></span><span> parted /dev/sdd</span>\n</span><span><span><span>mklabel</span></span><span> msdos</span>\n</span><span><span><span>unit</span></span><span> s</span>\n</span><span><span><span>mkpart</span></span><span> primary ext2 2048s 100<span><span>%</span></span></span>\n</span><span><span><span>set</span></span><span> 1 boot on</span>\n</span><span><span><span>set</span></span><span> 1 lba off</span>\n</span></code></pre>\n<p>…or alternatively, possibly</p>\n<pre><code><span><span><span>sudo</span></span><span> fdisk /dev/sdd <span><span>&lt;&lt;</span><span>EOF</span></span><span>\n</span></span></span><span><span><span>o\n</span></span></span><span><span><span>n\n</span></span></span><span><span><span>p\n</span></span></span><span><span><span>1\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>a\n</span></span></span><span><span><span>1\n</span></span></span><span><span><span>\n</span></span></span><span><span><span><span>EOF</span></span></span>\n</span></code></pre>\n<h3><a href=\"https://mort.io/blog/mediapc/#to-format-the-partition-and-install-grub-and-the-master-boot-record\">To format the partition, and install <code>grub</code> and the master boot record</a></h3>\n<pre><code><span><span><span>sudo</span></span><span> mkfs.ext4 /dev/sdd1</span>\n</span><span><span><span>sudo</span></span><span> mount /dev/sdd1 /mnt</span>\n</span><span><span><span>sudo</span></span><span> grub-install<span><span> --</span>recheck</span><span><span> --</span>boot-directory</span><span>=</span>/mnt/boot /dev/sdd</span>\n</span></code></pre>\n<p>At this point, booting off the stick will bring htpc to <code>GRUB </code> error stage,\nindicating GRUB has loaded but doesn’t know anything about how to continue.</p>\n<h3><a href=\"https://mort.io/blog/mediapc/#install-memtest\">Install memtest</a></h3>\n<pre><code><span><span><span>sudo</span></span><span> cp memtest86+.bin /mnt</span>\n</span><span><span><span>sudo</span></span><span> cat <span>&gt;</span>/mnt/boot/grub/grub.cfg <span><span>&lt;&lt;</span><span>EOF</span></span><span>\n</span></span></span><span><span><span>set timeout=10\n</span></span></span><span><span><span>set default=0\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>menuentry &quot;Memtest 86+&quot; {\n</span></span></span><span><span><span> linux16 /memtest86+.bin\n</span></span></span><span><span><span>}\n</span></span></span><span><span><span><span>EOF</span></span></span>\n</span></code></pre>\n<h3><a href=\"https://mort.io/blog/mediapc/#install-alpine-iso-for-booting\">Install Alpine ISO for booting</a></h3>\n<p>Add the following stanza to GRUB config, above:</p>\n<pre><code><span><span><span>insmod</span></span><span> loopback</span>\n</span><span>\n</span><span><span><span>menuentry</span></span><span> <span><span>&quot;</span>alpine<span>&quot;</span></span> <span><span>{</span>\n</span></span></span><span><span><span> set isofile=/boot/alpine-standard-3.12.0-x86_64.iso\n</span></span></span><span><span><span> loopback loop <span><span>$</span><span>isofile</span></span>\n</span></span></span><span><span><span> linux (loop)/boot/vmlinuz-lts iso-scan/filename=<span><span>$</span><span>isofile</span></span> modules=loop<span>,</span>squashfs<span>,</span>sd-mod<span>,</span>usb-storage modloop=(loop)/boot/modloop-lts\n</span></span></span><span><span><span> initrd (loop)/boot/initramfs-lts\n</span></span></span><span><span><span><span>}</span></span></span>\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/mediapc/#miscellaneous-cribs\">Miscellaneous cribs</a></h2>\n<p>I did of course forget that the</p>\n<p>Bluetooth keyboard requires a dongle to be plugged in which is stored inside the\nbattery compartment. Doh. Making a note so I don’t forget again.</p>\n<h3><a href=\"https://mort.io/blog/mediapc/#adding-internal-hard-disk\">Adding internal hard-disk</a></h3>\n<p>Required partitioning and formatting:</p>\n<ul>\n<li>find where disk is mounted: <code>sudo lshw -C disk -short</code>\nassume new disk is <code>/dev/sdX</code>, flash disk is <code>/dev/sdF</code></li>\n<li>partition disk: <code>sudo parted /dev/sdX mkpart primary ext4 1 -1</code></li>\n<li>format disk: <code>sudo mkfs.ext4 -m0 /dev/sdX1</code></li>\n<li>label disk: <code>sudo e2label /dev/sdX1 Harddisk</code></li>\n<li>remount flash disk rw: <code>mount -o remount,rw /dev/sdF</code></li>\n<li>edit <code>/boot/extlinux.conf</code> so APPEND line reads:\n<code>APPEND boot=LABEL=System disk=LABEL=Harddisk quiet</code></li>\n</ul>\n<p>I screwed up the first time by not correctly labelling the disk so had to make\nan Ubuntu rescue USB stick. Couldn’t get this to work using MacOS, though didn’t\ntry putting GRUB on via MacOS.</p>\n<ul>\n<li>download ISO: <a href=\"http://ubuntu-rescue-remix.org/\">http://ubuntu-rescue-remix.org/</a></li>\n<li>boot <code>ubuntu-rescue-remix-12-04.iso</code> via virtualbox</li>\n<li>mount USB stick on <code>/dev/sdX</code> at <code>/mnt</code>: <code>mount /dev/sdX /mnt</code></li>\n<li>format the stick: <code>mkfs.vfat -n multiboot /dev/sdX1</code></li>\n<li><code>cd /mnt &amp;&amp; mkdir boot iso</code></li>\n<li><code>grub-install --force --no-floppy --boot-directory=/mnt/boot /dev/sdX</code></li>\n<li>create ISO from mounted cd:\n<code>dd if=/dev/cdrom of=/mnt/iso/ubuntu-rescue-remix-12-04.iso</code></li>\n<li>create <code>/boot/grub/grub.cfg</code> with</li>\n</ul>\n<pre><code><span><span><span>menuentry</span></span><span> <span><span>'</span>Ubuntu Rescue Remix ISO <span>'</span></span> <span><span>{</span>\n</span></span></span><span><span><span> set isofile=<span><span>&quot;</span>/iso/ubuntu-rescue-remix-12-04.iso<span>&quot;</span></span>\n</span></span></span><span><span><span> loopback loop (hd0<span>,</span>N)<span><span>$</span><span>isofile</span></span>\n</span></span></span><span><span><span> linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=<span><span>$</span><span>isofile</span></span> noprompt noeject\n</span></span></span><span><span><span> initrd (loop)/casper/initrd.gz\n</span></span></span><span><span><span><span>}</span></span></span>\n</span></code></pre>\n<p>where <code>N</code> is partition number, typically 1.</p>\n<p>Finally, for backup purposes, addons are stored in\n<code>/storage/.xbmc/addons/packages</code>, and the following Alpine packages were useful\nto install for some of the above, diagnostics, etc:</p>\n<pre><code><span><span><span>sudo</span></span><span> apk add busybox-static apk-tools-static</span>\n</span><span><span><span>sudo</span></span><span> vi /etc/apk/repositories</span>\n</span><span><span><span>sudo</span></span><span> apk.static update</span>\n</span><span><span><span>sudo</span></span><span> apk.static upgrade<span><span> --</span>no-self-upgrade</span><span><span> --</span>available</span></span>\n</span><span><span><span>sudo</span></span><span> apk add lshw lshw-doc</span>\n</span><span><span><span>sudo</span></span><span> lshw<span><span> -</span>C</span> storage<span><span> -</span>short</span><span><span> -</span>numeric</span></span>\n</span><span><span><span>sudo</span></span><span> apk add lsblk</span>\n</span><span><span><span>sudo</span></span><span> lsblk</span>\n</span></code></pre>", 8 "content": "<p>Some notes from my first attempt to renovate an old media PC that had a SYSLINUX\ninstall without any package management, and a crufty BIOS. Probably outdated\nnow, but I may go back to it one day…</p>\n<p>First, some background links:</p>\n<ul>\n<li><a href=\"https://en.wikipedia.org/wiki/Cylinder-head-sector\">https://en.wikipedia.org/wiki/Cylinder-head-sector</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/FAT_boot_sector\">https://en.wikipedia.org/wiki/FAT_boot_sector</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Logical_Block_Addressing#CHS_conversion\">https://en.wikipedia.org/wiki/Logical_Block_Addressing#CHS_conversion</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Master_Boot_Record\">https://en.wikipedia.org/wiki/Master_Boot_Record</a></li>\n<li><a href=\"https://en.wikipedia.org/wiki/Volume_boot_record\">https://en.wikipedia.org/wiki/Volume_boot_record</a></li>\n<li><a href=\"https://wiki.archlinux.org/index.php/Syslinux\">https://wiki.archlinux.org/index.php/Syslinux</a></li>\n<li><a href=\"https://wiki.syslinux.org/wiki/index.php?title=Common_Problems#Failed_to_load_ldlinux\">https://wiki.syslinux.org/wiki/index.php?title=Common_Problems#Failed_to_load_ldlinux</a></li>\n<li><a href=\"https://wiki.syslinux.org/wiki/index.php?title=Hardware_Compatibility#USB_related_problems\">https://wiki.syslinux.org/wiki/index.php?title=Hardware_Compatibility#USB_related_problems</a></li>\n<li><a href=\"https://wiki.syslinux.org/wiki/index.php?title=Hdt_(Hardware_Detection_Tool)\">https://wiki.syslinux.org/wiki/index.php?title=Hdt_(Hardware_Detection_Tool)</a></li>\n</ul>\n<p>I explored two ways forward: <a href=\"https://www.syslinux.org/\">SYSLINUX</a> and\n<a href=\"https://www.gnu.org/software/grub/index.html\">GRUB</a>.</p>\n<h2><a href=\"https://mort.io/blog/mediapc/#syslinux\">SYSLINUX</a></h2>\n<p>I found that getting SYSLINUX working required moving the partition to 0/1/1 –\nusing sectors per track of 63 or 32, and heads per cylinder or 16 or 64 with\nappropriate cylinder values simply didn’t help.</p>\n<p>Diagnosed by observing that console displayed only CRLF but no banner –\nSYSLINUX code ends up with the banner to be displayed just falling into the\nsecond sector on the disk, so it can’t be read unless the geometry is correct.\nDon’t ask why old fashioned whirling metal disk geometry needs to be set for a\nUSB stick, you’ll be sad.</p>\n<h3><a href=\"https://mort.io/blog/mediapc/#formatting-the-usb-stick\">Formatting the USB stick</a></h3>\n<p>Some runes, use at your own risk.</p>\n<pre><code><span><span><span>sudo</span></span><span> dd if=/dev/zero of=/dev/sdd status=progress bs=1M count=256</span>\n</span><span><span><span>sudo</span></span><span> fdisk /dev/sdd <span><span>&lt;&lt;</span><span>EOF</span></span><span>\n</span></span></span><span><span><span>o\n</span></span></span><span><span><span>x\n</span></span></span><span><span><span>h\n</span></span></span><span><span><span>64\n</span></span></span><span><span><span>s\n</span></span></span><span><span><span>32\n</span></span></span><span><span><span>r\n</span></span></span><span><span><span>n\n</span></span></span><span><span><span>p\n</span></span></span><span><span><span>1\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>t\n</span></span></span><span><span><span>6\n</span></span></span><span><span><span>a\n</span></span></span><span><span><span>1\n</span></span></span><span><span><span>w\n</span></span></span><span><span><span>\n</span></span></span><span><span><span><span>EOF</span></span></span>\n</span><span><span><span>sudo</span></span><span> mkfs.fat /dev/sdd1</span>\n</span></code></pre>\n<p>One exciting gotcha: the <code>fdisk</code> utility in the <code>util-linux</code> package <strong>didn’t\nwork</strong> – but the one in <code>busybox</code> did!</p>\n<h3><a href=\"https://mort.io/blog/mediapc/#putting-mbr-in-place\">Putting MBR in place</a></h3>\n<pre><code><span><span><span>sudo</span></span><span> dd bs=440 count=1 conv=notrunc if=/usr/share/syslinux/mbr.bin of=/dev/sdd</span>\n</span></code></pre>\n<h3><a href=\"https://mort.io/blog/mediapc/#obtaining-and-installing-memtest86\">Obtaining and installing </a><a href=\"https://www.memtest86.com/\"><code>memtest86</code></a></h3>\n<pre><code><span><span><span>cd</span></span>\n</span><span><span><span>wget</span></span><span> http://memtest.org/download/4.10/memtest86+-4.10.zip</span>\n</span><span><span><span>unzip</span></span><span> memtest86+-4.10.zip</span>\n</span><span><span><span>sudo</span></span><span> cp <span><span>~</span></span>/memtest86+-4.10.bin /mnt/boot/</span>\n</span></code></pre>\n<h3><a href=\"https://mort.io/blog/mediapc/#putting-locally-built-syslinux-in-place\">Putting locally built SYSLINUX in place</a></h3>\n<pre><code><span><span><span>sudo</span></span><span> mount /dev/sdd1 /mnt</span>\n</span><span><span><span>sudo</span></span><span> mkdir<span><span> -</span>p</span> /mnt/boot/syslinux</span>\n</span><span><span><span>sudo</span></span><span> syslinux<span><span> --</span>directory</span> boot/syslinux<span><span> --</span>install</span> /dev/sdd1</span>\n</span><span><span><span>sudo</span></span><span> cp /usr/share/syslinux/<span>*</span>.c32 /mnt/boot/syslinux/</span>\n</span><span><span><span>cd</span></span><span> <span><span>~</span></span>/syslinux</span>\n</span><span><span><span>make</span></span><span> bios</span>\n</span><span><span><span>sudo</span></span><span> cp <span><span>~</span></span>/syslinux/bios/com32/hdt/hdt.c32 /mnt/boot/syslinux/</span>\n</span><span><span><span>sudo</span></span><span> cp /usr/share/hwdata/pci.ids /mnt/boot/syslinux</span>\n</span></code></pre>\n<pre><code><span><span><span>sudo</span></span><span> sh<span><span> -</span>c</span> <span><span>&quot;</span>cat &gt; /mnt/boot/syslinux/syslinux.cfg<span>&quot;</span></span> <span><span>&lt;&lt;</span><span>EOF</span></span><span>\n</span></span></span><span><span><span># UI menu.c32\n</span></span></span><span><span><span>PROMPT 1\n</span></span></span><span><span><span>DEFAULT hdt\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>LABEL some_label\n</span></span></span><span><span><span> LINUX memdisk\n</span></span></span><span><span><span> INITRD ../alpine-standard-3.12.0-x86_64.iso\n</span></span></span><span><span><span> APPEND iso-scan/filename=../alpine-standard-3.12.0-x86_64.iso\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>LABEL memtest\n</span></span></span><span><span><span> LINUX ../memtest86+-4.10.bin\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>LABEL hdt\n</span></span></span><span><span><span> COM32 hdt.c32\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>LABEL reboot\n</span></span></span><span><span><span> COM32 reboot.c32\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>LABEL poweroff\n</span></span></span><span><span><span> COM32 poweroff.c32\n</span></span></span><span><span><span><span>EOF</span></span></span>\n</span></code></pre>\n<p>Unfortunately, getting <code>hdt</code> working required rebuilding as the Alpine package\nversion doesn’t appear to statically link against libupload.a from SYSLINUX\ntree so doesn’t work. Fixing required <code>make bios</code> in the SYSLINUX tree after\ninstalling dependencies including:</p>\n<pre><code><span><span><span>sudo</span></span><span> apk<span><span> -</span>U</span> add nasm xzlinux-headers util-linux-dev</span>\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/mediapc/#grub\">GRUB</a></h2>\n<p>Similar behaviour: GRUB2 displayed the <code>GRUB </code> message and nothing else, The\n<a href=\"https://help.ubuntu.com/community/Grub2/Troubleshooting#GRUB\">Ubuntu wiki</a> says\nthis is the “can’t find MBR or euqivalent” information. In fact, it’s the same\nissue: subsequent progress requires reading the second sector, but I had a\nCHS/LBA mismatch meant it wasn’t reading from the right sector and so hanging.</p>\n<h3><a href=\"https://mort.io/blog/mediapc/#to-wipe-the-stick\">To wipe the stick</a></h3>\n<pre><code><span><span><span>sudo</span></span><span> dd if=/dev/zero of=/dev/sdd status=progress bs=4M</span>\n</span></code></pre>\n<h3><a href=\"https://mort.io/blog/mediapc/#to-partition-the-stick\">To partition the stick</a></h3>\n<p>In this case, to be bootable with a single <code>ext4</code> partition</p>\n<pre><code><span><span><span>sudo</span></span><span> parted /dev/sdd</span>\n</span><span><span><span>mklabel</span></span><span> msdos</span>\n</span><span><span><span>unit</span></span><span> s</span>\n</span><span><span><span>mkpart</span></span><span> primary ext2 2048s 100<span><span>%</span></span></span>\n</span><span><span><span>set</span></span><span> 1 boot on</span>\n</span><span><span><span>set</span></span><span> 1 lba off</span>\n</span></code></pre>\n<p>…or alternatively, possibly</p>\n<pre><code><span><span><span>sudo</span></span><span> fdisk /dev/sdd <span><span>&lt;&lt;</span><span>EOF</span></span><span>\n</span></span></span><span><span><span>o\n</span></span></span><span><span><span>n\n</span></span></span><span><span><span>p\n</span></span></span><span><span><span>1\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>a\n</span></span></span><span><span><span>1\n</span></span></span><span><span><span>\n</span></span></span><span><span><span><span>EOF</span></span></span>\n</span></code></pre>\n<h3><a href=\"https://mort.io/blog/mediapc/#to-format-the-partition-and-install-grub-and-the-master-boot-record\">To format the partition, and install <code>grub</code> and the master boot record</a></h3>\n<pre><code><span><span><span>sudo</span></span><span> mkfs.ext4 /dev/sdd1</span>\n</span><span><span><span>sudo</span></span><span> mount /dev/sdd1 /mnt</span>\n</span><span><span><span>sudo</span></span><span> grub-install<span><span> --</span>recheck</span><span><span> --</span>boot-directory</span><span>=</span>/mnt/boot /dev/sdd</span>\n</span></code></pre>\n<p>At this point, booting off the stick will bring htpc to <code>GRUB </code> error stage,\nindicating GRUB has loaded but doesn’t know anything about how to continue.</p>\n<h3><a href=\"https://mort.io/blog/mediapc/#install-memtest\">Install memtest</a></h3>\n<pre><code><span><span><span>sudo</span></span><span> cp memtest86+.bin /mnt</span>\n</span><span><span><span>sudo</span></span><span> cat <span>&gt;</span>/mnt/boot/grub/grub.cfg <span><span>&lt;&lt;</span><span>EOF</span></span><span>\n</span></span></span><span><span><span>set timeout=10\n</span></span></span><span><span><span>set default=0\n</span></span></span><span><span><span>\n</span></span></span><span><span><span>menuentry &quot;Memtest 86+&quot; {\n</span></span></span><span><span><span> linux16 /memtest86+.bin\n</span></span></span><span><span><span>}\n</span></span></span><span><span><span><span>EOF</span></span></span>\n</span></code></pre>\n<h3><a href=\"https://mort.io/blog/mediapc/#install-alpine-iso-for-booting\">Install Alpine ISO for booting</a></h3>\n<p>Add the following stanza to GRUB config, above:</p>\n<pre><code><span><span><span>insmod</span></span><span> loopback</span>\n</span><span>\n</span><span><span><span>menuentry</span></span><span> <span><span>&quot;</span>alpine<span>&quot;</span></span> <span><span>{</span>\n</span></span></span><span><span><span> set isofile=/boot/alpine-standard-3.12.0-x86_64.iso\n</span></span></span><span><span><span> loopback loop <span><span>$</span><span>isofile</span></span>\n</span></span></span><span><span><span> linux (loop)/boot/vmlinuz-lts iso-scan/filename=<span><span>$</span><span>isofile</span></span> modules=loop<span>,</span>squashfs<span>,</span>sd-mod<span>,</span>usb-storage modloop=(loop)/boot/modloop-lts\n</span></span></span><span><span><span> initrd (loop)/boot/initramfs-lts\n</span></span></span><span><span><span><span>}</span></span></span>\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/mediapc/#miscellaneous-cribs\">Miscellaneous cribs</a></h2>\n<p>I did of course forget that the</p>\n<p>Bluetooth keyboard requires a dongle to be plugged in which is stored inside the\nbattery compartment. Doh. Making a note so I don’t forget again.</p>\n<h3><a href=\"https://mort.io/blog/mediapc/#adding-internal-hard-disk\">Adding internal hard-disk</a></h3>\n<p>Required partitioning and formatting:</p>\n<ul>\n<li>find where disk is mounted: <code>sudo lshw -C disk -short</code>\nassume new disk is <code>/dev/sdX</code>, flash disk is <code>/dev/sdF</code></li>\n<li>partition disk: <code>sudo parted /dev/sdX mkpart primary ext4 1 -1</code></li>\n<li>format disk: <code>sudo mkfs.ext4 -m0 /dev/sdX1</code></li>\n<li>label disk: <code>sudo e2label /dev/sdX1 Harddisk</code></li>\n<li>remount flash disk rw: <code>mount -o remount,rw /dev/sdF</code></li>\n<li>edit <code>/boot/extlinux.conf</code> so APPEND line reads:\n<code>APPEND boot=LABEL=System disk=LABEL=Harddisk quiet</code></li>\n</ul>\n<p>I screwed up the first time by not correctly labelling the disk so had to make\nan Ubuntu rescue USB stick. Couldn’t get this to work using MacOS, though didn’t\ntry putting GRUB on via MacOS.</p>\n<ul>\n<li>download ISO: <a href=\"http://ubuntu-rescue-remix.org/\">http://ubuntu-rescue-remix.org/</a></li>\n<li>boot <code>ubuntu-rescue-remix-12-04.iso</code> via virtualbox</li>\n<li>mount USB stick on <code>/dev/sdX</code> at <code>/mnt</code>: <code>mount /dev/sdX /mnt</code></li>\n<li>format the stick: <code>mkfs.vfat -n multiboot /dev/sdX1</code></li>\n<li><code>cd /mnt &amp;&amp; mkdir boot iso</code></li>\n<li><code>grub-install --force --no-floppy --boot-directory=/mnt/boot /dev/sdX</code></li>\n<li>create ISO from mounted cd:\n<code>dd if=/dev/cdrom of=/mnt/iso/ubuntu-rescue-remix-12-04.iso</code></li>\n<li>create <code>/boot/grub/grub.cfg</code> with</li>\n</ul>\n<pre><code><span><span><span>menuentry</span></span><span> <span><span>'</span>Ubuntu Rescue Remix ISO <span>'</span></span> <span><span>{</span>\n</span></span></span><span><span><span> set isofile=<span><span>&quot;</span>/iso/ubuntu-rescue-remix-12-04.iso<span>&quot;</span></span>\n</span></span></span><span><span><span> loopback loop (hd0<span>,</span>N)<span><span>$</span><span>isofile</span></span>\n</span></span></span><span><span><span> linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=<span><span>$</span><span>isofile</span></span> noprompt noeject\n</span></span></span><span><span><span> initrd (loop)/casper/initrd.gz\n</span></span></span><span><span><span><span>}</span></span></span>\n</span></code></pre>\n<p>where <code>N</code> is partition number, typically 1.</p>\n<p>Finally, for backup purposes, addons are stored in\n<code>/storage/.xbmc/addons/packages</code>, and the following Alpine packages were useful\nto install for some of the above, diagnostics, etc:</p>\n<pre><code><span><span><span>sudo</span></span><span> apk add busybox-static apk-tools-static</span>\n</span><span><span><span>sudo</span></span><span> vi /etc/apk/repositories</span>\n</span><span><span><span>sudo</span></span><span> apk.static update</span>\n</span><span><span><span>sudo</span></span><span> apk.static upgrade<span><span> --</span>no-self-upgrade</span><span><span> --</span>available</span></span>\n</span><span><span><span>sudo</span></span><span> apk add lshw lshw-doc</span>\n</span><span><span><span>sudo</span></span><span> lshw<span><span> -</span>C</span> storage<span><span> -</span>short</span><span><span> -</span>numeric</span></span>\n</span><span><span><span>sudo</span></span><span> apk add lsblk</span>\n</span><span><span><span>sudo</span></span><span> lsblk</span>\n</span></code></pre>", 9 "content_type": "html", 10 "author": { 11 "name": "Unknown", 12 "email": null, 13 "uri": null 14 }, 15 "categories": [], 16 "source": "https://mort.io/atom.xml" 17}