{{tag>BSD unix}} {{ http://netbsd-soc.sourceforge.net/NetBSD.png }} ====== Installation de NetBSD-current ====== //sur une machine i386// ===== L'installation de base ===== ====Créer les disquettes de boot==== **rawrite** est un utilitaire sous Windows pour copier une image de NetBSD sur disquette : on va s'en servir pour créer les 2 disquettes de boot de NetBSD, à partir des images **boot1.fs** et **boot2.fs**. Ces trois fichiers sont disponibles ici par exemple : ftp://ftp.free.fr:/mirrors1/ftp.netbsd.org/NetBSD-3.1/i386/installation/ rawrite.exe est dans //misc/// et les images des disquettes dans //floppy///. Ensuite on boot l'ordinateur sur la première disquette et on suit les instructions. * le prog d'install se nomme **sysinst** ; le fichier de config : **/etc/rc.conf** ; la doc du Xfree **/usr/X11R6/lib/X11/doc** * partitionnement avec **fdisk** : NetBSD doit être installé sur une partition principale (BIOS). Ddans sa partition BIOS (aussi appellée **slice**), NetBSD définit son partitionnement BSD à l'aide d'un **disklabel** ; ces sous-partitions ne peuvent être vues que par NetBSD et sont identifiées par des lettres minuscules (a: b: etc..). Mais avant toute chose il faut configurer le réseau car les disquettes ne contiennent pas grand chose.. : au menu de boot il faut aller dans //Utility Menu/Configure Network// afin de configurer la carte (**ex0** si Ethernet) Le ftp mirror du lip6 : antioche.lip6.fr /pub/NetBSD-daily/HEAD/200512230000Z/ i386/binary/sets/ Globalement ça donne ça : le disque dur **/dev/wd0** a 4 partitions principales : Win, NetBSD et 2 //unused// (on le voit avec **fdisk wd0**). Avec **disklabel wd0** on obtient la vision de NetBSD : * ''/dev/wd0a'' : / de 3Go * ''/dev/wd0b'' : swap de 1Go (et ouai j'ai fait l'con) * ''/dev/wd0c'' : représente la partition NetBSD qui englobe les sous partitions a: et b: (4Go) * ''/dev/wd0d'' : représente le disque entier (20Go) * ''/dev/wd0e'' : unused * ''/dev/wd0f'' : unused **a: doit être / et b: doit être la swap ; d: est le disque entier**. ===== Modifs post-installation ===== ==== Passer /usr sur une autre partition ==== === Créer une nouvelle partition === On peut afficher la table des partitions du disque wd0 ainsi : fdisk wd0 Partition table: 0: NTFS, OS/2 HPFS, QNX2 or Advanced UNIX (sysid 7) start 63, size 12289662 (6001 MB, Cyls 0-765), Active 1: NetBSD (sysid 169) start 12289725, size 20482875 (10001 MB, Cyls 765-2040) 2: NetBSD (sysid 169) start 32772600, size 128063880 (62531 MB, Cyls 2040-10011/155/1) 3: Pour créer la partition il faut faire un ''fdisk -u wd0'' et suivre le fil des questions. Ensuite il faut utiliser la commande ''disklabel'' : disklabel wd0 > tempfile vi tempfile disklabel -R -r wd0 tempfile ''vi tempfile'' car il va falloir éditer le disklabel : par exemple la dernière ligne (f: ..) ci-dessous : 16 partitions: # size offset fstype [fsize bsize cpg/sgs] a: 20219472 12289725 4.2BSD 2048 16384 28080 # (Cyl. 12192*- 32251*) b: 263718 32509197 swap # (Cyl. 32251*- 32512*) c: 20482875 12289725 unused 0 0 # (Cyl. 12192*- 32512*) d: 160836480 0 unused 0 0 # (Cyl. 0 - 159559) e: 12289662 63 NTFS # (Cyl. 0*- 12192*) f: 128063535 32772915 4.2BSD 2048 16384 28632 # (Cyl. 32512*- 159559*) Puis on la formate en FFS : newfs /dev/wd0f === Monter /usr sur la nouvelle partition === mount /dev/wd0f /mnt/test cd /usr pax -rw -pe . /mnt/test umount /mnt/test echo "/dev/wd0f /usr ffs rw 1 2" >> /etc/fstab shutdown now mv /usr /usr.old mkdir /usr Dans l'ordre on créer le système de fichier sur la partition, on la monte temporairement, on copie les données du /usr actuel dessus, on démonte la partition, on met à jour la //fstab//, et on reboot en mode mono-utilisateur pour éviter les conflits de ressources critiques. Si le sytème marche on peut supprimer le ///usr.old//, sinon on le restaure.. {{http://www.mclink.it/personal/MG2508/images/part.gif}} c'est ça sauf que moi c'est pas e mais f ==== rc.conf ==== C'est le fichier de conf qui se charge lors du démarrage : ''/etc/rc.conf''. On peut/doit rajouter les lignes suivantes : hostname=stag-12-11.ipv6.lip6.fr dhclient=YES dhclient_flags="ex0" wscons=YES sshd=YES #lancer le serveur ssh ip6mode=autohost #activer l'ipv6 rtsol=YES rtsol_flags="ath0" # for ip6mode=autohost only lkm=YES #permet de lancer certains modules pf=YES #packet filtrer (firewall) ===== Restaurer le MBR ===== On boot sur disquette sans lancer l'installation, puis : > boot hd0a:netbsd //on remarquera qu'ici c'est la nomenclature du dur conventionnelle// (NetBSD se lance depuis le disque) fdisk -B wd0 et si les labels de **diskn** n'ont pas été maj (win et bsd), essayer : fdisk -B -i -u wd0 ===== Recompilation du noyau ===== //dont les sources ont été dl dans /usr/src// ==== En utilisant **built.sh** ==== ---fortement inspiré--- traduction de la doc officielle : http://cvsweb.netbsd.org/Documentation/current/#updating cd /usr/src Construire la //toolchain// ./build.sh -O ../obj -T ../tools -U -u tools Construire la distribution ./build.sh -O ../obj -T ../tools -U -u distribution Construire le noyau ./build.sh -O ../obj -T ../tools -U -u kernel=GENERIC Installer le noyau cd ../obj/sys/arch//compile/GENERIC su # mv /netbsd /netbsd.old # cp netbsd /netbsd Rebooter avec le nouveau kernel # shutdown -r now Installer le nouvel espace utilisateur cd /usr/src su ./build.sh -O ../obj -T ../tools -U install=/ Suivre les instructions à l'écran pour réparer les fichiers obsolètes, par exemple /usr/src/usr.sbin/postinstall -s /usr/src -d // fix defaults mtree obsolete Mise à jour de ''/etc'' /usr/sbin/etcupdate -s /usr/src/etc (optionnel) Rebooter pour s'assurer que tous les services utilisent les nouveaux binaires shutdown -r now L'option -u indique un processus de mise à jour, l'option -U permet une construction par un utilisateur no-root suivi d'une install par root. ==== A la roots (à l'ancienne) ==== cd /usr/src/sys/arch/i386/conf GENERIC c'est la config du noyau actuel, on s'en inspire : cp GENERIC MON_NOYAU Il existe **adjustkernel**, un outil en perl qui analyse l'affichage du démarrage (**dmesg**) pour n'activer que les modules nécessasires à votre système dmesg. L'installer et le lancer. adjustkernel MON_NOYAU //je crois que c'est la syntaxe// Autant le dire de suite, ça n'a pas marcher pour moi : le fichier ne compilait pas. Dans ce cas il faut l'éditer à la main ; puis : # config MON_NOYAU # cd ../compile/MON_NOYAU # make depend # make # mv /netbsd /netbsd.old # mv netbsd / et on reboote pour tester ! # shutdown -r now ==== Restaurer l'ancien noyau ==== Si la machine ne boot plus, booter en mode mono-utilisateur avec la disquette sur l'ancien noyau : #> boot hd0a:netbsd.old -s # fsck / # mount / # mv /netbsd.old /netbsd # reboot ===== Configuration du serveur X ===== **Xfree** est en fait déjà installé donc on peut dors et déjà lancer le serveur X : startx Mais c'est quand même très laid. On va donc lancer l'utilitaire de configuration en mode textuel xf86config Et/ou éditer le fichier de conf qui se trouve là : **/etc/X11/XF86Config** ou là : **/usr/X11R6/lib/X11/XF86Config**, et rajouter dans les bonnes sections : * le clavier XkbRules xfree86 XkbModel pc105 XkbLayout fr * la souris PS/2 (marche aussi avec une souris optique genre Logitec) Option "Protocol" "Auto" Option "Device" "/dev/wsmouse" Option "ZAxisMapping" "4 5" * la carte graphique (une ati rage pro turbo dans mon cas) : Driver "ati" //à modifier aussi dans
, donc 2 fois// Marche aussi avec d'autres cartes ATI si on met le driver **radeon** generic (lancer l'utilitaire de détection de la carte graphique). * le moniteur (un CRT 19" Nec) "1280x1024" en 24 bits par défaut Les fréquences de rafraichissement sont les max proposées ===== Gestion des packages ===== ==== Ajout par CVS ==== # export CVSROOT=:pserver:anoncvs@anoncvs.fr.NetBSD.org:/pub/NetBSD-CVS # cd /usr # cvs login S'il vous dit que **~/.cvspass** n'existe pas, le créer. Ensuite il vous demande un mdp : c'est celui de l'url, soit **anoncvs**. Puis on récupérer la sources des packages et du noyau : # cvs checkout -P pkgsrc # cvs checkout -P src Tout ça va créer les dossier **/usr/pkgsrc** et **/usr/src** ==== Installer/supprimer/avoir des infos sur un package (xyz.tgz) ==== pkg_add xyz.tgz pkg_delete xyz pkg_info Mais on peut aussi les compiler (c'est ça qu'il faut faire avec la version -current) Un exemple avec **bash** : pour créer le package (dans **/usr/pkgsrc/packages/All**) ET l'installer # cd /usr/pkgsrc/shells/bash # make # make package ou, pour juste l'installer : # make install ou pour créer tous les packages des dépendances : # make package pour créer tous les packages des dépendances **nb** : un petit ''# cd /usr/pkgsrc && make clean'' pour faire gagner de la place de temps en temps ==== Pour mettre pkgsrc à jour ==== //edit// : un simple cd /usr/pkgsrc cvs -q update -dP devrait suffir, comme indiqué dans le ''/usr/pkgsrc/docs/pkgsrc.txt'' //ancienne méthode non éprouvée// : # setenv CVSROOT :pserver:anoncvs@anoncvs.netbsd.org:/cvsroot # cd /usr # cvs login # cvs -d $CVSROOT update -PAd pkgsrc NB : si vous faite un **make update** dans **/usr/pkgsrc/**, armez-vous de patience (plusieurs jours) ==== Paquets importants ==== * vulnerability-list : ''security/audit-packages'' puis ''/usr/pkg/sbin/download-vulnerability-list'' * xfce : ''meta-pkgs/xfce4'' * apache : ''www/apache2'' * ap-php : ''www/ap-php'' nb : s'il indique une vulnérabilité, il demande de définir ALLOW_VULNERABLE_PACKAGES pour l'installer. Dans ce cas il faut faire un ''# make ALLOW_VULNERABLE_PACKAGES=1'' ===== Divers ===== ==== Colorer le bash ==== Les modifs se font dans le fichier ''.bashrc'', situé dans votre home (''/home/'' ou ''/root'' pour le root). Si vous utilisez un autre shell, il y a de fortes chances qu'il existe un fichier ressemblant à ''.rc''. Il est possible aussi que votre shell lise le fichier ''.profile'' du même répertoire. Dans ce cas, il faut concaténer les 2 fichiers dans un seul, et faire un lien symbolique de .profile qui pointe vers ''.rc'' ; par exemple : cd ~ cat .profile >> .bashrc mv .profile .profile.old ln -s .bashrc .profile La variable à modifier est **PS1** ; par défaut elle vaut quelque chose comme : PS1="\u@\¿:\w$" c'est à dire ''@:$'' === La syntaxe === Sans changer l'ordre des infos, nous allons mettre le en rouge et en gras, et le reste en bleu : PS1="\e[1;31m\u\e[0;34m@\:\w$ \e[0m" * ''\e['' introduit une couleur * ''1;31m'' format : ;m (ici texte en gras (1) de couleur rouge (31)) * ''\e[0m'' : restaurer le style par defaut (pour que les couleurs ne débordent pas sur le reste du shell) NB : En fonction de votre OS, vous devrez peut être encadrer les couleurs entre \[ \]. Cela donne, par exemple, pour restaurer le style par défaut : ''\[\e[0m\]'' === Les couleurs === * noir 30 40 * rouge 31 41 * vert 32 42 * jaune 33 43 * bleu 34 44 * magenta 35 45 * cyan 36 46 * blanc 37 47 === Le format des polices === Le format des polices : * rien 0 * gras 1 * souligné 4 * clignotant 5 * inversée 7 === Les variables === * \$ affiche $ pour un user et # pour le root * \u user * \h hostname * \w workdir courant * \W répertoire courant * \t time * \d date * \@ : AM/PM * \s nom du shell * \v version du shell * \! numero d'historique de la commande On peut aussi utiliser des commandes externes : par exemple pour afficher : on utilisera ''$(date +"%H:%M")'' à la place de ''\t'' On peut utiliser cette fonction qui défini la taille des fichiers contenus dans le répertoire courant (source : [http://jipe.homelinux.org/trucs_bash/prompt.html jipe]) bytes2 () { a=0 ls -l | (while read -r A B C D E F; do case $A in -*) a=$((a+E)) ;; esac done echo "scale=1; $a/1024/1024" | bc) } Et voici le mien (j'utilise la fonction bytes2 légèrement modifiée) : j'avoue que les couleurs sont pas top PS1='\e[0;47m$(date +"%H:%M")\e[0;31m\h:\e[0;32m\W\e[33m[$(bytes2)Mb]\e[0;34m$ \e[0m' et la même, en encadrant les couleurs (linux) : export PS1='\[\e[0;47m\]$(date +"%H:%M")\[\e[0;31m\]\h:\[\e[0;32m\]\W\[\e[33m\][$(bytes2)Mb]\[\e[0;34m\]\\$ \[\e[0m\]' Un lien utile : http://www.ibm.com/developerworks/linux/library/l-tip-prompt/ ==== RSH ==== **Remote SHell** est un protocole qui permet de lancer des commandes (en clair) shell sur un host distant. //Ssh// c'est "le même" en chiffré. De même //rcp// permet de récupérer des fichiers distants (en clair) et //scp// permet de faire la même chose mais en chiffré. **Rshd** est installé par défaut sous NetBSD dans ''/usr/libexec/rshd'' ou ''/usr/src/libexec/rshd''. Il nécessite **inetd** pour se lancer. Il faut donc décommenter les lignes suivantes dans ''/etc/inetd.conf'' : shell stream tcp nowait root /usr/libexec/rshd rshd -L shell stream tcp6 nowait root /usr/libexec/rshd rshd -L Puis relancer inetd : ''# /etc/rc.d/inetd restart''
Le fichier ''~/.rhosts'' permet à un utilisateur de spécifier les IP des machines clientes pour lesquelles il n'aura pas besoin de saisir un mot de passe pour lancer une commande rsh (ou rcp). Ce fichier est situé sur le serveur RSH. La syntaxe est '' ''. On va donc ajouter localhost dedans : localhost dude On peut vérifier si le serveur marche avec un : rsh localhost ls qui devrait renvoyer le résultat du ''ls'' Les différents paramètres : * ''-4'' : pour forcer la connexion en IPv4 * ''-n'' : pour rediriger l'entrée vers ''/dev/null'' === Imprimer avec CUPS === **Common UNIX Printing System** est un client/serveur d'impression pour UNIX.. En installant ///usr/pkgsrc/print/cups// on installe les 2 mais c'est le client qui nous intéresse. Après l'installation il faut juste éditer le ''/usr/pkg/etc/cups/client.conf'' et informer le hostname du PC qui partage l'imprimante : ServerName hera-stag.ipv6.lip6.fr Ensuite un ''lpr -P Black mondoc.ps'' suffit à lancer l'impression au 6e. SI ça ne marche pas il faut bien utiliser le "bon" lpr, celui situé dans ''/usr/pkg/'' : /usr/pkg/bin/lpr -P Black Realman-full-Iannone.ps On peut également utiliser ''lpq -P Black'' pour afficher la file d'impression ou ''lpstat -p Black'' pour relever les stats de l'imprimante. Pour info CUPS fourni une interface web disponible ici : ''http://localhost:631''. Un tutorial pour configurer le serveur est disponible ici : http://www.trustonme.net/didactels/268.html La doc officielle est là : http://www.cups.org/documentation.php === Installer le JRE 1.5 === Il se situe dans ''/usr/pkgsrc/lang/sun-jre15'' On doit dans un premier temps télécharger le binaire pour linux : http://java.sun.com/j2se/1.5.0/download.html ou là : http://java.sun.com/products/archive/index.html Cliquer sur //Download JRE 5.0 Update 6//, et télécharger le //Linux self-extracting file//. Ensuite, il faut le mettre dans ''/usr/pkgsrc/distfiles/jre-1_5_0_06-linux-i586.bin'' Puis il faut accepter la licence en modifiant mk.conf : ''echo "ACCEPTABLE_LICENSES+=jdk13-license" >> /etc/mk.conf'' Enfin on peut l'installer avec un ''make package'' === Configurer le firewall === Editer ''/etc/rc.conf'' et ajouter les lignes suivantes : lkm=YES pf=YES puis dans le fichier ''/etc/lkm.conf'' /usr/lkm.pf.o - - - - BEFORENET et dans le fichier ''/etc/pf.conf'' pass all block quick on ex0 inet6 ==== Monter un(e) disque dur/clé usb ==== D'abord il faut repérer la partition avec ''fdisk'', puis il faut taper : mount -t msdos /dev/sd0d /mnt/usbkey Ce n'est donc pas de la //vfat//, et la partition est la //d//, à cause du système de fichier de NetBSD (cf plus haut). De même certaines options comme //user// ou //uid=x// ne fonctionnent pas. ==== Configuration de Apache/PHP ==== Dans l'ordre : installer apache2, puis php4, puis ap-php. Si on utilise PHP 4.4.2, il y a des failles connues avec certains modules ; aussi il faut ajouter le paramètre ''ALLOW_VULNERABLE_PACKAGES=1'' lors du ''make update'' (uniquement si on le demande). Après celà il faut ajouter les lignes suivantes dans le fichier de conf d'apache2 (///usr/pkg/etc/httpd/httpd.conf// dans notre cas) : LoadModule php4_module lib/httpd/mod_php4.so AddHandler application/x-httpd-php .php * Recompiler PHP pour activer les sockets : éditer /usr/pkgsrc/www/php4/Makefile.php et ajouter malicieusement CONFIGURE_ARGS+= --enable-sockets Recompiler php et ap-php avec # make update ou # make install * Pour générer des images il faut recompiler PHP avec la librairie GD, ou installer le package ''/usr/pkgsrc/graphics/php-gd'' Puis valider le module en ajoutant dans le fichier ''/usr/pkg/etc/php.ini'' la ligne extension=gd.so ==== Se synchroniser sur l'horloge universelle ==== Grâce au protocole NTP ; ce dernier est déjà installé par défaut sous NetBSD. Le fichier de conf est ''/etc/ntp.conf'', et la seule chose à faire ici est d'ajouter un serveur si ça ne marche pas déjà : server 132.227.72.1 server 132.227.72.129 Dans notre cas on se sert d'un serveur interne à cause du firewall. On se met à l'heure en faisant un ''ntpdate 132.227.72.1'' On lance ensuite le démon NTP ''ntpd'' ''ntpq -p'' permet de savoir si on est synchro. ==== SSH ==== * Se connecter en IPv4 en tant que //dude//, sur la machine //host// qui fait tourner un serveur **sshd** : ssh -4 dude@host * faire un tunnel pour rediriger //host:8000// vers //host2:80//. En clair, en se connectant sur http://host:8000 on chargera en fait http://host2(:80) ssh -L8000:host2:80 dude@host ==== Autres ==== * ajouter un utilisateur, créer sa home, et saisir son mot de passe # useradd -m dude # passwd dude Il faut aussi lui permettre d'être su-table en l'ajoutant au groupe **wheel** (en éditant **/etc/group**) wheel:*:0:root,dude On modifie son shell par défaut par ''chsh''. * passer un clavier en AZERTY (si l'install ne vous l'a pas déjà demandé) : wsconsctl -k -w encoding=fr * installation de xfce4 : depuis le meta-paquet **/usr/pkgsrc/meta-pkgs/xfce4** * le fichier de conf d'Apache2 est **/usr/pkg/etc/httpd/httpd.conf** et htdocs par défaut **/usr/pkg/share/httpd/htdocs/** * le fichier de conf de PHP est **/usr/pkg/etc/php.ini** * mettre à jour la base de //locate// : **/usr/libexec/locate.updatedb** * **df -h** pour chopper l'espace disque * **du -hs toto/** pour chopper la taille du répertoire //toto// * **users**, **who** et surtout **w** pour chopper les users connectés et ce qu'ils y font (ils y travaillent, ouai je sais) * **locate** pour trouver un fichier dans la base ; **/usr/libexec/locate.updatedb** pour maj la base * **rehash** pour actualiser les exes du PATH (avoir avoir installer un soft par ex) * **dmesg** pour afficher les messages qui s'affichent au démarrage * là je teste les sockets en PHP ; ça marche avec **client.php** qui interroge sous mozilla ou **telnet 127.0.0.1 10000**.
ça interroge serveur.php qui est lancé en ligne de commande : chmod +ux serveur.php && ./serveur.php * Le fichier ''/etc/defaults/rc.conf'' contient les paramètres et leurs valeurs possibles pour le fichier ''/etc/rc.conf'' * SSH : pour se connecter en ipv4 ''ssh -4 '' * pour relancer le **dhclient** (client DHCP) automatiquement après un ''/etc/rc.d/network restart'', il faut rajouter dans ''/etc/ifconfig.ex0'' : !dhclient -q $int * modèle de ifconfig.ath0 ssid INFRADIO media autoselect mode 11g up et de ifconfig.ath1 ssid TOAD media autoselect mode 11a mediaopt adhoc chan 40 up * ''tcpdump -n -i ath0'' pour sniffer les paquets sur ath0 * pour sauter la demande d'authentification d'Infradio lorsqu'on va sur des sites supportant IPv6 sous firefox, aller dans ''about:config'' et mettre ''network.dns.disableIPv6'' à //true//. * ''ssh -4 '' pour se connecter en ssh en ipv4 * ''ping6 -I ex0 2a02::aaa'' pour pinger sur ex0 en ipv6 * ''wlanctl ath0'' pour afficher les réseaux détectés sur ath0 * debugguer bash (qui a créé un bash.core dans .) : * ''gdb /usr/pkg/bin/bash bash.core'' puis ''bt'' * ajouter ''set -x'' dans le code du .sh pour afficher toutes les commandes lancées (~verbose) * run -e ping_soek.sh * afficher les limites ressources pour chaque processus : ''ulimit -a'' * ''grep -v 'regexp''' permet d'inverser le filtre (ne sélectionner que les lignes ne contenant PAS //regexp//). * ''pkill'' correspond à //killall// sous Linux ; il permet d'envoyer un signal (par défaut un SIGTERM) à tous les processus dont le nom contient la chaîne suivant la commande. On peut spécifier le type de signal comme avec ''kill''
''pkill -9 -g 0 rsh'' permet de d'envoyer un SIGKILL (-9) à tous les processus appartenant au **pgid** du shell courant (-g 0) et contenant //rsh// dans leur nom. ===== Liens ===== * [[http://www.netbsd.org|NetBSD]] * [[http://cvsweb.netbsd.org/Documentation/current/|Tracking NetBSD-current]] : la référence pour installer la //current// de NetBSD (en)