diff --git a/Makefile b/Makefile index b07a0cd..8c52b46 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,9 @@ DEPENDS = coreutils,cpio,eudev,gzip,perl,psmisc,sed,util-linux ARCH = x86_64 -URL = +URL = http://snaplinux.org +REPO = core +BRIEF = Scripts to build initrd image DESC = This package includes scripts to build an initrd image SNAPVER = 0 diff --git a/SNAP/usher b/SNAP/usher index 0257f7c..b6f93d0 100755 --- a/SNAP/usher +++ b/SNAP/usher @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh set -e @@ -7,14 +7,14 @@ case $1 in exit 0 ;; postinst) - if [ ! -f ${TARGET}/usr/share/mkinitramfs/bins/default ]; then - cp ${TARGET}/usr/share/mkinitramfs/default-bins \ - ${TARGET}/usr/share/mkinitramfs/bins/default + if [ ! -f /usr/share/mkinitramfs/bins/default ]; then + cp /usr/share/mkinitramfs/default-bins \ + /usr/share/mkinitramfs/bins/default fi - if [ ! -f ${TARGET}/usr/share/mkinitramfs/mods/default ]; then - cp ${TARGET}/usr/share/mkinitramfs/default-mods \ - ${TARGET}/usr/share/mkinitramfs/mods/default + if [ ! -f /usr/share/mkinitramfs/mods/default ]; then + cp /usr/share/mkinitramfs/default-mods \ + /usr/share/mkinitramfs/mods/default fi ;; prerm) diff --git a/SRC/mkinitramfs/init b/SRC/mkinitramfs/init index 5eacefe..e572a23 100755 --- a/SRC/mkinitramfs/init +++ b/SRC/mkinitramfs/init @@ -18,9 +18,16 @@ rorw="ro" rootflags= rootdev= +[ -d /dev ] || mkdir -m 0755 /dev +[ -d /root ] || mkdir -m 0700 /root +[ -d /sys ] || mkdir /sys +[ -d /proc ] || mkdir /proc +[ -d /tmp ] || mkdir /tmp +mkdir -p /var/lock + mount -n -t devtmpfs devtmpfs /dev -mount -n -t proc proc /proc -mount -n -t sysfs sysfs /sys +mount -t proc -o nodev,noexec,nosuid proc /proc +mount -t sysfs -o nodev,noexec,nosuid sysfs /sys mount -n -t tmpfs tmpfs /run read -r cmdline < /proc/cmdline @@ -71,15 +78,24 @@ case "$root" in ;; esac +echo > /sys/kernel/uevent_helper /sbin/udevd --daemon --resolve-names=never udevadm trigger udevadm settle +[ -n "$rootdelay" ] && sleep "$rootdelay" [ -f /etc/mdadm.conf ] && mdadm -As [ -x /sbin/vgchange ] && /sbin/vgchange --sysinit -a y -[ -n "$zfs" ] && zpool import rpool -N || error "Failed importing rpool" -[ -n "$rootdelay" ] && sleep "$rootdelay" -[ -n "$rootflags" ] && rootflags="$rootflags,$rorw" || rootflags="$rorw" + +if [ -n "$zfs" ]; then + zpool import rpool -N || error "Failed importing rpool" +fi + +if [ -n "$rootflags" ]; then + rootflags="$rootflags,$rorw" +else + rootflags="$rorw" +fi mkdir /.root @@ -87,6 +103,6 @@ if ! mount -n -t "$rootfstype" -o "$rootflags" "$rootdev" /.root ; then error "Failed to mount root filesystem" fi -killall -w udevd +udevadm control --exit exec switch_root /.root "$init" "$@" diff --git a/SRC/mkinitramfs/mkinitramfs b/SRC/mkinitramfs/mkinitramfs index 0e74b13..c23b191 100755 --- a/SRC/mkinitramfs/mkinitramfs +++ b/SRC/mkinitramfs/mkinitramfs @@ -6,7 +6,7 @@ use warnings; use POSIX qw( uname ); use Data::Dumper; -use constant VERSION => '0.4'; +use constant VERSION => '0.5'; sub build { my $kernel = shift; @@ -22,6 +22,12 @@ sub build { mkdir( "$tmpdir/$_", 0755 ) || die( "mkdir(): $tmpdir/$_: $!" ); } + if ( -f '/etc/hostid' ) { + if ( system( "cp -p /etc/hostid $tmpdir/etc" ) ) { + die( "Failed copying hostid" ); + } + } + symlink( 'lib', "$tmpdir/lib64" ) || die( "symlynk(): $tmpdir/lib64: $!" ); symlink( '/proc/mounts', "$tmpdir/etc/mtab" ) || @@ -71,7 +77,7 @@ sub build { if ( system( "cp -p /etc/modprobe.d/* $tmpdir/etc/modprobe.d" ) ) { die( "Failed copying data from modprobe.d\n" ); } - if ( system( "cp -rp /etc/udev/{rules.d,udev.conf}" + if ( system( "cp -rp /etc/udev/rules.d /etc/udev/udev.conf" . " $tmpdir/etc/udev" ) ) { die( "Failed copying udev data\n" ); } @@ -87,8 +93,8 @@ sub build { } if ( system( "cp /lib/modules/$kernel->{'version'}/" - . "modules.{builtin,order} $tmpdir/lib/modules/" - . "$kernel->{'version'}" ) ) { + . "modules.builtin /lib/modules/$kernel->{'version'}/modules.order" + . " $tmpdir/lib/modules/$kernel->{'version'}" ) ) { die( "Failed copying module data\n" ); } if ( system( "depmod -b $tmpdir $kernel->{'version'}" ) ) {