galeb

Једноставна статичка дистрибуција заснована на musl-у
git clone https://git.sr.ht/~strahinja/galeb
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

04-finale.sh (8129B)


      1 #!/bin/sh
      2 
      3 . ./lib/env.sh
      4 . ./lib/fun.sh
      5 
      6 trap exit_cleanup HUP PIPE INT QUIT TERM EXIT
      7 
      8 if [ ! -d /sucks ]; then
      9 	msg err "You must run this script from inside chroot"
     10 	exit 1
     11 elif [ "$(id -u)" -ne 0 ]; then
     12 	msg err "You must run this script as root"
     13 	exit 1
     14 fi
     15 
     16 msg warn "Note: once you run this script, previous build scripts won't run"
     17 msg warn "correctly until you uninstall packages installed here           "
     18 msg query "Run %s [y/N]?" ${0##*/}
     19 read -r run_script
     20 case "${run_script}" in
     21 	y|Y)	;;
     22 	*)	exit;;
     23 esac
     24 
     25 totalsteps=1
     26 step=1
     27 
     28 begin_step "finale"
     29 
     30 totalsubsteps=6
     31 substep=1
     32 
     33 begin_substep byacc-20230219
     34 if [ -x /bin/yacc ]; then
     35 	msg info "%s exists, skipping %s" /bin/yacc ${pkg}
     36 elif [ -e ${G_SPKG}/${pkg}.tar.xz ]; then
     37 	unpack_pkg ${pkg} /
     38 else
     39 	remove_dir ${G_SRC}/${pkg}
     40 	extract_pkg ${G_SRC} ${pkg} ${pkg}.tgz
     41 	(
     42 		cd_or_fail ${G_SRC}/${pkg}
     43 
     44 		cat <<! >MKPK
     45 mkpk_name()
     46 {
     47 	printf "%s" "${pkg}"
     48 }
     49 
     50 mkpk_install()
     51 {
     52 	AR=ar
     53 	CC=tcc
     54 	CFLAGS='-Os -static -fcommon'
     55 	LDFLAGS='-static -fcommon'
     56 	DESTDIR=/build
     57 	export AR CC CFLAGS LDFLAGS DESTDIR
     58 
     59 	./configure --prefix=/ || exit 1
     60 	make ${JN} || exit 1
     61 	make install
     62 }
     63 !
     64 		mkpk ${pkg}
     65 		remove_dir ${G_SRC}/${pkg}
     66 		unpack_pkg ${pkg} /
     67 	) || exit 1
     68 fi
     69 timestamp=$(date +'%Y-%m-%d %T')
     70 printf "%s\t%s\t%s\n" byacc 20230219 "${timestamp}" >>${G_PKGDB}
     71 end_substep
     72 
     73 # Based on improvements by Platon Ryzhikov (phkr on AUR)
     74 begin_substep smdev-20230417
     75 if [ -x /bin/smdev ]; then
     76 	msg info "%s exists, skipping %s" /bin/smdev ${pkg}
     77 elif [ -e ${G_SPKG}/${pkg}.tar.xz ]; then
     78 	unpack_pkg ${pkg} /
     79 else
     80 	(
     81 		cd_or_fail ${G_SRC}/${pkg}
     82 
     83 		for p in config_mk util_h
     84 		do
     85 			apply_patch final -Np0 -i \
     86 				${G_PAT}/smdev-galeb/smdev-$p.patch
     87 		done
     88 
     89 		make config.h
     90 
     91 		apply_patch final -Np0 -i \
     92 			${G_PAT}/smdev-phkr/smdev-config_h.patch
     93 		for p in scan_all usb_nodes
     94 		do
     95 			apply_patch final -Np1 -i \
     96 				${G_PAT}/smdev-phkr/$p.patch
     97 		done
     98 
     99 		cat <<! >MKPK
    100 mkpk_name()
    101 {
    102 	printf "%s" "${pkg}"
    103 }
    104 
    105 mkpk_install()
    106 {
    107 	CC=tcc
    108 	CFLAGS='-Os -static -fcommon'
    109 	LDFLAGS='-static -fcommon'
    110 	DESTDIR=/build
    111 	export AR CC CFLAGS LDFLAGS DESTDIR
    112 
    113 	make clean
    114 	make ${JN} || exit 1
    115 	make install || exit 1
    116 
    117 	cp -R ../fil/smdev-phkr/etc ../build/ || exit 1
    118 	chmod 755 ../build/etc/smdev/processdev
    119 }
    120 !
    121 		mkpk ${pkg}
    122 		#remove_dir ${G_SRC}/${pkg}
    123 		unpack_pkg ${pkg} /
    124 	) || exit 1
    125 fi
    126 timestamp=$(date +'%Y-%m-%d %T')
    127 printf "%s\t%s\t%s\n" smdev 20230417 "${timestamp}" >>${G_PKGDB}
    128 end_substep
    129 
    130 begin_substep sbase-0.2
    131 if [ -e /bin/ls ] && [ ! -L /bin/ls ]; then
    132 	msg info "%s exists, skipping %s" /bin/ls ${pkg}
    133 elif [ -e ${G_SPKG}/${pkg}.tar.xz ]; then
    134 	unpack_pkg ${pkg} /
    135 else
    136 	extract_pkg ${G_SRC} sbase-v0.2 ${pkg}.tar.gz ${pkg}
    137 	(
    138 		cd_or_fail ${G_SRC}/${pkg}
    139 
    140 		patch -p1 < patches/0001-Split-path-into-prefix-name-on-c.patch \
    141 			|| exit 1
    142 		patch -p1 < \
    143 patches/0001-Add-both-T-filelist-and-n-equivalent-of-no-recursion.patch \
    144 			|| exit 1
    145 
    146 		cat <<! >MKPK
    147 mkpk_name()
    148 {
    149 	printf "%s" "${pkg}"
    150 }
    151 
    152 mkpk_install()
    153 {
    154 	AR=ar
    155 	CC=tcc
    156 	export AR CC
    157 	SED=/sucks/bin/sed
    158 
    159 	if [ ! -e config.mk.orig ]; then
    160 		cp config.mk config.mk.orig
    161 		\${SED} -i -e "s,/usr/local,,g;s, \\<cc\\>, \${CC},g" \\
    162 		       -e "s, \\<ar\\>, \${AR},g" \\
    163 		       -e "s,^CFLAGS\\s\\+= ,&-static -fcommon ,g" \\
    164 		       -e "s,^LDFLAGS\\s\\+= ,&-static -fcommon ,g" config.mk
    165 	fi
    166 
    167 	make clean
    168 	make ${JN} || exit 1
    169 	make DESTDIR=/build install
    170 
    171 	# Overlap with dcron
    172 	rm ../build/bin/cron ../build/share/man/man1/cron.1 || true
    173 }
    174 !
    175 		mkpk ${pkg}
    176 		#remove_dir ${G_SRC}/${pkg}
    177 		unpack_pkg ${pkg} /
    178 	) || exit 1
    179 fi
    180 timestamp=$(date +'%Y-%m-%d %T')
    181 printf "%s\t%s\t%s\n" sbase 0.2 "${timestamp}" >>${G_PKGDB}
    182 end_substep
    183 
    184 begin_substep ubase-20230412
    185 if [ -x /bin/id ]; then
    186 	msg info "%s exists, skipping %s" /bin/id ${pkg}
    187 elif [ -e ${G_SPKG}/${pkg}.tar.xz ]; then
    188 	unpack_pkg ${pkg} /
    189 else
    190 	(
    191 		cd_or_fail ${G_SRC}/${pkg}
    192 
    193 		apply_patch finale -Np1 -i \
    194 			${G_PAT}/ubase-galeb/getty_dont_chmod_chown.patch
    195 		apply_patch finale -Np1 -i \
    196 			${G_PAT}/ubase-galeb/getty_show_issue.patch
    197 		apply_patch finale -Np1 -i \
    198 			${G_PAT}/ubase-galeb/login-proper-login-shell-\
    199 minus.patch
    200 		apply_patch finale -Np1 -i \
    201 			${G_PAT}/ubase-galeb/watch-react-to-ctrlc.patch
    202 		cat <<! >MKPK
    203 mkpk_name()
    204 {
    205 	printf "%s" "${pkg}"
    206 }
    207 
    208 mkpk_install()
    209 {
    210 	AR=ar
    211 	CC=tcc
    212 	export AR CC
    213 	SED=/sucks/bin/sed
    214 
    215 	if [ ! -e mknod.c.orig ]; then
    216 		cp mknod.c mknod.c.orig
    217 		\${SED} -i -z "s,<sys/types.h>\\n,&#include "\\
    218 "<sys/sysmacros.h>\\n," mknod.c
    219 	fi
    220 	if [ ! -e util.h.orig ]; then
    221 		cp util.h util.h.orig
    222 		\${SED} -i -z "s,\\"arg.h\\"\\n,&#include "\\
    223 "<sys/sysmacros.h>\\n," util.h
    224 	fi
    225 	if [ ! -e config.mk.orig ]; then
    226 		cp config.mk config.mk.orig
    227 		\${SED} -i -e "s,/usr/local,,g;s, \\<cc\\>, \${CC},g" \\
    228 		       -e "s, \\<ar\\>, \${AR},g" \\
    229 		       -e "s,^CFLAGS\\s\\+= ,&-static -fcommon ,g" \\
    230 		       -e "s,^LDFLAGS\\s\\+= ,&-static -fcommon ,g" \\
    231 		       -e "s,^LDLIBS\\s\\+= ,&-lc ,g" config.mk
    232 	fi
    233 
    234 	# - Use util-linux hwclock for now (supports more than UTC with no
    235 	#   --systz)
    236 	# - Use mount from util-linux, as ubase mount doesn't seem to support
    237 	#   ext4? TODO: More testing
    238 	if [ ! -e Makefile.orig ]; then
    239 		cp Makefile Makefile.orig
    240 		\${SED} -i -e '/^\\s\\+hwclock/d' \
    241 			   -e '/^\\s\\+mount/d' \
    242 			Makefile
    243 	fi
    244 
    245 	make clean
    246 	make ${JN} || exit 1
    247 	make DESTDIR=/build install
    248 
    249 	mkdir -p /build/var/run
    250 	:>/build/var/run/utmp
    251 	chown root:utmp /build/var/run/utmp
    252 	chmod 664 /build/var/run/utmp
    253 	chmod +s /build/bin/su
    254 }
    255 !
    256 		mkpk ${pkg}
    257 		#remove_dir ${G_SRC}/${pkg}
    258 		unpack_pkg ${pkg} /
    259 	) || exit 1
    260 fi
    261 timestamp=$(date +'%Y-%m-%d %T')
    262 printf "%s\t%s\t%s\n" ubase 20230412 "${timestamp}" >>${G_PKGDB}
    263 end_substep
    264 
    265 begin_substep svc-0.4
    266 if [ -x /bin/svc ]; then
    267 	msg info "%s exists, skipping %s" /bin/svc ${pkg}
    268 elif [ -e ${G_SPKG}/${pkg}.tar.xz ]; then
    269 	unpack_pkg ${pkg} /
    270 else
    271 	extract_pkg ${G_SRC} svc-v0.4 ${pkg}.tar.gz ${pkg}
    272 	(
    273 		cd_or_fail ${G_SRC}/${pkg}
    274 
    275 		cat <<! >MKPK
    276 mkpk_name()
    277 {
    278 	printf "%s" "${pkg}"
    279 }
    280 
    281 mkpk_install()
    282 {
    283 	cp -R bin ../build/
    284 	cp -R svc.d ../build/bin/
    285 	mkdir -p ../build/share/
    286 	cp -R man ../build/share/
    287 	mkdir -p ../build/share/doc/${pkg}
    288 	cp README.md ../build/share/doc/${pkg}/
    289 }
    290 !
    291 		mkpk ${pkg}
    292 		remove_dir ${G_SRC}/${pkg}
    293 		unpack_pkg ${pkg} /
    294 	) || exit 1
    295 fi
    296 timestamp=$(date +'%Y-%m-%d %T')
    297 printf "%s\t%s\t%s\n" svc 0.4 "${timestamp}" >>${G_PKGDB}
    298 end_substep
    299 
    300 begin_substep mkpk-0.1.16
    301 if [ -x /bin/mkpk ]; then
    302 	msg info "%s exists, skipping %s" /bin/mkpk ${pkg}
    303 elif [ -e ${G_SPKG}/${pkg}.tar.xz ]; then
    304 	unpack_pkg ${pkg} /
    305 else
    306 	extract_pkg ${G_SRC} mkpk-v0.1.16 ${pkg}.tar.gz ${pkg}
    307 	(
    308 		cd_or_fail ${G_SRC}/${pkg}
    309 
    310 		cat <<! >MKPK
    311 mkpk_name()
    312 {
    313 	printf "%s" "${pkg}"
    314 }
    315 
    316 mkpk_install()
    317 {
    318 	/plan9/bin/mk DESTDIR=/build PREFIX='' install
    319 }
    320 !
    321 		mkpk ${pkg}
    322 		remove_dir ${G_SRC}/${pkg}
    323 		unpack_pkg ${pkg} /
    324 	) || exit 1
    325 fi
    326 timestamp=$(date +'%Y-%m-%d %T')
    327 printf "%s\t%s\t%s\n" mkpk 0.1.16 "${timestamp}" >>${G_PKGDB}
    328 end_substep
    329 
    330 msg info "Creating /boot/EFI"
    331 mkdir -p ${GR}/boot/EFI
    332 mkdir -p ${GR}/boot/EFI/BOOT
    333 mkdir -p ${GR}/boot/EFI/GALEB
    334 
    335 cp_or_fail ${GR}/share/shim-15.7/fbx64.efi ${GR}/boot/EFI/BOOT/bootx64.efi
    336 #cp_or_fail ${GR}/share/shim-15.7/shimx64.efi ${GR}/boot/EFI/BOOT/bootx64.efi
    337 #cp_or_fail ${GR}/share/shim-15.7/fbx64.efi ${GR}/boot/EFI/BOOT/fbx64.efi
    338 cp_or_fail ${GR}/boot/vmlinuz ${GR}/boot/EFI/GALEB/vmlinuz
    339 
    340 msg info "makewhatis /share/man"
    341 makewhatis /share/man
    342 msg info "makewhatis /sucks/share/man"
    343 makewhatis /sucks/share/man
    344 msg info "libtool --finish /lib /sucks/lib"
    345 libtool --finish /lib /sucks/lib
    346 
    347 msg info "Generating /etc/galeb-release"
    348 cat <<! >/etc/galeb-release
    349 Galeb musl/Linux ${G_VER}
    350 !
    351 
    352 msg info "Generating /etc/hosts"
    353 cat <<! >/etc/hosts
    354 127.0.0.1	localhost.localdomain	 localhost
    355 ::1		localhost.localdomain	 localhost
    356 127.0.0.1	${GHOSTNAME}.localdomain ${GHOSTNAME}
    357 127.0.1.1	${GHOSTNAME}.localdomain ${GHOSTNAME}
    358 !
    359 
    360 msg info "Creating /etc/resolv.conf"
    361 :>/etc/resolv.conf
    362 
    363 msg info "Generating initramfs"
    364 mkinitramfs
    365 
    366 msg warn "Create a partition and copy files from here to it, then setup booting"
    367 msg warn "(see BOOTING).                                                       "
    368 
    369 end_step