Fix support of lzma compressin for initramfs

atratsevskiy
root 15 years ago
parent 140dd9806e
commit 5813fb15e9

@ -0,0 +1,11 @@
# ChangeLog for sys-kernel/calckernel
# Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2
# $Header: $
*calckernel-3.4.10.903-r16 (24 Nov 2009)
24 Nov 2009; Mike Hirecky (mhiretskiy) <mh@calculate.ru>
-calckernel-3.4.10.903-r15.ebuild, +calckernel-3.4.10.903-r16.ebuild,
+files/calckernel-3.4.10.903-r16.patch, +metadata.xml:
Fix detecting kernel option lzma compression

@ -1,4 +1,5 @@
AUX calckernel-3.4.10.903-r15.patch 9850 RMD160 59a18be3318a798910a22f1ee03062167074578c SHA1 918783f6615a8cbee2475bf3989b93db13fe4021 SHA256 a5c036b0476f171daef09a61970d6727bb05bf30f6b85df42c60c3ae0eb68eb0
AUX calckernel-3.4.10.903-r16.patch 9845 RMD160 e90f4b42f17eab0e89bd5de251ffdfba93f32d23 SHA1 891e11dfa0fe1305c388221bc23532c30434ded7 SHA256 8f0ac2a579d881fb156e098197f5c5fb2fcc65f0b67a7f1fc7c645479b00ba6b
AUX calckernel-3.4.10.903-r2.patch 3217 RMD160 2af53fea69a8c4bb7295326c8dcca874186163eb SHA1 6988125ac5ec2788aeb24b39b9648edec2fcc09d SHA256 787528254f20544155f00fd36626d11eee681350a4217edfac22e6e21d68eee1
AUX calckernel-3.4.10.903-r5.patch 4900 RMD160 c06016481281a2a056f31cd1c2796ed783627997 SHA1 96bc1c4466598c33117b2a018a66631f9e5132a8 SHA256 c5ad1a6f4bc16ed3971bed3179a629445bb88cd2267facb261502454b3ab2d94
AUX calckernel-3.4.10.903-r6.patch 4906 RMD160 166a07f41f72363750f94249c0d14a0e64ede600 SHA1 858b563247c9485453be53bc60296397df675521 SHA256 4fd297e02b19b1accd18bdf19f06eb4fdfc52e2f75c67ad0bb1734f7e3b57f42
@ -20,7 +21,7 @@ DIST genkernel-pkg-3.4-r3.tar.bz2 1915282 RMD160 8424628e94c51d500f7b28532901ad0
DIST unionfs-1.5pre-cvs200701042308.tar.gz 163418 RMD160 6d54be6db26a562dd943df2de9cf0e0138c45c6f SHA1 9559a0ae8e0552a9c3644c85a99c1be601c837fc SHA256 d1925eee22517df72828a7c75890c20a54335e135f6ed04ea43f8771c9b1c271
DIST unionfs-fuse-0.22.tar.bz2 27355 RMD160 f29cbf41af0ba8f2181ac565a6663871676f6488 SHA1 e95799923ee3938e1fb44c6fd9aa7154d720063e SHA256 fa0c494a8ce63f235601fcc35e3a96527831169d6d5921ee49faccf3b25feb78
EBUILD calckernel-3.4.10.903-r1.ebuild 4721 RMD160 0ad6351496f60f77f5cdb47f91e8887ad2b67111 SHA1 a7f6d9be941333647a4dbc578316792fdd942fc5 SHA256 2f5327f3b368a25cda0dcce60f287c38cd6a2a74e03b6e3280fdd846c1aaeaf8
EBUILD calckernel-3.4.10.903-r15.ebuild 4797 RMD160 3f7804e47bbb2c36bdfad781250eba6a73329fb7 SHA1 a61c04ba488c87c144ec57845881300e664f8e37 SHA256 04268c64db9eae32db2c37d679ba0b2d09cb4fb146e71881ea685e20193502cd
EBUILD calckernel-3.4.10.903-r16.ebuild 4797 RMD160 3f7804e47bbb2c36bdfad781250eba6a73329fb7 SHA1 a61c04ba488c87c144ec57845881300e664f8e37 SHA256 04268c64db9eae32db2c37d679ba0b2d09cb4fb146e71881ea685e20193502cd
EBUILD calckernel-3.4.10.903-r2.ebuild 4722 RMD160 86a8fd0be899be5fe4db799269f0eae5063a30ac SHA1 2d52f4ff1805734cb0ffe572786015a9c0fe0311 SHA256 7ebc44592700cbfc4759508ddc147fe9cafe7c54116b731bfa42dfc7baa19206
EBUILD calckernel-3.4.10.903-r5.ebuild 4722 RMD160 86a8fd0be899be5fe4db799269f0eae5063a30ac SHA1 2d52f4ff1805734cb0ffe572786015a9c0fe0311 SHA256 7ebc44592700cbfc4759508ddc147fe9cafe7c54116b731bfa42dfc7baa19206
EBUILD calckernel-3.4.10.903-r6.ebuild 4722 RMD160 86a8fd0be899be5fe4db799269f0eae5063a30ac SHA1 2d52f4ff1805734cb0ffe572786015a9c0fe0311 SHA256 7ebc44592700cbfc4759508ddc147fe9cafe7c54116b731bfa42dfc7baa19206

@ -0,0 +1,308 @@
diff --git a/arch/x86/modules_load b/arch/x86/modules_load
index 2e93dce..a6db29d 100644
--- a/arch/x86/modules_load
+++ b/arch/x86/modules_load
@@ -22,5 +22,5 @@ MODULES_PCMCIA="pcmcia pcmcia_core yenta_socket pd6729 i82092 i82365 tcic ds ide
MODULES_USB="ehci-hcd uhci usb-ohci hid usb-storage uhci-hcd ohci-hcd usbhid sl811-hcd"
# Filesystems
-MODULES_FS="ext2 ext3 reiserfs jfs nfs xfs fuse"
+MODULES_FS="ext2 ext3 ext4 reiserfs jfs nfs xfs fuse"
diff --git a/arch/x86_64/modules_load b/arch/x86_64/modules_load
index 67b9a48..857f1a3 100644
--- a/arch/x86_64/modules_load
+++ b/arch/x86_64/modules_load
@@ -22,4 +22,4 @@ MODULES_PCMCIA="pcmcia pcmcia_core yenta_socket pd6729 i82092 i82365 tcic ds ide
MODULES_USB="ehci-hcd uhci usb-ohci hid usb-storage uhci-hcd ohci-hcd usbhid sl811-hcd"
# Filesystems
-MODULES_FS="ext2 ext3 reiserfs jfs nfs xfs fuse"
+MODULES_FS="ext2 ext3 ext4 reiserfs jfs nfs xfs fuse"
diff --git a/defaults/initrd.defaults b/defaults/initrd.defaults
index a417144..92e9d2d 100755
--- a/defaults/initrd.defaults
+++ b/defaults/initrd.defaults
@@ -68,6 +68,7 @@ fi
REAL_ROOT=''
CDROOT='0'
+SCRATCH='0'
CDROOT_DEV=''
CDROOT_TYPE='auto'
NEW_ROOT='/newroot'
diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index beec6de..317eb99 100755
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -169,11 +169,24 @@ cache_cd_contents() {
# TODO: Check the size of the image versus the size of our tmpfs
# along with the amount of available RAM and increase tmpfs size
# if necessary. (Not having awk sucks...)
- # z=0
- # for i in $(cat /proc/meminfo | grep -e ^MemFree -e ^Cached | \
- # cut -d: -f2 | cut -dk -f1 | sed -e "s/^\s*//") ; do
- # z=$(($z + $i)) ; done
- # echo $z
+
+ # getting memory
+ z=0
+ for i in $(cat /proc/meminfo | grep -e ^MemFree -e ^Cached | \
+ cut -d: -f2 | cut -dk -f1 | sed -e "s/^\s*//") ; do
+ z=$(($z + $i)) ; done
+
+ # getting size tmpfs of default
+ let curtfs=$z/2
+
+ # getting size of image
+ let q=`ls -la ${NEW_ROOT}/mnt/cdrom/${LOOP} | sed -r -n 's/(\S*\s*){4}(\S*).*/\2/p'`/5000*6
+
+ if [[ $((${curtfs}<${q})) = "1" -a $((${q}<${z})) = "1" ]];
+ then
+ good_msg "Increasing size of tmpfs for ${NEW_ROOT}"
+ mount -o remount,size=${q}000 -t tmpfs tmpfs ${NEW_ROOT}
+ fi
good_msg "Copying loop file for caching..."
cp -a ${NEW_ROOT}/mnt/cdrom/${LOOP} ${NEW_ROOT}/mnt/${LOOP}
if [ $? -ne 0 ]
@@ -184,6 +197,8 @@ cache_cd_contents() {
rm -rf ${NEW_ROOT}/mnt/zisofs 2>/dev/null
else
LOOPEXT='../'
+ good_msg "Unmounting media from ${NEW_ROOT}/mnt/cdrom"
+ umount ${NEW_ROOT}/mnt/cdrom
fi
fi
fi
@@ -950,6 +965,32 @@ getdvhoff() {
echo $(( $(hexdump -n 4 -s $((316 + 12 * $2)) -e '"%i"' $1) * 512))
}
+load_union_module() {
+ UNIONTYPE=""
+ # find module for union file system
+ [ -n "$(find /lib/ -name unionfs.ko)" ] && UNIONTYPE="unionfs"
+ [ -n "$(find /lib/ -name aufs.ko)" ] && UNIONTYPE="aufs"
+ if [ -z "${UNIONTYPE}" ]
+ then
+ bad_msg "Module for union file system is not found!"
+ run_shell
+ else
+ modprobe ${UNIONTYPE} > /dev/null 2>&1
+ # error on load union module
+ if [ -z "$(lsmod | grep $UNIONTYPE)" ]
+ then
+ bad_msg "Module for union file system is not correct!"
+ if [[ ${UNIONTYPE} = aufs ]]
+ then
+ bad_msg "Probably kernel compiled without standalone patch."
+ fi
+ run_shell
+ fi
+
+ good_msg "Loading ${UNIONTYPE}"
+ fi
+}
+
setup_unionfs() {
local rw_dir=$1
local ro_dir=$2
@@ -969,6 +1010,7 @@ setup_unionfs() {
mkdir -p ${UNION}
good_msg "Loading fuse module"
modprobe fuse > /dev/null 2>&1
+ load_union_module
# if [ -n "${UNIONFS}" ]
# then
# CHANGESDEV=${UNIONFS}
@@ -998,10 +1040,94 @@ setup_unionfs() {
mkdir /tmp
mkdir -p ${UNION}
# mkdir -p $CHANGES
-# mount -t unionfs -o dirs=$CHANGES=rw unionfs ${UNION}
+## mount -t unionfs -o dirs=$CHANGES=rw unionfs ${UNION}
+
+ if [ "${SCRATCH}" -ne 0 ];
+ then
+ good_msg "Loading in scratch mode"
+ BUILDERDIR=${UNION}/mnt/builder
+ SCRATCHDIR=${UNION}/mnt/scratch
+ DELTADIR=${rw_dir}/mnt/delta
+ WORKSPACEDIR=${rw_dir}/mnt/workspace
+ mount -o remount,rw ${rw_dir}/mnt/cdrom >/dev/null 2>&1
+ touch ${rw_dir}/mnt/cdrom/livecd >/dev/null 2>&1
+ if [ "$?" -ne 0 ];
+ then
+ ISRW=0
+ else
+ ISRW=1
+ fi
+
+ mkdir -p ${DELTADIR}
+ mkdir -p ${WORKSPACEDIR}
+ if [[ ${UNIONTYPE} = aufs ]]
+ then
+ if ! mount -t aufs -o udba=reval,br:${WORKSPACEDIR}=rw:${DELTADIR}=ro+wh:${rw_dir}/mnt/livecd=ro none ${UNION}
+ then
+ bad_msg "Can't setup union mount!"
+ run_shell
+ fi
+ else
+ mount -t unionfs -o dirs=${WORKSPACEDIR}=rw:${DELTADIR}=ro:${rw_dir}/mnt/livecd=ro unionfs ${UNION}
+ fi
+ tmpret=$?;[ "$tmpret" -ne 0 ] && ret=$tmpret
+ mkdir -p ${SCRATCHDIR}/calculate
+ mkdir -p ${SCRATCHDIR}/delta
+ mkdir -p ${SCRATCHDIR}/workspace
+ mount -o bind ${rw_dir}/mnt/delta ${SCRATCHDIR}/delta
+ tmpret=$?;[ "$tmpret" -ne 0 ] && ret=$tmpret
+ mount -o bind ${rw_dir}/mnt/workspace ${SCRATCHDIR}/workspace
+ tmpret=$?;[ "$tmpret" -ne 0 ] && ret=$tmpret
+ mkdir -p ${BUILDERDIR}
+ if [[ ${UNIONTYPE} = aufs ]]
+ then
+ if ! mount -t aufs -o udba=reval,br:${DELTADIR}=rw:${rw_dir}/mnt/livecd=ro none ${BUILDERDIR}
+ then
+ bad_msg "Can't setup union mount!"
+ run_shell
+ fi
+ else
+ mount -t unionfs -o dirs=${DELTADIR}=rw:${rw_dir}/mnt/livecd=ro unionfs ${BUILDERDIR}
+ fi
+ tmpret=$?;[ "$tmpret" -ne 0 ] && ret=$tmpret
+ mount -o bind ${rw_dir}/mnt/livecd ${SCRATCHDIR}/calculate
+ tmpret=$?;[ "$tmpret" -ne 0 ] && ret=$tmpret
+ if [ "$ISRW" -ne 0 ];
+ then
+ FLASHDIR=${UNION}/mnt/flash
+ mkdir -p ${FLASHDIR}
+ mount -o bind ${rw_dir}/mnt/cdrom ${FLASHDIR}
+ tmpret=$?;[ "$tmpret" -ne 0 ] && ret=$tmpret
+ else
+ CDROMDIR=${UNION}/mnt/cdrom
+ mkdir -p ${CDROMDIR}
+ mount -o bind ${rw_dir}/mnt/cdrom ${CDROMDIR}
+ tmpret=$?;[ "$tmpret" -ne 0 ] && ret=$tmpret
+ fi
+ else
+ CDROMDIR=${UNION}/mnt/cdrom
+ LIVECDDIR=${UNION}/mnt/livecd
+
+ if [[ ${UNIONTYPE} = aufs ]]
+ then
+ if ! mount -t aufs -o udba=reval,br:${rw_dir}:${ro_dir}=ro none ${UNION}
+ then
+ bad_msg "Can't setup union mount!"
+ run_shell
+ fi
+ else
+ mount -t unionfs -o dirs=${rw_dir}:${ro_dir}=ro unionfs ${UNION}
+ fi
+ chmod 0755 ${UNION}
+ mount -o bind ${rw_dir}/mnt/cdrom ${CDROMDIR}
+ mount -o bind ${rw_dir}/mnt/livecd ${LIVECDDIR}
+ ret=$?
+ fi
+
+ chmod 1777 ${UNION}/tmp
good_msg "Creating union mount"
- unionfs -o allow_other,cow,noinitgroups,suid,dev ${rw_dir}=RW:${ro_dir}=RO ${UNION} 2>/dev/null
- ret=$?
+# unionfs -o allow_other,cow,noinitgroups,suid,dev,default_permissions,use_ino ${rw_dir}=RW:${ro_dir}=RO ${UNION} 2>/dev/null
+# ret=$?
if [ "${ret}" -ne 0 ]
then
bad_msg "Can't setup union mount!"
diff --git a/defaults/linuxrc b/defaults/linuxrc
index d506f83..538b29b 100755
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -62,6 +62,10 @@ do
init_opts\=*)
INIT_OPTS=`parse_opt "${x}"`
;;
+ # Scratch usbload
+ scratch)
+ SCRATCH=1
+ ;;
# Livecd options
cdroot)
CDROOT=1
@@ -465,9 +469,50 @@ do
then
break
else
- bad_msg "The filesystem mounted at ${REAL_ROOT} does not appear to be a valid /, try again"
- got_good_root=0
- REAL_ROOT=''
+ # check for scratch
+ if [ -e ${NEW_ROOT}/livecd.squashfs -a -d ${NEW_ROOT}/delta -a -d ${NEW_ROOT}/workspace ];
+ then
+ good_msg 'Found scratch data...'
+ load_union_module
+ modprobe squashfs >/dev/null
+ if mount -o remount,rw ${NEW_ROOT};
+ then
+ mkdir -p ${NEW_ROOT}/calculate && mkdir -p /union && mkdir -p ${NEW_ROOT}/workspace/mnt/builder && mkdir -p ${NEW_ROOT}/workspace/mnt/scratch
+ if mount -o loop,ro -t squashfs ${NEW_ROOT}/livecd.squashfs ${NEW_ROOT}/calculate;
+ then
+ if [[ ${UNIONTYPE} = aufs ]]
+ then
+ if mount -t aufs -o ro,udba=reval,br:${NEW_ROOT}/workspace=rw:${NEW_ROOT}/delta=ro+wh:${NEW_ROOT}/calculate=ro none /union;
+ then
+ mount -t aufs -o ro,udba=reval,br:${NEW_ROOT}/delta=rw:${NEW_ROOT}/calculate=ro none /union/mnt/builder
+ CHROOT=/union
+ break;
+ else
+ bad_msg 'Could not merge scratch layers!'
+ run_shell
+ fi
+ else
+ if mount -t unionfs -o ro,dirs=${NEW_ROOT}/workspace:${NEW_ROOT}/delta=ro:${NEW_ROOT}/calculate=ro unionfs /union;
+ then
+ mount -t unionfs -o ro,dirs=${NEW_ROOT}/delta:${NEW_ROOT}/calculate=ro unionfs /union/mnt/builder
+ CHROOT=/union
+ break;
+ else
+ bad_msg 'Could not merge scratch layers'
+ run_shell
+ fi
+ fi
+ else
+ bad_msg 'Could not mount scratch squashfs image'
+ fi
+ else
+ bad_msg 'Could not remount ${NEW_ROOT}'
+ fi
+ else
+ bad_msg "The filesystem mounted at ${REAL_ROOT} does not appear to be a valid /, try again"
+ got_good_root=0
+ REAL_ROOT=''
+ fi
fi
else
bad_msg "Could not mount specified ROOT, try again"
diff --git a/gen_initramfs.sh b/gen_initramfs.sh
index ee4531d..eb5f923 100755
--- a/gen_initramfs.sh
+++ b/gen_initramfs.sh
@@ -560,8 +560,17 @@ create_initramfs() {
append_data 'overlay'
fi
- gzip -9 "${CPIO}"
- mv -f "${CPIO}.gz" "${CPIO}"
+ # Select arch util
+ if [ "`cat ${KERNEL_CONFIG} |
+ grep -Pc "^CONFIG_RD_LZMA=y|^CONFIG_INITRAMFS_COMPRESSION_LZMA=y"`" == "2" ] &&
+ which lzma &>/dev/null;
+ then
+ lzma -9 "${CPIO}"
+ mv -f "${CPIO}.lzma" "${CPIO}"
+ else
+ gzip -9 "${CPIO}"
+ mv -f "${CPIO}.gz" "${CPIO}"
+ fi
if isTrue "${INTEGRATED_INITRAMFS}"
then

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<herd>maintainer-wanted</herd>
<longdescription lang="en">
Modified gentoo automatic kernel building scripts. Added support builder mode,
initramfs lzma compression and etc.
</longdescription>
</pkgmetadata>
Loading…
Cancel
Save