The UNIX and Linux Forums  
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.

Go Back   The UNIX and Linux Forums > Operating Systems > Linux > Debian
.
google unix.com



Debian Debian GNU/Linux is a free distribution of the GNU/Linux operating system.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
AWK how to strip from right hand side angelolamberti Shell Programming and Scripting 5 01-17-2008 08:31 AM
Need a hand. Please? alexcol Shell Programming and Scripting 1 09-26-2006 04:59 PM
How to get the most left hand string ?? jfortes Shell Programming and Scripting 2 09-11-2006 04:47 PM
Lets give Neo a hand. Optimus_P Post Here to Contact Site Administrators and Moderators 4 10-24-2003 09:37 AM
Give us a hand RichardB UNIX for Dummies Questions & Answers 3 05-06-2002 11:37 AM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Powered by Powered by Google
 
LinkBack Thread Tools Search this Thread Rate Thread Display Modes
  #1 (permalink)  
Old 12-14-2008
frankie06 frankie06 is offline
Registered User
  
 

Join Date: Dec 2008
Posts: 14
Cool change initramfs by hand?

What's the correct way to change the initramfs file that's used during boot?
I know that it's a gzipped cpio archive, but when I gunzip, extract, re-archive (without changing any files), and gzip, then the result is that the system does not boot any more. And I even set the cpio archive type.

Do I need special tools for the initramfs? There are progs like update-initramfs but the point is that I need to put in files that were *not* put in by the tools that originally created the initramfs.
  #2 (permalink)  
Old 12-15-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderator ala Mode
  
 

Join Date: Feb 2007
Location: Innsbruck, Austria
Posts: 1,884
Not special tools, per se... First you gunzip it, like you said. What method did you use to extract/archive? Usually, one would do:
Code:
mkdir /tmp/initrd
cd /tmp/initrd
gunzip -c Initrd.img.gz | cpio -id 

# make changes to /tmp/initrd directory
find . | cpio -o | gzip -c >/boot/initrd.new.img
  #3 (permalink)  
Old 12-15-2008
frankie06 frankie06 is offline
Registered User
  
 

Join Date: Dec 2008
Posts: 14
Thanks otheus! I tried that (without making changes to the files in the /tmp/initrd directory), and I changed the link in /boot to point to initrd.new.img.
Now I get the following error during boot:

Code:
RAMDISK: Compressed image found at block 0
RAMDISK: incomplete write (-28 != 32768) 8388608
List of all partitions:
No filesystem could mount root, tried:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
And there the computer hangs. Not even Ctrl-Alt-Del reboots it. Poweroff is needed.
  #4 (permalink)  
Old 12-15-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderator ala Mode
  
 

Join Date: Feb 2007
Location: Innsbruck, Austria
Posts: 1,884
The method I described works as of Linux 2.6.13 (or before FC3) If you are using an older version (uname -k) perhaps you have to create a filesystem. See "Manually building a custom initial RAM disk" at Linux initial RAM disk (initrd) overview.

Code:
$ mkdir /tmp/initrd.tmp ; cd /tmp/initrd.tmp
$ <extract>
$ du -sk . 
$ # use size reported above for: $blocks
$ dd if=/dev/zero of=/tmp/initrd.img bs=1024 count=$blocks
$ /sbin/mke2fs -F -m 0 -b 1024 /tmp/initrd.img $blocks
$ mount /tmp/initrd.img /mnt/initrd -t ext2 -o loop=/dev/loop0
If that works, copy the files from /tmp/initrd.tmp into /mnt/initrd. Afterwards:
Code:
$ umount /mnt/initrd
$ gzip /tmp/initrd.img
Now move it to /boot. Good luck!
  #5 (permalink)  
Old 12-15-2008
frankie06 frankie06 is offline
Registered User
  
 

Join Date: Dec 2008
Posts: 14
Thanks for the help otheus. I appreciate.

Quote:
Originally Posted by otheus View Post
The method I described works as of Linux 2.6.13 (or before FC3) If you are using an older version (uname -k) perhaps you have to create a filesystem.

I have kernel 2.6.26.

The ibm web page (initrd overview) is really well made, but it's partially obsolete (as they say themselves: "up to FC3"; it's also 2.5 years old).

I tried the code you suggested anyway; every step of the initrd creation process works well, but the system won't boot. With both methods (this and the one you suggested earlier) I get the following error during boot:

Code:
RAMDISK: Compressed image found at block 0
RAMDISK: incomplete write (-28 != 32768) 8388608
List of all partitions:
No filesystem could mount root, tried:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
Which is probably an improvement over the previous error message which I got before posting here for the first time:

Code:
Failed to execute /init
Kernel panic - not syncing: No init found. Try passing init= option to kernel.
So I guess I'm closer, but not there yet...
  #6 (permalink)  
Old 12-16-2008
otheus's Avatar
otheus otheus is offline Forum Staff  
Moderator ala Mode
  
 

Join Date: Feb 2007
Location: Innsbruck, Austria
Posts: 1,884
OK, so a modern kernel, so the first method should be enough.

Could you post your grub.conf file please?
  #7 (permalink)  
Old 12-16-2008
frankie06 frankie06 is offline
Registered User
  
 

Join Date: Dec 2008
Posts: 14
Quote:
Originally Posted by otheus View Post
Could you post your grub.conf file please?
Sure, but I don't think the grub.conf matters too much; it boots the original initrd just fine, and I don't modify any grub files when trying the new initrd.

BTW where is grub.conf? The only grub files I see are in /boot/grub, and the only human-readable ones are "default", "device.map" and "menu.lst". The first is empty except comments, the second only contains the lines

(hd0) /dev/hda
(hd1) /dev/sda

but seems to be unimportant as the unmodified initrd boots just the same when switching this to

(hd0) /dev/sda
(hd1) /dev/hda

and the third contains the usual kernel and initrd config, but it boots the unmodified initrd fine and I never modify it. Instead I change the link initrd.img in /boot to point to the modified initrd. There's still a grub entry using an initrd called initrd.img-2.6.26-1-686 which I never modify, and that always boots. Given that initrd.img-2.6.26-1-686 and the unmodified initrd.img are binary equal, the file menu.lst probably isn't the problem either.

Something else occured to me: do I need to specify the --format option in cpio? E.g. change from "bin" to "newc" format? Because when I look at the (gunzipped) initrd in boot with "file", it says:

"ASCII cpio archive (SVR4 with no CRC)".

But this is not the default which cpio creates.
Closed Thread

Bookmarks

Tags
boot, initramfs, kernel

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT -4. The time now is 04:36 PM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios
The UNIX and Linux Forums Content Copyright ©1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant URLs by vBSEO 3.2.0