لینوکس در ویندوز - روایت یک برنامه نویس

مجبور شدم روی لپتاپ جدیدم ویندوز نصب کنم و از محیط ویندوز برای توسعه نرم‌افزار بیزارم!تو این مطلب توضیح میدم که چجوری محیط برنامه‌نویسی خودم رو توی ویندوز آماده کردم چون وقت خودم رو زیاد گرفت سعی و خطاها، نتیجه هارو اینجا می‌نویسم تا شما هم استفاده کنید.با این روش برنامه‌ها با سرعت بیشتری نسبت به نسخه ویندوزی‌شون اجرا میشن!مقدمه:یک گشایش عظیم ...مایکروسافت بدنبال راه حلی بود تا بتونه توسعه‌دهنده هارو سمت خودش نگه داره و امکان اجرای برنامه های گنو‌لینوکس در محیط ویندوز رو بهشون بده، تا پروژه WSL رو شروع کردن و زمان زیادی میگذره از شروع توسعه wsl که الان ورژن دوم‌اش هم منتشر شده و توی وضعیت نسبتا خوبیه.ورژن دوم wsl به این صورت هست که یک نسخه تقریبا کامل از کرنل لینوکس رو روی ویندوز شبیه سازی میکنند و با استفاده از تکنولوژی های روز شبیه‌سازی با دادن دسترسی مستقیم به منابع(پردازنده و حافظه رم) سرعت خیلی بیشتری نسبت به تکنولوژی شبیه سازی قدیمی میگیریم.بخاطر سبک‌تر بودن و سریع اجرا شدن توی wsl از systemd استفاده نشده و بجاش از /etc/init.d به سرویس ها دسترسی دارید. بجای systemctl هم میتونید از system استفاده کنید.این مسئله توی نصب بعضی پکیج‌ها ممکنه اذیت تون کنه که راه حل های جایگزین رو معرفی می‌کنم.قدم اول; نصب wsl2 از دستور العمل رسمی خود مایکروسافت برای نصب استفاده کنیدhttps://docs.microsoft.com/en-us/windows/wsl/install-win10توزیع ubuntu 20.04 رو نصب کردم و توی Store به مشکل نخوردم بار اول ولی اگه به مشکل خوردید حتما از شیلترفکن استفاده کنید و یه اکانت مایکروسافت لاگین کنید انشالله که درست میشه.حتما یادتون باشه که از ورژن ۲ استفاده کنید و نحوه تقییر ورژن توی لینک بالا هست.کرنل ساخت مایکروسافت برای اوبونتو استفاده شدهقدم دوم; نصب Windows Terminalبه عنوان جایگزین خط فرمان داغون ویندوز میتونید از ابزار جدید و اوپن سورس ویندوز استفاده کنید، باید بشه از استور نصب کنید ولی من نتونستم و از گیت‌هاب نسخه فایل msixbundle اش رو دانلود و نصب کردم https://github.com/microsoft/terminal/releases کانفیگ ویندوز ترمینال دو تا کار لازم داره ، توی ویندوز ترمینال رو آیکون جهت پایین کلیک کنید و تنظیمات رو انتخاب کنید تا فایل کانفیگ رو براتون باز کنه.1.انتخاب اوبونتو به عنوان پیشفرض: از لیست پایینتر uuid اوبونتو رو بردارید بجای مقدار قبلی توی این خط بزارید. &quotdefaultProfile&quot: &quot{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}&quot,2.انتخاب مسیر home خود اوبونتو به عنوان startingDirectory ، توی بلاک اوبونتو این خط رو هم اضافه کنید.&quotstartingDirectory&quot: &quot//wsl$/Ubuntu-20.04/home/username/&quot اینطوری مثلا: &quotlist&quot: [ { &quotguid&quot: &quot{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}&quot, &quothidden&quot: false, &quotname&quot: &quotUbuntu-20.04&quot, &quotsource&quot: &quotWindows.Terminal.Wsl&quot, &quotstartingDirectory&quot: &quot//wsl$/Ubuntu-20.04/home/username/&quot },چند تا نکته:برای دسترسی به فایل های اوبونتو از ویندوز، به آدرس زیر برید با ویندوز اکسپلورر \\wsl$\اونجا توزیع هایی که نصب کردید براتون شبکه شده.نکته مهم : دسترسی به فایل سیستم های اوبونتو از ویندوز و برعکس،‌سرعت بالایی نداره و تقریبا میشه گفت کنده.پس باید برنامه هایی که داخل اوبونتو اجرا می‌کنید فایل هاشون هم روی فایل سیستم خود اوبونتو باشه.قدم سوم; همون همیشگیهمیشه بعد از نصب اوبونتو اولین دستوری که اجرا میکنند، آپدیت ریپازیتوری پکیج‌ها و آپگرید پکیج‌های نصب شده.sudo apt update ; sudo apt upgrade -yپکیج های پرکاربردتون رو هم نصب کنید اگه نصب نیستن!sudo apt install git nano curl nodejs npm aria2 -yقدم بعد; اوه مای ترمینالقبل از انجام کارهای خفن بهتره ترمینال مون رو هم خفن کنیم و زی‌شل استفاده کنیم که خیلی کار با ترمینال رو راحت‌تر و سریع‌تر میکنه، من که همیشه دومین کار نصب زی‌شل و oh my zsh هستش.sudo apt install zsh -y https://ohmyz.sh/#install قدم بعد; نصب IDEکد ادیتور یا IDE محبوب خودتون رو داخل اوبونتو دانلود کنید. یا با ویندوز دانلود کنید و انتقال بدید به اوبونتو.برای دانلود و نصب وب استورم اینجوری پیش میریم:mkdir appscd appswget https://link-to-webstorm.tar.gztar -xvf webstorm.tar.gzcd webstorm-/bin./webstorm.sh برای دانلود و نصب vsCode ،‌ فایل deb رو از سایت اصلی شون دانلود میکنیم.wget https://link-to-/vscode.deb sudo dpkg -i vscode.debکه احتمالا به ارور بخوریم برای dependency هایی که روی اوبونتو نصب نیست.که با دستور زیر حل میشه.sudo apt --fix-broken installاحتمالا موقع اجرای vsCode ازتون بخواد که از نسخه خود ویندوز استفاده کنید، که شما اینکارو نمی‌کنید :)اصل مطلب: اجرای این برنامه های توی محیط گرافیکی ویندوز!برای اجرای برنامه های گرافیکی همراه با GPU Acceleration ، یک XServer روی ویندوز اجرا می‌کنیم. بهترین گزینه فعلا vcxsrc هست که از لینک زیر دانلود و نصب کنید. https://sourceforge.net/projects/vcxsrv/ بعد از نصب برنامه XLaunch رو باز کنید همینجوری نکست بزنید(multiple windows -> start no client -> finish ) تا برسید اینجا ، حتما گزینه Disable Access Control غیر فعال باشه. باز دوباره نکست بزنید...اگه فایروال دسترسی خواست ، اجازه دسترسی بدیدتا اینجا دیگه توی ویندوز کاری نداریم.به ترمینال برگردیم و چند خط زیر رو به فایل های کانفیگ zsh , bash اضافه کنیم.sudo nano /etc/bash.bashrcnano ~/.zshrcexport DISPLAY=&quot`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0&quotexport DISPLAY=&quot`sed -n 's/nameserver //p' /etc/resolv.conf`:0&quotexport DISPLAY=$(ip route|awk '/^default/{print $3}'):0.0بعد از اضافه کردن این سه خط به دوتا فایل بالا تغییرات رو اعمال میکنیم یا دوباره ترمینال رو باز میکنیم.. ~/.zshrc echo $DISPLAYو تمام با اجرای دستور بالا آی پی ویندوز از داخل اوبونتو رو می بینید و در صورت اجرا بودن برنامه vcxsrc با اجرای برنامه های گرافکی ، برنامه ها مثل بقیه برنامه های ویندوزی توی محیط گرافیکی ویندوز باز‌میشن.وب‌استورم کاملا شبیه برنامه های خود ویندوز بدون هیچ تفاوتی کنار بقیه برنامه ها اجرا شد.حل مشکل نصب مانگودی‌بیبجای نصب پکیج اصلی mondogdb-server از mongodb-runner استفاده کنید.نودجی‌اس و npm رو نصب کنید بعدش پکیج mongodb-runner رو بصورت گلوبال روی اوبونتو نصب کنید.sudo npm i -g mongodb-runner mongodb-runnerنصب و تست کلاینت مانگوsudo apt install mongodb-clients -y mongoورژن ۴.۴.۳ مانگو دی بی رو اجرا کردیم براحتی بدون هیچ مشکلی!حل مشکل پینگ و بسته بودن پورت‌های آی‌پی ویندوزبا اینکه DISPLAY بصورت پیشفرض با آی پی ویندوز کار میکنه ولی نه میتونید پینگ بگیرید ازین آی پی و همه پورت هاش بسته ان!خب دلیل‌اش اینه که توی تنظیمات فایروال ویندوز باید ICMPv4 رو اجازه بدید و برای دسترسی به پورت هم مثل مثال زیر روی ویندوز پورت ۱۰۸۹ پراکسی ساکس اجرا هست برای دسترسی از اوبونتو بهش لازمه این دو rule رو اضافه کنیم. آپدیت های بعدی توی همین مطلب اضافه میشه بقیه کارهایی که کردم هم نامربوط به wsl و کارهای عمومی هستن که در مطالب مجزا مینویسم.