আমি কীভাবে একটি ডেবিয়ান সিস্টেম থেকে অন্যটিতে ইনস্টল হওয়া প্যাকেজ নির্বাচনগুলি প্রতিলিপি করব? (ডেবিয়ান হুইজি)


19

আমি আমার মূল সিস্টেমে প্রয়োগের আগে আপডেটগুলি পরীক্ষা করার জন্য, ভিএম-এ স্টেজেিং পরিবেশ স্থাপন করার চেষ্টা করছি।

এটি করার জন্য, আমি ভিএম-তে ডেবিয়ান হুইজি (মূল সিস্টেমের মতোই) এর একটি বেসিক ইনস্টলেশন করেছি, তারপরে ভিএম এর মধ্যে থেকে মূল হিসাবে চলেছি:

# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh me@main-system 'dpkg --get-selections | grep -v deinstall' | \
  dpkg --set-selections

দুর্ভাগ্যক্রমে i386 আর্কিটেকচারটি আমার ক্ষেত্রে প্রয়োজন; সিস্টেমটি amd64 নেটিভ।

সমস্যাটি dpkg --set-selectionsভিএম চালানোর ক্ষেত্রে। আমার কাছে কিছু প্যাকেজ রয়েছে যার জন্য বিশেষ হ্যান্ডলিংয়ের প্রয়োজন হয় (এগুলিই আসলে প্রথম কারণেই আমি মঞ্চের পরিবেশ চাই but মূল কারণ) তবে আমি যখন উপরের শেষ কমান্ডটি চালাই, তখন আমি প্রায় এক গাজিলিয়ন লাইন আউটপুট পাই:

dpkg: warning: package not in database at line NNN: package-name

প্যাকেজগুলির জন্য যা বেস সিস্টেমে সত্যিই উপলব্ধ। উদাহরণ অন্তর্ভুক্ত xterm, yelpএবং zip

এখন আমার প্রশ্নের জন্য:

এক ডেবিয়ান সিস্টেম থেকে অন্য প্যাকেজ প্যাকেজ নির্বাচনের তালিকা স্থানান্তরিত করার জন্য (হুইজে একই ডিবিয়ান প্রকাশের স্তর ধরে) এবং তারপরে সেই পরিবর্তনগুলি প্রয়োগ করার জন্য নির্দিষ্ট প্রক্রিয়াটি কী ? লক্ষ্যটি হ'ল উভয়ের ইনস্টলড প্যাকেজগুলির একই তালিকা রয়েছে, আদর্শভাবে যেমন diffদুটির আউটপুটগুলির মধ্যে dpkg --get-selectionsবা এর মধ্যে একটি dpkg --listকরার পরে কোনও পার্থক্য না দেখিয়ে ফিরে আসে।

grep -v deinstallঅংশ থেকে ধার করা হয় করছেন পরে সরানো হচ্ছে থেকে বিরত প্যাকেজdpkg --set-selections উপর উবুন্টু জিজ্ঞাসা করুন।

আমি ভিএম-তে উত্সটি মূল সিস্টেমের মতোই পরিবর্তন করেছি, ইনস্টলও করছি apt-transport-https:

deb https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb [arch=amd64] http://archive.zfsonlinux.org/debian wheezy main

--Set-সিলেকশন আউটপুটটি দেখছি, আমি দেখছি:

dpkg: warning: package not in database at line 1: a2ps
dpkg: warning: package not in database at line 1: abiword
dpkg: warning: package not in database at line 1: abiword-common
dpkg: warning: package not in database at line 1: abiword-plugin-grammar
dpkg: warning: package not in database at line 1: abiword-plugin-mathview
dpkg: warning: package not in database at line 1: accountsservice
dpkg: warning: package not in database at line 1: acl
dpkg: warning: package not in database at line 4: aglfn
dpkg: warning: package not in database at line 4: aisleriot
dpkg: warning: package not in database at line 4: alacarte
dpkg: warning: package not in database at line 4: alien
...

রেখার সংখ্যাটি অদ্ভুত বলে মনে হয়েছিল, এবং --get-সিলেকশনের ফলাফলের সাথে সম্পর্কিত অংশটি হল:

a2ps install
abiword install
abiword-common install
abiword-plugin-grammar install
abiword-plugin-mathview install
accountsservice install
acl install
acpi-support-base install
acpid install
adduser install
aglfn install
aisleriot install
alacarte install
alien install

লক্ষ করুন যে, মাঝে aclএবং aglfnহয় acpi-support-base, acpidএবং adduser যার জন্য কোনো ত্রুটি রিপোর্ট করা হচ্ছে । দেখে মনে হচ্ছে যে প্যাকেজগুলির জন্য ত্রুটিগুলি প্রতিবেদন করা হচ্ছে সেগুলি হয় unঅনুযায়ী হয় dpkg -l, বা dpkg -lসেগুলি সম্পর্কে কোনও ধারণা নেই ( dpkg-query: no packages found matching ...)। আমি জানি স্থানীয়ভাবে কিছু ইনস্টল করা প্যাকেজ রয়েছে তবে অনেকগুলি নেই। i386নেই যতক্ষণ না চিত্রে gcc-4.7-base:i386 install অনেক অধিকতর তালিকা (--get-পছন্দসই মান নির্বাচন করে আউটপুটে লাইন 342) নিচে।


dpkg --get-selections … | … dpkg --set-selectionsপ্যাকেজ নির্বাচনগুলি প্রতিলিপি করার উপায়। যদি এটি আপনার জন্য ব্যর্থ হয় তবে আপনাকে কেন আরও তথ্য সরবরাহ করতে হবে। উভয় সিস্টেমে আপনার উত্সের পুরো সেট, আউটপুট dpkg --get-selectionsএবং সম্পূর্ণ ট্রান্সক্রিপ্ট পোস্ট করুন dpkg --get-selections(সম্ভবত আমরা কী কাজ করে এবং কী না তা দেখে কোনও নমুনা সনাক্ত করতে পারি)। মূল সিস্টেমটি যদি amd64 বা i386? আপনি i386 আর্কিটেকচারটি যুক্ত না করলে কি এটি কাজ করে?
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

@ গিলসগুলি কি সত্যই পুরোপুরি আউটপুট হতে হবে dpkg --get-selections(এবং আমি ধরে নিই যে আপনি dpkg --set-selectionsপ্রতিলিপিটি বোঝাতে চাইছেন ?)? এমনকি কেবল পূর্বেরটি 3,600 লাইনের বেশি এবং ডানদিকে প্রায় 100 কেবি।
সিভিএন

কোন প্যাকেজগুলি ত্রুটিগুলি ট্রিগার করে এবং কোনটি না করে (কোনটি আপনি নিজের দ্বারা বের করতে না পারছেন) এর প্যাটার্নটি সনাক্ত করার জন্য আপনার যথেষ্ট পোস্ট করতে হবে। একটি অনুলিপি /var/lib/dpkg/Packages(যা আরও দীর্ঘ) এটিও কার্যকর হতে পারে - এটি একটি ভাঙ্গা প্যাকেজ ফাইলের লক্ষণ হতে পারে।
গিলস 19-29

@ গিলস আকর্ষণীয় পয়েন্ট। আমি সত্যিই সম্ভাবনাটি বিবেচনা করি নি, তবে আমি এগুলিতে বিভিন্ন আয়না ব্যবহার করি। যদি আমি একই ডেবিয়ান আয়নায় ভিএমকে নির্দেশ করি তবে এটি এখনও ঘটে কিনা তা আমাকে দেখতে দিন। অপেক্ষা করো.
সিভিএন

@ গিলস যা সত্যই কোনও বিচ্ছিন্ন পার্থক্য করেনি, তবে আমি অন্য কিছু খুঁজে পেয়েছি। আপডেট হওয়া প্রশ্নটি দেখুন।
একটি সিভিএন

উত্তর:


17

একটি ডেবিয়ান ইনস্টলেশন ক্লোন করতে, apt-cloneইউটিলিটিটি ব্যবহার করুন । এটি হুইজি থেকে ডেবিয়ান এবং 12.04 সাল থেকে উবুন্টুতে (পৃথক প্যাকেজ হিসাবে, ডিফল্ট ইনস্টলেশনের অংশ নয়) উপলভ্য। বিদ্যমান মেশিনে, চালান

apt-clone clone foo

এটি একটি ফাইল তৈরি করে foo.apt-clone.tar.gz। গন্তব্য মেশিনে এটি অনুলিপি করুন, এবং চালান

apt-get install apt-clone
apt-clone restore foo.apt-clone.tar.gz

আপনি যদি এমন কোনও পুরানো সিস্টেমের সাথে কাজ করছেন যেখানে apt-cloneউপলভ্য নয়, বা আপনি যদি ইনস্টল করা প্যাকেজগুলির তালিকাটি প্রতিস্থাপন করতে চান তবে কোনও কনফিগারেশন ফাইল নয়, তবে এখানে ম্যানুয়াল পদক্ষেপ রয়েছে।

  • উত্স মেশিনে:

    cat /etc/apt/sources.list /etc/apt/sources.list.d >sources.list
    dpkg --get-selections >selections.list
    apt-mark showauto >auto.list
    
  • লক্ষ্য মেশিনে:

    cp sources.list /etc/apt/
    apt-get update
    /usr/lib/dpkg/methods/apt/update /var/lib/dpkg/
    dpkg --set-selections <selections.list
    apt-get dselect-upgrade
    xargs apt-mark auto <auto.list
    

আমি বিশ্বাস করি যে আপনি dpkg এর একটি বেমানান পরিবর্তন দ্বারা প্রভাবিত হয়েছিলেন যা প্রথমে এটি হুইজে পরিণত করেছিল। পটভূমির জন্য বাগ # 703092 দেখুন ।

সংক্ষিপ্ত বিবরণটি হ'ল dpkg --set-selectionsএখন কেবলমাত্র প্যাকেজের নামগুলিই ফাইলটিতে উপস্থিত রয়েছে /var/lib/dpkg/statusবা /var/lib/dpkg/available। আপনি যদি বেশিরভাগ লোকের মতো প্যাকেজগুলি পরিচালনা করতে কেবল এপিটি ব্যবহার করেন তবে /var/lib/dpkg/availableতা আপ টু ডেট রাখে না।

দৌড়ানোর পরে apt-get updateএবং দৌড়ানোর আগে dpkg --set-selectionsএবং apt-get -u dselect-upgradeনীচের কমান্ডটি চালান:

apt-cache dumpavail >/tmp/apt.avail
dpkg --merge-avail /tmp/apt.avail

জেসি থেকে, আপনি এটিকে সরল করতে পারেন

apt-cache dumpavail | dpkg --merge-avail

বিকল্পভাবে, চালান

/usr/lib/dpkg/methods/apt/update /var/lib/dpkg/

বা এমনকি সহজ

apt-get install dctrl-tools
sync-available

আরও একটি সহজ পদ্ধতি যার জন্য অতিরিক্ত প্যাকেজ ইনস্টল করার দরকার নেই তবে প্যাকেজ তালিকাগুলি আবার ডাউনলোড করবে

dselect update

দেখুন dpkg প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী আরও তথ্যের জন্য। (এটি ডিপি কেজি ম্যান পৃষ্ঠায় উল্লেখ করা হয়েছে, তবে আরও এমন একটি উপায়ে যা আপনি ইতিমধ্যে সচেতন থাকলে সমস্যাটি কীভাবে সমাধান করা যায় তার ব্যাখ্যা দেয় না এমনভাবে নয়)

নোট করুন যে প্যাকেজ ইনস্টলেশন ক্লোনিং এপিটিতে dpkg --set-selectionsস্বয়ংক্রিয় / ম্যানুয়াল চিহ্ন পুনরুদ্ধার করে না। আরও তথ্যের জন্য dpkg --set-সিলেকশন '*' থেকে সমস্ত ডেটা এবং নির্ভরতা পুনরুদ্ধার দেখুন । আপনি উত্স সিস্টেমে এর সাহায্যে চিহ্নগুলি সংরক্ষণ করতে পারেন

apt-mark showauto >auto.list

এবং তাদের সাথে লক্ষ্য সিস্টেমে পুনরুদ্ধার করুন

xargs apt-mark auto <auto.list

3
এই সমস্যাটি হওয়া উচিত তার চেয়ে অনেক বেশি দৃশ্যমান। আমি বিশ্বাস করতে পারি না আমি এর আগে শুনিনি!
ফাহিম মিঠা

মজাদার. এই একটি শট দিতে যাচ্ছি। ধন্যবাদ!
একটি সিভিএন

@ ফাহিমমিঠা হ্যাঁ, আমি অবাক হয়েছি যে আমি এর আগে এর আগে কখনও শুনিনি। আমি বিশ্বাস করতে পারি না আমি dpkg --set-selectionsপ্রাক-হুইজি থেকে ব্যবহার করি নি !
গিলস 20 '

ঠিক আছে, এটি সতর্কতার একটি খুব সংক্ষিপ্ত তালিকা দিয়েছে --set-selections। এখন আমি কীভাবে পরিবর্তনগুলি প্রয়োগ করব? এমনকি apt-get -u dist-upgradeকেবল কয়েকটি মুখ্য প্যাকেজ (সমস্ত জেডএফএস-সম্পর্কিত) উল্লেখ করে যেখানে কয়েক হাজার প্যাকেজগুলি প্রভাবিত না হলেও শত শত হওয়া উচিত।
একটি সিভিএন

@ মাইকেল apt-get -u dselect-upgrade
Kjörling এটি

0

আমি এটা কিভাবে করেছি

  1. উপর উৎস হোস্ট:

    apt-get update && apt-get dist-upgrade
    dpkg --get-selection >/tmp/source.sel
    cat /etc/apt/sources.list
    

    যত্ন নেওয়া /etc/apt/sources.list.dযদি ব্যবহৃত হয় ...

    তারপরে source.selগন্তব্য হোস্টে ফাইলটি অনুলিপি করুন।

  2. উপর গন্তব্য হোস্ট:

    vi /etc/apt/sources.list 
    

    এমনকি বিভিন্ন আয়না, তবে একই উপাদান তালিকার সাথে উত্স: তালিকাটি মানিয়ে নিন ।

    apt-get update
    dselect upgrade
    dpkg --set-selection </tmp/source.sel
    dselect install
    

    এবং এখন, আমার গন্তব্য হোস্ট বর্তমানে প্রচুর পরিমাণে ইনস্টল করছে, তবে এটি পোস্ট করার জন্য আমি কিছুটা সময় নিতে পারি।


সম্ভবত উপরের 'আমি কীভাবে এটি করেছি' বর্ণনার মধ্যে 'ডিসলেক্ট আপগ্রেড' হওয়া উচিত 'নির্বাচনী আপডেট'।
জোনাথন কিমিট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.