Friday, June 26, 2015

Configuring Apt to use a HTTP proxy without proxying HTTPS

This may seem like an odd and extremely niche thing to post about, but I could not find this information ANYWHERE when I was looking, so I wanted to share it.

Have you ever wanted to configure the Ubuntu/Debian Apt system to use an HTTP proxy, but NOT an HTTPS proxy? It's harder than it sounds, because Apt will automatically copy your Acquire::HTTP::Proxy setting over to the Acquire::HTTPS::Proxy setting if it's unset.

I discovered that Apt does not consider an empty string to be a setting, so you cannot override the HTTPS option with it.

However after much grief, I discovered that a string containing whitespace does get counted as a valid setting, and also, doesn't get used as an invalid proxy setting. Phew!

So to sum up, this is the configuration you want in /etc/apt.conf.c/proxy

Acquire::HTTP::Proxy "";
Acquire::HTTPS::Proxy " ";

Note the space between quote marks!

Monday, February 16, 2015

2015-02-16 Raspberry Ubuntu release

I've updated the Raspberry Ubuntu image again.
This version includes:
* automatically resize sd card at first boot
* add rpi-update and raspi-config scripts
* add videocore libraries
* updated kernel, fixed memory split
* disable linaro's autologin
* Load appropriate sound module at boot
* add wpagui for wifi configuration
* Change cpu governer to "performance"
* remove xscreensaver

As before, grab it by bittorrent from
Mirrors hosting it faster will probably appear sooner if you check the Raspberry Pi forums.

Tuesday, February 10, 2015

I've made a new version of my Ubuntu for Raspberry Pi 2:
New features:
* hostname is now "raspberry".
* fbturbo driver for X improves performance slightly.
* LXDE graphical desktop installed.
* changed persistent NIC names to have Raspbian-like behaviour.

Saturday, February 7, 2015

Ubuntu / Linaro image for Raspberry Pi 2 using ARMv7/armhf

I've rolled an Ubuntu 14.10 / Linaro 15.01 "developer" image for the Raspberry Pi 2.
Key points here are that it's compiled for ARMv7 and ARMHF, so should be faster than the Raspbian image by some amount. And it'll have more recent versions of software because that version of Ubuntu is significantly newer than Debian Wheezy!
I don't have anywhere good to host the image, so it's only available by bittorrent on my limited ADSL upstream, but once a few people are on that it'll speed up the download.
This is a pretty basic image -- it doesn't have a desktop environment installed for instance -- but it's otherwise working fine.
New version available: See latest blog post for details.
Another new version:

Friday, June 21, 2013

Installing Windows 7 - the hard way

Have you ever found yourself wanting to reinstall the factory OEM Windows image back onto a fresh hard drive, but the "recovery media" just doesn't work and all you have to go on is some .zip or .wim files you manually copied off a hidden partition?

This post gives the commands required to partition a drive, install a WIM (Windows Image) file and make it bootable, from the command line.

This post is unlikely to be of interest to many, but it was really hard for me to find this information anywhere else.

Steps 1-5 are run on a separate machine as preparation. Steps 6-10 are run on the machine where you want to perform the install.

Step 1: Download a WinPE  ISO.
WinPE is a minimal, portable version of Windows, that just boots up enough to give you a command line. You can find various versions of this tool online if you search around.

Step 2: Download an ISO-to-bootable-USB tool
There are loads of these; the official Microsoft one is probably a good one to start with, but other worked fine for me too.

Step 3: Download imagex.exe
This is part of a Microsoft toolkit, but rather than grabbing the entire thing, you can find a copy of just imagex.exe if you search around.

Step 4: Install WinPE ISO to a USB stick

Step 5: Copy imagex.exe and your .wim file to the USB stick

Step 6: Boot the stick up and get to a cmd prompt

Step 7: Partition drive
Run these commands to partition the disk into two partitions, one of which is the reserved boot partition (100MB).

select disk 0
create partition primary size=100
select partition 1
format fs=ntfs label="System Reserved"
assign letter=S
create partition primary
select partition 2
format fs=ntfs label="Windows"
assign letter=C

Step 8: Install WIM file
This installs your chosen .wim file to the C: drive. You'll probably need to switch drives until you find the letter that applies to the USB stick, because by default you're inside the WinPE  boot drive.
imagex /apply /verify Cdrivebackup.wim 1 c:\

Note that if you have a serial of install.swm, install2.swm etc files, then you'll need a slightly different command:
imagex /apply /verify install.swm /ref install*.swm 1 c:\

Step 9: Setup bootloader
This makes the 100M partition a valid bootloader.
Note that this assumes you assigned the letter S to the 100M partition, above, and that your Windows install ended up in the standard location of c:\windows
Otherwise, change letters and paths as appropriate.

bcdboot c:\windows /s s:

Step 10: Reboot

Monday, March 4, 2013

Custom Linux image for the CubieBoard

I've received a CubieBoard (from Miniand) and I've created a custom firmware image for it.
This is aimed at embedded uses, and so is a fairly minimal server install. It's currently based on Linaro 13.01, which is based on ubuntu Server.

I've stripped it back to a minimal setup that boots up and DHCPs off the ethernet port with an ssh server running. There's a console provided on serial and via the HDMI port.
The kernel is based on the sunxi-3.4 branch, with loads of networking, wireless, and usb device support, and I'm working on the GPIO and SPI interfaces currently.
I'll also add 3D accelerated framebuffer support soon.

If you're interested, follow this forum post where I'll be discussing it and providing updates:

Note that I'm pretty sure this image should work on the Hackberry A10 and similar devices as well, with minimal effort.

Wednesday, November 21, 2012

Comparing performance of Raspberry Pi and BeagleBone

Synopsis: ARM v6 CPUs (such as the Raspberry Pi) are significantly slower than ARMv7 CPUs (such as in the BeagleBone) at the same clock speed, at least when running Debian (armhf) on them.

I know it's a rather naive benchmark, but I tried running Perl and Scala programs to find all the prime numbers under 100,000 on both the Raspberry Pi and the BeagleBone.

They're both 700 MHz ARM CPUs, but the Raspberry runs on the older v6 spec CPU.

Surprisingly, this seems to make a huge difference to performance.

Perl primes to 100k:

  • My desktop (3GHz i7) - 3.3 seconds
  • BeagleBone (720 MHz ARMv7)- 68 seconds
  • Raspberry Pi (700 MHz ARMv6) - 125 seconds

I thought I'd try it quickly in Scala, but it seems the JVM isn't very well optimised on ARM yet. I cancelled the tests after five minutes, and re-ran them only calculating up to 10k.

Scala primes to 10k:

  • Desktop - 0.33 s
  • Beagle - 19 s (zero) / 34 s (jamvm)
  • Raspberry - 58 s (jamvm) / 79 s (zero)

It's curious to note that the best JVM varies between the architectures; Zero was a lot faster than JamVM on the Beagle, but it was a lot slower on Raspberry Pi. (At least for this naive test)
Zero is the default on both, at least on Debian.