Here I'll explain how to use true Linux inside your Windows machine.
There are two possible ways:
- Enable Windows Subsystem for Linux in Windows Features
- Use following script in administrative PS-shell
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
bash
sudo -S apt-mark hold procps strace sudo
sudo -S env RELEASE_UPGRADER_NO_SCREEN=1 do-release-upgrade
sudo update-alternatives --config iptables
choose 'iptables-legacy'
sudo nano /etc/wsl.conf
[boot]
command=/etc/init.d/docker start
sudo nano /etc/wsl.conf
[automount]
root = /
options = "metadata"
sudo mkdir -p /c
echo "sudo mount --bind /mnt/c /c" >> ~/.bashrc && source ~/.bashrc
sudo visudo
**your_username** ALL=(root) NOPASSWD: /bin/mount
ln -s /c/users/**your_username**/Projects ~/Projects
sudo curl -L $(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep browser_download_url | grep "$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m)"'"$' | cut -d: -f 2,3 | tr -d \") -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose
docker buildx create --use --name mybuilder
docker run --privileged --rm tonistiigi/binfmt --install all
docker buildx ls
docker buildx build --platform linux/amd64,linux/arm64 -t xemuliam/dbt:1.0.5-redshift -t xemuliam/dbt:1.0-redshift -t xemuliam/dbt:redshift --build-arg PLUGINS=redshift --push - < ~/Projects/Docker/dbt/Dockerfile.multistage.universal
docker buildx rm
docker buildx prune
sudo apt-get install python3 python3-dev python3-setuptools
sudo python3 -m easy_install pip
sudo pip install virtualenv
sudo apt install node
sudo apt install npm
sudo npm install -g n
sudo n lts
sudo npm install npm@lts -g
sudo chown -R $USER:$(id -gn $USER) /home/xemuliam/.config
restart WSL terminal
chown will reflect your home directory in WSL
git config --global credential.helper 'cache --timeout=2678400'
git branch --remote --merged origin/master | grep -Ev 'master|qa' | cut -b 10- | xargs -n 1 git push --delete origin
git branch --remote --merged origin/master | grep -Ev 'master|qa' | cut -b 10- | xargs -n 1 git branch -d
sudo update-alternatives --config java
export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"
Execute the following commands to install Node, npm, git, Java, Ionic, Cordova and Angular CLI:
cd ~
sudo apt update
sudo apt upgrade
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm i -g ionic cordova @nestjs/cli @angular/cli
sudo apt install git
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
git config --global core.autocrlf input
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
sudo apt install oracle-java8-set-default
NOTE: Node can be installed via NVM (node version manager) on ZSH as described here: http://www.boekhoff.info/how-to-install-nodejs-and-npm-using-nvm-and-zsh-nvm/
To download the Android SDK tools in your home folder execute the following commands:
cd ~
sudo mkdir android-sdk
cd android-sdk
wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
unzip sdk-tools-linux-4333796.zip
Note: you can get an updated Android SDK link from https://developer.android.com/studio/#downloads
Add the following to your .profile
(or .zshenv
if you use zsh):
# Add Android SKD to PATH
export ANDROID_HOME=$HOME/android-sdk
PATH="$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools:$PATH"
export PATH
Execute the following commands to install some basic Android SDK components.
Note that you can install any component listed with sdkmanager --list
by running sdkmanager "packagename"
.
Always run sdkmanager --licenses
to accept all the licenses after installing something.
sdkmanager --update
sdkmanager --list
sdkmanager "build-tools;26.0.2" "platform-tools" "platforms;android-26" "tools"
sdkmanager --licenses
cd /home/<user>/
sudo apt-get install unzip
wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
unzip sdk-tools-linux-4333796.zip -d Android
rm sdk-tools-linux-4333796.zip
sudo apt-get install -y lib32z1 openjdk-8-jdk
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
printf "\n\nexport JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64\nexport PATH=\$PATH:\$JAVA_HOME/bin" >> ~/.bashrc
cd Android/tools/bin
./sdkmanager "platform-tools" "platforms;android-26" "build-tools;26.0.3"
export ANDROID_HOME=/home/<user>/Android
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools
printf "\n\nexport ANDROID_HOME=/home/<user>/Android\nexport PATH=\$PATH:\$ANDROID_HOME/tools\nexport PATH=\$PATH:\$ANDROID_HOME/platform-tools" >> ~/.bashrc
android update sdk --no-ui
sudo apt-get install gradle
gradle -v
adb start-server
Install gradle with the following command:
sudo apt install gradle
We can default to Windows's adb.exe (which can read USB) instead of the Linux one.
Create a ~/.aliases
file with the following content:
alias adb='adb.exe'
If you use ZSH, add the following to your .zshrc
source $HOME/.aliases
If you use bash, add the following to your .bashrc
if [ -f ~/.aliases ]; then
. ~/.aliases
fi
distr=$(uname -s | tr '[:upper:]' '[:lower:]')_$([ $(uname -m) == "x86_64" ] && echo amd64 || echo 'unknown arch')
echo 'yq install'
sudo curl -sL $(curl -s https://api.github.com/repos/mikefarah/yq/releases/latest | grep browser_download_url | grep $distr | cut -d: -f 2,3 | tr -d \") -o /usr/local/bin/yq && sudo chmod +x /usr/local/bin/yq
echo 'hub install'
curl -sL $(curl -s https://api.github.com/repos/github/hub/releases/latest | grep browser_download_url | grep ${distr//_/-} | cut -d: -f 2,3 | tr -d \") | tar -xz && sudo ./hub-${distr//_/-}-*/install && rm -rf hub-${distr//_/-}-*
Reclaim memory using WSL2, VSCode with Remote-WSL extension, big git projects, and Docker with WSL2 integration.
create this alias at the end of your ~/.bashrc file
alias drop_cache="sudo sh -c \"echo 3 >'/proc/sys/vm/drop_caches' && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'\""
run: source ~/.bashrc
in your shell to setup the alias
then you can run the drop_cache command when you need it
You can run it manually when you notice high memory usage or you can try to create a crontab job or to add this command in the same ~/.bashrc and it will be running each time you open new WSL console