-
Junior Member
registered user
Bug in minrt.gz:init from 7.2-7.4.2
Couldnt believed when i saw this go from 7.2-7.4.2 but the long wait for creation of knopix-data.img led me to this.
first the comment from /init:
# I thought that creating a sparse file would be quicker than writing
# all data completely, but unfortunately, it has bad side effects if
# the underlying FAT file system is fragmented. -KK
# dd if="$src" of="$1" bs=1M seek="$(($2 - 1))" count=1
No, Klause the fast way works with a ext2+ fs but it's the bug below that led you to believe it doesn't!
Please correct me if I am wrong.Check the fix script below that changes 1 byte (what major work you save):
The bug is described in the details of the fix script (all to fix one byte in the init script!!!!):
#!/bin/bash
# Rev: $Id: fixminirt.sh 618 2015-04-13 23:49:24Z knoppix $
# Author: koolb@hotmail.com
# Description: Fix minirt.gz to e2fsck knoppix-data.img from Knoppix7.2-4
# for USB style installations on HD (or USB of course).
# Usage: # optionally, specify addtional boot areas besides /mnt-system/boot,
# eg /dev/sda2/boot
# fixminitrt.sh [/path/to/additional/boot] # where {iso,sys}linux* dirs are
#
# Details:
# This handles an issue Knoppix 7.2-4 for those booting off USB or have
# multiple usb style boots to HD or otherwise.
# This is bug in the minitrt/init script's checkfs() function
# in Knoppix7.2-7.4.2. checkfs() which igores the file passed.
# # checkfs partition filesystem
# checkfs(){
# local p="$1" ... # we assign to $p
# ...
# ... e2fsck -y "$h" ... # bug: uses $h instead of $p: fix $h -> $p
# ...
# }
# This will find all minirt.gz files and update the init script in each.
# . ~/scripts/functions - used for debugging shell scripts
echo "$0 v$Revison$"
export DFTDIRS=$(echo /mnt-system/boot/{sys,iso}linux*)
export USRDIRS
[ -d "$1" ] && USRDIRS=$(echo $1/{sys,iso}linux*)
export MRBFN=minirt INIT="init"
export MRTMP=$MRBFN MRIOZ=$MRBFN.gz
export MRORG=$MRIOZ.org
function abort() {
echo "$@" && exit 1
}
sub patch() {
local fn=$1
echo "Patching $fn to $fn.new"
sed -e 's/\(e2fsck.*\$\)h/\1p/' $fn > $fn.new || abort "No patch applied"
}
export src
for src in $DFTDIRS $USRDIRS
do if test -d $src && cd $src; then
echo "Processing $src..."
[ -n "$DBG" ] && set -x
[ ! -e $MRORG ] && sudo cp -Ta $MRIOZ $MRORG # Backup
[ ! -e $MRIOZ ] && sudo cp -Ta $MRORG $MRIOZ # Restore
[ ! -w $MRIOZ ] && sudo chmod o+rw $MRIOZ
export td="$(echo $src | sed 's@/@/tmp/@')/$MRBFN"
export tfo=$td.org tfn=$td.new
[ -d $td ] && sudo rm -rf $td
mkdir -p $td || abort "$src: Unable to mkdir -p $td"
echo "Extracting $src/$MRIOZ to $td && cd $td"
mkdir -p $BOOTISO $BOOTSYS
echo "Extracting $src/$MRIOZ to $td && cd $td"
cd $td || abort "$td: Unable to cd $td"
[ -e $INIT ] || gzip -dc $src/$MRIOZ | tee $tfo | sudo cpio --no-absolute-filenames -i -d -H newc || abort "$td: Unable to extract $MRIOZ "
patch $INIT
lines=$(diff $INIT $INIT.new|wc -l) || abort "$td: diff/patch failed."
[ -w $INIT ] || sudo chmod o+w $INIT|| abort "$td: Unable to make $INIT writeable"
if [ "$lines" -eq 4 -o "$lines" -eq 0 ]; then
[ "$lines" -eq 0 ] && echo "$td: Already Patched but recreating..."
[ -f $INIT.new ] && rm -f "$INIT" && mv "$INIT.new" "$INIT"
echo "$td: Patch SUCCESS!. creating new $src/$MRIOZ..."
find . | sudo cpio -o -H newc | tee $tfn | gzip -c > ../$MRIOZ ||
abort "$td: Unable to create new ../$MRIOZ"
sudo cp -v "../$MRIOZ" "$src/$MRIOZ" || abort "$td: cp ../$MRIOZ to $src failed: $(ls -l ../$MRIOZ)"
for f in $tfo $tfn; do file $f; done
else abort "$td: Bad patch, expected one change: $(diff $INIT $INIT.new)"
fi
for f in $src/$MRIOZ $src/$MRORG; do ls -l $f && sum $f; done
fi
done
Last edited by koolb; 04-16-2015 at 11:57 PM.
-
Junior Member
registered user
fixes: sub patch() # should be function patch()
add chmod 755 $fn.new as last line of the patch() fn
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
ASUS PRIME H370M-PLUS Intel Socket LGA1151 H370 MicroATX Desktop Motherboard
$50.95
ASUS Q170M-C Motherboard LGA1151 with IO Shield
$39.95
GIGABYTE B550 UD AC ATX Motherboard AMD Socket AM4 DDR4 HDMI WIFI USB 3.2 SATA
$74.99
ASUS H110I-PLUS LGA1151 Desktop Motherboard Intel H110 Mini-ITX W/IO
$39.90
Gigabyte B560 DS3H AC Intel B560 LGA 1200 ATX Desktop Motherboard A
$79.99
ASRock A320M-HDV AM4 A320 4 SATA3, 1 Ultra M.2 USB 3.1 HDMI M-ATX Motherboard
$49.98
(Factory Refurbished) MSI PRO Z690-A WIFI DDR5 LGA 1700 Intel ATX Motherboard
$99.99
ASUS H110M-R Motherboard Intel 6th/7th Gen LGA1151 DDR4 Micro-ATX
$40.49
Gigabyte M-ATX motherboard with Intel Core i3 8100 CPU and 8GB DDR4 RAM
$79.00
Supermicro MotherBoard X11SPi-TF Xeon Single CPU Socket LGA3647 w/Heatsink
$279.99