Saya telah menghapus beberapa file di sekitar /var/lib/dpkg/
, yaitu:
/var/lib/dpkg/status
/var/lib/dpkg/available
/var/lib/dpkg/info/*
Saya mengerti Debian menggunakan file-file ini untuk menyimpan beberapa informasi tentang paket yang diinstal. Sekarang ketika saya melakukannya apt-get update
, saya mendapatkan kesalahan berikut:
Reading package lists... Error!
E: Could not open file /var/lib/dpkg/status - open
(2: No such file or directory)
E: The package lists or status file could not be parsed or opened.
Seperti yang saya pahami tentang FHS , file-file yang terletak di /var
tidak seharusnya menjadi sistem-kritis. Penilai ini harus berupa file sementara, log, cache, dan sejenisnya.
Apakah ada cara untuk membuat ulang file yang dihapus?
apt
package-management
directory-structure
dpkg
Martin Vegter
sumber
sumber
/var/lib/dpkg/info
juga cukup penting. Anda telah salah memahami FHS, dan AFAIK satu-satunya jalur pemulihan adalah (a) memulihkan dari cadangan atau (b) menginstal ulang.Jawaban:
Jika Anda melihat tujuan / var seperti yang diberikan dalam Filesystem Hierarchy Standard , ia mengatakan:
Perhatikan bahwa file "sementara dan sementara" hanyalah salah satu hal yang dikandungnya. Ini juga berisi "direktori dan file spool" dan "data administratif dan logging". Anda menghapus "data administratif" yang penting.
Selanjutnya dijelaskan mengapa
/var
ada:Itulah hal utama tentang
/var
: data di dalamnya berubah, tidak seperti/usr
(yang hanya berubah ketika Anda menambah / menghapus / memperbarui perangkat lunak).Bagian selanjutnya menjelaskan berbagai subdirektori dari
/var
; misalnya,/var/lib
(tempat file yang Anda hapus dulu tinggal) menyimpan "nyatakan informasi yang berkaitan dengan aplikasi atau sistem", yang didefinisikan sebagai "data yang diubah oleh program saat dijalankan, dan yang berkaitan dengan satu host tertentu."Anda benar - benar tidak boleh menghapus file tanpa mengetahui untuk apa file spesifik itu. Dengan file yang Anda hapus, kecuali jika Anda memiliki cadangan file-file ini, saya pikir satu-satunya yang tersisa untuk dilakukan adalah mengambil cadangan
/home
,/etc
dll. Dan menginstal ulang. Sampai Anda melakukannya, Anda tidak dapat menggunakandpkg
(dan APT, dll.). Selain itu, sistem harus terus berfungsi.sumber
apt-get update
akan membangun kembali tersedia, saya percaya. Info / barang datang dari setiap paket yang diinstal, tetapi juga mencerminkan sejarah juga, setidaknya untuk file conf lama ... tetapi Anda mungkin bisa pergi dengan menyalin dari mesin paket yang sama persis)/var/lib
Nyatakan informasi. Data persisten dimodifikasi oleh program saat dijalankan, mis. Database, metadata sistem pengemasan, dll."Anda tidak dapat "menciptakan kembali"
/var/lib/dpkg/status
dalam arti hanya menjalankan perintah dan file tersebut muncul secara ajaib. Tidak. Anda perlu menggunakan cadangan file, dan belajar untuk tidak pernah menghapus sesuatu dari/var/lib
direktori:Ini akan memberi Anda status paket sehari sebelumnya. Mulailah berdoa itu tidak merusak sesuatu yang lain.
sumber
/var/backups
, ada banyak salinan di sana./var/backups/dpkg.status.0
?File yang terletak di dalam
/var
sistem sangat kritis. Misalnya,/var/mail
atau/var/spool/mail
berisi email pengguna; Anda tidak akan lagi menghapusnya daripada menyalakan api di kotak surat tetangga Anda. Ini hanya file dalam subdirektori tertentu/var
yang berisi file-file yang lebih atau kurang fana: file log di/var/log
, cache yang biasanya dapat diciptakan dalam/var/cache
, file-file sementara (yang Anda tidak harus menghapus sementara mereka digunakan!) Di/var/tmp
.Data dalam
/var/lib
bisa sangat kritis. Misalnya, MySQL biasanya dikonfigurasikan untuk menyimpan databasenya/var/lib/mysql
secara default: jika Anda menghapusnya, Anda menghapus databasenya. Dpkg juga menempatkan basis datanya sendiri/var/lib
;/var/lib/dpkg/status
adalah satu./var/lib/dpkg/status
berisi informasi tentang paket yang diinstal. Jika Anda menghapusnya, Anda harus mengembalikannya dari cadangan. Jika cadangan Anda tidak sepenuhnya terbaru, periksa log manipulasi paket terbaru di bawah/var/log/apt
dan di/var/log/dpkg.log
. Anda harus membuat file itu sebelumdpkg
berfungsi./var/lib/dpkg/available
dibangun dari data yang diunduh dari Internet.apt-get update
harus membangunnya kembali./var/lib/dpkg/info
berisi file yang dikirimkan dengan paket Debian. Anda dapat memulihkan file-file ini hanya dengan menginstal ulang paket. Tentu saja, Anda akan memerlukan daftar paket yang diinstal untuk itu. Jika Anda telah memulihkan/var/lib/dpkg/status
, maka Anda dapat mengekstrak daftar paket dari sana.Jika Anda kehilangan
/var/lib/dpkg/status
, maka Anda mungkin dapat membuatnya kembali dengan membuat file kosong, kemudian berjalanapt-get install --reinstall
pada daftar paket. Satu tempat di mana daftar paket juga disimpan adalah/var/lib/apt/extended_states
, setidaknya jika Anda hanya pernah menggunakan APT untuk menginstal paket (bukandpkg
langsung) - gunakan file itu alih-alih/var/lib/dpkg/status
dengan perintah di atas. Jika Anda juga menghapusnya, Anda dapat membangun kembali daftar perkiraan paket$(cd /usr/share/doc && ls)
, karena sebagian besar paket membuat entri/usr/share/doc
. Mungkin ada beberapa pengecualian.Jangan meminta bantuan apa pun tentang manajemen paket pada sistem ini. Memulihkan dari penghapusan file sistem-kritis bukan ilmu pasti. Jika Anda tidak dapat memulihkan dari cadangan, Anda harus menginstal sistem baru yang bersih secepat mungkin.
sumber
The
/var/lib/dpkg/available
dapat diciptakan dari data apt. Cara termudah yang saya temukan untuk melakukan ini adalah kami menggunakandselect
dan memilih pembaruan. Saya berharap ini hanya akan berfungsi jika Anda telah memilih sebagai metode pembaruan Anda. Sepertinyadselect
melakukan:Perhatikan bahwa hal-hal mungkin telah berubah sejak Debian sarge.
Ada trik untuk membuat ulang
/var/lib/dpkg/status
berdasarkan fakta bahwa setiap paket diperlukan untuk menambahkan direktori di/usr/share/doc
direktori. Lihat posting di http://linuxmafia.com/faq/Debian/package-database-rebuild.html . Ada skrip yang disajikan yang menggunakan daftar / usr / share / doc yang difilter untuk membuat daftar paket yang diinstal, kemudian menginstal ulang semuanya.sumber
Yah saya kira Anda bisa membuat ulang file kosong dan kemudian melakukan apt-get install daftar panjang, dengan asumsi Anda tahu apa yang Anda instal pertama kali.
Saya memiliki skrip kuno yang pada dasarnya melakukan ini dari set paket terkecil yang dapat menjalankan apt-get. Ketika menggunakannya saya akhirnya melaporkan lusinan dependensi yang tidak dideklarasikan.
Jika Anda tidak tahu semua yang Anda instal, instal ulang sistem.
sumber
Di Linux Mint 17 saya mengalami masalah terdengar serupa. Saya sangat bersemangat dalam menghapus file dan menemukan diri saya di mana "Administrasi -> Upgrade Manager" tidak terlihat bahagia .......
Solusi yang berhasil bagi saya adalah membuat direktori bernama "dpkg" sesuai dengan pesan kesalahan, dan di dalamnya buat file kosong yang disebut "status".
Saya kemudian menjalankan Update Manager.
Ini bekerja untuk saya :-)
sumber
Jika Anda memiliki akun pengguna lain selain 'roo't Anda dapat mencoba apt-get dist-upgrade dari salah satunya. Apt akan mengunduh arsip tetapi tetap menginstalnya karena ada beberapa direktori yang hilang di / var /. Direktori akan ditampilkan. buat mereka dan jalankan apt-get dist-upgrade lagi. jika membuat mereka gagal dari login akun alternatif kembali ke root dan membuat direktori dari sana kemudian jalankan apt lagi. Anda akan diminta tentang konfigurasi logrotate dan beberapa konfigurasi lainnya cukup ketik Y n lanjutkan sampai akhir lalu reboot ketika apt-upgrade upgrade selesai. semuanya sekarang harus kembali normal.
sumber
Maaf atas keterlambatannya. Briam, buat kembali dir dan file secara manual dan kemudian perbarui repo (
mkdir
dantouch
, sebagaimana diminta oleh kesalahan yang ditampilkan), dan gunakandpkg --configure -a
.Sistem Anda akan berjalan dengan baik, tetapi penting untuk menginstal ulang untuk memastikan bahwa itu tidak rusak; sebelumnya hanya untuk mendapatkan waktu untuk menjadwalkan instalasi ulang ... dan mengurus penghapusan
/var/lib/*
file.sumber
Jika Anda membeli raspberry pi 3 dan Anda menghadapi masalah dan mendapatkan kesalahan "tidak dapat membuka file / var / lib / dpkg / status diuraikan atau dibuka" ini adalah solusi yang bekerja untuk saya:
Bagaimana cara membuat ulang file "/ var / lib / dpkg / status", hanya karena ini bukan file yang tidak digunakan, ini adalah file yang sangat penting yang menyimpan beberapa informasi tentang paket yang diinstal di OS raspbian Anda, jadi inilah cara saya membuat ulang file :
Lakukan wget dalam sistem Raspbian Anda:
Berikan beberapa izin:
Analisis folder dokumentasi di sistem Anda dan buat kembali file status:
Setelah selesai, unduh file dan baca dengan seksama. Ikuti langkah-langkah yang dijelaskan dalam file:
sumber
recover1.sh
akan menghancurkan arus Anda/var/lib/dpkg/status
tanpa pengujian jika sudah baik-baik saja. Kemudian ia akan menjalankan berbagai trik untuk mencoba membangun kembali versi yang berfungsi. Jangan pernah menjalankan skrip di atas kecuali Anda benar-benar kehilangan file / var / lib / dpkg / status. Kalau tidak,strings /var/lib/dpkg/status
mungkin cara yang lebih baik untuk mulai membangun kembali file yang rusak.