Amirhossein Mortezaie
Amirhossein Mortezaie
خواندن ۴ دقیقه·۴ سال پیش

راه اندازی 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}; do

reposync -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 Base

baseurl=http://repos.test.lab/base/

gpgcheck=0

enabled=1

[local-centosplus]

name=CentOS CentOSPlus

baseurl=http://repos.test.lab/centosplus/

gpgcheck=0

enabled=1

[local-extras]

name=CentOS Extras

baseurl=http://repos.test.lab/extras/

gpgcheck=0

enabled=1

[local-updates]

name=CentOS Updates

baseurl=http://repos.test.lab/updates/

gpgcheck=0

enabled=1

[local-epel]

name=CentOS epel

baseurl=http://repos.test.lab/epel/

gpgcheck=0

enabled=1

روش دوم - روش مهندسی :

من لینک آرشیو شده ansible role برای راه اندازی local repo رو از طریق لینک زیر در اختیارتون قرار میدم کافیه inventoy خودتون رو بسازید و hosts رو در yml ها عوض کنید. فقط با یک خط اجرا کنید و تا زمان پایانش میتونید مابقی کارهاتون رو انجام بدید یا بازی کنید یا هرچی .

https://drive.google.com/file/d/16nPQSPdkY0zQPdVPKhjZDNjBye6EELe4/view?usp=sharing

ansiblelocal repositoryyumansible playbook
شاید از این پست‌ها خوشتان بیاید