Wstęp
W życiu każdego DevOps’a czy DataOps’a lub SRE, przychodzi moment kiedy zwiedzeni chęcia zabawy innym distro, wykonujemy czystą instalkę.
Z racji, że mój mózg najwidoczniej nie ma nieskończonej pamięci…
Przygotowałem sobie listę rzeczy, które muszę lub i mogę zainstalować - by móc spokojnie pracować.
W tym przypadku instrukcje dostosowane są do systemów z rodziny Debiana (aktualnie korzystam z Kubuntu).
Spis treści
- Wstęp
- Spis treści
- Git
- Zsh
- Oh My Zsh
- Fonts
- Powerlevel10k
- Build essentials
- Snap
- Flatpak
- Global Protect OpenConnect
- Homebrew
- Docker
- Instalacja
- QEMU/KVM
- Kubernetes
- CLI’s
- Aplikacje dla developerów
- Inne paczki
- Języki
- Bonus
Git
W celu instalacji Git’a, wykonujemy:
sudo apt install git && git config --global credential.helper store
git config --global user.name "John Doe" && git config --global user.email johndoe@example.com
Zsh
Zsh instalujemy tak:
sudo apt update && apt install zsh
Wymuszamy Zsh jako domyślny shell:
chsh -s /usr/bin/zsh
Wylogowujemy się i logujemy ponownie i potwierdzamy z pomocą 2
:
(2) Populate your ~/.zshrc with the configuration recommended
by the system administrator and exit (you will need to edit
the file by hand, if so desired).
Oh My Zsh
By zainstalować Oh My Zsh:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Powinniśmy zobaczyć:
__ __
____ / /_ ____ ___ __ __ ____ _____/ /_
/ __ \/ __ \ / __ `__ \/ / / / /_ / / ___/ __ \
/ /_/ / / / / / / / / / / /_/ / / /_(__ ) / / /
\____/_/ /_/ /_/ /_/ /_/\__, / /___/____/_/ /_/
/____/ ....is now installed!
Before you scream Oh My Zsh! look over the `.zshrc` file to select plugins, themes, and options.
Różne themes'y
dostępne są pod adresem tutaj.
W celu ustawienia skórki, ustawiamy zmienną ZSH_THEME
w~/.zshrc
,np. na ZSH_THEME=robbyrussell
.
Plugins
Plugin’y instalujemy tak:
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
fpath+=${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions/src
plugins=(git aliases debian branch github zsh-autosuggestions zsh-syntax-highlighting zsh-completions zsh-interactive-cd zsh-navigation-tools)
Fonts
Najlepsze czcionki dla nerdów znajdziemy na NerdFonts, tutaj.
Czcionki wypakowujemy tu: /usr/share/fonts/
lub do ~/.fonts
i odbudowujemy cache:
fc-cache -f -v
Powerlevel10k
Kolejnym wartym zainteresowania plugin’em do Zsh jest Powerlevel10k:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
UStawiamy ZSH_THEME="powerlevel10k/powerlevel10k"
w ~/.zshrc
.
Dla tzw Powerlevel10k instant prompts
, dodajemy do .zshrc
to:
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
Build essentials
Tzw build-essentials
dla programistów instalujemy tak:
sudo apt install build-essential
Snap
Snap’a (jeżeli potrzebujemy), instalujemy z pomocą:
$ su root
apt update
apt install snapd
Oraz (po przelogowaniu):
sudo snap install core
Flatpak
Dla FlatPaka:
sudo apt install flatpak gnome-software-plugin-flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
Global Protect OpenConnect
Klienta GlobalProtect OpenConnect można zainstalować tak:
Instalujemy go tak:
wget http://launchpadlibrarian.net/704701349/libwebkit2gtk-4.0-37_2.43.3-1_amd64.deb
wget http://launchpadlibrarian.net/704701345/libjavascriptcoregtk-4.0-18_2.43.3-1_amd64.deb
sudo dpkg --install *.deb
sudo apt-get install gir1.2-gtk-3.0 gir1.2-webkit2-4.0
sudo add-apt-repository ppa:yuezk/globalprotect-openconnect
sudo apt-get update
sudo apt-get install globalprotect-openconnect
Debian 12+
Na Debianie 12 robimy to tak:
sudo apt get update
sudo apt install openconnect network-manager-openconnect network-manager-openconnect-gnome
Możemy połączyć się z poziomu UI lub konsoli:
sudo openconnect --protocol=gp global.protect.server -u user-name
Homebrew
Instalacja homebrew
na Linuxie jest oczywiście możliwa i robimy to tak:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Następnie dodajemy wpis do .zsh
:
(echo; echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"') >> /home/$USER/.zprofile
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
Docker
Instalacja
Dockera
instalujemy tak:
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
sudo mkdir -p /etc/apt/keyrings
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Dodanie Dockera do sudoers
Wykonujemy:
sudo groupadd docker
sudo usermod -aG docker ${USER} && sudo newgrp docker
sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
sudo chmod g+rwx "$HOME/.docker" -R
sudo chmod 666 /var/run/docker.sock
IP Range
W celu zmiany zakresu IP dla kontenerów, dokonujemy zmiany w:
sudo nano /etc/docker/daemon.json
Paste:
{
"bip": "192.168.200.1/24",
"fixed-cidr": "192.168.200.1/25",
"insecure-registries": ["registry:32000"]
}
Restartujemy usługi:
sudo systemctl daemon-reload && sudo systemctl restart docker
Nerdctl
Nerdctl
‘a instalujemy tak:
brew install nerdctl
Portainer
Jeżeli ktoś potrzebuje, to:
docker volume create portainer_data \
&& docker run -d -p 8000:8000 -p 9443:9443 \
--name portainer --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data portainer/portainer-ce:latest
Then visit https://localhost:9443/.
QEMU/KVM
Instalacja stacka
Instalacja QEMU and KVM
wygląda tak:
sudo apt install -y qemu-kvm libvirt-daemon bridge-utils virtinst libvirt-daemon-system
sudo apt install -y virt-top libguestfs-tools libosinfo-bin qemu-system virt-manager
Granty
Dodajemy swojego usera do grupy kvm
:
sudo systemctl stop libvirtd
sudo usermod -aG libvirt ${USER}
sudo usermod -aG libvirt-qemu ${USER}
sudo usermod -aG kvm ${USER}
sudo usermod -aG input ${USER}
sudo usermod -aG disk ${USER}
sudo virsh net-start default
sudo virsh net-autostart default
sudo systemctl start libvirtd
Oraz ustawiamy uprawnienia w /etc/libvirt/qemu.conf
# Some examples of valid values are:
#
# user = "qemu" # A user named "qemu"
# user = "+0" # Super user (uid=0)
# user = "100" # A user named "100" or a user with uid=100
#
#user = "libvirt-qemu"
user = "your_usr"
# The group for QEMU processes run by the system instance. It can be
# specified in a similar way to user.
#group = "libvirt-qemu"
group = "libvirt"
# Whether libvirt should dynamically change file ownership
# to match the configured user/group above. Defaults to 1.
# Set to 0 to disable file ownership changes.
# dynamic_ownership = 0
Odświeżamy grupę
su - ${USER}
Oraz dodajemy alias w ~/.zshrc
:
echo "alias virsh='EDITOR=nano sudo virsh && cd /etc/libvirt/qemu'" >> ~/.zshrc
Restart usługi:
source ~/.zshrc
sudo systemctl restart libvirtd
Start domeny:
virsh
list --all
start mydomain
Mostek sieciowy
Na początek konfigurujemy w /etc/network/interfaces
:
# Bridge setup
iface br0 inet dhcp
bridge_ports eth0 eno1
Restartujemy usługę:
sudo service network-manager restart
Sprawdzamy czy br0
jest up:
$ ip a s br0
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether fe:54:00:b5:c9:02 brd ff:ff:ff:ff:ff:ff
inet 10.10.10.1/24 brd 10.10.10.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::7c49:43ff:feaf:4d4b/64 scope link
valid_lft forever preferred_lft forever
You can check if everything is good with:
virsh net-list --all
Test
Sprawdzić działanie możemy poprzez:
❯ sudo systemctl status libvirtd
○ libvirtd.service - Virtualization daemon
Loaded: loaded (/lib/systemd/system/libvirtd.service; enabled; preset: enabled)
Active: inactive (dead) since Thu 2023-07-06 20:57:55 CEST; 29min ago
Duration: 2min 116ms
TriggeredBy: ● libvirtd-ro.socket
● libvirtd.socket
● libvirtd-admin.socket
Docs: man:libvirtd(8)
https://libvirt.org
Main PID: 68980 (code=exited, status=0/SUCCESS)
CPU: 112ms
lip 06 20:55:55 hea-runnerw-03 systemd[1]: Starting libvirtd.service - Virtualization daemon...
lip 06 20:55:55 hea-runnerw-03 systemd[1]: Started libvirtd.service - Virtualization daemon.
lip 06 20:57:55 hea-runnerw-03 systemd[1]: libvirtd.service: Deactivated successfully.
sudo virt-install \
--name deb11 \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/deb11-vm.qcow2,size=20 \
--os-type linux \
--os-variant debian9 \
--network bridge=br1 \
--graphics none \
--console pty,target_type=serial \
--location 'http://ftp.debian.org/debian/dists/bullseye/main/installer-amd64/' \
--extra-args 'console=ttyS0,115200n8 serial'
Kubernetes
Kubectl
sudo apt-get update
# apt-transport-https may be a dummy package; if so, you can skip that package
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
# If the folder `/etc/apt/keyrings` does not exist, it should be created before the curl command, read the note below.
# sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg # allow unprivileged APT programs to read this keyring
# This overwrites any existing configuration in /etc/apt/sources.list.d/kubernetes.list
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list # helps tools such as command-not-found to work correctly
sudo apt-get update
sudo apt-get install -y kubectl
I dodajemy do .zshrc
:
source <(kubectl completion zsh)
W przypadku gdy napotkamy błąd: 2: command not found: compdef
, dodajemy poniższe do ~/.zshrc
:
autoload -Uz compinit
compinit
VMware Tanzu
Dla klientów dystrybucji Tanzu dla K8S, wymagany jest plugin vsphere-plugin
, który wrzucamy do /usr/bin/
oraz:
echo 'export PATH=$PATH:/usr/bin/vsphere-plugin/bin' >> ~/.zshrc
Helm
Instalacja Helma
jest banalna:
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
Włączamy completions w .zshrc
:
source <(helm completion zsh)
Argo
CLI pod Argo
instalujemy z brew
, gdzie argo
jest dla Workflows
, a argocd
dla oczywiśćie ArgoCD
:
brew install argo argocd
CLI’s
Terraform
CLI dla Terraform
:
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform
Dodajemy completions w .zshrc
:
autoload -U +X bashcompinit && bashcompinit
complete -o nospace -C /usr/bin/terraform terraform
zstyle ':completion:*' menu select
fpath+=~/.zfunc
Vagrant
Tego pana nie trzeba przedstawiać:
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install vagrant
Jeżeli chcemy używać Vagranta wraz z Libvirt (QEMU/KVM):
vagrant plugin install vagrant-libvirt && vagrant plugin install vagrant-mutate
AWS
AWSCLI
instalujemy tak:
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install -i /usr/local/aws-cli -b /usr/local/bin
rm -r aws awscliv2.zip
EKS
Dla eksctl
CLI wykonujemy:
ARCH=amd64
PLATFORM=$(uname -s)_$ARCH
curl -sLO "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$PLATFORM.tar.gz"
# (Optional) Verify checksum
curl -sL "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_checksums.txt" | grep $PLATFORM | sha256sum --check
tar -xzf eksctl_$PLATFORM.tar.gz -C /tmp && rm eksctl_$PLATFORM.tar.gz
sudo mv /tmp/eksctl /usr/local/bin
Azure
CLI pod Azure
‘a, instalujemy via:
sudo apt update && sudo apt install azure-cli
Aplikacje dla developerów
Visual Studio Code
Code’a instalujemy poprzez repo Microsoft’u:
sudo apt install wget gpg
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg
sudo sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
rm -f packages.microsoft.gpg
sudo apt install apt-transport-https
sudo apt update
sudo apt install code
By włączyć fancy italics
, jak niżej:
Dodajemy do configu’u:
"editor.tokenColorCustomizations": {
"[*Light*]": {
"textMateRules": [
{
"scope": "ref.matchtext",
"settings": {
"foreground": "#000"
}
}
]
},
"[*Dark*]": {
"textMateRules": [
{
"scope": "ref.matchtext",
"settings": {
"foreground": "#fff"
}
}
]
},
"[Mosaic]": {
"textMateRules": [
{
"scope": [
// Keywords to be in italic
"comment",
"entity.name.type.class", // class names
"keyword", // import, export, return...
"constant", // String, Number, Boolean..., this, super
"storage.modifier", // static keyword
"storage.type.class.js" // class keyword
],
"settings": {
"fontStyle": "italic"
}
},
{
"scope": [
// Keywords to exclude from italics (VSCode has some defaults for italics)
"invalid",
"keyword.operator",
"constant.numeric.css",
"keyword.other.unit.px.css",
"constant.numeric.decimal.js",
"constant.numeric.json"
],
"settings": {
"fontStyle": ""
}
}
]
}
}
JetBrains
Jetbrains Toolbox
, pobieramy z tej strony i wrzucamy do /usr/bin/
.
Inne paczki
Kerberos
Kerberos’a instalujemy via apt:
sudo apt install krb5-user -y
Edytujemy konfig:
sudo nano /etc/krb5.conf
Na wzór:
[libdefaults]
default_realm = company.local
[realms]
company.local = {
kdc = DC0.company.local
admin_server = DC0.company.local
}
[domain_realm]
.company.local = COMPANY.LOCAL
Następnie logujemy się via:
kinit username@COMPANY.LOCAL
Sprawdzamy czy jesteśmy zalogowani:
$klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: username@COMPANY.LOCAL
Valid starting Expires Service principal
27.05.2022 08:59:22 27.05.2022 18:59:22 krbtgt/COMPANY.LOCAL@COMPANY.LOCAL
renew until 28.05.2022 08:59:17
Tworzenie własnego `keytaba`:
ktutil
addent -password -p username@COMPANY.LOCAL -k 1 -e RC4-HMAC
wkt /dir/username.keytab
Oracle Client
Klienta Oracle SQL
instalujemy tak:
# For Debian
sudo apt install -y libaio1 unixodbc unixodbc-dev freetds-dev freetds-bin tdsodbc
# For Ubuntu
sudo apt install -y unixodbc-dev libaio-dev libaio1t64
ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/x86_64-linux-gnu/libaio.so.1
sudo mkdir -p /opt/oracle
cd /opt/oracle/
sudo wget -P /opt/oracle https://download.oracle.com/otn_software/linux/instantclient/19800/instantclient-basic-linux.x64-19.8.0.0.0dbru.zip
sudo wget -P /opt/oracle https://download.oracle.com/otn_software/linux/instantclient/19800/instantclient-sqlplus-linux.x64-19.8.0.0.0dbru.zip
sudo wget -P /opt/oracle https://download.oracle.com/otn_software/linux/instantclient/19800/instantclient-sdk-linux.x64-19.8.0.0.0dbru.zip
sudo wget -P /opt/oracle https://download.oracle.com/otn_software/linux/instantclient/19800/instantclient-odbc-linux.x64-19.8.0.0.0dbru.zip
sudo wget -P /opt/oracle https://download.oracle.com/otn_software/linux/instantclient/19800/instantclient-tools-linux.x64-19.8.0.0.0dbru.zip
sudo unzip instantclient-basic-linux.x64-19.8.0.0.0dbru.zip -d /opt/oracle
sudo unzip instantclient-sqlplus-linux.x64-19.8.0.0.0dbru.zip -d /opt/oracle
sudo unzip instantclient-sdk-linux.x64-19.8.0.0.0dbru.zip -d /opt/oracle
sudo unzip instantclient-odbc-linux.x64-19.8.0.0.0dbru.zip -d /opt/oracle
sudo unzip instantclient-tools-linux.x64-19.8.0.0.0dbru.zip -d /opt/oracle
export ORACLE_HOME=/opt/oracle/instantclient_19_8
export PATH=$ORACLE_HOME:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
sudo ldconfig
Dodatkowo do /etc/odbcinst.ini
, można dodać:
[Oracle19]
Description = Oracle ODBC driver for Oracle 19c
Driver = /opt/oracle/instantclient_19_8/libsqora.so.19.1
Microsoft SQL Server ODBC
Klienta MSSQL
instalujemy jak poniżej:
curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
#Debian 12
curl https://packages.microsoft.com/config/debian/12/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17
# optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y apt-get install -y mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.zshrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo apt-get install -y unixodbc-dev
# optional: kerberos library for debian-slim distributions
sudo apt-get install -y libgssapi-krb5-2
Lub tak:
wget https://packages.microsoft.com/debian/12/prod/pool/main/m/msodbcsql17/msodbcsql17_17.10.5.1-1_amd64.deb
wget https://packages.microsoft.com/debian/12/prod/pool/main/m/msodbcsql18/msodbcsql18_18.3.2.1-1_amd64.deb
sudo dpkg -i msodbcsql17_17.10.5.1-1_amd64.deb
sudo dpkg -i msodbcsql18_18.3.2.1-1_amd64.deb
Języki
Python
W każdym chyba distro, mamy zainstalowanego Python’a.
W teorii jedyne czego potrzebujemy to poetry
oraz virtualenv
:
sudo apt install python3-virtualenv python3-poetry
Ruby
Dla Ruby, najlepiej zainstalować Rbenv
w celu kontroli wersji, które posiadamy w systemie:
sudo apt update && sudo apt install rbenv libyaml-dev libffi-dev
echo 'eval "$(/usr/bin/rbenv init - zsh)"' >> ~/.zshrc
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
Sprawdzanie wersji dostępnych na ten moment do instalacji:
# List latest stable versions:
$ rbenv install --list
3.1.6
3.2.5
3.3.5
jruby-9.4.8.0
mruby-3.3.0
picoruby-3.0.0
truffleruby-24.0.2
truffleruby+graalvm-24.0.2
Wersje lokalne sprawdzamy tak:
$ rbenv versions
system
* 3.1.2 (set by /home/${USER}/.rbenv/version)
truffleruby+graalvm-22.1.0
Konkretną wersję instalujemy tak:
rbenv install 3.3.5
Buildy konfigurujemy tak:
rbenv global 3.3.5 # Set the default Ruby version for this machine
rbenv local 3.3.5 # Set the Ruby version for this directory
rbenv uninstall 3.1.2
LSP
Language server protocol dla Ruby instalujemy, tak:
gem install bundler solargraph ruby-lsp rubocop rubocop-packaging rubocop-performance rubocop-rspec rubocop-shopify rubocop-thread_safety
YJIT
By zainstalować YJIT potrzebujemy wykonać instalacje w taki sposób (Rust jest wymagany):
RUBY_CONFIGURE_OPTS="--enable-yjit" rbenv install 3.3.5
Dla Debiana z doinstalowanym OpenSSL z brew
:
RUBY_CONFIGURE_OPTS="--enable-yjit --with-openssl-dir=$OPENSSL_PREFIX" rbenv install 3.3.5
Dodatkowe flagi do eksportu znajdują się w sekcji dot. TruffleRuby na GraalVM.
Ruby Kernel dla Jupytera
Wykonujemy:
$ gem install iruby && source ~/.zshrc
$ iruby register --force
I przeładowujemy shella.
TruffleRuby GraalVM
By zainstalować TruffleRuby (z GraalVM) wykonujemy:
rbenv install truffleruby+graalvm-24.0.2
Czasem możemy potrzebować OpenSSL v1.1
, więc wykonujemny:
brew install openssl@1.1
Następnie do .zshrc
dodajemy:
# Ruby GraalVM
export LANG=en_US.UTF-8
export PATH="/home/linuxbrew/.linuxbrew/opt/openssl@1.1/bin:$PATH"
export OPENSSL_PREFIX="/home/linuxbrew/.linuxbrew/opt/openssl@1.1"
export LDFLAGS="-L/home/linuxbrew/.linuxbrew/opt/openssl@1.1/lib"
export CPPFLAGS="-I/home/linuxbrew/.linuxbrew/opt/openssl@1.1/include"
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$OPENSSL_PREFIX"
Crystal
Crystal
- to taki kompilowalny kuzyn Ruby.
Instalujemy go przez:
- skrypt .sh
- lub
apt
.
Skrypt:
curl -fsSL https://crystal-lang.org/install.sh | sudo bash
Apt:
echo 'deb http://download.opensuse.org/repositories/devel:/languages:/crystal/Debian_Testing/ /' | sudo tee /etc/apt/sources.list.d/devel:languages:crystal.list
curl -fsSL https://download.opensuse.org/repositories/devel:languages:crystal/Debian_Testing/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/devel_languages_crystal.gpg > /dev/null
sudo apt update
sudo apt install crystal
Poniższe są wymagane w systemie, by poprawnie zainstalować Crystala:
sudo apt install libssl-dev libxml2-dev libyaml-dev libgmp-dev libz-dev
Dla LSP Crystaline wymagane jest:
mkdir -p .crystalline && cd .crystalline
wget https://github.com/elbywan/crystalline/releases/latest/download/crystalline_x86_64-unknown-linux-musl.gz -O crystalline.gz &&\
gzip -d crystalline.gz &&\
chmod u+x crystalline
Następnie w konfiguracji VS Code ustawiamy absolutną ścieżkę binarki:
"crystal-lang.server": "/home/${USER}/.crystalline/crystalline",
Dla LazyVim’a, tworzymy plik:
touch ~/.config/nvim/lua/plugins/crystal.lua
Oraz dodajemy:
return {
{
"vim-crystal/vim-crystal",
ft = "crystal",
},
}
Następnie w pliku ~/.config/nvim/lua/config/lazy.lua
dodajemy:
{ import = "plugins.crystal" }
Go
W momencie pisania tekstu, najnowszym build’em było 1.23.0
:
cd ~/Downloads
wget https://go.dev/dl/go1.23.0.linux-amd64.tar.gz
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.23.0.linux-amd64.tar.gz
mkdir -p ~/.go
Następnie dodajemy do PATH
w `.zshrc`
:
export GOROOT=/usr/local/go
export GOPATH=$HOME/.go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
Sprawdzamy:
$ go version
go version go1.23.0 linux/amd64
Rust
Rust'a
instalujemy z rustup
‘em:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
I dodajemy:
# Rust
export PATH=$HOME/.cargo/bin:$PATH
Podniesienie wersji wykonujemy z pomocą:
rustup update
Nim
Jeżeli ktoś potrzebuje Nim
‘a to:
curl https://nim-lang.org/choosenim/init.sh -sSf | sh
Dodajemy wpis:
export PATH=/home/$USER/.nimble/bin:$PATH
LSP instalujemy tak:
nimble install nimlsp
Lub:
/home/${USER}/.nimble/bin/nimble install nimlangserver --accept
Gleam
Gleam
‘a musimy skompilować (potrzebny do tego jest Nam Rust) i robi to się dosyć prosto:
cd /tmp
git clone https://github.com/gleam-lang/gleam.git
cd gleam
$ make install
cd compiler-cli && cargo install --path . --force --locked
Installing gleam v1.4.1 (/tmp/gleam/compiler-cli)
Updating crates.io index
Downloaded base16 v0.2.1
Downloaded askama v0.12.1
Downloaded askama_escape v0.10.3
(...)
Compiling same-file v1.0.6
Compiling askama_escape v0.10.3
$ gleam -V
gleam 1.4.1
PS. Należy pamiętać o tym, że Gleam kompiluje się do Erlang’a (BEAM) więc i go potrzebujemy.
Scala
Scala
‘ę instalujemy tak:
sudo apt install default-jre && sudo apt install default-jdk
curl -fL https://github.com/coursier/coursier/releases/latest/download/cs-x86_64-pc-linux.gz | gzip -d > cs && chmod +x cs && ./cs setup
echo "export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64" >> ~/.zshrc
Erlang
Erlang
‘a instalujemy najlepiej z repozytorium od Rabbita:
sudo add-apt-repository ppa:rabbitmq/rabbitmq-erlang
sudo apt update
sudo apt install erlang erlang-dev erlang-dialyzer erlang-xmerl
Elixir
Po instalacji Erlanga, możemy zainstalować Elixira
.
W momencie pisania tekstu najnowszym był 1.17
oraz Erlang OTP 26
:
wget https://github.com/elixir-lang/elixir/releases/download/v1.17.0/elixir-otp-26.zip
sudo unzip elixir-otp-26.zip -d /usr/local/elixir
echo 'export PATH="$PATH:/usr/local/elixir/bin"' >> ~/.zshrc
echo 'export MIX_HOME="$HOME/.mix"' >> ~/.zshrc
echo 'export PATH="$PATH:$HOME/.mix/escripts"' >> ~/.zshrc
mkdir -p ~/.mix
source ~/.zshrc
mix do local.rebar --force, local.hex --force
mix archive.install hex phx_new
mix escript.install hex livebook
Typescript
Typescript
‘a wraz Nodejs
instalujemy via nvm
:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
nvm install 22 && node -v && npm -v & npm install typescript yarn -g && tsc -v
Haskell
Haskell
‘a najlepiej zainstalować poprzez GHCup
, który to instaluje kompilator GHC wraz z LSP i Cabal’em.
Dla Ubuntu instalujemy pierw:
sudo apt install build-essential curl libffi-dev libffi8ubuntu1 libgmp-dev libgmp10 libncurses-dev
Dla Debiana:
sudo apt install build-essential curl libffi-dev libffi8ubuntu1 libgmp-dev libgmp10 libncurses-dev
I finalnie GHCup:
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
Dart
Instalacja Dart
‘a wygląda tak:
sudo apt update
sudo apt install apt-transport-https
wget -qO- https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor -o /usr/share/keyrings/dart.gpg
echo 'deb [signed-by=/usr/share/keyrings/dart.gpg arch=amd64] https://storage.googleapis.com/download.dartlang.org/linux/debian stable main' | sudo tee /etc/apt/sources.list.d/dart_stable.list
sudo apt update && sudo apt install dart
Dodajemy wpis w .zshrc
:
export PATH="$PATH:/usr/lib/dart/bin"
Flutter
Instalacja Flutter
‘a:
sudo apt update && sudo apt install clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev
sudo snap install flutter --classic
flutter sdk-path && flutter --disable-telemetry
Chrome
Dla Flutter’a potrzebny jest Nam Chrome
:
su -
cat << EOF > /etc/apt/sources.list.d/google-chrome.list
deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main
EOF
wget -O- https://dl.google.com/linux/linux_signing_key.pub |gpg --dearmor > /etc/apt/trusted.gpg.d/google.gpg
sudo apt update && sudo apt install google-chrome-stable
PHP
By zainstalować PHP oraz Composer’a (packet manager), należy:
sudo add-apt-repository ppa:ondrej/php -y && sudo apt update
sudo apt install php8.3 -y
sudo apt install php8.3-cgi php8.3-cli php8.3-common php8.3-curl
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composer
W razie czego, Laravel’a instalujemy tak:
composer global require laravel/installer
Dodatkowo można zainstalować frankenphp
w przypadku niechęci do Apache'a
:
curl https://frankenphp.dev/install.sh | sh
mv frankenphp /usr/local/bin/
# Serve the public/ directory
frankenphp php-server -r public/
# Run a command-line script
frankenphp php-cli script.php
Generalnie w świecie PHP
wiele się zmieniło od mojego ‘ostatniego razu’ z Nim.
Bonus
DuckDB
CLI dla DuckDB
instalujemy z pomocą:
wget https://github.com/duckdb/duckdb/releases/download/v0.9.2/duckdb_cli-linux-amd64.zip
unzip duckdb_cli-linux-amd64.zip
mv duckdb /usr/bin/
echo "export PATH="$PATH:/usr/bin/duckdb"" >> ~/.zshrc
source ~/.zshrc
Headery, używane np. przez Ruby instalujemy tak:
wget https://github.com/duckdb/duckdb/releases/download/v0.9.2/libduckdb-linux-amd64.zip
unzip libduckdb-linux-amd64.zip -d libduckdb
sudo mv libduckdb/duckdb.* /usr/local/include/
sudo mv libduckdb/libduckdb.so /usr/local/lib
sudo ldconfig /usr/local/lib
gem install duckdb