Log kontena baharu sering berakhir dengan aduan Read-only file system tentang /proc/sys/net/ipv4/route/flush, dan baris itu dipersalahkan atas tunel yang mungkin sepenuhnya sihat. Tulisan di sebaliknya menyasarkan entri kernel yang tidak lagi melakukan apa-apa berguna setelah cache laluan IPv4 hilang. Di dalam kontena /proc/sys dilekap baca-sahaja, jadi ubah hala ditolak sebelum sebarang nilai masuk dan shell mencetak penolakan itu. Tunel yang berfungsi boleh mencetak amaran ini selagi baris lama kekal dalam skrip, dan --privileged tidak pernah menjadikan tulisan itu bermakna.

Apa yang skrip cuba flush

Skrip sambungan lama berakhir dengan pembersihan cache: tulis nilai ke fail kawalan kernel dan minta tindanan IPv4 menggugurkan cache penghalaannya, supaya laluan tunel baharu dipilih tanpa menunggu entri lapuk tamat tempoh. Fail itu dialamatkan di bawah /proc/sys/net/ipv4/, yang menjadikan operasi itu ubah hala shell dan bukan arahan penghalaan. Kernel 3.6 membuang cache itu, dan bersamanya sebab kewujudan flush. Tiada apa dalam laluan data semasa bergantung pada tulisan itu.

Entri itu sendiri bertahan sebagai fail legasi tulis-sahaja, jadi skrip yang masih menulis ke dalamnya mencapai laluan sebenar dan pemeriksaan kebenaran sebenar. Pada hos, tulisan mengembalikan kejayaan dan tidak mengubah apa-apa. Dalam kontena, ubah hala yang sama melanggar /proc/sys baca-sahaja dan gagal dengan EROFS, yang dicetak shell sebagai mesej sistem fail baca-sahaja. Pada kernel yang laluannya benar-benar tiada, perkataan menjadi No such file or directory, dan kesimpulan tidak berubah.

Kedua-dua ralat mengatakan perkara berbeza, dan perbezaannya wajar dikekalkan jelas. Read-only file system bermaksud kernel mencapai entri dan menolak tulisan; No such file or directory bermaksud entri itu telah hilang. Tiada mesej yang melaporkan tentang peranti tunel, laluan atau penyelesaian nama, jadi tiada satu pun boleh mewajarkan lebih banyak keistimewaan.

Urutan itulah yang membuat mesej kelihatan berkaitan sebab. Skrip sambungan memasang laluan, menukar keadaan antara muka dan menulis semula penyelesaian nama sebelum mencapai pembersihan di hujung, jadi baris terakhir yang dicetak ialah baris yang dipetik orang walaupun setiap langkah penting mengembalikan kejayaan. Tunel yang terbentuk dan membawa trafik sambil mencetak amaran ini sepadan tepat dengan mekanisme di atas.

Semak lekap dan laluan sebelum menambah keistimewaan

Tiga bacaan memisahkan amaran kosmetik daripada kegagalan sebenar: sama ada skrip yang dipasang masih membawa baris itu, bagaimana /proc/sys dilekap, dan ke mana trafik aplikasi sebenarnya pergi. Jalankan dalam ruang nama kontena yang sama atau pada hos tempat amaran muncul, kerana pemeriksaan pada mesin yang tidak berkaitan menjawab soalan lain.

grep -n 'ipv4/route/flush' /usr/share/vpnc-scripts/vpnc-script
findmnt -no OPTIONS /proc/sys
ip -4 route get 10.20.5.10

Jawapan grep lebih lemah daripada kelihatan, kerana penemuan membuktikan baris itu wujud, bukan bahawa ia berjalan tanpa pengawal; skrip yang diselenggara boleh membawa tulisan di dalam pengawal yang melangkaunya. findmnt -no OPTIONS /proc/sys menyelesaikan lekap secara langsung, dan ro dalam output itu bermaksud setiap tulisan di bawah titik itu ditolak, apa pun yang dilakukan skrip. Carian laluan kemudian menunjukkan sama ada destinasi yang diperlukan aplikasi diselesaikan melalui antara muka tunel atau melalui get laluan lalai kontena. Carian yang memilih get laluan lalai bermaksud tunel telah naik dan tiada apa dihalakan ke dalamnya, yang merupakan masalah penghalaan dan bukan masalah keistimewaan.

Dari mana pembetulan sebenarnya datang

Pembetulan yang diselenggara hidup dalam skrip dan bukan dalam bendera kontena. upstream vpnc-script telah mengubah cara ia mengendalikan operasi ini, jadi bandingkan salinan dalam imej dengan upstream semasa dan kemas kini melalui pakej atau binaan imej yang menyediakannya. Fail yang disunting dengan tangan dalam kontena yang berjalan tidak boleh disemak dan tidak akan bertahan pada binaan seterusnya.

--privileged didokumenkan sebagai memberikan semua keupayaan serta akses peranti yang luas, satu konsesi besar untuk mesej yang tidak mengubah apa-apa, jadi namakan keupayaan yang hilang jika benar-benar tiada. Selepas kemas kini, ulangi carian laluan dan biarkan aplikasi menggunakan tunel, kerana log yang senyap dan sambungan yang berfungsi ialah hasil yang berasingan.

Artikel berkaitan