Saya ingin mengembalikan file /etc/
ke bentuk semula yang diinstal. Saya telah mengedit file sejak diinstal. Bagaimana saya bisa mengembalikan file konfigurasi ini? Apt cukup pintar untuk tidak menimpa file konfigurasi yang diedit, jadi bagaimana saya mengatakannya bahwa saya ingin melakukannya?
Demi argumen, katakanlah saya ingin mengembalikan file /etc/foo.conf
dari paket foo
.
configuration
apt
Ryan C. Thompson
sumber
sumber
foo
, bagaimana jikabar
tergantungfoo
dan saya tidak ingin menghapusbar
?Jawaban:
Jawaban yang diberikan oleh Ryan Thomson mengarah ke jalan yang benar. Tetap tidak akan bisa melakukan pekerjaan (Alasan detail diberikan di bawah).
Cara yang benar (dan termudah) untuk melakukannya adalah
-o
dengan menggunakanapt
untuk melewatkan opsi dpkg dan memaksadpkg
untuk bertanya kepada Anda apakah Anda ingin mempertahankan file konfigurasi yang diubah atau yang asli. Perintahnya akan seperti ini -Ini akan mengajukan pertanyaan seperti
Anda harus menekan Y atau I untuk menginstal file konfigurasi asli pengelola paket. Anda bahkan dapat menekan D untuk melihat perubahan apa atau memulai shell root dengan opsi Z untuk memperbaiki diri Anda.
Catatan: Setelah penggantian, Anda akan menemukan file yang dimodifikasi sebagai
at /etc/foo/foo.conf.dpkg-old
Mengapa opsi lain tidak berfungsi?
Karena opsi lain dalam dpkg tidak berfungsi dengan baik. Opsi yang berhubungan dengan file konfigurasi paket adalah
--force-confmiss
--force-confnew
--force-confold
--force-confdef
--force-confmiss
tidak akan berfungsi ketika versi paket tidak berubah. Dari halaman manual--force-confmiss
bekerja dengan conffiles yang hilang. Itu juga akan gagal ketika versi tidak berubah. Mengutip halaman manual--force-confold
akan mempertahankan versi yang dimodifikasi hanya jika versi tersebut diubah . Untuk paket yang sama, itu juga akan gagal. Mengutip halaman manual--force-confdef
juga akan gagal karena tindakan default adalah untuk mempertahankan file yang lebih lama (Diindikasikan dari pesan yang ditunjukkan dengan--force-confask
. Ini memiliki garis(Y/I/N/O/D/Z) [default=N]
yang berarti mempertahankan adalah default. Lihat di atas). Dan jika--force-confnew
ditentukan tetapi versi tidak berubah, itu juga tidak akan berfungsi. Mengutip halaman manualHanya
--force-confask
akan berfungsi, karena itu akan secara eksplisit mengajukan pertanyaan kepada Anda bahkan ketika versinya sama. Mengutip halaman manualSemoga itu bisa membantu.
sumber
--force-confnew
? Saya mencobaapt-get […] -y
, tetapi itu tidak berhasil. (Jika tidak memungkinkan, harap edit juga jawaban untuk mengatakannya.)--force-confnew
tanpa bertanya? Saya pikir itu adalah kasus default, yang berarti akan mempertahankan perubahan Anda.--force-confask
membuatapt
selalu mengajukan pertanyaan, jika tidak, Anda akan menggunakan opsi lain jika Anda sudah tahu jawabannya.-o Dpkg::Options::=--force-confnew
tidak berhasil (seperti jawaban Anda diprediksi) dan tidak membaca pesan kesalahan ketika saya mencoba-o Dpkg::Options::="--force-confask --force-confnew"
. Namun,apt-get --reinstall -o Dpkg::Options::=--force-confask -o Dpkg::Options::=--force-confnew install $package
dengan benar menimpa perubahan file konfigurasi$package
. Terima kasih!Jika kerusakan sudah terjadi, berikut adalah cara baris perintah untuk mendapatkan kembali versi resmi file konfigurasi. Pertama, unduh file paket (baik dengan
apt-get --download-only
seperti di bawah ini, atau dari halaman paket di packages.ubuntu.com ), kemudian ekstrak isinya di lokasi sementara. Anda kemudian dapat menyalin file ke/etc
. Pastikan untuk menghormati izin asli (sebagian besar file/etc
dimiliki oleh root dan mode 644 (yaitu kata-readable dan root-dapat ditulis), tetapi setiap pengecualian ada karena alasan penting).Perhatikan bahwa ini tidak berlaku untuk file konfigurasi yang bukan dari paket, seperti
/etc/fstab
atau/etc/passwd
. Jika Anda kehilangan ini, Anda sendirian. (Lagipula sebagian besar sangat bergantung pada sistem.)Untuk masa depan, saya sarankan menggunakan etckeeper . Instal paket dan jalankan
sudo etckeeper init
. Ini mengatur kontrol versi untuk semua file di/etc
. Anda tidak perlu melakukan hal lain untuk mengelola dllkeeper; Anda hanya perlu berinteraksi dengannya ketika ingin melakukan operasi kontrol versi, seperti merujuk ke file yang lebih lama. File secara otomatis dilakukan sebelum dan setelah setiap menjalankan apt dan setiap malam (ini dapat dikonfigurasi).Secara default, di Ubuntu, dllkeeper menggunakan Bazaar . Ubah pengaturan
/etc/etckeeper/etckeeper.conf
sebelum menjalankanetckeeper init
jika Anda lebih suka Darcs, Git atau Mercury.Dengan Bazaar, untuk kembali
/etc/foo.conf
ke versi terakhir yang berkomitmen:Jika Anda ingin kembali lebih jauh dalam waktu, gunakan
sudo bzr log foo.conf
untuk melihat riwayat file, dansudo bzr revert -r 42 foo.conf
jika Anda telah menentukan bahwa iturevno: 42
adalah revisi yang ingin Anda kembalikan.sumber
Anda dapat mengunduh paket secara manual dari paket.ubuntu.com , mengekstrak file dan mengganti versinya dengan itu.
Atau Anda bisa:
Yang kedua terasa jauh lebih brutal. Mungkin menghapus konfigurasi lain juga jika menggunakan lebih dari satu file. Yang pertama lebih banyak mengklik dan usaha tetapi tampaknya jauh lebih aman.
Untuk yang kedua, Anda mungkin bisa menghapus file dan --reinstall mungkin menggantinya. Jika demikian, itu akan lebih aman.
sumber
apt-get --reinstall purge package
tidak akan melukai tanggungan.Bergantung pada paketnya, Anda mungkin menemukan file konfigurasi default di
/usr/share/doc/foo/examples
.sumber
Gunakan Synaptic (tweak Ubuntu bahkan lebih mudah tetapi synaptic lebih lurus ke depan) dan pilih "sepenuhnya hapus paket". Ini akan menghapus semua file konfigurasi (Anda mungkin ingin membuat cadangan file-file ini!).
Kemudian pasang kembali. Kamu sudah selesai.
Dengan Ubuntu Tweak Anda mendapatkan lebih banyak opsi untuk pembersihan, rerolling, dan cadangan konfigurasi. Mungkin Anda ingin melihatnya. Ada di softwarecenter.
ps: Synaptic juga menggunakan opsi "pembersihan" (seperti disebutkan oleh Oli di atas ...) - hanya dengan GUI untuk penanganan yang lebih nyaman.
sumber
Saya akhirnya menemukan jawaban yang saya ingat samar-samar dari tahun lalu:
Argumen "confnew" memaksa dpkg untuk mengganti file config yang dimodifikasi dengan yang disediakan oleh paket, dan "confmiss" juga melakukan hal yang sama dengan file config yang telah dihapus.
Menurut chatlog ini , Anda juga dapat menggunakan opsi ini melalui apt-get dengan cara berikut:
yang menyelamatkan Anda dari kebutuhan untuk menemukan file deb sendiri.
Jelas, opsi-opsi ini berbahaya dan berpotensi melenyapkan file konfigurasi sistem yang penting jika disalahgunakan.
sumber
--force-confnew
adalah ia hanya akan menginstal file konfigurasi baru jika versinya berubah. Jika Anda menginstal ulang versi yang sama, itu tidak akan menginstal file konfigurasi baru karena saya telah mengujinya secara eksplisit--force-confmiss
hanya akan menginstal file konfigurasi baru jika versi diubah dan konfigurasi hilang. Seperti yang dijelaskan dalam halaman manualconfmiss: If a conffile is missing and the version in the package did change, always install the missing conffile without prompting. This is dangerous, since it means not preserving a change (removing) made to the file.