
One of the benefits of using Alpine Linux is its flexibility and customizability, which allows users to tailor the system to their specific needs.
| Content of Table | 
- Setting the timezone
 - Make a dynamic motd
 - Changing To The Bash Shell
 - NeoVim and Vim plugins Install
 - Setting up a new user
 - SSH key authentication to login
 - Enable unprivileged users to use ICMP (Ping)
 
| Setting the timezone | 
Check the current timezone
dateTimezone setting
setup-timezoneWhich timezone are you in? ('?' for list) [UTC] Asia/Hong_Kong
Suppose you want to use theAsia/timezone andHong_Kongas the sub-timezone of 'Asia/'. You can input '?' to list the timezones to choose from.
Check the Date
date| Make a dynamic MOTD | 
MOTD stands for "Message of the Day" in Linux. It is a customizable message that is displayed to users when they log in to the system.
Create a crond script to dynamic create an motd message to users
rc-service crond start && rc-update add crond
vi /etc/periodic/15min/motd
chmod a+x /etc/periodic/15min/motd
run-parts --test /etc/periodic/15min| Command | Description | 
|---|---|
rc-service crond start | Starts the crond service, which runs scheduled tasks on the system. | 
rc-update add crond | Adds the crond service to the default runlevel, ensuring that it starts automatically on boot. | 
vi /etc/periodic/15min/motd | Use the Vi text editor and creates a new shell script at /etc/periodic/15min/motd. This script is executed every 15 minutes to update the MOTD. | 
chmod a+x /etc/periodic/15min/motd | Sets the execute permission for the motd script, allowing the system to run it as a periodic task. | 
run-parts --test /etc/periodic/15min | Tests the /etc/periodic/15min directory for executable scripts and prints a list of the scripts that would be executed by the system's periodic task scheduler. | 
Contents of /etc/periodic/15min/motd
#!/bin/sh
#. /etc/os-release
PRETTY_NAME=`awk -F= '$1=="PRETTY_NAME" { print $2 ;}' /etc/os-release | tr -d '"'`
VERSION_ID=`awk -F= '$1=="VERSION_ID" { print $2 ;}' /etc/os-release`
UPTIME_DAYS=$(expr `cat /proc/uptime | cut -d '.' -f1` % 31556926 / 86400)
UPTIME_HOURS=$(expr `cat /proc/uptime | cut -d '.' -f1` % 31556926 % 86400 / 3600)
UPTIME_MINUTES=$(expr `cat /proc/uptime | cut -d '.' -f1` % 31556926 % 86400 % 3600 / 60)
cat > /etc/motd << EOF
%+++++++++++++++++++++++++++++++ SERVER INFO ++++++++++++++++++++++++++++++++%
%                                                                            %
        Name: `hostname`
        Uptime: $UPTIME_DAYS days, $UPTIME_HOURS hours, $UPTIME_MINUTES minutes
        CPU: `cat /proc/cpuinfo | grep 'model name' | head  -1 | cut -d':' -f2`
        Memory: `free -m | head -n 2 | tail -n 1 | awk {'print  $2'}`M
        Swap: `free -m | tail -n 1 | awk {'print $2'}`M Disk: `df -h / | awk  '{ a = $2 } END { print a }'`
        Kernel: `uname -r`
        Distro: $PRETTY_NAME
        Version $VERSION_ID
    
        CPU Load: `cat /proc/loadavg | awk '{print $1 ", " $2 ", " $3}'`
        Free Memory: `free -m | head -n 2 | tail -n 1 | awk {'print $4'}`M
        Free Swap: `free -m | tail -n 1 | awk {'print $4'}`M
        Free Disk: `df -h / | awk '{ a =  $2 } END { print a }'`
    
        eth0 Address: `ifconfig eth0 | grep "inet addr" |  awk -F: '{print $2}' | awk '{print $1}'`
%                                                                            %
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
EOFThis is the result:
| Changing To The Bash Shell | 
Bash is a popular command shell in the Linux community, and many users prefer it over the default shell in Alpine Linux, which is ash. Changing to the Bash shell in Alpine Linux is a simple process that can greatly enhance our productivity and efficiency when working with the Linux system.
Alpine Linux uses Ash by default as the shell, but I prefer to use Bash as my Linux shell. To install Bash in Alpine Linux and make it the default shell, follow these steps:
Install Bash:
apk add bash bash-doc bash-completionChange the default shell for your user:
sed -i 's/ash/bash/' /etc/passwdVerify the change by checking the first line of the /etc/passwd file:
cat /etc/passwd | head -n 1It should display /bin/bash.
Customize the Bash shell. We can configure the Bash shell liking by adding your aliases and settings. 
   Here is an example of customization:
cat >> ~/.bash_profile << EOF
alias update='apk update && apk upgrade'
export HISTTIMEFORMAT="%d/%m/%y %T "
export PS1='\u@\h:\W \$ '
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alhF'
alias ls='ls --color=auto'
source /etc/profile.d/bash_completion.sh
export PS1="\[\e[31m\][\[\e[m\]\[\e[38;5;172m\]\u\[\e[m\]@\[\e[38;5;153m\]\h\[\e[m\] \[\e[38;5;214m\]\W\[\e[m\]\[\e[31m\]]\[\e[m\]\\$ "
EOFThis customizes the Bash shell with aliases for common commands, a colored prompt, and auto-completion using the bash_completion.sh script.
| NeoVim and Vim plugins Install in Alpine Linux | 
NeoVim is a popular text editor that is designed to be more extensible and customizable than traditional editors like Vim. It offers many features that make it an excellent choice for developers and testers.
To install NeoVim and Vim plugins in Alpine Linux, follow these steps:
Install NeoVim using the apk package manager:
apk add neovim curl gitInstall Vim plugins using the Vim plugin manager, such as Vim-Plug. First, download and install Vim-Plug:
curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vimCreate the NeoVim configuration file:
mkdir -p ~/.config/nvim
touch ~/.config/nvim/init.vimAdd the following lines to your init.vim file to set up Vim-Plug and install plugins:
call plug#begin('~/.local/share/nvim/plugged')
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'tpope/vim-commentary'
Plug 'scrooloose/nerdtree'
Plug 'joshdick/onedark.vim'
call plug#end()Save and exit the init.vim file.
Open NeoVim:
nvimInstall the Vim plugins using the following command:
:PlugInstallThis will download and install the plugins specified in your init.vim file.
| Setting up a new user | 
Installing sudo and assigning sudo privileges to a new user in Alpine Linux can greatly enhance your system's security and flexibility.
Install sudo using the apk package manager:
apk add sudo(1/1) Installing sudo (1.9.12_p2-r1)
Executing busybox-1.35.0-r29.trigger
Create a new user:
NEWUSER='user''user' as your UserName
adduser -g "${NEWUSER}" $NEWUSER -s /bin/bashChanging password for user
New password:
Bad password: too weak
Retype password:
passwd: password for user changed by rootalso the new user using a bash shell as default shell and
Add the new user to the sudo group:
echo "$NEWUSER ALL=(ALL) ALL" > /etc/sudoers.d/$NEWUSER && chmod 0440 /etc/sudoers.d/$NEWUSERcreate a username file in the sudoers folder to allow the new user to use sudo:
Once you have completed these steps, the new user can use the sudo command to elevate their privileges when necessary. 
To use the sudo command, the user should prefix the command they want to run with "sudo", like this:
sudo apk updateFor example, if the new user wants to install a new package using apk, they can use the following command:
sudo apk add <package_name>This will prompt the user to enter their password before allowing the command to run with elevated privileges.
| SSH key authentication to login | 
Update the package and Install OpenSSH:
apk update && apk add opensshOnce the installation is complete, start the OpenSSH service:
/etc/init.d/sshd startEnable the service to start automatically at boot:
rc-update add sshdUsing SSH key authentication to log in to Alpine Linux without a password is a secure and convenient way to access your system remotely.
To use SSH key authentication to login to Alpine Linux without a password, follow these steps:
| Local server setting (as a client) | 
Generate an SSH key pair on your local machine if you haven't already done so:
ssh-keygenCopy the public key to the remote server (Alpine Linux) using the ssh-copy-id command:
ssh-copy-id <username>@<server_ip_address>Enter your user password when prompted.
SSH into the remote server:
ssh <username>@<server_ip_address>You should now be able to log in to the remote server without being prompted for your password.
| Remote server setting (as server) | 
Disabling Password Authentication on your Server
sudo -iecho "PasswordAuthentication no" >> /etc/ssh/sshd_configrc-service sshd restart
- Caching service dependencies ... [ ok ]
 - Stopping sshd ... [ ok ]
 - Starting sshd ... [ ok ]
 
| Enable unprivileged users to use ICMP (Ping) | 
To fix the error "unprivileged ping is disabled, please enable by setting net.ipv4.ping_group_range" when trying to use the ping command,
it means that non-root users are not allowed to use the ping command.
Add a new config file:
echo 'net.ipv4.ping_group_range = 0 65534' >> /etc/sysctl.d/99-allow-ping.confApply the changes:
sysctl -p| Execute all steps with a Shell Script | 
wget -q https://kingtam.win/usr/uploads/script/alpine-init.sh -O alpine-init.sh && chmod +x alpine-init.sh && ./alpine-init.shCompatible only with Alpine Linux.
| Conclusion | 
Alpine Linux is a highly customizable distribution of Linux that offers a wide range of customizations to enhance your experience with the system.
By following the customizations outlined in this post, We can tailor Alpine Linux to our specific needs and preferences, making it a powerful and flexible tool for development and system administration.
| Reference | 
- Alpine Linux Installation
 - How to install bash shell in Alpine Linux
 - Setting up a new user
 - How To Configure SSH Key-Based Authentication on a Linux Server
 
| Related | 
        