apt-এ duplicate sources ঠিক করার উপায়
apt update-এ “configured multiple times” এলে legacy .list এবং deb822 .sources জোড়া খুঁজুন, একটি রেখে অন্যটি সরান, এবং পরিষ্কার update চালান।
Duplicate apt sources ত্রুটির অর্থ
Duplicate apt sources বলতে বোঝায়, একই repository দুটি ভিন্ন ফাইলে দুইবার ঘোষিত হয়েছে এবং APT (advanced package tool) উভয় কপিই শনাক্ত করেছে। Ubuntu 24.04 এবং পরবর্তী সংস্করণে এটি প্রায় সব সময় ঘটে, কারণ কোনো third-party install script পুরোনো one line .list ফাইল লিখেছে, অথচ একই repository-এর জন্য একটি deb822 .sources ফাইল আগে থেকেই disk-এ ছিল। কিছু corrupt হয়নি এবং কোনো package ঝুঁকিতে নেই। দুটি declaration-এর একটি মুছে ফেললেই বার্তাটি আর দেখাবে না।
Search box-এ মানুষ সাধারণত এই line-টি paste করে:
W: Target Packages (stable/binary-amd64/Packages) is configured multiple times in /etc/apt/sources.list.d/docker.list:1 and /etc/apt/sources.list.d/docker.sources:1শেষ দিক থেকে পড়ুন। দুটি ফাইল, প্রতিটিতে একটি line number-সহ, একই বিষয় ঘোষণা করছে। Target Packages হলো সেই index, যা apt download করে কোনো repository কী কী package সরবরাহ করে তা জানে। stable/binary-amd64/Packages হলো সেই component-এর নাম (stable) এবং architecture (amd64), যেগুলো ওই index-এ অন্তর্ভুক্ত। তাই apt জানাচ্ছে যে stable component-এর amd64 index docker.list-এর line 1-এ configured আছে এবং আবার docker.sources-এর line 1-এও configured আছে।
apt 3.0 এবং পরবর্তী সংস্করণে, অর্থাৎ Ubuntu 25.04 থেকে এবং Debian 13-এ, একই বার্তা W:-এর পরিবর্তে Warning: দিয়ে শুরু হয়। Prefix-এর পরের text একই থাকে।
এই warning হলো হালকা ধরনের সমস্যা। apt দুটি declaration একত্র করে এবং update চালু থাকে, কারণ উভয় declaration-ই একই key-সহ একই archive বর্ণনা করে। গুরুতর ক্ষেত্রে পুরো প্রক্রিয়া বন্ধ হয়ে যায়:
E: Conflicting values set for option Signed-By regarding source https://download.docker.com/linux/ubuntu/ noble: /usr/share/keyrings/docker-archive-keyring.gpg != /etc/apt/keyrings/docker.asc
E: The list of sources could not be read.এখানে apt কাজটি প্রত্যাখ্যান করে, কারণ দুটি declaration একই archive-এর জন্য ভিন্ন signing key উল্লেখ করছে। দুটি অভিন্ন declaration apt একত্র করতে পারে। কিন্তু দুটি Signed-By value-এর মধ্যে apt নিজে কোনোটি বেছে নেবে না, কারণ ভুলটি বেছে নিলে archive owner যে key দিয়ে sign করেননি, তার সঙ্গে package signature যাচাই করা হবে। তাই apt কোনো source-ই পড়ে না। আপনি ফাইল দুটি হাতে সম্পাদনা না করা পর্যন্ত apt update এবং apt install উভয়ই একই দুটি line দেখিয়ে ব্যর্থ হবে।
ডুপ্লিকেটটি কীভাবে তৈরি হয়
দুটি format আলাদা extension-সহ পৃথক file-এ থাকে। তাই disk-এ উভয় file থাকা আটকানোর কোনো ব্যবস্থা থাকে না। apt দেরিতে overlap শনাক্ত করে, যখন fetch করার পরিকল্পনা করা index target-এর তালিকা তৈরির জন্য এটি প্রতিটি source file প্রসারিত করে। তার আগে পর্যন্ত docker.list এবং docker.sources দুটি অসংশ্লিষ্ট file।
চারটি সাধারণ ঘটনার কারণে এই জোড়া তৈরি হয়:
- কোনো vendor install script, অথবা পুরোনো post থেকে copy করা কোনো command,
teeline-সহ/etc/apt/sources.list.d/vendor.listলিখে। - পরে vendor-এর নিজস্ব package
/etc/apt/sources.list.d/vendor.sourcesপ্রকাশ করে এবং সেটি আপনার জন্য install করে। - Ubuntu 24.04 এবং পরবর্তী সংস্করণে
add-apt-repositorydeb822.sourcesfile লেখে। ফলে আপনি আগে হাতে.listহিসেবে যোগ করা কোনো PPA (personal package archive) আবার.sourcesহিসেবে ফিরে আসে। - release upgrade distribution-এর নিজস্ব source-গুলোকে deb822-এ রূপান্তর করে, কিন্তু আপনার হাতে লেখা
.listfile-টি সেগুলোর পাশেই অপরিবর্তিত রেখে দেয়।
প্রতিটি ঘটনাই আলাদাভাবে স্বাভাবিক। একই system-এ, প্রায়ই কয়েক মাসের ব্যবধানে, এদের দুটি ঘটলেই duplicate তৈরি হয়।
দুটি format পাশাপাশি
পুরোনো format-এ প্রতি repository-এর জন্য একটি করে line থাকে এবং এর প্রতিটি অংশের অর্থ অবস্থাননির্ভর।
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stableক্রমটি নির্দিষ্ট: binary package-এর জন্য type (deb), source package-এর জন্য (deb-src), এরপর square bracket-এর মধ্যে options, archive-এর URI (uniform resource identifier), suite, এবং শেষে এক বা একাধিক component। অর্থ অবস্থান থেকে নির্ধারিত হয়। তাই ভুল জায়গায় একটি space থাকলেও apt-এর পড়া তথ্য বদলে যায়।
deb822 একই তথ্যকে নামযুক্ত field-এর একটি stanza হিসেবে প্রকাশ করে। নামটি RFC 822 থেকে এসেছে। এটি mail header-এর সেই style, যা Debian package control file-এর জন্য আগে থেকেই ব্যবহার করে।
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: noble
Components: stable
Architectures: amd64
Signed-By: /etc/apt/keyrings/docker.ascএকই repository, একই key, নতুন কিছু যোগ করা হয়নি। রূপান্তরটি সরাসরি: deb হয়ে যায় Types, archive address হয়ে যায় URIs, suite হয়ে যায় Suites, component-গুলো হয়ে যায় Components, এবং bracket-এর প্রতিটি option নিজস্ব field-এ পরিণত হয়। তাই signed-by= হয়ে যায় Signed-By: এবং arch= হয়ে যায় Architectures:।
প্রতিটি field name plural, কারণ প্রতিটি field space দিয়ে আলাদা করা একটি list গ্রহণ করে। একটি stanza-র Suites: noble noble-updates noble-backports তিনটি আলাদা deb line-এর পরিবর্তে ব্যবহার করা যায়। একটি blank line stanza শেষ করে। তাই একটি .sources file-এ একাধিক repository রাখা যায়। deb822 এমন কিছু setting-ও বহন করতে পারে, যেগুলো one line format-এ ঠিকভাবে প্রকাশ করা কঠিন: repository বন্ধ করার জন্য Enabled: no, Trusted, Check-Valid-Until, এবং Signed-By-এর মধ্যে সরাসরি বসানো inline key। এতে প্রতিটি line-এর শুরুতে একটি space indent করতে হয় এবং blank line-গুলো একটি মাত্র dot দিয়ে লিখতে হয়।
প্রতিটি ফাইল কোথায় থাকে
/etc/apt/sources.list: মূল একক ফাইল। Ubuntu 24.04 এবং পরবর্তী সংস্করণে এটি সাধারণত খালি থাকে অথবা নতুন অবস্থানের নির্দেশনা দেওয়া একটি মন্তব্য থাকে।/etc/apt/sources.list.d/*.list: প্রতি লাইনে একটি entry। সাধারণত প্রতিটি repository-এর জন্য একটি ফাইল থাকে।/etc/apt/sources.list.d/*.sources: deb822 stanza। Ubuntu 24.04 এবং পরবর্তী সংস্করণে distribution-এর নিজস্ব repository-গুলো এখানে,ubuntu.sources-এ থাকে।/etc/apt/keyrings/: আপনার যোগ করা key-গুলো এখানে রাখতে হয়।/usr/share/keyrings/-এ package থেকে আসা key থাকে।
apt শুধু .list অথবা .sources দিয়ে শেষ হওয়া ফাইল পড়ে। filename-এ letters, digits, underscore, hyphen এবং period থাকতে পারে। অন্য কোনো extension থাকা ফাইল notice দেখিয়ে বাদ দেওয়া হয়। নিচের fix-এর ক্ষেত্রে বিষয়টি গুরুত্বপূর্ণ।
ডুপ্লিকেট জোড়াটি খুঁজুন
ডিরেক্টরি তালিকা দিয়ে শুরু করুন:
ls -l /etc/apt/sources.list.d/-rw-r--r-- 1 root root 195 Aug 3 09:12 docker.list
-rw-r--r-- 1 root root 254 Aug 9 14:40 docker.sources
-rw-r--r-- 1 root root 2683 Jun 11 08:02 ubuntu.sourcesএকই stem এবং ভিন্ন extension থাকা দুটি ফাইলই সাধারণত জোড়া হয়, তবে নামের ওপর নির্ভর করবেন না। ফাইলগুলোর বিষয়বস্তু পড়ুন, কারণ যেকোনো নামে থাকা ফাইলের মধ্যে ডুপ্লিকেট লুকিয়ে থাকতে পারে:
grep -rn -E '^(deb |deb-src |Types:|URIs:|Suites:|Signed-By:)' /etc/apt/sources.list /etc/apt/sources.list.d//etc/apt/sources.list.d/docker.list:1:deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu noble stable
/etc/apt/sources.list.d/docker.sources:1:Types: deb
/etc/apt/sources.list.d/docker.sources:2:URIs: https://download.docker.com/linux/ubuntu
/etc/apt/sources.list.d/docker.sources:3:Suites: noble
/etc/apt/sources.list.d/docker.sources:6:Signed-By: /etc/apt/keyrings/docker.ascএকই host এবং একই suite থাকা দুটি entry-ই জোড়াটি। দুটিই https://download.docker.com/linux/ubuntu এবং noble suite নির্দেশ করে, তাই একই repository দুবার লেখা হয়েছে। তাদের Signed-By path-ও একে অপরের সঙ্গে মেলে না। এর ফলেই আগে দেখানো Conflicting values error তৈরি হয়।
এই ধাপে apt command-এর পরিবর্তে grep ব্যবহার করুন। apt conflict-এর কারণে থেমে গেলে সেটিও আপনার source তালিকা দেখাতে পারে না। তাই apt-cache policy আপনার প্রয়োজনীয় উত্তর দেখানোর বদলে একই error মুদ্রণ করে।
সমাধান: deb822 ফাইলটি রাখুন, legacy ফাইলটি সরিয়ে দিন
.sources ফাইলটি রাখুন। apt tooling এখন এই format-এ ফাইল লেখে, এবং Debian ও Ubuntu উভয়ই এই format-এর দিকে এগোচ্ছে। কোনো কিছু মুছে ফেলার আগে disk-এ দুটি গুরুত্বপূর্ণ path-এর কোনটি আছে তা পরীক্ষা করুন:
ls -l /etc/apt/keyrings/ /usr/share/keyrings/ | grep -i docker-rw-r--r-- 1 root root 4813 Aug 9 14:40 docker.ascশুধু /etc/apt/keyrings/docker.asc রয়েছে। তাই deb822 ফাইলটিই সঠিক তথ্য দিচ্ছে, আর .list ফাইলটি সরিয়ে ফেলা একটি key-এর দিকে নির্দেশ করছে। আপনি যে ফাইলটি রাখবেন সেটিতে যদি অনুপস্থিত key-এর নাম থাকে, তাহলে আগে কার্যকর path-টি সেখানে copy করুন। এরপর অন্য ফাইলটি মুছে দিন।
legacy ফাইলটি সরাসরি মুছে না দিয়ে directory-এর বাইরে সরিয়ে রাখুন:
sudo mkdir -p /root/apt-sources-backup
sudo mv /etc/apt/sources.list.d/docker.list /root/apt-sources-backup/
sudo apt updateএটির নাম docker.list.bak পরিবর্তন করে একই জায়গায় রাখলেও কাজ হবে, কারণ apt অজানা extension উপেক্ষা করে। তবে তখন প্রতিটি apt run-এ এটি দেখাবে:
N: Ignoring file 'docker.list.bak' in directory '/etc/apt/sources.list.d/' as it has an invalid filename extensionফাইলটি অন্য কোথাও সরিয়ে রাখলে এই notice আর screen-এ দেখাবে না এবং backup-ও সংরক্ষিত থাকবে। এরপর একটি সঠিক apt update এমন হবে, যেখানে দুটি ফাইলের নাম উল্লেখ করা কোনো line থাকবে না:
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Get:2 https://download.docker.com/linux/ubuntu noble InRelease [48.8 kB]
Get:3 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
Fetched 175 kB in 1s (146 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.এখন edit-এর পর repository ঠিক আছে কি না নিশ্চিত করুন:
apt-cache policy | grep download.docker.com 500 https://download.docker.com/linux/ubuntu noble/stable amd64 Packages
origin download.docker.comকোনো vendor-এর documentation এখনও যদি one-line file ধরে নেয়, তাহলে সেটি রেখে .sources ফাইলটি মুছে দিতে পারেন। উভয় ক্ষেত্রেই একটি নিয়ম প্রযোজ্য: নির্দিষ্ট archive এবং suite ঘোষণা করতে সর্বোচ্চ একটি ফাইল থাকতে পারে।
কেন একটি নষ্ট third-party source apt update-কে সম্পূর্ণ আটকে দেয়
পাশের ব্যর্থতাটি আলাদা দেখালেও এর মূল কারণ একই: এমন একটি third-party source, যা apt ব্যবহার করতে পারে না। প্রথম ধরনটি হলো key অনুপস্থিত থাকা:
Err:5 https://download.docker.com/linux/ubuntu noble InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8
E: The repository 'https://download.docker.com/linux/ubuntu noble InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.Signed-By field অনুপস্থিত, অথবা এটি এমন একটি file নির্দেশ করছে যা ব্যবহারযোগ্য key নয়। তাই apt archive-এর InRelease file-এর signature যাচাই করতে পারে না। এরপর এটি পুরো repository বাতিল করে দেয়, কারণ যাচাই করা যায় না এমন package list-কে বিশ্বাস করা নিরাপদ নয়। প্রথমে key file-টি পরীক্ষা করুন:
ls -l /etc/apt/keyrings/docker.asc
gpg --show-keys /etc/apt/keyrings/docker.ascকার্যকর key হলে একটি pub line-এ key id এবং একটি uid line-এ vendor-এর নাম দেখা যায়। gpg: no valid OpenPGP data found.-এর অর্থ হলো file-টি মোটেই key নয়। সাধারণত key URL পরিবর্তিত হওয়ায় download-এর সময় একটি error page সংরক্ষিত হলে এমন হয়। আবার key সংগ্রহ করুন, file-টি পরীক্ষা করুন, তারপর apt update চালান।
দ্বিতীয় ধরনটি সাধারণত release upgrade-এর পরে দেখা দেয়:
Err:6 https://ppa.launchpadcontent.net/ondrej/php/ubuntu plucky InRelease
404 Not Found [IP: 10.0.0.80 443]
E: The repository 'https://ppa.launchpadcontent.net/ondrej/php/ubuntu plucky Release' does not have a Release file.PPA ওই suite-এর জন্য কিছু publish করেনি। তাই server-এ path-টি নেই এবং request-এর ফলাফল 404 হয়। আপনার অন্য repository-গুলো তখনও update হয়, এবং আগে থেকেই ইনস্টল করা package-গুলো অপরিবর্তিত থাকে। তবে run-টি non-zero status-এ শেষ হয়। ফলে exit status of apt update পরীক্ষা করা যেকোনো script প্রতিবার চালানোর সময় failure report করে। এই কারণে unattended security upgrades configured থাকা server-এ একটি মৃত source সরিয়ে ফেলা জরুরি। প্রতিদিনের এই noise-এর মধ্যেই প্রকৃত failure আড়ালে থাকতে পারে। Vendor install script-গুলো উভয় ধরনের সমস্যায় পড়ে। তাই Ubuntu-তে Tailscale install error-এর বেশিরভাগ ক্ষেত্রে দেখা যায়, script keyring লেখেনি অথবা archive-এ release codename-টি নেই।
একটি source নিষ্ক্রিয় করুন, অন্যগুলো অক্ষত রাখুন
একটি deb822 ফাইলের stanza-তে একটি field যোগ করে সেটি সংরক্ষণ করুন:
Types: deb
URIs: https://ppa.launchpadcontent.net/ondrej/php/ubuntu
Suites: plucky
Components: main
Signed-By: /etc/apt/keyrings/ondrej-php.asc
Enabled: noপ্রতিটি stanza-এর line comment করার চেয়ে apt manual এই পদ্ধতিটি ব্যবহারের পরামর্শ দেয়। এটি আগের অবস্থায় ফিরিয়ে আনার জন্যও সহজ। এক লাইনের ফাইল হলে line-এর শুরুতে # বসান। উভয় format-এর ক্ষেত্রেই ফাইলটি /etc/apt/sources.list.d/-এর বাইরে সরিয়ে রাখাও কার্যকর। Repository স্থায়ীভাবে সরিয়ে ফেলা হলে এই পদ্ধতিটিই বেছে নিন।
আবার sudo apt update চালান। ওই repository-এর Err: block আর দেখা যাবে না। Exit status 0 হবে। পরের line-এ echo $? চালিয়ে এটি যাচাই করতে পারেন।
ভাঙা source কখনো sudo rm /etc/apt/sources.list.d/* দিয়ে ঠিক করবেন না। Ubuntu 24.04 এবং পরবর্তী সংস্করণে এটি ubuntu.sources মুছে দেয়। ওই ফাইলেই distribution-এর নিজস্ব repository থাকে। ফলে apt-এর কাছে আর কোনো package list থাকে না। তখন বাস্তবে বিদ্যমান software-এর জন্যও E: Unable to locate package curl দেখায়। এটি ইতিমধ্যে চালিয়ে থাকলে ফাইলটি আবার লিখে দিন:
Types: deb
URIs: http://archive.ubuntu.com/ubuntu/
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpgএটি /etc/apt/sources.list.d/ubuntu.sources নামে সংরক্ষণ করুন। noble-এর জায়গায় lsb_release -cs থেকে নেওয়া আপনার নিজস্ব release name বসান। এরপর sudo apt update চালান।
পুরোনো .list ফাইলকে deb822-এ রূপান্তর করুন
August 2026 অনুযায়ী, apt 3.0 এবং পরবর্তী সংস্করণে এই কাজের জন্য একটি converter থাকে। Debian 13 এবং Ubuntu 25.04 ও পরবর্তী সব release, যার মধ্যে 26.04-ও আছে, এই converter সরবরাহ করে। সংস্করণ পরীক্ষা করে এটি চালান:
apt --version
sudo apt modernize-sourcesএটি /etc/apt/sources.list.d/-এর অধীনে থাকা এক-লাইন ফাইলগুলোকে deb822 .sources ফাইলে পুনর্লিখন করে। কমান্ডের output পড়ুন। এরপর নিজে directory-টির তালিকা দেখুন এবং ফলাফলে আস্থা রাখার আগে apt update চালান। Ubuntu 24.04-এ এমন subcommand ছাড়া পুরোনো apt সরবরাহ করা হয়। সেখানে কমান্ডটি E: Invalid operation modernize-sources উত্তর দেয়। ওই release-এ উপরের field mapping ব্যবহার করে হাতে রূপান্তর করুন।
আজ রূপান্তর করা বাধ্যতামূলক নয়, কারণ apt এখনও উভয় format পড়ে। তবে যে server দীর্ঘদিন চালানোর পরিকল্পনা আছে, সেখানে এটি করা উপযোগী। কারণ এখন sources লেখে এমন প্রতিটি tool deb822 ব্যবহার করে। শুধু .sources ফাইল থাকা কোনো system-এ এই ধরনের duplicate আর তৈরি হবে না।
সার্ভারে তৃতীয়-পক্ষের source সুশৃঙ্খল রাখুন
তৃতীয়-পক্ষের repository-গুলোই সার্ভারের সবচেয়ে দ্রুত অপ্রচলিত হয়ে পড়া অংশ। প্রতিটি repository-এর ক্ষেত্রে অন্য একটি পক্ষকে আপনার Ubuntu release-এর জন্য package প্রকাশ করে যেতে হবে। Release upgrade একই বিকেলে এই প্রতিটি প্রতিশ্রুতি পরীক্ষা করে।
- Distribution package দিয়ে কাজ না হলে তবেই তৃতীয়-পক্ষের repository যোগ করুন। একটি সাধারণ Ubuntu 24.04-এ LAMP stack-এর জন্য কোনোটি দরকার নেই: Ubuntu archive-এ ব্যবহৃত প্রতিটি package রয়েছে এবং release-এর জীবনকালজুড়ে security update পাওয়া যায়।
- Key-গুলো
/etc/apt/keyrings/-এ রাখুন, প্রতিটি vendor-এর জন্য একটি file ব্যবহার করুন এবং mode 644 নির্ধারণ করুন। Unprivileged_aptuser download পরিচালনা করে এবং key পড়তে হয়। তাই শুধু root-এর জন্য পাঠযোগ্য key file থাকলে ওই repository থেকে প্রতিবার fetch করার সময় permission error দেখা দেবে। - প্রতিটি stanza-তে
Signed-By-কে সেই নির্দিষ্ট file-এর দিকে নির্দেশ করুন।/etc/apt/trusted.gpgবা/etc/apt/trusted.gpg.d/-এ থাকা key সার্ভারের প্রতিটি repository-এর জন্য trusted হয়। এর ফলে বহু বছর আগে যোগ করা কোনো vendor key যেকোনো উৎসের package validate করতে পারে। - Release upgrade-এর আগে sources পড়ুন এবং আপনি যে suite-এ যাচ্ছেন, প্রতিটি vendor ইতিমধ্যে তার জন্য package প্রকাশ করছে কি না যাচাই করুন।
পুরোনো global keyring-এ থাকা একটি key প্রতিটি update-এর সময় নিজেকে জানান দেয়:
W: https://download.docker.com/linux/ubuntu/dists/noble/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.সেই একক key-টি তার নিজস্ব file-এ export করুন। এরপর stanza-টিকে ওই file-এর দিকে নির্দেশ করুন:
gpg --no-default-keyring --keyring /etc/apt/trusted.gpg --export 7EA0A9C3F273FCD8 | sudo tee /etc/apt/keyrings/docker.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/docker.gpgRepository-এর stanza-তে Signed-By: /etc/apt/keyrings/docker.gpg যোগ করুন এবং sudo apt update চালান। কোনো repository পুরোনো keyring-এর ওপর নির্ভর না করলে warning বন্ধ হবে। এরপর sudo gpg --no-default-keyring --keyring /etc/apt/trusted.gpg --delete-key 7EA0A9C3F273FCD8 দিয়ে entry-টি সরিয়ে ফেলতে পারবেন।
আরেকটি অভ্যাস সবচেয়ে বেশি সমস্যা এড়ায়। Upgrade-এর সময় do-release-upgrade তৃতীয়-পক্ষের source নিষ্ক্রিয় করে এবং পরে সেগুলো নিষ্ক্রিয় অবস্থায় রাখে। এরপর সেগুলো হাতে, একবারে একটি করে আবার চালু করতে গেলে duplicate declaration তৈরি হওয়ার সম্ভাবনা সবচেয়ে বেশি থাকে। শুরু করার আগে Ubuntu 24.04 থেকে 26.04-এ upgrade guide পড়ুন এবং কোন repository এখনও প্রয়োজন তা লিখে রাখুন। সদ্য তৈরি করা মেশিনে source সঠিকভাবে নির্ধারণ করার সবচেয়ে ভালো সময় হলো নতুন VPS-এ প্রথম দশ মিনিটে, যখন সার্ভারে শুধু Ubuntu-র সঙ্গে আসা entry-গুলো থাকে।
FAQ
apt কেন বলে যে একটি target একাধিকবার configured করা হয়েছে?
কারণ /etc/apt/sources.list.d/-এর অধীনে থাকা দুটি ফাইলে একই repository, suite এবং component ঘোষণা করা হয়েছে। বার্তায় line number-সহ উভয় ফাইলের নাম দেখানো হয়, যেমন docker.list:1 এবং docker.sources:1। apt এগুলো একত্র করে কাজ চালিয়ে যায়, তাই update নিজে এখনও সফল হয়। তবু duplicate entry সরিয়ে ফেলা উচিত: দুটি ফাইলে ভিন্ন signing key উল্লেখ থাকলে apt সঙ্গে সঙ্গে E: Conflicting values set for option Signed-By-এ থেমে যায় এবং কোনো source পড়তে অস্বীকার করে। এর ফলে apt install-ও বাধাগ্রস্ত হয়।
.list ফাইল রাখব, নাকি .sources ফাইল?
.sources ফাইলটি রাখুন। Ubuntu 24.04 এবং পরবর্তী সংস্করণে add-apt-repository deb822 format লেখে। এতে square bracket-এর positional text-এর পরিবর্তে প্রতিটি setting-এর জন্য আলাদা named field থাকে, এবং distributions এই format-এর দিকেই এগোচ্ছে। .list ফাইলটি মুছে ফেলার আগে .sources ফাইলের ভেতরের Signed-By path-টি বিদ্যমান কোনো key-কে নির্দেশ করছে কি না, তা ls -l /etc/apt/keyrings/ দিয়ে নিশ্চিত করুন। পুরোনো ফাইলটি directory-র ভেতরে rename না করে /etc/apt/sources.list.d/-এর বাইরে সরিয়ে রাখুন, কারণ directory-র ভেতরে .bak নামের কোনো অবশিষ্ট ফাইল থাকলে প্রতিবার apt চালানোর সময় ignored-file notice দেখাবে।
কোনো apt repository না মুছে কীভাবে বন্ধ করব?
deb822 .sources ফাইলে stanza-তে Enabled: no যোগ করুন। এক লাইনের .list ফাইলে লাইনের শুরুতে # বসান। উভয় ক্ষেত্রেই পরে sudo apt update চালান। এরপর ওই repository-র Err: block আর থাকবে না। কোনো third-party repository-তে আপনার Ubuntu release-এর জন্য এখনও package না থাকলে এবং তার 404-এর কারণে apt update non-zero exit করে, তখন এটাই সঠিক পদ্ধতি।
এক লাইনের sources.list format কি বন্ধ হয়ে যাচ্ছে?
এটি deprecated, কিন্তু removed নয়। apt এখনও .list ফাইল পড়ে এবং দীর্ঘ সময় ধরে পড়বে। তাই আগামীকাল আপনার সার্ভারে কিছু নষ্ট হবে না। নতুন tooling deb822 লেখে: Ubuntu 24.04 এবং পরবর্তী সংস্করণে distribution repository-গুলো /etc/apt/sources.list.d/ubuntu.sources-এ থাকে, আর add-apt-repository .sources ফাইল লেখে। apt 3.0 এবং পরবর্তী সংস্করণে sudo apt modernize-sources ব্যবহার করে আপনার কাছে থাকা ফাইলগুলো convert করতে পারবেন।