Automatically Installing Linux from Bootable CD? 85
phorm asks: "While there are newer many distributions of linux that come bootable from CD, I've found that some are a bit difficult to customize and wonder how hard it would be to create my own. Currently we are looking at replacing some of our Windows desktops at work with Linux test-machines - and it would be nice to make the installation process as simple as possible. How hard would it be to create a bootable CD that would automagically install Linux onto the first detected hard-drive? How would you go about 'imaging' an existing machine to use as the base?
I suppose that in many cases a tar-gzip of the entire OS would work, provided you could partition the drive correctly, recreate some important handles as in /proc, and run lilo/grub to install a boot loader. Does anyone here have experience with this? I know morphix/knoppix make nice bootable distros but what I really want is a basic Linux bootCD which installs a preconfigured version of the OS of my choice."
Knoppix (Score:4, Informative)
Ghost (Score:3, Informative)
However, you may have issues when it comes to differing hardare in different machines, and all your boxes will have the same hostname and IP address.
Gentoo can do it (Score:4, Informative)
Check support databases (Score:5, Informative)
Kickstart (Score:5, Informative)
Don't use CDs (Score:5, Informative)
If possible, use the network. If those PCs have PXE to boot from, that is by far the easiest and customizeable way to install lots of Linux machines. Using RedHat's kickstart, I can install a basic server in about 5 minutes, plus 5 minutes to configure everything for that machine. It's thus faster than CD and easier and easy to customize. No need to burn a new CD.
One really quick, dirty way to do it (Score:4, Informative)
Once done, boot into single user mode.
tar everything up to *another* disk (mounted here under /mnt) --
If that file doesn't fit on a CD with at least 10 MB to spare, remove some stuff and try again. export GZIP=9 might help a bit too.
Get a bootable linux floppy disk image. It doesn't really matter which one, but it does need to have a real filesystem on it (not just a kernel.) Your typical rescue disk will probably work well.
Make a script to install. It'll be something like this --
and then this script will replaceThen you'll burn a cd that contains that floppy image as the el Torito boot image, and has that file.tar.gz in the root of the file system.
This is really rough, and will only work properly with rather specific hardware, but it may get you started. Making a proper distribution is a lot more work than this -- I only spent a few minutes typing this out.
I have not tested any of this. In particular, the command to do the fdisking probably has issues -- for example, most boot floppies don't have printf by default (you'll need to add it, or a script to just print all the fdisk commands), and I probably got the order of some stuff in the printf statement wrong (it's a string of commands for fdisk.) And of course it'll happily trash whatever is on your disk with no warning. (Installing lilo rather than grub can be done with a similar procedure if needed.)
But if you're looking for a really quick and dirty way to install lots of identical machines, this may get you started. This is NOT a procedure for anybody who doesn't really understand what all this stuff does and the possible problems -- I just provided it as a first stab at a possible solution under some limited conditions. Note that the general idea can apply to other OSs as well -- I even remember once making a setup that installed OS/2 (off a network share) just like this -- long before Ghost was a gleam in Norton's (or whomever's) eye.
In any event, I'd suggest seeing what Knoppix has to offer -- if, like another poster suggested, they have a script to just install to a disk, that would probably be far better than this hack.
Re:One really quick, dirty way to do it (Score:3, Informative)
No, I don't really expect anybody to actually do this -- there's already much better stuff out there. But several years ago, before all those smart people solved the problem elegantly for you, this was one way that people would solve problems like this -- with a nasty `one off'.
Try systemimager (Score:4, Informative)
Use Kickstart. (Score:4, Informative)
Catalyst (Score:4, Informative)
I did this with Slackware (Score:2, Informative)
What I did was modify the initrd ram disk to change the custom setup files. I created my own which partitioned the drive, formatted, and started installing packages.
I modified a couple packages to use defaults the way I liked them, reburned the CD and voila. Perfectly installed systems every time.
Slackware uses shell scripts exclusively so it's quite easy to figure out what happens when.
What distro do you want to use? (Score:4, Informative)
You can use the redhat-config-kickstart to help you build a default install package set (and to build the kickstart file).
Then you can run a post install script (also specified in the kickstart script). Generally, I always make my pre/post scripts wget the script I really want them to run. This gives me a bit more flexibility. (Actually I've never written a pre-install script, only posts).
In the post install scripts, I've used wget to download the set of scripts/config files I wanted to replace (I recommend using a tarfile that you unpack from the filesystem, use diff to apply patches to all of the config files, or use sed to edit the config files).
From there, it's relatively simple matter of deciding what you want changed and how you want it to work. I generally make sure to install AutoRPM, and the autorpm config files that point to my local package repository. Thus anything I can make into an RPM, I can get deployed onto remote machines in mass. I create one extra AutoRPM package pool for each class of machine, so I can put custom packages by machine type onto each machine.
Either use PXE boot, or boot from CD. The CD image to do a kickstart style install is on the first RedHat CD. Look for the isolinux directory and create your own ISO (if you edit the files to put ks=http://kickstart.server.com/kickstart/file, then it's completely unattended). Or you can use the prebuilt images in /images, but then you have to fiddle with the command line a bit from CD. I've never done a PXE boot for installation of a machine (used it for building X-terminals, but not for this).
Kirby
Re:Ghost (Score:3, Informative)
Morphix = modular (Score:2, Informative)
MHO.
L
Cool hack :) (Score:3, Informative)
As for the partitioning (printf) problem, I'd save a partition table with sfdisk -d
(notice the two empty lines to use defaults for partition start and end - will use the rest of the disk.)
Also notice that tar --one-file-system already creates the directories (/proc,
Also note that even while files under
If you choose this 'roll your own dirty solution' I'd like to hear about your experiences.
Kick Start (Score:3, Informative)
Try systemrescuecd (Score:2, Informative)
I've got a primary system from which to create my "gold disk." I have installed/configured the OS and third-party applications in a meaningful way.
The process that I've followed is to create an image of the pristine system using partimage (on the rescue CD) and a copy of the boot sector using sfdisk (on the rescue CD) then create installation scripts that rewrite the partition table and dump the image to the hard disk. Finally I created a "gold CD."
One advantage I have is that I can count on pretty consistent hardware.
YMMV.
Regards,
Anomaly
BTW - God loves you and longs for relationship with you. If you want to know more, please email me.
Re:Ghost (Score:1, Informative)
partimage from d*mnsmalllinux with a big partimage master image copied on the cdr/dvdr+-whatever.
you could tweak a bash script like below to setup your various partitions and restore them. MBR can be set also in partimage. though you need similar hardware
#!/bin/bash
# get hard disk size
hd=`sfdisk -s
#need the hd's MB
mbs=`expr $hd / 1024`
# remove all partitions
dd if=/dev/zero of=/dev/hda bs=512 count=1
# make a label for the disk
parted -s
# repartition the drive
parted -s
####################TWEAK HERE for MBR AND PARTITIONS
# set boot flag on
parted -s
# make an xxxxx container for Partimage
# mount cd to get image file zart from your CD
mount -t iso9660
# run Partimage master is the image file
partimage -b -f3 restore
# cp reboot from cd
cp
# Eject the CD
cdrecord -eject dev=0,0,0
# reboot
I use something similar to restore Windows boxen.
Sisuite (Score:2, Informative)