Pagina 1 di 2

[RISOLTO] Script networking

Inviato: dom 10 ott 2010, 10:49
da hashbang
Salve a tutti,
vorrei chiedervi un consiglio riguardo lo script di inizializzazione rc.inet1. in breve a volte quando effettuo il boot lo script parte ma va in timed out. Questo comporta che quando mi loggo e vado su internet mi esce l'errore relativo alla mancanza di connessione. Il problema si risolve dopo una ventina di secondi. Nonostante questo problema compaia su KDE non ho mai avuto problemi in quanto la durata del caricamento del desktop mi permetteva di accedere tranquillamente su internet. Ma visto che uso FluxBox (però succedeva anche con XFCE) i tempi di caricamento sono irrisori e pertanto mi trovo in questa situazione. Ho notato però che su ArchLinux questo non succede nonostante sia persino più veloce (e a volte quando parte lo script del networking la connessione ADSL non è pronta, ma rimane su BUSY e quando la ADSL ha finito di caricare lo completa). Pertanto su Arch io ho la connessione totalmente funzionante già alla primo login in modo immediato.

Avete qualche idea per risolvere questo "scomodo" inconveniente?

Re: Script networking

Inviato: dom 10 ott 2010, 12:55
da sardylan
A che cosa è dovuto questo ritardo??? Usi un router con la connessione nattata, e quindi è causato dal DHCP, oppure usi un modem ed avvii una connessione PPPoE nel computer?

Re: Script networking

Inviato: dom 10 ott 2010, 14:15
da hashbang
sardylan ha scritto:A che cosa è dovuto questo ritardo??? Usi un router con la connessione nattata, e quindi è causato dal DHCP, oppure usi un modem ed avvii una connessione PPPoE nel computer?
Un router con DHCP.

Re: Script networking

Inviato: dom 10 ott 2010, 19:17
da sardylan
Allora potrebbe essere proprio un problema del demone dhcpcd... Prova da shell a fare a mano dei test usando dhcpcd e dhclient... Vedi quale dei due è più veloce...
La Slackware utilizza dhcpcd. Forse ArchLinux usa dhclient...

Re: Script networking

Inviato: dom 10 ott 2010, 19:51
da targzeta
Potresti pensare di usare un indirizzo IP statico con il router, così non usi DHCP e fai in un attimo...se il problema è quello.
Devi capire se il problema è da te al router o dal router alla rete, mi sembra strano che un qualsiasi client DHCP ci metta così tanto per avere le informazioni di rete.

Emanuele

Re: Script networking

Inviato: lun 11 ott 2010, 1:36
da sardylan
Vabbe... Dipende anche dal router spina... Per esempio in facoltà con la rete universitaria il DHCP ci mette anche 30 secondi per ottenere un IP... A volte è davvero lento...
Ma li ci sono discorsi di server vari, giri assurdi di traffico e quant'altro...
Per un router domestico non c'è niente da fare di particolare, e dovrebbe darlo in fretta..

Re: Script networking

Inviato: lun 11 ott 2010, 5:42
da targzeta
Certo certo, hai ragione. Davo per scontato che si trattasse di una rete domestica, visto che ha detto: '...la connessione ADSL non è pronta, ma rimane su BUSY e quando la ADSL ha finito di caricare lo completa'.

Ma effettivamente potrei sbagliarmi,
Emanuele

Re: Script networking

Inviato: lun 11 ott 2010, 8:37
da hashbang
sardylan ha scritto:Allora potrebbe essere proprio un problema del demone dhcpcd... Prova da shell a fare a mano dei test usando dhcpcd e dhclient... Vedi quale dei due è più veloce...
La Slackware utilizza dhcpcd. Forse ArchLinux usa dhclient...
Sembra che anche ArchLinux usi dhcpcd. Lo script del networking di Arch comunque è questo (/etc/rc.d/network)

Codice: Seleziona tutto

#!/bin/bash

. /etc/rc.conf
. /etc/rc.d/functions

# wireless settings
[ -f /etc/conf.d/wireless ] && . /etc/conf.d/wireless
# ethernet bonding settings
[ -f /etc/conf.d/bonding ] && . /etc/conf.d/bonding
# bridge settings
[ -f /etc/conf.d/bridges ] && . /etc/conf.d/bridges
# dhcpcd settings
[ -f /etc/conf.d/dhcpcd ] && . /etc/conf.d/dhcpcd

ifup()
{
	if [ "$1" = "" ]; then
		echo "usage: $0 ifup <interface_name>"
		return 1
	fi

	eval ifcfg="\$${1}"

	# Get the name of the interface from the first token in the string

	if [ "$ifcfg" = "dhcp" ]; then
		ifname="$1"
	else
		ifname=${ifcfg%% *}
	fi

	/sbin/ifconfig $ifname up

	wi_up $1 || return 1

	if [ "$ifcfg" = "dhcp" ]; then
		# remove the .pid file if it exists
		/bin/rm -f /var/run/dhcpcd-${1}.pid >/dev/null 2>&1
		/bin/rm -f /var/run/dhcpcd-${1}.cache >/dev/null 2>&1
		/sbin/dhcpcd $DHCPCD_ARGS ${1}
	else
		/sbin/ifconfig $ifcfg
	fi
	return $?
}

wi_up()
{
	eval iwcfg="\$wlan_${1}"
	[ "$iwcfg" = "" ] && return 0

	/usr/sbin/iwconfig $iwcfg
	[[ -z "$WIRELESS_TIMEOUT" ]] && WIRELESS_TIMEOUT=2
	sleep $WIRELESS_TIMEOUT

	bssid=`iwgetid $1 -ra`
	if [[ "$bssid" = "00:00:00:00:00:00" ]]; then
		printhl "Could not associate $1 - try increasing WIRELESS_TIMEOUT and check network is WEP or has no security"
		return 1
	fi
	return 0
}

ifdown()
{
	if [ "$1" = "" ]; then
		echo "usage: $0 ifdown <interface_name>"
		return 1
	fi
	eval ifcfg="\$${1}"
	if [ "$ifcfg" = "dhcp" ]; then
		if [ -f /var/run/dhcpcd-${1}.pid ]; then
			/bin/kill $(cat /var/run/dhcpcd-${1}.pid)
		fi
	fi
	# Always bring the interface itself down
	/sbin/ifconfig ${1} down >/dev/null 2>&1
	return $?
}

iflist()
{
	for ifline in ${INTERFACES[@]}; do
		if [ "$ifline" = "${ifline#!}" ]; then
			printf " $ifline:\t"
		else
			printf "$ifline:\t"
		fi
		eval real_ifline=\$${ifline#!}
		echo $real_ifline
	done
}

rtup()
{
	if [ "$1" = "" ]; then
		echo "usage: $0 rtup <route_name>"
		return 1
	fi
	eval routecfg="\$${1}"
	if grep -q :: <<< $routecfg; then
			/sbin/route -A inet6 add $routecfg
	else
			/sbin/route add $routecfg
	fi
	return $?
}

rtdown()
{
	if [ "$1" = "" ]; then
		echo "usage: $0 rtdown <route_name>"
		return 1
	fi
	eval routecfg="\$${1}"
	if grep -q :: <<< $routecfg; then
			/sbin/route -A inet6 del $routecfg
	else
			/sbin/route del $routecfg
	fi
	return $?
}

rtlist()
{
	for rtline in ${ROUTES[@]}; do
		if [ "$rtline" = "${rtline#!}" ]; then
			printf " $rtline:\t"
		else
			printf "$rtline:\t"
		fi
		eval real_rtline=\$${rtline#!}
		echo $real_rtline
	done
}

bond_up()
{
	for ifline in ${BOND_INTERFACES[@]}; do
		if [ "$ifline" = "${ifline#!}" ]; then
			eval bondcfg="\$bond_${ifline}"
			if [ -n "${bondcfg}" ]; then
				/sbin/ifenslave $ifline $bondcfg || error=1
			fi
		fi
	done
}

bond_down()
{
	for ifline in ${BOND_INTERFACES[@]}; do
		if [ "$ifline" = "${ifline#!}" ]; then
			eval bondcfg="\$bond_${ifline}"
			/sbin/ifenslave -d $ifline $bondcfg || error=1
		fi
	done
}

bridge_up()
{
	for br in ${BRIDGE_INTERFACES[@]}; do
		if [ "$br" = "${br#!}" ]; then
			# if the bridge already exists, remove it
			if [ "$(/sbin/ifconfig $br 2>/dev/null)" ]; then
				/sbin/ifconfig $br down
				/usr/sbin/brctl delbr $br
			fi
			/usr/sbin/brctl addbr $br
			eval brifs="\$bridge_${br}"
			for brif in $brifs; do
				if [ "$brif" = "${brif#!}" ]; then
					for ifline in ${BOND_INTERFACES[@]}; do
						if [ "$brif" = "$ifline" ] && [ "$ifline" = "${ifline#!}" ]; then
							ifup $ifline
							eval bondcfg="\$bond_${ifline}"
							/sbin/ifenslave $ifline $bondcfg || error=1
							unset bond_${ifline}
						fi
					done

					/usr/sbin/brctl addif $br $brif || error=1
				fi
			done
		fi
	done
}

bridge_down()
{
	for br in ${BRIDGE_INTERFACES[@]}; do
		if [ "$br" = "${br#!}" ]; then
			/usr/sbin/brctl delbr $br
		fi
	done
}


case "$1" in
	start)
		if ! ck_daemon network; then
			echo "Network is already running.  Try 'network restart'"
			exit
		fi

		stat_busy "Starting Network"
		error=0
		# bring up bridge interfaces
		bridge_up
		# bring up ethernet interfaces
		for ifline in ${INTERFACES[@]}; do
			if [ "$ifline" = "${ifline#!}" ]; then
				ifup $ifline || error=1
			fi
		done
		# bring up bond interfaces
		bond_up
		# bring up routes
		for rtline in "${ROUTES[@]}"; do
			if [ "$rtline" = "${rtline#!}" ]; then
				rtup $rtline || error=1
			fi
		done
		if [ $error -eq 0 ]; then
			add_daemon network
			stat_done
		else
			stat_fail
		fi
		;;
	stop)
		#if ck_daemon network; then
		#	echo "Network is not running.  Try 'network start'"
		#	exit
		#fi

		if [ "${NETWORK_PERSIST}" = "yes" -o "${NETWORK_PERSIST}" = "YES" ]; then
			status "Skipping Network Shutdown" true
			exit 0
		fi

		stat_busy "Stopping Network"
		rm_daemon network
		error=0
		for rtline in "${ROUTES[@]}"; do
			if [ "$rtline" = "${rtline#!}" ]; then
				rtdown $rtline || error=1
			fi
		done
		# bring down bond interfaces
		bond_down
		for ifline in ${INTERFACES[@]}; do
			if [ "$ifline" = "${ifline#!}" ]; then
				ifdown $ifline || error=1
			fi
		done
		# bring down bridge interfaces
		bridge_down
		if [ $error -eq 0 ]; then
			stat_done
		else
			stat_fail
		fi
		;;
	restart)
		$0 stop
		/bin/sleep 2
		$0 start
		;;
	ifup|ifdown|iflist|rtup|rtdown|rtlist)
		$1 $2
		;;
	*)
		echo "usage: $0 {start|stop|restart}"  
		echo "       $0 {ifup|ifdown|iflist|rtup|rtdown|rtlist}"
esac

# vim: set ts=2 noet:

Re: Script networking

Inviato: lun 11 ott 2010, 13:05
da hashbang
sardylan ha scritto:A volte è davvero lento...
come nel mio caso. A volte va bene e configura il tutto a primo colpo (solitamente in fase di riavvio). Comunque ho notato che questo difetto lo fa di rado col kernel huge e sempre col kernel custom da me compilato. Sicuramente succede in quanto il custom è molto più leggero e quindi più velocemente caricato al boot. Essendo più veloce arriva subito al demone dhcpcd quando l'ADSL non è ancora pronta e, a differenza di Arch, non rimane in attesa. Si potrebbe modificare lo script rc.inet1 per allungare il tempo di attesa prima del timeout?

Re: Script networking

Inviato: lun 11 ott 2010, 13:13
da Ansa89
atomix600 ha scritto:Sicuramente succede in quanto il custom è molto più leggero e quindi più velocemente caricato al boot.
Lo trovo improbabile :roll: .

atomix600 ha scritto:Si potrebbe modificare lo script rc.inet1 per allungare il tempo di attesa prima del timeout?
Devi usare il file di configurazione "/etc/rc.d/rc.inet1.conf":

Codice: Seleziona tutto

...
DHCP_TIMEOUT[0]=15
...
Il valore è in secondi e devi cambiare "0" con l'indice del tuo device.

Re: Script networking

Inviato: mar 12 ott 2010, 13:14
da hashbang
Ansa89 ha scritto:Devi usare il file di configurazione "/etc/rc.d/rc.inet1.conf":

Codice: Seleziona tutto

...
DHCP_TIMEOUT[0]=15
...
Il valore è in secondi e devi cambiare "0" con l'indice del tuo device.
Ansa sicuro che sia nel file rc.inet1.conf? io DHCP_TIMEOUT l'ho trovato nello script rc.inet1 ma non nel file di configurazione :-k

Re: Script networking

Inviato: mar 12 ott 2010, 13:45
da notsafe
atomix600 ha scritto:
Ansa89 ha scritto:Devi usare il file di configurazione "/etc/rc.d/rc.inet1.conf":

Codice: Seleziona tutto

...
DHCP_TIMEOUT[0]=15
...
Il valore è in secondi e devi cambiare "0" con l'indice del tuo device.
Ansa sicuro che sia nel file rc.inet1.conf? io DHCP_TIMEOUT l'ho trovato nello script rc.inet1 ma non nel file di configurazione :-k

http://connie.slackware.com/~alien/rc_s ... inet1.conf

Codice: Seleziona tutto

#DHCP_TIMEOUT[4]=15             # The default timeout for the DHCP client to
                                # wait for server resonse is 30 seconds, but
                                # you might want a shorter wait.

Re: Script networking

Inviato: mar 12 ott 2010, 14:20
da Ansa89
atomix600 ha scritto:Ansa sicuro che sia nel file rc.inet1.conf? io DHCP_TIMEOUT l'ho trovato nello script rc.inet1 ma non nel file di configurazione :-k
A parte il link di notsafe, prova un "grep -n DHCP_TIMEOUT /etc/rc.d/rc.inet1.conf".

Re: Script networking

Inviato: mar 12 ott 2010, 16:07
da hashbang
sorry, trovato....dalle mie parti si dice in questi casi: se vai a mare non trovi neanche l'acqua salata.... :banghead:

comunque al DHCP_TIMEOUT ho impostato 60 secondi e sembra non dare problemi

Re: Script networking

Inviato: mar 12 ott 2010, 16:12
da Ansa89
Secondo me possono essere abbastanza anche 40-50 secondi.
Comunque con 60 dovrebbe funzionare in tutti i casi (se in un minuto il computer non è in grado di ricevere un indirizzo ip, probabilmente il problema è altrove).