alpine-project.sh 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. alpine_url=http://dl-cdn.alpinelinux.org/alpine/v3.22
  2. tools_tar=apk-tools-static-2.14.9-r3.apk
  3. tools_url=$alpine_url/main/armv7/$tools_tar
  4. firmware_tar=linux-firmware-other-20250509-r0.apk
  5. firmware_url=$alpine_url/main/armv7/$firmware_tar
  6. linux_dir=tmp/linux-6.12
  7. linux_ver=6.12.52-xilinx
  8. modules_dir=alpine-modloop/lib/modules/$linux_ver
  9. passwd=changeme
  10. project=$1
  11. test -f $tools_tar || curl -L $tools_url -o $tools_tar
  12. test -f $firmware_tar || curl -L $firmware_url -o $firmware_tar
  13. for tar in linux-firmware-ath9k_htc-20250509-r0.apk linux-firmware-brcm-20250509-r0.apk linux-firmware-cypress-20250509-r0.apk linux-firmware-rtlwifi-20250509-r0.apk
  14. do
  15. url=$alpine_url/main/armv7/$tar
  16. test -f $tar || curl -L $url -o $tar
  17. done
  18. mkdir alpine-apk
  19. tar -zxf $tools_tar --directory=alpine-apk --warning=no-unknown-keyword
  20. mkdir -p $modules_dir/kernel
  21. find $linux_dir -name \*.ko -printf '%P\0' | tar --directory=$linux_dir --owner=0 --group=0 --null --files-from=- -zcf - | tar -zxf - --directory=$modules_dir/kernel
  22. cp $linux_dir/modules.order $linux_dir/modules.builtin $modules_dir/
  23. depmod -a -b alpine-modloop $linux_ver
  24. tar -zxf $firmware_tar --directory=alpine-modloop/lib/modules --warning=no-unknown-keyword --strip-components=1 --wildcards lib/firmware/ar* lib/firmware/rt*
  25. for tar in linux-firmware-ath9k_htc-20250509-r0.apk linux-firmware-brcm-20250509-r0.apk linux-firmware-cypress-20250509-r0.apk linux-firmware-rtlwifi-20250509-r0.apk
  26. do
  27. tar -zxf $tar --directory=alpine-modloop/lib/modules --warning=no-unknown-keyword --strip-components=1
  28. done
  29. mksquashfs alpine-modloop/lib modloop -b 1048576 -comp xz -Xdict-size 100%
  30. rm -rf alpine-modloop
  31. root_dir=alpine-root
  32. mkdir -p $root_dir/usr/bin
  33. cp /usr/bin/qemu-arm-static $root_dir/usr/bin/
  34. mkdir -p $root_dir/etc
  35. cp /etc/resolv.conf $root_dir/etc/
  36. mkdir -p $root_dir/etc/apk
  37. mkdir -p $root_dir/media/mmcblk0p1/cache
  38. ln -s /media/mmcblk0p1/cache $root_dir/etc/apk/cache
  39. cp -r alpine/etc $root_dir/
  40. sed -i '1,2d' $root_dir/etc/local.d/apps.start
  41. mkdir $root_dir/media/mmcblk0p1/apps
  42. mkdir -p $root_dir/media/mmcblk0p1/apps/$project
  43. cp -r projects/$project/server/* $root_dir/media/mmcblk0p1/apps/$project/
  44. cp -r projects/$project/app/* $root_dir/media/mmcblk0p1/apps/$project/
  45. cp tmp/$project.bit $root_dir/media/mmcblk0p1/apps/$project/
  46. cp -r alpine-apk/sbin $root_dir/
  47. chroot $root_dir /sbin/apk.static --repository $alpine_url/main --update-cache --allow-untrusted --initdb add alpine-base
  48. echo $alpine_url/main > $root_dir/etc/apk/repositories
  49. echo $alpine_url/community >> $root_dir/etc/apk/repositories
  50. chroot $root_dir /bin/sh <<- EOF_CHROOT
  51. apk update
  52. apk add openssh u-boot-tools iw wpa_supplicant dhcpcd dnsmasq hostapd iptables avahi dbus dcron chrony musl-dev curl wget less nano bc
  53. rc-update add bootmisc boot
  54. rc-update add hostname boot
  55. rc-update add swclock boot
  56. rc-update add sysctl boot
  57. rc-update add syslog boot
  58. rc-update add seedrng boot
  59. rc-update add killprocs shutdown
  60. rc-update add mount-ro shutdown
  61. rc-update add savecache shutdown
  62. rc-update add devfs sysinit
  63. rc-update add dmesg sysinit
  64. rc-update add mdev sysinit
  65. rc-update add hwdrivers sysinit
  66. rc-update add modloop sysinit
  67. rc-update add avahi-daemon default
  68. rc-update add chronyd default
  69. rc-update add dhcpcd default
  70. rc-update add local default
  71. rc-update add dcron default
  72. rc-update add sshd default
  73. mkdir -p etc/runlevels/wifi
  74. rc-update -s add default wifi
  75. rc-update add iptables wifi
  76. rc-update add dnsmasq wifi
  77. rc-update add hostapd wifi
  78. sed -i 's/^SAVE_ON_STOP=.*/SAVE_ON_STOP="no"/;s/^IPFORWARD=.*/IPFORWARD="yes"/' etc/conf.d/iptables
  79. sed -i 's/^#PermitRootLogin.*/PermitRootLogin yes/' etc/ssh/sshd_config
  80. echo root:$passwd | chpasswd
  81. hostname red-pitaya
  82. sed -i 's/^# LBU_MEDIA=.*/LBU_MEDIA=mmcblk0p1/' etc/lbu/lbu.conf
  83. cat <<- EOF_CAT > root/.profile
  84. alias rw='mount -o rw,remount /media/mmcblk0p1'
  85. alias ro='mount -o ro,remount /media/mmcblk0p1'
  86. EOF_CAT
  87. ln -s /media/mmcblk0p1/apps root/apps
  88. ln -s /media/mmcblk0p1/wifi root/wifi
  89. lbu add root
  90. lbu delete etc/resolv.conf
  91. lbu delete root/.ash_history
  92. lbu commit -d
  93. apk add make gcc
  94. make -C /media/mmcblk0p1/apps/$project clean
  95. make -C /media/mmcblk0p1/apps/$project
  96. EOF_CHROOT
  97. cp -r $root_dir/media/mmcblk0p1/apps .
  98. cp -r $root_dir/media/mmcblk0p1/cache .
  99. cp $root_dir/media/mmcblk0p1/red-pitaya.apkovl.tar.gz .
  100. sed -i '5,6d' apps/$project/start.sh
  101. rm -f apps/$project/index.html
  102. cp apps/$project/start.sh .
  103. cp -r alpine/wifi .
  104. hostname -F /etc/hostname
  105. rm -rf $root_dir alpine-apk
  106. zip -r red-pitaya-alpine-3.22-armv7-`date +%Y%m%d`-$project.zip apps boot.bin cache modloop red-pitaya.apkovl.tar.gz start.sh wifi
  107. rm -rf apps cache modloop red-pitaya.apkovl.tar.gz start.sh wifi