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 26/03/2021, à 17:18

geole

[En test] Script installation de REFIND

Bonjour.
Je suis loin de connaître les lignes de commandes et le script. En voulant améliorer une documentation, je tente de fabriquer un script.   Unitairement, les lignes de commandes fonctionnent. Mais lorsque je veux rassembler  tout cela  pour en faire l'exécution par la technique copier/coller, pas grand chose ne fonctionne.
  J'ai tenté de mettre ce script dans un fichier, de mettre les droits d'exécution dans le fichier. Cela semble mieux fonctionner. Mais le problème est que ce script est prévu pour être utilisé en dépannage du démarrage de l'ordinateur.
Donc souvent on a une partition FAT32 et il faut un montage très spécial pour pouvoir mettre les droits d'exécution.
Du coup, comme le script n'est pas si volumineux que cela, je pense  que le proposer à l'utilisateur en technique copier/coller est jouable.
   Ma première question.
     J'envisage de mettre  dans cet  échange le lieu de récupération du script.
     Il y a probablement d'autres possibilités. Mais je ne pense pas que le mettre dans la documentation soit une bonne solution.... S'il y a mieux, je suis preneur.
  Ma demande.
    J'ai écrit comme j'ai pu,  Il peut donc y avoir beaucoup mieux pour codifier. N'hésitez pas à proposer.
    Mon souhait serait que malgré tout, les commandes ne  deviennent pas trop incompréhensibles.
   Je ne peux pas utiliser la sortie exit du script. Les messages de sorties n'ont pas le temps d'être lus. D'où la double comparaison pour que la totalité du script se déroule.

Les deux problèmes que je rencontre.
1)  Je souhaite  transmettre une information à l'utilisateur, lui laisser le temps de la lire avant de continuer
      Je peux toujours mettre une commande sleep de 96 secondes et lui demander de patienter un peu.
     Initialement j'ai pensé à une commande read. Il suffirait que l'utilisateur appuie sur return lorsqu'il a fini de lire, de comprendre ce qui est demandé et de décider de passer à la suite ou pas.
Dans un contexte unitaire, cette commande fonctionne, mais en utilisation copier/coller, il me semble qu'elle récupère la suite du script.. (un écho de la réponse à read)..
    Donc quelle solution ????
2) Ce script va quelquefois au bout, quelquefois non. Je ne sais pas trop si c'est à cause de sa taille ou à cause de la commande read.  J'ai une très mauvaise parade en le découpant en deux mais cela va compliquer son mode d'emploi.   

Voici donc les deux morceaux du script.

### Procédure pour installer refind à la place du fichier de boot de windows devant être lancée sous root
#On se sait jamais
setxkbmap fr
### Est-on bien  dans une session EFI?
if [ -d /sys/firmware/efi ]; then
   MSG=""
   ## Est-on bien l'utilisateur root.
   if [ $UID != 0 ]; then
      MSG="\n\a\E[31mVous devez être l'utilisateur root pour exécuter ce script.\n\E[0m\E[34;47msudo -i\E[0m\n"
   fi
else 
   MSG="\n\a\E[31mSession non-EFI.... Refind ne sait pas gérer. Abandon.\n\E[0m"
fi
## Le répertoire de boot est-il absent?
if [ ${#MSG} = 0 ]; then
   if [ ! -d /boot/efi/EFI ]; then
      #monter la partition de boot EFI
      PartEFI=$(blkid | grep vfat | head -1 | cut -d: -f1 ) && echo $PartEFI
      mkdir -p /boot/efi
      mount -v $PartEFI /boot/efi
   fi      
   ls /boot/efi/EFI
   ## windows est-il absent?
   if [ ! -f /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi ]; then
      MSG="\nLe boot de windows est absent. Il est possible qu'il existe plusieurs partitions de boot. \E[31mCe cas n'est pas prévu.\E[0m Abandon du script.\n\a"  
   fi
   ## refind est-il absent?
   if [ ${#MSG} = 0 ]; then 
      if [ ! -d /boot/efi/EFI/refind ]; then
         echo Refind est absent. Installation de refind et de efibootmgr lancée. 
         add-apt-repository  universe
         echo -e "\nveuillez valider la réponse \e[1mOUI\e[0m prépositionnée dans la grille d'installation de refind qui va s'afficher.\n"
         echo -e "appuyer sur la touche \e[1mEntrée\e[0m pour continuer."
         read 
         sleep  96
         apt install --reinstall refind
         # On le transfert dans la partition de boot
         cp -r /usr/share/refind/*  /boot/efi/EFI   
         # On en profite pour fabriquer le fichier de configuration.
         cp -v /boot/efi/EFI/refind/refind.conf-sample   /boot/efi/EFI/refind/refind.conf
      fi
   fi      
   ## On se positionne dans la partition de boot efi 
   cd /boot/efi/EFI 
   # Par prudence, sauvons le fichier de boot de windows 
   cp -v   Microsoft/Boot/bootmgfw.efi Microsoft/Boot/bootmgfw$(date +"-%Y-%m-%d-%H-%M-%S").efi
   # On va vérifier la présence du fichier de boot de sécurité de windows.
   if [ ! -f Microsoft/boot/bkbootmgfw.efi ]; then
      echo le fichier de sécurité est absent, on va le créer.
      cp -v   Microsoft/Boot/bootmgfw.efi Microsoft/Boot/bkbootmgfw.efi
   fi
   ## Mettons à jour le fichier de configuration de refind. Vérifions si cela a déjà été fait.
   if grep -q "\\\EFI\\\Microsoft\\\Boot\\\bkbootmgfw.efi" refind/refind.conf ; then
      cat >>refind/refind.conf<<EOF
menuentry "Windows 10" {
icon \EFI\refind\icons\os_win.png
loader \EFI\Microsoft\Boot\bkbootmgfw.efi    }
EOF
       
# la  borne doit être suivie d'une ligne à espace. 
   fi  
   SECURE=$(bootctl status 2>/dev/null | grep "Secure Boot") && echo $SECURE                             
   SEC=$(echo $SECURE|cut -d: -f2) && echo $SEC
fi  
echo -e $MSG      
##Terminé
### Procédure pour écraser le fichier de boot de windows  par celui de refind devant être lancée sous root Cette procéduire doit être lancée a la suite de la précédante 


SECURE=$(bootctl status 2>/dev/null | grep "Secure Boot") && echo $SECURE                             
SEC=$(echo $SECURE|cut -d: -f2) && echo $SEC
MSG=""
cd /boot/efi/EFI   
# a-t-on affaire à un ordinateur sécurisé ? 
if [ ${#MSG} = 0 ]; then
   if [ $SEC = "enabled" ];then 
      echo -e "le boot est en mode secure. Cela  complique le redémarrage.  Faites \e[1mCtrl c\e[0m si vous ne souhaitez pas continuer. Sinon appuyer sur la touche  \e[1mEntrée\e[0m  pour valider."
      read  Rep ; echo $Rep 
      if [ ! -f ubuntu/shimx64.efi ]; then
         MSG="\n\a\E[31mil n'existe pas de fichier de boot securisé de substitution. l'opération ne peut pas se faire....\n\E[0m"
      else
         cp -R ubuntu/*  Microsoft/Boot
         cp -R refind/*  Microsoft/Boot
         #Mettre le fichier de boot du shim à la place de celui de windows préventivement sauvé.
         cp -v  Microsoft/Boot/shimx64.efi Microsoft/Boot/bootmgfw.efi
         #Mettre le fichier de boot de refind à la place de celui du grub
         cp -v  Microsoft/Boot/refind_x64.efi Microsoft/Boot/grubx64.efi
         MSG="\nInstallation terminée. Voir la documentation refind pour faire valider les clés lors du premier boot.\nSouvenez-vous que la clé de sécurité est dans le fichier  /efi/Microsoft/Boot/keys/refind.cer\n"  
      fi
   echo FIN INSTALLATION
   fi
fi
# a-t-on affaire à un ordinateur non sécurisé ? 
if [ ${#MSG} = 0 ]; then
   if [ $SEC = "disabled" ];then 
       echo -e "le boot est en mode non secure. Cela  ne doit poser aucun problème pour le redémarrage.  Faites \e[1mCtrl c\e[0m si vous ne souhaitez pas continuer. Sinon appuyer sur la touche  \e[1mEntrée\e[0m  pour valider."
       read  Rep ; echo $Rep
       cp -R refind/* Microsoft/Boot
       #Mettre le fichier de boot de refind à la place de celui de windows préventivement sauvé
       cp  -v Microsoft/Boot/refind_x64.efi Microsoft/Boot/bootmgfw.efi
       MSG="\nInstallation terminée.\n"    
   fi
fi
# a-t-on affaire à un contexte inconnu ? 
if [ ${#MSG} = 0 ]; then
   MSG="\nType de securité inconnu. Rien n'est fait hormis l'installation standard de refind.\n"
fi
# Terminé. Edition du compte-rendu   
echo -e $MSG      
##Terminé

Je pense mentionner le script dans Le paragraphe 6.9  de cette  documentation.

Merci pour votre aide..

Dernière modification par geole (Le 31/03/2021, à 18:43)

Hors ligne

#2 Le 26/03/2021, à 17:39

Watael

Re : [En test] Script installation de REFIND

quand l'utilisateur n'est pas root, il faut quitter le script.
quand le système n'a pas d'EFI, il faut quitter le script.
${#MSG} est testé à nouveau, alors qu'on est dans le cas où il a été testé positivement.
read tout seul. pas besoin de sleep en plus.
on ne cd pas dans un script : c'est des coups à se perdre. si le chemin est "trop long", utilise une variable.

la  borne doit être suivie d'une ligne à espace.

comprends pas. sad


Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 26/03/2021, à 20:20

geole

Re : [En test] Script installation de REFIND

Merci  de te pencher sur le problème

Pour les réponses

1) Lorsqu'on quitte le script par un exit. On ne peut pas lire ce que le script veut afficher!!
   Du moins, c'est ce que j'avais eu plusieurs fois. d'où l'astuce
   En  voulant le montrer de ma session installée, C'est raté........
   Cela affiche bien le message de déconnexion

     root@a:~#        echo Vous vous êtes trompés
     Vous vous êtes trompés
     root@a:~#        exit 
    déconnexion

    Je vais reprendre dans le contexte live-usb

2)  Pour le problème READ
c'est bien bloqué et c'est je que je veux.
  Je viens de voir que cela fonctionne pour prévu pour la session installée
  Je vais reprendre dans le contexte live-usb

Pour les deux cas, Ma session installée est en 20.04 Mais la clé USB d'installation est en 18.04
   Je vais refaire une clé USB 20.04
Mais je suis quand même surpris que des commandes de base ne se comportent  pas pareil.

3) Pour cat >>refind/refind.conf<<EOF
  Pas de problème non plus en session  installée.

4) Bonne idée pour la variable PDM="/boot/efi/EFI" && echo $PDM
Cela aura l'avantage de diminuer la longueur des lignes.

La suite: Demain, si je suis en forme, je fais une live-USB de la version 20.04 et regarde s'il y a un bon comportement.

Hors ligne

#4 Le 26/03/2021, à 20:27

Watael

Re : [En test] Script installation de REFIND

1/ sortir d'un script ne fait pas quitter le terminal
sortir d'un terminal fait quitter le terminal. smile


Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 26/03/2021, à 21:01

geole

Re : [En test] Script installation de REFIND

J'en suis donc au premier paragraphe revu

ERR="\nAppuyer sur Entrée pour quitter la procédure"
### Est-on bien  dans une session EFI?
if [ ! -d /sys/firmware/efi ]; then
   ## Est-on bien l'utilisateur root.
   if [ $UID != 0 ]; then
      echo -e "\n\a\E[31mVous devez être l'utilisateur root pour exécuter ce script.\n\E[0m\E[34;47msudo -i\E[0m $ERR"
      read
      exit 1  
   fi
else 
   echo -e "\n\a\E[31mSession non-EFI.... Refind ne sait pas gérer. Abandon.\n\E[0m $ERR"
   read
   exit 2
fi

J'ai trouvé cette solution mais cela ne me semble pas terrible. L'utilisateur doit ré-ouvrir un terminal pour recommencer. Si je pouvais lui éviter de le faire......
De plus, je dois mettre le read pour lui permettre de prendre connaissance de l'erreur.
Je préfère presque une sortie normale avec test de la longueur du message d'erreur....

Hors ligne

#6 Le 26/03/2021, à 21:59

Watael

Re : [En test] Script installation de REFIND

ne souhaiterais-tu pas que le script ne s'exécute que si c'est root qui le lance ?

il faut bien penser l'algorithme.

Dernière modification par Watael (Le 26/03/2021, à 22:00)


Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 27/03/2021, à 16:12

geole

Re : [En test] Script installation de REFIND

Bonjour
J'avance dans l'écriture du script. Les problèmes sont un peu différents : J'ai remanié et je viens de booter avec la version 20.04.

Voici ce qui se passe lorsque  je prends en compte la remarque de ne pas mettre une ligne blanche après la borne EOF d'insertion  de ligne dans un fichier
A) Si je suis un utilisateur quelconque
    Je copie le script avec crtl a et ctrl c
    J'ouvre une session avec ctrl alt t
    Je ne peux pas coller le contenu avec crtl v, je sois obligé d'utiliser le touch pad ou la souris pour le faire. Mais l'insertion est correcte.
   La session se ferme alors automatiquement sans rien afficher. L'utilisateur n'est donc pas au courant de son erreur.
B) Si je suis l'utilisateur root, en faisant les même actions, cela s 'affiche à l'écran. Je joins un coller du résultat, on y voit bien la ligne EOF suivie de la ligne FI
On voit surtout que le script est incomplet et semble lié aux sorties exit.

ubuntu@ubuntu:~$ sudo -i
root@ubuntu:~# ### Procédure pour installer refind à la place du fichier de boot de windows devant être lancée sous root
root@ubuntu:~# #On se sait jamais
t-on affaire à un ordinateur non sécurisé ? 
if [ $SEC != "disabled" ];then 
   echo -e "le boot est en mode non secure. Cela root@ubuntu:~# setxkbmap fr
 ne doit poseroot@ubuntu:~# ERR="Appuyer sur la touche \e[1mEntrée\e[0m pour"
root@ubuntu:~# 
root@ubuntu:~# ## Est-on bien l'utilisateur root.
root@ubuntu:~# if [ $UID != 0 ]; then
>    echo -e "\n\a\E[31mVous devez être l'utilisateur root pour exécuter ce script.\E[0m\nPour devenir root, veuillez frapper les deux mots de la ligne ci-dessous.\n\E[0m\E[34;47msudo -i\E[0m\navant de faire le 'coller'. Vous pourrez alors relancer le script.\n"
>    echo -ne $ERR 
>    echo " sortir du script et pouvoir le relancer."
>    read
>    exit 1
> fi
root@ubuntu:~# 
root@ubuntu:~# ### Est-on bien  dans une session EFI?
root@ubuntu:~# if [  -d /sys/firmware/efi ]; then
>    echo -e "\n\a\E[31mSession non-EFI.... Refind ne sait pas gérer. Abandon.\n\E[0m"
>    echo -ne $ERR 
>    echo " sortir du script et rebooter en mode EFI avant de pouvoir relancer."
>    read
>    exit 2
> fi

Session non-EFI.... Refind ne sait pas gérer. Abandon.

r aucun problème pour le redémarrage.  Faites \e[1mCtrl c\e[0m si vous ne souhaitez pas continuer. Sinon appuyer sur la touche  \e[1mEntrée\e[0m  pour valider." 
   read   
   cp -R $PDM/EFI/refind/* $PDM/EFI/Microsoft/Boot
   #Mettre le fichier de boot de refind à la place de celui de windows préventivement sauvé
   cp  -v $PDM/EFI/Microsoft/Boot/refind_x64.efi $PDM/EFI/Microsoft/Boot/bootmgfw.efi
   MSG="Installation terminée."    
fi
# a-t-on affaire à un contexte inconnu ? 
if [ ${#MSG} = 0 ]; then
   MSG="Type de securité inconnu. Rien n'est fait hormis l'installation standard de refind."
fi
# Terminé. Edition du compte-rendu
md5sum  $PDM/EFI/Microsoft/Boot/*.efi 
echo -e $MSG      




   




                        Appuyer sur la touche Entrée pour sortir du script et rebooter en mode EFI avant de pouvoir relancer.
                                   
 logout
ubuntu@ubuntu:~$ cure. Cela  ne doit poser aucun problème pour le redémarrage.  Faites \e[1mCtrl c\e[0m si vous ne souhaitez pas continuer. Sinon appuyer sur la touche  \e[1mEntrée\e[0m  pour valider." 
>    read   
>    cp -R $PDM/EFI/refind/* $PDM/EFI/Microsoft/Boot
>    #Mettre le fichier de boot de refind à la place de celui de windows préventivement sauvé
>    cp  -v $PDM/EFI/Microsoft/Boot/refind_x64.efi $PDM/EFI/Microsoft/Boot/bootmgfw.efi
>    MSG="Installation terminée."    
> fi
> # a-t-on affaire à un contexte inconnu ? 
> if [ ${#MSG} = 0 ]; then
>    MSG="Type de securité inconnu. Rien n'est fait hormis l'installation standard de refind."
> fi
> # Terminé. Edition du compte-rendu
> md5sum  $PDM/EFI/Microsoft/Boot/*.efi 
> echo -e $MSG      
> 
> 
> 
> 
>    
> 
> 
> 
> 
>                                                            
>  

On y voit le message d'erreur quelque part. De plus, il faut faire ctrl c pour finir la procédure!
En revanche si je mets une ligne à espace  et surtout pas une ligne de commentaires, cela fonctionne correctement en quittant bien.

>ubuntu@ubuntu:~$ sudo -i ### Procédure pour installer refind à la place du fichier de boot de windows devant être lancée sous root
root@ubuntu:~# #On se sait jamais
root@ubuntu:~# setxkbmap fr
root@ubuntu:~# ERR="Appuyer sur la touche \e[1mEntrée\e[0m pour"
root@ubuntu:~# 
root@ubuntu:~# ## Est-on bien l'utilisateur root.
root@ubuntu:~# if [ $UID != 0 ]; then
>    echo -e "\n\a\E[31mVous devez être l'utilisateur root pour exécuter ce script.\E[0m\nPour devenir root, veuillez frapper les deux mots de la ligne ci-dessous.\n\E[0m\E[34;47msudo -i\E[0m\navant de faire le 'coller'. Vous pourrez alors relancer le script.\n"
>    echo -ne $ERR 
>    echo " sortir du script et pouvoir le relancer."
>    read
>    exit 1
> fi
root@ubuntu:~# 
root@ubuntu:~# ### Est-on bien  dans une session EFI?
root@ubuntu:~# if [  -d /sys/firmware/efi ]; then
>    echo -e "\n\a\E[31mSession non-EFI.... Refind ne sait pas gérer. Abandon.\n\E[0m"
>    echo -ne $ERR 
>    echo " sortir du script et rebooter en mode EFI avant de pouvoir relancer."
>    read
>    exit 
> fi

Session non-EFI.... Refind ne sait pas gérer. Abandon.

Appuyer sur la touche Entrée pour sortir du script et rebooter en mode EFI avant de pouvoir relancer.
                                                      
 logout
ubuntu@ubuntu:~$  

Cela va rester un mystère. Voici le script actuel

### Procédure pour installer refind à la place du fichier de boot de windows devant être lancée sous root
#On se sait jamais
setxkbmap fr
ERR="Appuyer sur la touche \e[1mEntrée\e[0m pour"

## Est-on bien l'utilisateur root.
if [ $UID != 0 ]; then
   echo -e "\n\a\E[31mVous devez être l'utilisateur root pour exécuter ce script.\E[0m\nPour devenir root, veuillez frapper les deux mots de la ligne ci-dessous.\n\E[0m\E[34;47msudo -i\E[0m\navant de faire le 'coller'. Vous pourrez alors relancer le script.\n"
   echo -ne $ERR 
   echo " sortir du script et pouvoir le relancer."
   read
   exit 1
fi

### Est-on bien  dans une session EFI?
if [  -d /sys/firmware/efi ]; then
   echo -e "\n\a\E[31mSession non-EFI.... Refind ne sait pas gérer. Abandon.\n\E[0m"
   echo -ne $ERR 
   echo " sortir du script et rebooter en mode EFI avant de pouvoir relancer."
   read
   exit 
fi
   
PDM="/boot/efi" #définir le point de montage
## Le répertoire de boot est-il absent?
if [ ! -d $PDM/EFI ]; then
   #monter la partition de boot EFI
   PartEFI=$(blkid | grep vfat | head -1 | cut -d: -f1 ) && echo $PartEFI
   mkdir -p $PDM
   mount -v $PartEFI $PDM
fi
ls $PDM/EFI
## windows est-il absent?
if [ ! -f $PDM/EFI/Microsoft/Boot/bootmgfw.efi ]; then
   echo -e "\nLe boot de windows est absent. Il est possible qu'il existe plusieurs partitions de boot. \E[31mCe cas n'est pas prévu.\E[0m Abandon du script.\n\a"
   echo -ne $ERR 
   echo " sortir du script. Il faudra en chercher la cause."
   read
   exit 3 
fi

## refind est-il absent?
if [ ! -d /boot/efi/EFI/refind ]; then
   echo Refind est absent. Installation de refind et de efibootmgr lancée. 
   add-apt-repository  universe
   echo -e "\nveuillez valider la réponse \e[1mOUI\e[0m prépositionnée dans la grille d'installation de refind qui va s'afficher en cours d'installation.\n"
   echo -ne $ERR 
   echo " continuer l'installation."
   read 
   apt install refind
   # On en profite pour fabriquer le fichier de configuration.
   cp -v /boot/efi/EFI/refind/refind.conf-sample   /boot/efi/EFI/refind/refind.conf
fi   
   
echo Par prudence, sauvons le fichier de boot de windows. 
cp -v   $PDM/EFI/Microsoft/Boot/bootmgfw.efi $PDM/EFI/Microsoft/Boot/bootmgfw$(date +"-%Y-%m-%d-%H-%M-%S").efi
# On va vérifier la présence du fichier de boot de sécurité de windows.
if [ ! -f $PDM/EFI/Microsoft/boot/bkbootmgfw.efi ]; then
   echo le fichier de sécurité est absent, on va le créer.
   cp -v   $PDM/EFI/Microsoft/Boot/bootmgfw.efi $PDM/Microsoft/Boot/bkbootmgfw.efi
fi
## Mettons à jour le fichier de configuration de refind. Verifions si cela a déjà fait.
if grep -q "\\\EFI\\\Microsoft\\\Boot\\\bkbootmgfw.efi" $PDM/EFI/refind/refind.conf ; then
   cat >>$PDM/EFI/refind/refind.conf<<EOF
menuentry "Windows 10" {
icon \EFI\refind\icons\os_win.png
loader \EFI\Microsoft\Boot\bkbootmgfw.efi    }
EOF

### fin insertion
fi  
  
SECURE=$(bootctl status 2>/dev/null | grep "Secure Boot") && echo $SECURE                             
SEC=$(echo $SECURE|cut -d: -f2) && echo $SEC

# a-t-on affaire à un ordinateur sécurisé ? 
if [ $SEC = "enabledd" ];then 
   echo -e "le boot est en mode secure. Cela  complique le redémarrage.  Faites \e[1mCtrl c\e[0m si vous ne souhaitez pas continuer. Sinon appuyer sur la touche  \e[1mEntrée\e[0m  pour valider."
   read   
   if [ ! -f $PDM/EFI/ubuntu/shimx64.efi ]; then
      MSG="\n\a\E[31mil n'existe pas de fichier de boot securisé de substitution. l'opération ne peut pas se faire....\n\E[0m"
   else
      cp -rv $PDM/EFI/ubuntu/*  $PDM/EFI/Microsoft/Boot
      cp -R $PDM/EFI/refind/* $PDM/EFI/Microsoft/Boot
      #Mettre le fichier de boot du shim à la place de celui de windows préventivement sauvé
      cp -v  $PDM/EFI/Microsoft/Boot/shimx64.efi $PDM/EFI/Microsoft/Boot/bootmgfw.efi
      #Mettre le fichier de boot de refind à la place de celui du grub
      cp  -v $PDM/EFI/Microsoft/Boot/refind_x64.efi $PDM/EFI/Microsoft/Boot/grubx64.efi
      MSG="Installation terminée. Voir la documentation refind pour faire valider les clés lors du premier boot."    
   fi
fi

# a-t-on affaire à un ordinateur non sécurisé ? 
if [ $SEC != "disabled" ];then 
   echo -e "le boot est en mode non secure. Cela  ne doit poser aucun problème pour le redémarrage.  Faites \e[1mCtrl c\e[0m si vous ne souhaitez pas continuer. Sinon appuyer sur la touche  \e[1mEntrée\e[0m  pour valider." 
   read   
   cp -R $PDM/EFI/refind/* $PDM/EFI/Microsoft/Boot
   #Mettre le fichier de boot de refind à la place de celui de windows préventivement sauvé
   cp  -v $PDM/EFI/Microsoft/Boot/refind_x64.efi $PDM/EFI/Microsoft/Boot/bootmgfw.efi
   MSG="Installation terminée."    
fi
# a-t-on affaire à un contexte inconnu ? 
if [ ${#MSG} = 0 ]; then
   MSG="Type de securité inconnu. Rien n'est fait hormis l'installation standard de refind."
fi
# Terminé. Edition du compte-rendu
md5sum  $PDM/EFI/Microsoft/Boot/*.efi 
echo -e $MSG     

Je vais essayer d'avancer sur le problème des READ qui ne bloquent pas.

Dernière modification par geole (Le 27/03/2021, à 16:15)

Hors ligne

#8 Le 27/03/2021, à 16:45

geole

Re : [En test] Script installation de REFIND

Pour le problème du read incorporé dans la procédure. On voit qu'elle n'est pas finie

root@ubuntu:~# 
root@ubuntu:~# 
root@ubuntu:~# ### Procédure pour installer refind à la place du fichier de boot de windows devant être lancée sous root
root@ubuntu:~# #On se sait jamais
root@ubuntu:~# setxkbmap fr
I/Microsoft/Boot/grubx64.efi
      MSG="Installation terminée. Voir la documentation refind pour faire valider les clés lors du premier bootroot@ubuntu:~# ERR="Appuyer sur la touche \e[1mEntrée\e[0m pour"
root@ubuntu:~# 
 ordinateur nroot@ubuntu:~# ## Est-on bien l'utilisateur root.
root@ubuntu:~# if [ $UID != 0 ]; then
>    echo -e "\n\a\E[31mVous devez être l'utilisateur root pour exécuter ce script.\E[0m\nPour devenir root, veuillez frapper les deux mots de la ligne ci-dessous.\n\E[0m\E[34;47msudo -i\E[0m\navant de faire le 'coller'. Vous pourrez alors relancer le script.\n"
>    echo -ne $ERR 
>    echo " sortir du script et pouvoir le relancer."
>    read
>    exit 1
> fi
root@ubuntu:~# 
root@ubuntu:~# ### Est-on bien  dans une session EFI?
root@ubuntu:~# if [ ! -d /sys/firmware/efi ]; then
>    echo -e "\n\a\E[31mSession non-EFI.... Refind ne sait pas gérer. Abandon.\n\E[0m"
>    echo -ne $ERR 
>    echo " sortir du script et rebooter en mode EFI avant de pouvoir relancer."
>    read
>    exit 2
> fi
root@ubuntu:~#    
root@ubuntu:~# PDM="/boot/efi" #définir le point de montage
root@ubuntu:~# ## Le répertoire de boot est-il absent?
root@ubuntu:~# if [ ! -d $PDM/EFI ]; then
>    #monter la partition de boot EFI
>    PartEFI=$(blkid | grep vfat | head -1 | cut -d: -f1 ) && echo $PartEFI
>    mkdir -p $PDM
>    mount -v $PartEFI $PDM
> fi
root@ubuntu:~# ls $PDM/EFI
banners  Boot  fonts  grub  Microsoft  refind  refind-install  tools  ubuntu  Windows10
root@ubuntu:~# ## windows est-il absent?
root@ubuntu:~# if [ ! -f $PDM/EFI/Microsoft/Boot/bootmgfw.efi ]; then
>    echo -e "\nLe boot de windows est absent. Il est possible qu'il existe plusieurs partitions de boot. \E[31mCe cas n'est pas prévu.\E[0m Abandon du script.\n\a"
>    echo -ne $ERR 
>    echo " sortir du script. Il faudra en chercher la cause."
>    read
>    exit 3 
> fi
root@ubuntu:~# 
root@ubuntu:~# ## refind est-il absent?
root@ubuntu:~# if [ ! -d /boot/efi/EFI/refind555 ]; then
>    echo Refind est absent. Installation de refind et de efibootmgr lancée. 
>    add-apt-repository  universe
>    echo -e "\nveuillez valider la réponse \e[1mOUI\e[0m prépositionnée dans la grille d'installation de refind qui va s'afficher en cours d'installation.\n"
>    echo -ne $ERR 
>    echo " continuer l'installation."
>    read 
>    apt install refind
>    # On en profite pour fabriquer le fichier de configuration.
>    cp -v /boot/efi/EFI/refind/refind.conf-sample   /boot/efi/EFI/refind/refind.conf
> fi   
Refind est absent. Installation de refind et de efibootmgr lancée.
'universe' distribution component is already enabled for all sources.

veuillez valider la réponse OUI prépositionnée dans la grille d'installation de refind qui va s'afficher en cours d'installation.

Appuyer sur la touche Entrée pour continuer l'installation.
Reading package lists... Done
Building dependency tree       
Reading state information... Done
refind is already the newest version (0.11.4-1).
0 upgraded, 0 newly installed, 0 to remove and 115 not upgraded.
'/boot/efi/EFI/refind/refind.conf-sample' -> '/boot/efi/EFI/refind/refind.conf'
root@ubuntu:~# ation terminée. Voir la documentation refind pour faire valider les clés lors du premier boot."    
>    fi
> fi
> 
> # a-t-on affaire à un ordinateur non sécurisé ? 
> if [ $SEC != "disabled" ];then 
>    echo -e "le boot est en mode non secure. Cela  ne doit poser aucun probléme pour le redémarrage.  Faites \e[1mCtrl c\e[0m si vous ne souhaitez pas continuer. Sinon appuyer sur la touche  \e[1mEntrée\e[0m  pour valider."
>    read   
>    cp -R $PDM/EFI/refind/* $PDM/EFI/Microsoft/Boot
>    #Mettre le fichier de boot de refind à la place de celui de windows préventivement sauvé
>    cp  -v $PDM/EFI/Microsoft/Boot/refind_x64.efi $PDM/EFI/Microsoft/Boot/bootmgfw.efi
>    MSG="Installation terminée."    
> fi
> # a-t-on affaire à un contexte inconnu ? 
> if [ ${#MSG} = 0 ]; then
>    MSG="Type de securité inconnu. Rien n'est fait hormis l'installation standard de refind."
> fi
> # Terminé. Edition du compte-rendu
> md5sum  $PDM/EFI/Microsoft/Boot/*.efi 
> echo -e $MSG      
> 
> 
> 
> 
>    
> 
> 
> 
> 
>                                                            
> 

Pourtant de faon unitaire, elle fonctionne.

root@ubuntu:~# if [ ! -d $PDM/EFI/refind555 ]; then
>    echo Refind est absent. Installation de refind et de efibootmgr lancée. 
>    add-apt-repository  universe
>    echo -e "\nveuillez valider la réponse \e[1mOUI\e[0m prépositionnée dans la grille d'installation de refind qui va s'afficher en cours d'installation.\n"
>    echo -ne $ERR 
>    echo " continuer l'installation."
>    read 
>    apt install refind
>    # On en profite pour fabriquer le fichier de configuration.
>    cp -v /boot/efi/EFI/refind/refind.conf-sample   /boot/efi/EFI/refind/refind.conf
> fi
Refind est absent. Installation de refind et de efibootmgr lancée.
'universe' distribution component is already enabled for all sources.

veuillez valider la réponse OUI prépositionnée dans la grille d'installation de refind qui va s'afficher en cours d'installation.

Appuyer sur la touche Entrée pour continuer l'installation.

D'où le palliatif de dire que l'installation va bientôt démarrer dans 96 secondes .

Je ne serais pas surpris que le read ne fonctionne pas dans une procédure  en copier/coller. Récupérerait-il la suite des commandes?

Dernière modification par geole (Le 27/03/2021, à 16:52)

Hors ligne

#9 Le 27/03/2021, à 17:17

Watael

Re : [En test] Script installation de REFIND

on ne colle pas un script dans un terminal. lol
un script, on le colle dans un fichier. tongue


Welcome to sHell. · eval is evil.

Hors ligne

#10 Le 27/03/2021, à 17:38

geole

Re : [En test] Script installation de REFIND

Désolé. Mais cela me semblait plus pratique.
Il  va donc falloir faire un script qui fabrique un fichier puis qui le garnit, puis qui mets les droits d'exécution.
Cela devrait pouvoir se faire en copier coller cette fois-ci!!!!
Je m'y attelles et te tiens au courant.

Hors ligne

#11 Le 27/03/2021, à 17:47

Watael

Re : [En test] Script installation de REFIND

Il  va donc falloir faire un script qui fabrique un fichier puis qui le garnit, puis qui mets les droits d'exécution.

tu sens ?
le gaz.
ça sent l'usine à gaz, non ?

tu as plus vite fait d'indiquer la manip : copier/coller dans un fichier, modifier les droits, et exécuter.

ou alors, faire plus court (moins de vérifications) dans un tuto bien détaillé, commande par commande.


Welcome to sHell. · eval is evil.

Hors ligne

#12 Le 27/03/2021, à 18:48

geole

Re : [En test] Script installation de REFIND

Il  parait qu'avec la covid, on perd l'odorat..
La documentation était pourtant claire pour les experts.
Lorsque je vois les difficultés que certains aidants  ont pour conseiller la modification d'un fichier par gedit ou par nano....
C'est pour cela que je tentais quelque chose de simple.
Pour l'instant je suis en train de chercher comment faire fonctionner de façon correcte cette commande
man cat
cat >>FIC<<EOF
A=Bonjour
echo "$A"
EOF
Je pensais que cela copiait... en fait cela interprète avant de copier!!!

a@b:~$ cat >>FIC<<EOF
> A=Bonjour
> echo $A
> EOF
a@b:~$ 
a@b:~$ cat FIC
A=Bonjour
echo 
a@b:~$ 

Trouvé... il faut mettre echo "$A"   Donc toutes les variables à mettre entre quote.

Dernière modification par geole (Le 27/03/2021, à 19:21)

Hors ligne

#13 Le 27/03/2021, à 19:10

Watael

Re : [En test] Script installation de REFIND

ou, protéger le dollar (<troll>comme s'il en avait vraiment besoin</troll> lol) avec une contre barre oblique :

echo "\$A"

Welcome to sHell. · eval is evil.

Hors ligne

#14 Le 27/03/2021, à 20:18

Hizoka

Re : [En test] Script installation de REFIND

Salut,
si tu ne veux pas interpréter les variables :

cat >> FIC << 'EOF'

Si tu ne veux pas interpréter certaines variables, alors il faut les protéger comme te l'indique Watael.

Dernière modification par Hizoka (Le 27/03/2021, à 20:18)

Hors ligne

#15 Le 27/03/2021, à 20:22

Watael

Re : [En test] Script installation de REFIND

ah, oui !

reste que le script doit être une "synthèse" finale d'un tuto au cours duquel les commandes viendront en démonstration de l'explication du pourquoi/comment.


Welcome to sHell. · eval is evil.

Hors ligne

#16 Le 28/03/2021, à 00:00

geole

Re : [En test] Script installation de REFIND

Watael a écrit :

ou, protéger le dollar (<troll>comme s'il en avait vraiment besoin</troll> lol) avec une contre barre oblique :

echo "\$A"

Voila.       J'ai mis partout des \
Après essai avec la technique copier/coller, je pense que le script est bon.
Je le mets à disposition dans ce forum  par aussi la technique copier/coller  afin qu'il puisse être récupérable

### Procédure pour installer refind à la place du fichier de boot de windows devant être lancée sous root
## création du fichier d'exécution.
touch réparer.sh
chmod  +x réparer.sh
cat >réparer.sh<<REPARE
#!/bin/bash
ERR="Appuyer sur la touche \e[1mEntrée\e[0m pour"
PDM="/boot/efi" # définir le point de montage
MSG=""
## Est-on bien l'utilisateur root.
if [ "\$UID" != 0 ]; then
   echo -e "\n\a\E[31mVous devez être l'utilisateur root pour exécuter ce script.\E[0m\nPour devenir root, veuillez frapper les deux mots de la ligne ci-dessous.\n\E[0m\E[34;47msudo -i\E[0m\navant de faire le 'coller'. Vous pourrez alors relancer le script.\n"
   exit 1
fi
### Est-on bien  dans une session EFI?
if [ ! -d /sys/firmware/efi ]; then
   echo -e "\n\a\E[31mSession non-EFI.... Refind ne sait pas gérer. Abandon.\n\E[0m"
   exit 2
fi
## Le répertoire de boot est-il absent? 
if [ ! -d  \$PDM/EFI ]; then
   echo montons la partition EFI  
   PartEFI=\$(blkid | grep vfat | head -1 | cut -d: -f1 ) && echo \$PartEFI
   mkdir -p \$PDM
   mount -v \$PartEFI  \$PDM
fi
ls \$PDM/EFI
## windows est-il absent?
if [ ! -f \$PDM/EFI/Microsoft/Boot/bootmgfw.efi ]; then
   echo -e "\nLe boot de windows est absent. Il est possible qu'il existe plusieurs partitions de boot. \E[31mCe cas n'est pas prévu.\E[0m Abandon du script.\n\a"
   exit 3 
fi
## refind est-il absent?
if [ ! -d \$PDM/EFI/refind ]; then
   echo Refind est absent. Installation de refind et de efibootmgr lancée. 
   add-apt-repository  universe
   echo -e "\nveuillez valider la réponse \e[1mOUI\e[0m prépositionnée dans la grille d'installation de refind qui va s'afficher en cours d'installation.\n"
   echo -ne \$ERR 
   echo " continuer l'installation." 
   apt install refind
   # On en profite pour fabriquer le fichier de configuration.
   cp -v \$PDM/EFI/refind/refind.conf-sample   \$PDM/EFI/refind/refind.conf123
fi    
echo Par prudence, sauvons le fichier de boot de windows. 
cp -v   \$PDM/EFI/Microsoft/Boot/bootmgfw.efi \$PDM/EFI/Microsoft/Boot/bootmgfw$(date +"-%Y-%m-%d-%H-%M-%S").efi
# On va vérifier la présence du fichier de boot de sécurité de windows.
if [ ! -f \$PDM/EFI/Microsoft/boot/bkbootmgfw.efi123 ]; then
   echo le fichier de sécurité est absent, on va le créer.
   cp -v   \$PDM/EFI/Microsoft/Boot/bootmgfw.efi  \$PDM/EFI/Microsoft/Boot/bkbootmgfw.efi
fi
## Mettons à jour le fichier de configuration de refind. Verifions si cela a déjà fait.
if grep -q "\\\EFI\\\Microsoft\\\Boot\\\bkbootmgfw.efi" \$PDM/EFI/refind/refind.conf ; then
   cat >>"$PDM"/EFI/refind/refind.conf<<EOF
menuentry "Windows 10" {
icon \EFI\refind\icons\os_win.png
loader \EFI\Microsoft\Boot\bkbootmgfw.efi    }
EOF
fi      
SECURE=\$(bootctl status 2>/dev/null | grep "Secure Boot") && echo \$SECURE                             
SEC=\$(echo \$SECURE|cut -d: -f2) ## echo \$SEC      
# a-t-on affaire à un ordinateur sécurisé ? 
if [ \$SEC = "enabled" ];then 
   if [ ! -f \$PDM/EFI/ubuntu/shimx64.efi ]; then
      echo -e "\n\a\E[31mil n'existe pas de fichier de boot securisé de substitution. l'opération ne peut pas se finir....\n\E[0m"
      exit 4
   else
      echo -e "le boot est en mode secure. Cela  complique le redémarrage.  Faites \e[1mCtrl c\e[0m si vous ne souhaitez pas continuer. Sinon appuyer sur la touche  \e[1mEntrée\e[0m  pour valider."
      read
      cp -r  \$PDM/EFI/ubuntu/*  \$PDM/EFI/Microsoft/Boot
      cp -r  \$PDM/EFI/refind/* \$PDM/EFI/Microsoft/Boot
      #Mettre le fichier de boot du shim à la place de celui de windows préventivement sauvé
      cp -v  \$PDM/EFI/Microsoft/Boot/shimx64.efi \$PDM/EFI/Microsoft/Boot/bootmgfw.efi
      #Mettre le fichier de boot de refind à la place de celui du grub
      cp -v  \$PDM/EFI/Microsoft/Boot/refind_x64.efi \$PDM/EFI/Microsoft/Boot/grubx64.efi
      MSG="Installation terminée. Voir la documentation refind pour faire valider les clés lors du premier boot."   
   fi
fi
# a-t-on affaire à un ordinateur non sécurisé ? 
if [ \$SEC = "disabled" ];then 
   echo -e "le boot est en mode non secure. Cela  ne doit poser aucun probléme pour le redémarrage.  Faites \e[1mCtrl c\e[0m si vous ne souhaitez pas continuer. Sinon appuyer sur la touche  \e[1mEntrée\e[0m  pour valider."
   read
   cp -rv \$PDM/EFI/refind/* \$PDM/EFI/Microsoft/Boot
   #Mettre le fichier de boot de refind à la place de celui de windows préventivement sauvé
   cp  -v \$PDM/EFI/Microsoft/Boot/refind_x64.efi \$PDM/EFI/Microsoft/Boot/bootmgfw.efi
   MSG="Installation terminée."  
fi
# a-t-on affaire à un contexte inconnu ? 
if [ \${#MSG} = 0 ]; then
   MSG="\nType de securité inconnu. Rien n'est fait hormis l'installation standard de refind.\n"
fi
# Terminé. Edition du compte-rendu
md5sum  \$PDM/EFI/Microsoft/Boot/*.efi 
echo -e \$MSG      
REPARE
./réparer.sh

Et je découvre la réponse de Hizoka   que je remercie...    Du coup, je ne vais essayer que demain...
Nota.  J'ai fait le copier/coller, à partir de la session 20.04 installée.
Finalement,   cétait juste un coup de remplacement de  \$ par $
Le nouveau fichier

### Procédure pour installer refind à la place du fichier de boot de windows devant être lancée sous root
## création du fichier d'exécution.
touch réparer.sh
chmod  +x réparer.sh
cat >réparer.sh<<"REPARE"
#!/bin/bash
ERR="Appuyer sur la touche \e[1mEntrée\e[0m pour"
PDM="/boot/efi" # définir le point de montage
MSG=""
## Est-on bien l'utilisateur root.
if [ $UID != 0 ]; then
   echo -e "\n\a\E[31mVous devez être l'utilisateur root pour exécuter ce script.\E[0m\nPour devenir root, veuillez frapper les deux mots de la ligne ci-dessous.\n\E[0m\E[34;47msudo -i\E[0m\navant de faire le 'coller'. Vous pourrez alors relancer le script.\n"
   exit 1
fi
### Est-on bien  dans une session EFI?
if [ ! -d /sys/firmware/efi ]; then
   echo -e "\n\a\E[31mSession non-EFI.... Refind ne sait pas gérer. Abandon.\n\E[0m"
   exit 2
fi
## Le répertoire de boot est-il absent? 
if [ ! -d  $PDM/EFI ]; then
   echo montons la partition EFI  
   PartEFI=$(blkid | grep vfat | head -1 | cut -d: -f1 ) && echo $PartEFI
   mkdir -p $PDM
   mount -v $PartEFI  $PDM
fi
ls $PDM/EFI
## windows est-il absent?
if [ ! -f $PDM/EFI/Microsoft/Boot/bootmgfw.efi ]; then
   echo -e "\nLe boot de windows est absent. Il est possible qu'il existe plusieurs partitions de boot. \E[31mCe cas n'est pas prévu.\E[0m Abandon du script.\n\a"
   exit 3 
fi
## refind est-il absent?
if [ ! -d $PDM/EFI/refind ]; then
   echo Refind est absent. Installation de refind et de efibootmgr lancée. 
   add-apt-repository  universe
   echo -e "\nveuillez valider la réponse \e[1mOUI\e[0m prépositionnée dans la grille d'installation de refind qui va s'afficher en cours d'installation.\n"
   echo -ne $ERR 
   echo " continuer l'installation." 
   apt install refind
   # On en profite pour fabriquer le fichier de configuration.
   cp -v $PDM/EFI/refind/refind.conf-sample   $PDM/EFI/refind/refind.conf123
fi    
echo Par prudence, sauvons le fichier de boot de windows. 
cp -v   $PDM/EFI/Microsoft/Boot/bootmgfw.efi $PDM/EFI/Microsoft/Boot/bootmgfw$(date +"-%Y-%m-%d-%H-%M-%S").efi
# On va vérifier la présence du fichier de boot de sécurité de windows.
if [ ! -f $PDM/EFI/Microsoft/boot/bkbootmgfw.efi123 ]; then
   echo le fichier de sécurité est absent, on va le créer.
   cp -v   $PDM/EFI/Microsoft/Boot/bootmgfw.efi  $PDM/EFI/Microsoft/Boot/bkbootmgfw.efi
fi
## Mettons à jour le fichier de configuration de refind. Verifions si cela a déjà fait.
if grep -q "\\\EFI\\\Microsoft\\\Boot\\\bkbootmgfw.efi" $PDM/EFI/refind/refind.conf ; then
   cat >>"$PDM"/EFI/refind/refind.conf<<EOF
menuentry "Windows 10" {
icon \EFI\refind\icons\os_win.png
loader \EFI\Microsoft\Boot\bkbootmgfw.efi    }
EOF
# Il faut que la borne EOF soit suivie d'une ligne à espace pour que le script soit cohérant. Cette ligne à espace n'a pas de rapport avec la command cat.
fi      
SECURE=$(bootctl status 2>/dev/null | grep "Secure Boot") && echo $SECURE                             
SEC=$(echo $SECURE|cut -d: -f2) ## echo $SEC      
# a-t-on affaire à un ordinateur sécurisé ? 
if [ $SEC = "enabled" ];then 
   if [ ! -f $PDM/EFI/ubuntu/shimx64.efi ]; then
      echo -e "\n\a\E[31mil n'existe pas de fichier de boot securisé de substitution. l'opération ne peut pas se finir....\n\E[0m"
      exit 4
   else
      echo -e "le boot est en mode secure. Cela  complique le redémarrage.  Faites \e[1mCtrl c\e[0m si vous ne souhaitez pas continuer. Sinon appuyer sur la touche  \e[1mEntrée\e[0m  pour valider."
      read
      cp -r  $PDM/EFI/ubuntu/*  $PDM/EFI/Microsoft/Boot
      cp -r  $PDM/EFI/refind/* $PDM/EFI/Microsoft/Boot
      #Mettre le fichier de boot du shim à la place de celui de windows préventivement sauvé
      cp -v  $PDM/EFI/Microsoft/Boot/shimx64.efi $PDM/EFI/Microsoft/Boot/bootmgfw.efi
      #Mettre le fichier de boot de refind à la place de celui du grub
      cp -v  $PDM/EFI/Microsoft/Boot/refind_x64.efi $PDM/EFI/Microsoft/Boot/grubx64.efi
      MSG="Installation terminée. Voir la documentation refind pour faire valider les clés lors du premier boot."   
   fi
fi
# a-t-on affaire à un ordinateur non sécurisé ? 
if [ $SEC = "disabled" ];then 
   echo -e "le boot est en mode non secure. Cela  ne doit poser aucun probléme pour le redémarrage.  Faites \e[1mCtrl c\e[0m si vous ne souhaitez pas continuer. Sinon appuyer sur la touche  \e[1mEntrée\e[0m  pour valider."
   read
   cp -rv $PDM/EFI/refind/* $PDM/EFI/Microsoft/Boot
   #Mettre le fichier de boot de refind à la place de celui de windows préventivement sauvé
   cp  -v $PDM/EFI/Microsoft/Boot/refind_x64.efi $PDM/EFI/Microsoft/Boot/bootmgfw.efi
   MSG="Installation terminée."  
fi
# a-t-on affaire à un contexte inconnu ? 
if [ ${#MSG} = 0 ]; then
   MSG="\nType de securité inconnu. Rien n'est fait hormis l'installation standard de refind.\n"
fi
# Terminé. Edition du compte-rendu
md5sum  $PDM/EFI/Microsoft/Boot/*.efi 
echo -e $MSG      
REPARE
./réparer.sh                                                        
 

Le résultat est probant, un extrait du second passage,

 md5sum  $PDM/EFI/Microsoft/Boot/*.efi 
> echo -e $MSG      
> REPARE
root@ubuntu:~# ./réparer.sh
banners  Boot  fonts  grub  Microsoft  refind  refind-install  réparer.sh  tools  ubuntu  Windows10
Par prudence, sauvons le fichier de boot de windows.
'/boot/efi/EFI/Microsoft/Boot/bootmgfw.efi' -> '/boot/efi/EFI/Microsoft/Boot/bootmgfw-2021-03-27-22-46-12.efi'
Secure Boot: enabled
le boot est en mode secure. Cela  complique le redémarrage.  Faites Ctrl c si vous ne souhaitez pas continuer. Sinon appuyer sur la touche  Entrée  pour valider.

'/boot/efi/EFI/Microsoft/Boot/shimx64.efi' -> '/boot/efi/EFI/Microsoft/Boot/bootmgfw.efi'
'/boot/efi/EFI/Microsoft/Boot/refind_x64.efi' -> '/boot/efi/EFI/Microsoft/Boot/grubx64.efi'
18d02deb69a048b110ca720c3023a4f0  /boot/efi/EFI/Microsoft/Boot/bkbootmgfw.efi
18d02deb69a048b110ca720c3023a4f0  /boot/efi/EFI/Microsoft/Boot/bootmgfw-2021-03-24-17-46-18.efi
0a39dbccade814a550b5052a7b11474c  /boot/efi/EFI/Microsoft/Boot/bootmgfw-2021-03-27-15-22-46.efi
(

Avec obligation d'appuyer sur entrée pour que cela continue.
Il n'était pas facile de trouver que par copier/coller c'était injouable et la documentation n'explique pas tellemnt que la borne doit être entre quote pour qu'il n'y ait pas  interprétation. Je cherchais naîvelent dans  "man cat" une option.
Il me semble que le problème est résolu. Je vous en remercie de m'avoir  permis  d'y arriver  en créant automatiquemnt le fichier exécutable.
Le plus dur va rester à faire.   Booter en mode secure et documenter l'acquisition de la clé de refind.

Dernière modification par geole (Le 28/03/2021, à 01:02)

Hors ligne

#17 Le 31/03/2021, à 19:32

geole

Re : [En test] Script installation de REFIND

Bonjour
Une nouvelle version  d'un script d'installation de refind
Il peut être utilisé en live usb   avant installation de tout logiciel (Son rôle principal). Ce qui permet d'installer ultérieurement ubuntu en ligne de commande (ubiquity -b) afin de ne pas installer le grub qui dysfonctionne de plus en plus.
Il peut aussi être utilisé avec un ubuntu déjà opérationnel.
Contraintes:   Obligation d'avoir positionné le bios en mode EFI.
                      Il est nécessaire qu'un disque dispose d'une partition FAT32 avec un drapeau ESP
               
Les plus par rapport à l'installateur standard
   1) Modifie le fichier de boot standard (comme boot-repair) afin de permettre aux ordinateurs qui ne bootent que de cette manière de pouvoir booter.
   2) Modifie le fichier de boot de windows afin de permettre aux ordinateurs dits 'bridés" de pouvoir booter.
   3) Fonctionne aussi avec le secure boot activé avec des résultats non garantis.
           a)   L'écran reste noir:  C'est totalement bloqué, on est malgré tout obligé de déactiver.
           ===> en fait, il suffit d'appuyer un certain nombre de fois sur la touche entrée et c'est parti...
                   Remarque, cet ordinateur a besoin de l'option nomodest pour que le grub s'affiche!!! Même bug dans refind????
           b)  Le boot réclame de fournir la bonne valeur pour le noyau ubuntu chargé.
         ====> Il suffit de valider ( VALIDER (ok) ), pour passer au suivant, Au quatrième écran, c'est bon. Les détails viendront. (pas possible de faire des captures d'écran et je suis piètre dessinateur)
           c)    Le boot reconnaît le noyau et accepte de le lancer....
           d) Le boot ne reconnaît pas la version 18.04. Le message d'erreur est détecté par REFIND! C'est:

Starting vmlinuz-4.15.0-72-generic'
Using load options 'root=UUID= 11111111-1111-1111-111111111111 ro fsck.mode=force fsck.repair=yes initrd=boot\initrd.img-4.15.0-72-generic
Secure boot validationfiure loading vmlinuz-4.15.0-72-generic!

This computer is configured with Secure Bootactive but,
vmlinuz-4.15.0-72-generic has failed validation

You can
    * Launch another bootloader
    * Disable Secure Boot in your Firmware
    * Sign vmlinuz-4.15.0-72-generic with a machine owner key (MOK)
    * Use a MOK utility (ofte present on the second row) to add a MOK with which 
       vmlinuz-4.15.0-72-generic has already been signed
    * Use a MOK utility to register vmlinuz-4.15.0-72-generic ("enroll its hash") without 
      signing it.

See http://www.rodsbooks.com/refind/secureboot.html for more information
    
* hit any key to continue *

Cette dernière méthode me semble simple, On accède facilement au fichier. Je peux visualiser la clé SHA26 générée. Je pense avoir fait correctement la validation. Mais au reboot, il y a toujours refus pour la même cause.
Comme, cela ne bloque pas pour une autre version 18.04.1, je pense qu'il y a un problème lorsque l'O.S. est chiffré!!!!

https://www.rodsbooks.com/refind/secure … ml#caveats

     4) Il est relançable en ne refaisant pas ce qui a été réalisé.

La version secure embarquée par le script est la version 0.13
===> https://www.rodsbooks.com/refind/getting.html   ==> https://sourceforge.net/projects/refind/files/

Le test a été fait  en version 20.04 , en version 20.10 et  21.04. Il y a certainement encore pas mal de choses oubliées.
A vous de l'utiliser et de faire vos retours.

Il a été fait pour être simple d'utilisation. Il nécessite d'ouvrir un terminal (Ctrl Alt t), de se mettre root (sudo -i)
et de faire un copier (ctrl a    ctrcl  c)  de ce qui suit et de le coller dans la session ouverte et de bien lire ce qui se passe pendant l'exécution.
Voici le script pour la version 20.04: Il a besoin d'installer deux logiciels ubuntu absents du CD d'installation.
Le message suivant donne le script pour les versions 20.10 et 21.04 qui n'ont pas besoin de télécharger ces deux logiciels.

### Procédure pour installer refind à la place du fichier de boot de windows devant être lancée sous root
## création du fichier d'exécution.    version 20.04 Date 14 avril 15 heures
touch réparer.sh
chmod  +x réparer.sh
cat >réparer.sh<<"REPARE"
#!/bin/bash
ERR="Appuyer sur la touche \e[1mEntrée\e[0m pour"
PDM="/boot/efi" # définir le point de montage
Stock=$PDM/EFI/refind  ### Le lieu de stockage.
## Est-on bien l'utilisateur root.
if [ $UID != 0 ]; then
   echo -e "\n\a\E[31mVous devez être l'utilisateur root pour exécuter ce script.\E[0m\nPour devenir root, veuillez frapper les deux mots de la ligne ci-dessous.\n\E[0m\E[34;47msudo -i\E[0m\navant de faire le 'coller'. Vous pourrez alors relancer le script.\n"
   exit 1
fi
### Est-on bien  dans une session EFI?
if [ ! -d /sys/firmware/efi ]; then
   echo -e "\n\a\E[31mSession non-EFI.... Refind ne sait pas gérer. Abandon.\n\E[0m"
   exit 2
fi
## Le répertoire de boot est-il absent? 
if [ ! -d  $PDM/EFI ]; then
   echo Montons la partition EFI  
   PartEFI=$(blkid | grep ' TYPE="vfat" ' | head -1 | cut -d: -f1 ) && echo $PartEFI
   mkdir -p $PDM
   mount -v $PartEFI  $PDM
else
   PartEFI=$(mount | grep 'on /boot/efi' | head -1 | cut -d' ' -f1 ) && echo $PartEFI
fi
ls $PDM/EFI
mkdir -p $Stock  $PDM/EFI/Boot 2>/dev/null
SECURE=$(bootctl status 2>/dev/null | grep "Secure Boot") && echo $SECURE              
SEC=$(echo $SECURE|cut -d: -f2)
if [  ! -f $Stock/refind.conf ]; then 
   echo -e "\nNous avons besoin d'installer le gestionnaire EFI de ubuntu....\n"
   apt install efibootmgr
   echo -e "\nNous avons besoin d'installer le gestionnaire de boot de ubuntu....\n"
   apt install shim-signed
   echo -e "\nLe fichier standard de  boot  de refind n'est pas au point. Nous allons télécharger la version BETA chez le constructueur....\n"
   wget https://sourceforge.net/projects/refind/files/0.13.2/refind-bin-0.13.2.zip
   unzip refind-bin-0.13.2.zip 1>/dev/null
   cp  refind-bin-0.13.2/refind-install        $Stock 
   if [ $SEC = "disabled" ];then
      ./refind-bin-0.13.2/refind-install  --alldrivers --yes
       MSG="Installation du logiciel standard terminée."
   fi
   if [ $SEC = "enabled" ];then
      ./refind-bin-0.13.2/refind-install --shim /usr/lib/shim/shimx64.efi.signed --alldrivers --yes
      ### Vérifions que les fichiers de boot choisis pour l'installation sont signés. 
      echo sbverify --list $Stock/shimx64.efi        && sbverify --list $Stock/shimx64.efi.signed
      echo sbverify --list $Stock/grubx64.efi        && sbverify --list $Stock/grubx64.efi
      echo sbverify --list $Stock/drivers_x64/ext4_x64.efi        && sbverify --list $Stock/drivers_x64/ext4_x64.efi 
      MSG="Installation du logiciel sécurisé terminée." 
   fi
else
   MSG="refind est déjà installé."
fi 
if [ ${#MSG} = 0 ]; then
   echo -e "\nType de securité inconnu. Rien n'est fait.\n"
   exit 3
fi
efibootmgr -v  
#### Cette partie est prévue indépendante au cas où la commande efibootmgr fasse bloquer l'installation pendant une mise à jour de RAM non supportée.
echo Refind va être déplacé dans le répertoire de boot
if [  ! -f $PDM/EFI/Boot/BKbootx64.efi ]; then
   mkdir  $PDM/EFI/Boot 2>/dev/null
   cp -v  $PDM/EFI/Boot/bootx64.efi  $PDM/EFI/Boot/BKbootx64.efi 2>/dev/null
fi
cp -r $Stock/* $PDM/EFI/Boot
if [ $SEC = "enabled" ]; then
   cp -v  $PDM/EFI/Boot/shimx64.efi.signed  $PDM/EFI/Boot/bootx64.efi
else
   cp -v  $PDM/EFI/Boot/refind_x64.efi         $PDM/EFI/Boot/bootx64.efi
fi
echo -e "\nRefind a été installé de façon normale. Si vous souhaitez qu'il remplace le logiciel de boot de windows, appuyez sur la touche \e[1mEntrée\e[0m  pour valider. Sinon faites \e[1mCtrl c\e[0m pour ne pas  continuer. \n\a\E[31mIl faut d'abord booter et s'être apperçu que le boot refind ne fonctionne pas pour décider de remplacer ou recréer la structure de boot de windows. \E[0m\n\n"
read
## windows est-il absent?
if [ ! -f $PDM/EFI/Microsoft/Boot/bootmgfw.efi ]; then
   echo -e "\nLe boot de windows est absent. Il est possible qu'il existe plusieurs partitions de boot. Il est aussi possible que vous l'ayez volontairement supprimé.\E[31m Mais si cet ordinateur est bridé, sa présence est nécessaire. Nous allons le récréer correctement. Appuyez sur la touche \e[1mEntrée\e[0m  pour accepter cette création. Sinon faites \e[1mCtrl c\e[0m pour ne pas  continuer."
   read
   mkdir -p  $PDM/EFI/Microsoft/Boot
   touch $PDM/EFI/Microsoft/Boot/bootmgfw.efi
fi
if [ ! -f $PDM/EFI/Microsoft/boot/bkbootmgfw.efi ]; then
   echo le fichier de duplication  du vrai fichier de boot de windows est absent, on va le créer.
   cp -v   $PDM/EFI/Microsoft/Boot/bootmgfw.efi  $PDM/EFI/Microsoft/Boot/bkbootmgfw.efi
fi
## On va faire une entrée en structure windows.
MAJ=$(grep  "\\\EFI\\\Microsoft\\\Boot\\\bkbootmgfw.efi" $PDM/EFI/refind/refind.conf)  
if [ ${#MAJ} = 0 ]; then
   cat >>"$PDM"/EFI/refind/refind.conf<<EOF
menuentry "Mon Windows 10" {
icon \EFI\refind\icons\os_win.png
loader \EFI\Microsoft\Boot\bkbootmgfw.efi    }
EOF
   echo Mise à jour du fichier de configuration de refind faite.
fi 
cp -r $PDM/EFI/Boot/* $PDM/EFI/Microsoft/Boot # Transférons le répertoire complet.
#Mettre le fichier de boot standard à la place de celui de windows préventivement sauvé.
cp  -v $PDM/EFI/Microsoft/Boot/bootx64.efi $PDM/EFI/Microsoft/Boot/bootmgfw.efi    
md5sum  $PDM/EFI/Microsoft/Boot/*.efi >/tmp/MDSUM
md5sum  $PDM/EFI/Refind/*.efi >>/tmp/MDSUM
md5sum  $PDM/EFI/boot/*.efi >>/tmp/MDSUM
sort /tmp/MDSUM
echo -e "Souvenez-vous qu'une \e[1mgrosse mise à jour de windows\e[0m oblige à recommencer cette procédure." $MSG      
REPARE
./réparer.sh
#### FIN ****                              

Bon usage.

Dernière modification par geole (Le 15/04/2021, à 14:25)

Hors ligne

#18 Le 14/04/2021, à 18:27

geole

Re : [En test] Script installation de REFIND

Bonjour.
Voici un script d'installation de refind   en  mode sécurisé ou pas pour les versions ubuntu 20.10 et 21.04.
Condition d'installation.    Disposer d'une partition de boot  avec un drapeau ESP . Cette partition peut n'avoir aucun fichier et avoir une taille de 36 Mo.  Disposer d'une connexion réseau.  Environ 4 Mo seront téléchargés
Méthode de Boot .
            Booter avec un support d'installation de ubuntu 20.10 ou 21.04
            Choisir essayer avant d'installer puis ouvrir un terminal en mode root et faire un copier/coller du script ci-dessous.
         Puis procéder à l'installation de ubuntu en ligne de commande  sudo ubiquity -b

Risque identifié pendant l'installation: Celui qui survient pendant l'installation de ubuntu lorsque la NVRAM refuse de se mettre à jour. Il est préférable de le savoir avant d'installer ubuntu que de le découvrir après!!!
Le palliatif trouvé est de relancer le script, il mettra alors à jour le répertoire standard  de boot qui n'a pas été faite à cause du blocage en NVRAM.

Risque identifié après installation:  L'ordinateur ne sait démarrer que par windows.!!!
Le palliatif trouvé est de relancer le script, il  vous demandera  l'autorisation de mettre à jour le répertoire de boot de windows en le récréant en cas de besoin.

### Procédure pour installer refind à la place du fichier de boot de windows devant être lancée sous root
## création du fichier d'exécution.    version 21.04 Date 14 avril 15 heures
touch réparer.sh
chmod  +x réparer.sh
cat >réparer.sh<<"REPARE"
#!/bin/bash
ERR="Appuyer sur la touche \e[1mEntrée\e[0m pour"
PDM="/boot/efi" # définir le point de montage
Stock=$PDM/EFI/refind  ### Le lieu de stockage.
## Est-on bien l'utilisateur root.
if [ $UID != 0 ]; then
   echo -e "\n\a\E[31mVous devez être l'utilisateur root pour exécuter ce script.\E[0m\nPour devenir root, veuillez frapper les deux mots de la ligne ci-dessous.\n\E[0m\E[34;47msudo -i\E[0m\navant de faire le 'coller'. Vous pourrez alors relancer le script.\n"
   exit 1
fi
### Est-on bien  dans une session EFI?
if [ ! -d /sys/firmware/efi ]; then
   echo -e "\n\a\E[31mSession non-EFI.... Refind ne sait pas gérer. Abandon.\n\E[0m"
   exit 2
fi
## Le répertoire de boot est-il absent? 
if [ ! -d  $PDM/EFI ]; then
   echo Montons la partition EFI  
   PartEFI=$(blkid | grep ' TYPE="vfat" ' | head -1 | cut -d: -f1 ) && echo $PartEFI
   mkdir -p $PDM
   mount -v $PartEFI  $PDM
else
   PartEFI=$(mount | grep 'on /boot/efi' | head -1 | cut -d' ' -f1 ) && echo $PartEFI
fi
ls $PDM/EFI
mkdir -p $Stock  $PDM/EFI/Boot 2>/dev/null
SECURE=$(bootctl status 2>/dev/null | grep "Secure Boot") && echo $SECURE              
SEC=$(echo $SECURE|cut -d: -f2)
if [  ! -f $Stock/refind.conf ]; then 
   echo -e "\nLe fichier standard de  boot  de refind n'est pas au point. Nous allons télécharger la version BETA chez le constructueur....\n"
   wget https://sourceforge.net/projects/refind/files/0.13.2/refind-bin-0.13.2.zip
   unzip refind-bin-0.13.2.zip 1>/dev/null
   cp  refind-bin-0.13.2/refind-install        $Stock 
   if [ $SEC = "disabled" ];then
      ./refind-bin-0.13.2/refind-install  --alldrivers --yes
       MSG="Installation du logiciel standard terminée."
   fi
   if [ $SEC = "enabled" ];then
      ./refind-bin-0.13.2/refind-install --shim /usr/lib/shim/shimx64.efi.signed --alldrivers --yes
      ### Vérifions que les fichiers de boot choisis pour l'installation sont signés. 
      echo sbverify --list $Stock/shimx64.efi        && sbverify --list $Stock/shimx64.efi.signed
      echo sbverify --list $Stock/grubx64.efi        && sbverify --list $Stock/grubx64.efi
      echo sbverify --list $Stock/drivers_x64/ext4_x64.efi        && sbverify --list $Stock/drivers_x64/ext4_x64.efi 
      MSG="Installation du logiciel sécurisé terminée." 
   fi
else
   MSG="refind est déjà installé."
fi 
if [ ${#MSG} = 0 ]; then
   echo -e "\nType de securité inconnu. Rien n'est fait.\n"
   exit 3
fi
efibootmgr -v  
#### Cette partie est prévue indépendante au cas où la commande efibootmgr fasse bloquer l'installation pendant une mise à jour de RAM non supportée
echo Refind va être déplacé dans le répertoire de boot
if [  ! -f $PDM/EFI/Boot/BKbootx64.efi ]; then
   mkdir  $PDM/EFI/Boot 2>/dev/null
   cp -v  $PDM/EFI/Boot/bootx64.efi  $PDM/EFI/Boot/BKbootx64.efi 2>/dev/null
fi
cp -r $Stock/* $PDM/EFI/Boot
if [ $SEC = "enabled" ]; then
   cp -v  $PDM/EFI/Boot/shimx64.efi.signed  $PDM/EFI/Boot/bootx64.efi
else
   cp -v  $PDM/EFI/Boot/refind_x64.efi         $PDM/EFI/Boot/bootx64.efi
fi
echo -e "\nRefind a été installé de façon normale. Si vous souhaitez qu'il remplace le logiciel de boot de windows, appuyez sur la touche \e[1mEntrée\e[0m  pour valider. Sinon faites \e[1mCtrl c\e[0m pour ne pas  continuer. \n\a\E[31mIl faut d'abord booter et s'être apperçu que le boot refind ne fonctionne pas pour décider de remplacer ou recréer la structure de boot de windows. \E[0m\n\n"
read
## windows est-il absent?
if [ ! -f $PDM/EFI/Microsoft/Boot/bootmgfw.efi ]; then
   echo -e "\nLe boot de windows est absent. Il est possible qu'il existe plusieurs partitions de boot. Il est aussi possible que vous l'ayez volontairement supprimé.\E[31m Mais si cet ordinateur est bridé, sa présence est nécessaire. Nous allons le récréer correctement. Appuyez sur la touche \e[1mEntrée\e[0m  pour accepter cette création. Sinon faites \e[1mCtrl c\e[0m pour ne pas  continuer."
   read
   mkdir -p  $PDM/EFI/Microsoft/Boot
   touch $PDM/EFI/Microsoft/Boot/bootmgfw.efi
fi
if [ ! -f $PDM/EFI/Microsoft/boot/bkbootmgfw.efi ]; then
   echo le fichier de duplication  du vrai fichier de boot de windows est absent, on va le créer.
   cp -v   $PDM/EFI/Microsoft/Boot/bootmgfw.efi  $PDM/EFI/Microsoft/Boot/bkbootmgfw.efi
fi
## On va faire une entrée en structure windows.
MAJ=$(grep  "\\\EFI\\\Microsoft\\\Boot\\\bkbootmgfw.efi" $PDM/EFI/refind/refind.conf)  
if [ ${#MAJ} = 0 ]; then
   cat >>"$PDM"/EFI/refind/refind.conf<<EOF
menuentry "Mon Windows 10" {
icon \EFI\refind\icons\os_win.png
loader \EFI\Microsoft\Boot\bkbootmgfw.efi    }
EOF
   echo Mise à jour du fichier de configuration de refind faite.
fi 
cp -r $PDM/EFI/Boot/* $PDM/EFI/Microsoft/Boot # Transférons le répertoire complet.
#Mettre le fichier de boot standard à la place de celui de windows préventivement sauvé.
cp  -v $PDM/EFI/Microsoft/Boot/bootx64.efi $PDM/EFI/Microsoft/Boot/bootmgfw.efi    
md5sum  $PDM/EFI/Microsoft/Boot/*.efi >/tmp/MDSUM
md5sum  $PDM/EFI/Refind/*.efi >>/tmp/MDSUM
md5sum  $PDM/EFI/boot/*.efi >>/tmp/MDSUM
sort /tmp/MDSUM
echo -e "Souvenez-vous qu'une \e[1mgrosse mise à jour de windows\e[0m oblige à recommencer cette procédure." $MSG      
REPARE
./réparer.sh
#### FIN ****                              

Dernière modification par geole (Le 14/04/2021, à 20:57)

Hors ligne

#19 Le 18/04/2021, à 14:55

geole

Re : [En test] Script installation de REFIND

Bonjour.
Attention. En installant le sécure boot, certains vieux noyaux bien que signés, ne seront plus reconnus.
Je n'ai pas réussi à faire certifier leur signature
Exemple d'un noyau refusé

sudo sbverify --list /mnt/boot/vmlinuz-4.15.0-72-generic
signature 1
image signature issuers:
 - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
 - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing
   issuer:  /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority

Exemple d'un noyau accepté

sudo sbverify --list /boot/vmlinuz-5.4.0-72-generic
signature 1
image signature issuers:
 - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
 - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2017)
   issuer:  /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority

La différence est visible par cette expression  (2017)

Hors ligne