gentoo install with rsync
To add more fun, we also use grub2 + GPT + lvm2
Table of Contents
1 Partition
HD: 500G harddisk.
1.1 Set up partition with GPT
harddisk with parted as follow:
Model: ATA Hitachi HTS54505 (scsi) Disk /dev/sdb: 500GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 17.4kB 50.0MB 50.0MB bios_grub bios_grub 2 50.3MB 500GB 500GB lvm lvm
NOTE:
- To set flag
bios_grub
or lvm, runset 1 bios_grub
orset 2 lvm
. - Since grub2 can boot lvm, so we don't have to create a dedicated partition for
/boot
.
1.2 Setup LVM
Create physical volumne on new created lvm:
# pvcreate /dev/sdb2
Create virtual volumne, and physical volumne:
We can use vgdisplay
to show virtual volumne status at any time.
# vgcreate vg02 /dev/sdb2 # vgchange -a y # may not necessary. # vgdisplay vg02
Create logical volumne on virtual volumne:
We can run lvdisplay
to display logical volumne status at any time.
# lvcreate vg02 -n gentoo -L 20G # lvcreate vg02 -n xen -L 10G # lvcreate vg02 -n debian -L 10G # lvcreate vg02 -n swap -L 4G # lvdisplay
Run vgdisplay vg02
, show how much free PEs left, and create partition for the last free PEs:
# vgdisplay # lvcreate vg02 -n exports -l 107958 # all free PEs # lvdisplay
1.3 Create file systems on lvm
# mkfs.ext4 /dev/mapper/vg02-gentoo # mkfs.ext4 /dev/mapper/vg02-xen # mkfs.ext4 /dev/mapper/vg02-debian # mkswap /dev/mapper/vg02-swap # mkfs.reiserfs /dev/mapper/vg02-exports
1.4 Mounting file system, prepare for install
We'd like to use UUID to mount file system, to get a UUID:
# blkid /dev/mapper/vg02-gentoo /dev/mapper/vg02-gentoo: UUID="f6f96ca8-6826-43cc-8f5e-9230ff5b7f04" TYPE="ext4"
Desired filesystem structure:
- vg02-gentoo: Used for gentoo rootfs (We need install gentoo on this partition in this session).
- vg02-xen: plan for xen, not used in this session
- vg02-debian: plan for debian, not used in this session
- vg02-swap: for swap
- vg02-exports: for misc usage and home
The structure of partition is something like:
Mount Point | Mount Dst |
---|---|
vg02-gentoo | / |
vg02-exports | /exports |
vg02-swap | SWAP |
/exports/home | /home (all home, IE: for debian/xen) |
/exports/tmp | /tmp (all tmp) |
/exports/gentoo/portage | /usr/portage |
/exports/gentoo/src | /usr/src |
/exports/gentoo/tmp | /var/tmp |
/exports/debian/cache | (debian)/var/cache |
Prepare mount file system:
# mount UUID="f6f96ca8-6826-43cc-8f5e-9230ff5b7f04" /mnt/install/ # cd /mnt/install # mkdir exports # mount /dev/mapper/vg02-exports exports # mkdir -p usr/{portage,src} exports/tmp exports/{debian,gentoo,xen} # mkdir -p exports/gentoo/{tmp,src,portage} # mkdir -p exports/debian/{src,cache} # mkdir -p dev/pts sys proc # mkdir -p tmp var/tmp # chmod 1777 tmp var/tmp # chmod 1777 exports/tmp exports/gentoo/tmp
After the above partition layout have been mounted, we can start gentoo install.
2 Gentoo install
2.1 install with rsync (with another existing gentoo system).
Sync root file system, please note some directory shouldn't be synced, IE: /home, /proc
…
# rsync -av root@192.168.1.11:/* . --exclude=/home --exclude=/backup --exclude=/exports --exclude=/usr/portage --exclude=/var/tmp --exclude=/usr/src --exclude=/root --exclude=/dev --exclude=/sys --exclude=/proc
/dev
should also synced deperately, because /dev
on a running system is mouted by udev.
(on remote server) # mount -L/gentoo /mnt/cdrom (on client/install machine) # cd /mnt/install/dev # rsync -av root@192.168.1.11:/mnt/cdrom/dev * . (on remote server) # umount /mnt/cdrom
After /dev
has been mounted, we can then prepare for chroot:
# mount -t sysfs none sys # mount -t proc none proc # mount -o bind /dev dev # mount -t devpts none dev/pts # mount -o bind /mnt/install/exports/tmp tmp # mount -o bind /mnt/install/exports/home home # mount -o bind /mnt/install/exports/gentoo/src usr/src # mount -o bind /mnt/install/exports/gentoo/portage usr/portage # mount -o bind /mnt/install/exports/gentoo/tmp var/tmp
Chroot to the newly synced system /mnt/install
:
# chroot /mnt/install # export PS1="(chroot) $PS1" (chroot) # emerge --sync
2.2 (Optional) Gentoo install from stage3
You can find details from:
3 Tune the chrooted system.
3.1 (Optional) Change host name
This can be done by modify /etc/hostname
3.2 Account mangement
Modify /etc/passwd
, /etc/group
, /etc/shadow
, or use tools like passwd, useradd, instead.
3.3 Install grub
Since we are using GPT partition table, we need use grub2 intead of grub:
(chroot) # echo "=sys-boot/grub-9999 **" >> /etc/portage/package.keywords/default (chroot) # emerge -av grub (Make sure grub2 is installed) (chroot) # grub-install /dev/sdX (Change to the right sdX for grub installation) (chroot) # grub-mkconfig -o /boot/grub/grub.cfg
Please note we also need modify grub.cfg, add dolvm to kenrel commnad line. To support lvm & mount by uuid, we also need add --disklabel --lvm
to genkernel when build kernel.
And since grub2 have lvm support, so we don't have a dedicated /boot
partition.
/boot/grub/grub.cfg
may something like:
... insmod part_gpt insmod lvm insmod ext2 set root='(lvm/vg02-gentoo)' search --no-floppy --fs-uuid --set=root f6f96ca8-xxxx-43cc-8f5e-9230ff5byyyy if loadfont /usr/share/grub/unicode.pf2 ; then set gfxmode=640x480 load_video insmod gfxterm insmod part_gpt insmod lvm insmod ext2 set root='(lvm/vg02-gentoo)' search --no-floppy --fs-uuid --set=root f6f96ca8-xxxx-43cc-8f5e-9230ff5byyyy set locale_dir=($root)/boot/grub/locale set lang= insmod gettext fi terminal_output gfxterm if sleep --interruptible 0 ; then set timeout=10 fi ### END /etc/grub.d/00_header ### ### BEGIN /etc/grub.d/10_linux ### menuentry 'Gentoo GNU/Linux, with Linux x86_64-3.0.0-rc7' --class gentoo --class gnu-linux --class gnu --class os { load_video insmod gzio insmod part_gpt insmod lvm insmod ext2 set root='(lvm/vg02-gentoo)' search --no-floppy --fs-uuid --set=root f6f96ca8-xxxx-43cc-8f5e-9230ff5byyyy echo 'Loading Linux x86_64-3.0.0-rc7 ...' linux /boot/kernel-genkernel-x86_64-3.0.0-rc7 root=UUID=f6f96ca8-xxxx-43cc-8f5e-9230ff5byyyy ro dolvm echo 'Loading initial ramdisk ...' initrd /boot/initramfs-genkernel-x86_64-3.0.0-rc7 } ...
3.4 Modify /etc/fstab
Add mount point for rootfs, like:
the UUID can be detected by run `` blkid
''.
UUID=f6f96ca8-xxxx-43cc-8f5e-9230ff5b7xxx / ext4 noatime 0 1 UUID=5d9b146b-xxxx-4111-82df-4ffa4826exxx /exports reiserfs noatime,nodev,nosuid 0 0 /exports/gentoo/tmp /var/tmp none bind 0 0 /exports/gentoo/portage /usr/portage none bind 0 0 /exports/gentoo/src /usr/src none bind 0 0 UUID=aa180052-xxxx-4fa5-bfbc-18ff50ccxxxx none swap sw 0 0 /dev/cdrom /mnt/cdrom auto noauto,ro 0 0 /exports/home /home none bind 0 0 (chroot) #
3.5 Tune system services
(chroot) # rc-update (Show active services) (chroot) # rc-update del net.br0 default (Remove net.br0) (chroot) # rc-update add sshd default (Add sshd, default on)
3.6 Configure network
Modify /etc/conf.d/net
, if no setting applied in this file, by default, DHCP is used.
(chroot) # echo > /etc/conf.d/net (use default DHCP)
3.7 Remove persist net rules
(chroot) # rm /etc/udev/rules.d/70-persistent-net.rules
3.8 Change ssh server public key
Please make sure use /etc/ssh/ssh_host_xxx_key
instead of default key location ${HOME}/.ssh/id_xxx
:
(chroot) # cd /etc/ssh (chroot) # rm -i ssh_host_dsa_key ssh_host_dsa_key.pub ssh_host_ecdsa_key ssh_host_ecdsa_key.pub ssh_host_rsa_key ssh_host_rsa_key.pub (chroot) # ssh-keygen -t ecdsa Generating public/private ecdsa key pair. Enter file in which to save the key (/root/.ssh/id_ecdsa): /etc/ssh/ssh_host_ecdsa_key Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /etc/ssh/ssh_host_ecdsa_key. Your public key has been saved in /etc/ssh/ssh_host_ecdsa_key.pub. The key fingerprint is: 14:a2:67:b7:85:ac:b9:57:3b:92:99:0a:75:8a:18:70 root@localhost The key's randomart image is: +--[ECDSA 256]---+ | . . | | . o o | |. E . o = . | | o o = o | | . + S . | | o o + = . | | . o o * o | | . o . . | | . | +-----------------+ (chroot) # ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/root/.ssh/id_dsa): /etc/ssh/ssh_host_dsa_key Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /etc/ssh/ssh_host_dsa_key. Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub. The key fingerprint is: 0d:48:79:3d:d6:00:0b:35:e2:2a:24:bd:f2:4e:31:c9 root@localhost The key's randomart image is: +--[ DSA 1024]----+ | +o+o.o | | . o.+.o+ . | |. o o.o. . | | + o . o | |. E . S . | | o + | | o | | o | | . | +-----------------+ (chroot) # ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /etc/ssh/ssh_host_rsa_key Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /etc/ssh/ssh_host_rsa_key. Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub. The key fingerprint is: bf:1a:f9:79:7a:03:3e:56:55:8a:13:75:d1:ed:2c:40 root@localhost The key's randomart image is: +--[ RSA 2048]----+ | .E...=| | o .+| | + = | | o + o| | S o . | | o. . | | o..o | | o+o+ | | .o== . | +-----------------+ (chroot) licj-pc ssh # ls moduli ssh_config sshd_config ssh_host_dsa_key ssh_host_dsa_key.pub ssh_host_ecdsa_key ssh_host_ecdsa_key.pub ssh_host_rsa_key ssh_host_rsa_key.pub
3.9 Tune /etc/make.conf
This is the same as gentoo stage3 install, but since /etc/make.conf
already configured on target (rsync server) system, so please modify it as your own.