چیزهای تازه ای که هر روز یاد میگیرم.
سلام
نمی دانم این عنوان مناسب بود یا نه اما می خواهم هر چیزی که تازه یاد گرفتم و به نظرم جالب آمد در اینجا بنویسم.
اما امروز:
errorlevel چیست؟
برنامه ها هنگام خروج می توانند یک کد خروجی به سیستم عامل تحویل دهند. اگر این کد صفر باشد یعنی خروج عادی اما اگر عددی دیگر باشد (صفر تا ۲۵۵) یعنی خطا.
در داس خیلی وقت پیش این نکته را می دانستم و با آن کار میکردم اما در لینوکس (bash) نمی دانستم.
تا اینکه امروز دستور for را یکبار دیگر نگاه می کردم و این را یاد گرفتم. بهتر است با یک مثال پیش برویم:
اگر شما با دستور ls فایلی را بخواهید پیدا کنید و آن فایل وجود نداشته باشد عدد یک به عنوان نتیجه بر گردانیده می شود:
root@srv1:/# ls a
ls: a: No such file or directory
root@srv1:/# echo $?
1
root@srv1:/#
توجه کنید دستور بعدی که اجرا شود errorlevel از بین می رود.
تذکر: نمی دانم واژه درست در لینوکس errorlevel است یا نه من واژه ویندوزی (داس) را نوشتم. exit status در متن خودش نوشته است.
در ویندوز دستور از راهنمای ویندوز if را ببینید مثال:
if %errorlevel% geq 1 echo error
ساخت دوباره پکیجهای دبیان
(فقط برای توزیعهای مبتنی بر دبیان)
حالا یک فرض دیگر:
من knoppix داشتم و از کل پکیجهای آن راضی بودم. اما نمی توانستم پکیجهای آنرا روی ubuntu استفاده کنم! البته با chroot هر دو محیط را بالا می آوردم هم gnome داشتم هم kde.
برخی از پکیجهای kubuntu یا بهتر بگویم kde در gnome نظیر خوبی ندارند اما من هم ubuntu دارم هم kubutu با این اینترنت هم نمیشه واقعا تمام کتابخانه و فایلهای یک توزیع را درست گرفت.
یا یه مسئله دیگر: یک سی دی زنده دارم مثل knoppix یک پکیج را اشتباهی پاک کردم جه کنم؟
خیلی ساده است. dpkg-repack چاره کار است.
این بسته در صورتیکه نصب شود هر بسته نصب شده را به بسته دبیان دوباره تبدیل میکند!
(آیا در ویندوز چنین چیزی داریم؟ در توزیعهای مبتنی بر rpm چطور؟)
این را هم بدانید که قدرت deb بسیار بیشتر از rpm است دلیلش هم این است که deb تنظیمات از پیش تعریف شده برای کاربران تازه کار دارد. و خب با alien اگر یک بسته rpm به deb تبدیل شود زمانی مفید است که چیزی مانند سرویس و نیاز به تنظیم نداشته باشد.
برویم سر حل:
ابتدا از توزیعی که می خواهید پکیجهای آن را بردارید لیست پکیج می گیریم:
LI=`dpkg -l | awk '{print $2}'`
حالا متغیر من حاوی کل نام پکیجهاست.
خب یک حلقه ساده راهکار ساخت کل پکیجهاست:
for _I_ in ${LI} ; do dpkg-repack $_I_ ; done
در همان مسیری که هستید بسته ها ساخته خواهند شد و بسته deb دارید.
حال اینها را هر جا خواستید ببرید.
دقت کنید که مسیری که در آن هستید نوع فایل سیستم آن لینوکسی باشد مثلا در درایوی ویندوز نروید. پس از ساخته شدن آنها را به درایو ویندوزی می توانید کپی کنید.
در قسمت آینده ساخت منبع بسته بر روی هارد را توضیح خواهم داد.
ساختن منابع محلی از پکیجها
فقط برای دیستروهای دبیان:
شاید داشتن ۱۴ عدد سی دی دبیان (sarge) خیلی حوصله آدم را سر ببرد و هی مجبوری سی دی عوض کنی.
کلی فایل از اینترنت دانلود کردی که همه توی /var/cache/apt/archives همه هستند و دوست داری توزیع جدید نصب کنی.
و مواردی از این دست.
برای اینکار در یک دایرکتوری می توانیم کل فایلهای deb را بریزیم و یا حتی دارای subdir هم باشد. سپس فایل Package را می سازیم. و این را به لیست اضافه میکنیم.
خب اول ساختن دایرکتوری:
mkdir /debs
این شاخه هر جایی می تواند باشد مثلامن از هارد دومم استفاده میکنم /media/sdb1 و یا هر جایی جه خودتان صلاح دانستید.
خب حالا کل فایلها deb را اینجا کپی میکنم.
توجه توجه: اگر یک فایل جدیدتری باشد آن در نظر گرفته میشود و از قدیمی صرف نظر می شود. پس اگر چندین نمونه از یک پکیج دارید باید جاهای مختلف باشند. مثلا من اصلیها را در شاخه فرعی main قرار می دهم و تکراریهای قدیمی را در repeated همچنین دو باید برای هر شاخه اینجنین باید Package ساخت.
خب حالا ساختن فایل Packages :
اگر این فایل بر روی هارد شما باشد فرق ندارد zip باشد یا نه اما بر روی شبکه و اینترنت باید حتما زیپ شده باشد. پس من روش زیپ شده را خواهم گفت.
فرق ندارد شما در کدام شاخه باشید (دایرکتوری) فقط این مهم است که آن شاخه یا دایرکتوری که پکیجها در آن است نسبت به این شاخه سنجیده می شوند و مسیرها نسبی است.
اما من در همان شاخه ای که فایلهاست می روم.
همچنین اگر زیر شاخه دارید باید شاخه پدری را معرفی کنید.
dpkg-scanpackages . /dev/null | gzip > Packages.gz
خب اسم دستور که مشخص است اما پارامتر اولی نشاندهنده مسیر فایلهای deb است که چون من در شاخه بودم همان را ذکر کردم. پارامتر دومی هم فایلی که باید رونویسی شود در اینجا چیزی نیست. و بعد با دستور gzip داده ها زیپ می شود و در فایل Packages.gz قرار می گیرد. مهم است که نام فایل همین باشد. یعنی P بزرگ باشد و بقیه حروف کوچک.
با این دستور تمام پکیجهای شما لیست شده در فایل قرار می گیرند. اگر هم خطایی باشد به شما نمایش داده خواهد شد.
اما اضافه کردن این فایلها به لیست /etc/apt/sorces.list به این صورت است که فایل را با ویرایشگر محبوبتان باز کنید و این خط را به آن اضافه کنید:
deb file:/debs ./
اگر چندین شاخه مجزا و فایل Packages.gz دارید هم کار همین است
سپس باید لیست بسته ها به روز شوند یعنی فرمان :
sudo apt-get update
حالا دیگر بسته های شما هم در لیست قرار دارند. با synaptic یا هر چیزی راحتید نصب بسته ها را انجام دهید.