Debian LiveCD

From PS3 Developer wiki
Revision as of 23:04, 31 October 2012 by Glevand (talk | contribs) (→‎CDROM)
Jump to navigation Jump to search


Introduction

  • Sometimes we need to boot Linux without HDD e.g. if you want to experiment with HDD encryption, enable/disable it without causing damage to your data. For such cases we need a LiveCD which doesn't mount HDD at boot.

Creating Initial System with debootstrap

Type This
apt-get install debootstrap

mkdir livecd

debootstrap --arch powerpc squeeze /root/livecd http://ftp.us.debian.org/debian

# Grab a beer and reverse some PS3 stuff in the meantime :)

# Enter chroot environment

mount -t proc none /root/livecd/proc
mount --rbind /dev /root/livecd/dev
LANG=C chroot /root/livecd /bin/bash

export TERM=xterm-color

echo "debian" > /etc/hostname

dpkg-reconfigure tzdata

# Configure network interfaces

cat /etc/network/interfaces
---
auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet dhcp
    wpa-ssid ssid
    wpa-psk psk
-EOF-

# Configure APT

cat /etc/apt/sources.list
---

deb http://ftp.us.debian.org/debian squeeze main
deb-src http://ftp.us.debian.org/debian squeeze main

deb http://security.debian.org squeeze/updates main
deb-src http://security.debian.org squeeze/updates main
-EOF-

aptitude update

aptitude install locales
dpkg-reconfigure locales
aptitude install console-data
dpkg-reconfigure console-data

tasksel install standard
aptitude install binutils gcc make git vim openssh-server sudo wireless-tools wpasupplicant libssl-dev libncurse5-dev
aptitude  install gcc-spu g++-spu newlib-spu spu-tools
aptitude  install parted kpartx cryptsetup libreadline-dev libaio-dev libdevmapper-dev libudev-dev

# Make SSH server start at boot so we could ssh to our LiveCD

update-rc.d ssh defaults

aptitude clean

rm -f /etc/udev/rules.d/70-persistent-net.rules

# exit chroot environment

exit

# Unmount dev and proc

umount /root/livecd/dev/shm
umount /root/livecd/dev/pts
umount /root/livecd/dev
umount /root/livecd/proc























































Creating Root Filesystem

Type This
cd /root/livecd
mksquashfs * ../root.sfs






Modifying Root Filesystem

Type This
cd /root
unsquashfs root.sfs
cd squashfs-root

# Make your changes

mksquashfs * ../root-changed.sfs










Linux 3 Kernel

  • We need a Linux 3 kernel with overlayfs support so we could create a tmpfs over our read-only base filesystem.
  • Furthermore, we want to compile PS3 HDD driver as module because in this case we can easily change HDD region flags.

See my GIT repos:

Initramfs

See my GIT repo: http://gitorious.ps3dev.net/ps3linux/livecd

BusyBox

  • We need a couple of user-space applications to mount filesystems, load kernel modules and so on.
  • And make sure you compile BusyBox without any library dependencies.
  • I compiled my BusyBox executable on PS3 Linux but you could cross-compile it too but then you need a complete PowerPC toolchain with libc.
http://busybox.net/downloads/busybox-1.20.1.tar.bz2

tar xvjf busybox-1.20.1.tar.bz2
cd busybox-1.20.1
make menuconfig
make

Creating Image

Type This
# Populate initramfs

mkdir initramfs
cd initramfs
mkdir -p bin dev etc lib/modules/3.6.4 mnt proc sbin sys usr/bin usr/sbin

cp ~/busybox-1.20.1/busybox bin/
cd bin
ln -sf busybox sh
cd ..

echo 'sda.*	0:6	0660' >> etc/mdev.conf
echo 'sr[0-9]	0:6	0660	@ln -sf $MDEV cdrom' >> etc/mdev.conf

cat >etc/modules <<EOF
> fat
> vfat
> isofs
> crc-ccitt
> crc-itu-t
> lzo_compress
> udf
> squashfs
> overlayfs
> ps3_gelic
> ps3stor_lib
> sg
> ps3rom
> usb-common
> usbcore
> ehci-hcd
> ohci-hcd
> usb-storage
> EOF

for mod in fat vfat isofs crc-ccitt crc-itu-t lzo_compress udf squashfs overlayfs \
           ps3_gelic ps3stor_lib sg ps3rom usb-common usbcore ehci-hcd ohci-hcd usb-storage; do
    path=`find  /home/glevand/linux-3.6.4-build/lib/modules/3.6.4 -name $mod.ko`
    cp $path lib/modules/3.6.4/
done

# Create initramfs

find . | cpio -H newc -o > ../initramfs.cpio
cd ..
cat initramfs.cpio | gzip > initramfs.cpio.gz

# Make changes to initramfs

gunzip initramfs.cpio.gz
mkdir initramfs
cd initramfs
cpio -i -d -H newc --no-absolute-filenames < ../initramfs.cpio















































Images

  • vmlinux-3.6.4.xz: http://www.multiupload.nl/D0PYT6HGC0 (MD5 4b5fdb2995fde82e0f6817a7a86fca2c)
  • root.sfs: http://www.multiupload.nl/MWDSBR4OJZ (MD5 3ee12e2d351e0bbe1cd7818be23d8973)
  • Tools available on the root filesystem: gcc, spu-gcc, spuisofs, spuldrfs, ps3vuart-tools, ps3sed and all my other PS3 Linux drivers. Everything you need to compile and test various PS3 stuff.
  • In case someone still hasn't figured it out yet, password for root is root and password for glevand is glevand :)
  • I enabled DHCP on Ethernet.
  • You could use WLAN too but for that you have to modify the root filesystem and configure your SSID and PSK in /etc/network/interfaces.

USB

  • Your USB drive should be formatted with FAT32 filesystem.
  • initramfs-usb.cpio.gz: http://www.multiupload.nl/Y084SCQBL3 (MD5 f94b6aec2e5fbbb26f7d466165071469)
  • Create debianlive directory on your USB drive.
  • Put vmlinux-3.6.4 (extract xz archive), initramfs.cpio.gz and root.sfs into this directory.
Type This
$ ls -l /mnt/usb/debianlive/
total 257696
-rwxr-xr-x 1 root root   6746154 Aug 18 17:44 initramfs.cpio.gz
-rwxr-xr-x 1 root root 249835520 Aug 18 17:15 root.sfs
-rwxr-xr-x 1 root root   7288832 Aug 18 17:31 vmlinux-3.6.4
$ ls -l /mnt/usb/
-rwxr-xr-x  1 root root      188 Aug 18 17:30 kboot.conf
  • And create kboot.conf in the root directory of your USB drive with this content:
debianlive=/debianlive/vmlinux-3.6.4 initrd=/debianlive/initramfs.cpio.gz

CDROM

Type This
mkdir -p iso/debianlive
cp root.sfs initramfs.cpio.gz vmlinux-3.6.4 iso/debianlive
echo "debianlive=/debianlive/vmlinux-3.6.4 initrd=/debianlive/initramfs.cpio.gz" > iso/kboot.conf
cd iso
mkisofs -R -J -l -o ../debianlive.iso .
cd ..

sudo cdrecord -v dev=/dev/sr0 blank=fast
sudo cdrecord -v dev=/dev/sr0 debianlive.iso

















Links