Saya menggunakan Huawei E3531 untuk menghubungkan Raspberry Zero yang berjalan pada vanilla Raspbian 8.0 (jessie) ke internet. Karena ini untuk aplikasi mandiri jarak jauh, ia harus dapat secara otomatis kembali online setelah pemadaman listrik.
Saya telah mengkonfigurasi usb_modeswitch untuk mengalihkan mode-USB ke cdc_ether, yang secara andal menampilkan eth0 setelah modewitch. Sayangnya usb_modeswitch dimulai setelah perangkat jaringan dikonfigurasikan, oleh karena itu jaringan-tautan tidak dibawa pada boot dingin (Ini berfungsi dengan baik pada reboot, di mana mode sudah diatur dengan benar).
Menurut https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ , dimungkinkan untuk menambahkan network-pre.target -directives ke layanan untuk menjalankannya sebelum jaringan dikonfigurasi:
network-pre.target adalah target yang dapat digunakan untuk memesan layanan sebelum antarmuka jaringan dikonfigurasi. Tujuan utamanya adalah untuk penggunaan dengan layanan firewall yang ingin membuat firewall sebelum antarmuka jaringan apa pun diaktifkan.
Ini adalah unit pasif: Anda tidak dapat memulainya secara langsung dan tidak ditarik oleh layanan manajemen jaringan, tetapi oleh layanan yang ingin dijalankan sebelumnya. [..] Layanan yang ingin dijalankan sebelum jaringan dikonfigurasikan harus menempatkan Before = network-pre.target dan atur Wants = network-pre.target untuk menariknya. Dengan cara ini, kecuali jika sebenarnya ada layanan yang perlu dipesan sebelum jaringan naik target tidak ditarik, maka menghindari titik sinkronisasi yang tidak perlu.
Saya telah memodifikasi /var/lib/systemd/system/[email protected] dan menambahkan Before- / Wants -directives sesuai:
[Unit]
Description=USB_ModeSwitch
Before=network-pre.target
Wants=network-pre.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/usb_modeswitch_dispatcher --switch-systemd %I
Environment="TMPDIR=/run"
Yang sekarang mengarah ke kesalahan "Siklus pemesanan" saat boot:
[..]
[ OK ] Started Trigger Flushing of Journal to Persistent Storage.
[ SKIP ] Ordering cycle found, skipping LSB: Raise network interfaces.
[ SKIP ] Ordering cycle found, skipping Network (Pre)
[ OK ] Created slice system-usb_modeswitch.slice.
[..]
Inilah output dari systemctl show .. :
root@raspberrypi:/lib/systemd/system# systemctl show -p Requires,Wants,Requisite,BindsTo,PartOf,Before,After usb_modeswitch@.
Requires=basic.target
Requisite=
Wants=network-pre.target system-usb_modeswitch.slice
BindsTo=
PartOf=
Before=network-pre.target shutdown.target
After=systemd-journald.socket basic.target system-usb_modeswitch.slice
root@raspberrypi:/lib/systemd/system# systemctl show -p Requires,Wants,Requisite,BindsTo,PartOf,Before,After [email protected]
Failed to get properties: Unit name [email protected] is not valid.
root@raspberrypi:/lib/systemd/system#
Saya juga bertanya-tanya mengapa acara systemctl bekerja dengan usb_modeswitch @. tetapi tidak dengan usb_modeswitch @ .service
Menghapus dua baris dalam file layanan mengembalikan perilaku lama tanpa kesalahan-SKIP.
Apakah ada cara lain untuk membuka antarmuka jaringan setelah usb_modeswitch? Apakah saya perlu mengadaptasi hal lain dalam konfigurasi systemd untuk membuat ini berfungsi?