Commit 07620e72 authored by Natanael Copa's avatar Natanael Copa

main/mkinitfs: upgrade to 2.5.0

parent a167e994
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=mkinitfs
pkgver=2.4.4_git20130807
pkgver=2.5.0
_ver=${pkgver%_git*}
pkgrel=0
pkgdesc="Tool to generate initramfs images for Alpine"
url=http://git.alpinelinux.org/cgit/mkinitfs
depends="busybox apk-tools>=2.0"
triggers="$pkgname.trigger=/usr/share/kernel/*"
source="http://git.alpinelinux.org/cgit/$pkgname/snapshot/$pkgname-$_ver.tar.bz2
git.patch
source="http://dev.alpinelinux.org/archive/$pkgname/$pkgname-$_ver.tar.xz
eglibc.patch
"
arch="noarch"
......@@ -45,12 +44,9 @@ package() {
cd "$_builddir"
make install DESTDIR="$pkgdir" || return 1
}
md5sums="5b897ab38204bf62ed8abf63d6b7cafd mkinitfs-2.4.4.tar.bz2
37415211a36cab0422f0fba4a1652469 git.patch
md5sums="a42ba6658e05befbc6f15da6bdebe47f mkinitfs-2.5.0.tar.xz
067649665a767ff1a08578e1f4e61524 eglibc.patch"
sha256sums="454e43149322e9cdfd7ea397480621b42169b5d78dd8eab1be46b96762fc5dc5 mkinitfs-2.4.4.tar.bz2
60824f3c2f6d633d6151b8a7aaaa168e2c6c590708c0e268f143e86da0caab72 git.patch
sha256sums="7bf3ac247575019ee3a98edbae6583fb1fe1f74a60021fd6723ea2f66ca34faa mkinitfs-2.5.0.tar.xz
2db513d1a058be0f5794dc74d00418807253d8ac850c9713ea0eeb0be5f3f65a eglibc.patch"
sha512sums="9f0e49b20a592b4315155453e4398abf710c8bae62496d4b8d281e21d13366804084be26f0303d35ef3f0bf295eba76885ca43ff452d4aea1e59f0bdce0de18e mkinitfs-2.4.4.tar.bz2
d999dd2a8222099d57a15303b760b6e1a36590e49fa0d25ad7efaaf9bb2f034c75c8e6e0170db18e74e11dd5a1747d842cea5fae0dd59dcf3e99a830e57911fa git.patch
sha512sums="8134b6a2d9324974c69878438dde3fc565a43ffdfa35b94d6e00e3a3a9160d8f6de3bb4f58e2c7b78013fba9668f2fd1f5bdf6c4068c4d6336b6c2fda0da0f62 mkinitfs-2.5.0.tar.xz
3498d9930889cd776a34863733d467b50b83679ea7f91d79963c81e4f1dc138f887ef1f2a696da6d836d1f6f862dcfd2c2fb9a55b0e3b2926e9f3fc648bc5a15 eglibc.patch"
diff --git a/group b/group
index f605ffb..5a6cbcc 100644
--- a/group
+++ b/group
@@ -24,9 +24,12 @@ sshd:x:22:
at:x:25:at
tape:x:26:root
video:x:27:root
+netdev:x:28:
+readproc:x:30:
squid:x:31:squid
gdm:x:32:gdm
xfs:x:33:xfs
+kvm:x:34:kvm
games:x:35:
named:x:40:named
mysql:x:60:
@@ -35,16 +38,17 @@ cdrw:x:80:
apache:x:81:
nut:x:84:
usb:x:85:
+avahi:x:86:
vpopmail:x:89:
users:x:100:games
ntp:x:123:
nofiles:x:200:
-qmail:x:201:
postfix:x:207:
postdrop:x:208:
smmsp:x:209:smmsp
+distcc:x:240:
slocate:x:245:
-portage:x:250:portage
+abuild:x:300:
utmp:x:406:
nogroup:x:65533:
nobody:x:65534:
diff --git a/initramfs-init.in b/initramfs-init.in
index 3c05f81..0050787 100755
--- a/initramfs-init.in
+++ b/initramfs-init.in
@@ -52,6 +52,11 @@ find_ovl() {
local ovl
local lines
+ if [ -n "$APKOVL" ]; then
+ [ -f "$mnt/$APKOVL" ] && echo "$mnt/$APKOVL"
+ return
+ fi
+
# look for apkovl's on mounted media
ovl=$( ls -1 "$mnt"/*.apkovl.tar.gz* 2>/dev/null ) || return 1
lines=$(echo "$ovl" | wc -l)
@@ -191,7 +196,7 @@ setup_inittab_console(){
esac
shift
- # skip "current console" from beign added to inittab
+ # skip "current console" from being added to inittab
[ "$tty" = "tty0" ] && continue
# do nothing if inittab already have the tty set up
@@ -240,6 +245,81 @@ start_lvm() {
lvm vgchange --ignorelockingfailure -a y >/dev/null 2>&1
}
+# determine the default interface to use if ip=dhcp is set
+# uses the first "eth" interface.
+ip_choose_if() {
+ for x in /sys/class/net/eth*; do
+ [ -e "$x" ] && echo ${x##*/} && return
+ done
+}
+
+# ip_set <device> <ip> <netmask> <gateway-ip>
+ip_set() {
+ ifconfig "$1" "$2" netmask "$3" || return $?
+ if [ -n "$4" ]; then
+ ip route add 0.0.0.0/0 via "$4" dev "$1" || return $?
+ fi
+}
+
+# if "ip=dhcp" is specified on the command line, we obtain an IP address
+# using udhcpc. we do this now and not by enabling kernel-mode DHCP because
+# kernel-model DHCP appears to require that network drivers be built into
+# the kernel rather than as modules. At this point all applicable modules
+# in the initrd should have been loaded.
+#
+# You need af_packet.ko available as well modules for your Ethernet card.
+#
+# Valid syntaxes:
+# ip=client-ip:server-ip:gw-ip:netmask:hostname:device:autoconf
+# ip=dhcp
+# "server-ip" and "hostname" are not supported here.
+#
+configure_ip() {
+ [ -n "$KOPT_ip" ] || return
+ OIFS=$IFS
+ IFS=':'
+ eval set -- $KOPT_ip
+ IFS=$OIFS
+
+ local client_ip="$1"
+ local gw_ip="$3"
+ local netmask="$4"
+ local device="$6"
+ local autoconf="$7"
+ case "$client_ip" in
+ off|none|'') return;;
+ dhcp) autoconf="dhcp";;
+ esac
+
+ [ -n "$device" ] || device=$(ip_choose_if)
+ if [ -z "$device" ]; then
+ echo "ERROR: IP requested but no network device was found"
+ return 1
+ fi
+
+ if [ "$autoconf" = "dhcp" ]; then
+ if [ ! -e /usr/share/udhcpc/default.script ]; then
+ echo "ERROR: DHCP requested but not present in initrd"
+ return 1
+ fi
+ # automatic configuration
+ ebegin "Obtaining IP via DHCP ($device)..."
+ ifconfig $device 0.0.0.0
+ udhcpc -i $device -f -q
+ eend $?
+ else
+ # manual configuration
+ [ -n "$client_ip" -a -n "$netmask" ] || return
+ ebegin "Setting IP ($device)..."
+ ip_set "$device" "$client_ip" "$netmask" "$gw_ip"
+ eend $?
+ fi
+ MAC_ADDRESS=$(cat /sys/class/net/$device/address)
+ MACHINE_UUID=$(cat /sys/class/dmi/id/product_uuid)
+ OVL_DEV="${OVL_DEV/{MAC\}/$MAC_ADDRESS}"
+ OVL_DEV="${OVL_DEV/{UUID\}/$MACHINE_UUID}"
+}
+
# resolve an uuid or symlink to the real device
resolve_dev() {
case "$1" in
@@ -275,8 +355,12 @@ find_fs_type() {
# find the dirs under ALPINE_MNT that are boot repositories
find_boot_repositories() {
- find $ALPINE_MNT -name .boot_repository -type f -maxdepth 3 \
- | sed 's:/.boot_repository$::'
+ if [ -n "$ALPINE_REPO" ]; then
+ echo "$ALPINE_REPO"
+ else
+ find $ALPINE_MNT -name .boot_repository -type f -maxdepth 3 \
+ | sed 's:/.boot_repository$::'
+ fi
}
# gotta start from somewhere :)
@@ -286,8 +370,9 @@ echo "Alpine Init $VERSION"
# acpi_osi="!Windows 2006"
eval set -- `cat /proc/cmdline`
-myopts="alpine_dev autodetect autoraid chart cryptroot debug_init dma init_args
- keep_apk_new modules ovl_dev pkgs quiet root_size root usbdelay"
+myopts="alpine_dev autodetect autoraid chart cryptroot cryptdm debug_init
+ dma init_args keep_apk_new modules ovl_dev pkgs quiet root_size root
+ usbdelay ip alpine_repo apkovl"
for opt; do
case "$opt" in
@@ -340,6 +425,8 @@ ALPINE_DEV_FS=${KOPT_alpine_dev##*:}
if [ "$ALPINE_DEV_FS" = "$ALPINE_DEV" ]; then
unset ALPINE_DEV_FS
fi
+
+# /dev/blah:ext3
if [ -n "$KOPT_ovl_dev" ] ; then
OVL_DEV=${KOPT_ovl_dev%%:*}
OVL_DEV_FS=${KOPT_ovl_dev##*:}
@@ -348,13 +435,44 @@ if [ -n "$KOPT_ovl_dev" ] ; then
fi
fi
+# http://.../blah.apkovl.tar.gz
+case "$KOPT_apkovl" in
+ http://*|https://|ftp://*)
+ OVL_DEV="$KOPT_apkovl";;
+ *:*:*) # apkovl=sda1:ext4:/subdir/host.apkovl.tar.gz
+ OVL_DEV="${KOPT_apkovl%%:*}"
+ OVL_DEV_FS="${KOPT_apkovl%:*}"
+ OVL_DEV_FS="${OVL_DEV_FS#*:}"
+ APKOVL="${KOPT_apkovl##*:}"
+ ;;
+ *:*) # apkovl=sda1:/subdir/host.apkovl.tar.gz
+ OVL_DEV=${KOPT_apkovl%%:*}
+ APKOVL=${KOPT_apkovl##*:}
+ ;;
+ *) # apkovl=subdir/host.apkovl.tar.gz
+ APKOVL="${KOPT_apkovl}"
+ ;;
+esac
+
case "$ALPINE_DEV" in
UUID=*|LABEL=*) ;;
+ nfs)
+ # nfs:IP:EXPORT
+ ALPINE_DEV_FS="$ALPINE_DEV"
+ ALPINE_DEV="${KOPT_alpine_dev:4}"
+ ;;
*) ALPINE_DEV=/dev/$ALPINE_DEV ;;
esac
+# The following values are supported:
+# alpine_repo=auto -- default, search for .boot_repository
+# alpine_repo=http://... -- network repository
+ALPINE_REPO=${KOPT_alpine_repo}
+[ "$ALPINE_REPO" = "auto" ] && ALPINE_REPO=
+
# look for standard mountpoint locations
ALPINE_MNT=$(find_mnt $ALPINE_DEV /etc/fstab)
+[ -z "$ALPINE_MNT" ] && [ "$ALPINE_DEV_FS" = nfs ] && ALPINE_MNT=/media/alpine
[ -z "$ALPINE_MNT" ] && ALPINE_MNT=/media/${ALPINE_DEV##*/}
# hide kernel messages
@@ -428,6 +546,9 @@ if [ -z "${ALPINE_DEV##*usb*}" ]; then
wait_usb
fi
+# IP. This shouldn't be needed if root= is set.
+configure_ip
+
# incase we have alpine_dev on raid device...
start_raid
start_cryptsetup
@@ -444,6 +565,7 @@ fi
if [ -n "$ALPINE_DEV_FS" ]; then
mount_opts="-t $ALPINE_DEV_FS"
+ [ "$ALPINE_DEV_FS" = "nfs" ] && mount_opts="$mount_opts -o nolock"
fi
retry_mount -o ro $mount_opts $ALPINE_DEV $ALPINE_MNT >/dev/null 2>&1
@@ -462,19 +584,27 @@ if [ -n "$KOPT_root_size" ]; then
fi
mount -t tmpfs $root_opts tmpfs $sysroot
-if [ -n "$OVL_DEV" ]; then
- mkdir -p /media/$OVL_DEV
- unset mount_opts
- if [ -n "$OVL_DEV_FS" ]; then
- mount_opts="-t $OVL_DEV_FS"
- fi
-
- retry_mount -o ro $mount_opts /dev/$OVL_DEV /media/$OVL_DEV \
- >/dev/null 2>&1
- ovl=$(find_ovl /media/$OVL_DEV)
-else
- find_ovl_dev
-fi
+case "$OVL_DEV" in
+ '')
+ find_ovl_dev
+ ;;
+ http://*|https://*|ftp://*)
+ ovl=/tmp/boot.apkovl.tar.gz
+ wget -O "$ovl" "$OVL_DEV" || ovl=
+ ;;
+ *)
+ mkdir -p /media/$OVL_DEV
+ unset mount_opts
+ if [ -n "$OVL_DEV_FS" ]; then
+ mount_opts="-t $OVL_DEV_FS"
+ fi
+
+ retry_mount -o ro $mount_opts /dev/$OVL_DEV /media/$OVL_DEV \
+ >/dev/null 2>&1
+ ovl=$(find_ovl /media/$OVL_DEV)
+ ;;
+esac
+
if ! [ -f "$ovl" ]; then
ovl=$(find_ovl $ALPINE_MNT)
fi
@@ -508,7 +638,8 @@ if [ -f "$ovl" ]; then
-e 's|:/etc/init.d/rcK|:/sbin/rc shutdown|' \
"$sysroot"/etc/inittab
fi
-else
+fi
+if [ -f "$sysroot/etc/.default_boot_services" -o ! -f "$ovl" ]; then
# add some boot services by default
rc_add devfs sysinit
rc_add dmesg sysinit
@@ -524,6 +655,8 @@ else
rc_add mount-ro shutdown
rc_add killprocs shutdown
rc_add savecache shutdown
+
+ rm -f "$sysroot/etc/.default_boot_services"
fi
if [ -f $sysroot/etc/fstab ]; then
@@ -569,7 +702,14 @@ ebegin "Installing packages to root filesystem"
if [ "$KOPT_chart" = yes ]; then
pkgs="$pkgs acct"
fi
-apkflags="--initdb --progress --force --no-network"
+
+apkflags="--initdb --progress --force"
+if [ -z "$ALPINE_REPO" ]; then
+ apkflags="$apkflags --no-network"
+else
+ apkflags="$apkflags --update-cache"
+fi
+
if [ -n "$KOPT_quiet" ]; then
apkflags="$apkflags --quiet"
fi
@@ -580,7 +720,7 @@ if [ "$KOPT_keep_apk_new" != yes ]; then
fi
if [ -n "$ovlfiles" ]; then
- apk add --root $sysroot $repo_opt $apkflags $pkgs <$ovlfiles>/dev/null
+ apk add --root $sysroot $repo_opt $apkflags $pkgs <$ovlfiles>/dev/null
else
apk add --root $sysroot $repo_opt $apkflags $pkgs >/dev/null
fi
@@ -613,11 +753,14 @@ fi
setup_inittab_console $CONSOLE
# copy alpine release info
-if ! [ -f "$sysroot"/etc/alpine-release ]; then
+if ! [ -f "$sysroot"/etc/alpine-release ] && [ -f $ALPINE_MNT/.alpine-release ]; then
cp $ALPINE_MNT/.alpine-release $sysroot/
ln -sf /.alpine-release $sysroot/etc/alpine-release
fi
+! [ -f "$sysroot"/etc/resolv.conf ] && [ -f /etc/resolv.conf ] && \
+ cp /etc/resolv.conf "$sysroot"/etc
+
# setup bootchart for switch_root
chart_init=""
if [ "$KOPT_chart" = yes ]; then
diff --git a/modules.d/usb b/modules.d/usb
index 0e9a81e..acf6b6f 100644
--- a/modules.d/usb
+++ b/modules.d/usb
@@ -1,5 +1,6 @@
kernel/drivers/usb/host
kernel/drivers/usb/storage
kernel/drivers/hid/usbhid
+kernel/drivers/hid/hid-generic.ko
kernel/fs/fat
kernel/fs/nls
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment