Πώς να επανεκκινήσετε με επιτυχία ένα δίκτυο χωρίς επανεκκίνηση μέσω SSH;

Στο Ubuntu 14.04 ούτε το sudo service networking restart ούτε το sudo /etc/init.d/networking restart κάνουν τίποτα πια. Επίσης, και οι δύο τερματίζουν με τον κωδικό 1. Κάτι έχει προφανώς αλλάξει (ή έχει αλλάξει κατά το ήμισυ), αλλά δεν μπορώ να βρω τι. Αυτό προφανώς προκαλεί προβλήματα με την απομακρυσμένη αναδιαμόρφωση του δικτύου και εργαλεία όπως το Ansible.

$ sudo bash -x /usr/sbin/service networking restart
[sudo] password for wirehive:
++ basename /usr/sbin/service
+ VERSION='service ver. 0.91-ubuntu1'
++ basename /usr/sbin/service
+ USAGE='Usage: service < option > | --status-all | [ service_name [ command | --full-restart ] ]'
+ SERVICE=
+ ACTION=
+ SERVICEDIR=/etc/init.d
+ OPTIONS=
+ '[' 2 -eq 0 ']'
+ cd /
+ '[' 2 -gt 0 ']'
+ case "${1}" in
+ '[' -z '' -a 2 -eq 1 -a networking = --status-all ']'
+ '[' 2 -eq 2 -a restart = --full-restart ']'
+ '[' -z '' ']'
+ SERVICE=networking
+ shift
+ '[' 1 -gt 0 ']'
+ case "${1}" in
+ '[' -z networking -a 1 -eq 1 -a restart = --status-all ']'
+ '[' 1 -eq 2 -a '' = --full-restart ']'
+ '[' -z networking ']'
+ '[' -z '' ']'
+ ACTION=restart
+ shift
+ '[' 0 -gt 0 ']'
+ '[' -r /etc/init/networking.conf ']'
+ which initctl
+ grep -q upstart
+ initctl version
+ case "${ACTION}" in
+ stop networking
stop: Job failed while stopping
+ :
+ exec start networking
start: Job is already running: networking

Ποιος είναι ο σωστός τρόπος για την επανεκκίνηση της δικτύωσης στον Ubuntu 14.04 Server από απόσταση;

Λύση

Αποδεικνύεται ότι αυτό είναι ένα "χαρακτηριστικό". Ο μόνος υποστηριζόμενος τρόπος επανεκκίνησης μιας διασύνδεσης στο Ubuntu Server είναι sudo ifdown eth0 &&& sudo ifup eth0

https://bugs.launchpad.net/ubuntu/+source/ifupdown/+bug/1301015

Σχόλια (7)

Αυτό που άλλαξε είναι ότι δεν θέλουν να κάνετε "bouncing" το δίκτυο πια.Το σταμάτημα και η εκκίνηση εξακολουθούν να λειτουργούν.Η επανεκκίνηση δεν λειτουργεί πλέον. Μόλις "έλυσα" αυτό το "πρόβλημα", δηλαδή πήρα πίσω την παλιά συμπεριφορά. Για να επιστρέψω στην προηγούμενη συμπεριφορά: Πάρτε ένα αρχείο 13.10 /etc/init/networking.conf και αντικαταστήστε το αρχείο 14.04 με αυτό. (επεξεργασία: διευκρινίστηκε ποιο αντικαθιστά ποιο)

Η διαδικασία μοιάζει ως εξής:

(Just before this, I configured my /etc/network/interfaces for eth1 on a 192.168.117.x address)

"/etc/network/interfaces" 16L, 413C written  
root@1404-Anode:~# service networking restart  
stop: Job failed while stopping  
start: Job is already running: networking  
root@1404-Anode:~# echo "hmm, wth?"
hmm, wth?
root@1404-Anode:~# ifconfig  
eth0      Link encap:Ethernet  HWaddr 00:0c:29:d6:a8:19  
          inet addr:192.168.115.105  Bcast:192.168.115.255  Mask:255.255.255.0  
          inet6 addr: 2002:4077:9050:1234:a08c:29c1:ce9b:a57b/64 Scope:Global  
          inet6 addr: fe80::20c:29ff:fed6:a819/64 Scope:Link  
          inet6 addr: 2002:4077:9050:1234:20c:29ff:fed6:a819/64 Scope:Global  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:646 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:531 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:1000  
          RX bytes:58748 (58.7 KB)  TX bytes:75465 (75.4 KB)  
(lo removed here)  
root@1404-Anode:~# cd /etc/init
root@1404-Anode:/etc/init# diff networking.conf.1310 networking.conf.1404  
13c13  
<       and (stopped udevtrigger or container)) or runlevel [2345]  
---  
>     and (stopped udevtrigger or container)) or runlevel [2345] or stopped  networking   >RESULT=failed PROCESS=post-stop EXIT_STATUS=100  
16a17,20  
>     if [ "$UPSTART_EVENTS" = "stopped" ] && [ "$UPSTART_JOB" = "networking" ] && [ "$EXIT_STATUS" = "100" ]; then  
>         exit 0  
>     fi  
>  
21a26,31  
>     if [ -z "$UPSTART_STOP_EVENTS" ]; then  
>        echo "Stopping or restarting the networking job is not supported."  
>         echo "Use ifdown & ifup to reconfigure desired interface."  
>         exit 100  
>     fi  
root@1404-Anode:/etc/init#  

Κάντε το ίδιο για το σενάριο /etc/init.d/networking, το οποίο είναι αυτό που αναφέρεται/καλεί το αρχείο /etc/init/networking.conf.

root@1404-Anode:/etc/init# cp networking.conf.1310 networking.conf  
root@1404-Anode:/etc/init# cd ../init.d  
root@1404-Anode:/etc/init.d# diff networking.1404 networking.1310  
15d14  
< STATEDIR="$RUN_DIR/state"
21a21,27
> # Make sure that it's clear to the user that they shouldn't use this
> # script under upstart
> if init_is_upstart; then
>       echo "ERROR: Calling a sysvinit script on a system using upstart isn't supported. Please use the 'service' command instead."  
>       exit 1
> fi
>
52,54d57
<       if ! chown root:netdev "$RUN_DIR" ; then
<           log_warning_msg "can't chown $RUN_DIR"
<       fi
160,162d162
<       if init_is_upstart; then
<               exit 1
<       fi
166c166
<       state=$(ifquery --state)
---
>       state=$(cat /run/network/ifstate)
root@1404-Anode:/etc/init.d# cp networking.1310 networking
root@1404-Anode:/etc/init.d# service networking restart
networking stop/waiting
networking start/running
root@1404-Anode:/etc/init.d# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:d6:a8:19
          inet addr:192.168.115.105  Bcast:192.168.115.255  Mask:255.255.255.0
          inet6 addr: 2002:4077:9050:1234:a08c:29c1:ce9b:a57b/64 Scope:Global
          inet6 addr: fe80::20c:29ff:fed6:a819/64 Scope:Link
          inet6 addr: 2002:4077:9050:1234:20c:29ff:fed6:a819/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3398 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2545 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:318654 (318.6 KB)  TX bytes:418804 (418.8 KB)

eth1      Link encap:Ethernet  HWaddr 00:0c:29:d6:a8:23
          inet addr:192.168.117.105  Bcast:192.168.117.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fed6:a823/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:98 errors:0 dropped:58 overruns:0 frame:0
          TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:20055 (20.0 KB)  TX bytes:1226 (1.2 KB)
(lo removed)
root@1404-Anode:/etc/init.d# echo "hah, it works! *8^)"
Hah, it works! *8^)
root@1404-Anode:/etc/init.d#

(note: the steps where I scp'd the 1310 versions into the 1404 system are omitted for brevity). 

Προφανώς υπάρχει'ένας λόγος που έβαλαν μια αμυντική έξοδο εκεί, αλλά δεν'μπαίνουν στον κόπο να εξάγουν πραγματικά τι'συμβαίνει πολύ καλά.

Μια καταχώρηση πηγαίνει στο /var/log/upstart/networking.log όταν προσπαθείτε, που μοιάζει με:

Stopping or restarting the networking job is not supported.  
Use ifdown & ifup to reconfigure desired interface.  

Αλλά πραγματικά θα μπορούσαν/πρέπει να έχουν βγάλει αυτό ως μήνυμα διαλόγου όταν προσπαθείτε να κάνετε επανεκκίνηση της υπηρεσίας networking. αχ καλά. το βρήκαμε και μάλιστα με έναν παλιό τρόπο να το παρακάμψουμε.

EDIT: Διαπίστωσα ότι αυτό προκαλεί μια ακούσια ενεργοποίηση του script που ελέγχεται από το /etc/init/failsafe.conf το οποίο είναι ανεπιθύμητο καθώς προκαλεί μια καθυστέρηση 120 δευτερολέπτων timeout σε κάθε εκκίνηση... καθώς και ίσως να καλύπτει πραγματικές λανθασμένες ρυθμίσεις/προβλήματα δικτύου τα οποία αυτή η καθυστέρηση'η εμφάνιση θα υποδείκνυε, αλλά ήδη εμφανίζεται συνέχεια. (π.χ. Ένα αποσυνδεδεμένο καλώδιο, το οποίο επέτρεπε την πρόσβαση σε ένα κοινόχρηστο αρχείο δικτύου που αντιστοιχίζεται στο /etc/fstab, για παράδειγμα)

Σε κάθε περίπτωση, θα βρω τι προκαλεί αυτό το συνεχές χτύπημα του timeout και θα δημοσιεύσω μια λύση όταν τη βρω.

Σχόλια (4)

Σε σχέση με την απάντηση του kvm-user420's, έχω προχωρήσει και έχω ρυθμίσει ένα σενάριο για να αντικαταστήσω τα σενάρια δικτύωσης του Ubuntu 14.04's με αυτά του Ubuntu 13.10

Μπορείτε να το βρείτε εδώ: https://github.com/metral/restore_networking

Καλή διασκέδαση!

Σχόλια (1)