Automatiser dhclient

Lorsque je me logge sur ma session, je ne peux me connecter à internet.
Mais il suffit que je fasse dhclient sous root dans un terminal pour que ça fonctionne.

Quelqu’un sait-il la raison de cela et comment l’automatiser ?

Hello,

Fichier /etc/network/interface :

Tu devrais avoir cette configuration, en principe :
iface eth0 inet dhcp

A quoi ressemble ton fichier “interface” pour l’instant ?

Chris

voici mon fichier /etc/network/interfaces.

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth1
iface eth1 inet dhcp

Et voici le résultat de ifconfig -a

eth1      Link encap:Ethernet  HWaddr 00:10:dc:e4:75:cf  
          inet adr:192.168.0.14  Bcast:192.168.0.255  Masque:255.255.255.0
          adr inet6: fe80::210:dcff:fee4:75cf/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:243 errors:0 dropped:0 overruns:0 frame:0
          TX packets:393 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          RX bytes:184675 (180.3 KiB)  TX bytes:56343 (55.0 KiB)
          Interruption:19 Adresse de base:0xec00 

lo        Link encap:Boucle locale  
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:229 errors:0 dropped:0 overruns:0 frame:0
          TX packets:229 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0 
          RX bytes:38976 (38.0 KiB)  TX bytes:38976 (38.0 KiB)

Et enfin ce que donne la commande netstat -nr

Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic   MSS Fenêtre irtt Iface
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 eth1
0.0.0.0         192.168.0.254   0.0.0.0         UG        0 0          0 eth1

La dernière ligne qui permet l’accès à internet est créée après avoir exécuté dhclient (sous root).

J’aimerais comprendre pourquoi cette ligne n’est pas présente automatiquement !

Hello,

Vu que ton dhcp est configuré et que l’appel de la commande dhclient fonctionne, on doit en conclure que la configuration est la bonne. Cela dit, si tu fais un runlevel, tu obtiens quel résultat ?

(disons que tu obtiens un N 2 par exemple), tu peux lancer un :

ls /etc/rc2.d
ls /etc/rcS.d

En remplaçant le “2” par le résultat de ton runlevel, bien sûr (N 3 => rc3.d … par exemple).

Je voudrais savoir si le networking start bien au boot en fait.

Bonjour SONADOR,

Voici le résultat de la commande ls /etc/rc2.d

K77ntp-server	   S20hddtemp			  S30gdm
README		   S20hotkey-setup		  S30system-tools-backends
S10sysklogd	   S20netatalk			  S43portmap
S11klogd	   S20nfs-common		  S50rsync
S12acpid	   S20nfs-kernel-server		  S70bootlogs
S12dbus		   S20openbsd-inetd		  S89anacron
S14avahi-daemon    S20policycoreutils		  S89atd
S19postgresql	   S20samba			  S89cron
S19postgresql-8.1  S20winbind			  S99rc.local
S19spamassassin    S24dhcdbd			  S99rmnologin
S20bittorrent	   S24hal			  S99stop-bootlogd
S20cups		   S26network-manager		  S99timidity
S20exim4	   S26network-manager-dispatcher

Et celui de la commande ls /etc/rcS.d

README		     S20module-init-tools      S44nfs-common
S02hostname.sh	     S25libdevmapper1.02       S45mountnfs.sh
S02mountkernfs.sh    S30checkfs.sh	       S46mountnfs-bootclean.sh
S03udev		     S30procps		       S47lm-sensors
S04mountdevsubfs.sh  S35mountall.sh	       S48console-screen.sh
S05bootlogd	     S36discover	       S50alsa-utils
S05keymap.sh	     S36mountall-bootclean.sh  S55bootmisc.sh
S08hwclockfirst.sh   S36udev-mtab	       S55urandom
S10checkroot.sh      S37mountoverflowtmp       S70x11-common
S11hwclock.sh	     S39ifupdown	       S75sudo
S12mtab.sh	     S40networking	       S99stop-bootlogd-single
S18ifupdown-clean    S43portmap

Là, je ne sais pas comment voir ça !

[quote=“enicnath”]
S12mtab.sh S40networking S99stop-bootlogd-single
S18ifupdown-clean S43portmap
[/code]

Là, je ne sais pas comment voir ça ![/quote]
Ben apparemment, c’est bon de ce côté.

J’envisage donc d’automatiser l’exécution de dhclient au démarrage de ma machine, juste avant que les utilisateurs puissent se connecter.
En consultant les forums, j’ai vu qu’il serait possible de faire de la façon suivante :
[ul]

  • Créer un fichier /etc/init.d/local
  • Ecrire le mot dhclient dans ce fichier
  • Rendre exécutable ce fichier par la commande chmod u+x /etc/init.d/local
  • Exécuter la commande update-rc.d local defaults 90
    [/ul]

Si j’ai bien compris, cette suite de commande permet l’exécution du fichier de script /etc/init.d/local après la plupart des autres services en raison de la priorité 90 qui lui est donnée. Celle-ci lance la commande dhclient, puisque c’est la seule commande figurant dans le script.

Remarque :
Je n’ai pas mis la ligne du shebang (#!/bin/sh) dans le script parce que je ne demande pas de shell particulier. Peut-être le faut-il néanmoins?

C’est un peu compliqué mais bon. Je suis preneur de toute méthode plus simple !

Solution intéressante… je ne sais pas moi-même s’il y a mieux, car par habitude j’utilise des ip fixes… Mais c’est tout à fait fonctionnel sur le principe.

Quelques précisions d’abord : pour connaitre ton level de démarrage, tu peux regarder dans ton fichier d’inittab (ligne “id:ton_level:initdefault”). Ou, plus rapidement, tu tapes la commande “runlevel”. Tu auras une réponse type “N 1”, “N 2” ou autre chose, suivant ta configuration. Personnellement je boote en N 2. Ton fichier d’inittab décrit à quoi correspond les différent niveau. Si tu obtiens un N 2, dans ce cas, tu regardes ce qui boote en /etc/rc2.d. Si tu es en 3, alors tu vois ce qui se passe en /etc/rc3.d, etc. Je te dis ça parce que tu as vérifié le N 2, mais je ne sais pas si vraiment tu es en level 2 (peut-être que oui, bien sûr :slightly_smiling:). PS. Le “N” veut dire que tu n’as pas changé de niveau d’exécution (note en passant que j’ignorais ce détail jusqu’à ce soir :p)

Ensuite, le /etc/rcS.d listent les services qui démarreront quelque soit ton runlevel.

Par rapport à ta solution, maintenant… Donc, oui, ça parait faisable, même si, pour être franc, je n’ai jamais essayé ça. Il faudrait par contre deux choses. Primo, les fichiers de scripts situés dans le /etc/init.d et destinés à être utilisé au boot dans les rc.d comportent un en-tête spécifique que tu dois ajouter.

Exemple :

#! /bin/sh

BEGIN INIT INFO

Provides: ssh

Required-Start: $remote_fs $syslog

Required-Stop: $remote_fs $syslog

Default-Start: 2 3 4 5

Default-Stop:

Short-Description: OpenBSD Secure Shell server

END INIT INFO

Il faudra que tu crées un entête, sinon ton update-rc.d criera au scandale (une point que tu devrais garder en mémoire, car c’est utile).

Dans ton script - puisqu’il s’agit d’un script, même s’il ne contient qu’une commande, tu devrais noter tout le path. Simple prudence. Pour connaitre le chemin complet, tu fais un “whereis dhclient”. En principe, tu le trouveras dans /sbin/dhclient. Au lieu de taper “dhclient”, tu devras donc indiquer /sbin/dhclient (après, tu fais comme tu veux, bien sûr).
/sbin/dhclient

Et enfin, il faudra donc créer le fichier avec des droits en 755, propriétaire et groupe : root.

root@debian-1:/etc/init.d# ls -l local
-rwxr-xr-x 1 root root 281 8 avril 01:30 local

Cordialement,
Christian

Ok, j’ai fait comme tu m’as dit

  1. le fichier dhclient est bien dans /sbin
  2. J’ai créer le fichier /etc/local dans /etc/init.d avec le contenu suivant :
#! /bin/sh

### BEGIN INIT INFO
# Provides: ssh
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: OpenBSD Secure Shell server
### END INIT INFO

/sbin/dhclient

remarque : je n’ai rien modifié entre BEGIN INIT INFO et END INIT INFO. Ca fera l’objet de recherches ultérieures

  1. Je lui ai mis les droits 755.

  2. J’ai exécuté par update-rc.d local defaults 90
    Le résultat est ci-dessous : update-rc.d: warning: local stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (none) Adding system startup for /etc/init.d/local ... /etc/rc0.d/K90local -> ../init.d/local /etc/rc1.d/K90local -> ../init.d/local /etc/rc6.d/K90local -> ../init.d/local /etc/rc2.d/S90local -> ../init.d/local /etc/rc3.d/S90local -> ../init.d/local /etc/rc4.d/S90local -> ../init.d/local /etc/rc5.d/S90local -> ../init.d/local

En listant le contenu de /etc/rc2.d, on retrouve désormais S90local

  1. Il me reste à faire un redémarrage de ma machine pour voir si tout est ok et que mon dhclient est effectivement lancé.

Hello,

ok bon,

“Provides: ssh” => par contre c’est pas ssh :wink: mdr

Mais c’est bien, tu avances, c’est le principal :slightly_smiling:

Damned !
Comme tu dis j’avance, mais ne suis pas encore arrivé.

Je viens donc de relancer mais j’ai toujours le même problème ; il m’a fallu relancer manuellement dhclient sous root.

Y a t’il un moyen de tester si un script lancer par /etc/rc2.d s’est bien exécuté ?

Bon, à demain. Je vais me coucher !