Browse Source

Transitioned to using dynamic executables in initramfs

Maxim Kammerer 11 years ago
parent
commit
2a556d0886

+ 3 - 7
src/etc/portage/package.use/all

@@ -10,6 +10,7 @@ x11-misc/redshift               -gtk
 dev-lang/python                 -ncurses -readline
 app-text/hunspell               -ncurses
 sys-devel/gettext               -ncurses
+sys-fs/lvm2                     -readline
 sys-apps/gawk                   -readline
 dev-libs/libpcre                -readline
 dev-libs/libxml2                -readline
@@ -52,6 +53,7 @@ media-libs/libass               -harfbuzz
 sys-libs/ncurses                minimal
 media-libs/libsndfile           minimal
 dev-lang/spidermonkey           minimal
+sys-fs/lvm2                     device-mapper-only
 sys-apps/util-linux             -suid
 sys-apps/kmod                   -zlib -lzma
 sys-apps/pciutils               -zlib
@@ -65,7 +67,7 @@ sys-apps/kexec-tools            -zlib -lzma
 media-libs/freetype             -bzip2
 x11-libs/libXfont               -bzip2
 dev-libs/libxml2                -lzma
-sys-apps/busybox                -pam
+sys-apps/busybox                -pam -static
 sys-apps/gradm                  -pam
 net-misc/openvpn                -pam
 sys-apps/grep                   -pcre
@@ -100,9 +102,3 @@ net-wireless/wpa_supplicant     ap p2p
 app-i18n/uim                    -linguas_*
 app-text/hunspell               -linguas_* linguas_en linguas_ru
 media-fonts/terminus-font       quote ru-dv ru-i
-
-# Static libraries (for initramfs cryptsetup)
-sys-apps/util-linux             static-libs
-sys-libs/e2fsprogs-libs         static-libs
-dev-libs/popt                   static-libs
-dev-libs/libgpg-error           static-libs

+ 2 - 2
src/etc/portage/package.use/temporary

@@ -8,5 +8,5 @@ dev-libs/libxml2                python
 net-libs/libproxy               -networkmanager
 
 # initramfs cryptsetup
-sys-fs/cryptsetup               static      -udev  kernel -gcrypt
-sys-fs/lvm2                     static-libs -udev
+sys-fs/cryptsetup               -udev  kernel -gcrypt  -nls
+sys-fs/lvm2                     -udev

+ 3 - 4
src/etc/portage/savedconfig/sys-apps/busybox

@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Busybox version: 1.21.0
-# Sun Sep 22 01:51:08 2013
+# Sat Aug 23 17:39:55 2014
 #
 CONFIG_HAVE_DOT_CONFIG=y
 
@@ -55,8 +55,8 @@ CONFIG_BUSYBOX_EXEC_PATH="/bin/busybox"
 #
 # Build Options
 #
-CONFIG_STATIC=y
-# CONFIG_PIE is not set
+# CONFIG_STATIC is not set
+CONFIG_PIE=y
 # CONFIG_NOMMU is not set
 # CONFIG_BUILD_LIBBUSYBOX is not set
 # CONFIG_FEATURE_INDIVIDUAL is not set
@@ -426,7 +426,6 @@ CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
 # CONFIG_BOOTCHARTD is not set
 # CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set
 # CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set
-# CONFIG_GINIT is not set
 CONFIG_HALT=y
 # CONFIG_FEATURE_CALL_TELINIT is not set
 CONFIG_TELINIT_PATH=""

+ 27 - 8
src/root/helpers/gen-initramfs

@@ -15,6 +15,23 @@ mainobj=/usr/src/linux-main
 image=/usr/local/addons/initrd/initrd-x86.cpio
 
 
+# Prepare dynamic libraries
+for f in `awk '/^file\>/ { print $3 }' ${initramfs}`; do
+    if [ application/x-sharedlib = "`file -bL --mime-type ${f}`" ]; then
+        for lib in `ldd ${f} | grep -Eo '/[^[:blank:]]*'`; do
+            lib=`realpath ${lib}`
+            mkdir -p ${stagedir}${lib%/*}
+            cp -pdu ${lib} ${stagedir}${lib}
+        done
+    fi
+done
+
+mkdir ${stagedir}/etc
+find ${stagedir} -mindepth 1 -type d -name 'lib*' -printf '/%P\n' > ${stagedir}/etc/ld.so.conf
+ldconfig -r ${stagedir}
+rm ${stagedir}/etc/ld.so.conf
+
+
 # Prepare initramfs kernel modules
 sed -n '/^[^#]/p' ${modlst} | while read mod; do
     # Determine module names to add to initramfs (not necessarily canonical)
@@ -32,8 +49,8 @@ done | while read mod; do
 done | sed -n 's/^insmod //p' | sort -u | while read mod; do
     # Copy modules and compute their dependencies and map
     # (depmod will fail if not all dependencies are present)
-    mkdir -p     ${stagedir}`dirname ${mod}`
-    cp -p ${mod} ${stagedir}`dirname ${mod}`
+    mkdir -p     ${stagedir}${mod%/*}
+    cp -p ${mod} ${stagedir}${mod}
 done
 cp /lib/modules/${kversion}/modules.{builtin,order} ${stagedir}/lib/modules/${kversion}
 depmod -b ${stagedir} -e -F ${mainobj}/System.map ${kversion}
@@ -43,20 +60,22 @@ depmod -b ${stagedir} -e -F ${mainobj}/System.map ${kversion}
 sed -n '/^[^#]/p' ${fwlst} | while read fw; do
     find /lib/firmware/${fw} ! -type d
 done | while read fw; do
-    mkdir -p    ${stagedir}`dirname ${fw}`
-    cp -p ${fw} ${stagedir}`dirname ${fw}`
+    mkdir -p    ${stagedir}${fw%/*}
+    cp -p ${fw} ${stagedir}${fw}
 done
 
 
 # Build complete initramfs file list
 cp ${initramfs} ${stagebase}
 find ${stagedir} -mindepth 1 -type d \
-    -printf 'dir  %P    0755 0 0\n' >> ${initlst}
+    -printf 'dir   %P    0%m 0 0\n' >> ${initlst}
+find ${stagedir} -mindepth 1 -type l \
+    -printf 'slink %P %l 0%m 0 0\n' >> ${initlst}
 find ${stagedir} -mindepth 1 -type f \
-    -printf 'file %P %p 0644 0 0\n' >> ${initlst}
+    -printf 'file  %P %p 0%m 0 0\n' >> ${initlst}
 
-if [ -n "`find ${stagedir} ! -type d ! -type f`" ]; then
-    echo "Enexpected modules/firmware file types"
+if [ -n "`find ${stagedir} ! -type d ! -type f ! \( -type l -xtype f \)`" ]; then
+    echo "Unexpected library/modules/firmware file types"
     exit 1
 fi
 

+ 2 - 1
src/root/initrd/initramfs

@@ -29,4 +29,5 @@ file  sbin/veritysetup  /sbin/veritysetup         0755 0 0
 dir   proc           0755 0 0
 dir   sys            0755 0 0
 
-# Entries added in gen-initramfs below
+# Entries added in gen-initramfs below:
+# dynamic libraries, kernel modules, firmwares