آموزش لینوکس وب‌داده

فایل sources.list در اوبونتو؛ راهنمای مدیریت مخازن APT

فایل sources.list و در نسخه‌های جدید ubuntu.sources مشخص می‌کنند APT بسته‌ها و به‌روزرسانی‌ها را از کدام مخازن دریافت کند. در این راهنما ساختار فایل، روش ویرایش امن، افزودن مخزن (Repository) و رفع خطاهای رایج را بررسی می‌کنیم.

اگر هنگام کار با Ubuntu دستور apt update را اجرا کرده باشید، احتمالاً با فایل‌هایsources.list، ubuntu.sources یا پوشه sources.list.d روبه‌رو شده‌اید. این فایل‌ها مشخص می‌کنند APT اطلاعات بسته‌ها و به‌روزرسانی‌های سیستم را از کدام مخازن دریافت کند.

در Ubuntu 22.04 و نسخه‌های قدیمی‌تر، تنظیمات اصلی مخازن معمولاً در /etc/apt/sources.list قرار داشت؛ اما از Ubuntu 24.04 LTS به بعد، Ubuntu به‌صورت پیش‌فرض از فرمت Deb822 و فایل /etc/apt/sources.list.d/ubuntu.sources استفاده می‌کند. هر دو فرمت همچنان توسط APT پشتیبانی می‌شوند.

در ادامه، محل این فایل‌ها، ساختار آن‌ها، روش ویرایش امن، افزودن مخازن شخص ثالث و رفع خطاهای رایج APT را بررسی می‌کنیم.

sources.list Ubuntu چیست و چه کاری انجام می‌دهد؟

فایل sources.list Ubuntu یکی از محل‌هایی است که آدرس مخازن نرم‌افزاری مورد استفاده APT در آن تعریف می‌شود.
زمانی که دستور زیر را اجرا می‌کنید:
sudo apt update
Bash
APT فایل‌های تنظیمات Sources مانند:
/etc/apt/sources.list
Bash
یا در نسخه‌های جدید Ubuntu:
/etc/apt/sources.list.d/ubuntu.sources
Bash
را بررسی می‌کند و به مخازن تعریف‌شده متصل می‌شود.

در این مرحله، APT خود نرم‌افزارها را دانلود یا نصب نمی‌کند؛ بلکه فقط فهرست بسته‌ها (Package Index)، اطلاعات نسخه‌ها و لیست نرم‌افزارهای موجود در Repositoryها را به‌روزرسانی می‌کند.

به عنوان مثال، اگر یک Repository جدید به فایل Sources اضافه کنید، تا زمانی که دستور زیر را اجرا نکنید، APT از وجود بسته‌های موجود در آن مخزن اطلاعی ندارد:
sudo apt update
Bash
بعد از به‌روزرسانی فهرست بسته‌ها، می‌توانید نرم‌افزار موردنظر خود را نصب کنید:
sudo apt install nginx
Bash
در این مرحله، دستور apt install از اطلاعاتی که در مرحله قبل دریافت شده استفاده می‌کند، بسته موردنظر را پیدا کرده و فایل‌های لازم را از Repository مربوطه دانلود و نصب می‌کند.

به‌صورت خلاصه:
sources.list / ubuntu.sources
            ↓
        apt update
            ↓
 دریافت اطلاعات بسته‌ها از Repository
            ↓
    apt install / apt upgrade
Bash

ارتباط APT، Repository و sources.list

برای درک ساده‌تر، فرآیند دریافت و نصب بسته‌ها توسط APT را می‌توان به شکل زیر نمایش داد:
APT
 ↓
sources.list / ubuntu.sources
 ↓
Repository
 ↓
Package
 ↓
Install / Update
Bash
Repository یک مخزن نرم‌افزاری است که بسته‌های قابل نصب Ubuntu در آن نگهداری می‌شوند. sources.list یا ubuntu.sources آدرس این مخزن (Repository)ها را در اختیار APT قرار می‌دهد. مستندات رسمی Ubuntu نیز توضیح می‌دهند که APT اطلاعات منابع تعریف‌شده در /etc/apt/sources.list و /etc/apt/sources.list.d/ را هنگام Update دریافت می‌کند.

اگر هنوز با ساختار و مفاهیم پایه این سیستم‌عامل آشنا نیستید، پیشنهاد می‌کنیم ابتدا مقاله لینوکس چیست؟ را مطالعه کنید.
نحوه کار sources.list Ubuntu با APT

فایل sources.list Ubuntu کجاست؟

در نسخه‌های مختلف Ubuntu ممکن است فایل اصلی مخزن (Repository)ها در مسیر متفاوتی قرار داشته باشد.
در نسخه‌های قدیمی‌تر معمولاً فایل زیر را خواهید دید:
/etc/apt/sources.list
Bash
همچنین مخزن (Repository) های اضافی معمولاً در این پوشه قرار می‌گیرند:
/etc/apt/sources.list.d/
Bash
برای مشاهده فایل‌های موجود می‌توانید اجرا کنید:
ls -lah /etc/apt/
Bash
و سپس:
ls -lah /etc/apt/sources.list.d/
Bash
محل فایل ubuntu.sources در Ubuntu

تفاوت Ubuntu 24.04 و نسخه‌های قدیمی‌تر

نسخه Ubuntuفایل رایج
Ubuntu 22.04 و قدیمی‌تر/etc/apt/sources.list
Ubuntu 24.04 و جدیدتر/etc/apt/sources.list.d/ubuntu.sources
در Ubuntu 24.04 LTS و نسخه‌های جدیدتر، به‌صورت پیش‌فرض از فرمت Deb822 و فایل ubuntu.sources برای تعریف مخازن استفاده می‌شود. برای اطلاعات بیشتر درباره نحوه مدیریت بسته‌ها و مخازن، می‌توانید مستندات رسمی Ubuntu درباره مدیریت Packageها را مطالعه کنید.

بنابراین اگر در Ubuntu 24.04 دستور زیر را اجرا کردید:
cat /etc/apt/sources.list
Bash
و فایل خالی بود یا اطلاعات اصلی مخزن (Repository) ها را مشاهده نکردید، الزاماً مشکلی وجود ندارد. ابتدا این فایل را بررسی کنید:
cat /etc/apt/sources.list.d/ubuntu.sources
Bash

ساختار سنتی فایل sources.list چگونه است؟

در نسخه‌های قدیمی‌تر Ubuntu، هر مخزن (Repository) معمولاً در یک خط تعریف می‌شود.
برای مثال:
deb http://archive.ubuntu.com/ubuntu noble main restricted universe multiverse
Bash
نمونه دیگر:
deb http://security.ubuntu.com/ubuntu noble-security main restricted universe multiverse
Bash

اجزای هر خط در sources.list

هر خط را می‌توان تقریباً به چهار بخش تقسیم کرد:
deb  repository-url  distribution  component
Bash
  • deb مشخص می‌کند مخزن (Repository) شامل بسته‌های باینری آماده نصب است.
  • Repository URL آدرس سروری است که بسته‌های Ubuntu روی آن قرار دارند.
  • Distribution یا Suite نسخه Ubuntu یا نوع مخزن (Repository) را مشخص می‌کند. برای مثال noble مربوط به Ubuntu 24.04 است و noble-security شامل به‌روزرسانی‌های امنیتی آن نسخه می‌شود.
  • Component نیز مشخص می‌کند بسته متعلق به کدام بخش مخزن (Repository) است.
گاهی ممکن است با deb-src نیز مواجه شوید:
deb-src http://archive.ubuntu.com/ubuntu noble main
Bash
deb-src برای دریافت Source Packageها استفاده می‌شود و کاربران معمولی معمولاً نیازی به فعال‌کردن آن ندارند. در Ubuntu 24.04 و جدیدتر نیز می‌توان deb-src را در قسمت Types فایل ubuntu.sources فعال کرد.

فرمت جدید ubuntu.sources و Deb822 چیست؟

در Ubuntu جدید، ساختار تک‌خطی قدیمی به‌تدریج جای خود را به فرمت خواناتر Deb822 داده است.
نمونه یک فایل ubuntu.sources:
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
Bash
برای آپدیت‌های امنیتی نیز می‌توان Source جداگانه‌ای مشاهده کرد:
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
Bash
ساختار ubuntu.sources در Ubuntu 24.04

فیلدهای مهم در ubuntu.sources

  • Types نوع بسته را مشخص می‌کند؛ معمولاً deb.
  • URIs آدرس مخزن (Repository) است.
  • Suites نسخه یا بخش‌های مختلف مخزن (Repository) مانند Release، Updates و Security را مشخص می‌کند.
  • Components بخش‌های main، restricted، universe و multiverse را مشخص می‌کند.
  • Signed-By تعیین می‌کند امضای مخزن (Repository) باید با کدام Keyring اعتبارسنجی شود.
    فرمت Deb822 نسبت به ساختار قدیمی خواناتر است و امکان مدیریت چند مقدار را در یک Block فراهم می‌کند. فایل‌های این فرمت با پسوند .sources ذخیره می‌شوند.

مخازن main، restricted، universe و multiverse چیست؟

هنگام مشاهده sources.list Ubuntu معمولاً چهار عبارت زیر را خواهید دید:
main
restricted
universe
multiverse
Bash
  • main: شامل بسته‌های متن‌باز اصلی است که توسط Canonical پشتیبانی می‌شوند.
  • restricted: شامل نرم‌افزارها و Driverهایی است که به‌صورت کامل متن‌باز نیستند اما توسط Canonical پشتیبانی می‌شوند.
  • universe: شامل طیف گسترده‌ای از نرم‌افزارهای متن‌باز است که عمدتاً توسط جامعه Ubuntu نگهداری می‌شوند.
  • multiverse: شامل نرم‌افزارهایی است که ممکن است محدودیت‌های مجوز، کپی‌رایت یا شرایط توزیع داشته باشند.
Canonical این چهار Component را بر اساس وضعیت Open Source بودن و نوع پشتیبانی از یکدیگر تفکیک می‌کند.

برای اغلب کاربران، فعال بودن تنظیمات پیش‌فرض Ubuntu کافی است و بهتر است بدون دلیل مشخص Componentها را تغییر ندهید.

چگونه sources.list Ubuntu را مشاهده و ویرایش کنیم؟

قبل از هر تغییری ابتدا نسخه Ubuntu را مشخص کنید.

بررسی نسخه و نام رمز (Codename) اوبونتو

دستور زیر اطلاعات سیستم‌عامل را نمایش می‌دهد:
cat /etc/os-release
Bash
برای مشاهده نام رمز (Codename) نیز می‌توانید اجرا کنید:
source /etc/os-release
echo "$VERSION_CODENAME"
Bash
برای مثال در Ubuntu 24.04 خروجی معمولاً:
noble
Bash
خواهد بود.

مهم: نام رمز (Codename) فایل Sources را به‌صورت دستی از jammy به noble یا نسخه دیگری تغییر ندهید تا Ubuntu را Upgrade کنید. ارتقای نسخه سیستم‌عامل باید از روش رسمی Upgrade انجام شود.

بکاپ‌گیری و ویرایش فایل

قبل از ویرایش sources.list Ubuntu حتماً نسخه پشتیبان تهیه کنید.
در نسخه‌های قدیمی:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
Bash
در Ubuntu 24.04 و جدیدتر:
sudo cp /etc/apt/sources.list.d/ubuntu.sources \
/etc/apt/sources.list.d/ubuntu.sources.backup
Bash
سپس می‌توانید فایل را با Nano باز کنید:
sudo nano /etc/apt/sources.list.d/ubuntu.sources
Bash
یا برای ساختار قدیمی:
sudo nano /etc/apt/sources.list
Bash
پس از ذخیره تغییرات اجرا کنید:
sudo apt update
Bash
اگر برای مدیریت سرور از راه دور به ترمینال دسترسی ندارید، ابتدا با روش‌های اتصال به سرور با SSH آشنا شوید.
رفع خطاهای sources.list Ubuntu

چگونه مخزن (Repository) جدید به Ubuntu اضافه کنیم؟

برخی نرم‌افزارها مانند Docker، دیتابیس‌ها یا ابزارهای توسعه مخزن (Repository) اختصاصی خود را دارند. در این شرایط ممکن است لازم باشد یک Repository خارجی به APT اضافه شود.

بهتر است مخزن (Repository) های شخص ثالث مستقیماً با مخازن اصلی Ubuntu مخلوط نشوند و در /etc/apt/sources.list.d/ فایل جداگانه داشته باشند.

برای مثال ساختار کلی یک مخزن (Repository) در فرمت جدید می‌تواند چنین باشد:
Types: deb
URIs: https://example.com/ubuntu
Suites: noble
Components: main
Signed-By: /etc/apt/keyrings/example.gpg
Bash
این مثال صرفاً برای نمایش ساختار است و نباید به‌عنوان مخزن (Repository) واقعی استفاده شود.

استفاده امن از Signed-By و GPG Key

در آموزش‌های قدیمی اینترنت ممکن است دستوری مانند apt-key add را ببینید. استفاده از apt-key منسوخ شده است و روش جدید، استفاده از Keyring اختصاصی همراه با گزینه Signed-By است. مستندات Ubuntu نیز قرار دادن Keyهای مدیریتی در /etc/apt/keyrings/ و اتصال آن‌ها به مخزن (Repository) مشخص را توصیه می‌کنند.

پس از اضافه‌کردن مخزن (Repository) جدید اجرا کنید:
sudo apt update
Bash
اگر می‌خواهید یک نمونه عملی از افزودن مخزن (Repository) شخص ثالث را ببینید، در آموزش نصب Docker روی Ubuntu 24.04 نحوه اضافه‌کردن مخزن رسمی Docker و کلید GPG آن را به‌صورت عملی توضیح داده‌ایم.

چگونه یک مخزن (Repository) را غیرفعال یا حذف کنیم؟

گاهی یک مخزن (Repository) قدیمی شده، دیگر در دسترس نیست یا باعث خطای apt update می‌شود. در این شرایط الزاماً نباید تمام Sources سیستم را حذف کنید.

غیرفعال کردن مخزن (Repository) های اضافی

در فایل‌های قدیمی .list می‌توانید با اضافه‌کردن # ابتدای خط، Repository را موقتاً غیرفعال کنید:
# deb https://example.com/ubuntu noble main
Bash
در فرمت Deb822 نیز می‌توان Repository را با گزینه زیر غیرفعال کرد:
Enabled: no
Bash
APT به‌صورت رسمی این روش را برای فایل‌های .sources پشتیبانی می‌کند.

اگر مخزن (Repository) خارجی در فایل جداگانه قرار گرفته باشد، برای حذف کامل آن نیز می‌توان فایل مربوطه را از /etc/apt/sources.list.d/ حذف کرد؛ اما قبل از حذف مطمئن شوید فایل مربوط به مخزن (Repository)رسمی Ubuntu نیست.

خطاهای رایج sources.list Ubuntu و روش رفع آن‌ها

اشتباه در تنظیمات sources.list Ubuntu یکی از دلایل رایج خطا هنگام اجرای:
sudo apt update
Bash
است.

تشخیص خطاهای مخزن (Repository)در APT

خطای 404 یا Release file not found
این خطا معمولاً زمانی رخ می‌دهد که نام رمز (Codename) اشتباه باشد، مخزن (Repository)دیگر نسخه Ubuntu شما را پشتیبانی نکند یا از نسخه End of Life استفاده کنید.

ابتدا نسخه Ubuntu را بررسی کنید:
cat /etc/os-release
Bash
سپس مطمئن شوید مقدار Suites یا Codename Repository با نسخه سیستم‌عامل مطابقت دارد.
خطای Repository تکراری
گاهی یک مخزن (Repository) هم در /etc/apt/sources.list و هم در یکی از فایل‌های sources.list.d تعریف شده است. در این حالت ممکن است پیغام‌هایی مانند:
Target Packages is configured multiple times
Bash
نمایش داده شود.
مخزن (Repository) تکراری را پیدا کرده و فقط یکی از تعریف‌ها را نگه دارید.
خطای GPG یا NO_PUBKEY
اگر Key یک مخزن (Repository) موجود نباشد یا منقضی شده باشد، APT ممکن است امضای آن Repository را تأیید نکند.

در این شرایط بررسی امنیتی APT را غیرفعال نکنید و گزینه‌هایی مانند trusted=yes را صرفاً برای حذف خطا اضافه نکنید. Key رسمی مخزن (Repository) را دریافت کرده و از Signed-By استفاده کنید. Ubuntu هشدار می‌دهد که Trusted کردن مخزن (Repository) بدون اعتبارسنجی مناسب می‌تواند امنیت سیستم را تضعیف کند.
خطای Could not get lock
این خطا معمولاً مستقیماً به Sources مربوط نیست و اغلب زمانی رخ می‌دهد که فرآیند دیگری از APT یا dpkg در حال اجرا باشد.

اگر هنگام اجرای APT با این خطا مواجه شده‌اید، روش‌های تشخیص Process قفل‌کننده و رفع مشکل را در مقاله رفع خطای Could not Get lock در Ubuntu توضیح داده‌ایم.

سوالات متداول درباره sources.list Ubuntu

آیا حذف فایل sources.list مشکلی ایجاد می‌کند؟
اگر Repositoryهای موردنیاز APT را حذف کنید، سیستم دیگر نمی‌تواند Package Listها را از آن منابع دریافت کند و نصب یا Update بسیاری از نرم‌افزارها با مشکل مواجه می‌شود. بنابراین به‌جای حذف بدون بررسی، ابتدا نسخه پشتیبان (Backup) تهیه کنید.
چرا در Ubuntu 24.04 فایل sources.list من خالی است؟
در Ubuntu 24.04 و نسخه‌های جدیدتر، خالی یا حتی استفاده‌نشدن /etc/apt/sources.list لزوماً مشکل‌ساز نیست؛ زیرا مخازن پیش‌فرض معمولاً در /etc/apt/sources.list.d/ubuntu.sources تعریف شده‌اند. اما اگر فایل فعالی که مخزن (Repository) های موردنیاز سیستم در آن قرار دارند حذف شود، APT دیگر نمی‌تواند اطلاعات آن مخازن را دریافت کند.
بعد از تغییر مخزن (Repository) چه دستوری اجرا کنیم؟
پس از هر تغییر در Sources، اجرا کنید:

sudo apt update

تا APT اطلاعات Repositoryها را مجدداً دریافت کند.
آیا می‌توان هر مخزن (Repository) اینترنتی را به Ubuntu اضافه کرد؟
خیر. مخزن (Repository) شخص ثالث می‌تواند بسته (Package) های سیستم را جایگزین کند یا باعث تداخل و مشکلات امنیتی شود. فقط از مخزن (Repository) رسمی پروژه یا توسعه‌دهنده مورد اعتماد استفاده کنید. Canonical نیز درباره استفاده از Package Sourceهای ناشناس هشدار داده است.

جمع‌بندی

فایل‌های sources.list و ubuntu.sources مشخص می‌کنند APT بسته‌ها و به‌روزرسانی‌های Ubuntu را از چه مخازنی دریافت کند. در Ubuntu 22.04 و نسخه‌های قدیمی‌تر معمولاً فایل /etc/apt/sources.list استفاده می‌شود، در حالی که Ubuntu 24.04 و نسخه‌های جدیدتر به‌صورت پیش‌فرض از ubuntu.sources و فرمت Deb822 استفاده می‌کنند.

اگر هنگام ویرایش این فایل‌ها نسخه Ubuntu، نام رمز (Codename) و ساختار مخزن (Repository) را به‌درستی بررسی کنید، بسیاری از خطاهای apt update قابل پیشگیری هستند. همچنین برای مخازن شخص ثالث فقط از منابع معتبر و کلیدهای GPG رسمی استفاده کنید و پیش از هر تغییر، یک نسخه پشتیبان از تنظیمات فعلی داشته باشید.

اگر می‌خواهید این تنظیمات را روی یک سرور واقعی Ubuntu اجرا و تمرین کنید، می‌توانید پلن‌های سرور مجازی ایران وب‌داده را بررسی کنید و سیستم‌عامل موردنظر خود را روی VPS نصب کنید.

Setareh Mirzaei
Setareh Mirzaei

فعال حوزه فناوری و زیرساخت، علاقه‌مند به سرورها، لینوکس، توسعه وب و تجربه‌های جدید در دنیای تکنولوژی.

مقاله‌ها: 20
پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *