# Description: CRUX Linux kernel # URL: https://github.com/ruxr/CRUX # Maintainer: Roman Oreshnikov, r dot oreshnikov at gmail dot com # Depends on: coreutils dash eudev file kmod sed util-linux # Post-install: yes name=core version=3.7 release=1 REL=$(uname -r) DIR=/usr/src/linux-$REL source=(core.sh init firmware https://cdn.kernel.org/pub/linux/kernel/v${REL%%.*}.x/linux-$REL.tar.xz) unpack_source() { for F in ${source[@]}; do case $F in */*) [ -d $DIR ] && continue || rm -rf /usr/src/linux-* mkdir -p /usr/src bsdtar -C /usr/src -opxf $PKGMK_SOURCE_DIR/${F##*/};; *) [ ! -f $F ] || cp $F $SRC esac done } build() { # Create file list for initrd A= N=$( # coreutils echo /bin/{readlink,sleep} # dash echo /bin/dash # eudev echo /sbin/{udevadm,udevd} sed '/^eudev$/,/^$/{/\/udev\//!d;/\/$/d;/conf$/d;s%^%/%p};d' \ /var/lib/pkg/db # kmod echo /sbin/*mod* # sed echo /bin/sed # util-linux echo /bin/{mount,umount} /sbin/switch_root ) while [ -n "$N" ]; do set -- $N; N= for F do case " $A " in *\ $F\ *);; *) echo $F; A=$A\ $F N=$N\ $(case $(file -b $F) in *ELF*) ldd $F | sed '/\//!d;s%^[^/]*%%;s/ .*// s%/\./%/%g;s%[^/]*/\.\./%%g s%/lib64/%/lib/%';; symbolic*) readlink -f $F esac) esac done done >initrd.use # Create file tree for initrd mkdir -p core/{dev,mnt,proc,run,sys} cd core tar -cf - -T ../initrd.use | tar -xf - # Opimize eudev files sed -i '/^#/d;/^$/d;s/\(GROUP=\)"[^"]*"/\1"0"/' */udev/*.d/* mv bin/dash bin/sh install ../init . ldconfig -r $SRC/core ModFw() { make -C $DIR INSTALL_MOD_PATH=$(pwd -P) modules_install [ -f $1 ] || return 0 while read S; do case $S in /lib/firmware/*) install -Dm444 "$S" ."$S" esac done <$1 } for C in /usr/ports/CRUX/*.config /boot/config; do [ -f "$C" ] || continue cp $C $DIR/.config if [ "$C" = /boot/config ]; then C= F=$SRC/firmware R=$SRC/post-install else F=${C%.config} R=$SRC/CRUX-$version-${F##*/}-kernel.run F=$F.firmware fi # Build kernel make -C $DIR olddefconfig make -C $DIR all # Create initrd rm -rf lib/{modules,firmware} boot ModFw $F rm lib/modules/$REL/{build,source} find . | sort | cpio -o -H newc | gzip -9 >../initrd-$REL # Create a self-extracting archive mkdir -p boot/boot cd boot mv $SRC/initrd-$REL boot cp $DIR/.config boot/config-$REL cp $DIR/System.map boot/System.map-$REL cp $DIR/arch/x86/boot/bzImage boot/vmlinuz-$REL ModFw $F { sed "s/#REL#/$REL/g" $SRC/core.sh; tar -cJf - *; } >$R cd .. if [ -n "$C" ]; then cp $DIR/.config $C mv $R $PKGMK_PACKAGE_DIR fi done mkdir $PKG/boot }