====== Linux ======
===== Bépo =====
Pour avoir du bépo dès grub
http://bepo.fr/wiki/Console_GNU/Linux
claviers :
* [[https://trulyergonomic.com/ergonomic-keyboards/mechanical-keyboards/products/cleave-truly-ergonomic-mechanical-keyboard/|cleave]]
* [[https://x-bows.com/|x-bows]]
* redox ou ergodox chez [[https://falba.tech/cart/|falbatech]] (~300€)
==== xorg ====
Ça se passe dans les préférences de clavier
==== grub ====
Dans /etc/default/grub
# ajout d'après http://bepo.fr/wiki/Console_GNU/Linux
GRUB_TERMINAL_INPUT=at_keyboard
Dans /etc/grub.d/40_custom
# Aj DC (http://bepo.fr/wiki/Console_GNU/Linux)
insmod keylayouts
# faut d'abord générer ce fichier bepo.gkb, avec (en root), et le mettre dans la partition racine
# (pas dans /boot s'il est séparé)
# ckbcomp fr bepo | grub-mklayout -v -o /root/grub/bepo.gkb
keymap /root/grub/bepo.gkb
==== console single mode ====
Dans une console sous X, c'est X qui décide, mais en single mode faut avoir fait un
# choisir UTF-8 puis dvorak puis dvorak french bepo
# (pas la variante UTF-8 qui déclenche une erreur sous stretch)
dpkg-reconfigure console-data
==== keymap ====
Et pour mettre <> en accès direct faut modifier /usr/share/X11/xkb/symbols/fr (cf http://bepo.fr/wiki/Trucs_et_astuces)
===== debian install sans cd =====
Il faut juste avoir un grub qui marche déjà, récupérer l'initrd.gz et le vmlinuz nécéssaire au 1er boot (par exemple sur
http://debian.osuosl.org/debian/dists/etch/main/installer-i386/current/images/netboot/debian-installer/i386/), et ajouter dans le menu du grub qui marche (remplacer (hd0,0)/boot/newinstall/ par le bon chemin).
title Debian Install
kernel (hd0,0)/boot/newinstall/vmlinuz root=/dev/ram0 ramdisk_size=12000
initrd (hd0,0)/boot/newinstall/initrd.gz
cf http://www.us.debian.org/releases/stable/i386/ch05s01.html.fr#boot-initrd
Avec une clé USB, c'est simple aussi (cf http://wiki.debian-facile.org/wiki/doku.php?id=manuel:installation:installusb), pour une lenny, avec la clé dans /dev/sdf
wget http://ftp.fr.debian.org/debian/dists/lenny/main/installer-i386/current/images/hd-media/boot.img.gz
wget http://cdimage.debian.org/debian-cd/current/i386/iso-cd/debian-506-i386-netinst.iso
zcat boot.img.gz > /dev/sdf
mount /dev/sdf /mnt/test
cp debian-506-i386-netinst.iso /mnt/test
umount /mnt/test
Y'a plus qu'à booter sur la clé...
Dans cette exemple, la clé se retrouve avec 256Mo, ça doit être possible de partitionner la clé avant et de faire un zcat boot.img.gz > /dev/sdf1 pour pouvoir mettre une iso + grosse sur /dev/sdf2 (pas testé)
===== Clé USB live =====
cf http://live.debian.net/manual/current/html/live-manual/the-basics.fr.html
Pour créer une clé bootable avec un installer et un environnement complet
mkdir debian-live-64
cd debian-live-64/
# pour une clé usb, le bootloader est forcément isolinux, et il ne supporte que ntfs en --binary-filesystem
lb config --clean --apt apt --binary-images iso-hybrid --binary-filesystem ntfs --debian-installer cdrom --distribution wheezy --debian-installer-gui true --bootappend-live "locales=fr_FR.UTF-8 keyboard-layouts=fr" --updates true --backports true
# en root
lb build
# #using-usb-extra-space
# On branche la clé, df ou mount pour vérifier le X de /dev/sdX, ATTENTION à pas se gourer !
# en la laissant montée
cp binary.hybrid.iso /dev/sdX
# pour créer une 2e partition
gparted ${USBSTICK}
===== Gestion des paquets debian =====
* apt howto http://www.debian.org/doc/manuals/apt-howto/ch-apt-get.en.html
* doc aptitude pour les pattern de recherche https://www.debian.org/doc/manuals/aptitude/ch02s04s05.fr.html#exampleSearchEqual
* d'autres exemples sur http://doc.ubuntu-fr.org/aptitude#motifs_de_recherche_utilisation_avancee
* https://wiki.debian.org/Aptitude
quelques exemples
* ''truc ~i'' paquets dont le nom contient "truc" qui sont installés, ''?name(truc) ~i'' est équivalent et recommandé (mais le raccourci est quand même pratique)
* ''?exact-name(apt)'' pour avoir apt mais pas apt-get ni aptitude
* ''~c'' configurés et pas installés (y'a eu install puis remove sans purge)
* ''aptitude search '!?origin(debian) ~i' '' pour voir tous les paquets non debian (dotdeb, mongo, nginx & co)
* ''~o'' pour les paquets obsolètes (qui ne sont pas dans les dépôt actuels), en général les deb installés localement, mais ça peut être un ancien paquet installé sorti de debian depuis
* ''aptitude search '?narrow(?installed, !?archive(stable))' '' trouver tous les paquets installés qui ne sont pas dans stable (de toutes origines)
* ''aptitude -F "%p" search "$pattern"'' -F pour le formatage de sortie, on ne veut que les noms de paquets
* ~i => les paquets installés
* !~M => mais pas les paquets automatiquement installés (on peut mettre '~i!~M' au lieu de ~i\!~M, mais attention de ne pas quoter avec " sinon bash va interprêter le !)
* ''?depends(python) ~i'' tous les paquets qui dépendent de python
* ?for permet du récursif '' ?for x: ?depends(?recommends( ?=x ) ) ~i'' pour lister les paquets installés qui ont en dépendance un paquet qui le recommande (pas d'une utilité folle, mais c'est un exemple)
On peut combiner ça, par exemple pour voir pourquoi les paquets marqués auto sont installés :\\
''aptitude search -F "%p" ~i~M | while read p; do echo -e "\n$p"; aptitude why $p; done;''\\
ou pour voir ceux qui ne sont là "que" par recommandation\\
''aptitude search -F "%p" ~i~M | while read p; do aptitude why $p; done |grep Recommends'' (long et gourmand)
Marquer tous les libXX en auto : ''aptitude -F "%p" search ^lib~i\!~M > list; aptitude markauto $( liste%%''
et sur l'autre machine on installe tous ces paquets ''%%aptitude install $(
Package: *
Pin: release a=testing
Pin-Priority: 990
Package: *
Pin: release a=unstable
Pin-Priority: 99
d'après http://www.bxlug.be/articles/194 (vu ailleurs aussi)
Rmq : un attribut intéressant, le o=Debian pour préciser l'origine debian des paquets (pour les distinguer par exemple de o=dotdeb), et une commande pour voir les attributs des différentes sources : \\
''%%for f in /var/lib/apt/lists/*Release; do echo "$f :"; cat $f; echo; done;%%''
==== sources.list et préférences apt ====
Mon sources.list lenny (en squeeze on mettra plutôt les ajouts dans des /etc/apt/sources.list.d/truc.list)
deb http://mir2.ovh.net/debian/ lenny main contrib non-free
deb-src http://mir2.ovh.net/debian/ lenny main contrib non-free
deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free
deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
deb ftp://ftp.debian-multimedia.org lenny main non-free
# backports devenu officiel, cf http://backports.debian.org/
# on prend le mirror debian.netcologne.de en ftp
deb ftp://debian.netcologne.de/debian-backports/ lenny-backports main contrib non-free
et dans /etc/apt/apt.conf (pour squeeze on mettra ça plutôt dans un fichier de /etc/apt/apt.conf.d/, par ex 80no_reco_ni_sugg pour passer après les autres)
// on veut pas des recommandés ou suggérés
APT::Install-Recommends "0";
APT::Install-Suggests "0";
Et pour /etc/apt/preferences (en squeeze préférer des fichier comme /etc/apt/preferences.d/openoffice)
Package: openoffice.org openoffice.org-gnome
Pin: release a=lenny-backports
Pin-Priority: 999
Rq: on ne peut pas utiliser de wildcard ici, faut lister tous les paquets.
Comme c'est fastidieux, pour les avoir tous on pourra lancer par ex
aptitude -t lenny --disable-columns -F "%p" search 'openoffice.org-'|tr '\n' ' '
===== Création de paquet debian =====
Pour faire des paquets plus proprement qu'avec checkinstall (à la sauce debian pour de vrai), cf http://www.catapulse.org/articles/view/81, http://boisson.homeip.net/faireunpaquet.html, http://alp.developpez.com/tutoriels/debian/creer-paquet/, http://fr.wikipedia.org/wiki/Utilisateur:Sbrunner/Cr%C3%A9ation_de_paquets_Debian et bien sûr la doc officielle pour faire tout bien comme il faut http://www.debian.org/doc/manuals/maint-guide/ch-start.fr.html
===== transfert de clés gpg =====
Pour exporter ses clés : ''%%gpg --export -o fichier%%'' \\
et on récupère avec ''%%gpg --import fichier%%''
===== modif image iso =====
cf http://linux.jpvweb.com/imageiso.html
et un autre tuto détaillé sur la gravure http://www.labo-linux.org/articles-fr/la-gravure-sous-linux/gravure-de-dvd
===== SysRq =====
cf http://aplawrence.com/Words2005/2005_04_13.html
The "Magic Sysrequest key" is Alt (left or right Alt key) and Sysrq (up there under Print Screen, next to F12 on most keyboards). To use it, you need to have it enabled in your kernel (CONFIG_MAGIC_SYSRQ). It usually is; if you have a file called '/proc/sys/kernel/sysrq' you have this. To ENABLE the magic functions, you need a "1" in that file. If it has 0, Alt-SysRq just returns you to the previous console you were using.
* 'r' - Turns off keyboard raw mode and sets it to XLATE.
* 'k' - Secure Access Key (SAK) Kills all programs on the current virtual console. NOTE: See important comments below in SAK section.
* 'b' - Will immediately reboot the system without syncing or unmounting your disks.
* 'o' - Will shut your system off (if configured and supported).
* 's' - Will attempt to sync all mounted filesystems.
* 'u' - Will attempt to remount all mounted filesystems read-only.
* 'p' - Will dump the current registers and flags to your console.
* 't' - Will dump a list of current tasks and their information to your console.
* 'm' - Will dump current memory info to your console.
* '0'-'9' - Sets the console log level, controlling which kernel messages will be printed to your console. ('0', for example would make it so that only emergency messages like PANICs or OOPSes would make it to your console.)
* 'e' - Send a SIGTERM to all processes, except for init.
* 'i' - Send a SIGKILL to all processes, except for init.
* 'l' - Send a SIGKILL to all processes, INCLUDING init. (Your system will be non-functional after this.)
* 'h' - Will display help (actually any other key than those listed above will display help. but 'h' is easy to remember :-)
If you have this enabled, it can be useful in the case where the system has escaped your control and nothing else is working. The following sequence may be better than just hitting the power button:
* Alt+SysRq+s - sync the disk
* Alt+SysRq+e - try to nicely kill processes (wait a little bit here)
* Alt+SysRq+i - no more mister nice guy
* Alt+SysRq+u - unmount disks (wait a bit here, too)
* Alt+SysRq+b - reboot
I can remember that with "So Everything Is Unusual - Boot!"
Un billet sur le mirroring de dépots (ubuntu, mais idem pour debian), pour une install ailleurs sans adsl :
http://blog.racoon97.net/index.php?2007/04/07/90-installer-ubuntu-sans-connexion-internet-a-partir-des-depots-sur-un-disque-dur-externe
===== Raccourcis clavier =====
==== Mac OS X ====
* | -> shift + alt + L
* { -> alt + (
* [ -> alt + shift + (
* \ -> alt + shift + :
Le reste sur http://www.prendreuncafe.com/blog/post/2007/05/19/Petit-pense-bete-des-raccourcis-Mac-OS-X
===== screen =====
http://www.amitu.com/blog/2004/12/screen-howto.html
===== sudo =====
Juste un exemple de /etc/sudoers, plus rapide qu'un long discours
# des alias de commandes
Cmnd_Alias NET=/sbin/ifconfig,/usr/sbin/iftop,/usr/bin/gnome-ppp
Cmnd_Alias HALT=/sbin/halt,/sbin/reboot
Cmnd_Alias OTHERBIN=/usr/bin/ionice,/usr/bin/renice,/usr/bin/truecrypt
# et on donne le droit au user daniel d'exécuter depuis n'importe quel host (ALL),
# en tant que root et sans mot de passe les commandes suivantes
daniel ALL=(root) NOPASSWD:NET,NOPASSWD:HALT,NOPASSWD:OTHERBIN
# et on donne le droit aux users du groupe adm d'exécuter ces commandes en root
# (mais ils devront fournir leur mot de passe)
%adm ALL=(root) NET,HALT,OTHERBIN
===== iptables =====
Pour se simplifier iptables : http://firehol.sourceforge.net/commands.html, avec un exemple de port forwarding http://mel.icious.net/blog/2007/07/10/give-me-a-reason-to-stop-playing-with-your-heart/
D'autres utilitaires pour iptables http://wiki.debian.org/Firewalls
howto iptables http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html
==== exemples ====
* Pour bloquer une ip, c'est ''iptables -A INPUT -s ip.un.peu.louche -j DROP'',
* et pour la débloquer c'est ''iptables -D INPUT -s ip.un.peu.louche -j DROP''
* Pour qu'une VM avec une ip privée puisse “sortir” sur internet
iptables -t nat -A POSTROUTING -s ip.privee.de.la.vm -o vmbr0 -j SNAT --to ip.publique.a.utiliser
* Et pour qu'une connexion sur $port_ip_pub arrive sur un port d'une ip privée
iptables -t nat -A PREROUTING -p tcp -d ip.publique --dport $port_ip_pub -j DNAT --to-destination ip.privee.de.la.vm:$port_ip_privee
(on peut aussi ajouter -i $interface si on veut se limiter à cette interface)
Et pour virer ces règles, remplacer le -A par -D
===== tunnel ssh =====
explications tunnels ssh http://www.institut.math.jussieu.fr/informatique/tunnel/tunnel_ssh.html
==== Port local redirigé vers ailleurs ====
''ssh -f -N -L $localPort:$destServer:$destPort $user@$sshServer'' (souvent, $sshServer et $destServer sont identiques, mais c'est pas obligé, et c'est même pratique pour rerouter un port vers une machine sur laquelle on a pas de compte ssh, le tunnel étant entre la machine locale et $sshServer)
Pour garder la connexion active, même sans traffic, ''ssh -o ServerAliveInterval=300 -f -N -L $localPort:$destServer:$destPort $user@$sshServer'' (envoie un ~ping toutes les 5min).
==== Port distant redirigé vers ailleurs ====
''ssh -f -N -R $remotePort:$destServer:$destPort $user@$remoteServer''
===== Redirection IP =====
S'il n'y a pas besoin de chiffrer les communication, c'est bcp plus simple de rediriger le trafic avec iptables ([[http://www.simplehelp.net/2009/04/15/how-to-redirect-traffic-to-another-machine-in-linux/|source utilisée]])
# vérifier que ça répond 1
cat /proc/sys/net/ipv4/ip_forward
# exemple en redirigeant le trafic arrivant sur le port 80 vers $newIP
iptables -t nat -A PREROUTING -p tcp –dport 80 -j DNAT –to-destination $newIP
iptables -t nat -A POSTROUTING -p tcp -d $newIP –dport 80 -j MASQUERADE
===== label disques =====
* donner un label à une partition : ''tune2fs -L monlabel /dev/hda1''
* monter d'après le label dans fstab : ''LABEL=monlabel'' (à la place de /dev/... ou UUID=...)
===== uuid =====
Si vous utiliser les uuid (dans grub2 par ex, ou dans votre fstab), et que vous faites des backup restaurations avec partimage, vous pouvez vous retrouver avec 2 partitions ayant le même UUID (sdaN backupée et restaurée sur sdbM), et là c'est pas terrible ;-)
Mais ça peut s'arranger (http://doc.ubuntu-fr.org/uuid_et_label#modifier_manuellement_l_uuid_d_un_systeme_de_fichiers)
# pour voir les uuid (et les labels)
blkid
# ls -l /dev/disk/by-uuid/ donne les mêmes infos
# on a sda3 et sda5 avec le même UUID, on en veut un nouveau pour sda5
# on en génère un avec uuidgen
newu=$(uuidgen)
echo $newu #pour voir ;)
# puis on l'affecte à sda5 avec tune2fs
tune2fs -U $newu /dev/sda5
(penser à modifier /boot/grub/grub.cfg et /etc/fstab en conséquence)
===== nb montages avant check disque =====
* check tous les 90 mounts ou 3 mois (le 1er qui arrive) ''tune2fs -c 90 -i 3m /dev/hda1''.
===== Backup simple d'une partition =====
simplement avec ''dd if=/dev/sdX | gzip > /mnt/backup/bkp_sdX_avec_dd.gz'', que l'on récupère (sur la même machine) avec ''zcat /mnt/backup/bkp_sdX_avec_dd.gz | dd of=/dev/sdX''
Ça marche d'une machine à l'autre sur des partitions de même taille, si le /dev/sdX cible est plus grand que l'origine, ça fait de la place perdue, et s'il est plus petit je sais pas trop, mais je déconseillerais ;-)
Pour faire des images de partitions restaurables sur d'autres partitions de taille différentes, utiliser plutôt partimage.
===== Manipulation MBR =====
//MBR : Master Boot Record, c'est ce qui permet d'appeller le lanceur de l'OS, grub, lilo ou celui de windows).//
Normalement, c'est le bootloader du 1er disque (le 1er déclaré dans le bios) qui est lu, et s'il est vide celui de la partition active de ce disque. Pour ceux qui ont plusieurs OS et veulent conserver à chacun son bootloader, ça peut être pratique de le mettre dans le MBR de la partition de boot (/boot plutôt que / si c'est différent) de l'OS concerné, histoire d'être sûr qu'il se fera pas écraser par le bootloader d'un autre OS installé ensuite. Reste ensuite, éventuellement, à mettre un bootloader sur le disque complet qui ne fait que du chaînage vers les différents bootloader des différents OS sur leur partitions respectives).
Par ex un linux sur sda1 avec son grub sur sda1, un autre linux sur sdb3 avec son grub2 sur sdb3, et un grub (ça marche même si les partitions changent de taille, mais pas si son menu.lst disparait) ou un lilo (n'a pas besoin de menu.lst mais ne marchera plus si les partitions sont plus à la même place) sur sda qui ne fait que du chainloader +1 vers sda1 ou sdb3.
Pour sauvegarder le MBR (446 octets de bootloader + 64 octets de table des partitions + 2 octets de signature, cf http://www.cyberciti.biz/faq/howto-copy-mbr/)
# sauvegarde du MBR de sda (COMPLET car 512 octets, prendre 446 pour bootloader only)
dd if=/dev/sda of=/mnt/bkpdisk/mbr-sda.bak bs=512 count=1
# récup du MBR complet de sda
dd if=/mnt/bkpdisk/mbr-sda.bak of=/dev/sda bs=512 count=1
# recup du bootloader only (sans table des partitions) que l`on met sur un autre disque (sdb)
dd if=/mnt/bkpdisk/mbr-sda.bak of=/dev/sdb bs=446 count=1
Et pour effacer un MBR (le bootloader mais pas les partitions), on met juste des 0 dedans avec
dd if=/dev/zero of=/dev/sdX bs=446 count=1
===== Créer une partition chiffrée =====
Pour créer un volume lvm (ici toto dans vg3) et une partition chiffrée avec luks dedans (cf http://www.debian-administration.org/articles/469)
# le volume
lvcreate -n toto --size 200G vg3
# On le chiffre (ça efface tout s’il y avait qqchose dedans)
cryptsetup luksFormat /dev/vg3/toto
# On l’ouvre en lui donnant un nom (ici toto aussi, mais ça peut être ce que l’on veut)
cryptsetup luksOpen /dev/vg3/toto toto
# On a alors un /dev/mapper/vg3-toto qui est le volume lvm
# et un /dev/mapper/toto qui est le volume luks (et pourrait avoir un autre nom)
# On peut créer un filesystem dedans
mkfs.ext4 /dev/mapper/toto
# et le monter normalement
mount /dev/mapper/toto /toto
===== Redimensionner un volume luks =====
Cf http://www.gigahype.com/resize-luks-encryped-lvm-partition/
# On démonte
umount /dev/mapper/toto
# On check
fsck.ext4 -f /dev/mapper/toto
# On ferme le volume luks
cryptsetup luksClose toto
# On agrandit le volume lvm
lvextend -L +20G /dev/vg3/toto
# idem lvextend -L +20G /dev/mapper/vg3-toto
# On rouvre luks
cryptsetup luksOpen /dev/vg3/toto toto
# resize luks
cryptsetup --verbose resize toto
# On peut vérifier le fs si on est méfiant
fsck.ext4 -f /dev/mapper/toto
# et le monter
mount /dev/mapper/toto /toto
===== Montage de partitions chiffrées =====
Pour monter une partition chiffrée avec luks (le système de chiffrement proposé par debian à l'install), bien utile pour de la maintenance quand on boot sur usb (pour modifier les tailles de partitions, les backuper, etc.).
Attention, ici c'est un volume luks, sur une partition physique, qui contient des lv (ce que fait l'installeur debian), plus haut on parlait de lv qui contiennent du luks, les deux sont possible (mais pour avoir du luks dans un lv, il faut avoir un système qui tourne et a lancé lvm avant).
# on crée le device mapper qui va bien (nommé ici "crypt") pour sda2 (par ex)
crypsetup luksOpen /dev/sda2 crypt
# ça crée un /dev/mapper/crypt
# si c`est du lvm dedans
vgscan
# doit suffire à retrouver les volumes, suffit de vérifier avec
lvdisplay
# mais faut encore les rendre actifs (créer les /dev/vg/lv qui vont bien)
vgchange -ay
# et ensuite on peut les monter normalement
===== Raid soft =====
Un peu de doc et des liens sur [[http://www.isalo.org/wiki.debian-fr/index.php?title=Raid_logiciel_%28mdadm%29|isalo]] et [[http://www.linuxpedia.fr/doku.php/expert/mdadm|linuxpedia]]
* créer un raid1 sur md0 avec les partitions sda1 et sdb1
''mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1''
* Voir l'état des raid
''mdadm --detail --scan --verbose'', ''cat cat /proc/mdstat'' donne aussi des infos utiles (UU => 2 disques en Usage, OK)
* récupérer un raid existant non détecté (ex avec le précédent)
''mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1'' (si y'a du lvm dedans, faudra probablement lancer des pvscan et vgscan + activation des lv avec ''vgchange -ay'')
* Après une modif du raid, faut enregistrer la conf pour que ça redémarre correctement au prochain boot
''cp -a /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.$(date '+%F').bak && mdadm --detail --scan --verbose > /etc/mdadm/mdadm.conf''
* Enlever une partition
''mdadm --manage /dev/md0 --remove /dev/sdb1''
* Ajouter une partition
''mdadm --manage /dev/md0 --add /dev/sdb1''
===== sensors =====
Avec un Carte mère Asus P5QL pro, sensors ne détecte que la température des 4 cœurs du CPU, avec un petit ''w83627ehf force_id=0x8860'' ça va nettement mieux, merci à cet [[http://www.kanonbra.com/index.php/projects/various||article]] qui reprenait cette [[http://article.gmane.org/gmane.linux.drivers.sensors/17253|info]].
===== Pb de connexion ssh =====
Depuis buster, j'ai régulièrement des connexions ssh qui échouent (il n'utilise pas la clé et me demande un pass), lancer
gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg,ssh
règle le pb (il me demande alors bien le pass de la clé à utiliser)