One of the benefits of using Alpine Linux is its flexibility and customizability, which allows users to tailor the system to their specific needs.
Setting the timezone
Check the current timezone
date
Timezone setting
setup-timezone
Which timezone are you in? (’?’ for list) [UTC] Asia/Hong_Kong
Suppose you want to use the
Asia/
timezone andHong_Kong
as 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}'`
% %
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
EOF
This 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-completion
Change the default shell for your user:
sed -i 's/ash/bash/' /etc/passwd
Verify the change by checking the first line of the /etc/passwd
file:
cat /etc/passwd | head -n 1
It 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\]\\$ "
EOF
This 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 git
Install 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.vim
Create the NeoVim configuration file:
mkdir -p ~/.config/nvim
touch ~/.config/nvim/init.vim
Add 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:
nvim
Install the Vim plugins using the following command:
:PlugInstall
This 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/bash
Changing password for user New password: Bad password: too weak Retype password: passwd: password for user changed by root
also 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/$NEWUSER
create 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 update
For 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 openssh
```
Once the installation is complete, start the OpenSSH service:
/etc/init.d/sshd start
Enable the service to start automatically at boot:
rc-update add sshd
> Using 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:
```bash
ssh-keygen
Copy 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 -i
echo "PasswordAuthentication no" >> /etc/ssh/sshd_config
rc-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.conf
Apply the changes:
sysctl -p
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