vs code devcontainer

Od ponad roku zdarza mi się często “pokodzić” coś w pythonie a jako, że wcześniej głównie pisałem skrypty w bashu to vim w zupełności mi wystarczał. Tak więc w tym czasie przekonałem się do vs code, pyenva do zarządzania virtualenvami i różnymi wersjami pythona i od jakiegoś czasu również devcontenera.

Jak ktoś nie wie co to to szybciutko: konterer z predefiniowana konfuguracja dla całego środowiska no i vscode oczywiście. Ku pamięci wrzucam co używam lokalnie ale można to oczywiście mega rozbudować co też testowałem w pracy i działa to bardzo płynnie. Od pewnego czasu nawet na applowych procesorach dzięki dodaniu wsparcia dla rosetty działa to na mac os całkiem zgrabnie.

Potrzebujemy oczywiście vscode (https://code.visualstudio.com/docs/setup/linux) + docker:

sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce
sudo usermod -aG docker ${USER}

i dalej w repo w którym chcemy korzystać z devcontenera dodajemy:

vscode ➜ /workspaces/code/devcontainer (master) $ ls -l .devcontainer
total 8
-rw-r--r-- 1 vscode vscode 725 Nov 16 10:51 Dockerfile
-rw-r--r-- 1 vscode vscode 1166 Nov 16 10:46 devcontainer.json

cat .devcontainer/Dockerfile 
#BASE IMAGE
FROM --platform=linux/amd64 mcr.microsoft.com/devcontainers/python:0-3.11

#ENVS
ENV SHELL /usr/bin/zsh

#additional packages
RUN apt update && apt install -y vim

USER vscode
WORKDIR /home/vscode

RUN wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O - | zsh || true
RUN sed -i -e 's/plugins=(git)/plugins=(git vi-mode)/' ~/.zshrc
RUN curl https://pyenv.run | bash
RUN echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
RUN echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
RUN echo 'eval "$(pyenv init -)"' >> ~/.zshrc
ENV HOME  /home/vscode
ENV PYENV_ROOT $HOME/.pyenv
ENV PATH $PYENV_ROOT/shims:$PYENV_ROOT/bin:$PATH
RUN pyenv install 3.12

cat .devcontainer/devcontainer.json 
{
    "build": {
        "dockerfile": "Dockerfile"
    },
    "customizations": {
        "vscode": {
            "extensions": [
                "ms-python.python",
                "njpwerner.autodocstring",
                "eamodio.gitlens",
                "redhat.vscode-yaml",
                "ms-python.isort",
                "ms-python.flake8",
                "ms-python.black-formatter",
                "trond-snekvik.simple-rst",
                "redhat.ansible"
            ],
            "settings": {
                "files.insertFinalNewline": true,
                "editor.formatOnSave": true,
                "flake8.args": [
                    "--ignore=E501,W503,F722"
                ]
            },
            "terminal.integrated.defaultProfile.linux": "zsh",
            "terminal.integrated.profiles.linux": {
                "zsh": {
                    "path": "/usr/bin/zsh"
                }
            }
        }
    },
    "features": {},
    "mounts": [
        "source=${localEnv:HOME}${localEnv:USERPROFILE}/.ssh,target=/home/vscode/.ssh,type=bind,consistency=cached"
    ],
    "name": "pakos",
    "postCreateCommand": ""
}

Bonus: devcontainer cli

➜  devcontainer git:(master) devcontainer
devcontainer <command>

Commands:
  devcontainer open [path]          Open a dev container in VS Code
  devcontainer up                   Create and run dev container
  devcontainer set-up               Set up an existing container as a dev container
  devcontainer build [path]         Build a dev container image
  devcontainer run-user-commands    Run user commands
  devcontainer read-configuration   Read configuration
  devcontainer outdated             Show current and available versions
  devcontainer upgrade              Upgrade lockfile
  devcontainer features             Features commands
  devcontainer templates            Templates commands
  devcontainer exec <cmd> [args..]  Execute a command on a running dev container

Options:
  --help     Show help                                                                                         [boolean]
  --version  Show version number                                                                               [boolean]

devcontainer@0.52.1 /home/pakos/.vscode/extensions/ms-vscode-remote.remote-containers-0.321.0

Not enough non-option arguments: got 0, need at least 1

gnome-boxes

Ktoś chyba nie przemyślał zależności dla gnome-boxes bo po instalacji brakuje dwóch rzeczy:

• The CPU is capable of virtualization: yes
• The KVM module is loaded: yes
• Libvirt KVM guest available: no
• Boxes storage pool available: no
    Could not get “gnome-boxes” storage pool information from libvirt. Make sure “virsh -c qemu:///session pool-dumpxml gnome-boxes” is working.
• The SELinux context is default: no

Musimy doinstalować i dodać się do grupy:

sudo apt install qemu-system libvirt-daemon-system libvirt-clients
sudo adduser pakos libvirt

I wszystko śmiga

• The CPU is capable of virtualization: yes
• The KVM module is loaded: yes
• Libvirt KVM guest available: yes
• Boxes storage pool available: yes
• The SELinux context is default: no

pipewire vs buczenie z głośników

Z racji migracji w debianie z pulseaudio na pipewire musiałem ponownie rozwiązać problem “buczenia” głośników opisany już wcześniej.

mkdir -p .config/wireplumber/main.lua.d
cp /usr/share/wireplumber/main.lua.d/50-alsa-config.lua ~/.config/wireplumber/main.lua.d/

Odkomentuj session.suspend-timeout-seconds i ustaw na zero:

["session.suspend-timeout-seconds"] = 0,

No i restart:

systemctl --user restart wireplumber

Ps. jedyny minus/różnica w porównaniu do pulseaudio to że głośniki po podłączeniu/włączeniu systemu nadal startują w trybie suspended a nie idle co za tym idzie “buczenie” doskwiera, dopóki nie poleci jakiś dźwięk.

qnap wymiana dysków

Skoro jeden z dysków zaczął szwankować to przy okazji nadarzyła się okazja na kupno nowych z większą pojemnością, padło na Seagate IronWolf CMR 4 TB 3.5” SATA III (6 Gb/s) (ST4000VN008).

Filozofii tutaj żadnej nie ma, bo w przypadku raida 1,5,6,10 i TS-251+ wszystko robi się online, ot wypinasz i wkładasz nowy dysk, rebuild raida i następny. Na końcu extend capacity i i synchro raida. Wszystko w zasadzie samo się odpala więc tylko czekamy i monitorujemy. Ku pamięci dwie procedury:

https://www.qnap.com/en/how-to/faq/article/how-do-i-replace-a-faulty-disk-in-a-raid-group

https://www.qnap.com/en/how-to/tutorial/article/online-raid-capacity-upgrade

pulseaudio buczenie z głośników

Pewnie każdy w swoim życiu słyszał buczenie w głośnikach gdy podłączał wtyczkę i przypadkiem dotknął ją palcami, czy tam jakiegoś przedmiotu. Otóż od pewnego czasu te same dźwięki raczyły moje uszy gdy tylko nic nie leciało w outpucie.

Co się okazuje powodem, przynajmniej u mnie? Pulseaudio przechodzi w stan suspend gdy nic nie “gra”. Nie bardzo wiedziałem jak to z początku zdebugować więc wpadłem na to przypadkiem, odpaliłem wtedy pavucontrol żeby zobaczyć czy może jakaś opcja za to odpowiada i wtedy problem znikł. Dziwne, porównałem więc co pokazuje pacmd w poszukiwaniu czegoś do poprawy:

pacmd list-sinks
pacmd list-sink-inputs
pacmd list-sources

Okazuje się, że jedyną różnicą jest tutaj stan

state: IDLE
versus:
state: SUSPENDED
suspend cause: IDLE

tak więc wyłączyłem moduł suspend:

pakos@vostro:~$ cat .config/pulse/default.pa
.include /etc/pulse/default.pa
.nofail
unload-module module-suspend-on-idle
.fail

Nie jest to chyba najbardziej eleganckie rozwiązanie ale działa, a dlaczego tak się stało skoro wcześniej działało (heh) to będę szukał nadal.

terminator gtk3 tab style

Terminator, już jakiś czas temu przeszedł z gtk2 na gtk3 ale dopiero dzisiaj odpaliłem zobaczyć zmiany. Działa i wygląda jak zawsze dobrze aczkolwiek w zależności od używanego motywu wielkość zakładek może nieco przytłaczać na szczęście można manewrować css w .config/gtk-3.0/gtk.css:

pakos@vostro:~$ cat .config/gtk-3.0/gtk.css
.terminator-terminal-window notebook tab {
min-height: 1;
padding: 1px;
}
.terminator-terminal-window notebook tab:checked label {
color: #000080;
font-weight: bold;
}
.terminator-terminal-window notebook tab button {
min-height: 0;
min-width: 0;
padding: 0px;
margin: 0px;
}
.terminator-terminal-window notebook tab button:hover {
color: #FF0000;
}

To oczywiście najprostsza zmiana ale można się bawić wedle uznania 😉