Skip to main content

p0nch0 d3v

Base

Switch to root user:

su

Install sudo:

apt install -y sudo

Add user to sudoers

/usr/sbin/usermod -aG sudo [USER]

Base packages

Edit login defaults:

sudo nano /etc/login.defs

Locate the line:

ENV_PATH

Add to ENV_PATH the path: /usr/sbin

Edit /etc/apt/sources.list

deb http://deb.debian.org/debian/ testing main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security testing-security main contrib non-free non-free-firmware
deb http://deb.debian.org/debian/ testing-updates main contrib non-free non-free-firmware

Set time zone:

sudo timedatectl status --all
sudo timedatectl set-timezone [ZONE]

Useful scripts

ohmyzsh

Cockpit

sudo apt install -y cockpit 
sudo apt install -y cockpit-machines virtinst qemu-kvm qemu-utils qemu-block-extra

[Optional] - Virtualbox

Download it:

cd /tmp && /usr/bin/wget https://download.virtualbox.org/virtualbox/7.0.14/VirtualBox-7.0.14-161095-Linux_amd64.run

Update to executable:

chmod +x VirtualBox-7.0.14-161095-Linux_amd64.run

Run it:

sudo bash VirtualBox-7.0.14-161095-Linux_amd64.run

Verify Installation:

VBoxManage list vms

Add vbox user to vboxusers

sudo useradd -m vbox -G vboxusers

Password change vbox

sudo passwd vbox

Edit Virtualbox defaults:

sudo nano /etc/default/virtualbox
VBOXWEB_USER=vbox
VBOXWEB_HOST=0.0.0.0
VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/autostartvm.cfg

Setup auto start vm

sudo nano /etc/vbox/autostartvm.cfg
default_policy = deny

vbox = {
allow = true
startup_delay = 10
}
sudo chgrp vboxusers /etc/vbox && \
sudo chmod g+w /etc/vbox && \
sudo chmod +t /etc/vbox
sudo -u vbox VBoxManage setproperty autostartdbpath /etc/vbox/

p0nch0 d3v

Base packages

Useful scripts

sudo apt install -y chromium

ohmyzsh

SpaceVim

curl -sLf https://spacevim.org/install.sh | bash -s -- --install neovim

Docker

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update && \
sudo apt-get install -y docker-ce \
docker-ce-cli \
containerd.io \
docker-compose \
docker-compose-plugin
sudo usermod -aG docker $USER

Change Docker Storage Location

Google Chrome

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb --output-document /tmp/google-chrome-stable_current_amd64.deb
sudo apt install libu2f-udev
sudo dpkg -i /tmp/google-chrome-stable_current_amd64.deb

Sublime Text & Merge

wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/sublimehq-archive.gpg
echo "deb https://download.sublimetext.com/ apt/stable/" | sudo tee /etc/apt/sources.list.d/sublime-text.list
sudo apt-get update && \
sudo apt-get install --yes sublime-text sublime-merge

Visual Studio Code

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 --yes apt-transport-https && \
sudo apt update && \
sudo apt install --yes code

Virtualbox

sudo echo "deb [arch=amd64 signed-by=/usr/share/keyrings/oracle-virtualbox-2016.gpg] https://download.virtualbox.org/virtualbox/debian jammy contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list > /dev/null
wget -O- https://www.virtualbox.org/download/oracle_vbox_2016.asc | sudo gpg --dearmor --yes --output /usr/share/keyrings/oracle-virtualbox-2016.gpg
sudo apt-get update && \
sudo apt-get install --yes virtualbox-6.1

Skype

sudo apt install software-properties-common apt-transport-https wget ca-certificates gnupg2 -y
wget -O- https://repo.skype.com/data/SKYPE-GPG-KEY | sudo gpg --dearmor | sudo tee /usr/share/keyrings/skype.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/skype.gpg] https://repo.skype.com/deb stable main" | sudo tee /etc/apt/sources.list.d/skype-stable.list
sudo apt-get update && \
sudo apt install skypeforlinux -y

Auto mount external drive

List drives

ls -l /dev/disk/by-uuid

Edit File System Table

sudo nano /etc/fstab

Add the corresponding unique id, as the following

UUID=00000000-0000-0000-0000-000000000000 /mnt/{location} ext4 user,rw,exec 0 3

Ensure the locations exists

sudo mkdir --parents /mnt/{location}

Change the owner and/or group of the directory

sudo chown -R $USER:$USER /mnt/{location}/

Mount device

mount /dev/{device}

Add the following cron job

crontab -e

*/15 * * * * /bin/sh /mnt/{location}/development/copy_to_backup.sh

p0nch0 d3v

Stop docker service and socket

sudo systemctl stop docker.service && \
sudo systemctl stop docker.socket

Edit the current configuration

sudo nano /lib/systemd/system/docker.service

Locate: ExecStart

and add the follwing line: -g /some/other/location

Ensure that the directory exits

sudo mkdir -p /some/other/location

Sync pre-existing content

sudo rsync -aqxP /var/lib/docker/ /some/other/location

Start docker service and socket

sudo systemctl daemon-reload && \
sudo systemctl start docker

p0nch0 d3v

Create the app on dokku.

dokku apps:create j

Get Jenkins docker image

docker pull jenkins/jenkins:lts-jdk11

Tag the pulled image as the current application image

docker tag jenkins/jenkins:lts-jdk11 dokku/j:latest

Deploy the tagged image to the application

dokku tags:deploy j latest

Map the exposed port 8080 from Jenkins to 80 port

dokku proxy:set j http:80:8080
dokku proxy:ports-add j 80:8080

Optional, create a mount point for the whole jenkins configurations.

dokku storage:mount j /home/sneakykoder/jenkins_home:/var/jenkins_home

p0nch0 d3v

Prefer used a domain parked on namecheap.

Install ddclient, debian base linux distro:

sudo apt-get install ddclient -y
sudo vim /etc/ddclient.conf

Use the following content

ssl=yes
use=web, web=dynamicdns.park-your-domain.com/getip
protocol=namecheap
server=dynamicdns.park-your-domain.com
login=dummy-domain.tld
password=''
@
*

Get IP info:

sudo ddclient -query

Restart service:

sudo service ddclient restart

References:

p0nch0 d3v

Here is a set of some git snippets, useful in some way.

List files/directories

ls -a -l -h --color=always

Where:

-a      = show all files included the dots(.)
-l = show in long format
-h = Show in units in humat readable format
--color = Output colored

Find forlders recursively

find . -name "node_modules" -type d -prune | xargs du -chs

p0nch0 d3v

Here is a set of some git snippets, useful in some way.

Delete merged branches

Code

git branch --merged | grep -v '\*\|master\|main\|develop' | xargs -n 1 git branch -d

Git log

Alias:

git config --global alias.graph-log 'log --pretty=oneline --abbrev-commit --graph'

Use:

git graph-log

Alias:

git config --global alias.graph-log 'log --pretty --oneline --graph --abbrev-commit --relative-date'

Use:

git graph-log

Refresh with development branch

Alias:

git config --global alias.dev '!f() { git add . ; git stash push --message "stash_dev" ; git checkout development ; git pull origin development ; git stash apply stash^{/stash_dev} ; }; f'

Use:

git dev

Commit no verify

Alias:

git config --global alias.cnv 'commit --no-verify'

Use:

git cnv --message "..."

Push no verify

Alias:

git config --global alias.pnv 'push --no-verify'

Use:

git pnv {origin} {branch}

Git config user

git config --local user.email "john.doe@mail.com"
git config --local user.name "John Doe"

Git hook

Git hook to validate branch name

#!/bin/sh
remote="$1"
url="$2"
LC_ALL=C
local_branch="$(git rev-parse --abbrev-ref HEAD)"
valid_branch_regex="^(main|master|develop|development|((feature|bugfix|bug-fix|bug|fix|release|hotfix|hot-fix)+\/{1,1}[a-zA-Z0-9_.-]+))$"
message="The branch name \"$local_branch\" is not correct. Branch names must accomplish the following convention: \"$valid_branch_regex\". The branch should be renamed a valid name and try again."
if [[ ! $local_branch =~ $valid_branch_regex ]]
then
echo "$message"
exit 1
fi
exit 0

p0nch0 d3v

A collection of custom docker code snipets as CLI's

There was a need to run different technologies in local dev environment, such as .net-core, node js, python, ruby, go-lang, etc. without install them.

A decision mas made to create a set of docker code snippets according to the technology to help with the development process.