adkinstall 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #!/bin/sh
  2. # installs a rootfs tar archive from OpenADK onto a Compact Flash disk
  3. check_exit() {
  4. if [ $? -ne 0 ];then
  5. echo "Installation failed."
  6. exit 1
  7. fi
  8. }
  9. rescue=0
  10. while getopts "r" option
  11. do
  12. case $option in
  13. r)
  14. rescue=1
  15. ;;
  16. *)
  17. printf "Option not recognized\n"
  18. exit 1
  19. ;;
  20. esac
  21. done
  22. shift $(($OPTIND - 1))
  23. if [ -z $1 ];then
  24. printf "Please give your root tar archive as parameter\n"
  25. exit 1
  26. fi
  27. if [ $rescue -eq 1 ];then
  28. if [ -z $2 ];then
  29. printf "Please give your rescue kernel image as second parameter\n"
  30. exit 2
  31. fi
  32. if [ ! -f $2 ];then
  33. printf "$2 is not a file, Exiting.\n"
  34. exit 1
  35. fi
  36. fi
  37. printf "Creating partitions ...\n"
  38. parted -s /dev/sda mklabel msdos
  39. check_exit
  40. sleep 2
  41. maxsize=$(env LC_ALL=C parted /dev/sda -s unit cyl print |awk '/^Disk/ { print $3 }'|sed -e 's/cyl//')
  42. rootsize=$(($maxsize-2))
  43. start=0
  44. rootp=1
  45. cfgfsp=2
  46. if [ $rescue -eq 1 ];then
  47. rootp=3
  48. cfgfsp=4
  49. start=2
  50. parted -s /dev/sda unit cyl mkpart primary ext2 0 1
  51. check_exit
  52. mke2fs /dev/sda1
  53. check_exit
  54. parted -s /dev/sda unit cyl mkpart primary ext2 1 2
  55. check_exit
  56. mke2fs /dev/sda2
  57. check_exit
  58. fi
  59. parted -s /dev/sda unit cyl mkpart primary ext2 $start $rootsize
  60. check_exit
  61. mke2fs /dev/sda1
  62. check_exit
  63. parted -s /dev/sda unit cyl mkpart primary fat32 $rootsize $maxsize
  64. check_exit
  65. parted -s /dev/sda set $rootp boot on
  66. check_exit
  67. sfdisk --change-id /dev/sda $cfgfsp 88 >/dev/null 2>&1
  68. check_exit
  69. # settle down
  70. sleep 2
  71. mount -t ext2 /dev/sda$rootp /mnt
  72. check_exit
  73. printf "Extracting install archive ...\n"
  74. tar -C /mnt -xzpf $1
  75. check_exit
  76. chmod 1777 /mnt/tmp
  77. chmod 4755 /mnt/bin/busybox
  78. if [ $rescue -eq 1 ];then
  79. mkdir /mnt/boot/grub
  80. fi
  81. speed=$(awk -F \, '/console=ttyS0/ { print $2 }' /proc/cmdline|sed -e "s/ .*$//")
  82. if [ $rescue -eq 1 ];then
  83. umount /mnt
  84. mount /dev/sda2 /mnt
  85. cp $2 /mnt/rescue
  86. fi
  87. printf "Installing bootloader ...\n"
  88. mkdir -p /mnt/boot/grub
  89. if [ $rescue -eq 1 ];then
  90. mount /dev/sda1 /mnt/boot/grub
  91. cat << EOF > /mnt/boot/grub/grub.cfg
  92. set timeout=1
  93. serial --unit=0 --speed=$speed
  94. terminal_output serial
  95. terminal_input serial
  96. if [ -s \$prefix/grubenv ]; then
  97. load_env
  98. fi
  99. set default="\${saved_entry}"
  100. if [ \${prev_saved_entry} ]; then
  101. set saved_entry=\${prev_saved_entry}
  102. save_env saved_entry
  103. set prev_saved_entry=
  104. save_env prev_saved_entry
  105. set boot_once=true
  106. fi
  107. function savedefault {
  108. if [ -z \${boot_once} ]; then
  109. saved_entry=\${chosen}
  110. save_env saved_entry
  111. fi
  112. }
  113. function recordfail {
  114. set recordfail=1
  115. if [ -n \${have_grubenv} ]; then if [ -z \${boot_once} ]; then save_env recordfail; fi; fi
  116. }
  117. menuentry "GNU/Linux (OpenADK)" {
  118. recordfail
  119. insmod ext2
  120. set root=(hd0,3)
  121. linux /boot/kernel root=/dev/sda$rootp ro init=/init panic=10
  122. }
  123. menuentry "GNU/Linux (OpenADK) Rescue Mode" {
  124. recordfail
  125. insmod ext2
  126. set root=(hd0,2)
  127. linux /rescue ro init=/init panic=10
  128. }
  129. EOF
  130. else
  131. cat << EOF > /mnt/boot/grub/grub.cfg
  132. set default=0
  133. set timeout=1
  134. serial --unit=0 --speed=$speed
  135. terminal_output serial
  136. terminal_input serial
  137. menuentry "GNU/Linux (OpenADK)" {
  138. insmod ext2
  139. set root=(hd0,1)
  140. linux /boot/kernel root=/dev/sda$rootp ro init=/init panic=10
  141. }
  142. EOF
  143. fi
  144. grub-install --root-directory=/mnt /dev/sda
  145. check_exit
  146. if [ $rescue -eq 1 ];then
  147. grub-set-default --root-directory=/mnt 0
  148. umount /mnt/boot/grub
  149. fi
  150. umount /mnt
  151. printf "Successfully installed. You can reboot now.\n"
  152. exit 0