يأتي كل إصدار من Debian وUbuntu بفرع واحد من PHP. وعندما يحتاج تطبيق إلى فرع آخر، مثل PHP 8.4 على Debian 12، يلجأ معظم مديري الأنظمة إلى المستودعات التي يصونها Ondřej Surý: المستودع packages.sury.org/php لـ Debian، وppa:ondrej/php لـ Ubuntu. هذه المستودعات واسعة الانتشار ومتقنة، لكن إضافتها تغيّر الطريقة التي يتلقى بها خادمك تحديثات PHP. يشرح هذا الدليل المفاضلة، وكيف تضيفها وتضبط أولويتها وتزيلها عن قصد.
ما هذه المستودعات
بحسب موقع deb.sury.org، فإن Ondřej Surý مطوّر في مشروع Debian يحزّم PHP لـ Debian منذ PHP 5، وحزم PHP الرسمية في Debian وUbuntu إما من عمله أو مبنية عليه. تحمل مستودعاته التحزيم نفسه مبنيًا لكل إصدار مدعوم من التوزيعات، مع إمكانية تثبيت فروع PHP متعددة جنبًا إلى جنب. ووقت كتابة هذا المقال يضم packages.sury.org/php أقسامًا لـ Debian 11 و12 و13 ولـ Ubuntu 22.04 و24.04 و26.04، وينشر PHP من 5.6 حتى 8.5، إضافة إلى إصدارات مرشحة من PHP 8.6.
هناك تغييران حديثان يستحقان المعرفة:
- مستودع PPA الخاص بـ Ubuntu يُدمج في packages.sury.org. تذكر صفحة
ppa:ondrej/phpعلى Launchpad أن packages.sury.org/php هو المصدر المعتمد لـ Ubuntu 26.04 (resolute)، وأن الـ PPA ما زال قابلًا للاستخدام على 22.04 و24.04، وأن تعليمات الانتقال للإصدارات الأقدم ستأتي لاحقًا. - إنه جهد تطوعي في معظمه. يذكر القائم عليه أن التحزيم يتم في الغالب في وقت فراغه، ويطلب الإبلاغ عن الأخطاء في متتبع المشروع، ويوجّه الشركات إلى الدعم التجاري (PHP LTS من Freexian) أو التبرعات.
حزم التوزيعة أم Sury: المفاضلة
| حزم التوزيعة | مستودع Sury | |
|---|---|---|
| فروع PHP | فرع واحد لكل إصدار | فروع متعددة قابلة للتثبيت معًا |
| تحديثات الأمان | من فريق أمان التوزيعة، وتُعلن في DSA/DLA (Debian) أو USN (Ubuntu) | من القائم على المستودع، ولا تغطيها إشعارات Debian أو Ubuntu |
| المدة | طوال عمر الإصدار، بما في ذلك دعم Debian الطويل | ما دام القائم عليه ينشر لإصدارك |
| الثقة | موثوقة أصلًا في نظامك | تضيف مفتاح توقيع خارجيًا تُنفَّذ حزمه بصلاحيات root أثناء التثبيت |
| آثار جانبية | لا شيء خارج PHP | قد تستبدل بعض حزم التوزيعة (انظر أدناه) |
يكون المستودع منطقيًا حين تحتاج إلى فرع لا يأتي به إصدارك ولا تستطيع ترقية نظام التشغيل بعد، أو حين يجب أن يشغّل خادم واحد عدة إصدارات من PHP لمواقع مختلفة. أما إن كان إصدارك يأتي بفرع مدعوم يناسب تطبيقك، فحزم التوزيعة هي الخيار الأبسط.
آثار جانبية ينبغي فهمها قبل الإضافة
- إصداراته تُرتَّب أعلى من إصدارات التوزيعة. على Debian 12 يتقدم إصدار Sury
8.2.35-1+0~20261021.94+debian12~1على إصدار Debian8.2.35-1~deb12u1، وعلى Ubuntu 24.04 يتقدم إصدار الـ PPA8.3.36-1+ubuntu24.04.1+deb.sury.org+1على إصدار Ubuntu8.3.6-0ubuntu0.24.04.13. لذا تستبدل الترقية التالية حزم PHP الخاصة بتوزيعتك ما لم تضبط الأولوية. - الحزم الوصفية تشير إلى فرع أحدث. في قسم Debian 12 تعتمد الحزمتان الوصفيتان
phpوphp-fpmمن Sury على PHP 8.4. ولأنapt upgradeيثبّت حزمًا جديدة إن احتاجتها الترقية، فقد يكتسب خادم مثبتة عليه هاتان الحزمتان فرعًا كاملًا جديدًا من PHP. - قد يتغير أمر سطر الأوامر بصمت. تسجّل حزم PHP بأسلوب Debian المسار
/usr/bin/phpعبرupdate-alternativesبأولوية مبنية على رقم الإصدار، فتثبيت فرع أحدث يجعله الأمرphpالافتراضي لمهام cron والسكربتات. - يشحن مكتبات أيضًا. يتضمن المستودع نسخًا من مكتبات مثل
libgd3وlibpcre3قد تستبدل نسخ التوزيعة التي تستخدمها برامج أخرى.
الإضافة على Debian
هذه هي الخطوات الواردة في ملف README الرسمي على packages.sury.org/php، وتُنفَّذ بصلاحيات root أو عبر sudo. لا تشغّل ترقية كاملة بعدها مباشرة، بل أضف ضبط الأولوية في القسم التالي أولًا.
sudo apt-get update
sudo apt-get -y install lsb-release ca-certificates curl
sudo curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
sudo dpkg -i /tmp/debsuryorg-archive-keyring.deb
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/debsuryorg-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt-get updateعلى Ubuntu 22.04 و24.04 ما زال الـ PPA متاحًا عبر sudo add-apt-repository ppa:ondrej/php، أما على Ubuntu 26.04 فيوجّه القائم عليه المستخدمين إلى packages.sury.org/php. ولأن الـ PPA في طور الدمج، راجع صفحة Launchpad للتعليمات الحالية قبل إعداد خادم جديد.
اضبط الأولوية ليقدّم فقط ما تريده
تتيح تفضيلات APT منح المستودع أولوية منخفضة افتراضيًا ورفعها فقط للفرع الذي تحتاجه. هذا المثال لـ Debian 12 يأخذ PHP 8.4 (والحزمة المشتركة php-common التي يتطلبها) من Sury، ويُبقي كل ما عداه، بما في ذلك PHP 8.2 والمكتبات الخاصة بـ Debian، من Debian:
# /etc/apt/preferences.d/sury-php
Package: *
Pin: origin packages.sury.org
Pin-Priority: 100
Package: src:php8.4 php-common
Pin: origin packages.sury.org
Pin-Priority: 500يأتي السجل العام (*) أولًا كي يتغلب عليه السجل المحدد، كما ينصح دليل apt_preferences. وعلى Ubuntu مع الـ PPA طابق المستودع بالسطر Pin: release o=LP-PPA-ondrej-php بدل اسم المضيف. ثم تحقق من النتيجة قبل تثبيت أي شيء:
apt policy php8.4-fpm php-common libgd3 php8.2-cli
apt-get install --simulate php8.4-fpm php8.4-cli php8.4-mysqlيعرض apt policy الإصدار المرشح ومصدره لكل حزمة، وتُظهر المحاكاة بالضبط ما سيُثبَّت أو يُستبدل. وقد تحتاج الامتدادات المبنية من حزم مصدرية أخرى، مثل php8.4-redis، إلى سجلات خاصة بها إن تطلبت اعتمادياتها ذلك. عدّل ضبط الأولوية حتى لا تتضمن المحاكاة إلا ما تقصده، ثم ثبّت فعليًا. وثبّت الحزم ذات الإصدار المحدد (php8.4-fpm وphp8.4-cli) لا الحزمتين الوصفيتين php أو php-fpm، حتى لا يتغير الفرع إلا بقرارك.
إبقاؤه محدّثًا
تصل التحديثات من المستودع عبر apt update وapt upgrade المعتادين، لكنها لا تُعلن في إشعارات الأمان الخاصة بـ Debian أو Ubuntu. تابع إعلانات إصدارات php.net، وراجع apt changelog للحزم التي تستخدمها، وتأكد من ضبط أدوات الترقية التلقائية لتشمل هذا المصدر إن كنت تعتمد عليها، إذ تكتفي افتراضيًا بتحديثات مصادر التوزيعة نفسها (في Debian عبر القائمة Unattended-Upgrade::Origins-Pattern).
التراجع
- أعد توجيه خادم الويب إلى مقبس PHP-FPM الخاص بالتوزيعة إن كنت أبقيت ذلك الإصدار مثبتًا.
- أزل حزم الفرع الذي لم يوفره إلا Sury، مثلًا:
sudo apt remove $(dpkg-query -W -f='${Package}\n' 'php8.4*') - احذف الملف
/etc/apt/sources.list.d/php.listوملف ضبط الأولوية، ثم شغّلsudo apt update. - إن كانت حزم Sury قد استبدلت حزمًا من التوزيعة، فأعدها بضبط أولوية مؤقت أعلى من 1000 يسمح بالرجوع إلى إصدارات أقدم، مع المعاينة أولًا:
ثم احذف ملف الأولوية المؤقت. وعلى Ubuntu استخدم# /etc/apt/preferences.d/back-to-debian (temporary) Package: * Pin: release o=Debian Pin-Priority: 1001 sudo apt update apt-get --simulate dist-upgrade sudo apt-get dist-upgradeo=Ubuntu.
ما الذي ينبغي فعله
- فضّل PHP الخاص بتوزيعتك حين تأتي بفرع مدعوم يناسب تطبيقك.
- إن أضفت مستودع Sury أو الـ PPA فاضبط أولويته قبل أول ترقية، وتحقق بالأمر
apt policyوبتثبيت تجريبي بالمحاكاة. - ثبّت حزم PHP ذات الإصدار المحدد لا الحزم الوصفية العامة، واضبط أمر سطر الأوامر عبر
update-alternativesعن قصد. - تابع التحديثات بنفسك، فلن تظهر في إشعارات الأمان الخاصة بـ Debian أو Ubuntu.
- دوّن طريقة التراجع قبل أن تحتاج إليها، واختبرها على خادم تجريبي.
المصادر
- deb.sury.org
- packages.sury.org/php/README.txt
- packages.sury.org/php/dists
- packages.sury.org/php/dists/bookworm/Release
- launchpad.net/~ondrej/+archive/ubuntu/php
- ppa.launchpadcontent.net/ondrej/php/ubuntu/dists/noble/Release
- manpages.debian.org/trixie/apt/apt_preferences.5.en.html
- manpages.debian.org/trixie/apt/apt.8.en.html
- manpages.debian.org/trixie/apt/apt-get.8.en.html
- manpages.debian.org/trixie/dpkg-dev/deb-version.7.en.html
- salsa.debian.org/php-team/php/-/blob/debian/main/8.4/debian/php-cli.postinst.extra
- qa.debian.org/madison.php?package=php8.2&text=on
- people.canonical.com/~ubuntu-archive/madison.cgi?package=php8.3&text=on
- php.net/supported-versions.php
- sources.debian.org/src/unattended-upgrades/2.12/data/50unattended-upgrades.Debian
Comments
0 total · 0 threads