بروز رسانی سی پنل و WHM: آپدیت با upcp، بررسی نسخه و رفع خطای yum
سروری که ماهها بهروزرسانی نشده، دیر یا زود هزینهاش را میگیرد؛ وصلههای امنیتی WHM نصب نمیشوند، نسخههای PHP و پایگاهداده عقب میمانند و درست همان روزی که تصمیم میگیرید همهچیز را بهروز کنید، آپدیت وسط کار میایستد. یا دیسک پر شده یا yum روی یک بسته گیر کرده است. بروز رسانی سی پنل در حالت عادی کار سختی نیست، اما ترتیب کارها مهم است.
مسیر درست این است: اول نسخه فعلی و فضای آزاد دیسک را ببینید، بعد فضای اضافی را پاک کنید، سپس سیستمعامل را آپدیت کنید و در آخر اسکریپت upcp را اجرا کنید. در ادامه هر مرحله با دستورهای امروزیاش آمده و در انتها هم رفع خطایی که بیشتر از همه، آپدیت را وسط کار متوقف میکند.
یک نکته درباره مسیرها: /scripts در واقع لینکی به /usr/local/cpanel/scripts است؛ اگر روی سرور شما کار نکرد، مسیر کامل را بنویسید. همه دستورها هم باید با کاربر root اجرا شوند.
گام اول: نسخه فعلی سی پنل را ببینید
پیش از هر کاری بدانید از کجا شروع میکنید. با SSH و کاربر root وارد سرور شوید و این دستور را بزنید:
/usr/local/cpanel/cpanel -V
خروجی، شماره نسخه و build فعلی cPanel را نشان میدهد. در آموزشهای قدیمی این دستور به شکل # /usr/local/cpanel/cpanel -V نوشته شده؛ آن علامت # فقط نشانه پرامپت کاربر root است و نباید تایپ شود.
گام دوم: مطمئن شوید دیسک جا دارد
کمبود فضای دیسک یکی از شایعترین دلایل نیمهکاره ماندن آپدیت سی پنل است؛ آپدیت وسط کار قطع میشود و سرور را در وضعیتی نامشخص رها میکند. پیش از شروع، هم فضای آزاد و هم inodeها را چک کنید:
df -h df -i
اگر پارتیشن ریشه (/) یا پارتیشنی که /usr روی آن است فضای آزاد کمی دارد، تا آن را خالی نکردهاید آپدیت را شروع نکنید. کمبود فضا معمولاً خودش را با پیامهای خطای مربوط به دیسک در WHM نشان میدهد؛ نمونهاش را در مشکل Remove WHM Disk در لینوکس توضیح دادهایم.
برای پیدا کردن پرمصرفترین دایرکتوریها هم این دستور کمک میکند:
du -sh /home/* | sort -h | tail -20
گام سوم: پاکسازی فضای سرور سی پنل
اگر فضا کم بود، این موارد را بهترتیب انجام دهید. ترتیبشان از بیخطرترین به خطرناکترین است.
۱. پاک کردن کش بستهها
yum clean all
روی سیستمهای جدیدتر (AlmaLinux، Rocky Linux و بهطور کلی نسخههای ۸ و ۹ خانواده RHEL) مدیر بسته dnf است و دستور معادل dnf clean all خواهد بود؛ روی این سیستمها yum فقط یک لینک به dnf است و همان کار را میکند. اگر سرور شما cPanel روی Ubuntu دارد، معادلش apt clean است.
۲. حذف بکاپهای قدیمی داخل هوم کاربران
اول ببینید چه چیزی قرار است حذف شود، بعد حذف کنید:
ls -lh /home/*/backup*.tar.gz
rm -fv /home/*/backup*.tar.gz
اینها بکاپهایی هستند که خود کاربران از بخش Backup سی پنل ساختهاند و معمولاً بلااستفاده ماندهاند، ولی حذفشان برگشتپذیر نیست؛ اگر کاربری روی بکاپش حساب باز کرده، اول به او اطلاع دهید. بکاپهای خودکار سرور جای دیگری (بهطور پیشفرض /backup) ذخیره میشوند؛ آنها را دستی پاک نکنید و بهجایش مدت نگهداری را از تنظیمات Backup در WHM کم کنید.
۳. پاک کردن فایلهای موقت فایل منیجر
rm -fv /home/*/tmp/Cpanel_*
روی سرورهای خیلی قدیمی ممکن است پوشه بکاپ Fantastico هم باقی مانده باشد. این اسکریپت سالهاست منسوخ شده و اگر مسیر زیر روی سرور شما وجود نداشت، یعنی درگیرش نیستید و میتوانید از آن بگذرید:
rm -rfv /home/*/fantastico_backups
۴. تعیین تکلیف اکانتهای بلااستفاده
اکانتهای ساسپندشده همچنان تمام فضای دیسک را اشغال میکنند. فهرستشان اینجاست:
ls /var/cpanel/suspended
حذف اکانت آخرین گزینه است، چون تمام سایت، ایمیل و دیتابیس آن کاربر برای همیشه پاک میشود. امنترین راه، بخش Terminate Accounts در WHM است؛ آنجا فهرست اکانتها را میبینید و پیش از تأیید مشخص میکنید رکوردهای DNS دامنه باقی بماند یا حذف شود. اگر حتماً باید از خط فرمان این کار را انجام دهید، معادل رسمیاش تابع removeacct در WHM API 1 است و اسکریپت قدیمی /scripts/killacct هم روی بعضی نسخهها هنوز وجود دارد؛ ولی شکل پارامترهای هر دو بین نسخههای cPanel تغییر کرده است. دستور را از آموزشهای قدیمی کپی نکنید و اول مستندات نسخه خودتان را ببینید، چون یک پارامتر اشتباه اینجا یعنی پاک شدن اکانت اشتباه.
گام چهارم: آپدیت سیستمعامل
حالا که دیسک جا دارد، اول لینوکس را بهروز کنید تا بستههای پایه با نسخه جدید cPanel هماهنگ باشند:
yum update -y
روی AlmaLinux و Rocky Linux و RHEL نسخه ۸ به بعد، دستور رایجتر dnf update -y است و روی Ubuntu باید apt update && apt upgrade بزنید.
اگر این آپدیت کرنل جدیدی نصب کرد، برای فعال شدنش سرور باید ریاستارت شود؛ ریاستارت را به بعد از تمام شدن آپدیت cPanel موکول کنید، نه وسط کار.
یک هشدار مهم: اگر سرور شما هنوز روی CentOS 6 یا CentOS 7 است، آن توزیع به پایان پشتیبانی رسیده و دیگر هیچ وصله امنیتی نمیگیرد؛ در این حالت مشکل شما آپدیت cPanel نیست، مهاجرت سیستمعامل است. برای CentOS 7 پروژهای به نام ELevate وجود دارد که cPanel هم نسخه خودش از آن را نگهداری میکند و ارتقای درجا به AlmaLinux 8 را انجام میدهد؛ برای CentOS 6 چنین مسیری نیست و باید روی سروری تازه با سیستمعامل جدید، اکانتها را منتقل کنید. در هر دو حالت پیش از شروع بکاپ کامل بگیرید و مستندات رسمی را بخوانید.
روش اول (توصیهشده): آپدیت با اسکریپت upcp از طریق SSH
بهترین راه بهروزرسانی سی پنل، اجرای اسکریپت upcp در SSH است:
/scripts/upcp
اگر میخواهید حتی وقتی سیستم بهروز است هم فایلها دوباره نصب و بازسازی شوند، سوئیچ --force را اضافه کنید. این کار برای درست کردن نصب ناقص یا آپدیت نیمهکارهمانده مفید است:
/scripts/upcp --force
یک نکته که در آموزشهای قدیمی گفته نمیشود: این فرایند طولانی است و اگر اتصال SSH شما قطع شود، ممکن است وسط کار بماند. پس اجرایش را داخل screen یا tmux ببرید تا مستقل از اتصال شما ادامه پیدا کند:
screen -S upcp /scripts/upcp --force
با Ctrl+A و بعد D از صفحه خارج میشوید و هر وقت خواستید با screen -r upcp برمیگردید و ادامه کار را میبینید. اگر screen روی سرور نصب نیست، اول با مدیر بسته سیستم نصبش کنید.
در طول آپدیت سرور را ریست نکنید، سرویسها را دستی ریاستارت نکنید و اجازه دهید کار تمام شود. مدت زمانش معمولاً چند دقیقه تا حدود بیست دقیقه است، ولی روی سرورهای شلوغ یا وقتی چند نسخه عقب هستید بیشتر هم طول میکشد. اگر لازم شد از روند کار یا دلیل توقف آن سر دربیاورید، لاگهای آپدیت در /var/cpanel/updatelogs/ ذخیره میشوند.
روش دوم: آپدیت از محیط گرافیکی WHM
اگر با SSH راحت نیستید، همین کار از خود WHM هم انجام میشود:
- با کاربر root وارد WHM شوید.
- در کادر جستوجوی منو عبارت Upgrade to Latest Version را بزنید و وارد آن بخش شوید.
- روی دکمه Upgrade کلیک کنید.
- اگر میخواهید پنل را وادار کنید حتی در صورت بهروز بودن هم upcp را اجرا کند، پیش از کلیک، تیک گزینه Force a reinstall even if the system is up to date را بزنید.
هر دو روش یک کار را انجام میدهند و در نهایت همان اسکریپت upcp روی سرور اجرا میشود، اما روش SSH داخل screen مطمئنتر است؛ در روش گرافیکی اگر مرورگر یا اینترنت شما قطع شود، دیگر خروجی آپدیت را نمیبینید و پیگیری وضعیت سختتر خواهد بود.
ضمناً cPanel بهصورت پیشفرض یک زمانبند شبانه برای همین اسکریپت دارد. اینکه سرور خودکار آپدیت شود، فقط اطلاع بدهد یا اصلاً بهروز نشود، در بخش Update Preferences در WHM تعیین میشود؛ اگر آپدیتها خودبهخود انجام میشوند یا اصلاً انجام نمیشوند، تنظیمات این صفحه را ببینید.
وقتی آپدیت بهخاطر یک بسته خراب متوقف میشود
گاهی پیش از رسیدن به upcp، همان yum update با خطای وابستگی میایستد. کلاسیکترین نمونهاش روی سرورهای RHEL و cPanel مربوط به بسته bind-chroot است و خروجی چیزی شبیه این دارد:
Error: Package: 32:bind-chroot-9.8.2-0.17.rc1.el6_4.4.x86_64 (@updates)
Requires: bind = 32:9.8.2-0.17.rc1.el6_4.4
Removing: 32:bind-9.8.2-0.17.rc1.el6_4.4.x86_64 (@updates)
Updated By: 32:bind-9.8.2-0.17.rc1.el6_4.5.x86_64 (updates)
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
ریشه ماجرا ساده است: یکی از دو بستهای که به هم وابستهاند (اینجا bind و bind-chroot) در فهرست exclude مدیر بسته قرار گرفته و جلوی آپدیتش گرفته شده، ولی بسته دیگر آزاد است. yum نمیتواند یکی را بهروز کند و آن یکی را دستنخورده بگذارد، پس کل کار را متوقف میکند. نام بسته ممکن است روی سرور شما چیز دیگری باشد، ولی راهحلها همینهاست.
راه اول: رد کردن بسته مشکلدار
yum update -y --skip-broken
با این سوئیچ بقیه بستهها بهروز میشوند و بسته مشکلدار به حال خودش رها میشود. dnf هم همین سوئیچ را میپذیرد، هرچند همیشه دقیقاً مثل yum عمل نمیکند و ممکن است باز هم با همان خطای وابستگی متوقف شوید. این راه سریع است ولی صورتمسئله را پاک نمیکند؛ بسته کنارگذاشتهشده همچنان قدیمی و بدون وصله میماند.
راه دوم: اصلاح فهرست exclude
راه اصولیتر این است که فایل پیکربندی مدیر بسته را باز کنید و نام بسته گیرکرده را از خط exclude = بردارید تا هر دو بسته با هم آپدیت شوند:
vi /etc/yum.conf
روی نسخههای ۸ و ۹ خانواده RHEL، فایل واقعی /etc/dnf/dnf.conf است و /etc/yum.conf فقط یک لینک به آن است؛ میتوانید مستقیم همان را ویرایش کنید. بعد از ذخیره، دوباره بزنید:
yum update -y
دو نکته: اول اینکه این فهرست استثنا را خود cPanel برای محافظت از بستههای تحت مدیریتش میسازد و ممکن است در بهروزرسانیهای بعدی دوباره نوشته شود؛ پس تغییرتان را دائمی فرض نکنید و بستههای حساسی مثل exim و MySQL و PHP را از این فهرست بیرون نیاورید تا آپدیت مستقیم لینوکس خرابشان نکند.
دوم اینکه بعد از آپدیت شدن BIND، سرویس DNS باید ریاستارت شود. روش درست روی سرور سی پنل این است:
/scripts/restartsrv_named
در آموزشهای قدیمی بهجای این دستور service named restart یا /etc/init.d/named restart نوشته شده است. این دو شکل منسوخ شدهاند و روی توزیعهای امروزی معادل درستشان systemctl restart named است؛ ولی روی سرور دارای cPanel بهتر است سرویسها را با اسکریپتهای restartsrv یا از بخش Restart Services در WHM ریاستارت کنید تا پنل هم از تغییر باخبر شود.
بعد از آپدیت چه چیزی را چک کنیم
وقتی upcp تمام شد، سه کار کوچک باقی میماند: دوباره /usr/local/cpanel/cpanel -V را بزنید تا مطمئن شوید نسخه واقعاً جلو رفته است، در WHM بخش Service Status را ببینید تا سرویسی پایین نمانده باشد، و اگر چیزی درست کار نمیکند سراغ لاگ آپدیت در /var/cpanel/updatelogs/ بروید.
اگر تازه میخواهید این کنترل پنل را روی سرورتان بالا بیاورید، مراحل نصبش را در آموزش نصب سی پنل WHM/cPanel در سرور لینوکس نوشتهایم. و اگر ترجیح میدهید این کارها را خودتان انجام ندهید، میتوانید درخواست کانفیگ و نگهداری سرور را با کارشناسان آنلاین سرور در میان بگذارید.
