نوشته‌های من

درباره برنامه‌نویسی، بازی، کتاب و هر چیزی که دوست داشته باشم

نوشته‌های من

درباره برنامه‌نویسی، بازی، کتاب و هر چیزی که دوست داشته باشم

نوشته‌های من
طبقه بندی موضوعی

۷ مطلب با موضوع «آموزش» ثبت شده است

مطلبی که در اینجا قصد دارم بنویسم، نتیجه جستجوی من در ارتباط با نحوه نوشتن یک فایروال در لینوکس است.

چگونه می‌توان در لینوکس بسته‌های شبکه را به صورت برخط دریافت کرد؟ چگونه می‌توان آن‌ها را بلاک کرد و یا تغییر داد؟ برنامه‌ای مانند iptables چگونه عمل می‌کند؟ دیگر فایروال‌های تحت لینوکس چگونه کار می‌کنند؟

این‌ها سوال‌هایی در ذهنم بودند که برای آن‌ها دنبال جواب بودم و البته راه‌های رسیدن به یک فایروال زیاد است و چیزی که اینجا بیان می‌شود تنها یکی از آن‌هاست و لزوما بهترین راه نیست. لازم به ذکر است که منظور از فایروال، فایروال نسل یک است و به طور خلاصه منظور فایروالی است که فقط بسته‌ها را فیلتر می‌کند و State-full نیست و بسیاری از ویژگی‌های یک فایروال نسل جدید را ندارد. برای مطالعه نسل‌های مختلف فایروال به صفحه فایروال در ویکی‌پدیا[^] و یا مراجع دیگر مراجعه نمایید.

توجه نمایید که آنچه در اینجا آمده است بر روی کرنل لینوکس 3.13.0-rc4+ و 3.5.0.40 تست شده است و ممکن است برای نسخه‌های دیگر نیاز به مقداری تغییر داشته باشد.

  • حامد ذقاقی

Processing مجموعه‌ای از کتابخانه‌های جاوا به همراه یک محیط برنامه‌نویسی(PDE) است، که در ابتدا برای آموزش مبانی برنامه‌نویسی به صورت تعاملی-بصری ساخته شده بود و اکنون بیشتر توسط برنامه‌نویسان حرفه‌ای مورد استفاده قرار می‌گیرد. بیش از هزاران دانشجو، هنرمند، محقق و علاقه‌مند از Processing جهت یادگیری، نمونه سازی و ساخت محصول نهایی استفاده می‌کنند.

PDE

  • حامد ذقاقی

بسیاری از ما روش‌های متفاوتی و مختلفی را برای ویرایش فایل‌هایی که روی یک کامپیوتر دیگر است می‌دانیم و شاید روزانه از آن‌ها استفاده می‌کنیم. مطلبی که در این‌جا قصد انتشار آن را دارم مربوط به ویرایش فایل‌های روی یک کامپیوتر دیگر است، در شرایطی که شما فقط دسترسی ssh به آن کامپیوتر دارید.


سیستم فایلی sshfs

این سیستم فایلی بر پایه یک ارتباط ssh پیاده‌سازی شده است و می‌توانید با استفاده از این سیستم فایلی، یک دایرکتوری از یک کامپیوتر با دسترسی ssh را درون یکی از دایرکتوری‌های کامپیوتر خودتان mount‌ کنید و بدین ترتیب به آن‌ها در کامپیوتر خودتان دسترسی داشته باشید و یا آن‌ها را ویرایش کنید.


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

$ sudo apt-get install sshfs

قالب استفاده از این فرمان به شکل زیر است.

sshfs user@remote-address:remote-dir local-dir

که در آن، user نام کاربری است که از آن برای ارتباط ssh استفاده می‌کنید، remote-address هم آی‌پی و یا نام کامپیوتری است که به آن دسترسی ssh دارید و remote-dir دایرکتوری است که می‌خواهید mount کنید. local-dir هم آدرس دایرکتوری روی کامپیوتر خورتان است که می‌خواهید از آن طریق به فایل‌ها دسترسی داشته باشید. 

به عنوان نمونه چنانچه با کاربر zaghaghi به آدرس 1.2.3.4 دسترسی ssh داشته باشم، می‌توانم با فرمان زیر دایرکتوری /var/www/ کامپیوتر راه‌دور را در دایرکتوری /tmp/remote/www/ کامپیوتر خودم mount کنم.

$ sshfs zaghaghi@1.2.3.4:/var/www/ /tmp/remote/www/

توجه داشته باشید که هر دو دایرکتوری بایستی وجود داشته باشند.

پس از اجرای فرمان از شما رمز عبور خواسته می‌شود و بایستی رمز عبوری را که از آن برای ارتباط ssh استفاده می‌کنید، به کار ببرید.


برای umount کردن می‌توانید از یکی از فرامین زیر استفاده کنید.

$ sudo umount local-dir
$ sudo fusermount -u local-dir

مرجع

  • http://fuse.sourceforge.net/sshfs.html [^]

شاد و پیروز باشید.

  • حامد ذقاقی

دریافت یک مخزن گیت

همانطور که می‌دانید برای دریافت یک مخزن گیت بایستی از فرمان git clone  استفاده کرد. به عنوان مثال برای دریافت سورس لینوکس می‌توان فرمان زیر را اجرا کرد.

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

مخزن گیت سورس لینوکس حجم نسبتا زیادی دارد (حدود ۹۰۰ مگابایت) و چنانچه سرعت اینترنت خوبی نداشته باشید و یا ارتباط اینترنت قابل اطمینانی نداشته باشید ممکن است نتوانید به راحتی این مخزن گیت را دریافت کنید. چرا که گیت در صورت قطع شدن اینترنت تمامی مراحل دریافت را از ابتدا انجام می‌دهد.


دریافت یک مخزن گیت حجیم

چنانچه به هر دلیلی نتوانید مخزن گیت مورد نظر خود را با استفاده از فرمان بالا دریافت کنید، می‌توانید این روش را امتحان کنید.

از آنجایی که تقریبا تمامی مخازن گیت علاوه بر پروتکل git از پروتکل‌های دیگر مثل http پشتیبانی می‌کنند، می‌توانید فایل‌های مخزن را با استفاده از یک نرم‌افزار دانلود، دریافت کنید و سپس آن را به یک مخزن معمولی تبدیل کنید.

مخزن گیت سورس لینوکس، علاوه بر پروتکل‌های ذکر شده از پروتکل rsync نیز پشتیبانی می‌کند که به ما امکان دریافت فایل‌های مخزن را به راحتی می‌دهد. برای این کار می‌توانید فرمان زیر را اجرا نمایید.

$ rsync -arvzP rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/ linux.git/

چنانچه این فرمان به دلیل قطع شدن ارتباط اینترنت، قطع شد و یا به خواست خودتان اجرای آن را  قطع کردید. می‌توانید مجددآن را اجرا کنید تا دریافت فایل‌ها ادامه پیدا کند.

پس از اتمام اجرای فرمان بالا و دریافت تمامی فایل‌های مخزن سورس لینوکس، بایستی این مخزن را که در وضعیت bare قرار دارد به یک مخزن معمولی تبدیل کنید تا بتوانید از آن استفاده کنید. انجام این کار با اجرای فرامین زیر امکان پذیر است.

$ mkdir linux
$ mv linux.git linux/.git
$ cd linux
$ git remote add remote git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
$ git config --bool core.bare false
$ git checkout master

به این دلیل که دایرکتوری مخزن در حالت معمولی با نام .git مشخص می‌شود، دو فرمان اول و دوم، دایرکتوری دریافت شده را به این نام تغییر  ‌می‌دهند.  فرمان چهارم ارتباط بین مخزن دریافت شده و مخزن اصلی را مشخص می‌کند تا برای به‌روزرسانی‌های بعدی بتوان از همان فرامین گیت استفاده کرد. فرمان بعدی مخزن دریافت شده را از حالت bare خارج کرده و به یک مخزن معمولی تبدیل می‌کند و در نهایت آخرین فرمان فایل‌های مربوط به شاخه master را از مخزن بیرون می‌کشد تا بتوان از آن‌ها استفاده کرد.


شاد و پیروز باشید.

  • حامد ذقاقی

مقدمه

بدتربن زمان برای یک برنامه‌نویس زمانی است که برنامه‌اش کرش میکند و بسته می‌شود!

یکی از برنامه‌های که این اواخر نوشتم یک جمع‌کننده لاگ مرکزی بود که از تعداد زیادی دستگاه‌های امنیت شبکه لاگ دریافت می‌کرد و بعد از پردازش اولیه هر لاگ برای بررسی و جستجو و آمارگیری در یک مخزن داده ذخیره می‌کرد. نرخی ارسال این لاگ‌ها تقریبا بالای ۲۰٬۰۰۰ لاگ در ثانیه است و به دلیل اهمیتی که لاگ‌ها دارند کرش کردن برنامه یعنی از دست دادن ۲۰٬۰۰۰ لاگ در ثانیه!


بعد از تکمیل برنامه و انجام تست‌ها، برنامه زیر بار قرار گرفت ولی در محیط واقعی اوضاع به گونه‌ی دیگری پیش می‌رفت و برنامه بعد از گذشت زمانی کرش می‌کرد. برای رفع ایرادات برنامه و پایدار کردن برنامه از core dump های برنامه بعد از کرش استفاده کردم و در ادامه قصد دارم نکاتی را در این‌باره فهرست کنم شاید زمانی به کمکتان بیاید.

  • حامد ذقاقی

ویرایش: تلفظ صحیح Arch، آرچ است و نه آرک. در متن اصلاح شد.

در این مطلب سعی می‌کنم که نحوه نصب لینوکس آرچ را به روی کوبی‌بورد آموزش بدم. البته به تفصیل و به صورتی که با کمی دقت و تغییر بشود برای بورد‌های آرم دیگر و برای نصب توزیع‌های دیگر لینوکس هم مفید واقع شود. لازم به ذکر است که این نصب تنها بل خروجی تصویر HDMI آزمایش شده است و برای دریافت خروجی روی مانیتور و یا LCD بایستی بعد از نصب برخی تنظیمات تغییر یابند.

نحوه بوت شدن

قبل از بررسی و انجام مراحل مختلف نصب و راه‌اندازی لینوکس روی کوبی‌بورد، بهتر است مراحل بوت شدن این بورد را متوجه شویم.  پردازنده‌های Allwinner A10 دارای یک BROM هستند. این قسمت از پردازنده از دو بخش تشکیل شده است. بخش اول وظیفه راه‌اندازی بورد از روی حافظه‌های جانبی همچون NAND و یا MMC را دارد و بخش دوم از یک برنامه به نام FEL تشکیل شده است که در اینجا به آن نمی‌پردازیم. چنانچه دکمه مربوط به FEL پایین نباشد BROM بخش اول را اجرا می‌کند که وظیفه راه‌اندازی بورد از روی حافظه‌های جانبی را دارد و به ترتیب زیر عمل خواهد کرد:
  1. اطلاعات مورد نیاز راه‌اندازی بورد را از اولین کارت حافظه می‌خواند (حداقل این اطلاعات ۴کیلو بایت هستند و از ابتدای کارت حافظه ۸کیلوبایت فاصله دارند) چنانچه این اطلاعات وجود داشته باشند و معتبر باشند ادامه راه‌اندازی به این قسمت سپرده می‌شود.
  2. چنانچه اطلاعات در اولین کارت حافظه وجود نداشته باشند و یا معتبر نباشند اطلاعات مورد نظر از حافظه NAND خوانده می‌شود و در صورت موجود بودن و معتبر بودن ادامه راه‌اندازی به این قسمت سپرده می‌شود.
  3. و در ادامه چنانچه اطلاعات مورد نظر روی حافظه NAND وجود نداشته و یا معتبر نباشد این اطلاعات از روی کارت حافظه دوم خوانده می‌شود.
  4. و در نهایت چنانچه اطلاعات مورد نیاز در کارت حافظه دوم نیز موجود نباشد و یا نامعتبر باشد، ادامه راه‌اندازی بورد به برنامه FEL واگذار خواهد شد.
اطلاعات راه‌اندازی که BROM از روی کارت حافظه می‌خواند به «راه‌انداز برنامه ثانویه» و یا (SPL) شناخته می‌شود. همانطور که متوجه شده‌اید BROM قابل تغییر نیست و وظیفه SPL مربوط به راه‌اندازی سخت‌افزار بورد است و پس از انجام وظایف خود راه‌انداز دیگری را فرا‌می‌خواند که به آن U-Boot گفته می‌شود. U-Boot راه‌اندازی است که سیستم عامل را راه‌می‌اندازد. U-Boot می‌بایست از ۳۲کیلوبایتی اول حافظه شروع شود.

در نتیجه مراحل راه‌اندازی بورد به این ترتیب است:

ترتیب راه‌اندازهای کوبی‌بورد
در بیشتر موارد فایل‌های مربوط به SPL Loader و U-Boot برای هر سخت‌افزاری، توسط سازندگان آن در دسترس است و نیازی به تولید آن‌ها نیست هر چند این امکان وجود دارد. برخی سازندگان سخت‌افزار همچون کوبی بورد یک بسته سخت‌افزاری در اختیار کاربران قرار می‌دهند که علاوه بر راه‌انداز‌ها حاوی کرنل کامپایل شده مناسب برای بورد و ماژول‌های کرنل و درایورهای سخت‌افزاری آن بورد می‌باشند.
بسته سخت‌افزاری کوبی‌بورد با ۱گیگا بایت حافظه را از اینجا و بسته سخت‌افزاری کوبی بورد با ۵۱۲مگا بایت حافظه را از اینجا دریافت کنید.
  • حامد ذقاقی

همانطور که احتمالا می‌دانید «گیت» یا همان "git" یک «سیستم کنترل نسخه» توزیع شده است. تا دیروز تمامی پروژه‌هایم توسط "svn" کنترل می‌شد اما برای پروژه‌ی اخیر تصمیم گرفتم که از گیت استفاده کنم. در ادامه مراحل مختلف نصب و راه اندازی گیت را توضیح می‌دهم به امید اینکه بتواند مورد استفاده واقع شود.

تمامی دستورات بر روی سیستم اوبونتو و سرور دبیان انجام شده است. برای استفاده از این دستورات در سیستم عامل ویندوز ابتدا نرم‌افزار گیت را از سایتش (http://www.git-scm.com) دریافت کرده و پس از نصب از git bash استفاده نمایید.

برای دسترسی به یک سرور گیت می‌توان از سه پروتکل ssh، git و http استفاده کرد که در اینجا نحوه راه‌اندازی و استفاده ssh توضیح داده خواهد شد.

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

server$ sudo adduser git

پس از پاسخگویی به سوالات مربوط به کاربر git نوبت به نصب گیت میرسه.

server$ sudo apt-get install git-core

بعد از اتمام مراحل نصب گیت پوشه‌ای برای پروژه خود ایجاد می‌کنیم و در آن پوشه یک مخزن گیت راه‌اندازی می‌کنیم. دقت نمایید که دستورات زیر باید توسط کاربر git و یا هرکاربری که برای این امر تعریف کرده‌اید انجام شود.

server$ mkdir /Projects/ProjectName
server$ cd /Projects/ProjectName
server$ git --bare init

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

client$ sudo apt-get install git-core

با اجرای مرحله بالا گیت را روی سیستم مورد نظر نصب می‌کنیم. چنانچه قبلا این کار را انجام داده‌ایم نیازی به اجرای دوباره‌ی آن نیست.

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

client$ git config --global user.name "Hamed Zaghaghi"
client$ git config --global user.email "hamed.zaghaghi@gmail.com"

در مرحله بعد به پوشه حاوی کدهای اولیه می‌رویم و یک مخزن گیت محلی در آن پوشه ایجاد می‌کنیم.

client$ cd ProjectPath
client$ git init

پس از ایجاد یک مخزن گیت محلی، فایل‌های پروژه را به مخزن اضافه می‌کنیم. به عنوان مثال

client$ git add *.cpp
client$ git add *.h
client$ git add Makefile

چنانچه در حال حاضر پروژه حاوی هیچ فایلی نیست، یک فایل خالی ایجاد کنید و آن را به مخزن اضافه نمایید.

در ادامه فایل‌های اضافه شده در مخزن را به مخزن تحویل می‌دهیم به عبارت دیگر این تغییرات را commit میکنیم.

client$ git commit -m "Initial commit"

عبارتی که در انتهای دستور آمده است توضیحاتی است که برای این تحویل می نویسیم و می‌تواند هر متن دیگری باشد.

در آخرین مرحله از راه‌اندازی گیت. بین مخزن محلی و مخزن اصلی که در سرور واقع شده است دستور زیر را اجرا می‌کنیم.

client$ git remote add origin git@server:/Projects/ProjectName
دقت نمایید که آخرین قسمت از دستور بالا حاوی کاربر تعریف شده در سرور (git)، نام و یا آی‌پی سرور (server) و مسیر پروژه روی سرور (/Projects/ProjectName) می‌باشد.
بعد از برقراری این ارتباط تغییراتی را که به مخزن محلی تخویل داده‌ایم را برای مخزن اصلی ارسال می‌کنیم.
client$ git push origin master
بعد از اجرای فرمان بالا گیت برای ارسال تغییرات به سرور از پروتکل ssh استفاده می‌کند و به همین دلیل در این مرحله رمزعبور کاربر git پرسیده می‌شود.

کاربران دیگر برای استفاده از این سرور تنها کافی است پس از نصب گیت و اعمال تنظیمات مربوط به نام کاربر و ایمیل کاربر که در بالا گفته شد یک نسخه از آخرین وضعیت سرور را دریافت کنند.

other-client$ git clone git@server:/Projects/ProjectName

اگر می خواهید که از محیط تحت وب گیت استفاده کنید می‌توانید با اجرای فرمان زیر در سرور به این محیط تحت وب در آدرس سرور پورت 1234 دسترسی داشته باشید.

server$ git instaweb --httpd=apache2

چنانچه روی سرور، وب‌سروری غیر از apache نصب کرده‌اید مانند webrick و یا lighttpd. برای اجرای فرمان بالا از نام وب سرور به جای apache2 استفاده کنید.

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

server$ git instaweb --httpd=apache2 --stop

بیشتر بخوانید، بیشتر بدانید

  • برای یادگیری مفاهیم کار با گیت خواندن این کتاب را توصیه می‌کنم.
  • برای تمرین دستورات گیت حتما به اینجا سر بزنید.
  • چنانچه پروژه شما متن باز است می‌توانید از سرویس رایگان github.com استفاده کنید.
  • حامد ذقاقی