تفاوت disable و mask در systemd
در توزیع های لینوکسی که از systemd به عنوان init system استفاده می كنند (مانند RHEL/CentOS 7 و یا Ubuntu 15.10 به بعد و بسیاری دیگر). برای متوقف نمودن یک سرویس کافی است unit مربوط به آن سرویس را "stop" کنیم. به این صورت:
# systemctl stop httpd.service
اما اگر قصد داریم در بوت بعدی سیستم عامل این سرویس استارت نشود باید آن را به این ترتیب "disable" کنیم:
# systemctl disable httpd.service
اما شاید شنيده باشید که در systemd موضوعی وجود دارد به نام Unit Dependencies. به طور مثال می توانيد برای httpd.service لیست Dependencyها را ببینید:
# systemctl list-dependencies httpd.service
httpd.service
● ├─-.mount
● ├─system.slice
● ├─tmp.mount
● ├─var.mount
● └─basic.target
● └─-.mount
● ├─alsa-restore.service
حال اگر شما یکی از این unitها را که httpd در حالت اجرا به آن نیاز دارد را disable کنید عملا systemd متوجه نیاز httpd به آن خواهد شد و بدون توجه به تصمیم شما برای disable و یا stop بودن unit آن را استارت می کند. در برخی موارد که ما از سرویس هايي با نقش هاي مشابه (مانند firewalldو iptables) استفاده میکنیم و قصد سوییج بین آن ها را داریم این موضوع ما را دچار سردرگمی می کند. برای جلوگیری از بروز این مشکل بهترین پیشنهاد این است که unit مورد نظر را mask نمایید:
# systemctl mask httpd.service
Created symlink from /etc/systemd/system/httpd.service to /dev/null.
همانطور که از خروجی دستور فوق هم مشخص است عمل mask شبیه به ساخت یک لینک به /dev/null کار میکند. حال اگر نسبت به استارت سرویس اقدام کنید با این پیام مواجه می شوید:
# systemctl start httpd.service
Failed to start httpd.service: Unit httpd.service is masked
اگر قصد داشتید یک سرویس را از حالت mask خارج کنید از دستور زیر استفاده نمایید:
# systemctl unmask httpd.service
در توزیع های لینوکسی که از systemd به عنوان init system استفاده می كنند (مانند RHEL/CentOS 7 و یا Ubuntu 15.10 به بعد و بسیاری دیگر). برای متوقف نمودن یک سرویس کافی است unit مربوط به آن سرویس را "stop" کنیم. به این صورت:
# systemctl stop httpd.service
اما اگر قصد داریم در بوت بعدی سیستم عامل این سرویس استارت نشود باید آن را به این ترتیب "disable" کنیم:
# systemctl disable httpd.service
اما شاید شنيده باشید که در systemd موضوعی وجود دارد به نام Unit Dependencies. به طور مثال می توانيد برای httpd.service لیست Dependencyها را ببینید:
# systemctl list-dependencies httpd.service
httpd.service
● ├─-.mount
● ├─system.slice
● ├─tmp.mount
● ├─var.mount
● └─basic.target
● └─-.mount
● ├─alsa-restore.service
حال اگر شما یکی از این unitها را که httpd در حالت اجرا به آن نیاز دارد را disable کنید عملا systemd متوجه نیاز httpd به آن خواهد شد و بدون توجه به تصمیم شما برای disable و یا stop بودن unit آن را استارت می کند. در برخی موارد که ما از سرویس هايي با نقش هاي مشابه (مانند firewalldو iptables) استفاده میکنیم و قصد سوییج بین آن ها را داریم این موضوع ما را دچار سردرگمی می کند. برای جلوگیری از بروز این مشکل بهترین پیشنهاد این است که unit مورد نظر را mask نمایید:
# systemctl mask httpd.service
Created symlink from /etc/systemd/system/httpd.service to /dev/null.
همانطور که از خروجی دستور فوق هم مشخص است عمل mask شبیه به ساخت یک لینک به /dev/null کار میکند. حال اگر نسبت به استارت سرویس اقدام کنید با این پیام مواجه می شوید:
# systemctl start httpd.service
Failed to start httpd.service: Unit httpd.service is masked
اگر قصد داشتید یک سرویس را از حالت mask خارج کنید از دستور زیر استفاده نمایید:
# systemctl unmask httpd.service
Forwarded from Deleted Account
منظور از DevOps (دوآپس) چیست؟
اگر شما هم در زمینهٔ توسعهٔ نرمافزار فعالیت داشته باشید، ممکن است آگهیهای استخدام مهندس DevOps نظر شما را به خود جلب نموده یا حداقل سبب شده باشند تا از خود یا اطرافیان بپرسید که دوآپس چیست و یک متخصص این حوزه چه مسئولیتهایی دارا است و این همان چیزی است که در این این مقاله قصد داریم به بررسیاش بپردازیم.
برای درک بهتر این موضوع که مهندسان DevOps دقیقاً چه کاری انجام میدهند، بهتر است به چرخهٔ تولید نرمافزار نگاهی داشته باشیم اما پیش از آن، نیمنگاهی به تعریف این اصطلاح از ویکیپدیا خواهیم داشت:
در واقع DevOps یک فرایند تولید نرمافزار است که بر مبنای ارتباط و همکاری هرچه بیشتر میان تیمهای تولید و توسعهٔ نرمافزار و تیمهای اجرایی بنا شده است که در طی این فرآیند عملیاتی مانند Integration ،Testing و Deployment و همچنین اِعمال تغییرات زیرساختی به صورت خودکار درمیآیند و در کل هدف از چنین فرایندی ایجاد فرهنگی است که در آن تولید، تست و انتشار نرمافزار به شیوهای سریع، مداوم و مطمئن انجام شود.
حال بپردازیم به بررسی فرایند توسعهٔ نرمافزار به طوری که این فرایند را میتوان به پنج مرحلهٔ اصلی تقسیم کرد که عبارتند از Planning ،Development ،Testing ،Deployment و Maintenance که در این میان، دو مرحلهٔ Planning و Maintenance بیشترین زمان مهندسین دوآپس را به خود اختصاص میدهند.
📌 طرح ریزی یا Planing
در این مرحله از کار، تیمی متشکل از دولوپرها، مدیران تولید و … اهداف پروژه را تعریف و ترسیم نموده و ساختار کلی نرمافزار را تعیین میکنند و در این مرحله مهندس دوآپس باید از دانش فنی اعضای تیم و تسلط آنها بر پلتفرمهای مورد استفاده بهره برده و بررسی نماید که چگونه میتوان در قالب یک سیستم جامع و یکپارچه به تمام اهداف مورد نظر تیم جامهٔ عمل پوشاند (در کل، این مرحله از کار یکی از مراحل زمانبر است.)
پس از اینکه شِمای کلی سیستم اولیه پیادهسازی و اجرا شد، مهمترین مسئله هدایت تیم در جهت نحوهٔ افزودن قابلیتها و تکنولوژیهای از قبل تولیدشده به این سیستم است. در واقع، مهندس دوآپس همواره باید به دنبال راهکارهایی برای انجام خودکار فرآیندهای مختلف باشد تا بار انجام این کارها تا حد امکان از دوش اعضای تیم برداشته شود. در این مرحله، مهندس دوآپس باید پاسخ سؤالات زیر را بیابد:
- دو سرویس مختلف چگونه میتوانند با هم در تعامل باشند؟
- برای مرتبط کردن این دو سرویس، از چه پروتکلی باید استفاده نمود؟
- آیا سختافزاری که در اختیار ما قرار دارد پاسخگوی نیاز ما هست؟
- برای اینکه بتوانم در امر تولید به مهندسان کمک کنم، نیاز به چه چیزهایی دارم؟
- آیا سرویس مذکور به اصطلاح Production-Ready خواهد بود؟
- آیا تمام دیپندنسیهای مورد استفاده در نرمافزار برای ما ملموس هستند؟
- چه چیزی را لازم است بسازیم و چه چیزی را باید خریداری کنیم؟
- آیا یک تَسک خاص را میتوان به صورت خودکار انجام داد؟
- چهطور میتوان در آینده از این نرمافزار پشتیبانی نمود؟
📌 توسعه یا Development
در این مرحله، ترکیببندی کلی کار مشخص شده و دیگر نوبت دولوپرها است که کد بزنند و قابلیتهای پیشبینی شده را برای نرمافزار ایجاد کنند و هدف عمدهٔ مهندس دوآپس در این مرحله این است که به دنبال راههایی برای سریعتر انجام شدن کارها باشد. به عبارتی، وی باید راهی پیش پای دولوپرها بگذارد تا بتوانند بهترین کار را در کمترین زمان ممکن انجام دهند و این دقیقاً با هدف نهایی کار، یعنی تولید نرمافزار، هماهنگ و سازگار است.
در حقیقت، در این پروسه مهندس دوآپس به دولوپرها میگوید که از چه ابزاری استفاده کنند و همچنین ابزارهای جدید را در اختیار آنها قرار میدهد تا کارشان تسهیل گردد. همچنین این مهندس دوآپس است که باید بخشهای مختلف کدهایی که توسط دولوپرها و در محیط توسعه نوشته شدهاند را مانند قطعات پازل در کنار هم قرار داده و آنها را با محیط نهایی نرمافزار هماهنگ کند و این کاری است که هر دولوپری از عهدهٔ آن بر نمیآید و شاید اگر مهندس دوآپس نمیبود، بسیاری از نرمافزارها قدرت، جلوه و شکوه امروزی خود نداشتند! سؤالاتی که یک مهندس دوآپس در این مرحله ممکن است با آن مواجه شود عبارتند از:
- چگونه میتوانم دولوپرها را در فضایی مشابه فضای محصول نهایی نگاه دارم؟
- چهطور به دولوپرها اجازه دهم تا از ابزارهای مورد علاقهٔ خود استفاده کنند؟
- چگونه میتوانم بهرهوری و کارایی دولوپرها را افزایش دهم؟
- چهطور باید برای دولوپرها توضیح دهم که محیط نهایی نرمافزار چگونه خواهد بود؟
اگر شما هم در زمینهٔ توسعهٔ نرمافزار فعالیت داشته باشید، ممکن است آگهیهای استخدام مهندس DevOps نظر شما را به خود جلب نموده یا حداقل سبب شده باشند تا از خود یا اطرافیان بپرسید که دوآپس چیست و یک متخصص این حوزه چه مسئولیتهایی دارا است و این همان چیزی است که در این این مقاله قصد داریم به بررسیاش بپردازیم.
برای درک بهتر این موضوع که مهندسان DevOps دقیقاً چه کاری انجام میدهند، بهتر است به چرخهٔ تولید نرمافزار نگاهی داشته باشیم اما پیش از آن، نیمنگاهی به تعریف این اصطلاح از ویکیپدیا خواهیم داشت:
در واقع DevOps یک فرایند تولید نرمافزار است که بر مبنای ارتباط و همکاری هرچه بیشتر میان تیمهای تولید و توسعهٔ نرمافزار و تیمهای اجرایی بنا شده است که در طی این فرآیند عملیاتی مانند Integration ،Testing و Deployment و همچنین اِعمال تغییرات زیرساختی به صورت خودکار درمیآیند و در کل هدف از چنین فرایندی ایجاد فرهنگی است که در آن تولید، تست و انتشار نرمافزار به شیوهای سریع، مداوم و مطمئن انجام شود.
حال بپردازیم به بررسی فرایند توسعهٔ نرمافزار به طوری که این فرایند را میتوان به پنج مرحلهٔ اصلی تقسیم کرد که عبارتند از Planning ،Development ،Testing ،Deployment و Maintenance که در این میان، دو مرحلهٔ Planning و Maintenance بیشترین زمان مهندسین دوآپس را به خود اختصاص میدهند.
📌 طرح ریزی یا Planing
در این مرحله از کار، تیمی متشکل از دولوپرها، مدیران تولید و … اهداف پروژه را تعریف و ترسیم نموده و ساختار کلی نرمافزار را تعیین میکنند و در این مرحله مهندس دوآپس باید از دانش فنی اعضای تیم و تسلط آنها بر پلتفرمهای مورد استفاده بهره برده و بررسی نماید که چگونه میتوان در قالب یک سیستم جامع و یکپارچه به تمام اهداف مورد نظر تیم جامهٔ عمل پوشاند (در کل، این مرحله از کار یکی از مراحل زمانبر است.)
پس از اینکه شِمای کلی سیستم اولیه پیادهسازی و اجرا شد، مهمترین مسئله هدایت تیم در جهت نحوهٔ افزودن قابلیتها و تکنولوژیهای از قبل تولیدشده به این سیستم است. در واقع، مهندس دوآپس همواره باید به دنبال راهکارهایی برای انجام خودکار فرآیندهای مختلف باشد تا بار انجام این کارها تا حد امکان از دوش اعضای تیم برداشته شود. در این مرحله، مهندس دوآپس باید پاسخ سؤالات زیر را بیابد:
- دو سرویس مختلف چگونه میتوانند با هم در تعامل باشند؟
- برای مرتبط کردن این دو سرویس، از چه پروتکلی باید استفاده نمود؟
- آیا سختافزاری که در اختیار ما قرار دارد پاسخگوی نیاز ما هست؟
- برای اینکه بتوانم در امر تولید به مهندسان کمک کنم، نیاز به چه چیزهایی دارم؟
- آیا سرویس مذکور به اصطلاح Production-Ready خواهد بود؟
- آیا تمام دیپندنسیهای مورد استفاده در نرمافزار برای ما ملموس هستند؟
- چه چیزی را لازم است بسازیم و چه چیزی را باید خریداری کنیم؟
- آیا یک تَسک خاص را میتوان به صورت خودکار انجام داد؟
- چهطور میتوان در آینده از این نرمافزار پشتیبانی نمود؟
📌 توسعه یا Development
در این مرحله، ترکیببندی کلی کار مشخص شده و دیگر نوبت دولوپرها است که کد بزنند و قابلیتهای پیشبینی شده را برای نرمافزار ایجاد کنند و هدف عمدهٔ مهندس دوآپس در این مرحله این است که به دنبال راههایی برای سریعتر انجام شدن کارها باشد. به عبارتی، وی باید راهی پیش پای دولوپرها بگذارد تا بتوانند بهترین کار را در کمترین زمان ممکن انجام دهند و این دقیقاً با هدف نهایی کار، یعنی تولید نرمافزار، هماهنگ و سازگار است.
در حقیقت، در این پروسه مهندس دوآپس به دولوپرها میگوید که از چه ابزاری استفاده کنند و همچنین ابزارهای جدید را در اختیار آنها قرار میدهد تا کارشان تسهیل گردد. همچنین این مهندس دوآپس است که باید بخشهای مختلف کدهایی که توسط دولوپرها و در محیط توسعه نوشته شدهاند را مانند قطعات پازل در کنار هم قرار داده و آنها را با محیط نهایی نرمافزار هماهنگ کند و این کاری است که هر دولوپری از عهدهٔ آن بر نمیآید و شاید اگر مهندس دوآپس نمیبود، بسیاری از نرمافزارها قدرت، جلوه و شکوه امروزی خود نداشتند! سؤالاتی که یک مهندس دوآپس در این مرحله ممکن است با آن مواجه شود عبارتند از:
- چگونه میتوانم دولوپرها را در فضایی مشابه فضای محصول نهایی نگاه دارم؟
- چهطور به دولوپرها اجازه دهم تا از ابزارهای مورد علاقهٔ خود استفاده کنند؟
- چگونه میتوانم بهرهوری و کارایی دولوپرها را افزایش دهم؟
- چهطور باید برای دولوپرها توضیح دهم که محیط نهایی نرمافزار چگونه خواهد بود؟
پرایم در آرچ
اول درایور intel و amd نصب کنید:
sudo pacman -S xf86-video-intel
sudo pacman -S xf86-video-amdgpu
sudo pacman -S xf86-video-ati
با این دستور لیست کارت گرافیکهارو میبینی:
xrandr --listproviders
معمولن پیشفرض از intel استفاده میشه که میتونی ببینی:
glxinfo | grep "OpenGL renderer"
با دستور زیر میتونی لود کنی کارت گرافیکت رو(خروجی دستوری که لیست کارت شبکه هارو دیدی به عدد ۰ و عدد ۱ توجه کن ، با جابجا کردن اعداد در دستور زیر میتونی گرافیک مورد نظرت رو انتخاب کنی)
xrandr --setprovideroffloadsink 1 0
حالا پیشفرض از اینتل استفاده میکنی و برای استفاده از amd باید بزنی:
DRI_PRIME=1 firefox
اول درایور intel و amd نصب کنید:
sudo pacman -S xf86-video-intel
sudo pacman -S xf86-video-amdgpu
sudo pacman -S xf86-video-ati
با این دستور لیست کارت گرافیکهارو میبینی:
xrandr --listproviders
معمولن پیشفرض از intel استفاده میشه که میتونی ببینی:
glxinfo | grep "OpenGL renderer"
با دستور زیر میتونی لود کنی کارت گرافیکت رو(خروجی دستوری که لیست کارت شبکه هارو دیدی به عدد ۰ و عدد ۱ توجه کن ، با جابجا کردن اعداد در دستور زیر میتونی گرافیک مورد نظرت رو انتخاب کنی)
xrandr --setprovideroffloadsink 1 0
حالا پیشفرض از اینتل استفاده میکنی و برای استفاده از amd باید بزنی:
DRI_PRIME=1 firefox
local.conf
1.4 KB
این فایل رو در مسیر زیر قرار میدید:
/etc/fonts/local.conf
اسم فونتهای دلخواهتون رو برای سه خانواده فونت
sans-serif
serif
monospace
به ترتیب اولویت به همین شکلی که در فایل من میبینید قرار بدهید
البته دقت کنید که فونت وزیر و وزیر کد نسخه WOL رو استفاده کنید که بتونید از فونت لاتین دلخواهتون استفاده کنید
/etc/fonts/local.conf
اسم فونتهای دلخواهتون رو برای سه خانواده فونت
sans-serif
serif
monospace
به ترتیب اولویت به همین شکلی که در فایل من میبینید قرار بدهید
البته دقت کنید که فونت وزیر و وزیر کد نسخه WOL رو استفاده کنید که بتونید از فونت لاتین دلخواهتون استفاده کنید
- منظور از VLAN mismatch یعنی اینکه شما در شبکه فیزیکی روی physical switch تون VLAN روی ساختید مثل VLAN X و روی vDS هم VLAN Y رو ساختید حالا اگر اینها رو بهم assign کنید اصطلاحاً VLAN mismatch بوجود میاد و VLANها با هم منطبق نیستند. این مورد روی Native VLAN هم گاهی بوجود میاد.
- منظور از mismatch MTU هم اینه که معمولاً در شبکه ها MTU رو مقدارش رو 1500 ست میکنند و by defulat هم همین مقدار (یا مقدار 1518 بعضی جاها ست شده) و اگر مقدار MTU رو کاربر تغییر داده باشه این مشکل بوجود میاد توی شبکه و ارتباطات بهم میریزه. یا بعضی از پلتفرم ها مثل NSX باید MTU رو براشون 9000 ست کنید و توی سوئیچ های فیزیکی شبکه تون این مقدار رو براش به 9000 تنظیم کنید والا mismatch MTU پیش میاد.
- منظور از mismatch MTU هم اینه که معمولاً در شبکه ها MTU رو مقدارش رو 1500 ست میکنند و by defulat هم همین مقدار (یا مقدار 1518 بعضی جاها ست شده) و اگر مقدار MTU رو کاربر تغییر داده باشه این مشکل بوجود میاد توی شبکه و ارتباطات بهم میریزه. یا بعضی از پلتفرم ها مثل NSX باید MTU رو براشون 9000 ست کنید و توی سوئیچ های فیزیکی شبکه تون این مقدار رو براش به 9000 تنظیم کنید والا mismatch MTU پیش میاد.
در انتشار جدید zfs چه چیزهایی اضافه شدند؟
در نسخه 0.8.0با ساپورت کرنلهای لینوکس2.6تا 5.1 قابلیتهای زیر اضافه شدند:
-Native encryption
برای ایجاد فایل سیستم ها و ولوم های رمز نگاری شده که الگوریتم پیش فرض آن aes-256-ccm است
-raw encrypted zfs send/receive
انتقال اطلاعات رفت و برگشتی بطور امن بین poolها
-device removal
اجازه حذف دستگاه ها از سطح بالا از pool storageها
-pool checkpoints
رزرو و نگهداری حالتی کلی از pool و در صورت نیاز برگرداندن به آن حالت در هر موقعی مانند snapshot
-pool TRIM
قابلیتی اساسی برای بهبود پرفورمنس در حافظه های SSD
- pool initialization
از بین بردن ساختار و الگوی قبلی و ایجاد الگوی جدید در فضای اشغال نشده حافظه
-Project accounting and qouta
اضافه شدن ابعاد جدیدی در سطح سابق کاربری/گروه در محدودیتها و صفها و ارتقای مدیریتی و محدودیتها و گزارش استفاده آنها
-channel programs
برای اجرای دستورات مدیریتی در قالب اسکریپتهای Lua در محیط امن و محصور شده با زمان و مموری محدود
-pyzfs & python3 compatibilty
اضافه شدن کتابخانه های جدید برای ارتباط با برنامه های پایتونی بطور api و غیره و بهبود سازگاری با ورژن3پایتون
-direct IO support
سازگاری با مکانیزم لینوکسی direct IO
اطلاعات و توضیحات بیشتر در صفحه گیتهاب zfsonlinux: github.com/zfsonlinux
در نسخه 0.8.0با ساپورت کرنلهای لینوکس2.6تا 5.1 قابلیتهای زیر اضافه شدند:
-Native encryption
برای ایجاد فایل سیستم ها و ولوم های رمز نگاری شده که الگوریتم پیش فرض آن aes-256-ccm است
-raw encrypted zfs send/receive
انتقال اطلاعات رفت و برگشتی بطور امن بین poolها
-device removal
اجازه حذف دستگاه ها از سطح بالا از pool storageها
-pool checkpoints
رزرو و نگهداری حالتی کلی از pool و در صورت نیاز برگرداندن به آن حالت در هر موقعی مانند snapshot
-pool TRIM
قابلیتی اساسی برای بهبود پرفورمنس در حافظه های SSD
- pool initialization
از بین بردن ساختار و الگوی قبلی و ایجاد الگوی جدید در فضای اشغال نشده حافظه
-Project accounting and qouta
اضافه شدن ابعاد جدیدی در سطح سابق کاربری/گروه در محدودیتها و صفها و ارتقای مدیریتی و محدودیتها و گزارش استفاده آنها
-channel programs
برای اجرای دستورات مدیریتی در قالب اسکریپتهای Lua در محیط امن و محصور شده با زمان و مموری محدود
-pyzfs & python3 compatibilty
اضافه شدن کتابخانه های جدید برای ارتباط با برنامه های پایتونی بطور api و غیره و بهبود سازگاری با ورژن3پایتون
-direct IO support
سازگاری با مکانیزم لینوکسی direct IO
اطلاعات و توضیحات بیشتر در صفحه گیتهاب zfsonlinux: github.com/zfsonlinux
GitHub
ZFS on Linux
ZFS on Linux has 15 repositories available. Follow their code on GitHub.
- منظور از Storage Controller که بهش Storage Processor یا SP یا array controller هم میگن، منظور بخشی هست که کارشون اینه که شما اجازه میدن مدیریت storage تون (SAN) رو از طریق اون بصورت GUI انجام بدین و دو تا از این واحدها داریم به اسم SP-A و SP-B که بر روی DPE قرار میگرن.
- منظور RAID Controller هم device هستش روی سرورها که سرور از طریق اون میتونه دیسک ها رو RAID بندی کنه که حالا RAID Controller سخت افزاری داریم و نرم افزاری داریم. روی Storage هم باز ما این رو داریم ولی اونجا اصطلاحاً بهش میگن Disk Array Controller.
- منظور از disk enclosure در واقع یه محفظه ای از دیسک ها هست توی Storageها. ما توی مفاهیم Storage یه DPE داریم یه DAE. که DPE یا Disk Processor Enclosure کلیه قطعات کاربری storage و کلیه چیزهایی که با پروتکل های block-based در ارتباط هستند رو شامل میشه و روش vault driveها که محل قرار گیری OE (سیستم عامل storage) هستند رو هم روی این دیسک هاست. توی EMC معمولاً این DPE خودش 25 تا دیسک داره که 4 تای اول Vault driveها هستند و 21 دیسک بعدی دیسک های ذخیره سازی شما هستند که اگر ظرفیتشون پر بشه میاد یه DAE یا Disk Array Enclosure به DPE اضافه میکنن که اون دیگه OE و Vault drive نداره و تمام دیسک هاش برای ذخیره سازی استفاده میشن. به این DAEها Disk Enclosure هم میگن.
- در مورد external RAID Controller هم تعریف زیر رو بخونید:
The RAID controller is best described as a device in which servers and storage intersect. The controller can be internal to the server, in which case it is a card or chip, or external, in which case it is an independent enclosure, such as a NAS (network-attached storage) .
- منظور RAID Controller هم device هستش روی سرورها که سرور از طریق اون میتونه دیسک ها رو RAID بندی کنه که حالا RAID Controller سخت افزاری داریم و نرم افزاری داریم. روی Storage هم باز ما این رو داریم ولی اونجا اصطلاحاً بهش میگن Disk Array Controller.
- منظور از disk enclosure در واقع یه محفظه ای از دیسک ها هست توی Storageها. ما توی مفاهیم Storage یه DPE داریم یه DAE. که DPE یا Disk Processor Enclosure کلیه قطعات کاربری storage و کلیه چیزهایی که با پروتکل های block-based در ارتباط هستند رو شامل میشه و روش vault driveها که محل قرار گیری OE (سیستم عامل storage) هستند رو هم روی این دیسک هاست. توی EMC معمولاً این DPE خودش 25 تا دیسک داره که 4 تای اول Vault driveها هستند و 21 دیسک بعدی دیسک های ذخیره سازی شما هستند که اگر ظرفیتشون پر بشه میاد یه DAE یا Disk Array Enclosure به DPE اضافه میکنن که اون دیگه OE و Vault drive نداره و تمام دیسک هاش برای ذخیره سازی استفاده میشن. به این DAEها Disk Enclosure هم میگن.
- در مورد external RAID Controller هم تعریف زیر رو بخونید:
The RAID controller is best described as a device in which servers and storage intersect. The controller can be internal to the server, in which case it is a card or chip, or external, in which case it is an independent enclosure, such as a NAS (network-attached storage) .
توضیحی درمورد ابزار قدرتمند و محبوب Ansible و اینکه چطور میتونه به یه Zabbix کار و یا SysAdmin کمک کنه
خب اول بزارین ببینیم خود Ansible چیه ؟ با گسترش روز افزون تکنولوژی و حجیم شدن داده ها و افزایش سرورها و سیستم ها، دستی مدیریت کردن منابع و سرویس ها کاری بسیار دشوار و غیر عقلانی هست، چون ممکنه مثلا کلی خطای غیر عمدی و سهوی در کانفیگ کردن سرورها اتفاق بیفته و باعث down شدن سرویس ها بشه که البته پس از زیاد شدن سرورها و سرویس ها امری طبیعی و غیر قابل انکار هست، حالا یه راهکاری که اکثر سازمان ها و شرکت ها استفاده میکردن و همچنان خیلی ازش استفاد میکنن بحث Scripting بوده و هست که کار همچین آسونی هم نیست، به قول استاد مهرانفرید عزیز که میگفتن شما ممکنه یه اسکریپت بنویسین تو 5 ثانیه اجرا بشه و ممکنه همون اسکریپت رو جوری بنویسین که با برف سال دیگه نتیجه حاصل بشه 😀 (پس این هم کار هر کسی نیست و تخصص خودش رو میخواد)، خب پس راهکار چی بود ؟ این وسط و پس از گذشت چندین سال ابزارهایی مثل Ansible، Puppet، Chef، SaltStack، CFEngine و ... به وجود اومدند که کار اصلی اونها Configuration management (مدیریت پیکربندی) و Application-deployment (پیاده سازی نرم افزار) هست که کار مدیران سیستم ها رو با پیاده سازی automation بسیار آسون میکنه و ما رو به شدت در برابر خطای انسانی و از دست دادن زمان کمک میکنه.
یکی از محبوب ترین این ابزارها Ansible هست که توسط شرکت Redhat پشتیبانی میشه و نسخه ی رایگان و پولی (Tower) داره که یکی از مزیت های اصلی این نرم افزار Agentless (بی نیاز بودن به نصب agent بر روی هاستی که قراره مدیریت بشه) بودن اون هست و این نرم افزار از طریق پروتکل SSH و با استفاده از زبان YAML سرورهای تحت پوشش خودش رو مدیریت میکنه. ضمنا یه فضای مخصوص خودش رو به نام Ansible-galaxy داره که کاربران template هایی که ساختن رو در اونجا قرار میدن و شما فقط کافیه اون template رو برای محیط خودتون سفارشی سازی کنین و استفاده کنین.
حالا ما چطور میتونیم از Ansible و راهکارایی که در اون برای زبیکس وجود داره استفاده کنیم ؟ ذیلا چندتا مثال از این موارد میزنم :
1- نصب زبیکس سرور و زبیکس پراکسی
2- نصب زبیکس Agent، خصوصا وقتی که قراره اون رو روی تعداد زیادی Host نصب کنین.
3- اعمال تغیرات و تنظیمات بر روی تمامی هاست ها، خصوصا زمانی که میخواهیم تغییری را در سطح تمامی agent ها اعمال کنیم.
4- استفاده از زبیکس برای ساختن Ansible inventory : یعنی زمانی که شما زبیکس توی سازمان دارین و تازه میخواین Ansible رو پیاده سازی و استفاده بکنین میتونین Ansible inventory یا همون لیست هاست هارو از زبیکس سرور استخراج کنین که کار شمارو بسیار آسون میکنه.
لینک هایی که برای پیگیری این موارد میتونین ازشون استفاده کنین ذیلا آورده شدن:
https://www.zabbix.com/integrations/ansible
https://github.com/burgosz/ansible-zabbix-inventory
خب اول بزارین ببینیم خود Ansible چیه ؟ با گسترش روز افزون تکنولوژی و حجیم شدن داده ها و افزایش سرورها و سیستم ها، دستی مدیریت کردن منابع و سرویس ها کاری بسیار دشوار و غیر عقلانی هست، چون ممکنه مثلا کلی خطای غیر عمدی و سهوی در کانفیگ کردن سرورها اتفاق بیفته و باعث down شدن سرویس ها بشه که البته پس از زیاد شدن سرورها و سرویس ها امری طبیعی و غیر قابل انکار هست، حالا یه راهکاری که اکثر سازمان ها و شرکت ها استفاده میکردن و همچنان خیلی ازش استفاد میکنن بحث Scripting بوده و هست که کار همچین آسونی هم نیست، به قول استاد مهرانفرید عزیز که میگفتن شما ممکنه یه اسکریپت بنویسین تو 5 ثانیه اجرا بشه و ممکنه همون اسکریپت رو جوری بنویسین که با برف سال دیگه نتیجه حاصل بشه 😀 (پس این هم کار هر کسی نیست و تخصص خودش رو میخواد)، خب پس راهکار چی بود ؟ این وسط و پس از گذشت چندین سال ابزارهایی مثل Ansible، Puppet، Chef، SaltStack، CFEngine و ... به وجود اومدند که کار اصلی اونها Configuration management (مدیریت پیکربندی) و Application-deployment (پیاده سازی نرم افزار) هست که کار مدیران سیستم ها رو با پیاده سازی automation بسیار آسون میکنه و ما رو به شدت در برابر خطای انسانی و از دست دادن زمان کمک میکنه.
یکی از محبوب ترین این ابزارها Ansible هست که توسط شرکت Redhat پشتیبانی میشه و نسخه ی رایگان و پولی (Tower) داره که یکی از مزیت های اصلی این نرم افزار Agentless (بی نیاز بودن به نصب agent بر روی هاستی که قراره مدیریت بشه) بودن اون هست و این نرم افزار از طریق پروتکل SSH و با استفاده از زبان YAML سرورهای تحت پوشش خودش رو مدیریت میکنه. ضمنا یه فضای مخصوص خودش رو به نام Ansible-galaxy داره که کاربران template هایی که ساختن رو در اونجا قرار میدن و شما فقط کافیه اون template رو برای محیط خودتون سفارشی سازی کنین و استفاده کنین.
حالا ما چطور میتونیم از Ansible و راهکارایی که در اون برای زبیکس وجود داره استفاده کنیم ؟ ذیلا چندتا مثال از این موارد میزنم :
1- نصب زبیکس سرور و زبیکس پراکسی
2- نصب زبیکس Agent، خصوصا وقتی که قراره اون رو روی تعداد زیادی Host نصب کنین.
3- اعمال تغیرات و تنظیمات بر روی تمامی هاست ها، خصوصا زمانی که میخواهیم تغییری را در سطح تمامی agent ها اعمال کنیم.
4- استفاده از زبیکس برای ساختن Ansible inventory : یعنی زمانی که شما زبیکس توی سازمان دارین و تازه میخواین Ansible رو پیاده سازی و استفاده بکنین میتونین Ansible inventory یا همون لیست هاست هارو از زبیکس سرور استخراج کنین که کار شمارو بسیار آسون میکنه.
لینک هایی که برای پیگیری این موارد میتونین ازشون استفاده کنین ذیلا آورده شدن:
https://www.zabbix.com/integrations/ansible
https://github.com/burgosz/ansible-zabbix-inventory
GitHub
GitHub - burgosz/ansible-zabbix-inventory: Ansible inventory noscript for Zabbix
Ansible inventory noscript for Zabbix. Contribute to burgosz/ansible-zabbix-inventory development by creating an account on GitHub.
نرمافزار (AIDE (Advanced Intrusion Detection Environment یک سامانه پیشرفته تشخیص رخنه Host است که در حقیقت میتواند سیستم ما را اسکن نموده و هر تغییری که بر روی فایلها و دایرکتوریها که به دلایل مختلف از جمله نفوذ، تغییر با rootkitها و … به وجود آمده باشد را گزارش دهد.
این نرمافزار به عنوان جایگزینی Free در سال ۲۰۱۰ برای نرمافزار Tripwire ارائه شد. نحوه عملکرد AIDE به این صورت است که یک snapshot از وضعیت سیستم بر اساس المانهایی چون الگوریتمهای message digest و خصایص فایلها تهیه میکند و در بانک اطلاعاتی خود ذخیره مینماید که معمولاً فایل snapshot به منظور امنیت بیشتر در یک External Device نگهداری میشود.
سپس هنگامی که مدیر سیستم میخواهد صحت و سلامت سیستم را تست کند، با دستور aide سیستم را دوباره اسکن مینماید و خروجی تست با فایل snapshot مقایسه میگردد. نرمافزار AIDE تمامی تغییرات به وجود آمده را مییابد و برای مدیر سیستم گزارش تغییرات ارسال میگردد.
امکانات AIDE
این نرمافزار Portable بوده و میتوان از آن طوری استفاده نمود که شخص مهاجم به هیچ وجه از وجود آن در سیستم ما مطلع نشود. به مدیران سیستمهای لینوکس پیشنهاد میشود که این نرمافزار را بر روی سرورهای عملیاتی خود نصب نمایند.
این نرمافزار به عنوان جایگزینی Free در سال ۲۰۱۰ برای نرمافزار Tripwire ارائه شد. نحوه عملکرد AIDE به این صورت است که یک snapshot از وضعیت سیستم بر اساس المانهایی چون الگوریتمهای message digest و خصایص فایلها تهیه میکند و در بانک اطلاعاتی خود ذخیره مینماید که معمولاً فایل snapshot به منظور امنیت بیشتر در یک External Device نگهداری میشود.
سپس هنگامی که مدیر سیستم میخواهد صحت و سلامت سیستم را تست کند، با دستور aide سیستم را دوباره اسکن مینماید و خروجی تست با فایل snapshot مقایسه میگردد. نرمافزار AIDE تمامی تغییرات به وجود آمده را مییابد و برای مدیر سیستم گزارش تغییرات ارسال میگردد.
امکانات AIDE
این نرمافزار Portable بوده و میتوان از آن طوری استفاده نمود که شخص مهاجم به هیچ وجه از وجود آن در سیستم ما مطلع نشود. به مدیران سیستمهای لینوکس پیشنهاد میشود که این نرمافزار را بر روی سرورهای عملیاتی خود نصب نمایند.
ارتباط X سرور با X کلاینتها
خب x سرور ارتباطش با x کلاینت ها روی شبکه هست
اگه سخت افزاری نداری میتونی مجازی دوتا سیستم عامل بالا بیاری
اگر ip یکی 192.168.1.3 باشه و یکی دیگه مثلن 192.168.1.20 باشه که هر دو در یک شبکه باشن و پینگ همدیگه رو بگیرن
حالا مثلن یه ادیتور داخل سیستم اول میتونی باز کنی اما پنجره باز شدش در سیستم عامل دوم نمایش داده بشه
برای این کار متغیر محیطی display رو داریم اگر ببینیش
داخلش نوشته 0: قبل از علامت دونقطه اگر ip نباشه میشه لوکال هاست و اون صفر هم چون یه display داریم و مالتی نیست. بخاطر اینکه متغیر display روی لوکال هاسته پس هر برنامهای ران کنیم داخل سیستمی نشون داده میشه که همون برنامه اجرا میشه
حالا بیا متغیر display رو تغییر بده
حالا مثلن فایرفاکس رو اگه اجرا کنی خطا میده که نمیتونه به x سرور وصل بشه
حالا باید بری روی سیستم دوم و تنظیمات dm اون رو تغییر بدی مثلن اگر lightdm داره باید داخل
یه lightdm.conf درست کنی و بنویسی
که x سرور اجازه بده از بیرون برنامهها بهش وصل بشن ، بعد سرویس lightdm رو یبار ریاستارت کن.
و درآخر باید بگیم حالا کی میتونه به x سرور وصل بشه پس میزنیم:
میتونی بزنی
که همه بتونن وصل بشن
حالا اگه بری داخل سیستم اول و یه فایرفاکس باز کنی، میبینی پنجرش داخل سبستم عامل دوم دیده میشه :))
خب x سرور ارتباطش با x کلاینت ها روی شبکه هست
اگه سخت افزاری نداری میتونی مجازی دوتا سیستم عامل بالا بیاری
اگر ip یکی 192.168.1.3 باشه و یکی دیگه مثلن 192.168.1.20 باشه که هر دو در یک شبکه باشن و پینگ همدیگه رو بگیرن
حالا مثلن یه ادیتور داخل سیستم اول میتونی باز کنی اما پنجره باز شدش در سیستم عامل دوم نمایش داده بشه
برای این کار متغیر محیطی display رو داریم اگر ببینیش
echo $DISPLAYداخلش نوشته 0: قبل از علامت دونقطه اگر ip نباشه میشه لوکال هاست و اون صفر هم چون یه display داریم و مالتی نیست. بخاطر اینکه متغیر display روی لوکال هاسته پس هر برنامهای ران کنیم داخل سیستمی نشون داده میشه که همون برنامه اجرا میشه
حالا بیا متغیر display رو تغییر بده
export DISPLAY=192.168.1.20:0.0حالا مثلن فایرفاکس رو اگه اجرا کنی خطا میده که نمیتونه به x سرور وصل بشه
حالا باید بری روی سیستم دوم و تنظیمات dm اون رو تغییر بدی مثلن اگر lightdm داره باید داخل
/etc/lightdm/lightdm.d/یه lightdm.conf درست کنی و بنویسی
[SeatDefaults]
xserver-allow-tcp=trueکه x سرور اجازه بده از بیرون برنامهها بهش وصل بشن ، بعد سرویس lightdm رو یبار ریاستارت کن.
و درآخر باید بگیم حالا کی میتونه به x سرور وصل بشه پس میزنیم:
xhost +192.168.1.3میتونی بزنی
xhost +که همه بتونن وصل بشن
حالا اگه بری داخل سیستم اول و یه فایرفاکس باز کنی، میبینی پنجرش داخل سبستم عامل دوم دیده میشه :))
نوشتن یک rule (قانون) ساده در udev:
همه rule های udev توی پوشه /etc/udev/rules.d/ قرار دارن
محتویات پوشه :
توجه داشته باشین که این اعداد که اول فایل ها نوشته شده برای نوبت بندی فایل هاست یعنی موقع هندل کردن از فایل هایی با شماره پایین تر قانون ها خونده میشه تا اخرین فایل
حالا یه فایل میسازیم :
و یک فایل اجرایی هم میسازیم :
حالا با nano فایل 1_usb.rule رو باز میکنیم و دستورات زیر رو توش سیو میکنیم :
write following text in rule file :
save and exit
خب حالا وارد فایل اجرایی میشیم و دستوری که میخوایم موقع متصل شدن usb را بشه رو مینویسیم :
write following text in execute file
save and exit
خب حالا فقط باید permission اجرایی رو به فایل بدین با دستور زیر :
حالا باید udev رو reload کنیم :
کار تمومه میتونین امتحان کنین یه usb به کامپیوتر متصل کنین و خبر و زمان دقیقش رو توی فایل
میتونین قانون های خودتون رو بنویسین
همه rule های udev توی پوشه /etc/udev/rules.d/ قرار دارن
محتویات پوشه :
70-persistent-cd.rules
73-special-net-names.rules
73-usb-net-by-mac.rulesتوجه داشته باشین که این اعداد که اول فایل ها نوشته شده برای نوبت بندی فایل هاست یعنی موقع هندل کردن از فایل هایی با شماره پایین تر قانون ها خونده میشه تا اخرین فایل
حالا یه فایل میسازیم :
$ touch 1_usb.rulesو یک فایل اجرایی هم میسازیم :
$ touch ruel.shحالا با nano فایل 1_usb.rule رو باز میکنیم و دستورات زیر رو توش سیو میکنیم :
$ nano 1_usb.ruleswrite following text in rule file :
SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", RUN+="/etc/udev/ruels.d/rule.sh"save and exit
خب حالا وارد فایل اجرایی میشیم و دستوری که میخوایم موقع متصل شدن usb را بشه رو مینویسیم :
$ nano rule.shwrite following text in execute file
#!/bin/bash
echo "USB device added at $(date)" >>/tmp/noscripts.logsave and exit
خب حالا فقط باید permission اجرایی رو به فایل بدین با دستور زیر :
chmod +x rule.shحالا باید udev رو reload کنیم :
$ usevadm control —reloadکار تمومه میتونین امتحان کنین یه usb به کامپیوتر متصل کنین و خبر و زمان دقیقش رو توی فایل
/tmp/noscripts.log نوشته میشه میتونین قانون های خودتون رو بنویسین
دستور arp
دستور ARP یا همان Address Resolution Protocol یکی از پروتکلهای TCP/IP است. وظیفهی اصلی arp پیدا کردن آدرس سختافزاری MAC Address دستگاهها در شبکه است. و به ما اجازهی مشاهدهی کش مربوط به پروتکل ARP را میدهد؛ تا در صورت نیاز آنرا بتوان ویرایش کرد.
مشاهده فهرست با استفاده از کش پروتکل ARP
برای مشاهده آدرسهای سختافزاری کش شده با پروتکل ARP، پارامتر a- را میتوان بهکاربرد:
با توجه به تصویر زیر، فرمان arp فهرست MAC آدرسهای ذخیره شده بههمراه IP Address مرتبط را بهنمایش میگذارد.
پارامتر g- هم دقیقاً مانند a- عمل کرده و فهرست MAC آدرسهای کش شده را نمایش میدهد.
مشاهده فهرست با استفاده از کش پروتکل ARP
در ستون Type کلمهی Static به معنی تنظیم دستی است و زمان آن موقت نیست؛ اما پس از اولین توقف TCP/IP در ویندوز این نوع کش MAC ADDRESS نیز حذف میشود.
دستور نمایش ARP Table مختص هر Interface
برای نمایش جدول ARP یک کارت شبکه، میبایست از فرمان arp بههمراه پارامترهای a- و n- استفاده کرد. در این دستور مشخص شده که جدول Arp متعلق به کارت شبکهای که آدرس ۱۹۲.۱۶۸.۱.۱۴۵ روی آن تنظیم شده است، نمایش داده شود.
به مثال زیر توجه کنید:
اضافه کردن MAC Address به جدول ARP
برای اضافه کردن MAC Address به جدول ARP، میبایست از فرمان arp و پارامتر s- استفاده کرد. برای کار با این دستور کافی است بعد از پارامتر s- آدرس آی پی مورد نظر خود و سپس با یک فاصله آدرس سخت افزاری کارت شبکه مربوط به آن را وارد کنید. به مثال زیر توجه کنید:
در این دستور مشخص شده که آدرس سختافزاری ۰۰-۱f-fb-c4-e6-c5 به آدرس ۱۹۲.۱۶۸.۱.۱ مربوط میشود:
اضافه کردن MAC Address به جدول ARP
حذف کردن MAC Address از جدول ARP
برای حذف آدرس سختافزاری از جدول ARP باید از فرمان arp و پارامتر d- استفاده کرد. در این دستور IP Adress: 192.168.1.1 باید از جدول ARP حذف شود. به مثال زیر توجه کنید:
اگر به جای آدرس سخت افزاری خاص از علامت (*) استفاده کنید، کل جدول Arp به صورت کامل خالی میشود.
دستور ARP یا همان Address Resolution Protocol یکی از پروتکلهای TCP/IP است. وظیفهی اصلی arp پیدا کردن آدرس سختافزاری MAC Address دستگاهها در شبکه است. و به ما اجازهی مشاهدهی کش مربوط به پروتکل ARP را میدهد؛ تا در صورت نیاز آنرا بتوان ویرایش کرد.
مشاهده فهرست با استفاده از کش پروتکل ARP
برای مشاهده آدرسهای سختافزاری کش شده با پروتکل ARP، پارامتر a- را میتوان بهکاربرد:
arp –aبا توجه به تصویر زیر، فرمان arp فهرست MAC آدرسهای ذخیره شده بههمراه IP Address مرتبط را بهنمایش میگذارد.
پارامتر g- هم دقیقاً مانند a- عمل کرده و فهرست MAC آدرسهای کش شده را نمایش میدهد.
مشاهده فهرست با استفاده از کش پروتکل ARP
در ستون Type کلمهی Static به معنی تنظیم دستی است و زمان آن موقت نیست؛ اما پس از اولین توقف TCP/IP در ویندوز این نوع کش MAC ADDRESS نیز حذف میشود.
دستور نمایش ARP Table مختص هر Interface
برای نمایش جدول ARP یک کارت شبکه، میبایست از فرمان arp بههمراه پارامترهای a- و n- استفاده کرد. در این دستور مشخص شده که جدول Arp متعلق به کارت شبکهای که آدرس ۱۹۲.۱۶۸.۱.۱۴۵ روی آن تنظیم شده است، نمایش داده شود.
به مثال زیر توجه کنید:
arp -a -n 192.168.1.145اضافه کردن MAC Address به جدول ARP
برای اضافه کردن MAC Address به جدول ARP، میبایست از فرمان arp و پارامتر s- استفاده کرد. برای کار با این دستور کافی است بعد از پارامتر s- آدرس آی پی مورد نظر خود و سپس با یک فاصله آدرس سخت افزاری کارت شبکه مربوط به آن را وارد کنید. به مثال زیر توجه کنید:
در این دستور مشخص شده که آدرس سختافزاری ۰۰-۱f-fb-c4-e6-c5 به آدرس ۱۹۲.۱۶۸.۱.۱ مربوط میشود:
arp -s 192.168.1.1 00-1f-fb-c4-e6-c5اضافه کردن MAC Address به جدول ARP
حذف کردن MAC Address از جدول ARP
برای حذف آدرس سختافزاری از جدول ARP باید از فرمان arp و پارامتر d- استفاده کرد. در این دستور IP Adress: 192.168.1.1 باید از جدول ARP حذف شود. به مثال زیر توجه کنید:
arp -d 192.168.1.1اگر به جای آدرس سخت افزاری خاص از علامت (*) استفاده کنید، کل جدول Arp به صورت کامل خالی میشود.
arp -d *