[grub2] un SuperDiskGrub2 Arch

Autres projets et contributions
avi3000
Chu Ko Nu
Messages : 404
Inscription : dim. 19 juin 2011, 18:53
Localisation : dans le neuf trois

[grub2] un SuperDiskGrub2 Arch

Message par avi3000 »

Bonjour,
Ayant constaté que SuperDiskGrub2 n'a pas été maintenu depuis aout 2010 et que la détection d'OS ne fonctionne pas sur les distibutions arch 2.6 ou 3.0.,
je me suis fait mon SuperDiskGrub2 personnel.

La méthode est simple: installation légère d'Archlinux i686 en chroot avec grub2 et os-prober.
Je me suis librement inspiré du Install_chroot

Préalables:
Créer une partition de 800Mo avec parted ou fdisk.
télécharger le chroot i686 de tuxce et le copier dans $source_path
récupérer os-prober-1.49-1-i686.pkg.tar.xz depuis aur et le copier dans $source_path
sauvegarder le code ci-dessous dans $sourc_path/grub2_chroot.sh
suivre les instructions du script.

Code : Tout sélectionner

#!/bin/bash
#
#	ouvrir un terminal en root
#	valoriser les variables à exporter
#	sourcer ce script
#	exécuter successivement dans le terminal root
#
#	set_vars
#	create_fs
#	prep_chroot
#	mon_chroot
#	mon_pacman
#
#


function resource { 	#mise à disposition des modifs de ce script
	[ -r $source_path/grub2_chroot.sh ] && . $source_path/grub2_chroot.sh && return
	. /etc/bash.bashrc  #mise à disposition pour le chroot au cas où
}

function set_vars {
	export arch="i686"
	export fs_name="supergrub2"
	export source_path="/media/backup-sdb/archlinux"
	export install_path="/media/$fs_name"
	export targetdev=/dev/sdb13
	export grub2_uuid=ac4dc5d8-7831-4365-b75d-xxxxxxxxxxxx 	#via uuidgen
	export os_prober="os-prober-1.49-1-$arch.pkg.tar.xz"
	export dnsservers='nameserver 212.27.40.240\nnameserver 212.27.40.241'
	export miroirs='Server = http://mir.archlinux.fr/$repo/os/$arch\nServer = http://mir1.archlinux.fr/archlinux/$repo/os/$arch'
}

function create_fs {
	echo "montage de $targetdev en $fs_name"
	udisks --unmount $targetdev
	mkfs.ext2 -L $fs_name -U $grub2_uuid $targetdev
}

function prep_chroot {
	udisks --mount $targetdev
	mkdir $install_path/tmp
	chmod 1777 $install_path/tmp
	cd $install_path
	tar zxf $source_path/archlinux.chroot.$arch.tgz
	mkdir $install_path/etc/pacman.d
	mkdir -p $install_path/$source_path
	cp $source_path/grub2_chroot.sh $install_path/etc/bash.bashrc #pour exécution dans le chroot
	
	echo -e $dnsservers > $install_path/etc/resolv.conf
	echo -e $miroirs > $install_path/etc/pacman.d/mirrorlist

	mount -o bind /proc $install_path/proc
	mount -o bind /dev $install_path/dev
	mount -o bind /sys $install_path/sys
	mount -o bind $source_path $install_path/$source_path
	mount -o bind $source_path/cache_pacman32 $install_path/var/cache/pacman/pkg #gain de temps si on recommence
}

function mon_chroot {
	chroot $install_path /bin/bash
}

function mon_pacman {
	pacman -Syf linux sudo sed initscripts e2fsprogs
	echo -e $dnsservers > /etc/resolv.conf
	pacman -S grub2
	pacman -U /var/cache/pacman/pkg/$os_prober
	grub-mkconfig > /boot/grub/grub.cfg

	mk_fstab 
	mk_rc_conf
	echo -e 'MODULES=""\nBINARIES=""\nFILES=""\nHOOKS="base udev autodetect pata scsi sata usb filesystems"' > /etc/mkinitcpio.conf
	echo -e 'en_US.UTF-8 UTF-8\nen_US ISO-8859-1\nfr_FR.UTF-8 UTF-8\n#fr_FR ISO-8859-1\nfr_FR@euro ISO-8859-15' > /etc/locale.gen
	locale-gen
}

function mk_fstab {
	echo "# <file system>        <dir>         <type>    <options>          <dump> <pass>
devpts                 /dev/pts      devpts    defaults            0      0
shm                    /dev/shm      tmpfs     nodev,nosuid        0      0
UUID=$grub2_uuid / ext2 defaults 0 1
tmpfs	/tmp tmpfs defaults,size=4g 0 0" > /etc/fstab
}

function mk_rc_conf {
	echo 'LOCALE="fr_FR.UTF-8"
HARDWARECLOCK="UTC"
TIMEZONE="Europe/Paris"
KEYMAP="fr-latin9"
CONSOLEFONT="lat9v-10"
CONSOLEMAP=
USECOLOR="yes"

MODULES=()
UDEV_TIMEOUT=30
USEDMRAID="no"
USEBTRFS="no"
USELVM="no"

HOSTNAME="myhost"
interface=eth0
address=' > /etc/rc.conf
}
un grub-install sur /dev/sdX de votre choix et ça roule.
démarrer une fois sur la distribution installée,
regénérer initramfs-linux.img pour prendre en compte l'usb.

reste à réduire la taille de la partition à 42 cylindres (350-400Mo),
la sauvegarder avec un dd,
la copier sur une clé usb amorçable.
et vous aurez un SuperDiskGrub2 pas aussi bien que le vrai,
mais qui fonctionne et que vous pourrez maintenir.

Fonctionnement:
booter l'ordinateur à réparer sur la clé
démarrer le distibution SuperDiskGrub2
se logger en root
génerer le grub.cfg: grub-mkconfig >/boot/grub/grub.cfg
rebootez: les distributions de l'ordinateur sont disponibles dans le menu grub2.

Précisions:
En préparant os-prober-1.49-1-i686.pkg.tar.xz à l'avance on évite l'installation des paquets de base-devel
Répondre