Updates from duncanbowring Toggle Comment Threads | Keyboard Shortcuts

  • duncanbowring 05:18 on February 11, 2019 Permalink | Reply  

    Automating the home 

    Ha. Writing this now.

  • duncanbowring 10:41 on February 6, 2019 Permalink | Reply
    Tags: containers, , ,   

    PiHole LXC Container Proxmox CentOS7 

    Deploy an LXC container with the CentOS7 image.. 2G RAM, 8G storage, 2 CPU cores.
    I added a DHCP reservation for a static IP.

    When at the console for the CentOS7 LXC instance:
    Install pihole..
    curl -sSL https://install.pi-hole.net | bash


    Defaults are pretty good, just pick a good forwarding upstream DNS server. Google, Cloudflare, etc. The installer will install prerequisites. EPEL, REMI, bunch of packages, and run through everything.

    When the install completes, it will display the admin password ONCE. Take note of this.
    Reboot the container and run the installer again:
    curl -sSL https://install.pi-hole.net | bash

    It may ask you to upgrade PHP, go for it.
    It will then ask you if you want to update or reconfigure. If you were happy with the settings from last time, just hit update.

    When this has completed, you should be able to access pihole from http:///admin

    Remember to add in conditional forwarder for your internal domain name into the Settings under PiHole admin, and possibly add more upstream DNS servers (including your own router, perhaps?)

    When done, you can test it by going to your computer and trying to resolve a name against it..
    $ nslookup http://www.bbc.com

    Non-authoritative answer:
    http://www.bbc.com canonical name = www-bbc-com.bbc.net.uk.
    www-bbc-com.bbc.net.uk canonical name = bbc.map.fastly.net.
    Name: bbc.map.fastly.net

    Now update your DHCP server to issue this IP as the primary DNS, then grab a new lease on the client (restart/toggle wifi/ipconfig release etc).

    I personally convert the container to a template within proxmox at this point.

  • duncanbowring 20:40 on January 31, 2019 Permalink | Reply  


    No more messing about trying to find these clients, if you can’t grab them from a hypervisor. Here are the direct links to vmware.com for the executable downloads:

    vSphere 4.1

    VMware vSphere Client v4.1 : VMware-viclient-all-4.1.0-258902.exe
    VMware vSphere Client v4.1 Update 1 : VMware-viclient-all-4.1.0-345043.exe
    VMware vSphere Client v4.1 Update 2 : VMware-viclient-all-4.1.0-491557.exe
    VMware vSphere Client v4.1 Update 3 : VMware-viclient-all-4.1.0-799345.exe

    vSphere 5.0

    VMware vSphere Client v5.0 : VMware-viclient-all-5.0.0-455964.exe
    VMware vSphere Client v5.0 Update 1 : VMware-viclient-all-5.0.0-623373.exe
    VMware vSphere Client v5.0 Update 1b : VMware-viclient-all-5.0.0-804277.exe
    VMware vSphere Client v5.0 Update 2 : VMware-viclient-all-5.0.0-913577.exe

    vSphere 5.1

    VMware vSphere Client v5.1 : VMware-viclient-all-5.1.0-786111.exe
    VMware vSphere Client 5.1.0a : VMware-viclient-all-5.1.0-860230.exe
    VMware vSphere Client 5.1.0b : VMware-viclient-all-5.1.0-941893.exe
    VMware vSphere Client 5.1 Update 1 : VMware-viclient-all-5.1.0-1064113.exe
    VMware vSphere Client 5.1 Update 1b : VMware-viclient-all-5.1.0-1235233.exe

    vSphere 5.5

    VMware vSphere Client v5.5 : VMware-viclient-all-5.5.0-1281650.exe
    VMware vSphere Client 5.5 Update 3: VMware-viclient-all-5.5.0-3024345.exe

    vSphere 6

    VMware vSphere Client 6.0: VMware-viclient-all-6.0.0-2502222.exe
    VMware vSphere Client 6.0 Update 3: VMware-viclient-all-6.0.0-5112508.exe

  • duncanbowring 22:48 on January 30, 2019 Permalink | Reply
    Tags: cygwin, , rsync,   

    Cygwin Rsync Windows Permissions 


    OK, stop this happening:

    Open /etc/fstab and add noacl to the entry:

    none /cygdrive cygdrive binary,noacl,posix=0,user 0 0

    Save it. Close all cygwin terminals and start new terminal.

    Fix the bad stuff that already exists at the destination:

    Change Owner to local Administrator. Save and Apply to Children.
    Edit permissions, fix them up.. then advanced, Advanced.. apply to children (inherit from the new top level one you added).
    After this.. disable read only, apply to children.
    You will be able to delete this mess now.


  • duncanbowring 10:58 on January 12, 2019 Permalink | Reply  

    Dell R210 II BIOS Update Bricked 

    Broke my old Dell R210 II doing a BIOS update. Managed to fix it by flashing the chip directly.

    In the case of the R210 II, I used:

    CH341A USB Programmer (https://www.amazon.com/gp/product/B01I1EU9LG)

    SOIC8 Chip Clip (https://www.amazon.com/gp/product/B00V9QNAC4)

    CH341A Programmer software (free)

    The toughest part was finding the 8MB flash binary within the Dell downloads.

    The flash image start header is: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5AA5F00F .. searching for that [using a hex editor] and then selecting 0x800000 (8MB) length (which is the end of file here). I dumped it to a new file, then flashed that new .bin to the BIOS. First I tried to use the OEM EXE, but it was a weird length. I ended up extracting the installer and using the file that was in the payload directory.

    Result! Back in business.

  • duncanbowring 03:52 on December 28, 2018 Permalink | Reply  

    Vizio soundbars and TVs 

    i had both my Vizio 70” p702ui-b3 tv and soundbar stop powering on. The TV had 4 bulging capacitors on the power board, and the soundbar 1 (C21 I think it was). Replacing them is a beginners soldering job, and only costs a few dollars. It’s about $90 for a multimeter that works with capacitors for testing electronically. You can eyeball it, but the capacitance on the dead ones are off and the V rails are all inaccurate.

  • duncanbowring 13:17 on March 23, 2017 Permalink | Reply
    Tags: fragment identifier, javascript, web   

    How to redirect a URL fragment – hashtag in the URL 

    If you have address similar to http://host/#/blah, only ‘host’ is sent to the webserver – #/blah is only handled in the browser. This is called a fragment identifier.

    You can get around it by adding javascript to the page(s) you want to redirect as follows, changing up the catch-all for specifics:

    var redirectFragment = window.location.hash.replace(/^#/,”);
    if ( ” !== redirectFragment ) {
    window.location = ‘http://www.google.com’;

  • duncanbowring 22:20 on March 8, 2017 Permalink | Reply
    Tags: ios10, jailbreak, yalu   

    iOS 10(.1) Yalu B3 Jailbreak Workarounds 

    Semi-Tethered Reboot Steps

    1. Hard reboot (vol down + power) or any reboot event happens
    2. Relaunch mach_portal
    3. Cydia should work again now!

    No LTE/Mobile Data

    1. Ensure that mTerminal is installed
    2. su <enter> your password (default is alpine)
    3. Type following commands:
      1. chmod 777 /var
      2. chmod 777 /var/mobile
      3. chmod 777 /var/mobile/Library
      4. chmod 777 /var/mobile/Library/Preferences
    4. Reboot and then perform Semi-Tethered Reboot Steps again to activate jailbreak.

    Installing TetherMe

    Cydia tries to restart SpringBoard and will crash. It’s a known bug with Substrate and this version of iOS/Yalu jailbreak

    1. Install TetherMe via Cydia (this will require a SpringBoard reboot)
    2. Since the Cydia SpringBoard reboot isn’t working with this jailbreak, restart springboard the following way:
      1. Launch mTerminal (install via Cydia if needed)
      2. su <enter> your password (default is alpine)
      3. killall SpringBoard (this will cause a reboot)
      4. Run through the Semi-Tethered Reboot steps above to activate jailbreak again. Remember that you MUST do this EVERY time you crash or reboot.
    3. You will need to TEMPORARILY activate substrate to use TetherMe
      1. su <enter> your password (default is alpine)
      2. /etc/rc.d/substrate
      3. Close terminal
    4. Reinstall TetherMe via Cydia but DO NOT RESTART SPRINGBOARD, EXIT OUT OF CYDIA
    5. In Settings, you should see TetherMe in your list and will be able to enable Personal Hotspot now.
    6. You’ll likely have to do this every time you hard reboot. It sucks, but it works..

    Screen Shot 2017-03-09 at 6.18.22 AM


  • duncanbowring 04:51 on December 5, 2016 Permalink | Reply
    Tags: , terminator   

    Terminator Keyboard Shortcuts 

    Ctrl-Shift-E: will split the view vertically.

    Ctrl-Shift-O: will split the view horizontally.

    Ctrl-Shift-P: will focus be active on the previous view.

    Ctrl-Shift-N: will focus be active on the next view.

    Ctrl-Shift-W: will close the view where the focus is on.

    Ctrl-Shift-Q: will exit terminator.

    Ctrl-Shift-X: will focus active window and  enlarge it

  • duncanbowring 04:21 on December 1, 2016 Permalink | Reply  

    MySQL Query Table Sizes 

    Return a table with the table sizes in descending order of the selected database. Run this from mysql console. It will let you compare actual table size versus disk size (before you optimize table to reclaim space).

         table_schema as `Database`, 
         table_name AS `Table`, 
         round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` 
    FROM information_schema.TABLES 
    ORDER BY (data_length + index_length) DESC;
    • hasforkvadorni 01:45 on March 16, 2017 Permalink | Reply

      Excellent site. Plenty of useful info here. I’m sending it to several pals ans also sharing in delicious. And obviously, thank you to your effort!

  • duncanbowring 17:44 on June 8, 2016 Permalink | Reply
    Tags: , cluster, glusterfs, kernel, , Storage   

    GlusterFS Fuse Hanging on CentOS 7 

    Having strange GlusterFS hanging when using the native FUSE client on CentOS? This was a bit of a bitch, actually. It was hard to reproduce. Eventually, the only semi-regular way to repro it was to create lots of small files from multiple servers at the same time.

    The Behavior

    It would still be mounted but hang. The only indication of things being a problem would be a console hang when trying to df or use the filesystem.

    The kern.log also shows that there’s long waits waiting for either the application running on top, or the fuse client itself.

    Note: I was actually able to make the NFS client hang, but we don’t want to use the NFS client due to losing the graceful failover features etc. Performance has been reported to be an issue with the fuse client, but I was able to tune this pretty well. I don’t want to go into that here.

    The Solution

    The base CentOS 7 kernel is pretty old. I mean, it’s still updated, but it’s still 3.10.0-327.10.1 as of June 2016. Instead of compiling our own kernel, I grabbed the RPMs from Elrepo (http://elrepo.org/tiki/tiki-index.php).

    Installed this, after many days of troubleshooting, testing, and tuning, this solved the issue. No more lock-ups or fop STAT / LOCK issues.

    I didn’t want to go main-line 4.6 kernel, so I opted for the 4.5.4-1 stable kernel. You should also be aware these are VMs running under VMware.

    Here’s a quick hacked together Ansible playbook to handle the upgrade and verification for you via yum.


    • Glusterfs Server – 3.7.11-1 (April 18 2016)
    • Glusterfs Fuse Client – 3.7.11-1
    • Old kernel 3.1.0-327.10.1.el7
    • New kernel 4.5.4-1.el7.elrepo

    – hosts: all
    sudo: true
    kernel_version: “4.5.4-1.el7.elrepo”


    • name: Read Kernel Version

    command: ‘uname -r’
    register: result

    • name: Has kernel upgrade already completed

    fail: msg=”Kernel version already {{ kernel_version }}”
    when: “‘{{ kernel_version }}’ in result.stdout”

    • name: Uninstall Existing Kernel Packages

    yum: pkg={{item}} state=absent disable_gpg_check=yes

    • kernel-headers
    • kernel-tools
    • kernel-tools-libs
    • name: Install Existing Kernel Packages

    yum: pkg={{item}} update_cache=yes state=installed disable_gpg_check=yes

    • kernel-ml-{{ kernel_version }}
    • kernel-ml-devel-{{ kernel_version }}
    • kernel-ml-headers-{{ kernel_version }}
    • kernel-ml-tools-{{ kernel_version }}
    • kernel-ml-tools-libs-{{ kernel_version }}
    • kernel-ml-tools-libs-devel-{{ kernel_version }}
    • name: Set Boot Time Option for Kernel

    command: “grub2-set-default 0”

    • name: Change grub2 configs

    command: “grub2-mkconfig -o /boot/grub2/grub.cfg”

    • name: Read Kernel Version

    command: ‘uname -r’
    register: result
    ignore_errors: True

    • name: Print Kernel Version

    debug: var=result.stdout_lines

    • name: Restart server

    sudo: true
    command: “{{ item }}”
    async: 0
    poll: 0

    • “shutdown -r +1”

    ignore_errors: true

    • name: Wait for server to reboot

    wait_for: >
    host={{ inventory_hostname }}
    timeout={{ 5 * 60 }}
    delegate_to: localhost

    • name: Read Kernel Version

    command: ‘uname -r’
    register: result
    ignore_errors: True

    • name: Print Kernel Version

    debug: var=result.stdout_lines

    • name: Did kernel upgrade fail

    fail: msg=”Kernel does not match {{ kernel_version }} actual kernel is result.stdout”
    when: “‘{{ kernel_version }}’ not in result.stdout”

  • duncanbowring 08:59 on May 10, 2016 Permalink | Reply
    Tags: firewalld   

    Add persistant rich firewalld rules (CentOS7) 

    This assumes CentOS 7 firewalld:

    firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ source address=”″ destination address=”″ port port=”2000″ protocol=”tcp” accept’
    firewall-cmd —reload

  • duncanbowring 16:01 on April 29, 2016 Permalink | Reply
    Tags: Dovecot, iRedmail, , Mailing, Postfix, ,   

    SIMPLFIED: Your own mail server (Postfix, Dovecot, SpamAssasin, ClamAV, Roundcube, SSL, Admin Panel) 

    The Stack

    I was about to do the usual dance of setting up a mail system comprising of:

    • Postfix (outbound)
    • Dovecot (inbound – pop and imap)
    • MySQL (MariaDB for mailboxes etc.)
    • SpamAssassin (anti-spam)
    • ClamAV (anti-virus)
    • Roundcube (webmail)
    • Nginx (for the webmail)
    • SSL keys for everything
    • DNS – DKIM/SPF/etc
    • Fail2ban
    • IPTables firewall additions

    It’s pretty intense setting all this up, so it’s recommended that you build using a configuration management tool like Ansible.

    I took a look to see if there was a more modern way to do all this..

    Enter iRedmail

    iRedmail is an open source package that installs/configures all of the above and an administration panel iRedAdmin! The panel allows for user and domain administration but the pro version is what handles aliases and so on. It’s very expensive an unnecessary. You can make the same changes via the DB with one liners. If you have a server like Jenkins, you could easily push-button automate this. If/when I do, I’ll update this post.

    You still need to add all the DNS entries (SPF, DKIM, etc) and sort out your SSL certs, plus integration with a smarthost (like Sendgrid).

    Go here: http://www.iredmail.org/ and follow the instructions for your OS. It’s really *that* easy. It will even install the database server for you. 🙂

    Add SendGrid (or another smart host / relay service) support

    Postfix: /etc/postfix/main.cf

    However, the local AV instance expects an unencrypted connection, so you need to account for this. Remember to restart the service after the config change with (debian/ubuntu) /etc/init.d/postfix restart.

    # Sendgrid smarthost
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = static:USERNAME:PASSWORD
    smtp_sasl_security_options = noanonymous
    smtp_tls_security_level = encrypt
    header_size_limit = 4096000
    relayhost = [smtp.sendgrid.net]:587

    Postfix: /etc/postfix/master.cf

    Amavisd integration.
    smtp-amavis unix – – – – 2 smtp
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
    -o max_use=20
    -o smtp_tls_security_level=none inet n – – – – smtpd
    -o content_filter=
    -o mynetworks_style=host
    -o mynetworks=
    -o local_recipient_maps=
    -o relay_recipient_maps=

    < snip >

  • duncanbowring 16:09 on April 22, 2016 Permalink | Reply
    Tags: ASCII, Diagrams, DITAA, Dokuwiki, Visio, Wiki   

    ASCII Flowcharts 

    You can generate this:

    Screen Shot 2016-04-22 at 11.59.58 PM

    From this:

    Screen Shot 2016-04-22 at 11.59.18 PM.png

    But create it visually, by using this (http://asciiflow.com):

    Screen Shot 2016-04-23 at 12.03.03 AM.png

    The Java based tool that generates the bitmap image from the ASCII graph is called DITAA (DIagrams Through Ascii Art) (http://ditaa.sourceforge.net/).

    I personally use the ditaa plugin for Dokuwiki this to embed flowchart diagrams into my Dokuwiki hosted documentation. Dokuwiki is a decently powerful wiki software similar to Mediawiki, etc. One major difference is that it uses flat files instead of an RDBMS. You can use either the flat file standard setup or the Git Backed plugin to have it as part of the SCM. Makes for much easier management and automatic documentation generation!

    Screen Shot 2016-04-23 at 12.07.01 AM.png


  • duncanbowring 18:52 on April 21, 2016 Permalink | Reply
    Tags: , gpg, yum   

    Disable GPG Key Check Yum CentOS 

    From yum -h:

    --nogpgcheck          disable gpg signature checking
  • duncanbowring 17:10 on April 21, 2016 Permalink | Reply
    Tags: Database, PGSQL, Postgres, SQL   

    PostgreSQL Tuner 

    Came across this super handy ‘rule of thumb’ quick PGSQL performance tuner..



  • duncanbowring 17:38 on April 12, 2016 Permalink | Reply
    Tags: , audit compliance, ci, jenkins, LDAP   

    Jenkins – Matrix access control, Active Directory, and Audit Compliance Logging 

    For Jenkins 1.x (tested with 1.656)

    Jenkins and plugins provide a pretty good way to have granular access control to the system and individual projects.

    This setup will allow you to:

    • Log in via an Active Directory user (individual or member of an AD group)
    • Granular access and visibility control to projects, Jenkins system, and more
    • ISO27k/ITHC compliant audit logging to syslog server
      • A copy of every change made and of the system configuration will be logged with the job config history plugin

    You can download Jenkins from here: https://jenkins.io/

    I recommend adding the Yum/Apt repository entries to the OS, this will help with keeping Jenkins updated.

    Install the following plugins:

    You can install them via the UI via the Manage Jenkins -> Manage Plugins option, or copy the downloaded hpi files into the Jenkins plugins directory and restart the service.


    Active Directory

    Manage Jenkins -> Configure Global Security -> Access Control -> Security Realm -> Active Directory -> Domain Name

    Configure the base domain name. For example – directlyops.com. Hitting Test should result in a Success message. If it doesn’t, you may have to configure more settings under Advanced.

    Manage Jenkins -> Configure Global Security -> Access Control -> Authorization -> Project-based Matrix Authorization Strategy

    Under user/group to add, enter the name of the AD user or group you want to control access for. The domain prefix is not required.

    From here, you can also assign permissions to specific items such as the ability to Run, and View a job. Anyone with the Administer permission will have the ability to see all jobs and do anything in the environment. It’s recommended you have a user in here with this permission that is tested before you remove the anonymous access rights.

    That’s it! You should be able to log into Jenkins with the domain username and password (no prefix or SPN form required).

    Within a Jenkins job, you can now enable Project-based security and then add the AD group or usernames to limit visibility/control to specific groups or users.

    Audit Trail

    If you’re in an environment where you need or want to have a reliable audit trail for compliance reasons, then you’re likely using Redhat or Centos (selinux!). The audit trail plugin can provide a similar audit trail output to a file or syslog server.

    Manage Jenkins -> Configure System -> Audit Trail

    Here is where to add logger. If you want to test it, add a Syslog server logger and write to localhost port 514. The audit trail will likely show up in /var/log/messages. If you’re using rsyslog server, adding in a config to /etc/rsyslog.d/jenkins_audit.conf will provide advanced capabilities to separate out the log from the main log.

    I prefer using the syslog server output, and then chaining syslog out to Logstash for ElasticSearch logging.

    Job Config History

    This plugin adds exact tracking of what the config changes are. It will maintain version control for system config and job configs. The audit trail is good to tell you what was modified and who modified it, this will keep track of what the changes were.

    System configuration tracking is not enabled by default, and you can only restore previous Job configuration, not system (however you can see system changes).


  • duncanbowring 22:30 on April 9, 2016 Permalink | Reply
    Tags: galera, , mariadb, MySQL, ubuntu   

    How to restore debian-sys-maint MySQL Maria user 

    I had an issue where I wiped this user out accidentally in a galera cluster on Ubuntu 14.04. This is how to add ‘debian-sys-maint’@’localhost’ user back into your MySQL server and then enjoy all the ‘benefits’ once more..

    You can then verify the user with SELECT * from mysql.user\G

    Make sure that the password in /etc/mysql/debian.conf matches the password below as THE_PASSWORD.

    use mysql;
    INSERT INTO `user` (
    VALUES (
  • duncanbowring 12:23 on April 6, 2016 Permalink | Reply
    Tags: Laptop, , Lubuntu, LXDE, LXLE, , Sony Vaio, VGN-TZ170N   

    LXLE on 2007 Sony Vaio VGN-TZ170N 

    The laptop and the OS

    I have an old beat up but super nice back-in-the-day Sony Vaio VGN-TZ170N that has been sitting in a drawer for a few years. This thing was pretty much a flagship machine back when it was launched in 2007, it carried an MSRP of $2,399.99.

    I figure that since I never get rid of anything and living in San Francisco means that space (for normal people) is a luxury that we don’t have (let’s say family pressure is the driver), it’s time to sell this (at least try to) to someone who will appreciate it more than me.

    Here is the eBay link: http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=182083511251

    Here’s a quick rundown of the machine:

    • CPU: Intel Core 2 Duo U7500 (1.06GHz) x64
    • Screen: 11.1″ WXGA (1366×768) XBRITE-HiColor (wat)
    • RAM: 2GB DDR2
    • Storage: 100 GB PATA 4200 RPM (1.8″ HDD, I believe!)
    • Optical: Built in DVD-RW drive!
    • GFX: Intel GMA950
    • Chipset: Mobile Intel 945GMS Express.
    • VRAM: Shared
    • Comms: Modem (v92), gigabit LAN, wireless LAN (Intel PRO 4965AGN), bluetooth, i400 firewire, 2 USB, 1 VGA, 1 docking conector, 1 headphone, 1 microphone
    • Expansion: 1x ExpressCard /34 slot
    • Built in webcam, and SD (plus Sony memory stick) card reader, fingerprint sensor.
    • Weight: 2.7 lbs
    • Dimensions: 10.9″ x 7.8″ x 0.8-1.17″ (this thing is SMALL – unbelievable how much is packed into it, even today never mind 2007).
    • Windows Vista Business COA on the underside.

    Looks like you can even pick up a replacement (or additional 6 cell battery for $22 now.
    While the RAM slot is accessible from the underside, it doesn’t look possible to upgrade it beyond the 2GB limit (maybe there is a 4G DDR2 SODIMM that would work? I don’t have one to try).

    The revival?

    First, I grabbed a copy of Vista Business and installed it via the internal optical drive (nice!). This took *forever*, and was over 4 CDs. Once I got into Windows after waiting about 2 days to install Windows updates, I then went on a quest to kill all the background processes that jam the CPU at 100%.

    End result? Machine back in the drawer for another 2 years.

    Lightweight Linux

    I knew that there were various distributions of Linux that are aimed at low spec, or low performance systems. Since I’ve always been an Ubuntu guy, I decided to start there. The aim of this post isn’t to review the top options of lightweight Linux – I simply don’t have enough time. I can say that at some point I must have installed Kubuntu 14.04, I powered it up, there it was – works great. Uses a bit too much RAM for my liking (about half gone at boot), I started looking into other options to prep this for eBay.

    The machine’s hard drive is pretty slow, and I’m also burning these to CD, so I can’t really be assed spending a long time trying them all out. Here’s a non-scientific conclusion of what I considered over the course of an hour or two:


    I did look at Lubuntu as a more lightweight replacement for Kubuntu, and that’s what started this whole thing..

    Super lightweight and looks ideal for purpose. However, the choice of applications preinstalled are typically considered lighter versions. For example, no LibreOffice.

    Generally, the consensus seems to be that it feels a bit too lightweight or barebones. This doesn’t freak me out, as I’d install what I want to, but for eBay purposes, I moved on.



    Elementary OS

    Very Mac OSX like. However, I’ve read that it’s heavy on RAM. When you only have 2GB of RAM to play with and an old 4200 RPM drive, I think disk swapping is something that needs to be avoided..




    Looks like a nice out of the box desktop, but the website put me off. Just sayin..



    LXLE (Linux Extra Life Extension)

    This was actually my first choice, after looking at Lubuntu!

    It’s basically touting itself as Lubuntu but with everything you need configured and customized out of the box to be a nice workstation/desktop. I downloaded this one, 64bit (I know, only 2G ram..)

    It’s basically Lubuntu but with the best/useful up-to-date applications, beautiful aesthetics, and a polished user interface. It’s supposed to be a drop-in replacement for Windows, as a desktop.

    It did annoy me that the base image was 1.47G and not within CD-R limits. However, old PC might mean old Internet. I just would have rather had a 2 CD option versus 1 DVD.



    Ubuntu MATE

    Lots of good reviews and buzz around this. I had already settled on LXLE and cut a disc, I didn’t fancy a reinstall. I actually really like the look and sound of this OS.




    Download & Preparation

    First, I had to figure out a way to burn the ISO to disc. Let’s use the Sony and the Kubuntu installation.

    Since I pre-downloaded it on my Macbook Air, I uploaded it to the NAS and grabbed it from there. I have to say it was much slower downloading it from the NAS than it was uploading it (and my Air doesn’t have ac wireless).


    Downloading LXLE ISO via Firefox from my Synology Diskstation web interface

    Approximately a third of the way done, the system looks OK. Interestingly, CPU software interrupts seems pretty high.

    Looking further into this, it looks like it’s the timer (IRQ 0), there’s not much I can do about that. I guess this is just related to using an old machine, and not really worth tuning.

    I do note that the system fan has kicked in, Firefox is taxing the machine. No real slowdowns noticed, though.


    Eventually, a cup of tea later, it’s time to write the ISO to disc. I’ve not really had much of a requirement for optical discs or drives for quite a few years now, so I’ve still had the same pack of DVD-Rs for easily over 5 years. Interestingly, they all seem to have some weirdness to them now. I’m not sure if you can see this, but here’s a photo:


    Over 5 years old, still on the original spindle. They all look like this.

    I’m not holding out much hope for a 9 year old machine being able to burn a 5+ year old disc, but it’s worth a shot.


    Kubuntu: Burning LXLE on 9 year old laptop with 5+ year old media

    Looks like it worked fine. Verified OK, and disc verification in LXLE menu was OK too. Man, I don’t even want to sell this. 🙂


    Took about 5 minutes to load past the loading screen. Be free, Be open! .. Wifi connected fine.


    • 20 minutes to get to “Installation is complete” message.

    We’re in business!



    Overall it’s pretty snappy. LibreOffice worked ok, I was able to do some basic things in terminal and used Seamonkey to perform a speedtest.net run (so Flash works OK too).

    Hardware (out of the box)

    • Audio: OK
    • Wifi: OK
    • Bluetooth: Looks OK in dmesg, didn’t test further
    • Optical drive: OK
    • GSM modem: Looks OK in dmesg, didn’t test further
    • LAN: looks OK in dmesg, didn’t test further
    • iee1394/firewire: Looks OK in lspci, didn’t test further.
    • Fingerprint reader: Looks OK in lsusb, didn’t test further
    • Camera: Looks OK in lsusb, no driver installed.
    • Blue FN key presses; some work OK
      • Volume up/down OK
      • Mute OK, doesn’t un-mute
      • Brightness does nothing
      • Page Up/Page down OK
      • Home/End OK
      • Didn’t test the others.
    • Right hand side of touchpad for scrolling works well.


    CPU gets high, pretty much any time you do anything with the browser. It doesn’t seem to slow down the OS really from a user experience perspective, though. Right now, I guess anti-virus updates happened, and it’s using 100% of a single core doing regular updates. Overall, a nice little compact Linux laptop.


    speedtest.net over wireless.

    Battery life test will be difficult, it’s going to take a while to finish charging. I’m not really sure if it even still holds a charge.

    Browsing generally feels OK, and modern. Youtube plays a music video smooth with no skips, although CPU is high. Works full screen too.


    Now I didn’t expect Netflix to work, and I wasn’t disappointed. Before I started streaming, just after I logged in, RAM usage spiked enough to start swapping ~100MB. Once I tried to start streaming, it threw an error saying HTML5 support was needed. I guess Seamonkey doesn’t have support / correct support. Quick Google seems to show this as a known problem. I launched the Lubuntu Software Center, and grabbed Firefox from there. No dice, same issue.

    Battery Test

    Charging the battery took a long time; It’s 88% now and wants 27 minutes to fill. It was 0% (and off for years) when I started this. I switched out for a 16V 4a adapter I have from the 16V 2.2a and it only dropped to 25 minute charge time from 27 – I guess it just takes a while to charge. From 89% to empty, it’s giving an estimate of 3h 51m remaining. It looks like this thing still holds a charge!

    Usage Log

    • Started on battery at 17:54
    • Had a game of DreamChess .. still 89%
    • Game of CriticalMass still 89%
    • I am now editing the remainder of this blog post from the laptop itself via Seamonkey. Works well, the screen is really nice.
    • Down to 87% remaining and an estimate of 3 hours.
    • Still only using 20% cpu and 450MB RAM.
    • Have 4 desktop spaces open, with just the Seamonkey browser on one half of the screen. The keyboard is still pretty nice to type on, except for me having a missing tab key cap.
    • Pandora is playing in another tab now, through the speakers at 50%. CPU 16.3%, RAM 553MB (27%) – pretty impressive memory footprint, really. 86% battery.
    • Went back up the blog post and edited the section adding in the blue FN key info. Down to 84%. Pandora must be dragging the battery down a bit now.
    • Opened the software center to see what games I can download..
    • Installed:
      • Freeciv
      • Freecol
      • Descent 1 Rebirth
      • Freedoom
      • Freedroid
      • Freedroid RPG
    • Even while installing packages, Pandora didn’t skip, and I was still able to type and edit this post.
    • Pandora wanted me to sign in, so I launched the built-in Guayadeque Music Player to stream some radio instead.
    • 78% after the software all installed.
    • Freedoom: silky smooth
    • Freedroid RPG – what is this game? I love it.
    • FreeCol ground the machine to a halt. I guess Java is a no-no. Rebooting, going to try again. 75% battery when I get back into desktop.
    • FreeCol starts but when I try to click past the introduction video, it sorta just hangs. I gave it a good 60 seconds to sort itself out before I got impatient and rebooted again.
    • It’s now 18:36 and I’m back on the Macbook to edit the blog.
    • FreeCiv.. works great, still 73%
    • Descent 1 doesn’t start
    • Heading back to the software store to find some more intensive games. Installing quite a lot actually, 3G of stuff downloaded, 5G installed. I killed the radio at the start of installation too.
    • After installing and playing a bunch of games.. generally what you could say “heavy use”, at 20:20, there’s 25% battery (estimate 1h 4m remaining).

    This slideshow requires JavaScript.

    Battery Results

    • 89% to 25% battery – 2h 25m of heavy use.
    • Charge estimate of 25% to full – 3h 18m
    • Not bad at all for a laptop nearly a decade old.

    Concluding Stats

    • Boot time: 1m 20s (usable as soon as desktop appears with no slowdown)
    • Shutdown time:
    • Wifi performance: 23Mb down/50Mb up
    • Usable for: basic web browsing, remote administration, Linux development, open source gaming, portability, those times where you need old port connectivity and optical drive in a nice tiny package – almost impossible to find now…

    …and we’ll call it a day.



  • duncanbowring 01:21 on December 4, 2015 Permalink | Reply
    Tags: 98se, Gaming, oldskool, , virtualbox, win98   

    Windows 98SE on VirtualBox (with video and audio drivers) 

    Screen Shot 2015-12-04 at 1.00.52 AM

    Why do this?

    If you feel nostalgic for a bit of Windows 9x action, or you just want to play some old games that are between DOS and Windows XP, you can either build a retro PC gaming rig, or you can test the water with VirtualBox.

    Once it’s all done, you too can see how pointless it all is. 🙂

    What you will need:

    • Windows 98SE ISO (unfortunately, I can’t help you here)
    • SCITech Display Doctor (this will be the video driver) – https://docs.google.com/file/d/0BycgkMZbeQOzWXE5NUhnWGRycVE/edit?pli=1
    • VirtualBox (https://www.virtualbox.org/wiki/Downloads)
    • Optional downloads are available and listed in each section below.

    Create the VM and Install Windows 98 SE

    1. Create new VM on Virtualbox Screen Shot 2015-12-03 at 10.50.03 PM
      • Type: Microsoft Windows
      • Version: Windows 98
      • RAM: 64MB
      • Create new fixed size HDD – 2GB (VDI is fine)
    2. Install Windows 98SE
      1. Boot with your 98SE ISO mounted (you’ll have to find this yourself)
      2. Boot with option 2 – Start computer with CD-ROM support Screen Shot 2015-12-03 at 10.53.04 PM
      3. Run fdisk and accept all the defaults to create a 2GB partition on your virtual drive.
      4. Restart the virtual machine
      5. Boot with option 2 – Start computer with CD-ROM support
      6. Format the virtual drive using format on the Windows CD
        • D:\win98\format c:
      7. Run: D:\setup.exe /ie /im /is /nr
        • /ie Disables create a boot disk (causes crashing on VBox and 98SE installer)
        • /im Disables checking conventional RAM
        • /is Disables scandisk
        • /iv Don’t disable billboards
        • /nr Disable registry check
      8. Run through the Windows installer with all the defaults Screen Shot 2015-12-03 at 11.01.46 PM
      9. After reboot – Boot from Hard Disk
      10. Enter your name and the CD key for Win98SE (98 key works too btw); install will continue.
      11. If everything went well, you should see Windows 98 desktop and hear some tragic music. 🙂

    Install Video Driver

    1. Shutdown Windows (and the VM)
    2. Edit Settings of the VM -> Storage -> Add another device to the IDE controller (click the CD with the green plus) and mount the scitech-display-doctor-7.iso file you downloaded earlier. Screen Shot 2015-12-03 at 11.13.20 PM
    3. You should see a CD drive with Sdd7 – double click that then run the scitech-display-doctor-win-7.0 installer – Express installation is fine. Screen Shot 2015-12-03 at 11.14.52 PM
      • You will eventually need to register the software. Unfortunately, it’s not sold anymore, but it is trivial to find a serial number for this via your favorite search engine.
    4. OS will restart, when it returns, SciTech Display Doctor will load. Either register it or start the 21 day trial.
    5. On the HOME page, underneath Current Configuration, there is a section called Active Features. Click ‘Disabled’ next to SciTech Display Driver then select SciTech Nucleus Driver and apply. Screen Shot 2015-12-03 at 11.19.00 PM
    6. OS will reboot again (remember how annoying this used to be?)
    7. SciTech reloads and you’ll see that VESA VBE 2.0 Oracle VM VirtualBox VBE Adapter is now selected. Screen Shot 2015-12-03 at 11.25.29 PM
    8. Minimize the window, right click Desktop then Properties then Settings
      • Here you should see Default Monitor on SciTech Display Doctor 7.0
    9. Change Colors to 16bit, apply, it’ll reboot again!
      • I’ve had issues trying to change resolution at the same time.
      • I’ve also had issues when the restart didn’t work – if so, restart the VM yourself – no need to go into safe mode, it should boot the second time OK.
    10. Right click Desktop -> Properties -> Settings; now you can select 1024×768 no problem.
    11. Hello accelerated Windows desktop!

    Configure for (broken and basic) Internet access (NAT)

    This will allow you to access the Internet, albeit in a basic and broken way.

    1. Start -> Settings -> Control Panel -> Internet Options -> Connections -> Setup
      1. I want to set up my Internet connection manually … or local area network (LAN).
      2. I connect through a local area network (LAN).
      3. Accept everything except for setting up a mail account.
      4. Internet Explorer 5 will load. I recommend that you download Opera 9.64 (Opera 10 and above doesn’t support Windows 9x) – http://www.oldversion.com/windows/opera-9-64
      5. Firefox 2 also works, but I found it was about as useful as IE5.
      6. Windows Update is long dead.

    Install DirectX8.1b (optional step)

    1. If you installed Opera 9.6 earlier, this is compatible enough to grab the file directly from the web via http://www.falconfly.de/directx.htm
    2. You will also need WinZip – grab this from http://www.bestweb.net/assistance/win95/winzip/
    3. Extract and install (via dxsetup.exe) the DirectX8.1b redistributable.
    4. Windows will reboot and you will now have DirectX 8.1 installed – you can verify this by running C:\windows\system\dxdiag.exeScreen Shot 2015-12-04 at 12.19.34 AM

    Install AC97 soundcard (optional step)

    The default VM setting is SoundBlaster 16 compatible. You can use the Windows Midi Synth, but I’ve seen some issues with games. In turn, we can use 9x drivers for AC97.

    1. If you installed opera 9.6, head over to http://www.realtek.com.tw -> Downloads -> AC’97 Audio Codecs (Software) -> Windows 95 for Driver only.
    2. Install file then instead of rebooting Windows, choose reboot later then shut down the VM.
    3. Head into Virtualbox VM settings -> Audiot and change the Audio Controller from Soundblaster 16 to ICH AC97
    4. Boot the VM up, it’ll detect the AC’97 audio – install the driver then reboot againScreen Shot 2015-12-04 at 12.28.45 AM
    5. Should have audio and wavetable MIDI when it returns.
    6. You can test this by running C:\windows\system\dxdiag.exe again.

    Screen Shot 2015-12-04 at 12.45.49 AM

    Testing a Game

    C&C Gold 95 doesn’t seem to work – will investigate further without dx8.1 since it comes with dx3.


    Civilization 2 Ultimate Collection – works perfect (dx5 game)

    • saxbophone 09:57 on April 19, 2017 Permalink | Reply

      Thanks for this, I’m sure I’ll find it very helpful when I have a crack at installing win98 in a VM soon. I assume this will work just fine with a real installation CD too? From what I have gathered, VirtualBox supports booting directly from a real CD as well..?

    • saxbophone 15:16 on April 20, 2017 Permalink | Reply

      Thanks, this guide was very helpful, all working. Now to begin retro computing adventures! 😀

    • James 16:05 on April 30, 2017 Permalink | Reply

      everytime I try installing SciTech after selecting the Scitech driver and restart I get a Windows Protection Error. You need to restart your computer. and no matter what I do I can’t get into windows except safe mode, but when I go into that I can’t do anything with SciTech. It just says I need to restart. I’ve tried this several times on fresh installs and it always comes back with this error. I have also seen BSOD after installing it.
      Any thoughts?


    • Zack 13:13 on May 1, 2017 Permalink | Reply

      After enabling the SciTech Display Driver, when I try to reboot it stops on a black screen with the message, “Windows protection error. You need to restart your computer.” Any ideas? I’ve tried restarting the machine several times and can’t get past that error. It appears right after the Windows 98 boot screen.

      • Zack 13:26 on May 1, 2017 Permalink | Reply

        Well, I figured it out. I disable PAE and VT-x, which fixed the problem

    • max 12:08 on May 19, 2017 Permalink | Reply

      Does this works with Win95? I’m trying everything to make it work on it and everytime i finish with a bsod and a whole crash of virtualbox while it works fine on a win98…

    • Brandon 15:18 on September 17, 2017 Permalink | Reply

      Hello, I am having trouble with an issue after installing sdd. After I attempt to activate the nucleus driver, windows boots into a DOS style screen that simply says “Windows protection error. You must restart your computer.” I was hoping that you may know why this is happening.

    • AnonymousShithole 08:47 on November 13, 2017 Permalink | Reply

      Doesnt work on Virtualbox ver. 5.1.22 r11512, Windows Protection Error — Restart your computer, happened after i enabled the Nautilus drivers and restarted, safe mode works, so its probably the driver.

    • Yep 11:09 on December 11, 2017 Permalink | Reply

      Thank you! it works!

    • Jim 15:51 on January 11, 2018 Permalink | Reply

      Just wanted to say thanks for this, you were a huge help. Been wanting to set up a virtual machine to play a bunch of old 90’s PC games for a while now but I just needed a tutorial like this to get it right and now I’m running them like a dream.

    • Sean Gibbons 22:04 on August 4, 2018 Permalink | Reply

      Thank you for the wonderful guide.
      The only section I can’t get to work is for the AC97 Soundcard. The Windows 95 Driver file from Realtek gives a “For 95 Only” Error. I tried installing the Windows 98 version, but doesn’t seem to work.
      I’ll stick to the SoundBlaster for now, but my system now works aside from that.

    • Horst 16:09 on August 26, 2018 Permalink | Reply

      Hello nice and very useful article! I tried it and everything worked so far except the audio driver. When I try to install the realtek Driver “Windows 95 for Driver only” as you wrote in the article, the installing assistent tells me that this version is only compatible with Win 95.. I tried the other realtek driver for Win 98 but it did not work. Do you know a solution for that or how to make the Win 95 Driver work?

    • Fuck off 13:14 on November 3, 2018 Permalink | Reply

      Hey idiot, thanks for wasting my valuable time with a set of instructions that doesn’t work!!!!

      All I get when trying to install Windows 98 are Rundll32 illegal operation errors!!!!!

      I am so sick and tired of dipshits like you clogging up the internet with misinformation that makes it harder to actually find valuable information. Next time, just don’t! Leave it to the professionals that actually know what they’re doing to post things like this.

      • duncanbowring 20:55 on January 31, 2019 Permalink | Reply

        It was posted 3 years ago. I haven’t done it since.. you can see the screenshots. If you have a specific problem, post for other people how to fix it.

    • Marshall Hoff 11:30 on November 7, 2018 Permalink | Reply

      Winworldpc is a great place to download windows iso’s and other old software: https://winworldpc.com/product/windows-98/98-second-edition

      • duncanbowring 20:54 on January 31, 2019 Permalink | Reply

        I recommend using a sandbox hitting the site.. my web filter says:

        Host: winworldpc.com

        URL: http://winworldpc.com/

        Reason: Compromised – Web pages that have been compromised by someone other than the site owner, which appear to be legitimate, but house malicious code.

    • Adam 17:16 on December 27, 2018 Permalink | Reply

      i gotta problem when im download the opera or other programs at oldversion.com , it showed as .php please i need some help.

      • duncanbowring 03:48 on December 28, 2018 Permalink | Reply

        I haven’t done this for a very long time because I use an old p4 gaming laptop for ~XP.

        Pi3 dosbox works well up and beyond the early to mid 90s

      • Sad old git 17:17 on January 4, 2019 Permalink | Reply

        Try downloading it with a modern pc then put it into an iso (or burn it to a physical dvd) and install in the VM that way.

      • Sad old git 05:10 on January 5, 2019 Permalink | Reply

        Actually just tried the d/l myself and although IE calls it a PHP file it’s actually an exemplary so just rename it to .exe and it will be ok.

        My problem is that any download I do with Opera is reported a corrupted when I try to open it!

    • Sad old git 16:56 on January 4, 2019 Permalink | Reply

      Had a fun afternoon installing 98, got the video driver working, seem to have lost ACPI in the process but no matter. Followed with a happy evening reminding myself of the joy of using 98 after 3.11 and 95. Got Borland Pascal for Windows working, made it say “Hello World”.

      Finally remembered how nice it was when XP came along and then went to bed wondering why I’d bothered :-}

    • Sad old git 17:09 on January 4, 2019 Permalink | Reply

      Oh, and regarding updates,

      This is a posted iso of an official MS security update rollout containing everything up to 2004:


      And this is an unofficial update package:


      • Sad old git 17:11 on January 4, 2019 Permalink | Reply

        Should mention that I have not yet tried either of those update packages. Use at your own risk (but hey, it a VM so worst case gonbak a snapshot).

        • Sad old git 07:40 on January 6, 2019 Permalink

          Have now tried both these update packages. The “Unofficial” one is a bit complicated and full of scary warnings. I did install let it install the main “core” updates but wimped out on all its other options. The less nervous (or more foolhardy) may do better. I may try further options later and see what happens.

          The official MS update pack does indeed seem to be what it says it is and quickly and easily (well, after a typical number of reboots at least) install a bunch of security updates, installed IE 6 and Direct x 9.0b and Windows Media Player 9.

          So there you are, your choice which if either you try but the official one seems good.

Compose new post
Next post/Next comment
Previous post/Previous comment
Show/Hide comments
Go to top
Go to login
Show/Hide help
shift + esc
%d bloggers like this: