بلاگ پارسی سلمان م.

گنو، تریسکل، نرم‌افزار آزاد، ای‌مکس، اوبونتو، مهندسی عمران، برنامه‌نویسی، گنو/لینوکس، ...

بلاگ پارسی سلمان م.

گنو، تریسکل، نرم‌افزار آزاد، ای‌مکس، اوبونتو، مهندسی عمران، برنامه‌نویسی، گنو/لینوکس، ...

آخرین نظرات
  • ۲۱ ارديبهشت ۰۱، ۱۸:۵۰ - فاطمه
    مرسی

۳ مطلب در مرداد ۱۳۹۲ ثبت شده است

سلام به دوستان عزیز،

داشتم سخنرانی روبن رودریگز (Rubén Rodríguez) رهبر و توسعه‌دهنده‌ی اصلی تریسکل در کنفرانس LibrePlanet 2013 رو گوش می‌کردم که یه جمله‌اش نظرم رو جلب کرد:

«سرورهای گنو، از سیستم‌عامل تریسکل استفاده می‌کنند»

برای اطمینان از صحت جمله‌ی بالا می‌تونید صفحه‌ی زیر رو هم مطالعه بفرمایید.

https://gnu.org/server

  • سلمان محمدی

سلام دوستان عزیز

در این پست می‌خواهیم در رابطه با این صحبت کنیم که چجوری می‌شه، آخرین نسخه‌ی زنجیره‌ی ابزار که توانگلیسی بهش می‌گن toolchain رو روی توزیع‌های بر پایه‌ی اوبونتو (که شامل تریسکل، خود اوبونتو، مینت و ... می‌شه)  نصب کنیم.

زنجیره‌ی ابزار مجموعه ابزارهایی هست که برای نوشتن و کامپایل‌کردن و ... به منظور تولید یک نرم‌افزار استفاده می‌شود. و شامل GCC هم می‌شه.


برای نصب آخرین نسخه‌ی GCC فقط کافیه که PAA زیر رو به سیستممون اضافه کنیم:

ppa:ubuntu-toolchain-r/test

که با استفاده از دستور زیر اضافه می‌شه:

$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test

و طبق معمول باید بعدش  لیست نرم‌افزارهای موجود در سیستممون رو به‌روز کنیم:

$ sudo apt-get upadte

حالا نسخه‌های جدید نرم‌افزارها در دسترس هستند و می‌تونیم اون‌ها رو براحتی نصب کنیم.

فقط باید درنظر داشته باشیم که این نرم‌افزارهای جدید با قبلی‌ها جایگزین نمی‌شن.

مثال عملی: من روی تریسکل ۶ جی‌سی‌سی (GCC)‌ دارم. برای این‌که بفهمم نسخه‌ی gcc من چند هست، دستور زیر رو توی ترمینال می‌زنم:

$ gcc --version

و به من جواب زیر رو می‌ده،

gcc (Ubuntu/Linaro 4.6.4-1ubuntu1~12.04) 4.6.4
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

حالا طبق چیزایی که بالا گفتم، اون مخزن رو اضافه می‌کنم و لیست مخازن رو بروز می‌کنم. حالا نرم‌افزار synaptic رو اجرا می‌کنم. و اگه ندارمش با دستور زیر نصبش می‌کنم:

$ sudo apt-get install synaptic

حالا نرم‌افزار synaptic رو اجرا می‌کنم و  به قسمت origin می‌رم و سپس LP-PPA-ubuntu-toolchain-r-test/precise و نگاه می‌کنم که آخرین نسخه‌ی GCC یا g++ یا gfotran یا ... چی هست، اون رو نصب می‌کنم.

الان نسخه‌ی قبلی gcc که ۴٫۶ هست و نسخه‌ی جدید که ۴٫۸ هست به صورت همزمان رو سیستم من نصب هستند، برای اطمینان بازدوباره دستورهای زیر رو می‌زنم تا ببینم که چه خروجی می‌دن:

$ gcc --version

و

$ gcc-4.8 --version

الآن هر موقع که خواستم از gcc نسخه‌ی جدید استفاده کنم به طور مثال برای کامپایل کردن یه کد ساده‌ی c، به جای دستور:

$ gcc -Wall test.c

از دستور زیر باید استفاده کنم:

$ gcc-4.8 -Wall test.c

و یا IDE مورد استفاده‌ام رو تنظیم کنم به جای gcc از gcc-4.8 استفاده کنه.


از این‌جا به بعد برای حرفه‌ای‌ترها است:

حالا این سوال پیش می‌یاد که یکی حوصله‌اش نمی‌شه هرسری توی ترمینال تایپ کنه gcc-4.8 و می‌خواید با تایپ کردن gcc خودش بره سر وقت gcc-4.8.

مراحل انجام این کار:

۱. پاک کردن رابط (لینک) gcc

۲. ایجاد یک رابط جدید برای gcc که به gcc-4.8 اشاره داشته باشه.


۱. از اول همه سر وقت جایی می‌ریم که عمده‌ی رابط‌ها (link) اون‌جا هستن یعنی:

/usr/bin

با استفاده از دستور cd به اون دیرکتوری می‌ریم:

$ cd /usr/bin

حالا می‌خوایم یه نگاه بندازین ببینیم که کلاً چه فایل‌ها یا دیرکتوری‌هایی اون‌جا هست، که برای این‌کار از دستور ls استفاده می‌کنیم:

$ ls

که یه خروجی زیادی بهمون می‌ده. حالا می‌خوایم جست‌وجو رو تنگ‌تر کنیم و به ترمینال می‌گیم، همه‌ی خروجی‌ها رو نشون نده، توی خروجی‌ها بگرد و اون‌هایی رو که حاوی کلمه‌ی gcc هستند به من نشون بده:

$ ls | grep gcc

که برای من این دستور چنین خروجی رو می‌ده:

c89-gcc
c99-gcc
gcc
gcc-4.6
gcc-4.8
gcc-ar-4.8
gcc-nm-4.8
gcc-ranlib-4.8
winegcc
x86_64-linux-gnu-gcc
x86_64-linux-gnu-gcc-4.6
x86_64-linux-gnu-gcc-4.8
x86_64-linux-gnu-gcc-ar-4.8
x86_64-linux-gnu-gcc-nm-4.8
x86_64-linux-gnu-gcc-ranlib-4.8

حالا فایل gcc رو به gcc.poshtiban تغییر نام می‌دم و از اون‌جایی که کاربر عادی نمی‌تونه فایل‌های این دیرکتوری رو تغییر بده، باید اول دستورم sudo اضافه کنم:

$ sudo mv gcc gcc.poshtiban

الآن gcc دیگه وجود خارجی نداره :). اگر دستور gcc رو توی ترمینال بزنم این پیغام رو می‌ده:

bash: /usr/bin/gcc: No such file or directory

الآن باید یه symbolic link (رابط سمبولیک) از gcc-4.8 بسازم، یعنی دقیقاً کاری که قبلاً برای gcc-4.6 شده بود، یعنی gcc یک رابط بود که به gcc-4.6 وصل می‌شد.

با استفاده از دستور ln می تونیم رابط مورد نظر رو بسازیم:

$ sudo ln --symbolic gcc-4.8 gcc

تموم شد :) الآن اگه توی ترمیینال بزنم:

$ gcc --version

خروجی زیر رو می‌ده:

gcc-4.8 (Ubuntu 4.8.1-2ubuntu1~12.04) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

این کار رو می‌شه برای g++، gfortran و ... هم انجام داد. فقط یادتون باشه اگه gcc رو به نسخه‌های بالاتر ارتقا دادید، یعنی به ۴٫۹ یا بالاتر، بایستی رابط سمبولیک رو بازدوباره بسازید ولی این بار برای gcc-4.9 :)


اگر هم جایی خرابکاری کردید، فقط کافیه که gcc رو پاک کنید:

$ sudo rm gcc

و اون gcc رو که به عنوان پشتیبان نگه داشته بودیم، به اسم اصلیش یعنی gcc تغییر نام بدیم:

$ sudo mv gcc.poshtiban gcc
  • سلمان محمدی

سلام دوستان عزیز،

توی این پست می‌خوایم در رابطه با مساله‌ای صحبت کنیم که بعضی مواقع بدجور آدم رو قلقلک می‌ده. اون مساله این هست که فرض کنیدآخرین نسخه‌ی اکلیپس رو از وب‌گاهش دانلود کردید. همون‌طور که بهتر از من می‌دونید این برنامه‌ای که دانلود کردید رو نیاز نیست که نصب کنید، فقط کافیه که فایلی که دانلود کردید رو ااستخراج (extract) کنید و سپس فایل eclipse رو اجرا کنید. حال این سوال پیش می‌یاد که:

چجوری فایل اجرایی اکلیپس رو وارد منوی گنوم یا KDE کنم؟ تا بتونم به صورت مستقیم از طریق منوها بهش دسترسی داشته باشم.


برای این کار بایستی یک فایل متنی با محتوای مشخص و پسوند .desktop توی یه جای مشخص ساخته بشه. به این فایل متنی desktop entry  گفته می‌شه (فارسیش می‌شه مدخل رومیزی یا ورودی رومیزی) که توی اون محل قرارگیری فایل اجرایی برنامه و آیکون برنامه و غیره مشخص می‌شه. این شیوه طبق استاندارد freedesktop.org هست که هم گنوم و هم KDE از این استاندارد پیروی می‌کنند.


برای این‌کار طبق معمول از دو طریق می‌شه وارد عمل شد. ۱. با استفاده از ترمینال ۲. با استفاده از ابزار گرافیکی. که ما در این‌جا فقط روش با استفاده از ترمینال رو توضیح می دیم.


فرض می‌کنیم فایل اکلیپس که دانلود کردیم رو از در پوشه‌ی زیر استخراج کردیم:

/home/salman/apps/eclipse


برای شروع باید که ابتدا یک فایل با پسوند .desktop توی آدرس زیر ایجاد کنیم:
/usr/share/applications

اسم این فایل رو مهم نیست که چی می‌ذاریم ولی برای این‌که بعداً دچار سردرگرمی نشیم اسم این فایل رو متناسب با نام نرم‌افزار ایجاد می‌کنیم. فایل مورد نظر رو با دستور زیر می‌تونیم که ایجاد کنیم:

$ sudo nano /usr/share/applications/eclipse.desktop

و سپس محتویات زیر رو درش paste می‌کنیم (چون توی ترمینال هستیم، برای paste کردن باید از ctrl+shift+v استفاده کنیم):

[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=Eclipse
Comment=Eclipse IDE
Exec=/home/salman/apps/eclipse/eclipse
Icon=/home/salman/apps/eclipse/icon.xpm
Terminal=false
Categories=GNOME;Application;Development;
و سپس اون رو با دستور ctrl+o ذخیره می‌کنیم. حالا می‌تونیم راحت از طریق منوها به برنامه‌ی اکلیپس دسترسی داشته باشیم.

توضیح خط به خط:

این قسمت برگرفته از راهنمای رسمی گنوم به این آدرس است. (به کوچک یا بزرگ بودن حروف انگلیسی توجه فرمایید).


  • اسم فایل: این فایل متنی (desktop entry) هیچ‌گونه محدودیتی برای این‌که اسمش از چندحرف تشکیل بشه، نداره بنابراین بهتر هست که از علایم اختصاری استفاده نکنید. به طور مثال foocorp-painter-pro.desktop یک اسم فایل خوب ولی fcpp.desktop یا FooCorp Painter Pro.desktop اسم‌ فایل بد است.
  • [Desktop Entry] این بایستی که همیشه در خط اول باشد.
  • Type= در این قسمت نوع مشخص می‌شود که می‌تواند یا Application باشد یا Directory یا Link.
  • Encoding= فایل مورد نظر بایستی که همیشه encode شده‌ی UTF-8 باشد.
  • Name= در این قسمت اسمی قرار می‌گیره که ما می‌خوایم توی منو باشه.
  • Comment= برای توضیحات اضافه‌ای است که می‌خواهیم با آن برنامه را توصیف کنیم
  • Exec= محل قرارگیری فایل اجرایی یا دستوری که در ترمینال وارد می‌کنیم تا برنامه اجرا شود، را باید در این قسمت وارد کنیم. (برای این قسمت می‌توانیم یک سری متغیرها رو تعریف کنیم، که از طریق  لینک بالا قابل دسترس است)
  • Icon= محل قرارگیری آیکون برنامه را مشخص می‌کنیم
  • Terminal= در مقابل این پارامتر یا false قرار می‌گیرد یا true. اگر true باشد یعنی این‌که برنامه در ترمینال اجرا می‌گردد و اگر false باشد، یعنی برنامه در ترمینال اجرا نمی‌گردد.
  • Categories= این قسمت مشخص کننده‌ی این است که برنامه‌ی مورد نظر در چه دسته‌بندی‌هایی قرار می‌گیره.
برای آشنایی با دیگر keyها (کلیدها) و توضیحات بیشتر می‌توانید به آدرس‌های زیر مراجعه فرمایید (به هرکدام از پارامترها یک key  گفته می‌شود مثل: Type, Encoding, Name و غیره.)

  • سلمان محمدی