Advertisement
Guest User

build_rootfs_kirkwood.sh

a guest
Feb 22nd, 2015
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 6.00 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # build your own complete Kirkwood rootfs with kernel.
  4. #
  5. # by John Westerberg, 2014-02-09
  6. # based on Klaus M Pfeiffer's "build_rpi_sd_card.sh"-script (http://blog.kmp.or.at/)
  7.  
  8. # you need at least
  9. # apt-get install binfmt-support qemu-user-static debootstrap kpartx lvm2
  10.  
  11. deb_mirror="http://ftp.debian.org/debian"
  12. #deb_local_mirror="http://ftp.debian.org/debian"
  13.  
  14. device=$1
  15. buildenv=/root/kirkwood
  16. rootfs=${buildenv}/rootfs
  17.  
  18. deb_release=wheezy
  19. rootfs_label=rootfs
  20. rootfs_size=512
  21. variant=minbase
  22.  
  23. kernel_version=3.18.5-kirkwood-tld-1
  24. kernel_package=${buildenv}/linux-${kernel_version}-bodhi.tar.bz2
  25.  
  26. mydate=`date +%Y%m%d`
  27.  
  28. image=""
  29.  
  30. if [ "$deb_local_mirror" == "" ]; then
  31.   deb_local_mirror=$deb_mirror  
  32. fi
  33.  
  34. if [ $EUID -ne 0 ]; then
  35.   echo "this tool must be run as root"
  36.   exit 1
  37. fi
  38.  
  39. if ! [ -b $device ]; then
  40.   echo "$device is not a block device"
  41.   exit 1
  42. fi
  43.  
  44. if [ ! -e $kernel_package ]; then
  45.   echo "could not find $kernel_package"
  46.   exit 1
  47. fi
  48.  
  49. if [ "$device" == "" ]; then
  50.   echo "no block device given, just creating an image"
  51.   mkdir -p $buildenv
  52.   image="${buildenv}/basic_${deb_release}_${mydate}.img"
  53.   dd if=/dev/zero of=$image bs=1MiB count=$rootfs_size
  54.   device=`losetup -f --show $image`
  55.   echo "image $image created and mounted as $device"
  56. else
  57.   dd if=/dev/zero of=$device bs=512 count=1
  58. fi
  59.  
  60. fdisk $device << EOF
  61. n
  62. p
  63.  
  64.  
  65.  
  66. w
  67. EOF
  68.  
  69.  
  70. if [ "$image" != "" ]; then
  71.   losetup -d $device
  72.   device=`kpartx -va $image | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
  73.   device="/dev/mapper/${device}"
  74.   rootp=${device}p1
  75. else
  76.   if ! [ -b ${device}1 ]; then
  77.     rootp=${device}p1
  78.     if ! [ -b ${rootp} ]; then
  79.       echo "uh, oh, something went wrong, can't find bootpartition neither as ${device}1 nor as ${device}p1, exiting."
  80.       exit 1
  81.     fi
  82.   else
  83.     rootp=${device}1
  84.   fi
  85. fi
  86.  
  87. mke2fs -L $rootfs_label -j $rootp
  88.  
  89. mkdir -p $rootfs
  90.  
  91. mount $rootp $rootfs
  92.  
  93. cd $rootfs
  94.  
  95. debootstrap --verbose --arch armel --variant=$variant --foreign $deb_release $rootfs $deb_local_mirror
  96.  
  97. cp /usr/bin/qemu-arm-static $rootfs/usr/bin/
  98.  
  99. mkdir -p $rootfs/dev/pts
  100. mount devpts $rootfs/dev/pts -t devpts
  101. mount -t proc proc $rootfs/proc
  102.  
  103. LANG=C chroot $rootfs /debootstrap/debootstrap --second-stage
  104.  
  105. echo debian > $rootfs/etc/hostname
  106.  
  107. cat <<END > $rootfs/etc/fstab
  108. # /etc/fstab: static file system information.
  109. #
  110. # <file system> <mount point>   <type>  <options>       <dump>  <pass>
  111. /dev/root      /               ext3    noatime,errors=remount-ro 0 1
  112. tmpfs          /tmp            tmpfs   defaults          0       0
  113. END
  114.  
  115. cat <<END > $rootfs/etc/network/interfaces
  116. auto lo eth0
  117. iface lo inet loopback
  118. iface eth0 inet dhcp
  119. END
  120.  
  121. cat <<END > $rootfs/etc/fw_env.config
  122. # MTD device name   Device offset   Env. size   Flash sector size   Number of sectors
  123. /dev/mtd0 0xc0000 0x20000 0x20000
  124. END
  125.  
  126. echo 'T0:2345:respawn:/sbin/getty -L ttyS0 115200 linux' >> $rootfs/etc/inittab
  127. sed -i 's/^\([1-6]:.* tty[1-6]\)/#\1/' $rootfs/etc/inittab
  128.  
  129. echo HWCLOCKACCESS=no >> $rootfs/etc/default/rcS
  130. echo CONCURRENCY=shell >> $rootfs/etc/default/rcS
  131.  
  132. sed -i '/exit 0/i\
  133. #Turn on LED\
  134. if [ -d /sys/class/leds/status:green:health ]; then\
  135. echo default-on > /sys/class/leds/status:green:health/trigger\
  136. fi\
  137. ' $rootfs/etc/rc.local
  138.  
  139. sed -i '/exit 0/i\
  140. if [ -d /sys/class/leds/status:red:fault ]; then\
  141. echo none > /sys/class/leds/status:red:fault/trigger\
  142. fi\
  143. ' $rootfs/etc/rc.local
  144.  
  145. sed -i '/log_action_msg "Will now halt"/i\
  146.        #Turn off LED\
  147.        if [ -d /sys/class/leds/status:green:health ]; then\
  148.        echo none > /sys/class/leds/status:green:health/trigger\
  149.        fi\
  150. ' $rootfs/etc/init.d/halt
  151.  
  152. sed -i '/log_action_msg "Will now halt"/i\
  153.        if [ -d /sys/class/leds/status:red:fault ]; then\
  154.        echo none > /sys/class/leds/status:red:fault/trigger\
  155.        fi\
  156. ' $rootfs/etc/init.d/halt
  157.  
  158. cat <<END > $rootfs/etc/apt/apt.conf
  159. APT::Install-Recommends "0";
  160. APT::Install-Suggests "0";
  161. END
  162.  
  163. cat <<END > $rootfs/etc/apt/sources.list
  164. deb http://security.debian.org/ wheezy/updates main
  165. deb-src http://security.debian.org/ wheezy/updates main
  166. deb http://ftp.debian.org/debian/ wheezy main
  167. deb-src http://ftp.debian.org/debian/ wheezy main
  168. END
  169.  
  170. cat <<END > $rootfs/etc/apt/apt.conf.d/02compress-indexes
  171. Acquire::GzipIndexes "true";
  172. Acquire::CompressionTypes::Order:: "gz";
  173. END
  174.  
  175. mount devpts $rootfs/dev/pts -t devpts
  176. mount -t proc proc $rootfs/proc
  177.  
  178. echo "#!/bin/bash
  179. echo \"root:debian\" | chpasswd
  180. rm -f /etc/blkid.tab
  181. ln -s /dev/null /etc/blkid.tab
  182. rm -f /etc/mtab
  183. ln -s /proc/mounts /etc/mtab
  184. apt-get update
  185. apt-get -y install apt-utils dialog locales
  186. 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
  187. rm -f /third-stage
  188. " > third-stage
  189. chmod +x third-stage
  190. LANG=C chroot $rootfs /third-stage
  191.  
  192. sed -i 's/KERNEL\!=\"eth\*|/KERNEL\!=\"/' $rootfs/lib/udev/rules.d/75-persistent-net-generator.rules
  193. rm -f $rootfs/etc/udev/rules.d/70-persistent-net.rules
  194.  
  195. tar -xjf $kernel_package -C $rootfs/boot/
  196.  
  197. echo "#!/bin/bash
  198. cd /boot
  199. tar -xf linux-dtb-${kernel_version}.tar
  200. dpkg -i linux-image-${kernel_version}_1_armel.deb
  201. mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n Linux-${kernel_version} -d /boot/vmlinuz-${kernel_version} /boot/uImage
  202. 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
  203. rm -f /kernel
  204. " > kernel
  205. chmod +x kernel
  206. LANG=C chroot $rootfs /kernel
  207.  
  208. echo "#!/bin/bash
  209. apt-get clean
  210. rm -f /boot/*.tar
  211. rm -f /boot/*.deb
  212. rm -f /boot/*.patch
  213. rm -f /cleanup
  214. " > cleanup
  215. chmod +x cleanup
  216. LANG=C chroot $rootfs /cleanup
  217.  
  218. umount $rootfs/dev/pts
  219. umount $rootfs/proc
  220.  
  221. rm -f $rootfs/usr/bin/qemu-arm-static
  222.  
  223. cd
  224.  
  225. sync
  226. sync
  227.  
  228. umount $rootp
  229.  
  230. if [ "$image" != "" ]; then
  231.   kpartx -d $image
  232.   echo "created image $image"
  233. fi
  234.  
  235. echo "done."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement