نصب، آپدیت و حذف پکیج ها یکی از کلیدی ترین مسولیت های روزانه هر ادمینی میباشد. زمانی که یک ماشین به اینترنت متصل است تسک های بالا به آسانی و با اجرای دستورات aptitude یا apt-get یا yum و یا zypper (بسته به نوع سیستم عامل) انجام خواهند شد. همچنین شما میتوانید فایل های deb. یا rpm. را به صورت مجزا دانلود و با استفاده از dpkg یا rpm نصب کنید.
به هر حال هنگامی که یک ماشین دسترسی به اینترنت ندارد استفاده از روش دیگری ضروریست. دلیل استفاده از متد دوم چیست؟ این دلیل ها میتواند از ذخیره پهنای باند اینترنت (جلوگیری از چندین ارتباط همزمان به بیرون) تا امن کردن این پکیج ها که به صورت local از source کامپایل (compile) میشوند ویا افزایش احتمال فراهم کردن پکیج ها به دلایل قانونی (برای مثال نرم افزاری که در بعضی از کشورها محدودیت دارد) باشد، که نمیتوانند در repository های رسمی موجود باشند.
در این چنین مواقعی است که repository های شبکه وارد عمل میشوند و در حقیقت موضوع مرکزی پست ما میباشد.
محیط تستی ما :
راه اندازی یک سرور ریپازیتوری تحت شبکه (لوکال) روی CentOS 7 :
در اولین مرحله ما باید centos 7 را به عنوان یک سرور repository با ip 192.168.0.17 و یک centos 6.6 به عنوان کلاینت نصب و کانفیگ کنیم. (تنظیمات برای open suse تقریبا یکسان مییباشد)
برای centos 7 پست زیر را دنبال کنید که دستور العمل مرحله به مرحله از نصب centos 7 را توضیح داده است :
آموزش نصب centos 7
درباره ubuntu میتوانید به پست ایجاد repository اختصاصی و local در لینک زیر مراجعه کنید :
آموزش نصب ریپازتوری لوکال (تحت شبکه داخلی) در اوبونتو و دبیان
اولین انتخاب ما شیوه ای است که کلاینت ها به سرور repository دسترسی خواهند داشت. FTP و HTTP بیشتر مورد استفاده قرار میگیرند. ما HTTP را استفاده میکنیم با توجه به اینکه نصب آپاچی هم در انجمن منطقه لینوکسی ها موجود است، و همچنین به ما اجازه میدهد که پکیج ها را به صورت لیست و با استفاده از یک مرورگر web مشاهده کنید.
سپس ما نیاز داریم که دایرکتوری هایی را برای ذخیره کردن پکیج های rpm. ایجاد کنیم. متعاقبا زیر دایرکتوری ها را در مسیر var/www/html/repos ایجاد خواهیم کرد. برای راحتی ممکن است بخواهیم زیر دایرکتوری های دیگر را به منظور ورژن های متفاوتی از هر distribution (البته بعدا هم میتوانیم با توجه به نیاز دایرکتوری اضافه کنیم) و حتی معماری های متفاوت 32 بیتی و 64 بیتی ایجاد کنیم.
راه اندازی Repository :
مهم ترین چیزی که در هنگام راه اندازی ریپازیتوری شخصی خودتان باید مورد بررسی قرار بگیرد این است که شما به میزان قابل توجهی فضای آزاد (20GB~) نیاز خواهید داشت. اگر ندارید فایل سیستم را resize کنید یا حتی بهتر است یک وسیله storage برای ریپازیتوری استفاده کنید.
ما از ایجاد پوشه های که برای ریپازیتوری نیاز داریم شروع میکنیم :
بعد از این که ساختار دایرکتوری بر روی سرور repository مان ایجاد کردیم سپس با استفاده از createrepo شروع به ایجاد دیتابیسی از پکیج ها و dependency های مربوطه میکنیم.
اگر createrepo روی سیستم تان نصب نبود با دستور زیر آن را نصب کنید :
و سپس ایجاد دیتابیس :
آپدیت کردن repository :
فرض میکنیم سرور ریپازیتوری دسترسی به اینترنت دارد در نتیجه میتوانید ریپازیتوری را مجبور به دریافت آخرین آپدیت های پکیج ها به صورت آنلاین کنیم. و در صورت نداشتن دسترسی به اینترنت میتوانیم کل محتوای پکیج ها را از یک DVD نصب cenos 6.6 کپی کنیم.
در این مقاله ما راه اول را انتخاب میکنیم. به منظور بهینه سازی سرعت دانلود یک mirror از centos 6.6 در یک مکان نزدیک به خودمان انتخاب خواهیم کرد. به لینک CentOS download mirror بروید و یکی از mirror های نزدیک به موقعیت خود را انتخاب کنید.
سپس به دایرکتوری os درون لینک highlight شده میرویم و سپس معماری مورد نظر را انتخاب میکنیم. سپس لینک را در آدرس بار کپی کرده و محتوای آن را در پوشه مشخص شده در سرور repository مان دانلود میکنیم :
اگر به هر دلیلی repository انتخاب شده مشکل داشت به عقب برگردید و یک ریپازیتوری دیگر انتخاب کنید.
اکنون زمان آن رسیده که کمی استراحت کنید و به تماشای یک فیلم مورد علاقه تان بپردازید زیرا کپی کردن ریپازیتوری زمان خواهد برد.
بعد از اینکه دانلود تمام شد میتوانید فضای اشغال شده را با استفاده از دستور زیر بررسی کنید :
در نهایت دیتابیس ریپازیتوری را آپدیت میکنیم :
همچنین ممکن است شما بخواهید در مرورگر خودتان ریپازیتوری را باز کنید و دایرکتوری repos/centos/6/6 را به منظور بررسی محتوا مشاهده نمایید :
و اکنون repository شما آماده است و زمان کانفیگ کلاینت رسیده است.
کانفیگ سیستم کلاینت :
شما میتوانید فایل های کانفیگ برای ریپازیتوری های custom را در مسیر etc/yum/repos.d اضافه کنید. در پایان نام این فایل های کانفیگ باید repo. موجود باشد. همچنین ساختار پایه یکسانی را دنبال کنند :
اکثرا در مسیر etc/yum.repos.d فایل های repo. دیگری نیز از قبل موجود است به منظور تست ریپازیتوری خودتان شما همچنین میتوانید آن فایل ها را پاک کنید (البته از آنجایی که ممکن است بعدا به آنها نیاز داشته باشید پیشنهاد نمیشود که این کار را انجام دهید. در حقیقت میتوانید آنها را به جای دیگری انتقال دهید) یا آنها را rename کنید همانطور که من با اضافه کردن orig. به نام هر فایل این کار را انجام دادم :
در اینجا ما نام فایل کانفیگ مان را tecmint.repo انتخاب کردیم و خطوط زیر را به آن اضافه نمودیم :
بعلاوه GPG signature-checking را برای تمامی پکیج ها در ریپازیتوریمان فعال کردیم.
استفاده از Repository :
به محض اینکه کلاینت به درستی کانفیگ شد شما میتوانید از دستور yum برای نصب پکیج از ریپازیتوری tecmint استفاده کنید. دستور yum info subversion به شما اطلاعاتی درباره پکیج ها میدهد که از ریپازیتوری تازه ایجاد شده دانلود میشوند :
یا میتوانید یک پکیج نصب شده موجود را نصب یا آپدیت کنید :
برای مثال :
Up-to-date نگه داشتن Repository :
همواره باید ریپازیتوری خودمان را با ریپازیتوری های آنلاین و به صورت دوره ای synchronize کنیم. میتوانیم از دستور rsync استفاده کنیم.
rcync اجازه میدهد که دو پوشه را cynchronize کنیم. (یکی local و دیگری remote) دستور rcync را اجرا کنید تا پکیج های جدید اضافه شده به ریپازیتوری های رسمی را به ریپازیتوری local خودمان اضافه کنیم. میتوانیم از یک cronjob استفاده کنیم تا این کار به صورت اتوماتیک انجام شود. به یاد داشته باشید که cronjob را برای زمانی از روز تعریف کنید که اعمال آپدیت ها تاثیر منفی روی پهنای باند موجود نداشته باشد.
برای مثال اگر بخواهید هر روز راس ساعت 2:30 بامداد ریپازیتوری خود را آپدیت کنید دستور زیر را در crontab قرار دهید :
نکته : مطمین شوید که دستور بالا را روی سرور centos 7 اجرا کنید تا repository خود را آپدیت نگه دارید.
البته شما میتوانید این خط را درون یک اسکریپت قرار داده تا بتوانید تسک های پیچیده و coustomize شده قبل و بعد از اجرای آپدیت انجام دهید.
نتیجه :
شما نباید اهمیت یک repository شبکه یا local را از ذهن دور کنید از آنجایی که مزایایی بیشماری به همراه دارد که تا حدی در این پست عنوان شد. اگر شما بتوانید فضای دیسک را فراهم آورید قطعا راه کاری مفید و موثر برای سازمان خود پیاده سازی میکنید. تجربیات خودتان را با ما به اشتراک بگذارید.
موفق باشید
محمد هابیلی
به هر حال هنگامی که یک ماشین دسترسی به اینترنت ندارد استفاده از روش دیگری ضروریست. دلیل استفاده از متد دوم چیست؟ این دلیل ها میتواند از ذخیره پهنای باند اینترنت (جلوگیری از چندین ارتباط همزمان به بیرون) تا امن کردن این پکیج ها که به صورت local از source کامپایل (compile) میشوند ویا افزایش احتمال فراهم کردن پکیج ها به دلایل قانونی (برای مثال نرم افزاری که در بعضی از کشورها محدودیت دارد) باشد، که نمیتوانند در repository های رسمی موجود باشند.
در این چنین مواقعی است که repository های شبکه وارد عمل میشوند و در حقیقت موضوع مرکزی پست ما میباشد.
محیط تستی ما :
کد PHP:
Network Repository Server: CentOS 7 [enp0s3: 192.168.0.17] - dev1
Client Machine: CentOS 6.6 [eth0: 192.168.0.18] - dev2
راه اندازی یک سرور ریپازیتوری تحت شبکه (لوکال) روی CentOS 7 :
در اولین مرحله ما باید centos 7 را به عنوان یک سرور repository با ip 192.168.0.17 و یک centos 6.6 به عنوان کلاینت نصب و کانفیگ کنیم. (تنظیمات برای open suse تقریبا یکسان مییباشد)
برای centos 7 پست زیر را دنبال کنید که دستور العمل مرحله به مرحله از نصب centos 7 را توضیح داده است :
آموزش نصب centos 7
درباره ubuntu میتوانید به پست ایجاد repository اختصاصی و local در لینک زیر مراجعه کنید :
آموزش نصب ریپازتوری لوکال (تحت شبکه داخلی) در اوبونتو و دبیان
اولین انتخاب ما شیوه ای است که کلاینت ها به سرور repository دسترسی خواهند داشت. FTP و HTTP بیشتر مورد استفاده قرار میگیرند. ما HTTP را استفاده میکنیم با توجه به اینکه نصب آپاچی هم در انجمن منطقه لینوکسی ها موجود است، و همچنین به ما اجازه میدهد که پکیج ها را به صورت لیست و با استفاده از یک مرورگر web مشاهده کنید.
سپس ما نیاز داریم که دایرکتوری هایی را برای ذخیره کردن پکیج های rpm. ایجاد کنیم. متعاقبا زیر دایرکتوری ها را در مسیر var/www/html/repos ایجاد خواهیم کرد. برای راحتی ممکن است بخواهیم زیر دایرکتوری های دیگر را به منظور ورژن های متفاوتی از هر distribution (البته بعدا هم میتوانیم با توجه به نیاز دایرکتوری اضافه کنیم) و حتی معماری های متفاوت 32 بیتی و 64 بیتی ایجاد کنیم.
راه اندازی Repository :
مهم ترین چیزی که در هنگام راه اندازی ریپازیتوری شخصی خودتان باید مورد بررسی قرار بگیرد این است که شما به میزان قابل توجهی فضای آزاد (20GB~) نیاز خواهید داشت. اگر ندارید فایل سیستم را resize کنید یا حتی بهتر است یک وسیله storage برای ریپازیتوری استفاده کنید.
ما از ایجاد پوشه های که برای ریپازیتوری نیاز داریم شروع میکنیم :
کد PHP:
# mkdir -p /var/www/html/repos/centos/6/6
بعد از این که ساختار دایرکتوری بر روی سرور repository مان ایجاد کردیم سپس با استفاده از createrepo شروع به ایجاد دیتابیسی از پکیج ها و dependency های مربوطه میکنیم.
اگر createrepo روی سیستم تان نصب نبود با دستور زیر آن را نصب کنید :
کد PHP:
# yum update && yum install createrepo
و سپس ایجاد دیتابیس :
کد PHP:
# createrepo /var/www/html/repos/centos/6/6
آپدیت کردن repository :
فرض میکنیم سرور ریپازیتوری دسترسی به اینترنت دارد در نتیجه میتوانید ریپازیتوری را مجبور به دریافت آخرین آپدیت های پکیج ها به صورت آنلاین کنیم. و در صورت نداشتن دسترسی به اینترنت میتوانیم کل محتوای پکیج ها را از یک DVD نصب cenos 6.6 کپی کنیم.
در این مقاله ما راه اول را انتخاب میکنیم. به منظور بهینه سازی سرعت دانلود یک mirror از centos 6.6 در یک مکان نزدیک به خودمان انتخاب خواهیم کرد. به لینک CentOS download mirror بروید و یکی از mirror های نزدیک به موقعیت خود را انتخاب کنید.
سپس به دایرکتوری os درون لینک highlight شده میرویم و سپس معماری مورد نظر را انتخاب میکنیم. سپس لینک را در آدرس بار کپی کرده و محتوای آن را در پوشه مشخص شده در سرور repository مان دانلود میکنیم :
کد PHP:
# rsync -avz rsync://centos.ar.host-engine.com/6.6/os/x86_64/ /var/www/html/repos/centos/6/6/
اگر به هر دلیلی repository انتخاب شده مشکل داشت به عقب برگردید و یک ریپازیتوری دیگر انتخاب کنید.
اکنون زمان آن رسیده که کمی استراحت کنید و به تماشای یک فیلم مورد علاقه تان بپردازید زیرا کپی کردن ریپازیتوری زمان خواهد برد.
بعد از اینکه دانلود تمام شد میتوانید فضای اشغال شده را با استفاده از دستور زیر بررسی کنید :
کد PHP:
# du -sch /var/www/html/repos/centos/6/6/*
در نهایت دیتابیس ریپازیتوری را آپدیت میکنیم :
کد PHP:
# createrepo --update /var/www/html/repos/centos/6/6
و اکنون repository شما آماده است و زمان کانفیگ کلاینت رسیده است.
کانفیگ سیستم کلاینت :
شما میتوانید فایل های کانفیگ برای ریپازیتوری های custom را در مسیر etc/yum/repos.d اضافه کنید. در پایان نام این فایل های کانفیگ باید repo. موجود باشد. همچنین ساختار پایه یکسانی را دنبال کنند :
کد PHP:
[repository_name]
Description
URL
اکثرا در مسیر etc/yum.repos.d فایل های repo. دیگری نیز از قبل موجود است به منظور تست ریپازیتوری خودتان شما همچنین میتوانید آن فایل ها را پاک کنید (البته از آنجایی که ممکن است بعدا به آنها نیاز داشته باشید پیشنهاد نمیشود که این کار را انجام دهید. در حقیقت میتوانید آنها را به جای دیگری انتقال دهید) یا آنها را rename کنید همانطور که من با اضافه کردن orig. به نام هر فایل این کار را انجام دادم :
کد PHP:
# cd /etc/yum.repos.d
# for i in $(ls *.repo); do mv $i $i.orig; done
در اینجا ما نام فایل کانفیگ مان را tecmint.repo انتخاب کردیم و خطوط زیر را به آن اضافه نمودیم :
کد PHP:
[tecmint]
name=Example repo for Part 11 of the LFCE series on linux-zone.org/forums
baseurl=http://192.168.0.17/repos/centos/6/6/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
استفاده از Repository :
به محض اینکه کلاینت به درستی کانفیگ شد شما میتوانید از دستور yum برای نصب پکیج از ریپازیتوری tecmint استفاده کنید. دستور yum info subversion به شما اطلاعاتی درباره پکیج ها میدهد که از ریپازیتوری تازه ایجاد شده دانلود میشوند :
کد PHP:
# yum info subversion
یا میتوانید یک پکیج نصب شده موجود را نصب یا آپدیت کنید :
کد PHP:
# yum { install | update } package
برای مثال :
کد PHP:
# yum update && yum install subversion
Up-to-date نگه داشتن Repository :
همواره باید ریپازیتوری خودمان را با ریپازیتوری های آنلاین و به صورت دوره ای synchronize کنیم. میتوانیم از دستور rsync استفاده کنیم.
rcync اجازه میدهد که دو پوشه را cynchronize کنیم. (یکی local و دیگری remote) دستور rcync را اجرا کنید تا پکیج های جدید اضافه شده به ریپازیتوری های رسمی را به ریپازیتوری local خودمان اضافه کنیم. میتوانیم از یک cronjob استفاده کنیم تا این کار به صورت اتوماتیک انجام شود. به یاد داشته باشید که cronjob را برای زمانی از روز تعریف کنید که اعمال آپدیت ها تاثیر منفی روی پهنای باند موجود نداشته باشد.
برای مثال اگر بخواهید هر روز راس ساعت 2:30 بامداد ریپازیتوری خود را آپدیت کنید دستور زیر را در crontab قرار دهید :
کد PHP:
30 2 * * * rsync -avz rsync://centos.ar.host-engine.com/6.6/os/x86_64/ /var/www/html/repos/centos/6/6/
نکته : مطمین شوید که دستور بالا را روی سرور centos 7 اجرا کنید تا repository خود را آپدیت نگه دارید.
البته شما میتوانید این خط را درون یک اسکریپت قرار داده تا بتوانید تسک های پیچیده و coustomize شده قبل و بعد از اجرای آپدیت انجام دهید.
نتیجه :
شما نباید اهمیت یک repository شبکه یا local را از ذهن دور کنید از آنجایی که مزایایی بیشماری به همراه دارد که تا حدی در این پست عنوان شد. اگر شما بتوانید فضای دیسک را فراهم آورید قطعا راه کاری مفید و موثر برای سازمان خود پیاده سازی میکنید. تجربیات خودتان را با ما به اشتراک بگذارید.
موفق باشید
محمد هابیلی