Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/05/2021, à 18:52

Nuliel

modification live usb pour changer le noyau

Bonjour,
Je suis en train de faire un script qui a pour but de changer le noyau d'un live usb.
Voici actuellement mon script

#!/bin/bash

if [[ $# -ne 1 ]]; then
    echo "Usage: ./my_script {path_iso}"
    exit
fi

if [[ ! -e $1 ]]; then
    echo "File $1 not found"
    exit
fi
sudo apt install squashfs-tools schroot genisoimage syslinux-utils
mkdir -p ~/livecd/{iso,squashfs}
cd ~/livecd
sudo mount -o loop $1 /mnt
sudo cp -av /mnt/. iso
sudo umount /mnt
sudo mount -t squashfs -o loop iso/casper/filesystem.squashfs /mnt
sudo cp -av /mnt/. squashfs
sudo umount /mnt

# prepare for chroot
sudo mount --bind /proc squashfs/proc 
sudo mount --bind /sys squashfs/sys
sudo mount -t devpts none squashfs/dev/pts
sudo cp /etc/resolv.conf squashfs/etc/resolv.conf

# add modif for sources.list and prefs of apt
sudo cp ~/programmes_C/dell_inspiron_7490_workaround/eos_prefs.conf squashfs/etc/apt/preferences.d/eos.pref
echo "deb https://deb.endlessos.org/debian master endless" | sudo tee -a squashfs/etc/apt/sources.list

# let's go deeper
sudo chroot squashfs
# install linux kernel from endless OS thanks to apt preferences set before
wget -q https://deb.endlessos.org/keys/eos-pub-archive-key.asc -O- | sudo apt-key add -
# sudo: unable to resolve host nuliel-desktop: Name or service not known , pb?
apt update
apt install linux-base linux-image-generic linux-headers-generic
apt clean
rm -r /var/crash/*
# rm -r /var/cache/*

# exit the chroot
umount -lf /sys
umount -lf /proc
# umount -lf /dev/pts # how do we do???
rm /etc/resolv.conf
rm /etc/hosts
exit

# in case they are needed
sudo mv iso/casper/{initrd,vmlinuz}

# insert new kernel
sudo cp squashfs/boot/initrd.img-* iso/casper/initrd
sudo cp squashfs/boot/vmlinuz-* iso/casper/vmlinuz
# useful?
sudo chmod 444 iso/casper/vmlinuz
sudo chmod 444 iso/casper/initrd

# renew squashfs
sudo chmod a+w iso/casper/filesystem.manifest
sudo chroot squashfs dpkg-query -W --showformat='${Package}  ${Version}\n' > iso/casper/filesystem.manifest
sudo chmod go-w iso/casper/filesystem.manifest


cd iso
sudo bash -c "find . -path ./isolinux -prune -o -type f -not -name md5sum.txt -print0 | xargs -0 md5sum | tee md5sum.txt"

# reconstruct the iso file
sudo mkisofs -U -A "Custom" -V "Custom" -volset "Custom" -J -joliet-long -r -v -T -o ../Custom.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot .
cd ..
sudo isohybrid -u Custom.iso
cd ~
rm -r ~/livecd
echo "Finished"

Malheureusement cela ne fonctionne pas: j'arrive sur un shell dans l'initramfs...
Cela est dû à cette partie:

# insert new kernel
sudo cp squashfs/boot/initrd.img-* iso/casper/initrd
sudo cp squashfs/boot/vmlinuz-* iso/casper/vmlinuz

qui a pour but de permettre de démarrer avec le nouveau noyau. Sans ces deux lignes, l'ancien noyau est utilisé et cela fonctionne. Avec le nouveau est utilisé et j'obtiens après passage du paramètre noyau "debug" le fait que la variable root n'est pas initialisée. Pourtant cette variable n'est initialisée par les paramètres du noyau lorsque le système est installé, mais pas quand on est en live usb.

Quelqu'un saurait comment faire pour pouvoir changer le noyau d'un live usb?
Merci d'avance,
Nuliel

(je précise aussi que mon script actuel est assez basique et un peu crade, mais s'il pouvait marcher ce serait déjà bien!)


[ poster un retour de commande ] [ poster une photo ]
Thinkpad x220, Dell latitude E7270 (i7 6600U, 16 Go de RAM, ...), Thinkstation E32 modifié: i5-4570, GTX 1060 6 Gb, 16 Gb de RAM, ...
Mon nouveau blog: nuliel.fr

Hors ligne

#2 Le 28/05/2021, à 09:29

Vobul

Re : modification live usb pour changer le noyau

Bon j'ai pas regardé longtemps, mais ne dois-tu pas rebuild initramfs ? (avec update-initramfs)

Sinon quatre conseils pour ton script :

1. Exécute-le en root au lieu de mettre des sudo partout. Tu peux ajouter un check au début : t'es pas root ? exit 1

2. Utilise shellcheck

3. Si il n'est pas interactif, utilise le flag -y pour apt

4. Vu qu'il commence à être un peu long, n'hésite pas à splitter en fonctions


Vobul

Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.

Hors ligne

#3 Le 28/05/2021, à 12:01

Nuliel

Re : modification live usb pour changer le noyau

Merci Vobul pour tes conseils.
Pour l'update-initramfs, je crois qu'à l'installation du noyau, l'initramfs est mis à jour automatiquement, mais dans le doute je vais le rajouter.
Pas faux pour sudo et -y pour apt (en réalité actuellement je lance le script ligne par ligne).
Je ne connaissais pas shellcheck, son analyse est très intéressante!


[ poster un retour de commande ] [ poster une photo ]
Thinkpad x220, Dell latitude E7270 (i7 6600U, 16 Go de RAM, ...), Thinkstation E32 modifié: i5-4570, GTX 1060 6 Gb, 16 Gb de RAM, ...
Mon nouveau blog: nuliel.fr

Hors ligne

#4 Le 28/05/2021, à 12:07

Vobul

Re : modification live usb pour changer le noyau

Oui shellcheck c'est le bien. Ça t'évite des conneries genre tu "cd" dans un non existing directory puis tu "rm -rf" sauf que c'est pas le bon dir... oops

Aussi, au début, ça peut être une bonne idée d'ajouter "set -euxo pipefail", c'est un peu le "strict mode" de bash. Voir : https://vaneyckt.io/posts/safer_bash_sc … _pipefail/


Vobul

Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.

Hors ligne

#5 Le 28/05/2021, à 17:08

Nuliel

Re : modification live usb pour changer le noyau

Effectivement, je n'avais pas pensé à ce cas là, c'est du coup très utile shellcheck!
Ok pour le mode strict.
Effectivement en refaisant l'initramfs juste sur le noyau installé par défaut j'ai une chiée d'erreurs. Je vais déjà commencer par corriger cela.
Merci

Edit: pour corriger les erreurs j'ai rajouté

export HOME=/root
export LC_ALL=C

mais j'ai encore un nuliel-desktop qui doit encore traîner, vu que j'ai un warning lorsque j'importe la clé gpg, mais je verrai cela plus tard

Finalement la mise à jour de l'initramfs ne change rien sad

Je vais reprendre https://help.ubuntu.com/community/LiveCDCustomization

Dernière modification par Nuliel (Le 28/05/2021, à 17:37)


[ poster un retour de commande ] [ poster une photo ]
Thinkpad x220, Dell latitude E7270 (i7 6600U, 16 Go de RAM, ...), Thinkstation E32 modifié: i5-4570, GTX 1060 6 Gb, 16 Gb de RAM, ...
Mon nouveau blog: nuliel.fr

Hors ligne

#6 Le 28/05/2021, à 22:47

Nuliel

Re : modification live usb pour changer le noyau

Hop, nouveau script, spoiler ça marche pas (toujours l'initramfs):

#!/bin/bash

# run as root?
if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 
   exit 1
fi

# one argument?
if [[ $# -ne 1 ]]; then
    echo "Usage: ./my_script {path_iso}"
    exit
fi

# file exists?
if [[ ! -e $1 ]]; then
    echo "File $1 not found"
    exit
fi

# install utilities
apt install -y squashfs-tools schroot genisoimage syslinux-utils

# create all directories and copy files on it
mkdir -p ~/livecd/{iso,squashfs}
cd ~/livecd || exit
mount -o loop "$1" /mnt
cp -av /mnt/. iso
umount /mnt
mount -t squashfs -o loop iso/casper/filesystem.squashfs /mnt
cp -av /mnt/. squashfs
umount /mnt

# add endless OS repo
echo "deb https://deb.endlessos.org/debian master endless" | tee -a squashfs/etc/apt/sources.list

# add modif for sources.list and prefs of apt
echo -e "# don't use packages of endless OS
Package: *
Pin: origin "https://deb.endlessos.org/debian/"
Pin-Priority: -1

# only use linux-{image,headers} packages of endless OS
Package: linux-{image-generic,base,headers-generic}
Pin: origin "https://deb.endlessos.org/debian/"
Pin-Priority: 1000" > squashfs/etc/apt/preferences.d/eos.pref


cp /etc/resolv.conf squashfs/etc/


mount --bind /dev/ squashfs/dev
# let's go deeper
chroot squashfs
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts

export HOME=/root
export LC_ALL=C

# install linux kernel from endless OS thanks to apt preferences set before
wget -q https://deb.endlessos.org/keys/eos-pub-archive-key.asc -O- | apt-key add -
apt update
# install kernel of endless OS
apt install -y linux-base linux-image-generic linux-headers-generic

# it's time to clean
apt clean
rm -rf /tmp/* ~/.bash_history
rm -r /var/crash/*
rm /etc/resolv.conf

# unmount and exit the chroot
umount /proc || umount -lf /proc
umount /sys
umount /dev/pts
umount /dev || echo "W: Failed to unmount /dev"
exit

# in case they are needed, for debug purpose
mv iso/casper/{initrd,vmlinuz} .

# insert new kernel
cp squashfs/boot/initrd.img-* iso/casper/initrd # .gz useful?
cp squashfs/boot/vmlinuz-* iso/casper/vmlinuz

# renew squashfs
chmod a+w iso/casper/filesystem.manifest
chroot squashfs dpkg-query -W --showformat='${Package}  ${Version}\n' > iso/casper/filesystem.manifest
chmod go-w iso/casper/filesystem.manifest

# update squashfs
rm iso/casper/filesystem.squashfs
mksquashfs squashfs iso/casper/filesystem.squashfs

# update filesystem.size
printf $(du -sx --block-size=1 squashfs | cut -f1) > iso/casper/filesystem.size

# update md5sums
cd iso
rm md5sum.txt
find -type f -print0 | xargs -0 md5sum | grep -v isolinux/boot.cat | tee md5sum.txt

# create iso
#from help.ubuntu
# mkisofs -D -r -V "custom" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../Custom.iso .
mkisofs -U -A "Custom" -V "Custom" -volset "Custom" -J -joliet-long -r -v -T -o ../Custom.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot .
#usb compatible
cd ..
isohybrid -u Custom.iso

### old script

# cd iso
# bash -c "find . -path ./isolinux -prune -o -type f -not -name md5sum.txt -print0 | xargs -0 md5sum | tee md5sum.txt"

# # reconstruct the iso file
# mkisofs -U -A "Custom" -V "Custom" -volset "Custom" -J -joliet-long -r -v -T -o ../Custom.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot .
# cd ..
# isohybrid -u Custom.iso
# cd ~
# rm -r ~/livecd
# echo "Finished"

J'ai retiré les sudo et mis les -y pour apt install, je continuerai de le nettoyer demain

Dernière modification par Nuliel (Le 28/05/2021, à 22:48)


[ poster un retour de commande ] [ poster une photo ]
Thinkpad x220, Dell latitude E7270 (i7 6600U, 16 Go de RAM, ...), Thinkstation E32 modifié: i5-4570, GTX 1060 6 Gb, 16 Gb de RAM, ...
Mon nouveau blog: nuliel.fr

Hors ligne

#7 Le 29/05/2021, à 21:54

Nuliel

Re : modification live usb pour changer le noyau

Petit up, j'ai trouvé https://github.com/xptsp/modify_ubuntu_kit et https://github.com/mvallim/live-custom- … om-scratch, il y a des différences par rapport à mon script mais à mon avis pas fondamentales.


[ poster un retour de commande ] [ poster une photo ]
Thinkpad x220, Dell latitude E7270 (i7 6600U, 16 Go de RAM, ...), Thinkstation E32 modifié: i5-4570, GTX 1060 6 Gb, 16 Gb de RAM, ...
Mon nouveau blog: nuliel.fr

Hors ligne

#8 Le 30/05/2021, à 15:39

Nuliel

Re : modification live usb pour changer le noyau

Mon fichier préférences était faux.
Voici une version qui devrait un peu plus jouer son rôle:

Package: *
Pin: origin "deb.endlessos.org"
Pin-Priority: 1

Package: linux-image-generic, linux-headers-generic
Pin: origin "deb.endlessos.org"
Pin-Priority: 1000

A noter que j'installe en chroot les deux packages  linux-image-generic, linux-headers-generic pour passer sur ceux d'endless OS. Plus qu'à tester pour voir si ça tient. Au passage je sais pas trop s'il faut que j'installe aussi linux-base, je sais pas trop à quoi il sert.

Dernière modification par Nuliel (Le 30/05/2021, à 15:40)


[ poster un retour de commande ] [ poster une photo ]
Thinkpad x220, Dell latitude E7270 (i7 6600U, 16 Go de RAM, ...), Thinkstation E32 modifié: i5-4570, GTX 1060 6 Gb, 16 Gb de RAM, ...
Mon nouveau blog: nuliel.fr

Hors ligne

#9 Le 30/05/2021, à 15:49

Vobul

Re : modification live usb pour changer le noyau

Au fait pourquoi tu cherches à faire ça ?


Vobul

Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.

Hors ligne

#10 Le 30/05/2021, à 15:52

Nuliel

Re : modification live usb pour changer le noyau

C'est pour le Dell Inspiron 7490 qui a la particularité de ne pas vouloir de Linux (voir https://forum.ubuntu-fr.org/viewtopic.php?id=2064635 , en gros une histoire de BIOS qui permet pas de choisir le mode AHCI, le mode RAID est mis par défaut et en plus il y a qu'un disque...)
En fait actuellement la seule façon d'avoir un linux sur ce pc c'est d'installer endless OS ou d'utiliser le noyau d'endless OS sur une autre distribution (ce que je cherche à faire, actuellement il y a une iso modifiée mais dont le noyau n'est pas mis à jour)

Edit: bon finalement ça marche toujours pas

Dernière modification par Nuliel (Le 30/05/2021, à 16:01)


[ poster un retour de commande ] [ poster une photo ]
Thinkpad x220, Dell latitude E7270 (i7 6600U, 16 Go de RAM, ...), Thinkstation E32 modifié: i5-4570, GTX 1060 6 Gb, 16 Gb de RAM, ...
Mon nouveau blog: nuliel.fr

Hors ligne

#11 Le 30/05/2021, à 21:11

Nuliel

Re : modification live usb pour changer le noyau

J'ai pas mal avancé, et j'ai testé de juste mettre le nouveau vmlinuz et initrd dans casper et ça ne marche pas (donc en zappant 75% du script).
Je pense que le problème vient de la génération de l'initrd, et qu'en fait il manque des scripts pour la génération d'initrd spécifiques aux live usb, notamment par l'existence de paquets comme live-boot et live-boot-initramfs-tools


[ poster un retour de commande ] [ poster une photo ]
Thinkpad x220, Dell latitude E7270 (i7 6600U, 16 Go de RAM, ...), Thinkstation E32 modifié: i5-4570, GTX 1060 6 Gb, 16 Gb de RAM, ...
Mon nouveau blog: nuliel.fr

Hors ligne

#12 Le 30/05/2021, à 21:27

geole

Re : modification live usb pour changer le noyau

Bonsoir Nuliel.
Malbo  a bricolé récemmement une live-usb. Je te laisse décortiquer. https://forum.ubuntu-fr.org/viewtopic.p … #p22459084

Dernière modification par geole (Le 30/05/2021, à 21:29)

Hors ligne

#13 Le 30/05/2021, à 21:29

Nuliel

Re : modification live usb pour changer le noyau

Merci pour l'info geole, je vais aller voir ce fil


[ poster un retour de commande ] [ poster une photo ]
Thinkpad x220, Dell latitude E7270 (i7 6600U, 16 Go de RAM, ...), Thinkstation E32 modifié: i5-4570, GTX 1060 6 Gb, 16 Gb de RAM, ...
Mon nouveau blog: nuliel.fr

Hors ligne

#14 Le 31/05/2021, à 16:21

Nuliel

Re : modification live usb pour changer le noyau

Effectivement cubic pourrait rendre la tâche bien plus simple. Par contre c'est dommage mais mon pc fixe n'est pas installé en mode EFI, et mon pc portable a le mode EFI mais j'ai un debian sid dessus.... Je croise les doigts pour que ça tourne sous debian sid vu que cubic produirait des iso EFI lorsque le système est installé en mode EFI (à vérifier si c'est encore vrai)

Dernière modification par Nuliel (Le 31/05/2021, à 16:54)


[ poster un retour de commande ] [ poster une photo ]
Thinkpad x220, Dell latitude E7270 (i7 6600U, 16 Go de RAM, ...), Thinkstation E32 modifié: i5-4570, GTX 1060 6 Gb, 16 Gb de RAM, ...
Mon nouveau blog: nuliel.fr

Hors ligne

#15 Le 31/05/2021, à 17:03

Nuliel

Re : modification live usb pour changer le noyau

Un grand merci geole, je ne connaissais pas l'existence de cet outil, et il fonctionne!!!
Je pense que je vais déjà installer kubuntu sur le fameux pc et faire ce qu'il faut pour que tout tourne bien, et après je reprendrai ce fil parce que je serais curieux de savoir ce que j'ai mal fait dans le script.


[ poster un retour de commande ] [ poster une photo ]
Thinkpad x220, Dell latitude E7270 (i7 6600U, 16 Go de RAM, ...), Thinkstation E32 modifié: i5-4570, GTX 1060 6 Gb, 16 Gb de RAM, ...
Mon nouveau blog: nuliel.fr

Hors ligne

#16 Le 31/05/2021, à 18:28

geole

Re : modification live usb pour changer le noyau

Nuliel a écrit :

Après je reprendrai ce fil parce que je serais curieux de savoir ce que j'ai mal fait dans le script.

Je te comprends....   Une fois, j'ai exécuté  en lignes de commandes. Uniquement pour voir   et vu que ce n'était pas pour moi ni pour les aidés du forum...   https://doc.ubuntu-fr.org/personnaliser_livecd

Hors ligne

#17 Le 31/05/2021, à 19:44

Nuliel

Re : modification live usb pour changer le noyau

En fait j'en avais déjà fait un avec juste un logiciel (wxmaxima), j'avais déjà galéré, alors un changement de noyau ça ne pouvait pas se passer autrement.


[ poster un retour de commande ] [ poster une photo ]
Thinkpad x220, Dell latitude E7270 (i7 6600U, 16 Go de RAM, ...), Thinkstation E32 modifié: i5-4570, GTX 1060 6 Gb, 16 Gb de RAM, ...
Mon nouveau blog: nuliel.fr

Hors ligne