بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
إنشاء توزيعة generic مبنية على فيدورا .
ماذا يعني هذا الكلام ؟
توفر فيدورا حزمتين بإسم fedora-release و fedora-logos تحتوي حزمة fedora-logos على شعار فيدورا وبعض الأيقونات الخاصة بها ومثلا ثيم plymouth وهو الشيء المتحرك الذي يظهر أثناء إقلاع النظام والحزمة الأخرى fedora-release توفر الملفات والإعدادات الضرورية التي تثبت هوية التوزيعة وإسمها على أنها إسما مثلا Fedora وإصدارها مثلا 29 .توفر أيضا فيدورا حزمتين بذات الهدف بإسم generic-release و generic-logos وتسمى generic أي تم نزع شعار فيدورا وإسم فيدورا إستبدل بإسم generic وبعدها يمكنك أن تفعل ما يحلو لك لاكن لا يمكنك أن تنشر شيء تعتبر خاص بك وفيه شعار فيدورا و إسمها .
الأن إذا أردت أن تقوم بعمل توزيعة للإستخدام الشخصي يمكنك بناء التوزيعة وإستبدال fedora-release و fedora-logos ب generic-release و generic-logos الذي سيختلف إسم التوزيعة سيصبح generic بدل Fedora وأيقونات وشعار فيدورا وثيم plymouth الذي يميزها لن تجده .
أما إذا أردت فعلا بناء توزيعة ونشرها بشكل رسمي ستحتاج ان تكون تعرف كيف تحزم وكيف تعمل مستودع خاص إن كان على copr مثلا أو غيره وتحتاج أن تعرف التصميم لإستبدال أيقونات فيدورا و ثيم plymouth بشيء خاص بتوزيعتك وهنا لن أدخل بهذا لأن الأمر معرفة متراكمة ولا يمكن شرحها بهذه السهولة لاكن يمكنك أن تبدأ بالتعديل على generic-release و generic-logos أو fedora-release و fedora-logos نفسهم (تحتاج معرفة بالتصميم وتحزيم rpm ) .
فإذا في هذا الشرح سأستخدم generic-release و generic-logos لإستبدال fedora-release و fedora-logos ,السبب لأنهم موجودين بالفعل في المستودعات الرسمية .
ماذا أحتاج لأبدا العمل ؟
تحتاج فيدورا 64bit و مساحة فارغة كافية في القسم روت أظن 15 GB كافية .تحتاج أن تعرف كيف تتعامل مع محرر النصوص vi .
سأستخدم sudo لبعض الصلاحيات الأفضل إستخدام sudo حتى تنتبه ما هي الأوامر التي تحتاج صلاحيات أغلبها لن يحتاج هذا .
لنبدأ .
1-أولا تثبيت mock وهو شيء مثل بيئة معزولة عن النظام الأساسي ,أيضا إضافة المستخدم الخاص بك لمجموعة mock حتى نسهل العمل.
sudo dnf install mock
sudo usermod -a -G mock $USER
بعد إضافة المستخدم الخاص بك لمجموعة mock نقوم بعمل إعادة إقلاع للنظام أو logout ثم ندخل من جديد وهذا أمر مهم .
2-من خلال mock عمل بيئة خاصة ب Fedora 29 64bit ,في المستقبل مع الوقت في حال توفر إصدارات أخرى من فيدورا فقط إستبدل 29 برقم الإصدار الجديد .
mock -r fedora-29-x86_64 --init
3-الأن إذا صح التعبير داخل بيئة mock نقوم بتثبيت بعض الأشياء كما في الأسفل (سأسمي الأمر ببيئة mock لتسهيل الشرح ) .
mock -r fedora-29-x86_64 --install lorax-lmc-novirt vim-minimal pykickstart git
4-من النظام الأساسي نعدل على إعدادات mock.
sudo vi /etc/mock/site-defaults.cfg
ندخل على هذا الملف ونبحث عن السطر الذي يحتوي config_opts['rpmbuild_networking'] نجعله True ونزيل التعليق من أول السطر إذا كان موجود أي نزيل علامة الشبكة # من أول السطر في حال وجودها .
5-نغلق selinux بشكل مؤقت هذا إن كان مفعل ,وهو ياتي مفعل بشكل إفتراضي في فيدورا .
sudo setenforce 0
6-ندخل على بيئة mock الأن كل شيء نفعله سيتم على هذه البيئة وليس النظام الأساسي .
mock -r fedora-29-x86_64 --shell --old-chroot
7-ندخل على مجلد ال home داخل بيئة mock ونستنسج المستودع الذي يحتوي ملفات فيدورا الرسمية التي تستخدم لبناء التوزيعة وهي ملفات تسمى kickstart (نلاحظ b f29 أي إخترت branch إصدار 29 إذا أردت التجريبية rawhide نختار master ).
ملفات kickstart شيء مثل إستمارة فيها أوامر محددة مثلا قم بإضافة االمستودع الفلاني أثناء بناء التوزيهة وقم بإضافة الحزمة الفلانية وقم بإضافة المستخدم الفلاني والكثير من الأمور (إبحثو في المدونة عن kickstart سبق وتكلمت عنها في شروحات قديمة غالبا ذات المبدأ لاكن قد تختلف طريقة بناء التوزيعة الان وإبحثو أيضا في وثائق fedora و redhat و centos)
cd /home
git clone -b f29 https://pagure.io/fedora-kickstarts
8-التعديل على ملفات kickstart .
cd fedora-kickstarts
ls
ls |grep -i live
الان لو إستعرضنا الملفات نجد الكثير من الملفات الذي يهمنا الملفات التي تحتوي كلمة Live مثلا سأقوم بهذا الشرح ببناء توزيعة generic مبنية على Fedora Kde x86_64 وسأقوم بإضافة بعض المستودعات الحزم مثل flash player و ال codecs و مثلا vlc .
لهذا سأعدل على ملف بإسم fedora-live-kde.ks لاكن بعد أن أقوم بعمل له ksflatten وهو بشكل بسيط إنشاء ملف جديد بإسم مختلف بعد قراءة ملف fedora-live-kde.ks وكل الملفات التي يعتمد عليها وإخراج كما قلت ملف kickstart أخر بإسم أخر وسيكون ملف وحيد يحتوي كل المعلومات وممكن أيضا التعديل على fedora-live-kde.ks والملفات التي يحتاجها قبل عمل له ksflatten لاكن هكذا أسهل للشرح .
ksflatten --config fedora-live-kde.ks -o flat-fedora-live-kde.ks --version F29
ls
نلاحظ سيتم إنشاء ملف جديد بإسم flat-fedora-live-kde.ks وهذا الملف الذي سنعدل عليه .
9-التعديل على ملف flat-fedora-live-kde.ks .
vi flat-fedora-live-kde.ks
نلاحظ أضفت مستودعات من عندي بهذه الطريقة لاكن تجاهلو local-repo لأنه مستودع محلي وأعطيته أولوية من خلال cost=1.
نلاحظ أيضا في القسم %packages أولا ازلت fedora-release و fedora-logos من خلال عمل علامة ناقص قبل إسمهم ثم طلبت تثبيت generic-release و generig-logos .
مع الملاحظ إذا كان لديك حزم خاصة مثل حزم release و logos لتوزيعة خاصة بك يمكنك بذات الطريقة القيام بالامر أي إستبدال ال generic بالخاص بك لاكن بعد إضافة المستودع الخاص بك الذي يحتوي هذه الحزم شيء مثل إضافة المستودعات في أول صورة .
بذات القسم أي داخل packages% وقبل end% أضفت الحزم التي أريدها مثل ال codecs و vlc وغيره لاكن اكرر يجب أن تضمن انهم موجودين في المستودعات التي حدتها ويجب أن تتاكد أنهم لا يسببو مشاكل مثل تعارض في الحزم .
أخر ملاحظة إذا أضفت الكثير من الحزم حاول قدر الإمكان تقدير حجمهم وقم بتكبير part مثلا إلى 7500 أي 7.5GB تقريبا ,الأمر يعتمد على حسب ما أضفته لاكن حاول أن تقدر بشكل جيد على ان لا تكون الإضافة كبيرة جدا وإلا ستفشل عملية بناء التوزيعة .
10- أخيرا عملية البناء وقد تأخذ ساعات مثلا ساعتين على حسب سرعة جهازك وسرعة الإنترنت لديك وحجم الحزم الموجودة والتي أضفتها انت أيضا .
livemedia-creator --ks flat-fedora-live-kde.ks --no-virt --resultdir /var/lmc --project Generig-Kde-Live --make-iso --volid Generic-Kde-29 --iso-only --iso-name Generic-Kde-Live-29-x86_64.iso --releasever 29 --title Generic-Kde-Live --macboot
ممكن إستبدال كلمة Generic .
بعد الإنتهاء ستجد ملف ال iso داخل بيئة mock في var/lmc/ وفي الجهاز الحقيقي في هذا المسار .
ls /var/lib/mock/fedora-29-x86_64/root/var/lmc
أخر ملاحظة فشل البناء قد يحذف كل الحزم التي تم تنزيلها وإذا حاولة مرى أخرى سيقوم بإعادة تنزيل الحزم التي قد يصل حجمها على حسب مثلا 1.5GB أو أكثر لهذا أنا أستخدم مستودع محلي بطريقة ما لا مجال لشرحها هنا .
وبعد إعادة المحاولة إذا واجهت هذه المشكلة .
The results_dir (/var/lmc) should not exist, please delete or move its contents
قم بحذف المجلد المذكور .
rm -r /var/lmc
معلومات عامة .
ملفات kickstart تستخدم من قبل مثبت فيدورا وإسمه anaconda لأتممة التثبيت في الحقيقة هذا ما إستخدم هنا بطريقة ما أي بإستخدام livemedia-creator قام الأخير بطريقة ما بإستخدام anaconda و ملف kickstart لاتممة التثبيت على image حددناها بحجم 7500 ثم قام بطريقة ما بعمل الازم لإنشاء ملف iso يحتوي ما قام بتثبيت anaconda على ال image المذكروة لاكن طبعا مع إعدادات معينة هذا بشكل بسيط .
المستودعات التي أضفتها :
repo --name="adobe" --baseurl=http://linuxdownload.adobe.com/linux/x86_64/
repo --name="rpmfusion-free" --baseurl=http://download1.rpmfusion.org/free/fedora/releases/$releasever/Everything/$basearch/os/
repo --name="rpmfusion-none-free" --baseurl=http://download1.rpmfusion.org/nonfree/fedora/releases/$releasever/Everything/$basearch/os/
repo --name="google-chrome" --baseurl=http://dl.google.com/linux/chrome/rpm/stable/x86_64
repo --name="rpmfusion-free" --baseurl=http://download1.rpmfusion.org/free/fedora/releases/$releasever/Everything/$basearch/os/
repo --name="rpmfusion-none-free" --baseurl=http://download1.rpmfusion.org/nonfree/fedora/releases/$releasever/Everything/$basearch/os/
repo --name="google-chrome" --baseurl=http://dl.google.com/linux/chrome/rpm/stable/x86_64
الحزم التي أضفتها .
-fedora-release
-fedora-logos
generic-release
generic-logos
-fedora-logos
generic-release
generic-logos
ffmpegthumbs
rpmfusion-free-release
rpmfusion-nonfree-release
adobe-release
flash-plugin
xterm
geany
geany-themes
google-chrome-stable
fedora-workstation-repositories
kde-connect
vlc
xine-lib
amrnb
gstreamer-plugins-good
lame-libs
libdvdnav
gstreamer-plugin-crystalhd
gstreamer1-plugins-bad-free-extras
gstreamer1-plugins-bad-nonfree
gstreamer1-plugins-good
gstreamer1-vaapi
amrwb
lame
gstreamer1-plugins-good-extras
gstreamer1-plugins-bad-free
gstreamer-plugins-bad-free
gstreamer1-plugins-bad-freeworld
libdvdread
gstreamer-ffmpeg
gstreamer-rtsp
gstreamer-plugins-espeak
gstreamer-plugins-bad-free-extras
flac
ffmpeg-libs
lsdvd
gstreamer-plugins-fc
gstreamer1-libav
ffmpeg
faad2
gstreamer-plugins-ugly
xine-lib-extras
gstreamer1-plugins-ugly
gstreamer-plugins-bad-nonfree
gstreamer-plugins-bad
compat-ffmpeg28
xine-lib-devel
x264
rpmfusion-free-release
rpmfusion-nonfree-release
adobe-release
flash-plugin
xterm
geany
geany-themes
google-chrome-stable
fedora-workstation-repositories
kde-connect
vlc
xine-lib
amrnb
gstreamer-plugins-good
lame-libs
libdvdnav
gstreamer-plugin-crystalhd
gstreamer1-plugins-bad-free-extras
gstreamer1-plugins-bad-nonfree
gstreamer1-plugins-good
gstreamer1-vaapi
amrwb
lame
gstreamer1-plugins-good-extras
gstreamer1-plugins-bad-free
gstreamer-plugins-bad-free
gstreamer1-plugins-bad-freeworld
libdvdread
gstreamer-ffmpeg
gstreamer-rtsp
gstreamer-plugins-espeak
gstreamer-plugins-bad-free-extras
flac
ffmpeg-libs
lsdvd
gstreamer-plugins-fc
gstreamer1-libav
ffmpeg
faad2
gstreamer-plugins-ugly
xine-lib-extras
gstreamer1-plugins-ugly
gstreamer-plugins-bad-nonfree
gstreamer-plugins-bad
compat-ffmpeg28
xine-lib-devel
x264