نوشته‌های من

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

نوشته‌های من

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

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

۵ مطلب با کلمه‌ی کلیدی «لینوکس» ثبت شده است

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

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

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

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

  • حامد ذقاقی

مشکل زمانی مشخص شد که می‌خواستم برنامه‌‌ای که به X سرور نیاز داشت را بر روی یک لینوکس سرور اجرا کنم. دسترسی من به این سیستم از طریق SSH بود و از طرفی برنامه به خودی خود نیازی به X سرور و تعامل با کاربر نداشت و این نیاز فقط به دلیل یکی از کتابخانه‌های مورد نیاز برنامه بود.

از آنجایی که این برنامه بایستی همیشه در حال اجرا باشد، نمی‌توانستم از امکان فوروارد کردن X روی ارتباط SSH استفاده کنم.


X سرور مجازی

همانطور که از اسمش بر می‌آید یک X سرور مجازی است که اکثر وظایف یک X سرور را انجام می‌دهد بدون اینکه نیازی به صفحه نمایش و یا هر گونه سخت افزار ورودی مانند ماوس و کیبور باشد.  

موارد استفاده کمی برای این نوع سرور وجود دارد،  مانند

  • اجرا کردن برنامه‌های که واقعا نیازی به یک x سرور ندارند و یا اگر نیاز دارند هیچ تعاملی با کاربر ندارند! 
  • تست برنامه‌ها در تنظیمات نمایشی غیر استاندارد و یا تنظیماتی که سخت افزار آن موجود نیست

Xvfb نمونه‌ای از این سرور هاست که از یک بافر برای ترسیم استفاده می‌کند و می‌توانید با استفاده از فرمان زیر آن را در اوبونتو نصب کنید.
$ sudo apt-get install xvfb
و به صورت زیر می‌توانید آن را راه‌اندازی کنید.
$ Xvfb :1
و سپس در کنسولی که می‌خواهیم از آن استفاده کنید ابتدا متغیر محیطی DISPLAY را تنظیم می‌کنیم و سپس برنامه مورد نظر را  اجرا می‌کنید.
$ export DISPLAY=:1

برای اطلاع بیشتر از این فرمان به اینجا مراجعه کنید.



  • حامد ذقاقی

بسیاری از ما روش‌های متفاوتی و مختلفی را برای ویرایش فایل‌هایی که روی یک کامپیوتر دیگر است می‌دانیم و شاید روزانه از آن‌ها استفاده می‌کنیم. مطلبی که در این‌جا قصد انتشار آن را دارم مربوط به ویرایش فایل‌های روی یک کامپیوتر دیگر است، در شرایطی که شما فقط دسترسی 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 های برنامه بعد از کرش استفاده کردم و در ادامه قصد دارم نکاتی را در این‌باره فهرست کنم شاید زمانی به کمکتان بیاید.

  • حامد ذقاقی