linuxrc/archInstall.sh

278 lines
8.6 KiB
Bash

#!/bin/bash
###################################
# SCRIPT D'INSTALATION ARCH LINUX #
###################################
# COMMENT UTILISER CE SCRIPT
#
# booter la clé :
#
# brancher une clé avec arch linux dedans
# vous pouvez le faire en telechargeant l'iso d'arch sur leur site oficiel
# et umount /dev/sdX?* (remplacer X par la lettre attribué a la clé usb (faire lsblk -S))
# puis faire
# sudo dd if=/chemin/vers/image.iso of=/dev/sdX bs=4M status=progress conv=fdatasync
# attendre un peu sa va etre long puis pour ejecter la clé :
# umount /media/nom-clé
# sudo eject /dev/sdX
# udisksctl power-off -b /dev/sdX
#
# lancer iso :
#
# brancher la clé sur votre pc et redemarrer le
# pendant le lancement spammer la touche pour acceder au BIOS (F2/F12/F11/...)
# une fois dans le bios lancer avec la clé
# puis séléctionné install arch (ou un truc dans le genre)
#
# installer script :
#
# faite loadkeys fr-latin1 (ou autre)
# pour faciliter l'ecriture des commandes qui suivent
# car par defaut le clavier est en qwerty
#
# l'installation ce fait par git, donc il faut installer git:
# pacman -Sy git
#
# git clone https://github.com/CaptainBoulbi/linuxrc.git
# cd linuxrc
#
# le script est le archInstall.sh
#
# configurer script :
#
# modifier la valeur des variable ci dessous pour personaliser votre installation
# chaque variable a son explication a coté
#
# une fois la configuration faite, faite :
# chmod +x ./archInstall.sh
# ./archInstall.sh
#
# attendez que l'instalation ce fini puis eteindre le pc (demander a la fin de l'install)
# enlevez la clé et re allumer votre pc
#
# et voila.
# VARIABLE DE CONFIGURATION DE L'INSTALATION
# user
HOSTNAME=pc # nom de la machine
ROOTPWD=pass # mdp en root
USRNAME=usr # nom de l'utilisateur principale
USRPWD=$ROOTPWD # mdp utilisateur principale
SUDOERS=1 # 1=droit sudo; 0=pas droit sudo
SUDOSANSPASSWD=1 # sudo cmd sans mdp (1=true;0=false)
LOGATBOOT=0 # au lancement se connecter automatiquement utile pour crypter
# langue
LANGUE_CLAVIER=fr-latin1 # liste langue clavier : ls /usr/share/kbd/keymaps/**/*.map.gz
LANG=en_US # langue géneral : cat /etc/locale.gen
POLICE=default8x16 # liste police dispo : ls /usr/share/kbd/consolefonts/
TIMEZONE=Europe/Paris # liste timezone : timedatectl list-timezones
# disque
DISKNAME=sda # nom du disque par defaut sda sinon lsblk
ENCRYPTED=0 # crypte le disque (0=false;1=true)
PASSPHRASE=$ROOTPWD # mdp pour decrypté la partition crypté
SIZEBOOTPART=1 # taille boot partition conseiller 1G min
SIZEHOMEPART= # `` home ``, si !defini : reste taille disque <!> G at end
OVERWRITEDISK=0 # ecrit random data sur part home (tres long) (0=false;1=true)
# install
STEPBYSTEP=0 # doit confirmer pour passer a etape suivante (debug mode)
INSTALLGUI=1 # install config perso
# FONCTION / VARIABLE DU PROG
NEXT=0
next(){
NEXT=$(expr $NEXT + 1)
echo step $NEXT : $*
if [ $STEPBYSTEP -eq 1 ]; then
read
fi
}
if [ $SUDOSANSPASSWD -eq 1 ]; then
SUDOSANSPASSWD="NOPASSWD: ALL"
else
SUDOSANSPASSWD=ALL
fi
# SCRIPT
next "change la langue du claver"
loadkeys $LANGUE_CLAVIER
next "change police"
setfont $POLICE
next "met a jour lheure et date a la timezone"
timedatectl set-timezone $TIMEZONE
# synchronise hardware (mdr jsp ce que sa fait mais c'est bien de le faire askip)
hwclock --systohc
next "partitione disque differament si crypter activé ou pas"
if [ $ENCRYPTED -eq 1 ]; then
next "??? création table de partition ???"
echo "w" | fdisk /dev/$DISKNAME
next "partionne le disque en deux (boot et home)"
echo ","$SIZEBOOTPART"G" | sfdisk /dev/$DISKNAME 1 # part pour boot (sda1)
echo ","$SIZEHOMEPART | sfdisk /dev/$DISKNAME 2 # part pour home (sda2)
next "formatte la partition pour le boot dans le format fat"
mkfs.fat -F32 /dev/$DISKNAME"1"
if [ $OVERWRITEDISK -eq 1 ]; then
next "remplit le disque de donné random pour rendre ilisible les meta-donné"
dd if=/dev/urandom of=/dev/$DISKNAME"2"
fi
next "active lencryption (jsp si cest un vrai mot) la partition sda2"
echo $PASSPHRASE | cryptsetup luksFormat /dev/$DISKNAME"2"
# open crypt part
echo $PASSPHRASE | cryptsetup open /dev/$DISKNAME"2" lolol
next "crée un file system"
mkfs.btrfs /dev/mapper/lolol
next "monte la partition crypté"
mount /dev/mapper/lolol /mnt
next "crée le dossier boot dans la part crypté et le monte sur la partition boot"
mkdir /mnt/boot
mount /dev/$DISKNAME"1" /mnt/boot
next "cree var pour config decrypt"
UUIDPART=$(lsblk -f | grep $DISKNAME"2" | awk '{print $4}')
UUIDCRYPT=$(lsblk -f | grep lolol | awk '{print $3}')
GRUBCONF="GRUB_CMDLINE_LINUX_DEFAULT=\\\"loglevel=3 quiet cryptdevice=UUID=$UUIDPART:cryptlvm root=UUID=$UUIDCRYPT\\\""
else
next "??? création table de partition ???"
echo "w" | fdisk /dev/$DISKNAME
next "partionne le disque en deux (boot et home)"
echo ","$SIZEBOOTPART"G" | sfdisk /dev/$DISKNAME 1 # part pour boot (sda1)
echo ","$SIZEHOMEPART | sfdisk /dev/$DISKNAME 2 # part pour home (sda2)
if [ $OVERWRITEDISK -eq 1 ]; then
next "remplit le disque de donné random pour rendre ilisible les meta-donné"
dd if=/dev/urandom of=/dev/$DISKNAME"1"
fi
next "formate file format disk"
mkfs.ext4 /dev/$DISKNAME"1"
mkfs.ext4 /dev/$DISKNAME"2"
next "monte les partition"
mount /dev/$DISKNAME"2" /mnt
mkdir /mnt/boot
mount /dev/$DISKNAME"1" /mnt/boot
fi
next "met a jour la mirrorlist pour mettre les liens les plus rapides en haut"
mv /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.old
reflector --country France --age 12 --protocol https --sort rate --save /etc/pacman.d/mirrorlist
cat /etc/pacman.d/mirrorlist.old >> /etc/pacman.d/mirrorlist
rm /etc/pacman.d/mirrorlist.old
next "installer paquet de base dans partition"
if [ $ENCRYPTED -eq 1 ]; then
pacstrap -K /mnt base base-devel linux linux-firmware man-db man-pages grub cryptsetup lvm2 networkmanager vim neovim efibootmgr
else
pacstrap -K /mnt base base-devel linux linux-firmware man-db man-pages grub networkmanager vim neovim efibootmgr
fi
next "crée le script a lancé dans chroot"
cat <<EOF> /mnt/script.sh
#!/bin/bash
NEXTI=0
next(){
echo step chroot : \$*
if [ $STEPBYSTEP -eq 1 ]; then
read
fi
}
next "etape du script chrooter"
next "maj timezone"
ln -sf /usr/share/zoneinfo/$TIMEZONE /etc/localtime
# met a jour l'hardware sur la date
hwclock --systohc
next "configure la langue"
sed -i "s/#$LANG/$LANG/g" /etc/locale.gen
locale-gen
echo "LANG=$LANG.UTF-8" > /etc/locale.conf
next "configure la langue du clavier"
loadkeys $LANGUE_CLAVIER
echo "KEYMAP=$LANGUE_CLAVIER" > /etc/vconsole.conf
next "definie le nom de la machine"
echo $HOSTNAME > /etc/hostname
next "fait des truc bizare avec lip et le nom de la machine, mais cest important"
echo -e "\n127.0.0.1\tlocalhost\n::1\t\tlocalhost\n127.0.1.1\t$HOSTNAME.localdomain $HOSTNAME" >> /etc/hosts
next "active le prog qui gere les connections internet"
systemctl enable NetworkManager
next "cree le mdp root"
echo "root:$ROOTPWD" | chpasswd
next "creer le compte user"
useradd -m $USRNAME
echo "$USRNAME:$USRPWD" | chpasswd
if [ $SUDOERS -eq 1 ]; then
sed -i "s/^# %wheel.*) $SUDOSANSPASSWD$/%wheel ALL=(ALL:ALL) $SUDOSANSPASSWD/g" /etc/sudoers
usermod -aG wheel $USRNAME
fi
if [ $LOGATBOOT -eq 1 ]; then
sudo mkdir -p /etc/systemd/system/getty@tty1.service.d/
echo "# /etc/systemd/system/getty@tty1.service.d/override.conf" >> /etc/systemd/system/getty@tty1.service.d/override.conf
echo "[Service]" >> /etc/systemd/system/getty@tty1.service.d/override.conf
echo "ExecStart=" >> /etc/systemd/system/getty@tty1.service.d/override.conf
echo "ExecStart=-/usr/bin/agetty --autologin $USRNAME --noclear %I \$TERM" >> /etc/systemd/system/getty@tty1.service.d/override.conf
fi
if [ $ENCRYPTED -eq 1 ]; then
next "active config pour decrypt au lancement"
sed -i "s/^HOOKS.*$/HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block encrypt lvm2 filesystems fsck)/g" /etc/mkinitcpio.conf
mkinitcpio -p linux
next "config grub pour crypt"
sed -i "s/^GRUB_CMDLINE_LINUX_DEFAULT.*$/$GRUBCONF/g" /etc/default/grub
fi
next "genere grug config"
grub-install /dev/$DISKNAME
# si ligne du dessus fonctionne pas : grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub
grub-mkconfig -o /boot/grub/grub.cfg
genfstab -U /mnt >> /mnt/etc/fstab
EOF
next "lance chroot avec la suite du script"
arch-chroot /mnt chmod +x /script.sh
arch-chroot /mnt /script.sh
arch-chroot /mnt rm /script.sh
if [ $INSTALLGUI -eq 1 ]; then
next "intall gui config"
cp linuxrc.sh /mnt/home/$USRNAME
echo -e "script installation gui copier a / apres redemarrage executer le"
fi
next "reboot"
echo apuyer sur entrez pour redemarrer le pc, noubliez pas de retirez la clé
read
reboot