تفاوت 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 پیش میاد.