View previous topic :: View next topic |
Author |
Message |
col l33t
Joined: 08 May 2002 Posts: 820 Location: Melbourne - Australia
|
Posted: Mon Oct 07, 2002 12:34 pm Post subject: mkinitrd |
|
|
I found a mkinitrd script that runs on gentoo from LFS....someone want to make an ebuild of it ? maybe tweak it a little. I have tested it & it works fine... Before you run it emerge busybox....also edit the script & enter your root device.
/sbin/mkinitrd:
----->CUT
#!/bin/bash
# mkinitrd for LFS by Jim Gifford <giffordj@linkline.com>
# Release 1.5
# Variables
TEMP="$1"
KERNEL_VERSION=""
CONFIG_FILE="/etc/initrd.conf"
MODULES="`echo | cat | sed -e '/#/d' -e '/ /d' $CONFIG_FILE`"
IMAGE_SIZE=1500
MOUNT_IMAGE="/tmp/initrd.$$"
IMAGE="/tmp/initrd.img-$$"
MOUNT_POINT="/tmp/initrd.mnt-$$"
LINUXRC="$MOUNT_IMAGE/linuxrc"
# This needs to be your root. This must match what
# you have in fstab
ROOT_DEVICE="/dev/hde5"
# Check for initrd Directory
if ! [ -e /initrd ]
then
mkdir /initrd
fi
# Check for RAM Disk Device
if [ -e /dev/.devfsd ]
then
RAM_DEVICE="rd"
else
RAM_DEVICE="ram0"
fi
# Check for input
if [ "$TEMP" == "" ]
then
KERNEL_VERSION="`uname -r`"
else
KERNEL_VERSION="$TEMP"
fi
INITRD="/boot/initrd-$KERNEL_VERSION.img"
if [ "$TEMP" == "-h" ] || [ "$TEMP" == "--h" ] || [ "$TEMP" == "-help" ] || [ "$TEMP" == "--help" ]
then
echo "usage: mkinitrd kernel_version"
echo " : mkinitrd will automatically determin kernel version"
exit 1
fi
# Creating LoopBack Device
dd if=/dev/zero of=$IMAGE bs=1k count=$IMAGE_SIZE 2> /dev/null
for device_number in 0 1 2 3 4 5 6 7 8
do
if losetup /dev/loop$device_number $IMAGE 2>/dev/null
then
break
fi
done
if [ "$device_number" = "8" ]
then
rm -rf $MOUNT_POINT $IMAGE
echo "All of your loopback devices are in use!" >&2
exit 1
fi
LOOP_DEVICE=/dev/loop$device_number
echo y | mke2fs $LOOP_DEVICE $IMAGE_SIZE > /dev/null 2> /dev/null
echo "Using loopback device $LOOP_DEVICE"
mkdir -p $MOUNT_POINT
mount -t ext2 $LOOP_DEVICE $MOUNT_POINT || {
echo "Can't get a loopback device"
exit 1
}
# Creating Directories
mkdir -p $MOUNT_IMAGE
mkdir -p $MOUNT_IMAGE/lib
mkdir -p $MOUNT_IMAGE/bin
mkdir -p $MOUNT_IMAGE/etc
mkdir -p $MOUNT_IMAGE/dev
mkdir -p $MOUNT_IMAGE/proc
mkdir -p $MOUNT_IMAGE/sbin
rm -rf $MOUNT_POINT/lost+found
# Copying Static Programs
cp -a /bin/busybox $MOUNT_IMAGE/bin/busybox
ln -s /bin/busybox $MOUNT_IMAGE/bin/echo
ln -s /bin/busybox $MOUNT_IMAGE/bin/mount
ln -s /bin/busybox $MOUNT_IMAGE/bin/mkdir
ln -s /bin/busybox $MOUNT_IMAGE/bin/sh
ln -s /bin/busybox $MOUNT_IMAGE/bin/umount
ln -s /bin/busybox $MOUNT_IMAGE/sbin/insmod
ln -s /bin/busybox $MOUNT_IMAGE/sbin/pivot_root
# Copying Modules
for MODULE in $MODULES
do
echo "$MODULE" | {
IFS=':' read module options
module=$module
options=$options
DIR_SEARCH1="`ls -1 /lib/modules/$KERNEL_VERSION/kernel/drivers`"
for DIR_1SEARCH in $DIR_SEARCH1
do
cp /lib/modules/$KERNEL_VERSION/kernel/drivers/$DIR_1SEARCH/$module.o $MOUNT_IMAGE/lib > /dev/null 2>&1
DIR_SEARCH2="`ls -1 /lib/modules/$KERNEL_VERSION/kernel/drivers/$DIR_1SEARCH`"
for DIR_2SEARCH in $DIR_SEARCH2
do
cp /lib/modules/$KERNEL_VERSION/kernel/drivers/$DIR_1SEARCH/$DIR_2SEARCH/$module.o $MOUNT_IMAGE/lib > /dev/null 2>&1
done
done
}
done
for i in console null $RAM_DEVICE tty[1234]
do
cp -a /dev/$i $MOUNT_IMAGE/dev
done
# Creating linuxrc File
echo "#!/bin/sh" > $LINUXRC
echo "" >> $LINUXRC
echo "/bin/echo \"Initial RAMDISK Loading Starting...\"" >> $LINUXRC
for MODULE in $MODULES
do
echo "$MODULE" | {
IFS=':' read module options
module=$module
options=$options
if [ "$options" = "" ]
then
echo "Loading module $module"
else
echo "Loading module $module with options $options"
fi
if [ "$options" = "" ]
then
echo "/sbin/insmod /lib/$module.o" >> $LINUXRC
else
echo "/sbin/insmod /lib/$module.o $options" >> $LINUXRC
fi
}
done
echo "/bin/echo \"Initial RAMDISK Loading Completed...\"" >> $LINUXRC
echo "/bin/mkdir /new_root" >> $LINUXRC
echo "/bin/echo \"Mounting proc...\"" >> $LINUXRC
echo "/bin/mount -n -t proc none /proc" >> $LINUXRC
echo "/bin/echo \"Mounting real root dev...\"" >> $LINUXRC
echo "/bin/mount -n -o ro $ROOT_DEVICE /new_root" >> $LINUXRC
echo "/bin/umount /proc" >> $LINUXRC
echo "cd /new_root" >> $LINUXRC
echo "/bin/echo \"Running pivot_root...\"" >> $LINUXRC
echo "/new_root/sbin/pivot_root . initrd" >> $LINUXRC
echo "if [ -c initrd/dev/.devfsd ]" >> $LINUXRC
echo " then" >> $LINUXRC
echo " echo \"Mounting devfs...\"" >> $LINUXRC
echo " /new_root/bin/mount -n -t devfs none dev" >> $LINUXRC
echo "fi" >> $LINUXRC
echo "if [ \$\$ = 1 ]" >> $LINUXRC
echo " then" >> $LINUXRC
echo " echo \"Running init...\"" >> $LINUXRC
echo " exec /usr/sbin/chroot . sbin/init dev/console 2>&1" >> $LINUXRC
echo " else" >> $LINUXRC
echo " echo \"Using bug circumvention for busybox...\"" >> $LINUXRC
echo " exec /usr/sbin/chroot . linuxrc dev/console 2>&1" >> $LINUXRC
echo "fi" >> $LINUXRC
chmod +x $LINUXRC
(cd $MOUNT_IMAGE; tar cf - .) | (cd $MOUNT_POINT; tar xf -)
umount $MOUNT_POINT
losetup -d $LOOP_DEVICE
gzip -9 < $IMAGE > $INITRD
rm -rf $MOUNT_IMAGE $MOUNT_POINT $IMAGE
lilo -v
<----- CUT
----->CUT
# Begin /etc/initrd.conf
#
# This is a file that is used to create an initrd image.
# The only items need to be listed in this file are ones that
# you need to boot up. IE a SCSI controller that has hard drives
# on it.
#
# If you use this to create a initial ram disk for scsi you
# must include the following modules
# scsi_mod sd_mod
#
# File format is as follows
# module:options_for_module
# Example
# aic7xxx:io=0xc00
# Example without options
# aic7xxx:
# SCSI
scsi_mod:
aic7xxx:
sd_mod:
# End /etc/initrd.conf
<----- CUT
Last edited by col on Thu Oct 10, 2002 3:43 am; edited 2 times in total |
|
Back to top |
|
|
mksoft l33t
Joined: 28 May 2002 Posts: 844
|
Posted: Tue Oct 08, 2002 12:38 pm Post subject: |
|
|
An ebuild for a script Seems like an overkill. _________________ There's someone in my head but it's not me - Pink Floyd |
|
Back to top |
|
|
arkane l33t
Joined: 30 Apr 2002 Posts: 918 Location: Phoenix, AZ
|
Posted: Thu Oct 10, 2002 2:50 am Post subject: |
|
|
though you have to admit, very easy LOL
Perhaps just post the script in the "tips & tricks" section.
That would probably be best.
EDIT: D'OH! I forgot which forum I was in...
maybe cut and paste it to the first post? (the script that is) |
|
Back to top |
|
|
col l33t
Joined: 08 May 2002 Posts: 820 Location: Melbourne - Australia
|
Posted: Thu Oct 10, 2002 3:34 am Post subject: |
|
|
No I think an ebuild because it requires the busybox ebuild to be installed. I know it may be overkill but would save people a little hassle downloading the script then emerge busy box ... maybe they wont realise they need busybox when they download it ? |
|
Back to top |
|
|
arkane l33t
Joined: 30 Apr 2002 Posts: 918 Location: Phoenix, AZ
|
Posted: Thu Oct 10, 2002 8:23 pm Post subject: |
|
|
Well, now they know... (you just said it)
The main reason I would be against an ebuild for it is that it can be quite simply copied and pasted, and people now know they need busybox.
It's simply not worth it, quite honestly. There are a dozens of scripts in "Documentation, Tips & Tricks" that do very nifty things, but to be quite honest none of them deserve an ebuild. Ebuilds are mainly for things that are either built from source, or huge binary trees of things. Basically, something that is more than one file, and a dependancy of another ebuild.
I'm not going to stop you from doing this, because quite frankly I can't. But it is a bad idea.
That is what this area is for... to fill the grey area between ebuild and nothing. |
|
Back to top |
|
|
cchapman Guru
Joined: 16 Jan 2003 Posts: 440 Location: Fremont, NE
|
Posted: Fri Feb 14, 2003 7:02 pm Post subject: |
|
|
Stupid question here but doesnt modules.autoload do pretty much the same thing.... |
|
Back to top |
|
|
cchapman Guru
Joined: 16 Jan 2003 Posts: 440 Location: Fremont, NE
|
Posted: Fri Feb 14, 2003 7:04 pm Post subject: |
|
|
Why isnt it download with the gentoo-sources kernel |
|
Back to top |
|
|
col l33t
Joined: 08 May 2002 Posts: 820 Location: Melbourne - Australia
|
Posted: Sat Feb 15, 2003 7:28 am Post subject: |
|
|
I have found the lvm mkinitrd script works fine. You can install it by emerging lvm-user. |
|
Back to top |
|
|
stefanonafets l33t
Joined: 10 Feb 2003 Posts: 644
|
Posted: Sat Feb 15, 2003 7:42 pm Post subject: |
|
|
A question: I have emerged lvm-user, but when i write mkinitrd ecc ecc my pc tells me that the command mkinitrd doesn't exist...
Why???
I have tried '#/sbin/mkinitrd etc etc...' , and don't change...
Anyone? _________________ registered Linux user number #411324
sed 's/ke/che/g'
<The Deployment Slave is initializing> |
|
Back to top |
|
|
col l33t
Joined: 08 May 2002 Posts: 820 Location: Melbourne - Australia
|
Posted: Mon Feb 17, 2003 10:16 am Post subject: |
|
|
lvmcreate_initrd does nearly the same thing as mkinitrd but you have to mount & edit the initrd on loopback |
|
Back to top |
|
|
cchapman Guru
Joined: 16 Jan 2003 Posts: 440 Location: Fremont, NE
|
Posted: Sat Feb 22, 2003 5:39 am Post subject: |
|
|
What has to be compiled into the kernel make initrd image. When I try it says
All loopback devices in use.
Do I need to comppile RAMDISK Support into the kernel?? |
|
Back to top |
|
|
cchapman Guru
Joined: 16 Jan 2003 Posts: 440 Location: Fremont, NE
|
Posted: Sat Feb 22, 2003 7:37 am Post subject: |
|
|
Never mind. I figured it out. Just being a dumbshit |
|
Back to top |
|
|
col l33t
Joined: 08 May 2002 Posts: 820 Location: Melbourne - Australia
|
Posted: Sun Feb 23, 2003 12:10 am Post subject: |
|
|
as u said loopback & ramdisk.
this is how to modify the lvm initrd
- mv lvm.....img initrd.gz
- gunzip initrd.gz
- mkdir /mnt/initrd
- mount -t ext2 -o loop initrd /mnt/initrd/
- cd /mnt/initrd/
- copy your kernel modules to /mnt/initrd
- edit /mnt/initrd/linuxrc (usually insmod you modules here)
- umount /mnt/initrd
- gzip -9 initrd
then edit & update grub or lilo to use the initrd image. |
|
Back to top |
|
|
|