Chrome Installer Error 0xc0000005 on Windows XP

I don’t tend to write much about Windows because it’s usefulness to me is limited to functioning as a Steam boot loader, and even that usefulness is somewhat diminished with Steam and an increasing number of games being available for Linux. Unfortunately, I recently had to do some testing that needed to be carried out using a Windows application, and I noticed that Chrome reported the above error when attempting to update itself.

The Chrome installer crash with the opaque 0xc0000005 error code on XP64 (Chrome is still supported on XP, even though MS is treating XP as EOL). Googling the problem suggested disabling the sandbox might help, but this isn’t really applicable since the problem occurs with the installer, not once Chrome is running (it runs just fine, it’s updating it that triggers the error).

A quick look at the crash dump revealed that one of the libraries dynamically linked at crash time was the MS Application Verifier, used for debugging programs and sending them fake information on what version of Windows they are running on. Uninstalling the MS Application Verifier cured the problem.

Steam on EL6 (RHEL6 / Scientific Linux 6 / CentOS 6)

The fact that Steam have decided to only officially support .deb based distributions, and only relatively recent ones at that has been a pet peeve of mine for quite some time. While there are ways around the .deb only official package availability (e.g. alien), the library requirements are somewhat more difficult to reconcile. I have finally managed to get Steam working on EL6 and I figure I’m probably not the only one interested in this, so I thought I’d document it.

Different packages required to do this have been sourced from different locations (e.g. glibc from fuduntu project, steam src.rpm from steam.48.io (not really a source rpm, it just packages the steam binary in a rpm), most of the rest from more recent Fedoras, etc.). I have rebuilt them all and made them available in one place.

You won’t need all of them, but you will need at least the following:

glibc-2.15-60.el6.i686.rpm
glibc-2.15-60.el6.x86_64.rpm
glibc-common-2.15-60.el6.x86_64.rpm
glibc-devel-2.15-60.el6.x86_64.rpm
glibc-headers-2.15-60.el6.x86_64.rpm
libtxc_dxtn-1.0.0-2.1.i686.rpm
SDL2-2.0.3-2.el6.i686.rpm
steam-1.0.0.39-2.i686.rpm
xz-5.0.5-1.el6.x86_64.rpm
xz-compat-libs-5.0.5-1.el6.x86_64.rpm
xz-libs-5.0.5-1.el6.x86_64.rpm
xz-lzma-compat-5.0.5-1.el6.x86_64.rpm

First install some the dependencies from the standard distribution packages:

yum install gtk2-engines.i686 \
            openal-soft.i686 \
            alsa-plugins-pulseaudio.i686 \
            gtk+.i686

The install the updated packages:

rpm -Uvh glibc-2.15-60.el6.i686.rpm \
         glibc-2.15-60.el6.x86_64.rpm \
         glibc-common-2.15-60.el6.x86_64.rpm \
         glibc-devel-2.15-60.el6.x86_64.rpm \
         glibc-headers-2.15-60.el6.x86_64.rpm \
         libtxc_dxtn-1.0.0-2.1.i686.rpm \
         SDL2-2.0.3-2.el6.i686.rpm \
         steam-1.0.0.39-2.i686.rpm \
         xz-5.0.5-1.el6.x86_64.rpm \
         xz-compat-libs-5.0.5-1.el6.x86_64.rpm \
         xz-libs-5.0.5-1.el6.x86_64.rpm \
         xz-lzma-compat-5.0.5-1.el6.x86_64.rpm

If you have pyliblzma from EPEL installed (required by, e.g. mock), updated xz-lzma-compat package will trigger a python bug that causes a segfault. This will incapacitate some python programs (yum being an important one). If you encounter this issue and you must have pyliblzma for other dependencies, reinstall the original xz package versions after you run steam for the first time. Updated xz only seems to be required when the steam executable downloads updates for itself.

Finally, run steam, log in, and let it update itself.

One of the popular games that is available on Linux is Left 4 Dead 2. I found that on ATI and Nvidia cards it doesn’t work properly in full screen mode (blank screen, impossible to Alt-Tab out), but it does work on Intel GPUs. It works on all GPU types in windowed mode. Unfortunately, it runs in full screen mode by default, so if you run it without adjusting its startup parameters you may have to ssh into the machine and forcefully kill the hl2_linux process. To work around the problem, right click on the game in your library, and go to properties:

Click on the “SET LAUNCH OPTIONS…” button:

You will probably want to specify the default resolution as well as the windowed mode to ensure the game comes up in a sensible mode when you launch it.
Add “-windowed -w 1280 -h 720” to the options, which will tell L4D2 to start in windowed mode with 1280×720 resolution. The resolution you select should be lower than your monitor’s resolution.

If you did all that, you should be able to hit the play button and be greeted with something resembling this:

ATI cards using the open source Radeon driver (at least with the version 7.1.0 that ships with EL6) seem to exhibit some rendering corruption, specifically some textures are intermittently invisible. This leads to invisible party members, enemies, and doors, and while it is entertaining for the first few seconds it renders the game completely unplayable. I have not tested the ATI binary driver (ATI themselves recommend the open source driver on Linux for older cards and I am using a HD6450).

Nvidia cards work fine with the closed source binary driver in windowed mode, and performance with a GT630 constantly saturates 1080p resolutions with everything turned up to maximum. I have not tested with the nouveau open source driver.

With Intel GPUs using the open source driver, everything works correctly in both windowed and full screen mode, but the performance is nowhere nearly as good as with the Nvidia card. With all the settings set to maximum, the performance with the Intel HD 4000 graphics (Chromebook Pixel) is roughly the same at 1920×1200 resolution as with the Radeon HD6450, producing approximately 30fps. The only problem with playing it on the Chromebook Pixel is that the whole laptop gets too hot to touch, even with the fan going at full speed. Not only does the aluminium casing get too hot to touch, the plastic keys on the keyboard themselves get painfully hot. But that story is for another article.

QNAP TS-421 – Review, Modification and RedSleeve Linux

Requirement

With the RedSleeve Linux release rapidly approaching, I needed a new server. The current one is a DreamPlug with an SSD and although it has so far worked valiantly with perfect reliability, it doesn’t have enough space to contain all of the newly build RPM packages (over 10,000 of them, including multiple versions the upstream distribution contains), and is a little lower on CPU (1.2GHz single core) and RAM (512MB) than ideal to handle the load spike that will inevitably happen once the new release becomes available. I also wanted a self contained system that doesn’t require special handling with many cables hanging off of it (like SATA or USB external disks). I briefly considered the Tonido2 Plug, but between the slower CPU (800MHz) and the US plug, it seemed like a step backward just for the added tidyness of having an internal disk.

Specification

The requirements I had in mind needed to cover at least the following:
1) ARM CPU
2) SATA
3) At least a 1.2GHz CPU
4) At least 512MB of RAM
5) Everything should be self contained (no externally attached components)

Selection

Very quickly the choice started to focus on various NAS appliances, but most of them had relatively non-existant community support for running custom Linux based firmware. The one exception to this is QNAP NAS devices which have rather good support from the Debian community; and where there is a procedure to get one Linux distribution to run, getting another to run is usually very straightforward. After a quick look through the specifications, I settled on the QNAP TS-421, which seems to be the highest spec ARM based model:

CPU: 2GHz ARMv5 Marvell Kirkwood (same as in the DreamPlug but 66% higher clock speed)
RAM: 1GB (twice as much as DreamPlug)
SATA: 4x 3.5″ SATA disk trays, based on the excellent Marvell 88SX7042 PCIe SATA controller
eSATA: 2x
Ethernet: 2x Gigabit (same as DreamPlug)
USB: 2x 2.0, 2x 3.0

Disks

At the time when I ordered the QNAP TS-421, it was listed as supporting 4TB drives – the largest air filled that were available at the time. I ordered 4x 4TB HGST drives because they are known to be more reliable than other brands. In the 10 days since then Toshiba announced 5TB drives, but these are not yet commercially available. I briefly considered the 6TB Helium filled Hitachi drives, but these are based on a new technology that has not been around for long enough for long term reliability trends to emerge – and besides, they were prohibitively expensive (£87/TB vs £29/TB for the 4TB model), and to top it all off, they are not available to buy.

Overview

Once the machine arrived, it was immediately obvious that the build quality is superb. One thing, however, bothered me immediately – it uses an external power brick, which seems like a hugely inconvenient oversight on an otherwise extremely well designed machine.

In order to make playing with alternative Linux installations I needed to get serial console access. To do this you will need a 3.3V TTL serial cable, same as what is used on the Raspberry Pi. These are cheaply available from many sources. One thing I discovered the hard way after some trial and error is that you need to invert the RX and TX lines between the cable and the QNAP motherboard, i.e. RX on the cable needs to connect to TX on the motherboard, and vice versa. There is also no need to connect the VCC line (red) – leave it disconnected. My final goal was to get RedSleeve Linux running on this machine, the process for which is documented on the RedSleeve wiki so I will not go into it here.

Modifying

One thing that becomes very obvious upon opening the QNAP TS-421 is that there is ample space inside it for a PSU, which made the design decision to use an external power brick all the more ill considered. So much so that I felt I had to do something about it. It turns out the standard power brick it ships with fits just fine inside the case. Here is what it looks like fitted.

It is very securely attached using double sided foam tape. Make sure you make some kind of a gasket to fit between the PSU and the back of the case – this is in order to prevent upsetting the crefully designed airflow through the case. I used some 3mm thick expanded polyurethane which works very well for this purpose. The cable tie is there just for extra security and to tidy up the coiled up DC cable that goes back out of the case and into the motherboard’s power input port. This necessitated punching two 1 inch holes in the back of the case – one for the input power cable and one for the 12V DC output cable. I used a Q.Max 1 inch sheet metal hole punch to do this. There is an iris type grommet for the DC cable to prevent any potential damage arising from it rubbing on the metal casing.

The finished modification looks reasonably tidy and is a vast improvement on a trailing power brick.

One other thing worth mentioning is that internalizing the PSU makes no measurable difference to internal temperatures with the case closed. In fact, if anything the PSU itself runs cooler than it does on the outside due to the cooling fan inside the case. The airflow inside the case is incredibly well designed, hence the reason why it is vital you use a gasket to seal the gap between the power input port on the PSU and the back of the case. To give you the idea of just how well the airflow is designed, with the case off, the HGST drives run at about 50-55C idle and 60-65C under load. With the case on they run at about 30C idle and 35C under full load (e.g. ZFS scrub or SMART self tests).