User Tools

Site Tools


informatique:os:netbsd

This is an old revision of the document!


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..

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/<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 couleur
  • 1;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 mettre network.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 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<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

informatique/os/netbsd.1234717717.txt.gz · Last modified: 2013/10/14 20:53 (external edit)