Table of Contents
BSD unix
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: <UNUSED>
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..
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/<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 <Section Device>, 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/<user>
ou /root
pour le root). Si vous utilisez un autre shell, il y a de fortes chances qu'il existe un fichier ressemblant à .<votre_shell>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 .<votre_shell>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 <USER>@<HOSTNAME>:<WORKDIR>$
La syntaxe
Sans changer l'ordre des infos, nous allons mettre le <USER> en rouge et en gras, et le reste en bleu :
PS1="\e[1;31m\u\e[0;34m@\:\w$ \e[0m"
\e[
introduit une couleur1;31m
format : <POLICE>;<COULEUR>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
<NOM DE LA COULEUR> <COULEUR DES CARACTERES> <COULEUR DE FOND>
- 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
- \@ <heure>:<minute> 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 <heure>:<minutes> 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
<br/>
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 <host> <user>
. 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.<br/>
ç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 <host>
- 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 mettrenetwork.dns.disableIPv6
à true.
ssh -4 <host>
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
puisbt
- 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 aveckill
<br/>
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
- Tracking NetBSD-current : la référence pour installer la current de NetBSD (en)