منبع اصلی نوشتار زیر در این لینک قرار دارد

پچ جادویی :) برای آرچ لینوکس

این نوید، باید بازاریاب بشه یا فروشنده! این نوشته رو بخونید : پچ جادویی « Linux اینقدر تعریف کرد که منم تصمیم گرفتم انجامش بدم!
منتها، من دوست ندارم اینکار رو مستقیم انجام بدم، تا وفتی سیستم پکیج آرچ هست کی میره سراغ کامپایل مستقیم؟
ABS برای اینکار، یعنی کامپایل کردن هسته لینوکس بهترینه!
اینجوری یه پکیج ساده داری که اگه نخوای میتونی با pacman حذفش کنی یا قبلی رو نصب کنی.
این سیستم ABS که به نظرم باید تو همه نسخه های لینوکس اجباری بشه!!!!! :) به شما امکان میده تا سورس اصلی همه پکیجهای موجود توی مخازن آرچ رو بگیرید. این سورس تو فرمت AUR هستش، و فقط با یه دستور makepkg ساده قابل ساختنه.
۱- تنظیم abs
برای استفاده از abs اول نصبش کنید :

pacman -S abs

البته معمولا نصبه :) البته base-devel هم لازمه، که اونم نصبه ولی خوب :

pacman -S base-devel

حالا وقت ویرایش تنظیماته، فایل تنظیمات abs اینجاست :

/etc/abs.conf 

با ویرایشگر مورد علاقتون بازش کنید، بگردید دنبال خط REPOS و تبدیلش کنید به یه چیزی شبیه این :

REPOS=(core extra community testing !community-testing)

البته مطمئن بشید testing هم هست، هر کدوم رو نمیخواید کافیه یه علامت ! جلوش بگذارید. برای کرنل ۳۶ (linux-2.6.36 ) باید testing هم باشه، چون فعلا این نسخه توی testing هست. ممکنه توی زمانی که شما اینو میخونید، رفته باشه تو core یا اینکه اصلا قدیمی شده باشه :)‌
به هر حال، وقت آپدیته. کافیه ترمینال رو باز کنید و بنویسید abs و منتظر بشید. اگه همه رو انتخاب کرده باشید یه ۱۶ مگی دانلود داره. این فقط برای دفعه اوله بعدا دیگه فقط تفاوتها رو میگیره.
صبر کنید تا تموم بشه، که بستگی داره به سرعت اینترنتتون. حالا تمام فایلهای لازم برای ساختن کل مخازن، توی فولدر

/var/abs/

ذخیره شده.

– نکته اینکه کل دستوراتی که تا به الان نوشتم همه و همه باید با دسترسی ادمین اجرا بشه،‌مثلا با sudo .
ما الان فقط میخوایم کرنل رو کامپایل کنیم. البته باقی رو هم داشته باشید شاید بعدا لازمتون شد!! بگردید دنبال kernel26 تو پوشه testing البته الان. وگرنه بعدها ممکنه توی پوشه core باشه. کل پوشه رو کپی کنید یه جای دیگه،‌مثلا تو home به اصلشون دست نزنید چون با آپدیت مجدد تمام تغییرات شما هیچی میشه.
2- ایجاد تغییرات
– یه فایل PKGBUILD اونجا هست، اونو باز کنید بگردید دنبال

_basekernel=2.6.36

اگه عدد دیگه ای بود، اون قسمتی که پایینتر درباره طریقه patch کردن این پچ جادویی محترم هست رو انجام ندید! چون اون قراره برای نسخه ۳۶ باشه.
اوایل فایل یه خط هست، به این صورت :

pkgname=('kernel26' 'kernel26-headers' 'kernel26-docs') # Build stock -ARCH kernel

این خط رو در بیارید به شکل زیر :

pkgname=('kernel26-elbix' 'kernel26-headers-elbix' 'kernel26-docs-elbix') # Build stock -ARCH kernel

البته به جای elbix اونی که دوست دارید بگذارید. در حقیقت این قسمت میشه اسم کرنل شما. اینجوری کرنل اصلی سرجاشه و در صورت بروز مشکل میتونید ازش استفاده کنید.
از این بعد، تو این نوشته elbix دیدید، اسم مورد نظر خودتونو بگذارید.
بعدش باید سه خط دیگه رو هم ویرایش کنید تا این تغییرات شما کامل شه، بگردید دنبال خط

package_kernel26() {
  pkgdesc="The Linux Kernel and modules"

تبدیلش کنید به :

package_kernel26-elbix() {
  pkgdesc="The Linux Kernel and modules"

نمیگم که به حای elbix چی بنویسید!!! (بالاتر گفتم :)‌ )
همینطور

package_kernel26-headers() {
  pkgdesc="Header files and scripts for building modules for kernel26"

روبه :

package_kernel26-headers-elbix() {
  pkgdesc="Header files and scripts for building modules for kernel26"

و درنهایت :

package_kernel26-docs() {
pkgdesc="Kernel hackers manual - HTML documentation that comes with the Linux kernel."

رو به :

package_kernel26-docs-elbix() {
pkgdesc="Kernel hackers manual - HTML documentation that comes with the Linux kernel."

۲-b اضافات و مخلفات اختیاری…
اگه نمیخواید سورس رو پچ کنید، یعنی این قضیه پچ به خصوص در نظر شما نیست، و فقط میخواید کرنل رو کامپایل کنید برید گام بعدی که همون کامپایل نهایی با makepkg هستش، وگرنه توی همین فایل، این خطوط رو پیدا کنید :

source=(ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-$_basekernel.tar.bz2
        ftp://ftp.archlinux.org/other/kernel26/${_patchname}.bz2
        # the main kernel config files
        config config.x86_64
        # standard config files for mkinitcpio ramdisk
        kernel26.preset)
md5sums=('61f3739a73afb6914cb007f37fb09b62'
         '5b3c66f93c0de79aacd986a545f863b6'
         '1ed53b9b64b8889563502177b0b428b5'
         '89ba24b9c346a930378ca22cf377c75f'
         '25584700a0a679542929c4bed31433b6')

فایل patch رو از اینجا بگیرید. کپیش کنید کنار همین فایل PKGBUILD و یه مشت فایل دیگه که کنارشه. اسمش باید باشه Galbraith-patch.patch .
حالا باید به PKGBUILD اضافه بشه. اون خطوط بالایی باید بشن این :

source=(ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-$_basekernel.tar.bz2
        ftp://ftp.archlinux.org/other/kernel26/${_patchname}.bz2
        # the main kernel config files
        config config.x86_64
        # standard config files for mkinitcpio ramdisk
        kernel26.preset
	Galbraith-patch.patch)
md5sums=('61f3739a73afb6914cb007f37fb09b62'
         '5b3c66f93c0de79aacd986a545f863b6'
         '1ed53b9b64b8889563502177b0b428b5'
         '89ba24b9c346a930378ca22cf377c75f'
         '25584700a0a679542929c4bed31433b6'
	 '840614a995db60bdb155c84a8b2e1acc')

فقط دقت کنید، خط آخر از آرایه بالایی و خط آخر از آرایه پایینی تغییر کرده، تو بالایی اسم فایل پچه که باید باشه Galbraith-patch.patch و پایینی md5sum همون فایل که برای من شد : 840614a995db60bdb155c84a8b2e1acc شما هم خودتون میتونید چک کنید. به جای کپی پیست کردن کل این آرایه ها فقط این دو تا رو به انتهای آرایه اضافه کنید.

من میخوام این پچ رو هم اضافه کنه. قسمت build() رو پیدا کنید و تغییرش بدید خطوط اولش اینه :

  cd ${srcdir}/linux-$_basekernel
  # Add -ARCH patches
  # See http://projects.archlinux.org/linux-2.6-ARCH.git/
  patch -Np1 -i ${srcdir}/${_patchname}

  if [ "$CARCH" = "x86_64" ]; then

تغییرش بدید به :

  cp Galbraith-patch.patch  ${srcdir}/linux-$_basekernel
  cd ${srcdir}/linux-$_basekernel
  # Add -ARCH patches
  # See http://projects.archlinux.org/linux-2.6-ARCH.git/
  patch -Np1  -i Galbraith-patch.patch
  patch -Np1 -i ${srcdir}/${_patchname}
  
  if [ "$CARCH" = "x86_64" ]; then

۳- کامپایل و نصب
خوب همین دیگه. توی ترمینال بزنید makepkg -s ممکنه تا یه ساعت طول بکشه تا پکیج ساخته بشه. البته وقتی این makepkg رو میزنید یه سوال میپرسه، بزنید y (مربوط به همین پچه میگه فعالش کنم یا نه) البته میشه یه جوری تو فایل config که اونجا هست میشه تنظیم کرد که نپرسه، برای اونها که گیگ ترن :) میگم و اگه نمیفهمید چی شد، با شما نیستم :)
–BEGIN GEEK BLOCK–
بسته به سیستمتون، اگه ۳۲ بیتی هستید، فایل config و اگه از سیستم ۶۴ (x86_64 ) استفاده میکنید فایل config.x86_64 رو باز کنید، در انتهاش بزنید

CONFIG_SCHED_AUTOGROUP=y

باقی تنظیمات هم قابل تغییره، اگه دوست دارید آستین بالا بزنید و …
بعد تو آرایه md5sum (چند خط بالاتر نوشتمش) md5 فایل دستکاری شده رو به جای md5 قبلی بگذارید.
–END GEEK BLOCK–
بعد از زدن فرمان makepkg -s منتظر بشید، ممکنه تا یه ساعت هم طول بکشه(در حدود ۷۰ مگابایت هم دانلود داره، سورس کرنل رو میگیره، تو همین فولدر قرار میده. فقط دفعه اول اینکار رو انجام میده، خودتون میتونید دستی بگیریدش، و بعد توی فولدر کپیش کنید. یه بک آپ هم بدک نیست ). بعد تموم که شد، با کمک pacman نصبش کنید :

 sudo pacman -U $(ls | grep elbix)

البته من سه تا پکیج رو با یه دستور نصب کردم، اگه شما به جای makepkg -s بزنید makepkg -si خودش میره برای نصب. اگه به هر دلیلی وسط نصب متوقفش کردید تا بعدا اینکار رو انجام بدید دو پوشه pkg و src رو که ساخته میشن پاک کنید بعد بزنید که بسازه پکیج رو. اگر هم از قبل پکیج ساخته شده و شما میخواید مجددا کامپایل بشه، این دو پوشه رو پاک کنید و بزنید makepkg -sif همین :)
۴- درایور گرافیک (به طور خاص nvidia )
اصلاحیه :‌
اگه شما از دو تا کرنل با دو تا ورژن مختلف استفاده میکنید، یعنی اینکه الان دارید کامپایلش میکنید با اون که دارید هم نسخه نیست، مثل من که یکیش ۳۵ و این جدیده ۳۶ هستش، وقتی بوت کنید به کرنل قبلی، درایور کار نمیکنه. اونوقت باید درایور همون رو نصب کنید که این یکی رو پاک میکنه :(
یه چیزی بود تو AUR که میتونید از AUR (en) – nvidia-all بگیریدش، قاعدتا این درایور باید بعد از ایجاد هر کرنل یه بار دیگه make همه مشکلات رو برطرف کنه، اگه ورژن دو تا کرنلتون یکی باشه خیلی خوب و تمیز کار میکنه، اما بازم اگه نسخه ها متفاوت باشن کار نمیکنه گر چه قاعدتا باید کار کنه.
کسی نمیدونه چطور میشه این مشکل رو حل کرد که فقط یه درایور برای همه کرنلها داشته باشیم؟؟ من نمیخوام مستقیما درایور nvidia رو نصب کنم،(با دانلود از سایت و اجرای مستقیم فایل run)‌این برای من راه حل نیست.

حالا مشکل پکیج nvidia هستش. من در مورد بقیه کارتهای گرافیک نمیدونم ولی میدونم که ممکنه الان شما خطا گرفته باشید و nvidia اجازه نصب به شما نداده باشه. خوب باید درایور nvidia رو هم برای این کرنل دستکاری کنید :)‌
قبلا با abs گرفتیمش توی پوشه :

/var/abs/testing/nvidia/

قرار داره. اونم کپی کنید یه جای دیگه. حالا باید اونم دستکاری بشه. (دقیقا به ازای هر کرنل یه درایور nvidia هست، اگه شما کرنل توی testing رو استفاده کردید، nvidia رو از همون پوشه استفاده کنید، اگر مثلا از تو core گرقته بودید، نسخه nvidia که تو core هست رو بگیرید.)
4-a ویرایش پکیج
خوب، فایل PKGBUILD مربوط به nvidia رو باز کنید. خطوط اولش به اینصورت باید دربیاد :

pkgname=nvidia
pkgver=260.19.21
_kernver='2.6.36-elbix'
pkgrel=2
pkgdesc="NVIDIA drivers for kernel26."
arch=('i686' 'x86_64')
url="http://www.nvidia.com/"
depends=('kernel26-elbix>=2.6.36' 'kernel26-elbix<2.6.37' "nvidia-utils=${pkgver}")
makedepends=('kernel26-headers-elbix>=2.6.36' 'kernel26-headers-elbix<2.6.37')
conflicts=('nvidia-96xx' 'nvidia-173xx')
license=('custom')
install=nvidia.install

به اون قسمتهایی که من elbix استفاده کردم و اون ARCH که بازم با elbix عوضش کردم، دقت کنید شما هم باید همین کار رو دقیقا انجام بدید.
حتی میتونید اسم پکیج (nvidia) رو عوض کنید که بعدا وقت آپدیت براتون دردسر نشه، من حسش نبود عوض نکردم و میدونم که بعدا پشیمون میشم!

بعد فایل nvidia.install رو باز کنید و عوضش کنید به این صورت :

post_install() {
	KERNEL_VERSION='2.6.36-elbix'
	depmod $KERNEL_VERSION
}

post_upgrade() {
	post_install
	rmmod nvidia || echo 'In order to use the new nvidia module, exit Xserver and unload it manually.'
}

post_remove() {
	KERNEL_VERSION='2.6.36-elbix'
	depmod $KERNEL_VERSION
}

به اون elbix ها توجه کنید. اونا با اسم مورد نظر شما عوض میشن.
حالا اینم بسازید (با makepkg -s یا اگه میخواید بسازه و نصب کنه با makepkg -si ) بعد فایل تولید شده رو نصب کنید، درایور قبلی nvidia باید پاک بشه.
۵- تنظیمات بوت (به طور خاص گراب ۱)
حالا میخوایم گراب رو تغییر بدیم که با این کرنل هم کار کنه :)‌ من گراب قدیمی دارم نه گراب ۲ فقط کافیه یه قسمت جدید بهش اضافه کنید،‌ برای کرنل جدید. مثلا من توی تنظیمات گراب ۱ ، یعنی فایل menu.lst یه چیزی داشتم شبیه این :

title  Arch Linux (fbsplash)
root   (hd0,10)
kernel /vmlinuz26 root=/dev/sda1 ro logo.nologo quiet nomodeset vga=792 console=tty1 splash=silent,fadein,fadeout,theme:arch-banner-icons
initrd /kernel26.img

البته این توش دست برده شده و fbsplash هم داره :) من یه منوی دیگه هم بعد از این اضافه کردم اینطوری :

title  Arch Linux v36 (fbsplash)
root   (hd0,10)
kernel /vmlinuz26-elbix root=/dev/sda1 ro logo.nologo quiet nomodeset vga=792 console=tty1 splash=silent,fadein,fadeout,theme:arch-banner-icons
initrd /kernel26-elbix.img

به اون elbix ها توجه خاصی کنید لطفا!!!
گراب ۲ یا BURG هم فقط جای فایل تنظیماتشون یه کم متفاوته و خودتون میدونید و اونها!

۶- نشد!! خراب شد !! چی کار کنم؟؟؟
هیچی بابا! اینهمه از مزایای pacman گفتم! نشد حذفش کنید!

pacman -R $(pacman -Qq | grep elbix)

بعد هم دوباره درایور nvidia اصلی رو نصب کنید :)‌ ساده تر ممکنه؟



برچسب ها : , , , , , , ,