راه اندازی Local Yum Repository

سلام دلیلی که تصمیم گرفتم این راهنما رو بنویسم این بود که ۲ تا پروژه بطور همزمان داشتم که بصورت اتفاقی مجبور بودم برای هردو شرکت local repository راه بندازم چون در هر دوشرکت به دلیل مشکل پهنای باند این چند وقت اخیر و انگولک کرن ریپوزیتوریهای yum و بلاخص epel و .. برای نصب یک پکیج باید کلی صبر میکردم اما مساله اصلی اینجا بود که باید هر تو هر دو شرکت یکسری کارهای روتین و تکراری انجام میدادم و چون معتقدم اگر مجبور به تکرار یک کار مشخص باشی فقط دفعه اول رو خودت باید انجام بدی و مابقی رو ماشین باید برات انجام بده ( ما که نوکر اون نیستیم , اون نوکر ماست ) بنابراین تصمیم گرفتم ansible-playbook براش بنویسم که تو هر دو شرکت فقط یک خط کامند بزنم و یک local repository ایجاد کنم و مابقی سرورها هم کانفیگ بشن که پکیج ها رو از local repo بگیرن. البته برای کسایی که هنوز با ansible آشنا نیستن هم یه راهنما گذاشتم روش اول - روش کارگری:۱- نصب epel-release و nginx( میتونید به جای nginx از apache یا هر وب سرور دیگری استفاده کنید lighthttpd هم خیلی خوبه )# yum install epel-release# yum install nginx۲- نصب dependency های مورد نیاز # yum install createrepo yum-utils۳- ساخت دایرکتوری های repoاگر ریپوزیتوری دیگری هم احتیاج دارید فقط کافیه هر کاری برای ریپوزیتوری های زیر انجام میدید برای ریپوی مد نظرتون هم انجام بدید# mkdir -p /var/www/html/repos/{base,centosplus,extras,updates,epel}۴- دانلود پکیج ها# reposync -g -l -d -m --repoid=base --newest-only --download-metadata --download_path=/var/www/html/repos/# reposync -g -l -d -m --repoid=centosplus --newest-only --download-metadata --download_path=/var/www/html/repos/# reposync -g -l -d -m --repoid=extras --newest-only --download-metadata --download_path=/var/www/html/repos/# reposync -g -l -d -m --repoid=updates --newest-only --download-metadata --download_path=/var/www/html/repos/# reposync -g -l -d -m --repoid=epel --newest-only --download-metadata --download_path=/var/www/html/repos/۵- ساخت ریپوزیتورینکته : ممکنه همه ریپوزیتوری ها metadata نداشته باشن بنا بر این مجبورین فایل comps.xml رو خودتون بسازید# createrepo -g comps.xml /var/www/html/repos/base/# createrepo --database /var/www/html/repos/centosplus/# createrepo --database /var/www/html/repos/extras/# createrepo --database /var/www/html/repos/updates/# createrepo --database /var/www/html/repos/epel/۶- کانفیگ nginx برای سرو کردن پکیجها به کلاینتها باید وب سرورتون رو کانفیگ کنید. این یک نمونه خیلی سادس که قاعدتا میتونید خیلی ویژگی های دیگه بهش اضافه کنید# vim /etc/nginx/conf.d/repos.confمتن زیر رو در فایل repos.conf ذخیره کنید server {listen 80;server_name repos.test.lab; #در این قسمت باید نام سرور خودتون رو وارد کنیدroot /var/www/html/repos;location / {index index.php index.html index.htm;autoindex on; #enable listing of directory index}}۷- سرور yum repo ی شما آمادست فقط الان چند تا cronjob مینویسیم که ریپوزیتوری های آپدیت بشن پیشنهاد من اینه که هر روز آپدیت کنید ولی بسته به میزان استفاده خودتون میتونید تغییرش بدید# vim /etc/cron.daily/update-localreposبرای صرفه جویی در تایپ و مدیریت بهتر تسک های cron دستورات رو در قالب یه bash script بنویسید و بجای ایجاد چند خط در crontab یکبار script رو صدا بزنید البته همیشه میتونید از مدل کارگری استفاده کنید!#!/bin/bashcp ~/job## یک متغییر در نظر بگیرید و نام ریپوزیتوری ها رو داخلش بریزیدLOCAL_REPOS=”base centosplus extras updates epel”##استفاده از یک حلقه for برای آپدیت و ساخت ریپوزیتوریfor REPO in ${LOCAL_REPOS}; doreposync -g -l -d -m --repoid=$REPO --newest-only --download-metadata --download_path=/var/www/html/repos/createrepo /var/www/html/repos/$REPO/done۸- فراموش نکنید که اسکریپت رو executable بکنید# chmod 755 /etc/cron.daily/update-localreposخلااااص سرور local repo آمادست حالا فقط باید کلاینتها رو کانفیگ بکنید که ازش استفاده کننبرای این کار کافیه متن زیر رو داخل یک فایل که به .repo ختم میشه کپی کنید و حواستون باشه که آدرس baseurl رو به سرور خودتون عوض کنید. بهتره ریپوزیتوری های دیفالت zip کنید یا rename کنید که دریافت از سرور local سریعتر بشه - اگر میخواهید gpgcheck حتما enable باشه که منم پیشنهاد میکنم باشه باید فایل repomd.xml که توی دایرکتوری مربوطه هرریپوزی توری هست رو با کلید سرور sign کنید gpg --detach-sign --armor /path/to/repo/repodata/repomd.xml******************************************************************[local-base]name=CentOS Basebaseurl=http://repos.test.lab/base/gpgcheck=0enabled=1[local-centosplus]name=CentOS CentOSPlusbaseurl=http://repos.test.lab/centosplus/gpgcheck=0enabled=1[local-extras]name=CentOS Extrasbaseurl=http://repos.test.lab/extras/gpgcheck=0enabled=1[local-updates]name=CentOS Updatesbaseurl=http://repos.test.lab/updates/gpgcheck=0enabled=1[local-epel]name=CentOS epelbaseurl=http://repos.test.lab/epel/gpgcheck=0enabled=1روش دوم - روش مهندسی :من لینک آرشیو شده ansible role برای راه اندازی local repo رو از طریق لینک زیر در اختیارتون قرار میدم کافیه inventoy خودتون رو بسازید و hosts رو در yml ها عوض کنید. فقط با یک خط اجرا کنید و تا زمان پایانش میتونید مابقی کارهاتون رو انجام بدید یا بازی کنید یا هرچی .https://drive.google.com/file/d/16nPQSPdkY0zQPdVPKhjZDNjBye6EELe4/view?usp=sharing