দূষিত ফাইলগুলির সাথে (এবং পুনরায় ইনস্টল) প্যাকেজগুলি সন্ধান করুন (কিছু না ভেঙে)


35

আমি সাধারণত স্ক্র্যাচ থেকে পুনরায় ইনস্টল করার চেয়ে একটি লিনাক্স সিস্টেম ঠিক করতে পছন্দ করি। আমার কম্পিউটারগুলি অনেকগুলি বিতরণ আপগ্রেড এবং পিপিএ বা তৃতীয় পক্ষের সংগ্রহস্থলের একটি তালিকা দেখেছে। এপিটি সাধারণত নিশ্চিত করে যে শেষ পর্যন্ত সবকিছু কাজ করে। যাইহোক, প্যাকেজ পরিচালক যে সমস্ত প্রয়োজনীয় প্যাকেজগুলি 'ইনস্টলড' রয়েছে বলে মনে করে তা সমস্ত ফাইল ফাইল সিস্টেমে উপস্থিত থাকার নিশ্চয়তা দেয় না।

আপনার যদি আশেপাশের নির্ভরতা সমস্যার সাথে কাজ করতে হয় তবে এমন পরিস্থিতি দেখা দিতে পারে dpkg --force-*/usrরুট হিসাবে কোনও ফাইল মুছে ফেলাতেও কেউ এ জাতীয় পরিস্থিতির পুনরুত্পাদন করতে পারে ।

কোনও ইনস্টলড প্যাকেজভুক্ত সমস্ত ফাইল উপস্থিত কিনা তা যাচাই করার কোনও সহজ উপায় আছে?

যদি এই জাতীয় সমস্যা প্যাকেজ পাওয়া যায়, aptitude reinstallতবে সমস্যাটি ঠিক করে।

উত্তর:


47

থেকে debsumsমানুষ পৃষ্ঠা:

apt-get install --reinstall $(dpkg -S $(debsums -c) | cut -d : -f 1 | sort -u)
       Reinstalls packages with changed files.

আমি কেবল এটি আমার সিস্টেমে চালিয়েছি কারণ আমি একটি বিটা ওএস নিয়ে পরীক্ষা করার সময় ডিস্ক সামগ্রীটি এলোমেলোভাবে দূষিত হয়েছিল। আমি যা করেছি তা এখানে (এবং এটি ভালভাবে কাজ করেছে বলে মনে হচ্ছে):

প্রথমে, আমি 'ডেবসাম' ইনস্টল করেছি এবং আমার সিস্টেমে আমার কোনও দুর্নীতিগ্রস্থ ফাইল রয়েছে কিনা তা দেখার জন্য এটি চালিয়েছি:

$ sudo apt-get install debsums
$ sudo debsums_init
$ sudo debsums -cs
/usr/share/bash-completion/completions/ssh
/usr/share/icons/hicolor/scalable/actions/cheese-take-photo.svg
/usr/share/gnome/help/gnumeric/C/files-textopen.xml
/usr/share/dbus-1/services/indicator-sound.service
/lib/modules/3.11.0-12-generic/kernel/drivers/mtd/ubi/ubi.ko

আপনি দেখতে পাচ্ছেন, আমার কাছে পাঁচটি দূষিত ফাইল রয়েছে সুতরাং সেগুলি পুনরায় ইনস্টল করা দরকার। কোন প্যাকেজগুলিতে দূষিত ফাইল রয়েছে তা আমি এইভাবে পেয়েছি:

$ sudo debsums -c | xargs -rd '\n' -- dpkg -S | cut -d : -f 1 | sort -u
bash-completion
cheese-common
gnumeric-doc
indicator-sound
linux-image-extra-3.11.0-12-generic

তারপরে আমি ক্ষতিগ্রস্থ প্যাকেজগুলি পুনরায় ইনস্টল করে দুর্নীতিটি মেরামত করেছি:

$ xargs -rd '\n' -a <(sudo debsums -c | xargs -rd '\n' -- dpkg -S | cut -d : -f 1 | sort -u) -- sudo apt-get install -f --reinstall --
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following package was automatically installed and is no longer required:
  linux-image-generic
Use 'apt-get autoremove' to remove it.
0 upgraded, 0 newly installed, 5 reinstalled, 0 to remove and 0 not upgraded.
Need to get 43.9 MB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com/ubuntu/ saucy/main bash-completion all 1:2.0-1ubuntu3 [173 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu/ saucy/main cheese-common all 3.8.3-0ubuntu1 [2,929 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu/ saucy/universe gnumeric-doc all 1.12.6-1 [7,295 kB]     
Get:4 http://us.archive.ubuntu.com/ubuntu/ saucy/main linux-image-extra-3.11.0-12-generic i386 3.11.0-12.19 [33.5 MB]
Get:5 http://us.archive.ubuntu.com/ubuntu/ saucy/main indicator-sound i386 12.10.2+13.10.20131011-0ubuntu1 [55.7 kB]
Fetched 43.9 MB in 10min 23s (70.4 kB/s)                                                           
(Reading database ... 174913 files and directories currently installed.)
Preparing to replace bash-completion 1:2.0-1ubuntu3 (using .../bash-completion_1%3a2.0-1ubuntu3_all.deb) ...
Unpacking replacement bash-completion ...
Preparing to replace cheese-common 3.8.3-0ubuntu1 (using .../cheese-common_3.8.3-0ubuntu1_all.deb) ...
Unpacking replacement cheese-common ...
Preparing to replace gnumeric-doc 1.12.6-1 (using .../gnumeric-doc_1.12.6-1_all.deb) ...
Unpacking replacement gnumeric-doc ...
Preparing to replace linux-image-extra-3.11.0-12-generic 3.11.0-12.19 (using .../linux-image-extra-3.11.0-12-generic_3.11.0-12.19_i386.deb) ...
Unpacking replacement linux-image-extra-3.11.0-12-generic ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.11.0-12-generic /boot/vmlinuz-3.11.0-12-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.11.0-12-generic /boot/vmlinuz-3.11.0-12-generic
Preparing to replace indicator-sound 12.10.2+13.10.20131011-0ubuntu1 (using .../indicator-sound_12.10.2+13.10.20131011-0ubuntu1_i386.deb) ...
Unpacking replacement indicator-sound ...
Processing triggers for man-db ...
Processing triggers for libglib2.0-0:i386 ...
No such key 'auto-launch' in schema 'com.ubuntu.update-notifier' as specified in override file '/usr/share/glib-2.0/schemas/20_xubuntu-default-settings.gschema.override'; ignoring override for this key.
Processing triggers for hicolor-icon-theme ...
Setting up bash-completion (1:2.0-1ubuntu3) ...
Setting up cheese-common (3.8.3-0ubuntu1) ...
Setting up gnumeric-doc (1.12.6-1) ...
Setting up linux-image-extra-3.11.0-12-generic (3.11.0-12.19) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
Not updating initrd symbolic links since we are being updated/reinstalled 
(3.11.0-12.19 was configured last, according to dpkg)
Not updating image symbolic links since we are being updated/reinstalled 
(3.11.0-12.19 was configured last, according to dpkg)
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.11.0-12-generic /boot/vmlinuz-3.11.0-12-generic
run-parts: executing /etc/kernel/postinst.d/dkms 3.11.0-12-generic /boot/vmlinuz-3.11.0-12-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.11.0-12-generic /boot/vmlinuz-3.11.0-12-generic
update-initramfs: Generating /boot/initrd.img-3.11.0-12-generic
run-parts: executing /etc/kernel/postinst.d/pm-utils 3.11.0-12-generic /boot/vmlinuz-3.11.0-12-generic
run-parts: executing /etc/kernel/postinst.d/update-notifier 3.11.0-12-generic /boot/vmlinuz-3.11.0-12-generic
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 3.11.0-12-generic /boot/vmlinuz-3.11.0-12-generic
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.11.0-14-generic
Found initrd image: /boot/initrd.img-3.11.0-14-generic
Found linux image: /boot/vmlinuz-3.11.0-12-generic
Found initrd image: /boot/initrd.img-3.11.0-12-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows 7 (loader) on /dev/sda1
done
Setting up indicator-sound (12.10.2+13.10.20131011-0ubuntu1) ...

অবশেষে, কোনও দুর্নীতিগ্রস্থ ফাইল যাতে না থাকে তা নিশ্চিত করার জন্য আমি পরীক্ষা করেছিলাম:

$ sudo debsums -c

এই কমান্ড থেকে কোনও আউটপুট পাওয়া যায়নি যার অর্থ কোনও ত্রুটি পাওয়া যায় নি। :-)

একটি চূড়ান্ত নোট: আপনার প্যাকেজগুলির কনফিগারেশন ফাইলগুলি ঠিক আছে কিনা তা পরীক্ষা করার জন্য আপনারও পরীক্ষা করা উচিত। এটি আরও কঠিন হতে পারে কারণ কনফিগারেশন ফাইলগুলি প্রায়শই পরিবর্তিত হয় এবং পরিবর্তনগুলি বৈধ হয়, সুতরাং এটি পরিবর্তিত কিনা তা নির্ধারণ করার জন্য আপনার প্রতিটি পরিবর্তিত কনফিগার ফাইলটি ম্যানুয়ালি পরীক্ষা করতে হবে। এইভাবে আপনি পরিবর্তিত কনফিগার ফাইলগুলির একটি তালিকা পাবেন:

$ sudo debsums -as
debsums: changed file /etc/gnome/defaults.list (from desktop-file-utils package)
debsums: changed file /etc/default/rcS (from initscripts package)
debsums: changed file /etc/subuid (from login package)
debsums: changed file /etc/subgid (from login package)
debsums: changed file /etc/sudoers (from sudo package)

আমি কেবল ফাইলগুলি কলুষিত করেছি না, ফাইলগুলিও হারিয়েছি। যখন আমি অ্যাপটি-গেটের সাথে পুনরায় ইনস্টল করার চেষ্টা করি তখন এটি বাতিল হয়ে যায় কারণ dpkg ত্রুটি দেয় যে কোনও ফাইল অনুপস্থিত (ফেসপাল)। অ্যাপটি-গেট রিমুভ একই, ত্রুটি কারণ ফাইল অনুপস্থিত।
মার্ক জেরোনিমাস

আপনার যদি ১ এর বেশি থাকে তবে এটি অনুপস্থিত ফাইলের জন্যও কাজ করে। debsums -c | grep -P -o '/.*?\s' | xargs dpkg -S | cut -d : -f 1 | xargs apt-get install --reinstall
মাইকাইটাউন 2

11

পেনিওয়াইজের দেওয়া স্ক্রিপ্টটি দূষিত ফাইলগুলির জন্য দুর্দান্ত কাজ করে, তবে নিখোঁজ হওয়া ফাইলগুলির সাথে প্যাকেজগুলির যত্ন নেয় না, কারণ ডাবসামস তাদের স্ট্যাডারকে রিপোর্ট করে। অনুপস্থিত ফাইলগুলি সহ প্যাকেজগুলি পুনরায় ইনস্টল করতে, এটি আমার পক্ষে কাজ করেছে:

xargs -rd '\n' -a <(sudo debsums -c 2>&1 | cut -d " " -f 4 | sort -u | xargs -rd '\n' -- dpkg -S | cut -d : -f 1 | sort -u) -- sudo apt-get install -f --reinstall --

3

প্রশ্নের উত্তর অন্যত্র দেওয়া হয়েছে:

উবুন্টু স্যানিটি চেক আছে কি?: প্যাকেজ ডাবসামগুলি এমডি 5 হ্যাশগুলি গণনা করতে পারে এবং ডেব প্যাকেজের তুলনায় তুলনা করতে পারে।

প্যাকেজ পরিচালকের মাধ্যমে পুনরায় ইনস্টল করার কোনও নিরাপদ উপায় আছে : হ্যাঁ, তবে প্রস্তাবিত নয়।


যদি আপনার উত্তরটি মূলত অন্য প্রশ্নের রেফারেল হয় তবে এই প্রশ্নটিকে অন্যটির সদৃশ হিসাবে পতাকাঙ্কিত করা ভাল । আপনি যে উত্তরটি পেয়েছেন সেটির পক্ষে ভোট দিতে ভুলবেন না!
মেলিবিয়াস

-1

কিছু বাশ স্ক্রিপ্টিংয়ের সাথে ডিপি কেজি প্রোগ্রাম ব্যবহার করা আপনার পক্ষে এটি সক্ষম হয়ে ওঠে। যদি কেবলমাত্র কেউ "দূষিত" ফাইলগুলির সাথে ফাইলগুলির "ক্লিন" সংস্করণগুলি প্রতিস্থাপন করে তবেই কেবলমাত্র সতর্কতা হবে। তার জন্য আপনাকে একটি প্রাথমিক প্যাকেজ থেকে বৈধ MD5 চেকসামগুলি নেওয়া দরকার। যাইহোক, আপনি যা চান তা অর্জনের জন্য এখানে শেল কোড রয়েছে:

#!/bin/sh
PACKAGE_NAME="xterm"
for i in `sudo dpkg -L ${PACKAGE_NAME}`
do
    if ! [ -e $i ]; then
            echo "$i is a missing file in the $PACKAGE_NAME package."
    fi
done

স্ক্রিপ্টটি কেবল তখনই মুদ্রণ করতে পারে যদি প্যাকেজে সংজ্ঞায়িত কোনও ফাইল বা ডিরেক্টরি অনুপস্থিত থাকে। এছাড়াও আপনি যে প্যাকেজটি পরিদর্শন করতে চান তার সাথে 'প্যাকাগ্যাগ্যা' ভেরিয়েবলটি প্রতিস্থাপন করতে হবে। আশাকরি এটা সাহায্য করবে.


1
আমি নিশ্চিত নই যে এটি সব ক্ষেত্রে কার্যকর হবে কিনা। dpkg -Lঠিক কি তালিকা আছে? অন্যত্র উত্তর হিসাবে debsums একটি ভাল বিকল্প বলে মনে হচ্ছে।
জানুয়ারি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.