Debian rootfs
=============

Step 0 - QEMU image for creating rootfs
=======================================

* I used to create images straight on the device, but i dont do it anymore.

* Easiest way to create tarbal and NAND images is in qemu. You can download my
  preinstalled qemu image from:

https://sourceforge.net/projects/qtmoko/files/BuildHost/qtmoko-buildhost.tar.gz/download

* Unpack the tarball, install qemu and run ./start.sh

* After the system is started you can use redirected port to ssh there:

ssh -p 22222 root@localhost

  please note that the root password is empty.

* The system is very minimal, download more packages:

apt-get update
apt-get install cdebootstrap mtd-utils


Step 1
======

* We will be installing new image to /media/card:

cdebootstrap --flavour=minimal --include=ifupdown,procps,netbase,nano,module-init-tools,wget,openssh-server,screen,mc,libts-0.0-0,libasound2,alsa-utils,udhcpc,wpasupplicant,wireless-tools,iputils-ping,iproute,bluez,bluez-alsa,dosfstools,fbset,klogd,psmisc,iptables,dash,ttf-dejavu,libpng12-0,libjpeg8,libxtst6,sqlite3,rfkill,ntpdate,libspeex1,libspeexdsp1,lsof,gstreamer0.10-ffmpeg,gstreamer0.10-plugins-good,gstreamer0.10-pulseaudio,pulseaudio,pulseaudio-utils,libasound2-plugins,liblcms1,libmng1,libpulse-mainloop-glib0,libvorbisfile3,gpsd,gpsd-clients squeeze /media/card/ http://cdn.debian.net/debian/

Step 2
======

* Complete installation. Copy paste below in shell:

mkdir /media/card/mnt/nfs
mkdir /media/card/mnt/p1
mkdir /media/card/mnt/p2
mkdir /media/card/mnt/p3
mkdir /media/card/mnt/p5
mkdir /media/card/mnt/p6
mkdir /media/card/media/card
mkdir /media/card/media/p1
echo "neo" > /media/card/etc/hostname
echo "127.0.0.1 neo" >> /media/card/etc/hosts
cat > /media/card/etc/network/interfaces <<__END__
auto lo
iface lo inet loopback
auto usb0
iface usb0 inet static
    address 192.168.0.202
    netmask 255.255.255.0
    network 192.168.0.0
    gateway 192.168.0.200
    up rm /etc/resolv.conf
    up echo nameserver 208.67.222.222 >/etc/resolv.conf
__END__
cat > /media/card/etc/fstab << __END__
rootfs  /                auto    defaults,errors=remount-ro,noatime 0 1
/dev/mmcblk0p1 /media/p1   auto  defaults                           0 0
/dev/mmcblk0p5 /media/card auto  defaults                           0 0
proc    /proc            proc    defaults                           0 0
#tmpfs   /var/cache/apt   tmpfs   defaults,noatime                   0 0
192.168.0.200:/ /mnt/nfs  nfs noauto,nolock,soft,rsize=32768,wsize=32768 0 0
__END__
cat > /media/card/etc/apt/apt.conf.d/99no-install-recommends << __END__
APT::Install-Recommends "0";
__END__
sed -i 's/\(PermitEmptyPasswords\) no/\1 yes/' /media/card/etc/ssh/sshd_config
chroot /media/card /bin/sh -e <<__END_CHROOT__
echo root: root | chpasswd
sed -i 's/root:.*/root:C0XOiCyzQDtsA:14973:0:99999:7:::/' /etc/shadow
apt-get --yes --purge remove cdebootstrap-helper-rc.d
__END_CHROOT__


Step 3 - add more package repositories
========================================

echo "deb http://cdn.debian.net/debian squeeze contrib" >> /media/card/etc/apt/sources.list
echo "deb http://cdn.debian.net/debian squeeze non-free" >> /media/card/etc/apt/sources.list
echo "deb http://security.debian.org/ squeeze/updates main contrib non-free" >> /media/card/etc/apt/sources.list
echo "deb http://qtmoko.sourceforge.net/debian/gta04/armel /" >> /media/card/etc/apt/sources.list
echo "deb http://qtmoko.sourceforge.net/apps/all /" >> /media/card/etc/apt/sources.list
echo "deb http://qtmoko.sourceforge.net/apps/armel /" >> /media/card/etc/apt/sources.list

Step 4
======

* Device drivers modules. Most of device drivers are built in kernel, but
  following drivers are exception: g_ether is module so that we can switch
  between mass storage, ppp_generic is not needed for people not using GPRS,
  joydev is used in qtmaze for accelerometers, hso is for UMTS.

echo g_ether > /media/card/etc/modules
echo joydev >> /media/card/etc/modules
echo hso >> /media/card/etc/modules
echo ledtrig-timer >> /media/card/etc/modules
echo bmp085 >> /media/card/etc/modules

* Make the MAC address of g_ether fixed instead of random, so that network
  manager can be configured:
  
echo "options g_ether host_addr=46:0d:9e:67:69:eb dev_addr=b6:c8:ab:ac:44:7f" >> /media/card/etc/modprobe.d/options

* Configure bluez4 for handsfreee calls, otherwise there is no sounds:

nano /media/card/etc/bluetooth/audio.conf

  and uncomment SCORouting=PCM setting in [General]:

SCORouting=PCM

* Remove alsa-utils init scripts - we dont need them, we set correct alsa
  state ourselves when qtmoko starts up:

chroot /media/card
update-rc.d -f alsa-utils remove
exit

Step 4.1 - stable device nodes for UMTS
=======================================

* Modem device is by default on /dev/ttyHS3, but it can rename after modem
  disconnect. For details see:
    http://lists.goldelico.com/pipermail/gta04-owner/2012-February/001515.html
    http://lists.goldelico.com/pipermail/gta04-owner/2012-February/001563.html
  We will use udev to create stable symlinks for us:

cd /media/card/etc/udev/rules.d
wget https://raw.github.com/radekp/linux-2.6/v3.7-gta04-qtmoko-v52/GTA04/udev-rules/hso.rules
wget https://raw.github.com/radekp/linux-2.6/v3.7-gta04-qtmoko-v52/GTA04/udev-rules/input.rules

Step 4.2 - charging udev rules
==============================

* For more info see:
    http://lists.goldelico.com/pipermail/gta04-owner/2012-April/002272.html

cat > /media/card/etc/udev/rules.d/gta04-charging.rules <<__END__
SUBSYSTEM=="power_supply", ACTION=="change", DEVPATH=="*power_supply/twl4030_usb" ATTRS{1-0048/twl4030_usb/id}=="floating", ATTR{../../max_current}="500000"
SUBSYSTEM=="power_supply", ACTION=="change", DEVPATH=="*power_supply/twl4030_usb" ATTRS{1-0048/twl4030_usb/id}=="102k", ATTR{../../max_current}="851000"
__END__

Step 4.5 - make it generate SSH keys on start
=============================================

* SSH server keys are automatically generated during debootstrap. This can be
  security problem if user does not regenerate them. So we delete old keys and
  generate new ones during first boot.

rm /media/card/etc/ssh/ssh_host_*

cat > /media/card/etc/init.d/sshkeysfirstboot << __END__
#!/bin/sh

### BEGIN INIT INFO
# Provides:             sshkeysfirstboot
# Required-Start:       $remote_fs $syslog
# Required-Stop:        $remote_fs $syslog
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Generate SSH host keys on first boot
### END INIT INFO

dpkg-reconfigure openssh-server
update-rc.d -f sshkeysfirstboot remove
rm -f /etc/init.d/sshkeysfirstboot

__END__

chmod +x /media/card/etc/init.d/sshkeysfirstboot
chroot /media/card
update-rc.d sshkeysfirstboot defaults
exit


Step 4.6 - get rid of getty in inittab
======================================

* TTY's are for logging to console which is useful only if you have USB
  keyboard. So tty respawning is in done in usb-host.sh script and we can
  comment it out from /etc/inittab:

nano /media/card/etc/inittab

  and comment all lines with "respawn:/sbin/getty 38400 ttyX"


Step 4.7 - disable logging by defaults
======================================

* We will have syslogd and klogd disabled by default. If phone works it's not
  needed and it saves flash memory from wearing off. It can be always enabled
  in settings->logging or via devtools menu or with logging_enable.sh script.

chroot /media/card
update-rc.d -f klogd remove
update-rc.d -f sysklogd remove
exit

Step 5
======

* Set locale to get rid of apt-get warnings

echo "LANG=C" > /media/card/etc/default/locale
echo "LC_ALL=C" >> /media/card/etc/default/locale

* Fix incompatible libts version

cd /media/card/usr/lib
ln -s libts-0.0.so.0 libts-1.0.so.0

* Remove .udev dir, that confuses udev. This dir is here after instalation and
  causes some error/warnings during init. Not sure what's the exact problem.

cd /media/card/dev
rm -rf .udev

* Remove /etc/network/run and do make dir /etc/network/run
  Otherwise fstab mounting will fail for this directory

rm /media/card/etc/network/run
mkdir /media/card/etc/network/run


Step 7.5 - dash
===============

* For faster boot (~15s) and more memory (+1MB) we use dash instead of bash.

cd /media/card/bin/
rm sh
ln -s dash sh


Step 7.6 - libertas firmware
============================

* Wifi needs sd8686.bin and sd8686_helper.bin in /lib/firmware:

chroot /media/card
wget http://ftp.de.debian.org/debian/pool/non-free/libe/libertas-firmware/libertas-firmware_9.70.7.p0.0-1_all.deb
dpkg -i libertas-firmware_9.70.7.p0.0-1_all.deb
rm libertas-firmware_9.70.7.p0.0-1_all.deb
cd /lib/firmware
mv sd8686.bin 1
mv sd8686_helper.bin 2
rm -f *.bin
mv 1 sd8686.bin
mv 2 sd8686_helper.bin
exit


Step 8 - install QtMoko
=======================

* I use qemu armel host for building qtmoko package. It should be as simple as

git checkout v52
dpkg-buildpackage

* Note that you may need to install some dependencies before building:

apt-get install libX11-dev libXext-dev libXtst-dev libasound2-dev libdbus-1-dev libts-dev libbluetooth-dev

...and checkout git submodules as it's necessary to place qt sources into qtmoko/qtopiacore/qt/:

git submodule update --init

* Please note that releases are made from translations branch so that we have
  all languages.

* Now upload the package to sourceforge. In filezilla connect to sourceforge
  sftp and upload it to /home/project-web/qtmoko/htdocs/debian/gta04

* Install it

chroot /media/card/
wget http://qtmoko.sourceforge.net/debian/gta04/armel/qtmoko-gta04_52-1_armel.deb
dpkg -i qtmoko-gta04_52-1_armel.deb
update-rc.d qtmoko-gta04 defaults
rm qtmoko-gta04_52-1_armel.deb
exit
killall qpe.sh                  # recent versions start qtmoko after install, so kill it
killall pulse.sh                # kill pulseaudio - in qemu it just eats cpu
rm -rf /media/card/home/root/*  # remove all stuff created by qpe


Step 8.1 - install mokofaen theme
=================================

* Mokofaen is now default theme for qtmoko - but it's not part of qtmoko deb
  package, so that user can uninstall it to save space. So install mokofaen:

chroot /media/card/
wget http://qtmoko.sourceforge.net/apps/all/qtmoko-theme-mokofaen_3-1_all.deb
dpkg -i qtmoko-theme-mokofaen_3-1_all.deb
rm qtmoko-theme-mokofaen_3-1_all.deb
exit

Step 8.2 - some more alarm and ringtones
========================================

mkdir -p /media/card/home/root/Documents
cd /media/card/home/root/Documents
wget https://github.com/radekp/qtmoko/raw/master/src/applications/clock/sounds/Alarm_Beep_01.ogg
wget https://github.com/radekp/qtmoko/raw/master/src/applications/clock/sounds/Alarm_Beep_02.ogg
wget https://github.com/radekp/qtmoko/raw/master/src/applications/clock/sounds/Alarm_Beep_03.ogg


Step 9 - Linux kernel
=====================

* Sources for qtmoko are on github:

http://github.com/radekp/linux-2.6/

* Checkout branch for your qtmoko version:

git checkout v3.7-gta04-qtmoko-v52

* Create package in buildhost:

cd linux-2.6
dpkg-buildpackage

* You should remove .git while building the package so that the tar with
  sources is not that big. Upload the package to sourceforge.

* Install kernel image:

chroot /media/card
wget http://qtmoko.sourceforge.net/debian/gta04/armel/linux-image-3.7-qtmoko-gta04_52-1_armel.deb
dpkg -i linux-image-3.7-qtmoko-gta04_52-1_armel.deb
rm linux-image-3.7-qtmoko-gta04_52-1_armel.deb
exit

* Install bootargs.scr so for correct kernel cmdline arguments:

cd /media/card/boot
wget https://github.com/radekp/qtmoko/raw/master/devices/gta04/boot/bootargs.scr


Step 9.1 - Linux kernel cross compiling - not using anymore for releases
========================================================================

* If you want to cross compile kernel and make uboot image on PC:

make CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- ARCH=arm gta04_qtmoko_defconfig
make CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- ARCH=arm uImage
make CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- ARCH=arm modules
make CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- ARCH=arm modules_install INSTALL_MOD_PATH=GTA04
find  GTA04/lib/modules -name *.ko -exec /usr/bin/arm-linux-gnueabi-strip -R .not -R .comment --strip-unneeded {} \;

Step 9.2 - Setup bluetooth uarts
================================

* Bluetooth is on /dev/ttyO0 serial port and we need to run hciattach to have
  bluetooth working. For more info see http://projects.goldelico.com/p/gta04-kernel/page/Wireless/

echo "-s 3000000 /dev/ttyO0 any 3000000" > /media/card/etc/bluetooth/uart


Step 9.3 - Install libts from lindi
===================================

* It is needed for more recent kernels

chroot /media/card
wget http://lindi.iki.fi/lindi/tslib/libts-0.0-0_1.0-8lindi1_armel.deb
dpkg -i libts-0.0-0_1.0-8lindi1_armel.deb
rm libts-0.0-0_1.0-8lindi1_armel.deb
exit

Step 9.4 - Set pulseaudio as default source/sink for gstreamer
==============================================================

chroot /media/card
. /opt/qtmoko/qpe.env 
gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosink pulsesink
gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosrc pulsesrc
exit

Step 9.4.1 - config pulseaudio
==============================

* Use speex-fixed-3 for resampling (http://lists.goldelico.com/pipermail/gta04-owner/2012-November/003549.html)

nano /media/card/etc/pulse/daemon.conf

* Change the line with speex-float-3 to:

resample-method = speex-fixed-3


Step 9.5 - import QtMoko debian repository public keys
======================================================

* We use secure apt and we need keys for QtMoko repositories:

cd /media/card
wget https://github.com/radekp/qtmoko/raw/master/dist/qtmoko-pubring.gpg
chroot /media/card
apt-key add /qtmoko-pubring.gpg 
rm qtmoko-pubring.gpg
exit

Step 9.5.1 - remove bash history
================================

* Remove .bash_history created during install

rm -f /media/card/root/.bash_history

Step 9.6 - setup default DNS
============================

* So that internet works on neo, DNS used during installation is not working
  e.g. when installing from qemu:

cat > /media/card/etc/resolv.conf <<__END__
nameserver 8.8.8.8
__END__

Step 9.7 - boot logo
====================

* gta04-init displays this logo on boot:

cd /media/card/boot
wget -O logo.bmp https://github.com/radekp/qtmoko/raw/master/pics/gta04-init/sd.bmp

Step 9.8 - directory for multiboot
==================================

* QtMoko can use gta04-init to boot other distibutions in /distros
  subdirectory. Create this dir and write instructions how to use it:

mkdir /media/card/distros
cat > /media/card/distros/README <<__END__
This directory can contain other distributions and you can boot to them. Simply
create subdirectory here and unpack distribution tarball here. E.g:

    mkdir SHR
    cd SHR
    tar xzvpf /path/to/shr-rootfs.tar.gz

You need first SD partition to be FAT and enable initramfs multiboot system:

    mkdir /media/p1/gta04-init

Now press POWER, select the distribution from combo box and press "Restart Device"
__END__


Step 9.9 - enable ssh access just on usb
========================================

* SSH root access can be dangerous on wifi or on GPRS, so enable it only on usb0

echo "# Enable ssh access just on usb" >> /media/card/etc/rc.local
echo "ip6tables -A INPUT ! -i usb0 -p tcp --dport 22 -j REJECT --reject-with tcp-reset; iptables -A INPUT ! -i usb0 -p tcp --dport 22 -j REJECT --reject-with tcp-reset" >> /media/card/etc/rc.local

* Manually edit /media/card/etc/rc.local and move "exit" 0 to the end of file:

nano /media/card/etc/rc.local


Step 10 - release tarball
=========================

cd /media/card
tar -czvf ../qtmoko-debian-gta04-v52-armel.tar.gz .

Step 11 - make ubifs image
==========================

* Download logo for NAND boot:

cd /media/card/boot/
rm -f logo.bmp
wget -O logo.bmp https://github.com/radekp/qtmoko/raw/master/pics/gta04-init/nand.bmp

* Remove doc and stuff that is not needed and makes NAND image slower:

find /media/card/usr/share/locale/ -type f -exec rm -f '{}' \;
find /media/card/usr/share/doc/ -type f -exec rm -f '{}' \;
find /media/card/usr/share/doc-base/ -type f -exec rm -f '{}' \;
find /media/card/usr/share/info/ -type f -exec rm -f '{}' \;
find /media/card/usr/share/man/ -type f -exec rm -f '{}' \;
rm -rf /media/card/usr/share/sounds/alsa/*
rm -rf /media/card/usr/share/ssh/blacklist*

* We need just 3 fonts

cd /media/card/usr/share/fonts/truetype/ttf-dejavu/
mv DejaVuSansCondensed-Bold.ttf 1
mv DejaVuSansCondensed.ttf 2
mv DejaVuSansMono.ttf 3
rm *.ttf
mv 1 DejaVuSansCondensed-Bold.ttf
mv 2 DejaVuSansCondensed.ttf
mv 3 DejaVuSansMono.ttf


* Edit the mount for root in /media/card/etc/fstab so that it reads:

rootfs  /                auto    defaults,no_chk_data_crc,bulk_read 0 1

* Create config for ubinize and create the resulting image:

cd /media

cat > ubinize.cfg <<__END__
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_size=492MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
__END__


mkfs.ubifs -r /media/card -m 2048 -e 129024 -c 4007 -o ubifs.img
ubinize -o qtmoko-debian-gta04-v52.ubi -m 2048 -p 128KiB -s 512 ubinize.cfg
rm ubifs.img

* To install it on the device you need to boot from SD and:

ubiformat /dev/mtd4 -f /qtmoko-debian-gta04-v52.ubi

* To check that it's mountable:

ubiattach /dev/ubi_ctrl -m 4
mount -t ubifs ubi0:rootfs /mnt/ubifs/


Step 12 - jffs2 - not using anymore
===================================

* Same first 2 steps as with ubi (copy&delete /boot)

* Create jffs2 image: 

cd /media
mkfs.jffs2 -o qtmoko-debian-gta04-nosum-v52.jffs2 -e 0x20000 -n -d/media/card
sumtool -n -e 0x20000 -p -i qtmoko-debian-gta04-nosum-v52.jffs2 -o qtmoko-debian-gta04-v52.jffs2

* Create tarbal for NAND:

tar -czvf ../qtmoko-debian-nand.tar.gz .

* You will need bootloader script with bootmenu, you can find it under
  devices/gta04/boot. The script is generated with:

mkimage -A arm -O linux -a 0 -e 0 -T script -C none -n "GTA04 Boot Script" -d 
boot.scr.in boot.scr

* You will need uImage with cmdline compiled with root on NAND, so replace the
  part with root on /dev/mmcblk02 with root=/dev/mtdblock4 rootfstype=jffs2 rw
  in kernel config and make new kernel package. You also have to enable JFFS2
  filesystem.

* Boot GTA04 from SD card

* Write kernel to NAND (based on instructions from
  http://elinux.org/BeagleBoardNAND):

flash_eraseall /dev/mtd3
nandwrite -p /dev/mtd3 uImage   # uImage is the one with root=/dev/mtdblock4

* Write rootfs to NAND:

flash_eraseall -j /dev/mtd4
mount -t jffs2 /dev/mtdblock4 /mnt
cd /mnt
tar xzvpf qtmoko-debian-nand.tar.gz

* Uncomment the /var/cache/apt mount in /mnt/etc/fstab

* Edit the mount for root in /mnt/etc/fstab so that it reads:

/dev/mtdblock4  /       jffs2   rw,noatime      1  1 

* Unmount NAND:

cd /
sync
umount /mnt

* Write boot.scr with bootmenu to root of FAT boot partition

* Reboot and select NAND from the bootmenu


Step 13 - generate Packages.gz for debian repository
====================================================

* We have debian repository at http://qtmoko.sourceforge.net/debian/ After you
  upload packages there (using filezilla, host is frs.sourceforge.net user is
  radekp,qtmoko and directory is /home/project-web/qtmoko/htdocs/debian) you
  have to generate Packages.gz:

dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

* For secure apt you need to generate and sign Release file:

apt-ftparchive release . > Release
gpg -abs -o Release.gpg Release


Boot speedup
============

- replacing /bin/sh with dash, speedup 15s

Ideas & TODO
============

- support for dumb batteries as described in mail
  "Document with answers to most popular battery-related questions is ready"
  http://wiki.openmoko.org/wiki/Battery_Questions_and_Answers#So.2C_how_do_i_use_.22dumb.22_batteries_with_my_freerunner.3F
  from Paul Ferster

Creating debian cross compiling toolchain
=========================================

    * Install packages needed for toolchain. Use your phone and existing
      qtmoko-debian rootfs (ideally from chroot over NFS in /root/toolchain on
      your PC). (Havent found xcalibrate pkg, where is it? Is it needed?)

apt-get install libasound2-dev libbluetooth-dev libdbus-1-dev libglib2.0-dev \
    libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libavcodec-dev \
    libswscale-dev libxsettings-client-dev libssl-dev libts-dev \
    libxcomposite-dev libxcursor-dev libxdamage-dev libxfont-dev \
    libxfontcache-dev libxft-dev libxinerama-dev libxi-dev \
    libxmu-dev libxmuu-dev libxp-dev libxrandr-dev libxts-dev libxtst-dev \
    libxxf86dga-dev libxxf86misc-dev libxxf86vm-dev zlib1g-dev \
    build-essential libc6-dev libjpeg-dev libfreetype6-dev libdjvulibre-dev

    * Make directory for your toolchain and copy files from toolchain rootfs:

mkdir -p /opt/toolchains/arm920t-eabi/arm-linux-gnueabi/lib
mkdir -p /opt/toolchains/arm920t-eabi/arm-linux-gnueabi/include

cp -r /root/toolchain/lib /opt/toolchains/arm920t-eabi/arm-linux-gnueabi
cp -r /root/toolchain/usr/lib /opt/toolchains/arm920t-eabi/arm-linux-gnueabi
cp -r /root/toolchain/usr/include /opt/toolchains/arm920t-eabi/arm-linux-gnueabi

    * We will use cross compiler from emdebian project. On PC add emdebian
      repository to your /etc/apt/sources.list

deb http://www.emdebian.org/debian/ lenny main

    * Download needed packages

apt-get update
apt-get -d install libc6-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi gcc-4.3-arm-linux-gnueabi g++-4.3-arm-linux-gnueabi    

    * Unpack toolchain packages

ln -s /opt/toolchains/arm920t-eabi /opt/toolchains/arm920t-eabi/usr
rm -rf /opt/toolchains/arm920t-eabi/arm-linux-gnueabi/include/c++/4.3*

dpkg -x /var/cache/apt/archives/binutils-arm-linux-gnueabi_2.18.1~cvs20080103-7_i386.deb /opt/toolchains/arm920t-eabi/
dpkg -x /var/cache/apt/archives/cpp-4.3-arm-linux-gnueabi_4.3.2-1.1_i386.deb /opt/toolchains/arm920t-eabi/
dpkg -x /var/cache/apt/archives/gcc-4.3-arm-linux-gnueabi-base_4.3.2-1.1_i386.deb /opt/toolchains/arm920t-eabi/
dpkg -x /var/cache/apt/archives/gcc-4.3-arm-linux-gnueabi_4.3.2-1.1_i386.deb /opt/toolchains/arm920t-eabi/
dpkg -x /var/cache/apt/archives/g++-4.3-arm-linux-gnueabi_4.3.2-1.1_i386.deb /opt/toolchains/arm920t-eabi/
dpkg -x /var/cache/apt/archives/libc6-armel-cross_2.7-18_all.deb /opt/toolchains/arm920t-eabi/
dpkg -x /var/cache/apt/archives/libc6-dev-armel-cross_2.7-18_all.deb /opt/toolchains/arm920t-eabi/
dpkg -x /var/cache/apt/archives/libgcc1-armel-cross_1%3a4.3.2-1.1_all.deb /opt/toolchains/arm920t-eabi/
dpkg -x /var/cache/apt/archives/libstdc++6-armel-cross_4.3.2-1.1_all.deb /opt/toolchains/arm920t-eabi/
dpkg -x /var/cache/apt/archives/libstdc++6-4.3-dev-armel-cross_4.3.2-1.1_all.deb /opt/toolchains/arm920t-eabi/

    * Symlinks

cd /opt/toolchains/arm920t-eabi/lib/gcc/arm-linux-gnueabi/4.3.2
rm libgcc_s.so
ln -s ../../../../arm-linux-gnueabi/lib/libgcc_s.so.1 libgcc_s.so

    * Fix problems with #include_next in stddef and others

cd /opt/toolchains/arm920t-eabi/arm-linux-gnueabi/include/c++/4.3.2
find . -type f -print0 | xargs -0 sed -i 's/#include_next/#include/g'

    * Fix path to toolchain in package config files:

cd /opt/toolchains/arm920t-eabi/arm-linux-gnueabi/lib/pkgconfig
sed -i 's/\/usr/\/opt\/toolchains\/arm920t-eabi\/arm-linux-gnueabi/g' *.pc

    * Make paths relative in libc.so and others:

cd /opt/toolchains/arm920t-eabi/arm-linux-gnueabi/lib
sed -i 's/\/usr\/arm-linux-gnueabi\/lib\///g' *.so

    * Make the toolchain compatible with our old toolchain

cd /opt/toolchains/arm920t-eabi/
ln -s arm-linux-gnueabi arm-angstrom-linux-gnueabi
cd /opt/toolchains/arm920t-eabi/bin/
ln -s arm-linux-gnueabi-gcc-4.3 arm-linux-gcc
ln -s arm-linux-gnueabi-g++-4.3 arm-linux-g++
ln -s arm-linux-gnueabi-ar arm-linux-ar
ln -s arm-linux-gnueabi-strip arm-linux-strip
ln -s arm-linux-gnueabi-ld arm-linux-ld
ln -s arm-linux-gnueabi-nm arm-linux-nm
ln -s arm-linux-gnueabi-objcopy arm-linux-objcopy
ln -s arm-linux-gnueabi-objdump arm-linux-objdump

