Assistant DHCP
Proposition
Cauldron, la prochaine version de Mageia

nic80 Membre non connecté
-
- Voir le profil du membre nic80
- Inscrit le : 06/08/2018
- Groupes :
-
Modérateur
@Papoteur: est ce qu' avec ceci, ça fonctionne mieux pour l' assistant DHCP ( les fichiers se trouvent dans /usr/share/perl5/vendor_perl/MDK/Wizard) ?
Code PEARL :
--- Dhcp.pm.ori 2020-12-08 22:38:24.197952464 +0100 +++ Dhcp.pm 2020-12-08 23:07:51.539902566 +0100 @@ -58,7 +58,7 @@ name => N("Interface the dhcp server must listen to"), pre => sub { if (!$wiz_ip_server) { - my $interface = 'eth0'; + my $interface = `route | grep default | tr -s " " | cut -d " " -f8`; ($wiz_ip_server) = `/sbin/ip addr show dev $interface` =~ /^s*inets+(d+.d+.d+.d+)/m; } $o->{var}{interface} |= $wiz->{net}->default_itf;
Code PEARL :
--- IFCFG.pm.ori 2020-12-08 22:38:39.845952022 +0100 +++ IFCFG.pm 2020-12-12 10:31:18.851843635 +0100 @@ -31,15 +31,25 @@ #!-f $file and die "no such $file"; sub new { my $self = {}; - - my $ifconfig = `LC_ALL=C /sbin/ifconfig -a`; +my @network_masks = ("128.0.0.0","192.0.0.0","224.0.0.0","240.0.0.0","248.0.0.0","252.0.0.0","254.0.0.0","255.0.0.0","255.128.0.0","255.192.0.0","255.224.0.0","255.240.0.0","255.248.0.0","255.252.0.0","255.254.0.0","255.255.0.0","255.255.128.0","255.255.192.0","255.255.224.0","255.255.240.0","255.255.248.0","255.255.252.0","255.225.254.0","255.255.255.0","255.255.255.128","255.255.255.192","255.255.255.224","255.255.255.240","255.255.255.248","255.255.255.252","255.255.255.254","255.255.255.255"); + #my $ifconfig = `LC_ALL=C /sbin/ifconfig -a`; + my $ifconfig = `ip -ts -a -4 address | grep inet`; my $device = 'NONE'; foreach (split('n', $ifconfig)) { - my ($temp) = /(^eth[0-9]*:?[0-9]*)/; + my ($temp) = /(en?[osp]?[0-9]*?s?[0-9]*:?[0-9]*$)/; + print "temp: $tempn"; $device = $temp if defined $temp; - my ($ip, $bcast, $netmask) = /s*inet addr:([0-9.]*)s*Bcast:([0-9.]*)s*Mask:([0-9.]*)/; + my ($mask) = /^s*inets+d+.d+.d+.d+/(d+)/; + my ($ip) = /^s*inets+(d+.d+.d+.d+)/; + my $netmask=$mask; + my ($bcast) = /s*brds+(d+.d+.d+.d+)/; + print "ip: $ipn"; + print "netmask: $netmaskn"; + print "bcast: $bcastn"; + print "final network mask : $network_masks[$netmask-1]n"; + #my ($ip, $bcast, $netmask) = /s*inet ([0-9.]*)/[0-3][0-9])/; if (defined $ip && defined $bcast && defined $netmask) { - $self->{itf}{$device} = { IPADDR => $ip, BROADCAST => $bcast, NETMASK => $netmask }; + $self->{itf}{$device} = { IPADDR => $ip, BROADCAST => $bcast, NETMASK => $network_masks[$netmask-1] }; my %conf = getVarsFromSh("/etc/sysconfig/network-scripts/ifcfg-$device"); $self->{itf}{$device}{$_} = $conf{$_} foreach 'BOOTPROTO'; } @@ -64,13 +74,16 @@ #- TODO : return the main interface sub default_itf { - "eth0"; -} + my ($temp_defint)=`route | grep default | tr -s " " | cut -d " " -f8`; + $temp_defint =~ s/n$//; + "$temp_defint"; + } sub itf_get { my ($self, $key, $o_itf) = @_; $o_itf ||= default_itf(); + print "o_itf:$o_itfn"; exists $self->{itf}{$o_itf}{$key} or print "ERROR: no $key field in $o_itf hashn"; $self->{itf}{$o_itf}{$key}; }
edit :Ici j' ai considéré que l' interface par défaut, c' est celle de la route par défaut, et que le masque qui remplace eth0 ( variable $temp), c' est une interface filaire.
D' ailleurs le Dhcp.pm devrait être modifier de nouveau, la commande route[...] ajoutant un caractère n en fin de chaine ( à moins que ce soit Perl).
Édité par nic80 Le 12/12/2020 à 10h58

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
Super que tu puisses faire une proposition.
J'ai donc ouvert ma cauldron, et tenter d'appliquer tes changements. Je ne garantis pas d'avoir tout appliqué correctement.
J'ai lancé l'assistant depuis la console.
J'ai laissé les proposition par défaut, sauf le PXE. Notammeent le champ "Passerelle" reste vide.
Le service semble se lancer, mais au final affiche une erreur.
Dans la console je récupère :
Phase initiale
Code TEXT :
temp: ip: 127.0.0.1 netmask: 8 bcast: final network mask : 255.0.0.0 temp: enp0s3 ip: 192.168.1.80 netmask: 24 bcast: 192.168.1.255 final network mask : 255.255.255.0 o_itf:enp0s3
Phase après acceptation :
Code TEXT :
Note: This output shows SysV services only and does not include native systemd services. SysV configuration data might be overridden by native systemd configuration. If you want to list systemd services use 'systemctl list-unit-files'. To see services enabled on particular target use 'systemctl list-dependencies [target]'. o_itf:enp0s3
Je ne sais pas quoi en conclure
Yves

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
Code TEXT :
déc. 12 12:58:26 drakwizard[10207]: running: /bin/systemctl --quiet is-enabled rsyncd.socket déc. 12 12:58:26 drakwizard[10207]: running: /bin/systemctl --quiet is-enabled saned.socket déc. 12 12:58:26 drakwizard[10207]: running: /bin/systemctl --quiet is-enabled systemd-journa> déc. 12 12:58:26 drakwizard[10207]: running: /bin/systemctl --quiet is-enabled systemd-journa> déc. 12 12:58:26 drakwizard[10207]: running: /bin/systemctl --quiet is-enabled systemd-networ> déc. 12 12:58:26 drakwizard[10207]: running: /bin/systemctl --quiet is-enabled systemd-userdb> déc. 12 12:58:26 drakwizard[10207]: running: /bin/systemctl --quiet is-enabled dnf-makecache.> déc. 12 12:58:26 drakwizard[10207]: running: /bin/systemctl --quiet is-enabled fstrim.timer déc. 12 12:58:26 drakwizard[10207]: running: /bin/systemctl --quiet is-enabled man-db.timer déc. 12 12:58:26 drakwizard[10207]: running: /bin/systemctl --quiet is-enabled mlocate-update> déc. 12 12:58:26 drakwizard[10207]: running: /bin/systemctl --quiet is-enabled xfs_scrub_all.> déc. 12 12:58:26 drakwizard[10207]: running: /sbin/chkconfig --list --type xinetd déc. 12 12:58:26 drakwizard[10207]: now patching etc/sysconfig/dhcpd déc. 12 12:58:27 drakwizard[10207]: created file /etc/dhcpd.conf déc. 12 12:58:27 drakwizard[10207]: /etc/dhcpd.conf: hname = localhost, net = 192.168.1.0, ip> mask = 255.255.255.0, rng1 = 192.168.1.129, rng2 = 192.1> déc. 12 12:58:27 drakwizard[10207]: running: /bin/mountpoint -q /sys/fs/cgroup/systemd déc. 12 12:58:27 drakwizard[10207]: running: /etc/rc.d/init.d/dhcpd restart déc. 12 12:58:27 drakwizard[10207]: program not found: /etc/rc.d/init.d/dhcpd déc. 12 12:58:27 drakwizard[10207]: running: /bin/systemctl --quiet is-active dhcpd.service
program not found: /etc/rc.d/init.d/dhcpd
C'est assez explicite.
J'ai l'impression qu'il y a un mélange entre systemd et l'ancien sysV. Il semble initialiser correctement le service en systemd, mais tenter de la lancer avec les anciennes commandes pour sysV.
Yves

nic80 Membre non connecté
-
- Voir le profil du membre nic80
- Inscrit le : 06/08/2018
- Groupes :
-
Modérateur
Je n' ai juste que modifier la partie eth0...
Pour la passerelle je pense qu' elle est vide par défaut dans la partie non modifiée (peut être que la partie collecte de celle ci n' est pas implémentée).
Du fait que juste la partie eth0 a été modifiée, la partie activation du service est restée comme celle initiale, mais elle semble faire le nécessaire (le status du service ne se voit qu' aprés redémarrage du pc).
En tout cas sur ma machine, les adresses ip de base ( sont maintenant plus complète qu' auparavant (192.168.1.65-192.168.1.254), ce qui doit enlever le message indiquant que les adresses ne sont pas valides).
Edit: la sortie de la "phase initiale", ce n' est que des parties d' affichage que j' ai rajouté pour du debogage, ayant eu un peu de mal avec les expressions rationnelles

Edit2: 192.168.1.80 étant en plein de la plage par défaut, 192.168.1.65-192.168.1.254, cela devrait produire le message indiquant que le serveur ne peut pas être dans la plage.
Édité par nic80 Le 12/12/2020 à 13h42

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
nic80 :
Bonjour,
Je n' ai juste que modifier la partie eth0...
Pour la passerelle je pense qu' elle est vide par défaut dans la partie non modifiée (peut être que la partie collecte de celle ci n' est pas implémentée).
Du fait que juste la partie eth0 a été modifiée, la partie activation du service est restée comme celle initiale, mais elle semble faire le nécessaire (le status du service ne se voit qu' aprés redémarrage du pc).
En tout cas sur ma machine, les adresses ip de base ( sont maintenant plus complète qu' auparavant (192.168.1.65-192.168.1.254), ce qui doit enlever le message indiquant que les adresses ne sont pas valides).
Edit: la sortie de la "phase initiale", ce n' est que des parties d' affichage que j' ai rajouté pour du debogage, ayant eu un peu de mal avec les expressions rationnelles
Je n' ai juste que modifier la partie eth0...
Pour la passerelle je pense qu' elle est vide par défaut dans la partie non modifiée (peut être que la partie collecte de celle ci n' est pas implémentée).
Du fait que juste la partie eth0 a été modifiée, la partie activation du service est restée comme celle initiale, mais elle semble faire le nécessaire (le status du service ne se voit qu' aprés redémarrage du pc).
En tout cas sur ma machine, les adresses ip de base ( sont maintenant plus complète qu' auparavant (192.168.1.65-192.168.1.254), ce qui doit enlever le message indiquant que les adresses ne sont pas valides).
Edit: la sortie de la "phase initiale", ce n' est que des parties d' affichage que j' ai rajouté pour du debogage, ayant eu un peu de mal avec les expressions rationnelles

Je suppose que les sorties sont celles que tu attends.
En effet, je n'ai de message concernant les adresses invalides.
Pour le redémarrage, ce n'est pas encore bon :/
Avec systemctl start dhcpd, le journal indique que le fichier de configuration /etc/dhcp/dhcpd.conf n'est pas trouvé. En effet, celui-ci est écrit directement dans /etc.
Yves

nic80 Membre non connecté
-
- Voir le profil du membre nic80
- Inscrit le : 06/08/2018
- Groupes :
-
Modérateur
Citation :
Avec systemctl start dhcpd, le journal indique que le fichier de configuration /etc/dhcp/dhcpd.conf n'est pas trouvé
C' est curieux, j' ai (sous Mageia 7):
Code BASH :
cat /usr/lib/systemd/system/dhcpd.service [Unit] Description=DHCPv4 Server Daemon After=syslog.target network-online.target ldap.service Wants=network-online.target [Service] Environment=CONFIGFILE=/etc/dhcpd.conf LEASEFILE=/var/lib/dhcpd/dhcpd.leases EnvironmentFile=-/etc/sysconfig/dhcpd Type=forking PIDFile=/run/dhcpd/dhcpd.pid ExecStart=/usr/sbin/dhcpd -pf /run/dhcpd/dhcpd.pid -cf $CONFIGFILE -lf $LEASEFILE $OPTIONS $INTERFACES [Install] WantedBy=multi-user.target
Code BASH :
cat /etc/sysconfig/dhcpd # You can set here various option for dhcpd # Which configuration file to use. # CONFIGFILE="/etc/dhcpd.conf" # Where to store the lease state information. # LEASEFILE="/var/lib/dhcpd/dhcpd.leases" # Define INTERFACES to limit which network interfaces dhcpd listens on. # The default null value causes dhcpd to listen on all interfaces. #INTERFACES="" # Define OPTIONS with any other options to pass to the dhcpd server. # See dhcpd(8) for available options and syntax. OPTIONS="-q"
Sinon pour la partie redémarrage, dans le fichier wizcommon.pm, il y a la fonction:
Code PEARL :
sub reload_or_restart { my ($service) = @_; if (run_program::rooted($::prefix, '/bin/mountpoint', '-q', '/sys/fs/cgroup/systemd')) { run_program::rooted($::prefix, '/bin/systemctl', 'reload-or-restart', "$service.service"); } else { run_program::rooted($::prefix, "/etc/rc.d/init.d/$service", "restart"); } }
Mais je ne sais pas ce que retourne la fonction run_program::rooted. Si elle renvoie 0, alors peut être est ce la raison pour laquelle le service sysv est lancé ( https://www.perltutorial.org/perl-if/ )?
Édité par nic80 Le 12/12/2020 à 14h34

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
Code TEXT :
cat /usr/lib/systemd/system/dhcpd.service [Unit] Description=DHCPv4 Server Daemon Documentation=man:dhcpd(8) man:dhcpd.conf(5) Wants=network-online.target After=network-online.target After=time-sync.target [Service] Type=notify EnvironmentFile=-/etc/sysconfig/dhcpd ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid $DHCPDARGS StandardError=null [Install] WantedBy=multi-user.target
Quand je le copie dans /etc/dhcp/ je n'ai toujours pas de succès.
Code TEXT :
déc. 12 13:46:29 localhost systemd[1]: Starting DHCPv4 Server Daemon... déc. 12 13:46:29 localhost dhcpd[14331]: Internet Systems Consortium DHCP Server 4.4.2 déc. 12 13:46:29 localhost dhcpd[14331]: Copyright 2004-2020 Internet Systems Consortium. déc. 12 13:46:29 localhost dhcpd[14331]: All rights reserved. déc. 12 13:46:29 localhost dhcpd[14331]: For info, please visit https://www.isc.org/software/dhcp/ déc. 12 13:46:29 localhost dhcpd[14331]: ldap_gssapi_principal is not set,GSSAPI Authentication for LDAP will not be used déc. 12 13:46:29 localhost dhcpd[14331]: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file déc. 12 13:46:29 localhost dhcpd[14331]: Config file: /etc/dhcp/dhcpd.conf déc. 12 13:46:29 localhost dhcpd[14331]: Database file: /var/lib/dhcpd/dhcpd.leases déc. 12 13:46:29 localhost dhcpd[14331]: PID file: /run/dhcpd/dhcpd.pid déc. 12 13:46:29 localhost dhcpd[14331]: Source compiled to use binary-leases déc. 12 13:46:29 localhost dhcpd[14331]: Wrote 0 class decls to leases file. déc. 12 13:46:29 localhost dhcpd[14331]: Wrote 0 leases to leases file. déc. 12 13:46:29 localhost dhcpd[14331]: Listening on LPF/enp0s3/08:00:27:0c:1b:5f/192.168.1.0/24 déc. 12 13:46:29 localhost dhcpd[14331]: Sending on LPF/enp0s3/08:00:27:0c:1b:5f/192.168.1.0/24 déc. 12 13:46:29 localhost dhcpd[14331]: Sending on Socket/fallback/fallback-net déc. 12 13:46:29 localhost dhcpd[14331]: Server starting service. déc. 12 13:47:59 localhost systemd[1]: dhcpd.service: start operation timed out. Terminating. déc. 12 13:47:59 localhost systemd[1]: dhcpd.service: Failed with result 'timeout'. déc. 12 13:47:59 localhost systemd[1]: Failed to start DHCPv4 Server Daemon.
Yves

nic80 Membre non connecté
-
- Voir le profil du membre nic80
- Inscrit le : 06/08/2018
- Groupes :
-
Modérateur
Je me demande si cela ne vient pas des options du service sous Mageia 8.
Pour le type, on est passé de forking à notify. En plus sur la ligne de commande du service systemd on a utilisation du paramètre -f ( pour foreground) ce qui me parait assez incompatible avec systemd ( comment un processus en avant plan peut rendre la main à systemd ?).
Dans la fonction reload_or_restart, j' ai rajouté un test pour voir la valeur retournée par l' exécution du run_program:rooted . Apparement, elle ne retourne rien... Donc forcément, le service sysv est lancé dans le vide et entraine de fait l' échec de l' assistant ( bien que cela n' ait pas de lien avec le service systemd ( qui de base ne veut pas se lancer). En modifiant la ligne de test de
Citation :
if (run_program::rooted($::prefix, '/bin/mountpoint', '-q', '/sys/fs/cgroup/systemd'))
à
Citation :
if (!run_program::rooted($::prefix, '/bin/mountpoint', '-q', '/sys/fs/cgroup/systemd'))
Je pense que cela appelle le service systemd.
Pour le service systemd, j' ai modifié de notify à forking, et j' ai enlevé les paramètres -f et --no-pid et le service semble se lancer.
Edit: je me suis aperçu que le forum a tendance à supprimer certains caractères "\", ce qui fait que les échappement \n et \s*, \d+ sont supprimés dans les expressions rationelles...
Édité par nic80 Le 12/12/2020 à 18h33

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
Je pense ouvrir un rapport de bug pour dhcpd qui ne se lance pas.
Peux-tu de ton côté ajouter ton patch au rapport de bogue https://bugs.mageia.org/show_bug.cgi?id=11940 ?
Yves

nic80 Membre non connecté
-
- Voir le profil du membre nic80
- Inscrit le : 06/08/2018
- Groupes :
-
Modérateur
C' est fait. Toutefois je n' ai pas vérifié si cela corrigeait les problèmes des autres assistants.

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
https://bugs.mageia.org/show_bug.cgi?id=27815
[Edit] Correction du lien
Édité par Papoteur Le 15/12/2020 à 09h29
Yves

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
nic80 :
Dans la fonction reload_or_restart, j' ai rajouté un test pour voir la valeur retournée par l' exécution du run_program:rooted . Apparement, elle ne retourne rien... Donc forcément, le service sysv est lancé dans le vide et entraine de fait l' échec de l' assistant ( bien que cela n' ait pas de lien avec le service systemd ( qui de base ne veut pas se lancer). En modifiant la ligne de test de
à
Je pense que cela appelle le service systemd.
Citation :
if (run_program::rooted($::prefix, '/bin/mountpoint', '-q', '/sys/fs/cgroup/systemd'))
à
Citation :
if (!run_program::rooted($::prefix, '/bin/mountpoint', '-q', '/sys/fs/cgroup/systemd'))
Je pense que cela appelle le service systemd.
Je pense que la commande /bin/mountpoint est un test pour savoir si le système dispose de systemd. Elle n'est plus très utile de nos jours, à mon sens.
Je ne sais pas ce que fait $::prefix ni run_program::rooted. On peut supposer que ça permet d’exécuter le programme passé en paramètres. Et je pense que ce qui est testé, c'est le code de retour du programme, pas la sortie stdout.
Yves

nic80 Membre non connecté
-
- Voir le profil du membre nic80
- Inscrit le : 06/08/2018
- Groupes :
-
Modérateur
Je crois que le rapport de bug n' est pas le bon. A l' écriture de ce message le bug 27845 n' existe pas encore je crois (27815 me parait mieux).
Si pour la fonction c' est le code retour qui est renvoyé, alors ce n' est pas forcément bon. Lancée depuis une console "/bin/mountpoint -q /sys/fs/cgroup/systemd" renvoi 0, ce qui apparement équivaut pour Perl à un false... Donc on passe forçement dans le else.
Bon effectivement, le nombre de services utilisant sysv sont de moins en moins présents, on pourrait enlever le "if" .

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
David W a fait une correction au paquet dhcp-server hier. Chez moi, ça ne change pas, mais je présume que c'est une question de configuration.
Le problème, c'est que hormis le fait que le service fait un timeout, je ne trouve pas vraiment d'info.
Yves

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
nic80 :
Bonjour,
Je crois que le rapport de bug n' est pas le bon. A l' écriture de ce message le bug 27845 n' existe pas encore je crois (27815 me parait mieux).
Si pour la fonction c' est le code retour qui est renvoyé, alors ce n' est pas forcément bon. Lancée depuis une console "/bin/mountpoint -q /sys/fs/cgroup/systemd" renvoi 0, ce qui apparement équivaut pour Perl à un false... Donc on passe forçement dans le else.
Bon effectivement, le nombre de services utilisant sysv sont de moins en moins présents, on pourrait enlever le "if" .
Je crois que le rapport de bug n' est pas le bon. A l' écriture de ce message le bug 27845 n' existe pas encore je crois (27815 me parait mieux).
Si pour la fonction c' est le code retour qui est renvoyé, alors ce n' est pas forcément bon. Lancée depuis une console "/bin/mountpoint -q /sys/fs/cgroup/systemd" renvoi 0, ce qui apparement équivaut pour Perl à un false... Donc on passe forçement dans le else.
Bon effectivement, le nombre de services utilisant sysv sont de moins en moins présents, on pourrait enlever le "if" .
Le if ne porte pas directement sur la sortie de la commande /bin/mountpoint, mais celle de run_program::rooted. Je ne pense pas que le problème soit là.
Yves
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie