« Installer des logiciels sur un support externe (SD, USB), avec une icône dans le mode Easy de l'EeePC apparaissant automatiquement » : différence entre les versions

De Lea Linux
Aller à la navigation Aller à la recherche
(balises code)
 
(5 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
[[Catégorie:Eee PC]]
= Modification de Installer des logiciels sur un support externe (SD, USB), avec une icône dans le mode Easy de l'EeePC apparaissant automatiquement =
Par [[Utilisateur:Jice|Jice]]
Nous allons voir dans cet article comment installer et exécuter des logiciels depuis un support amovible, tel que carte SD ou SDHC, clef USB, disque dur externe...
Nous allons voir dans cet article comment installer et exécuter des logiciels depuis un support amovible, tel que carte SD ou SDHC, clef USB, disque dur externe...


Ligne 15 : Ligne 21 :
Les clefs USB ou les cartes SD sont formatées lors de leur achat au format FAT32 (format par défaut de Windows jusqu'à récemment). Or pour des raisons de sécurité, les distributions Linux empêchent par défaut d'exécuter des programmes stockés sur un tel support.
Les clefs USB ou les cartes SD sont formatées lors de leur achat au format FAT32 (format par défaut de Windows jusqu'à récemment). Or pour des raisons de sécurité, les distributions Linux empêchent par défaut d'exécuter des programmes stockés sur un tel support.


Cette page : http://wiki.eeeuser.com/execute_apps_off_sd {{flag-en}} explique comment outrepasser cette protection, ou mieux, partitionner en 2 la clef / carte SD afin de faire une partie FAT32 et une partie spéciale Linux. Si vous le pouvez, c'est la meilleure méthode. Elle est décrite dans [[#Plus simple : partitionner une clef USB ou la carte SDHC|deuxième partie de cet article]].
Cette page : http://wiki.eeeuser.com/execute_apps_off_sd {{flag-en}} explique comment outrepasser cette protection, ou mieux, partitionner en 2 la clef / carte SD afin de faire une partie FAT32 et une partie spéciale Linux. Si vous le pouvez, c'est la meilleure méthode, car elle ne nécessite pas de  "bidouiller" pour monter/démonter la partition automatiquement (voir ci-dessous), et elle doit être plus performante de quelques pour cents. Elle est décrite dans [[#Plus simple : partitionner une clef USB ou la carte SDHC|deuxième partie de cet article]].


Pour ma part, je ne voulais pas repartitionner ma carte SD (il faudra que je teste ça un jour ceci dit). J'ai donc créé un gros fichier dessus, que je vais utiliser comme une autre partition normale. Comme vous allez le voir, cette méthode ne nécessite pas de repartitionner la clef, mais en contre-partie, il va falloir modifier quelques programmes.
Pour ma part, je ne voulais pas repartitionner ma carte SD (il faudra que je teste ça un jour ceci dit). J'ai donc créé un gros fichier dessus, que je vais utiliser comme une autre partition normale. Comme vous allez le voir, cette méthode ne nécessite pas de repartitionner la clef, mais en contre-partie, il va falloir modifier quelques programmes.


Créez un fichier vide, nommé '''hdd''', de 1 Giga-octets (soit 1048576 = 1024 x 1024, vous pouvez changer ce nombre pour augmenter/diminuer sa taille) sur la carte :
Créez un fichier vide, nommé '''hdd''', de 1 Giga-octets (soit 1048576 = 1024 x 1024, vous pouvez changer ce nombre pour augmenter/diminuer sa taille) sur la carte :
<code multi>
<div class="code">
$ cd /media/MMC-SD/macartesd
$ cd /media/MMC-SD/macartesd
$ dd if=/dev/zero of=hdd bs=1024 count=1048576
$ dd if=/dev/zero of=hdd bs=1024 count=1048576
</code>
</div>
Ensuite, il faut le formater en format '''ext2''' (oui on peut formater un fichier ;-) par la commande :
Ensuite, il faut le formater en format '''ext2''' (oui on peut formater un fichier ;-) par la commande :
<code multi>
<div class="code">
$ sudo mkfs.ext2 hdd
$ sudo mkfs.ext2 hdd
mke2fs 1.40-WIP (14-Nov-2006)
mke2fs 1.40-WIP (14-Nov-2006)
hdd n'est pas un périphérique spécial en mode bloc.
hdd n'est pas un périphérique spécial en mode bloc.
Procéder malgré tout? (y pour oui, n pour non) y
Procéder malgré tout? (y pour oui, n pour non) y
Étiquette de système de fichiers=
Étiquette de système de fichiers=
Type de système d'exploitation : Linux
Type de système d'exploitation : Linux
Taille de bloc=4096 (log=2)
Taille de bloc=4096 (log=2)
Taille de fragment=4096 (log=2)
Taille de fragment=4096 (log=2)
131072 i-noeuds, 262144 blocs
131072 i-noeuds, 262144 blocs
13107 blocs (5.00%) réservés pour le super utilisateur
13107 blocs (5.00%) réservés pour le super utilisateur
Premier bloc de données=0
Premier bloc de données=0
Nombre maximum de blocs du système de fichiers=268435456
Nombre maximum de blocs du système de fichiers=268435456
8 groupes de blocs
8 groupes de blocs
32768 blocs par groupe, 32768 fragments par groupe
32768 blocs par groupe, 32768 fragments par groupe
16384 i-noeuds par groupe
16384 i-noeuds par groupe
Superblocs de secours stockés sur les blocs :  
Superblocs de secours stockés sur les blocs :  
         32768, 98304, 163840, 229376
         32768, 98304, 163840, 229376


Écriture des tables d'i-noeuds : complété                         
Écriture des tables d'i-noeuds : complété                         
Écriture des superblocs et de l'information de comptabilité du système de
Écriture des superblocs et de l'information de comptabilité du système de fichiers : complété
fichiers : complété


Le système de fichiers sera automatiquement vérifié tous les 25 montages ou
Le système de fichiers sera automatiquement vérifié tous les 25 montages ou après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i pour écraser la valeur.
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i
</div>
pour écraser la valeur.
</code>


Enfin, vous pouvez le monter dans un répertoire (j'ai choisi /opt2) et vous en servir :
Enfin, vous pouvez le monter dans un répertoire (j'ai choisi '''/opt2''') et vous en servir :
<code multi>
<div class="code">
$ sudo mkdir /opt2
$ sudo mkdir /opt2
$ sudo mount /media/MMC-SD/macartesd/hdd /opt2 -o loop
$ sudo mount /media/MMC-SD/macartesd/hdd /opt2 -o loop
</code>
</div>


== Automatiser le montage du nouvel emplacement pour les logiciels ==
== Automatiser le montage du nouvel emplacement pour les logiciels ==
Ligne 68 : Ligne 71 :
=== Automatisation du montage ===
=== Automatisation du montage ===


Le montage passe par le programme <code>/usr/bin/xandros_device_detection_dialog</code>. Nous allons donc le modifier.
Le montage passe par le programme <div class="code">/usr/bin/xandros_device_detection_dialog</div> Nous allons donc le modifier.


Vous devez auparavant suivre le tutoriel [[Empêcher la détection automatique des périphériques USB et de la carte SD au démarrage de l'EeePC]] afin de transformer ce programme en un script modifiable. Si vous ne l'avez pas fait, faites-le maintenant.
Vous devez auparavant suivre le tutoriel [[Empêcher la détection automatique des périphériques USB et de la carte SD au démarrage de l'EeePC]] afin de transformer ce programme en un script modifiable. Si vous ne l'avez pas fait, faites-le maintenant.
Ligne 74 : Ligne 77 :
Voici les modifications apportées au script :
Voici les modifications apportées au script :


<code multi>
<div class="code">
#!/bin/sh
#!/bin/sh


# monte automatiquement /opt2 si possible
# monte automatiquement /opt2 si possible
if [ "`mount | grep /media/MMC-SD/SDHC16GO`" != "" \
if [ "`mount | grep /media/MMC-SD/SDHC16GO`" != "" \
   -a "`mount | grep /opt2`" = "" \
   -a "`mount | grep /opt2`" = "" \
   -a -f /media/MMC-SD/SDHC16GO/hdd ] ; then
   -a -f /media/MMC-SD/SDHC16GO/hdd ] ; then
         sudo mount -o loop /media/MMC-SD/SDHC16GO/hdd /opt2
         sudo mount -o loop /media/MMC-SD/SDHC16GO/hdd /opt2
fi
fi


# quitter le programme si la machine est démarrée depuis moins de 30 secondes
# quitter le programme si la machine est démarrée depuis moins de 30 secondes
# (permet de ne pas afficher la boîte de dialogue pour la carte SD)
# (permet de ne pas afficher la boîte de dialogue pour la carte SD)
if [ `cat /proc/uptime | cut -f1 -d.` -lt 30 ] ; then exit ; fi
if [ `cat /proc/uptime | cut -f1 -d.` -lt 30 ] ; then exit ; fi


# lancer le programme original en lui passant tous les arguments avec lesquels on a été appelé
# lancer le programme original en lui passant tous les arguments avec lesquels on a été appelé
exec xandros_device_detection_dialog.orig "$@"
exec xandros_device_detection_dialog.orig "$@"
</code>
</div>


La partie qui nous concerne est le premier bloc, entre if et fi.
La partie qui nous concerne est le premier bloc, entre if et fi.
Ligne 97 : Ligne 100 :


Note : vous pouvez "choisir" le nom du répertoire dans lequel se monte votre périphérique USB, en lui donnant un ibellé (''label'' en anglais). Pour ce faire, repérez le périphérique /dev/... avec la commande mount :
Note : vous pouvez "choisir" le nom du répertoire dans lequel se monte votre périphérique USB, en lui donnant un ibellé (''label'' en anglais). Pour ce faire, repérez le périphérique /dev/... avec la commande mount :
<code multi>
<div class="code">
/home/user> mount
/home/user> mount
rootfs on / type rootfs (rw)
rootfs on / type rootfs (rw)
/dev/sda1 on / type ext2 (ro)
/dev/sda1 on / type ext2 (ro)
unionfs on / type unionfs (rw,dirs=/=rw:/=ro)
unionfs on / type unionfs (rw,dirs=/=rw:/=ro)
proc on /proc type proc (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw)
devpts on /dev/pts type devpts (rw)
tmpfs on /dev/shm type tmpfs (rw)
tmpfs on /dev/shm type tmpfs (rw)
tmpfs on /tmp type tmpfs (rw)
tmpfs on /tmp type tmpfs (rw)
usbfs on /proc/bus/usb type usbfs (rw)
usbfs on /proc/bus/usb type usbfs (rw)
/dev/sdb1 on /media/MMC-SD/SDHC16GO type vfat (rw,nosuid,nodev,noexec,fmask=0111,dmask=0000,codepage=cp850,iocharset=utf8,shortname=mixed)
/dev/sdb1 on /media/MMC-SD/SDHC16GO type vfat (rw,nosuid,nodev,noexec,fmask=0111,dmask=0000,codepage=cp850,iocharset=utf8,shortname=mixed)
/dev/loop0 on /opt2 type ext2 (rw)
/dev/loop0 on /opt2 type ext2 (rw)
</code>
</div>


Ici, il s'agit de '''/dev/sdb1'''.
Ici, il s'agit de '''/dev/sdb1'''.
Ligne 116 : Ligne 119 :
Ensuite donnez-lui un ''label'' par la commande :
Ensuite donnez-lui un ''label'' par la commande :


<code multi>
<div class="code">
$ sudo e2label /dev/sdb1 mon_nouveau_label
$ sudo e2label /dev/sdb1 mon_nouveau_label
</code>
</div>


ou bien
ou bien
<code multi>
<div class="code">
$ sudo mkdosfs -n mon_nouveau_label /dev/sdb1
$ sudo mkdosfs -n mon_nouveau_label /dev/sdb1
</code>
</div>


et le périphérique se montera dans le répertoire /media/MMC-SD/mon_nouveau_label (et apparaîtra aussi dans votre répertoire utilisateur sous ce nom).
et le périphérique se montera dans le répertoire /media/MMC-SD/mon_nouveau_label (et apparaîtra aussi dans votre répertoire utilisateur sous ce nom).
Ligne 129 : Ligne 132 :
=== Automatisation du démontage ===
=== Automatisation du démontage ===


Pour le démontage, nous devons modifier le programme <code>/bin/umount</code>.
Pour le démontage, nous devons modifier le programme <div class="code">/bin/umount</div>.


Comme c'est un programme binaire (non modifiable facilement), aussi nous allons commencer par le renommer :
Comme c'est un programme binaire (non modifiable facilement), aussi nous allons commencer par le renommer :
<code multi>
<div class="code">
$ sudo mv /bin/umount /bin/umount.bin
$ sudo mv /bin/umount /bin/umount.bin
</code>
</div>


Puis nous allons créer un script dans l'ancien emplacement (c'est donc le script qui sera appelé à la place du programme original). Utilisez par exemple <code>$ sudo nano /bin/umount</code> et copiez-collez le script ci-dessous.
Puis nous allons créer un script dans l'ancien emplacement (c'est donc le script qui sera appelé à la place du programme original). Utilisez par exemple <div class="code">$ sudo nano /bin/umount</div> et copiez-collez le script ci-dessous.


<code multi>
<div class="code">
#!/bin/sh
#!/bin/sh


# Léa 22/1/2009
# Léa 22/1/2009
# /bin/umount (le programme umount original est renommé umount.bin)
# /bin/umount (le programme umount original est renommé umount.bin)


# quand on essaie de démonter la carte SD, démonter le loop d'abord
# quand on essaie de démonter la carte SD, démonter le loop d'abord
if `echo "$@" | grep -q SDHC16GO` ; then
if `echo "$@" | grep -q SDHC16GO` ; then
         # démonte et détache le périphérique loop, pour libérer sdb1
         # démonte et détache le périphérique loop, pour libérer sdb1
         LOOP=`mount | grep "on /opt2 type" | cut -f1 -d" "`
         LOOP=`mount | grep "on /opt2 type" | cut -f1 -d" "`
Ligne 152 : Ligne 155 :
                 losetup --detach $LOOP
                 losetup --detach $LOOP
         fi
         fi
fi
fi


# dans tous les cas, exécuter le umount original avec les mêmes arguments
# dans tous les cas, exécuter le umount original avec les mêmes arguments
# (et remplacer ce shell par umount.bin pour que l'appelant
# (et remplacer ce shell par umount.bin pour que l'appelant
# récupère le code retour)
# récupère le code retour)
exec umount.bin "$@"
exec umount.bin "$@"
</code>
</div>


Bien sûr, remplacez dans le script <code>SDHC16GO</code> et  
Bien sûr, remplacez dans le script <b>SDHC16GO</b> et <b>/opt2</b> par les valeurs que vous avez choisies.
<code>/opt2</code> par les valeurs que vous avez choisies.


Pour les plus curieux, le script contient des commentaires expliquant son fonctionnement.
Pour les plus curieux, le script contient des commentaires expliquant son fonctionnement.
Ligne 168 : Ligne 170 :


J'ai fait le test en partitionnant en 2 une clef USB. L'objectif est d'avoir une partie au format "Linux" (en réalité '''ext2'''), et une autre au format Windows (en réalité '''FAT32''') qui pourra être utilisée sur tous les ordinateurs, quelque soit leur système d'exploitation.
J'ai fait le test en partitionnant en 2 une clef USB. L'objectif est d'avoir une partie au format "Linux" (en réalité '''ext2'''), et une autre au format Windows (en réalité '''FAT32''') qui pourra être utilisée sur tous les ordinateurs, quelque soit leur système d'exploitation.
Cette méthode est plus simple, car il n'y a aucun script à écrire pour monter/démonter le support : tout est géré automatiquement.


Attention : cette manipulation va effacer toutes les informations présentes sur votre support.
Attention : cette manipulation va effacer toutes les informations présentes sur votre support.
Ligne 173 : Ligne 177 :
===Préparation du support===
===Préparation du support===


Nous allons utiliser l'outil <code>fdisk</code>, qui permet de définir les partitions (en ligne de commande car il n'y a pas de logiciel graphique sur l'EeePC).
Nous allons utiliser l'outil <b>fdisk</b>, qui permet de définir les partitions (en ligne de commande car il n'y a pas de logiciel graphique sur l'EeePC).


Ma clef USB est le périphérique <code>/dev/sdc</code>. Avant de continuer, assurez-vous en comme expliqué ci-dessus (tapez simplement <code>mount</code>).
Ma clef USB est le périphérique <b>/dev/sdc</b>. Avant de continuer, assurez-vous en comme expliqué ci-dessus (tapez simplement <b>mount</b>).


Enfin, lancez fdisk :
Enfin, lancez fdisk :
<code multi>$ sudo fdisk /dev/sdc
<div class="code">$
sudo fdisk /dev/sdc


/home/user> sudo fdisk /dev/sdc
/home/user> sudo fdisk /dev/sdc


The number of cylinders for this disk is set to 3816.
The number of cylinders for this disk is set to 3816.
There is nothing wrong with that, but this is larger than 1024,
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
   (e.g., DOS FDISK, OS/2 FDISK)


Command (m for help): p
Command (m for help): p


Disk /dev/sdc: 1000 MB, 1000341504 bytes
Disk /dev/sdc: 1000 MB, 1000341504 bytes
16 heads, 32 sectors/track, 3816 cylinders
16 heads, 32 sectors/track, 3816 cylinders
Units = cylinders of 512 * 512 = 262144 bytes
Units = cylinders of 512 * 512 = 262144 bytes


   Device Boot      Start        End      Blocks  Id  System
   Device Boot      Start        End      Blocks  Id  System
/dev/sdc1              1        1954      976880    b  W95 FAT32
/dev/sdc1              1        1954      976880    b  W95 FAT32


Command (m for help): </code>
Command (m for help):  
</div>


La commande '''p''' permet d'afficher la table de partitions de la clef.
La commande '''p''' permet d'afficher la table de partitions de la clef.
Ligne 204 : Ligne 210 :
Nous allons supprimer la partition, en utilisant la commande '''d''' :
Nous allons supprimer la partition, en utilisant la commande '''d''' :


<code multi>Command (m for help): d
<div class="code">
Selected partition 1</code>
Command (m for help): d
Selected partition 1
</div>


Puis créer les 2 partitions avec la commande '''n'''. La première fera 512 Mo, la seconde prendra la place restante. La commande '''t''' permet de changer le type de partition :
Puis créer les 2 partitions avec la commande '''n'''. La première fera 512 Mo, la seconde prendra la place restante. La commande '''t''' permet de changer le type de partition :


<code multi>Command (m for help): n
<div class="code">Command (m for help): n
Command action
Command action
   e  extended
   e  extended
   p  primary partition (1-4)
   p  primary partition (1-4)
p
p
Partition number (1-4): 1
Partition number (1-4): 1
First cylinder (1-3816, default 1): 1
First cylinder (1-3816, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-3816, default 3816): +512M
Last cylinder or +size or +sizeM or +sizeK (1-3816, default 3816): +512M


Command (m for help): n
Command (m for help): n
Command action
Command action
   e  extended
   e  extended
   p  primary partition (1-4)
   p  primary partition (1-4)
p
p
Partition number (1-4): 2
Partition number (1-4): 2
First cylinder (1955-3816, default 1955): 1955
First cylinder (1955-3816, default 1955): 1955
Last cylinder or +size or +sizeM or +sizeK (1955-3816, default 3816): 3816
Last cylinder or +size or +sizeM or +sizeK (1955-3816, default 3816): 3816


Command (m for help): t
Command (m for help): t
Partition number (1-4): 2
Partition number (1-4): 2
Hex code (type L to list codes): b
Hex code (type L to list codes): b
Changed system type of partition 2 to b (W95 FAT32)
Changed system type of partition 2 to b (W95 FAT32)


Command (m for help): p  
Command (m for help): p  


Disk /dev/sdc: 1000 MB, 1000341504 bytes
Disk /dev/sdc: 1000 MB, 1000341504 bytes
16 heads, 32 sectors/track, 3816 cylinders
16 heads, 32 sectors/track, 3816 cylinders
Units = cylinders of 512 * 512 = 262144 bytes
Units = cylinders of 512 * 512 = 262144 bytes


   Device Boot      Start        End      Blocks  Id  System
   Device Boot      Start        End      Blocks  Id  System
/dev/sdc1              1        1954      500208  83  Linux
/dev/sdc1              1        1954      500208  83  Linux
/dev/sdc2            1955        3816      476672    b  W95 FAT32
/dev/sdc2            1955        3816      476672    b  W95 FAT32


Command (m for help):</code>
Command (m for help):</div>


Enfin, utilisez la commande '''w''' pour écrire la table des partitions sur la clef :
Enfin, utilisez la commande '''w''' pour écrire la table des partitions sur la clef :


<code multi>Command (m for help): w
<div class="code">
The partition table has been altered!
Command (m for help): w
The partition table has been altered!


Calling ioctl() to re-read partition table.
Calling ioctl() to re-read partition table.


WARNING: Re-reading the partition table failed with error 16: Périphérique ou ressource occupé.
WARNING: Re-reading the partition table failed with error 16: Périphérique ou ressource occupé.
The kernel still uses the old table.
The kernel still uses the old table.
The new table will be used at the next reboot.
The new table will be used at the next reboot.


WARNING: If you have created or modified any DOS 6.x
WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
partitions, please see the fdisk manual page for additional
information.
information.
Syncing disks.</code>
Syncing disks.
</div>


Reste maintenant à formater les 2 partitions. La première en '''ext2''', la deuxième en FAT32 :
Reste maintenant à formater les 2 partitions. La première en '''ext2''', la deuxième en FAT32 :


<code multi>$ sudo mke2fs /dev/sdc1
<div class="code">
mke2fs 1.40-WIP (14-Nov-2006)
$ sudo mke2fs /dev/sdc1
Étiquette de système de fichiers=
mke2fs 1.40-WIP (14-Nov-2006)
Type de système d'exploitation : Linux
Étiquette de système de fichiers=
Taille de bloc=1024 (log=0)
Type de système d'exploitation : Linux
Taille de fragment=1024 (log=0)
Taille de bloc=1024 (log=0)
125488 i-noeuds, 500208 blocs
Taille de fragment=1024 (log=0)
25010 blocs (5.00%) réservés pour le super utilisateur
125488 i-noeuds, 500208 blocs
Premier bloc de données=1
25010 blocs (5.00%) réservés pour le super utilisateur
Nombre maximum de blocs du système de fichiers=67633152
Premier bloc de données=1
62 groupes de blocs
Nombre maximum de blocs du système de fichiers=67633152
8192 blocs par groupe, 8192 fragments par groupe
62 groupes de blocs
2024 i-noeuds par groupe
8192 blocs par groupe, 8192 fragments par groupe
Superblocs de secours stockés sur les blocs :  
2024 i-noeuds par groupe
Superblocs de secours stockés sur les blocs :  
         8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
         8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409


Écriture des tables d'i-noeuds : complété                         
Écriture des tables d'i-noeuds : complété                         
Écriture des superblocs et de l'information de comptabilité du système de
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété
fichiers : complété


Le système de fichiers sera automatiquement vérifié tous les 20 montages ou
Le système de fichiers sera automatiquement vérifié tous les 20 montages ou
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i
pour écraser la valeur.
pour écraser la valeur.
</code>
</div>


et (formatage + libellé "FAT32" pour la deuxième partition) :
et (formatage + libellé "FAT32" pour la deuxième partition) :


<code multi>$ sudo mkdosfs -n FAT32 /dev/sdc2
<div class="code">
mkdosfs 2.11 (12 Mar 2005)</code>
$ sudo mkdosfs -n FAT32 /dev/sdc2
mkdosfs 2.11 (12 Mar 2005)</div>


Enfin, donnons le libellé "Linux" la partition ext2, afin qu'elle soit montée dans un endroit facilement reconnaissable :
Enfin, donnons le libellé "Linux" la partition ext2, afin qu'elle soit montée dans un endroit facilement reconnaissable :


<code multi>$ sudo e2label /dev/sdc1 Linux</code>
<div class="code">$ sudo e2label /dev/sdc1 Linux</div>


C'est terminé !
C'est terminé !
Ligne 302 : Ligne 314 :
Il suffit maintenant de repérer où est montée la partition Linux, en regardant dans le répertoire /media. Chez moi, elle se trouve dans '''/media/DataTraveler 2.0/Linux''' (on retrouve le nom que l'on a donné à la partition) :
Il suffit maintenant de repérer où est montée la partition Linux, en regardant dans le répertoire /media. Chez moi, elle se trouve dans '''/media/DataTraveler 2.0/Linux''' (on retrouve le nom que l'on a donné à la partition) :


<code multi>$ ls -l /media/DataTraveler\ 2.0/
<div class="code">
total 17
$ ls -l /media/DataTraveler\ 2.0/
drwxrwxrwx 2 root root 16384 1969-12-31 21:00 FAT32/
total 17
drwxr-xr-x 3 root root  1024 2009-03-02 21:09 Linux/</code>
drwxrwxrwx 2 root root 16384 1969-12-31 21:00 FAT32/
drwxr-xr-x 3 root root  1024 2009-03-02 21:09 Linux/
</div>


Nous allons donc créer un lien '''/opt3''' vers ce répertoire (car /opt et /opt2 sont déjà utilisés) par :
Nous allons donc créer un lien '''/opt3''' vers ce répertoire (car /opt et /opt2 sont déjà utilisés) par :


<code multi>$ sudo ln -s "/media/DataTraveler 2.0/Linux" /opt3</code>
<div class="code">$ sudo ln -s "/media/DataTraveler 2.0/Linux" /opt3</div>


Et c'est tout ! Les modifications de scripts vues dans la première partie de l'article ne sont pas nécessaires (bien que compatibles).
Et c'est tout ! Les modifications de scripts vues dans la première partie de l'article ne sont pas nécessaires (bien que compatibles).
Ligne 317 : Ligne 331 :
==Création des icônes==
==Création des icônes==


Utilisez par exemple [[Launcher tools#Simple UI Editor|Simple UI Editor]], et définissez la ligne de commande vers l'exécutable se trouvant sur votre support amovible, par exemple <code>/opt2/firefox3.1/firefox</code> ou <code>/opt3/xchat/usr/bin/xchat.sh</code> (Voir [[Installer des logiciels sur EeePC et économiser de la place sur le disque principal#Installation de logiciels, chacun dans son répertoire|cet article]]). C'est tout, cela va créer une icône qui apparaîtra / disparaîtra automatiquement.
Utilisez par exemple [[Launcher tools#Simple UI Editor|Simple UI Editor]], et définissez la ligne de commande vers l'exécutable se trouvant sur votre support amovible, par exemple <div class="code">/opt2/firefox3.1/firefox</div> ou <div class="code">/opt3/xchat/usr/bin/xchat.sh</div> (Voir [[Installer des logiciels sur EeePC et économiser de la place sur le disque principal#Installation de logiciels, chacun dans son répertoire|cet article]]). C'est tout, cela va créer une icône qui apparaîtra / disparaîtra automatiquement.
 


<br/>
<br/>
'''<b>[[EeePC|@ Retour à la rubrique Eee PC]]</b>'''


<hr />
{{Copy|2009|[[Utilisateur:Jice|Jean-Christophe Cardot]]|CC-BY-SA}}
[[EeePC|Retour à la page EeePC]]
<hr />

Dernière version du 28 avril 2012 à 16:31


Modification de Installer des logiciels sur un support externe (SD, USB), avec une icône dans le mode Easy de l'EeePC apparaissant automatiquement

Par Jice

Nous allons voir dans cet article comment installer et exécuter des logiciels depuis un support amovible, tel que carte SD ou SDHC, clef USB, disque dur externe...

De plus, grâce à une fonctionnalité cachée du mode Easy de l'EeePC, l'icône de lancement va apparaître lors de l'insertion du support. (Techniquement, les icônes peuvent être définies mais ne pas apparaître si la ligne de commande est invalide, par exemple si le programme n'existe pas. Cependant, si le programme se met à exister en cours de session, l'icône apparaît automatiquement !)

J'ai utilisé cette méthode pour :

Ce qui m'a permis d'économiser 120 Mo du disque principal :-)

J'ai depuis l'écriture de cette article découvert comment installer des logiciels intégrés à la distribution ou présents sur des dépôts additionnels, ce qui fait une bien plus grande variété de logiciels candidats !

Préparation du support

Les clefs USB ou les cartes SD sont formatées lors de leur achat au format FAT32 (format par défaut de Windows jusqu'à récemment). Or pour des raisons de sécurité, les distributions Linux empêchent par défaut d'exécuter des programmes stockés sur un tel support.

Cette page : http://wiki.eeeuser.com/execute_apps_off_sd explique comment outrepasser cette protection, ou mieux, partitionner en 2 la clef / carte SD afin de faire une partie FAT32 et une partie spéciale Linux. Si vous le pouvez, c'est la meilleure méthode, car elle ne nécessite pas de "bidouiller" pour monter/démonter la partition automatiquement (voir ci-dessous), et elle doit être plus performante de quelques pour cents. Elle est décrite dans deuxième partie de cet article.

Pour ma part, je ne voulais pas repartitionner ma carte SD (il faudra que je teste ça un jour ceci dit). J'ai donc créé un gros fichier dessus, que je vais utiliser comme une autre partition normale. Comme vous allez le voir, cette méthode ne nécessite pas de repartitionner la clef, mais en contre-partie, il va falloir modifier quelques programmes.

Créez un fichier vide, nommé hdd, de 1 Giga-octets (soit 1048576 = 1024 x 1024, vous pouvez changer ce nombre pour augmenter/diminuer sa taille) sur la carte :

$ cd /media/MMC-SD/macartesd
$ dd if=/dev/zero of=hdd bs=1024 count=1048576

Ensuite, il faut le formater en format ext2 (oui on peut formater un fichier ;-) par la commande :

$ sudo mkfs.ext2 hdd
mke2fs 1.40-WIP (14-Nov-2006)
hdd n'est pas un périphérique spécial en mode bloc.
Procéder malgré tout? (y pour oui, n pour non) y
Étiquette de système de fichiers=
Type de système d'exploitation : Linux
Taille de bloc=4096 (log=2)
Taille de fragment=4096 (log=2)
131072 i-noeuds, 262144 blocs
13107 blocs (5.00%) réservés pour le super utilisateur
Premier bloc de données=0
Nombre maximum de blocs du système de fichiers=268435456
8 groupes de blocs
32768 blocs par groupe, 32768 fragments par groupe
16384 i-noeuds par groupe
Superblocs de secours stockés sur les blocs : 
       32768, 98304, 163840, 229376
Écriture des tables d'i-noeuds : complété                        
Écriture des superblocs et de l'information de comptabilité du système de fichiers : complété
Le système de fichiers sera automatiquement vérifié tous les 25 montages ou après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i pour écraser la valeur.

Enfin, vous pouvez le monter dans un répertoire (j'ai choisi /opt2) et vous en servir :

$ sudo mkdir /opt2
$ sudo mount /media/MMC-SD/macartesd/hdd /opt2 -o loop

Automatiser le montage du nouvel emplacement pour les logiciels

... et donc l'apparition automatique des icônes définies pour les programmes présents sur ce support.

Nous allons maintenant automatiser le montage et le démontage de notre disque virtuel. Si vous avez installé des applications dessus, disposant d'une icône dans le mode Easy de l'EeePC, celle-ci apparaîtra et disparaîtra lors de l'insertion et du retrait du périphérique (en utilisant l'icône du périphérique dans la bare de tâches, clic droit, retirer en toute sécurité).

Par exemple, j'ai installé Firefox 3.1 dans le disque virtuel, monté dans /opt2, et son icône apparaît automatiquement. Elle disparaît lorsque je retire la carte SD.

Automatisation du montage

Le montage passe par le programme

/usr/bin/xandros_device_detection_dialog

Nous allons donc le modifier.

Vous devez auparavant suivre le tutoriel Empêcher la détection automatique des périphériques USB et de la carte SD au démarrage de l'EeePC afin de transformer ce programme en un script modifiable. Si vous ne l'avez pas fait, faites-le maintenant.

Voici les modifications apportées au script :

#!/bin/sh
# monte automatiquement /opt2 si possible
if [ "`mount | grep /media/MMC-SD/SDHC16GO`" != "" \
 -a "`mount | grep /opt2`" = "" \
 -a -f /media/MMC-SD/SDHC16GO/hdd ] ; then
       sudo mount -o loop /media/MMC-SD/SDHC16GO/hdd /opt2
fi
# quitter le programme si la machine est démarrée depuis moins de 30 secondes
# (permet de ne pas afficher la boîte de dialogue pour la carte SD)
if [ `cat /proc/uptime | cut -f1 -d.` -lt 30 ] ; then exit ; fi
# lancer le programme original en lui passant tous les arguments avec lesquels on a été appelé
exec xandros_device_detection_dialog.orig "$@"

La partie qui nous concerne est le premier bloc, entre if et fi. Le test vérifie si le bon périphérique est monté (dans mon cas, ma carte SD dans /media/MMC-SD/SDHC16GO), puis si le disque virtuel n'est pas monté (dans /opt2) et si le fichier le contenant existe bien (/media/MMC-SD/SDHC16GO/hdd). Dans ce cas, le fichier du disque virtuel est monté dans /opt2. Vous devez bien sûr adapter ces valeurs à ce que vous avez choisi.

Note : vous pouvez "choisir" le nom du répertoire dans lequel se monte votre périphérique USB, en lui donnant un ibellé (label en anglais). Pour ce faire, repérez le périphérique /dev/... avec la commande mount :

/home/user> mount
rootfs on / type rootfs (rw)
/dev/sda1 on / type ext2 (ro)
unionfs on / type unionfs (rw,dirs=/=rw:/=ro)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw)
tmpfs on /dev/shm type tmpfs (rw)
tmpfs on /tmp type tmpfs (rw)
usbfs on /proc/bus/usb type usbfs (rw)
/dev/sdb1 on /media/MMC-SD/SDHC16GO type vfat (rw,nosuid,nodev,noexec,fmask=0111,dmask=0000,codepage=cp850,iocharset=utf8,shortname=mixed)
/dev/loop0 on /opt2 type ext2 (rw)

Ici, il s'agit de /dev/sdb1.

Ensuite donnez-lui un label par la commande :

$ sudo e2label /dev/sdb1 mon_nouveau_label

ou bien

$ sudo mkdosfs -n mon_nouveau_label /dev/sdb1

et le périphérique se montera dans le répertoire /media/MMC-SD/mon_nouveau_label (et apparaîtra aussi dans votre répertoire utilisateur sous ce nom).

Automatisation du démontage

Pour le démontage, nous devons modifier le programme

/bin/umount

.

Comme c'est un programme binaire (non modifiable facilement), aussi nous allons commencer par le renommer :

$ sudo mv /bin/umount /bin/umount.bin

Puis nous allons créer un script dans l'ancien emplacement (c'est donc le script qui sera appelé à la place du programme original). Utilisez par exemple

$ sudo nano /bin/umount

et copiez-collez le script ci-dessous.

#!/bin/sh
# Léa 22/1/2009
# /bin/umount (le programme umount original est renommé umount.bin)
# quand on essaie de démonter la carte SD, démonter le loop d'abord
if `echo "$@" | grep -q SDHC16GO` ; then
       # démonte et détache le périphérique loop, pour libérer sdb1
       LOOP=`mount | grep "on /opt2 type" | cut -f1 -d" "`
       if [ "$LOOP" != "" ] ; then
               umount /opt2 && \
               losetup --detach $LOOP
       fi
fi
# dans tous les cas, exécuter le umount original avec les mêmes arguments
# (et remplacer ce shell par umount.bin pour que l'appelant
# récupère le code retour)
exec umount.bin "$@"

Bien sûr, remplacez dans le script SDHC16GO et /opt2 par les valeurs que vous avez choisies.

Pour les plus curieux, le script contient des commentaires expliquant son fonctionnement.

Plus simple : partitionner une clef USB ou la carte SDHC

J'ai fait le test en partitionnant en 2 une clef USB. L'objectif est d'avoir une partie au format "Linux" (en réalité ext2), et une autre au format Windows (en réalité FAT32) qui pourra être utilisée sur tous les ordinateurs, quelque soit leur système d'exploitation.

Cette méthode est plus simple, car il n'y a aucun script à écrire pour monter/démonter le support : tout est géré automatiquement.

Attention : cette manipulation va effacer toutes les informations présentes sur votre support.

Préparation du support

Nous allons utiliser l'outil fdisk, qui permet de définir les partitions (en ligne de commande car il n'y a pas de logiciel graphique sur l'EeePC).

Ma clef USB est le périphérique /dev/sdc. Avant de continuer, assurez-vous en comme expliqué ci-dessus (tapez simplement mount).

Enfin, lancez fdisk :

$
sudo fdisk /dev/sdc
/home/user> sudo fdisk /dev/sdc
The number of cylinders for this disk is set to 3816.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
  (e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): p
Disk /dev/sdc: 1000 MB, 1000341504 bytes
16 heads, 32 sectors/track, 3816 cylinders
Units = cylinders of 512 * 512 = 262144 bytes
  Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1        1954      976880    b  W95 FAT32
Command (m for help): 

La commande p permet d'afficher la table de partitions de la clef.

Nous allons supprimer la partition, en utilisant la commande d :

Command (m for help): d
Selected partition 1

Puis créer les 2 partitions avec la commande n. La première fera 512 Mo, la seconde prendra la place restante. La commande t permet de changer le type de partition :

Command (m for help): n
Command action
  e   extended
  p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-3816, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-3816, default 3816): +512M
Command (m for help): n
Command action
  e   extended
  p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (1955-3816, default 1955): 1955
Last cylinder or +size or +sizeM or +sizeK (1955-3816, default 3816): 3816
Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): b
Changed system type of partition 2 to b (W95 FAT32)
Command (m for help): p 
Disk /dev/sdc: 1000 MB, 1000341504 bytes
16 heads, 32 sectors/track, 3816 cylinders
Units = cylinders of 512 * 512 = 262144 bytes
  Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1        1954      500208   83  Linux
/dev/sdc2            1955        3816      476672    b  W95 FAT32
Command (m for help):

Enfin, utilisez la commande w pour écrire la table des partitions sur la clef :

Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Périphérique ou ressource occupé.
The kernel still uses the old table.
The new table will be used at the next reboot.
WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.

Reste maintenant à formater les 2 partitions. La première en ext2, la deuxième en FAT32 :

$ sudo mke2fs /dev/sdc1
mke2fs 1.40-WIP (14-Nov-2006)
Étiquette de système de fichiers=
Type de système d'exploitation : Linux
Taille de bloc=1024 (log=0)
Taille de fragment=1024 (log=0)
125488 i-noeuds, 500208 blocs
25010 blocs (5.00%) réservés pour le super utilisateur
Premier bloc de données=1
Nombre maximum de blocs du système de fichiers=67633152
62 groupes de blocs
8192 blocs par groupe, 8192 fragments par groupe
2024 i-noeuds par groupe
Superblocs de secours stockés sur les blocs : 
       8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
Écriture des tables d'i-noeuds : complété                        
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété
Le système de fichiers sera automatiquement vérifié tous les 20 montages ou
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i
pour écraser la valeur.

et (formatage + libellé "FAT32" pour la deuxième partition) :

$ sudo mkdosfs -n FAT32 /dev/sdc2
mkdosfs 2.11 (12 Mar 2005)

Enfin, donnons le libellé "Linux" la partition ext2, afin qu'elle soit montée dans un endroit facilement reconnaissable :

$ sudo e2label /dev/sdc1 Linux

C'est terminé !

Configuration de l'EeePC

Il suffit maintenant de repérer où est montée la partition Linux, en regardant dans le répertoire /media. Chez moi, elle se trouve dans /media/DataTraveler 2.0/Linux (on retrouve le nom que l'on a donné à la partition) :

$ ls -l /media/DataTraveler\ 2.0/
total 17
drwxrwxrwx 2 root root 16384 1969-12-31 21:00 FAT32/
drwxr-xr-x 3 root root  1024 2009-03-02 21:09 Linux/

Nous allons donc créer un lien /opt3 vers ce répertoire (car /opt et /opt2 sont déjà utilisés) par :

$ sudo ln -s "/media/DataTraveler 2.0/Linux" /opt3

Et c'est tout ! Les modifications de scripts vues dans la première partie de l'article ne sont pas nécessaires (bien que compatibles).

Vous pouvez maintenant installer des logiciels sur le répertoire /opt3, créer des icônes vers ses programmes, qui dans le mode Easy apparaîtront automatiquement sur le bureau lors de l'insertion, et disparaîtrons lors de son extraction (après clic droit sur l'icône de clef USB dans la zone de notification, "Retirer en toute sécurité").

Création des icônes

Utilisez par exemple Simple UI Editor, et définissez la ligne de commande vers l'exécutable se trouvant sur votre support amovible, par exemple

/opt2/firefox3.1/firefox

ou

/opt3/xchat/usr/bin/xchat.sh

(Voir cet article). C'est tout, cela va créer une icône qui apparaîtra / disparaîtra automatiquement.



@ Retour à la rubrique Eee PC

Copyright

© 2009 Jean-Christophe Cardot

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike icon
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique 4.0 :
https://creativecommons.org/licenses/by-sa/4.0/