Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # build your own complete Kirkwood rootfs with kernel.
- #
- # by John Westerberg, 2014-02-09
- # based on Klaus M Pfeiffer's "build_rpi_sd_card.sh"-script (http://blog.kmp.or.at/)
- # you need at least
- # apt-get install binfmt-support qemu-user-static debootstrap kpartx lvm2
- deb_mirror="http://ftp.debian.org/debian"
- #deb_local_mirror="http://ftp.debian.org/debian"
- device=$1
- buildenv=/root/kirkwood
- rootfs=${buildenv}/rootfs
- deb_release=wheezy
- rootfs_label=rootfs
- rootfs_size=512
- variant=minbase
- kernel_version=3.18.5-kirkwood-tld-1
- kernel_package=${buildenv}/linux-${kernel_version}-bodhi.tar.bz2
- mydate=`date +%Y%m%d`
- image=""
- if [ "$deb_local_mirror" == "" ]; then
- deb_local_mirror=$deb_mirror
- fi
- if [ $EUID -ne 0 ]; then
- echo "this tool must be run as root"
- exit 1
- fi
- if ! [ -b $device ]; then
- echo "$device is not a block device"
- exit 1
- fi
- if [ ! -e $kernel_package ]; then
- echo "could not find $kernel_package"
- exit 1
- fi
- if [ "$device" == "" ]; then
- echo "no block device given, just creating an image"
- mkdir -p $buildenv
- image="${buildenv}/basic_${deb_release}_${mydate}.img"
- dd if=/dev/zero of=$image bs=1MiB count=$rootfs_size
- device=`losetup -f --show $image`
- echo "image $image created and mounted as $device"
- else
- dd if=/dev/zero of=$device bs=512 count=1
- fi
- fdisk $device << EOF
- n
- p
- w
- EOF
- if [ "$image" != "" ]; then
- losetup -d $device
- device=`kpartx -va $image | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
- device="/dev/mapper/${device}"
- rootp=${device}p1
- else
- if ! [ -b ${device}1 ]; then
- rootp=${device}p1
- if ! [ -b ${rootp} ]; then
- echo "uh, oh, something went wrong, can't find bootpartition neither as ${device}1 nor as ${device}p1, exiting."
- exit 1
- fi
- else
- rootp=${device}1
- fi
- fi
- mke2fs -L $rootfs_label -j $rootp
- mkdir -p $rootfs
- mount $rootp $rootfs
- cd $rootfs
- debootstrap --verbose --arch armel --variant=$variant --foreign $deb_release $rootfs $deb_local_mirror
- cp /usr/bin/qemu-arm-static $rootfs/usr/bin/
- mkdir -p $rootfs/dev/pts
- mount devpts $rootfs/dev/pts -t devpts
- mount -t proc proc $rootfs/proc
- LANG=C chroot $rootfs /debootstrap/debootstrap --second-stage
- echo debian > $rootfs/etc/hostname
- cat <<END > $rootfs/etc/fstab
- # /etc/fstab: static file system information.
- #
- # <file system> <mount point> <type> <options> <dump> <pass>
- /dev/root / ext3 noatime,errors=remount-ro 0 1
- tmpfs /tmp tmpfs defaults 0 0
- END
- cat <<END > $rootfs/etc/network/interfaces
- auto lo eth0
- iface lo inet loopback
- iface eth0 inet dhcp
- END
- cat <<END > $rootfs/etc/fw_env.config
- # MTD device name Device offset Env. size Flash sector size Number of sectors
- /dev/mtd0 0xc0000 0x20000 0x20000
- END
- echo 'T0:2345:respawn:/sbin/getty -L ttyS0 115200 linux' >> $rootfs/etc/inittab
- sed -i 's/^\([1-6]:.* tty[1-6]\)/#\1/' $rootfs/etc/inittab
- echo HWCLOCKACCESS=no >> $rootfs/etc/default/rcS
- echo CONCURRENCY=shell >> $rootfs/etc/default/rcS
- sed -i '/exit 0/i\
- #Turn on LED\
- if [ -d /sys/class/leds/status:green:health ]; then\
- echo default-on > /sys/class/leds/status:green:health/trigger\
- fi\
- ' $rootfs/etc/rc.local
- sed -i '/exit 0/i\
- if [ -d /sys/class/leds/status:red:fault ]; then\
- echo none > /sys/class/leds/status:red:fault/trigger\
- fi\
- ' $rootfs/etc/rc.local
- sed -i '/log_action_msg "Will now halt"/i\
- #Turn off LED\
- if [ -d /sys/class/leds/status:green:health ]; then\
- echo none > /sys/class/leds/status:green:health/trigger\
- fi\
- ' $rootfs/etc/init.d/halt
- sed -i '/log_action_msg "Will now halt"/i\
- if [ -d /sys/class/leds/status:red:fault ]; then\
- echo none > /sys/class/leds/status:red:fault/trigger\
- fi\
- ' $rootfs/etc/init.d/halt
- cat <<END > $rootfs/etc/apt/apt.conf
- APT::Install-Recommends "0";
- APT::Install-Suggests "0";
- END
- cat <<END > $rootfs/etc/apt/sources.list
- deb http://security.debian.org/ wheezy/updates main
- deb-src http://security.debian.org/ wheezy/updates main
- deb http://ftp.debian.org/debian/ wheezy main
- deb-src http://ftp.debian.org/debian/ wheezy main
- END
- cat <<END > $rootfs/etc/apt/apt.conf.d/02compress-indexes
- Acquire::GzipIndexes "true";
- Acquire::CompressionTypes::Order:: "gz";
- END
- mount devpts $rootfs/dev/pts -t devpts
- mount -t proc proc $rootfs/proc
- echo "#!/bin/bash
- echo \"root:debian\" | chpasswd
- rm -f /etc/blkid.tab
- ln -s /dev/null /etc/blkid.tab
- rm -f /etc/mtab
- ln -s /proc/mounts /etc/mtab
- apt-get update
- apt-get -y install apt-utils dialog locales
- apt-get -y install kmod isc-dhcp-client udev netbase ifupdown openssh-server iputils-ping wget net-tools ntpdate u-boot-tools vim-tiny nano ethtool iproute iperf bzip2 busybox busybox-syslogd htop initramfs-tools
- rm -f /third-stage
- " > third-stage
- chmod +x third-stage
- LANG=C chroot $rootfs /third-stage
- sed -i 's/KERNEL\!=\"eth\*|/KERNEL\!=\"/' $rootfs/lib/udev/rules.d/75-persistent-net-generator.rules
- rm -f $rootfs/etc/udev/rules.d/70-persistent-net.rules
- tar -xjf $kernel_package -C $rootfs/boot/
- echo "#!/bin/bash
- cd /boot
- tar -xf linux-dtb-${kernel_version}.tar
- dpkg -i linux-image-${kernel_version}_1_armel.deb
- mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n Linux-${kernel_version} -d /boot/vmlinuz-${kernel_version} /boot/uImage
- mkimage -A arm -O linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs-${kernel_version} -d /boot/initrd.img-${kernel_version} /boot/uInitrd
- rm -f /kernel
- " > kernel
- chmod +x kernel
- LANG=C chroot $rootfs /kernel
- echo "#!/bin/bash
- apt-get clean
- rm -f /boot/*.tar
- rm -f /boot/*.deb
- rm -f /boot/*.patch
- rm -f /cleanup
- " > cleanup
- chmod +x cleanup
- LANG=C chroot $rootfs /cleanup
- umount $rootfs/dev/pts
- umount $rootfs/proc
- rm -f $rootfs/usr/bin/qemu-arm-static
- cd
- sync
- sync
- umount $rootp
- if [ "$image" != "" ]; then
- kpartx -d $image
- echo "created image $image"
- fi
- echo "done."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement