diff --git a/mkinitramfs-ll.bash b/mkinitramfs-ll.bash index d2fa90b..6fd624e 100755 --- a/mkinitramfs-ll.bash +++ b/mkinitramfs-ll.bash @@ -1,5 +1,5 @@ #!/bin/bash -# $Id: mkinitramfs-ll/mkinitramfs-ll.bash,v 0.12.8 2014/07/07 12:33:03 -tclover Exp $ +# $Id: mkinitramfs-ll/mkinitramfs-ll.bash,v 0.12.8 2014/07/15 12:33:03 -tclover Exp $ basename=${0##*/} # @FUNCTION: usage # @DESCRIPTION: print usages message @@ -43,22 +43,22 @@ exit $? # @FUNCTION: error # @DESCRIPTION: print error message to stdout -error() { +function error() { echo -ne " \e[1;31m* \e[0m$@\n" } # @FUNCTION: info # @DESCRIPTION: print info message to stdout -info() { +function info() { echo -ne " \e[1;32m* \e[0m$@\n" } # @FUNCTION: warn # @DESCRIPTION: print warning message to stdout -warn() { +function warn() { echo -ne " \e[1;33m* \e[0m$@\n" } # @FUNCTION: die # @DESCRIPTION: call error() to print error message before exiting -die() { +function die() { local ret=$? error "$@" exit $ret @@ -67,36 +67,16 @@ die() { # @FUNCTION: mktmp # @DESCRIPTION: make tmp dir or file in ${TMPDIR:-/tmp} # @ARG: -d|-f [-m ] [-o ] [-g ] TEMPLATE -mktmp() { - local type mode owner group tmp TMP=${TMPDIR:-/tmp} - while [[ $# > 1 ]]; do - case $1 in - -d) type=dir; shift;; - -f) type=file; shift;; - -m) mode=$2; shift 2;; - -o) owner="$2"; shitf 2;; - -g) group=$2; shift 2;; - *) tmp="$1"; shift;; - esac - done - [[ -n "$tmp" ]] && TMP+=/"$tmp"-XXXXXX || - die "mktmp: no $tmp TEMPLATE provided" - if [[ "$type" == "dir" ]]; then - mkdir -p ${mode:+-m$mode} "$TMP" || - die "mktmp: failed to make $TMP" - else - mkdir -p ${TMP%*/} && - echo >"$TMP" || die "mktmp: failed to make $TMP" - [[ -n "$mode" ]] && chmod $mode "$TMP" - fi - [[ -n "$owner" ]] && chown "$owner" "$TMP" - [[ -n "$group" ]] && chgrp "$group" "$TMP" - echo "$TMP" +function mktmp() { + local tmp=${TMPDIR:-/tmp}/$1-XXXXXX + mkdir -p ${mode:+-m$mode} $tmp || + die "mktmp: failed to make $tmp" + echo "$tmp" } # @FUNCTION: adn # @DESCRIPTION: ADd the essential Nodes to be able to boot -adn() { +function adn() { [[ -c dev/console ]] || mknod -m 600 dev/console c 5 1 || die [[ -c dev/urandom ]] || mknod -m 666 dev/urandom c 1 9 || die [[ -c dev/random ]] || mknod -m 666 dev/random c 1 8 || die @@ -167,7 +147,7 @@ done [[ -n "${opts[-prefix]}" ]] || opts[-prefix]=initramfs- # @VARIABLE: opts[-usrdir] # @DESCRIPTION: usr dir path, to get extra files -[[ -n "${opts[-usrdir]}" ]] || opts[-usrdir]=./usr +[[ -n "${opts[-usrdir]}" ]] || opts[-usrdir]="${PWD}"/usr # @VARIABLE: opts[-initrmafs] # @DESCRIPTION: full to initramfs compressed image opts[-initramfs]=/boot/${opts[-prefix]}${opts[-kv]} @@ -176,6 +156,10 @@ opts[-initramfs]=/boot/${opts[-prefix]}${opts[-kv]} # @VARIABLE: opts[-arch] # @DESCRIPTION: kernel architecture [[ -n "${opts[-arch]}" ]] || opts[-arch]=$(uname -m) +# @VARIABLE: opts[-tmpdir] +# @DESCRIPTION: tmp dir where to generate initramfs +# an initramfs compressed image +opts[-tmpdir]="$(mktmp ${opts[-initramfs]/*\/})" case ${opts[-comp]%% *} in bzip2) opts[-initramfs]+=.cpio.bz2;; @@ -189,26 +173,20 @@ esac # @FUNCTION: docpio # @DESCRIPTION: generate an initramfs image -docpio() { +function docpio() { find . -print0 | cpio -0 -ov -Hnewc | ${opts[-comp]} > ${opts[-initramfs]} } if [[ -n ${opts[-regen]} ]]; then - opts[-tmpdir]=${TMPDIR:-/tmp}/${opts[-initramfs]}-XXXXXX [[ -d ${opts[-tmpdir]} ]] || die "${opts[-tmpdir]}: no old initramfs dir" echo ">>> regenerating ${opts[-initramfs]}..." pushd ${opts[-tmpdir]} || die - cp -af ${opts[-usrdir]}/lib/mkinitramfs-ll/functions usr/lib/mkinitramfs-ll && + cp -af ${opts[-usrdir]}/lib/mkinitramfs-ll/functions lib/mkinitramfs-ll && cp -af ${opts[-usrdir]}/../init . && chmod 775 init || die docpio || die echo ">>> regenerated ${opts[-initramfs]}..." && exit fi -# @VARIABLE: opts[-tmpdir] -# @DESCRIPTION: tmp dir where to generate initramfs -# an initramfs compressed image -opts[-tmpdir]="$( mktmp -d ${opts[-initramfs]##*/}-XXXXXX)" - if [[ -f ${opts[-initramfs]} ]]; then mv ${opts[-initramfs]}{,.old} fi @@ -216,10 +194,11 @@ fi echo ">>> building ${opts[-initramfs]}..." pushd "${opts[-tmpdir]}" || die +rm -r * if [[ -d "${opts[-usrdir]}" ]]; then cp -ar "${opts[-usrdir]}" . && rm -f usr/README* || die - mv -f {usr/,}root 1>/dev/null 2>&1 && - mv -f {usr/,}etc 1>/dev/null 2>&1 && + mv -f {usr/,}root && + mv -f {usr/,}etc && mv -f usr/lib lib${opts[-arc]} || die else die "${opts[-usrdir]} dir not found" @@ -227,7 +206,7 @@ fi mkdir -p usr/{{,s}bin,share/{consolefonts,keymaps},lib${opts[-arc]}} || die mkdir -p {,s}bin dev proc sys newroot mnt/tok etc/{mkinitramfs-ll,splash} || die -mkdir -p run lib${opts[-arc]}/{/${opts[-kv]},mkinitramfs-ll} || die +mkdir -p run lib${opts[-arc]}/{modules/${opts[-kv]},mkinitramfs-ll} || die ln -sf lib{${opts[-arc]},} && pushd usr && ln -sf lib{${opts[-arc]},} && popd || die @@ -238,7 +217,8 @@ if [[ $(echo ${opts[-kv]} | cut -d'.' -f1 ) -eq 3 ]] && mknod -m 600 dev/loop-control c 10 237 || die fi -cp -a "${opts[-workdir]}"/init . && chmod 775 init && mkdir -pm700 root || die +cp -a "${opts[-usrdir]}"/../init . && chmod 775 init || die +[[ -d root ]] && chmod 0700 root || mkdir -m700 root || die cp -af {/,}lib/modules/${opts[-kv]}/modules.dep || die "failed to copy modules.dep" @@ -371,8 +351,8 @@ dobin() { bin=$(which $(readlink ${bin})) && cp -au {,.}${bin} || die fi if [[ "$(ldd ${bin})" != *"not a dynamic executable"* ]]; then - for lib in $(ldd ${bin} | tail -n+2 | sed -e 's:li.*=>\ ::g' -e 's:\ (.*)::g') - do mkdir -p .${lib%/*} && cp -adH {,.}${lib} || die + for lib in $(ldd ${bin} | tail -n+2 | sed -e '/use-linker.*$/d' -e 's:li.*=>\ ::g' -e 's:\ (.*)::g') + do mkdir -p .${lib%/*} && cp -aL {,.}${lib} || die done warn "${bin} is not a static binary." fi @@ -403,6 +383,11 @@ for grp in ${opts[-mgrp]//:/ }; do fi done +for lib in $(find usr/lib/gcc -iname 'lib*'); do + ln -fs /$lib lib/${lib##*/} + ln -fs /$lib usr/lib/${lib##*/} +done + docpio || die [[ -n "${opts[-keeptmp]}" ]] || rm -rf ${opts[-dir]} diff --git a/mkinitramfs-ll.zsh b/mkinitramfs-ll.zsh index 1a044dd..14ab74c 100755 --- a/mkinitramfs-ll.zsh +++ b/mkinitramfs-ll.zsh @@ -1,5 +1,5 @@ #!/bin/zsh -# $Id: mkinitramfs-ll/mkinitramfs-ll.zsh,v 0.12.8 2014/07/07 11:40:11 -tclover Exp $ +# $Id: mkinitramfs-ll/mkinitramfs-ll.zsh,v 0.12.8 2014/07/15 11:40:11 -tclover Exp $ basename=${(%):-%1x} # @FUNCTION: usage @@ -54,39 +54,20 @@ warn() { print -P " %B%F{red}*%b%f $@" } # @FUNCTION: die # @DESCRIPTION: call error() to print error message before exiting die() { + local ret=$? error $@ - exit 1 + exit $ret } alias die='die "%F{yellow}%1x:%U${(%):-%I}%u:%f" $@' # @FUNCTION: mktmp # @DESCRIPTION: make tmp dir or file in ${TMPDIR:-/tmp} # @ARG: -d|-f [-m ] [-o ] [-g ] TEMPLATE -function mktmp() { - local type mode owner group tmp TMP=${TMPDIR:-/tmp} - while [[ $# > 1 ]] { - case $1 in - -d) type=dir; shift;; - -f) type=file; shift;; - -m) mode=$2; shift 2;; - -o) owner=$2; shitf 2;; - -g) group=$2; shift 2;; - *) tmp=$1; shift;; - esac - } - [[ -n $tmp ]] && TMP+=/$tmp-XXXXXX || - die "mktmp: no $tmp TEMPLATE provided" - if [[ $type == "dir" ]] { - mkdir -p ${mode:+-m$mode} $TMP || - die "mktmp: failed to make $TMP" - } else { - mkdir -p $TMP:h && - echo >$TMP || die "mktmp: failed to make $TMP" - [[ -n $mode ]] && chmod $mode $TMP - } - [[ -n $owner ]] && chown $owner $TMP - [[ -n $group ]] && chgrp $group $TMP - print "$TMP" +mktmp() { + local tmp=${TMPDIR:-/tmp}/$1-XXXXXX + mkdir -p ${mode:+-m$mode} $tmp || + die "mktmp: failed to make $tmp" + print "$tmp" } # @FUNCTION: adn @@ -132,7 +113,7 @@ if [[ -f mkinitramfs-ll.conf ]] { source mkinitramfs-ll.conf : ${opts[-prefix]:=${opts[-p]:-initramfs-}} # @VARIABLE: opts[-usrdir] # @DESCRIPTION: usr dir path, to get extra files -: ${opts[-usrdir]:=${opts[-d]:-./usr}} +: ${opts[-usrdir]:=${opts[-d]:-${PWD}/usr}} # @VARIABLE: opts[-comp] # @DESCRIPTION: compression command : ${opts[-comp]:=${opts[-c]:-xz -9 --check=crc32}} @@ -142,6 +123,10 @@ if [[ -f mkinitramfs-ll.conf ]] { source mkinitramfs-ll.conf # @VARIABLE: opts[-arch] # @DESCRIPTION: kernel architecture : ${opts[-arch]:=$(uname -m)} +# @VARIABLE: opts[-tmpdir] +# @DESCRIPTION: tmp dir where to generate initramfs +# an initramfs compressed image +: ${opts[-tmpdir]:=$(mktmp ${opts[-initramfs]:t})} if [[ -n ${(k)opts[-a]} ]] || [[ -n ${(k)opts[-all]} ]] { opts[-f]=; opts[-g]=; opts[-l]=; opts[-q]=; opts[-L]=; opts[-y]=; @@ -173,21 +158,15 @@ esac docpio() { find . -print0 | cpio -0 -ov -Hnewc | ${=opts[-comp]} > ${opts[-initramfs]} } if [[ -n ${(k)opts[-regen]} ]] || [[ -n ${(k)opts[-r]} ]] { - opts[-tmpdir]=${TMPDIR:-/tmp}/${opts[-initramfs]}-XXXXXX [[ -d ${opts[-tmpdir]} ]] || die "${opts[-tmpdir]} no old dir found" print -P "%F{green}>>> regenerating ${opts[-initramfs]}...%f" pushd ${opts[-tmpdir]} || die - cp -af ${opts[-usrdir]}/lib/mkinitramfs-ll/functions usr/lib/mkinitramfs-ll && + cp -af ${opts[-usrdir]}/lib/mkinitramfs-ll/functions lib/mkinitramfs-ll && cp -af ${opts[-usrdir]}/../init . && chmod 775 init || die docpio || die print -P "%F{green}>>> regenerated ${opts[-initramfs]}...%f" && exit } -# @VARIABLE: opts[-tmpdir] -# @DESCRIPTION: tmp dir where to generate initramfs -# an initramfs compressed image -: ${opts[-tmpdir]:=$(mktmp -d ${opts[-initramfs]:t}-XXXXXX)} - if [[ -f ${opts[-initramfs]} ]] { mv ${opts[-initramfs]}{,.old} } @@ -195,12 +174,15 @@ if [[ -f ${opts[-initramfs]} ]] { print -P "%F{green}>>> building ${opts[-initramfs]}...%f" pushd ${opts[-tmpdir]} || die "no ${opts[-tmpdir]} tmpdir found" +rm -r * if [[ -d ${opts[-usrdir]} ]] { cp -ar ${opts[-usrdir]} . && rm -f usr/README* || die - mv -f {usr/,}root 1>/dev/null 2>&1 && - mv -f {usr/,}etc 1>/dev/null 2>&1 && + mv -f {usr/,}root && + mv -f {usr/,}etc && mv -f usr/lib lib${opts[-arc]} || die -} else { die "${opts[-usrdir]} dir not found" } +} else { + die "${opts[-usrdir]} dir not found" +} mkdir -p usr/{{,s}bin,share/{consolefonts,keymaps},lib${opts[-arc]}} || die mkdir -p {,s}bin dev proc sys newroot mnt/tok etc/{mkinitramfs-ll,splash} || die mkdir -p run lib${opts[-arc]}/{modules/${opts[-kv]},mkinitramfs-ll} || die @@ -215,9 +197,10 @@ if [[ ${${(pws:.:)opts[-kv]}[1]} -eq 3 ]] && } cp -af ${opts[-usrdir]}/../init . && chmod 775 init || die +[[ -d root ]] && chmod 0700 root || mkdir -m700 root || die for mod (${(pws,:,)opts[-M]} ${(pws,:,)opts[-module]}) { - cp -a ${opts[-usrdir]:h}/modules/*$mod* etc/mkinitramfs-ll.d/ + cp -a ${opts[-usrdir]:h}/modules/*$mod* lib/mkinitramfs-ll/ opts[-mgrp]+=:$mod } cp -ar {/,}lib/modules/${opts[-kv]}/modules.dep || @@ -334,8 +317,8 @@ dobin() { bin=$(which $(readlink ${bin})) && cp -au {,.}${bin} || die } if [[ $(ldd ${bin}) != *"not a dynamic executable" ]] { - for lib ($(ldd ${bin} | tail -n+2 | sed -e 's:li.*=>\ ::g' -e 's:\ (.*)::g')) - mkdir -p .${lib:h} && cp -adH {,.}${lib} || die + for lib ($(ldd ${bin} | tail -n+2 | sed -e '/use-linker.*$/d' -e 's:li.*=>\ ::g' -e 's:\ (.*)::g')) + mkdir -p .${lib:h} && cp -aL {,.}${lib} || die warn "${bin} is not a static binary." } } else { warn "${bin} binary doesn't exist" } @@ -355,6 +338,11 @@ for grp (${(pws,:,)opts[-mgrp]}) for mod (${(pws,:,)opts[-m${grp}]}) domod ${mod} && echo ${mod} >>etc/mkinitramfs-ll/${grp} +for lib (/usr/lib/gcc/**/lib*.so*) { + ln -fs $lib lib/$lib:t + ln -fs $lib usr/lib/$lib:t +} + docpio || die print -P "%F{green}>>> ${opts[-initramfs]} initramfs built%f"