Skip to content

Commit

Permalink
mkinitramfs-ll.{ba,z}sh: update and fix
Browse files Browse the repository at this point in the history
  • Loading branch information
tokiclover committed Jul 21, 2014
1 parent 6bf2140 commit 73cf2df
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 87 deletions.
77 changes: 31 additions & 46 deletions mkinitramfs-ll.bash
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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
Expand All @@ -67,36 +67,16 @@ die() {
# @FUNCTION: mktmp
# @DESCRIPTION: make tmp dir or file in ${TMPDIR:-/tmp}
# @ARG: -d|-f [-m <mode>] [-o <owner[:group]>] [-g <group>] 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
Expand Down Expand Up @@ -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]}
Expand All @@ -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;;
Expand All @@ -189,45 +173,40 @@ 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

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"
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

Expand All @@ -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"

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -403,6 +383,11 @@ for grp in ${opts[-mgrp]//:/ }; do
fi
done

for lib in $(find usr/lib/gcc -iname 'lib*'); do

This comment has been minimized.

Copy link
@simonbuehler

simonbuehler Oct 21, 2014

needs a leading /

This comment has been minimized.

Copy link
@tokiclover

tokiclover Oct 21, 2014

Author Owner

It does not because the script is looking what is actually included and makes links accordingly. Else, ld will fails retrieving the path of gcc libs (in the minimal environment).

Thanks for reviewing!

This comment has been minimized.

Copy link
@tokiclover

tokiclover Oct 21, 2014

Author Owner

(You're on antic commits (July? not that antic)... there were a huge clean with 0.13.x and then 0.14.x finished it.)

This comment has been minimized.

Copy link
@simonbuehler

simonbuehler Oct 21, 2014

in this commit it was the last change to this section, the find command throws a "not found" error as the relative path can't be found see pull request #34

ln -fs /$lib lib/${lib##*/}
ln -fs /$lib usr/lib/${lib##*/}
done

docpio || die

[[ -n "${opts[-keeptmp]}" ]] || rm -rf ${opts[-dir]}
Expand Down
70 changes: 29 additions & 41 deletions mkinitramfs-ll.zsh
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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 <mode>] [-o <owner[:group]>] [-g <group>] 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
Expand Down Expand Up @@ -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}}
Expand All @@ -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]=;
Expand Down Expand Up @@ -173,34 +158,31 @@ 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}
}

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
Expand All @@ -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 ||
Expand Down Expand Up @@ -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" }
Expand All @@ -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"
Expand Down

0 comments on commit 73cf2df

Please sign in to comment.