mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-pkg
synced 2026-01-15 03:53:32 +01:00
generate-boot-medium.sh: Add file
This commit is contained in:
parent
b8f21f8448
commit
5f3d5dda81
1 changed files with 127 additions and 0 deletions
127
scripts/generate-boot-medium.sh
Normal file
127
scripts/generate-boot-medium.sh
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
#!/bin/sh
|
||||
|
||||
myname=`basename $0`
|
||||
cwd=`pwd`
|
||||
boot_dir=`mktemp -d "/tmp/$myname""_XXXXXX"`
|
||||
|
||||
make_initrd()
|
||||
{
|
||||
template=$1
|
||||
modules_dir=$2
|
||||
uname_r=$3
|
||||
target=$4
|
||||
|
||||
dir=`mktemp -d "/tmp/$myname""_XXXXXX"`
|
||||
|
||||
mkdir $dir/source
|
||||
|
||||
cat $1 | (cd $dir/source; gunzip | cpio -i)
|
||||
cp -rp $dir/source $dir/target
|
||||
rm -rf $dir/target/lib/modules/*
|
||||
|
||||
(
|
||||
cd $dir/source
|
||||
find . -name '*.ko'
|
||||
) | while read tmpl_relpath; do
|
||||
|
||||
mod_name=`basename $tmpl_relpath`
|
||||
source_mod=`cd $modules_dir; find . -name $mod_name`
|
||||
|
||||
if [ ! "$source_mod" ]; then
|
||||
echo "warning: module $mod_name not found in $modules_dir" >&2
|
||||
# exit 1
|
||||
else
|
||||
mod_relpath=`dirname $source_mod`
|
||||
target_path=$dir/target/lib/modules/$uname_r/$mod_relpath
|
||||
echo "copying $mod_name from $mod_relpath to $target_path"
|
||||
mkdir -p $target_path
|
||||
cp $modules_dir/$source_mod $target_path
|
||||
|
||||
fi
|
||||
done
|
||||
|
||||
(cd $dir/target; find . | cpio -co) | gzip -9 > $target
|
||||
|
||||
rm -rf $dir
|
||||
}
|
||||
|
||||
config_section()
|
||||
{
|
||||
output_file=
|
||||
add_boot_dir=
|
||||
add_modules_basedir=
|
||||
root_dev=
|
||||
initrd_template=
|
||||
sed -n "/\[$2\]/,/\[/ p" $1 | sed '/]/ d; s/#.*//; /./ !d; s/ *= */=/; s/=\(.*\)/="\1"/'
|
||||
}
|
||||
|
||||
boot_sections()
|
||||
{
|
||||
sed '/\[boot\..*\]/ !d; s/\[boot\.//; s/\].*//' $1
|
||||
}
|
||||
|
||||
|
||||
name_filter()
|
||||
{
|
||||
echo $1 | tr [A-Z] [a-z] | sed 's/\.tar\.gz/.tgz/; s/-/_/g; s/\([^.]*\)\.\([^.]*\)$$/\1@\2/; s/\./_/g; s/@/./'
|
||||
}
|
||||
|
||||
#make_initrd $template $modules_dir
|
||||
|
||||
set -- `getopt 'f:o:' $*`
|
||||
|
||||
while [ "$1" != -- ]; do
|
||||
case $1 in
|
||||
-f)
|
||||
opt_config_file="$2"
|
||||
shift
|
||||
;;
|
||||
-o)
|
||||
opt_output_file="$2"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
usage;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
shift
|
||||
|
||||
eval `config_section $opt_config_file global`
|
||||
|
||||
echo DEFAULT menu.c32 > $boot_dir/isolinux.cfg
|
||||
echo PROMPT 0 >> $boot_dir/isolinux.cfg
|
||||
|
||||
for sec in `boot_sections $opt_config_file`; do
|
||||
echo "+ processing section boot.$sec"
|
||||
eval `config_section $opt_config_file boot.$sec`
|
||||
if [ "$add_boot_dir" ]; then
|
||||
echo "+ adding boot directory $add_boot_dir"
|
||||
kernels=`file $add_boot_dir/* | grep -ie 'linux.*kernel' | sed 's/:.*//'`
|
||||
for kernel in $kernels; do
|
||||
kernel_version=`basename $kernel | sed 's/vmlinuz-//'`
|
||||
echo "+ processing kernel $kernel (version $kernel_version)"
|
||||
|
||||
# create initrd
|
||||
if [ "$initrd_template" ]; then
|
||||
echo "+ creating initial ram disk from template $initrd_template"
|
||||
make_initrd $initrd_template $add_modules_basedir/$kernel_version $kernel_version $boot_dir/initrd-$kernel_version
|
||||
fi
|
||||
|
||||
# create isolinux.cfg
|
||||
kernel_version_iso=`name_filter $kernel_version`
|
||||
echo "LABEL $kernel_version" >> $boot_dir/isolinux.cfg
|
||||
echo "KERNEL vmlinuz-$kernel_version_iso" >> $boot_dir/isolinux.cfg
|
||||
echo "APPEND initrd=initrd_$kernel_version_iso root=$root_dev" >> $boot_dir/isolinux.cfg
|
||||
done
|
||||
fi
|
||||
done
|
||||
|
||||
cp $* $boot_dir
|
||||
|
||||
mkisofs -l --iso-level 2 -o $opt_output_file \
|
||||
-b isolinux.bin -c boot.cat \
|
||||
-no-emul-boot -boot-load-size 4 -boot-info-table \
|
||||
$boot_dir
|
||||
|
||||
rm -rf $boot_dir
|
||||
Loading…
Add table
Add a link
Reference in a new issue