How to use bash create file in Linux

Introduction

This tutorial is all about using bash create file in Linux in the terminal. Guess what? It’s super easy! Bash has this neat and efficient command called “touch” that makes creating files a breeze. So, let’s dive in and discover how to use the touch command to create new files in Bash.

Alright, so what’s the deal with this “touch” command? Well, it’s like a magic wand for your terminal. With just a simple touch command, you can conjure up new files effortlessly. No need to go through complicated steps – Bash keeps it straightforward. In this tutorial, we’re going to break down the touch command and explore how it turns your terminal into a file-creating wizard.

Creating files in Bash doesn’t have to be a puzzle. With the trusty touch command, you’ll be crafting files like a pro in no time. This tutorial is your guide to mastering the art of file creation in Bash, so get ready to unleash the power of the touch command and make your terminal work wonders!

How to use Bash to create a file

Bash create file: A Guide to Using the Touch Command

The touch command to create an empty text file with foo.txt

The touch command in Bash is primarily used to update the access and modification timestamps of files. However, it can also be used to create a new file if it doesn’t already exist.

To create a new file using the touch command, follow this syntax:

$ touch foo.bar
$ > foo.bar
bash create file command

To make a text file using the cat command line on Linux. press ctrl+c to quit and save the file.

$ cat > foo.txt

shell command

$ echo 'This is my blog: devopsroles.com' > foo.txt

Append text to an existing file

$ echo 'yet another line: huuphan.com' >> foo.txt

To create a text file, you can use the vi or vim commands in your terminal. These tools are powerful editors for crafting text documents. Simply type vi or vim followed by the desired filename and press Enter. This will open an editor where you can write and edit your text. To begin typing, press i to enter insert mode. When you’re finished, press the Esc key to exit insert mode.

To save your work, type :w and press Enter. To close the editor, type :q, or you can save and exit at the same time by typing :wq. With these simple steps, you’ve successfully created your text file!

Conclusion

You have to use the Bash create file command terminal. Creating a new file in Bash is a straightforward process with the help of the touch command. Its simplicity and efficiency make it a popular choice for generating empty files. By using the touch command and providing the desired filename, you can quickly create new files in your Bash scripts or command-line operations. I hope will this your helpful. Thank you for reading the DevopsRoles page!

How to Password Protect Files on Linux : A Complete Guide

Introduction

In this tutorial, you’ll learn how to password protect files on Linux to ensure they remain secure from unauthorized access. Various methods are available for this purpose, each providing different levels of security. Here are a few techniques to help you safeguard your files and folders with strong passwords.

Using tools like zip and gpg, you can encrypt your files effectively. zip allows you to compress and password protect files, while gpg offers robust encryption options. Both methods are straightforward and enhance the security of your sensitive data on Linux systems.

How to Password Protect Files on Linux

Encrypt a File with GnuPG

I use gpg command to encrypt a file. GnuPG is a free Linux program that supports multiple encryptions for file encryption.

1. Open the terminal

2. Run the following command line to encrypt your file.

gpg -c your_file

GnuPG will create an encrypted file with .gpg extension in your current working folder.

The result is the picture below:

To access it, you’ll need to decrypt it. For this, run the following command

gpg your_file.gpg

The result is the picture below:

other encryption algorithms, first, check the supported ones by running:

For example, you specify the desired algorithm as a command below

gpg -c --cipher-algo algorithm_name your_file

using the zip command to Encrypt a File

the zip command is another CLI utility that password-protect files on Linux. it is pre-installed on all Linux distros.

zip --password your_password archive_file.zip file1 file2

you replace your_passowrd with the password you want to use to encrypt the archive.

Unzip the archive and enter your password. you can run the command below:

unzip archive_file.zip

Encrypt a File Using mcrypt

list out all the supported encryption algorithms

mcrypt --list

encrypt filename

mcrypt -a algorithm_name filename

If you wish to open this file, you’ll need to decrypt it as the command below:

mcrypt -d filename.nc

Conclusion

By following this tutorial, you now know how to password protect files on Linux, enhancing your data security. Always choose a strong, unique password when prompted and consider using a password manager to keep your passwords safe and easily accessible. Implementing these methods helps prevent unauthorized access and ensures your sensitive information remains protected. Thank you for reading the DevopsRoles page and I hope you found this information helpful. Stay secure!

Fixing the “Ubuntu Repository No Longer Has a Release” Issue

Introduction

In this tutorial, How to fix the Ubuntu repository no longer has a Release.

Ubuntu, a widely used Linux distribution, relies on repositories to provide software packages and updates. Occasionally, you might encounter the error message “Ubuntu repository no longer has a release,” indicating that the repository you’re trying to access is unavailable or unsupported. This article delves into the reasons behind this issue and offers potential solutions to address it effectively.

Today, I am installing Nginx, But suddenly one day you use this command and get the following error:

vagrant@controller:~$ sudo apt install nginx -y
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libnginx-mod-http-geoip2 libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter libnginx-mod-mail
  libnginx-mod-stream libnginx-mod-stream-geoip2 nginx-common nginx-core
Suggested packages:
  fcgiwrap nginx-doc ssl-cert
The following NEW packages will be installed:
  libnginx-mod-http-geoip2 libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter libnginx-mod-mail
  libnginx-mod-stream libnginx-mod-stream-geoip2 nginx nginx-common nginx-core
0 upgraded, 9 newly installed, 0 to remove and 0 not upgraded.
Need to get 700 kB of archives.
After this operation, 2386 kB of additional disk space will be used.
Ign:1 http://archive.ubuntu.com/ubuntu impish-updates/main amd64 nginx-common all 1.18.0-6ubuntu11.1
Ign:2 http://archive.ubuntu.com/ubuntu impish-updates/main amd64 libnginx-mod-http-geoip2 amd64 1.18.0-6ubuntu11.1
Ign:3 http://archive.ubuntu.com/ubuntu impish-updates/main amd64 libnginx-mod-http-image-filter amd64 1.18.0-6ubuntu11.1Ign:4 http://archive.ubuntu.com/ubuntu impish-updates/main amd64 libnginx-mod-http-xslt-filter amd64 1.18.0-6ubuntu11.1
Ign:5 http://archive.ubuntu.com/ubuntu impish-updates/main amd64 libnginx-mod-mail amd64 1.18.0-6ubuntu11.1
Ign:6 http://archive.ubuntu.com/ubuntu impish-updates/main amd64 libnginx-mod-stream amd64 1.18.0-6ubuntu11.1
Ign:7 http://archive.ubuntu.com/ubuntu impish-updates/main amd64 libnginx-mod-stream-geoip2 amd64 1.18.0-6ubuntu11.1
Ign:8 http://archive.ubuntu.com/ubuntu impish-updates/main amd64 nginx-core amd64 1.18.0-6ubuntu11.1
Ign:9 http://archive.ubuntu.com/ubuntu impish-updates/main amd64 nginx amd64 1.18.0-6ubuntu11.1
Err:1 http://security.ubuntu.com/ubuntu impish-updates/main amd64 nginx-common all 1.18.0-6ubuntu11.1
  404  Not Found [IP: 91.189.91.39 80]
Err:2 http://security.ubuntu.com/ubuntu impish-updates/main amd64 libnginx-mod-http-geoip2 amd64 1.18.0-6ubuntu11.1
  404  Not Found [IP: 91.189.91.39 80]
Err:3 http://security.ubuntu.com/ubuntu impish-updates/main amd64 libnginx-mod-http-image-filter amd64 1.18.0-6ubuntu11.1
  404  Not Found [IP: 91.189.91.39 80]
Err:4 http://security.ubuntu.com/ubuntu impish-updates/main amd64 libnginx-mod-http-xslt-filter amd64 1.18.0-6ubuntu11.1  404  Not Found [IP: 91.189.91.39 80]
Err:5 http://security.ubuntu.com/ubuntu impish-updates/main amd64 libnginx-mod-mail amd64 1.18.0-6ubuntu11.1
  404  Not Found [IP: 91.189.91.39 80]
Err:6 http://security.ubuntu.com/ubuntu impish-updates/main amd64 libnginx-mod-stream amd64 1.18.0-6ubuntu11.1
  404  Not Found [IP: 91.189.91.39 80]
  404  Not Found [IP: 91.189.91.39 80]
Err:9 http://security.ubuntu.com/ubuntu impish-updates/main amd64 nginx amd64 1.18.0-6ubuntu11.1
  404  Not Found [IP: 91.189.91.39 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/n/nginx/nginx-common_1.18.0-6ubuntu11.1_all.deb  404  Not Found [IP: 91.189.91.39 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/n/nginx/libnginx-mod-http-geoip2_1.18.0-6ubuntu11.1_amd64.deb  404  Not Found [IP: 91.189.91.39 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/n/nginx/libnginx-mod-http-image-filter_1.18.0-6ubuntu11.1_amd64.deb  404  Not Found [IP: 91.189.91.39 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/n/nginx/libnginx-mod-http-xslt-filter_1.18.0-6ubuntu11.1_amd64.deb  404  Not Found [IP: 91.189.91.39 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/n/nginx/libnginx-mod-mail_1.18.0-6ubuntu11.1_amd64.deb  404  Not Found [IP: 91.189.91.39 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/n/nginx/libnginx-mod-stream_1.18.0-6ubuntu11.1_amd64.deb  404  Not Found [IP: 91.189.91.39 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/n/nginx/libnginx-mod-stream-geoip2_1.18.0-6ubuntu11.1_amd64.deb  404  Not Found [IP: 91.189.91.39 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/n/nginx/nginx-core_1.18.0-6ubuntu11.1_amd64.deb  404  Not Found [IP: 91.189.91.39 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/n/nginx/nginx_1.18.0-6ubuntu11.1_amd64.deb  404  Not Found [IP: 91.189.91.39 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

Cause: older releases of Ubuntu moved to a new host.

If you encounter an issue where the Ubuntu repository no longer has a “Release” file, it could be due to a temporary problem with the repository or a misconfiguration on your system. Here are a few steps you can take to troubleshoot and potentially resolve the issue:

Ubuntu repository no longer has a Release fixed

Step 1. Backup file sources.list

cp /etc/apt/sources.list /etc/apt/sources.list.bak

Step 2. Replace the links with the new repository address.

sudo sed -i -re 's/([a-z]{2}.)?archive.ubuntu.com|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list

Step 3. Update OS after steps 1 and step 2.

sudo apt-get update && sudo apt-get dist-upgrade

At this point, when you see that command 3 has run successfully, you can completely select Y to continue the update process for your Ubuntu server. Or select N to cancel the update process.

As a result, the fixed repository no longer has a Release file on Ubuntu Server. For example, I select Y.

root@controller:~# sudo apt-get update && sudo apt-get dist-upgrade
Get:1 http://old-releases.ubuntu.com/ubuntu impish InRelease [270 kB]
Hit:2 https://apache.jfrog.io/artifactory/couchdb-deb focal InRelease
Get:3 http://old-releases.ubuntu.com/ubuntu impish-updates InRelease [115 kB]
Get:4 http://old-releases.ubuntu.com/ubuntu impish-backports InRelease [101 kB]
Get:5 http://old-releases.ubuntu.com/ubuntu impish-security InRelease [110 kB]
Get:6 http://old-releases.ubuntu.com/ubuntu impish/main amd64 Packages [1396 kB]
Get:7 http://old-releases.ubuntu.com/ubuntu impish/main Translation-en [511 kB]
Get:8 http://old-releases.ubuntu.com/ubuntu impish/main amd64 c-n-f Metadata [29.8 kB]
Get:9 http://old-releases.ubuntu.com/ubuntu impish/restricted amd64 Packages [82.2 kB]
Get:44 http://old-releases.ubuntu.com/ubuntu impish-security/universe amd64 c-n-f Metadata [5396 B]
Get:45 http://old-releases.ubuntu.com/ubuntu impish-security/multiverse amd64 Packages [4776 B]
Get:46 http://old-releases.ubuntu.com/ubuntu impish-security/multiverse Translation-en [988 B]
Get:47 http://old-releases.ubuntu.com/ubuntu impish-security/multiverse amd64 c-n-f Metadata [228 B]
Fetched 23.4 MB in 1min 34s (248 kB/s)
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  git git-man libpython3.9 libpython3.9-minimal libpython3.9-stdlib python3-distupgrade python3.9 python3.9-minimal
  ubuntu-release-upgrader-core
9 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
7 standard security updates
Need to get 11.1 MB of archives.
After this operation, 24.6 kB disk space will be freed.
Do you want to continue? [Y/n] y
Get:1 http://old-releases.ubuntu.com/ubuntu impish-updates/main amd64 python3.9 amd64 3.9.7-2ubuntu0.1 [433 kB]
Get:2 http://old-releases.ubuntu.com/ubuntu impish-updates/main amd64 libpython3.9 amd64 3.9.7-2ubuntu0.1 [1897 kB]
Get:3 http://old-releases.ubuntu.com/ubuntu impish-updates/main amd64 libpython3.9-stdlib amd64 3.9.7-2ubuntu0.1 [1807 kB]
Get:4 http://old-releases.ubuntu.com/ubuntu impish-updates/main amd64 python3.9-minimal amd64 3.9.7-2ubuntu0.1 [2058 kB]
Get:5 http://old-releases.ubuntu.com/ubuntu impish-updates/main amd64 libpython3.9-minimal amd64 3.9.7-2ubuntu0.1 [783 kB]
Get:6 http://old-releases.ubuntu.com/ubuntu impish-updates/main amd64 ubuntu-release-upgrader-core all 1:21.10.10 [25.5 kB]
Get:7 http://old-releases.ubuntu.com/ubuntu impish-updates/main amd64 python3-distupgrade all 1:21.10.10 [104 kB]
Get:8 http://old-releases.ubuntu.com/ubuntu impish-updates/main amd64 git-man all 1:2.32.0-1ubuntu1.3 [943 kB]
Get:9 http://old-releases.ubuntu.com/ubuntu impish-updates/main amd64 git amd64 1:2.32.0-1ubuntu1.3 [3038 kB]
Fetched 11.1 MB in 50s (221 kB/s)
(Reading database ... 99174 files and directories currently installed.)
Preparing to unpack .../0-python3.9_3.9.7-2ubuntu0.1_amd64.deb ...
Unpacking python3.9 (3.9.7-2ubuntu0.1) over (3.9.7-2build1) ...
Preparing to unpack .../1-libpython3.9_3.9.7-2ubuntu0.1_amd64.deb ...
Unpacking libpython3.9:amd64 (3.9.7-2ubuntu0.1) over (3.9.7-2build1) ...
Preparing to unpack .../2-libpython3.9-stdlib_3.9.7-2ubuntu0.1_amd64.deb ...
Unpacking libpython3.9-stdlib:amd64 (3.9.7-2ubuntu0.1) over (3.9.7-2build1) ...
Preparing to unpack .../3-python3.9-minimal_3.9.7-2ubuntu0.1_amd64.deb ...
Unpacking python3.9-minimal (3.9.7-2ubuntu0.1) over (3.9.7-2build1) ...
Preparing to unpack .../4-libpython3.9-minimal_3.9.7-2ubuntu0.1_amd64.deb ...
Unpacking libpython3.9-minimal:amd64 (3.9.7-2ubuntu0.1) over (3.9.7-2build1) ...
Preparing to unpack .../5-ubuntu-release-upgrader-core_1%3a21.10.10_all.deb ...
Unpacking ubuntu-release-upgrader-core (1:21.10.10) over (1:21.10.9) ...
Preparing to unpack .../6-python3-distupgrade_1%3a21.10.10_all.deb ...
Unpacking python3-distupgrade (1:21.10.10) over (1:21.10.9) ...
Preparing to unpack .../7-git-man_1%3a2.32.0-1ubuntu1.3_all.deb ...
Unpacking git-man (1:2.32.0-1ubuntu1.3) over (1:2.32.0-1ubuntu1.2) ...
Preparing to unpack .../8-git_1%3a2.32.0-1ubuntu1.3_amd64.deb ...
Unpacking git (1:2.32.0-1ubuntu1.3) over (1:2.32.0-1ubuntu1.2) ...
Setting up libpython3.9-minimal:amd64 (3.9.7-2ubuntu0.1) ...
Setting up python3-distupgrade (1:21.10.10) ...
Setting up ubuntu-release-upgrader-core (1:21.10.10) ...
Setting up git-man (1:2.32.0-1ubuntu1.3) ...
Setting up python3.9-minimal (3.9.7-2ubuntu0.1) ...
Setting up libpython3.9-stdlib:amd64 (3.9.7-2ubuntu0.1) ...
Setting up libpython3.9:amd64 (3.9.7-2ubuntu0.1) ...
Setting up git (1:2.32.0-1ubuntu1.3) ...
Setting up python3.9 (3.9.7-2ubuntu0.1) ...
Processing triggers for man-db (2.9.4-2) ...
Processing triggers for libc-bin (2.34-0ubuntu3.2) ...
Scanning processes...
Scanning candidates...
Scanning linux images...

Running kernel seems to be up-to-date.

Restarting services...
Service restarts being deferred:
 systemctl restart networkd-dispatcher.service
 systemctl restart unattended-upgrades.service

No containers need to be restarted.

No user sessions are running outdated binaries.

Via Youtube

Conclusion

By understanding the potential causes and implementing the solutions provided in this article, you can address the issue and restore the functionality of your package manager.

Whether it’s removing unsupported repositories, updating URLs, ensuring network connectivity, or waiting for temporary issues to be resolved, these steps will help you navigate and resolve the error efficiently.

You have a fixed repository no longer has a Release file on Ubuntu. I hope will this your helpful. Thank you for reading the DevopsRoles page!

Linux Systemd Cheat Sheet Useful

Introduction

In this tutorial, I write about the Systemd cheat sheet useful in Linux. Systemd provides a system and service that runs at PID 1. It tracks logged-in users and runs containers virtual machines and more.

The Linux Systemd Cheat Sheet is a handy guide that provides quick and easy-to-understand information about Systemd. Systemd is a system and service manager for Linux operating systems, and this cheat sheet is designed to help users navigate and utilize its features efficiently.

Whether you’re a beginner or an experienced Linux user, this cheat sheet covers essential commands and functions related to Systemd. From starting and stopping services to managing system processes, the cheat sheet is a valuable resource for anyone looking to streamline their Linux system management tasks.

With the Linux Systemd Cheat Sheet, you can quickly reference key Systemd commands, making it easier to troubleshoot issues, configure services, and optimize system performance. This user-friendly guide aims to empower Linux users with the knowledge they need to navigate Systemd effectively, ensuring a smoother and more efficient system administration experience.

Systemd Cheat Sheet in Linux

Logs with systemd

The contentCommand Line
View all system logsjournalctl
List boot numbersjournalctl –list-boots
View logs for unit sshjournalctl –unit ssh
View system logs from the most recentjournalctl -xe

For example the picture below

Introspection with systemd

The contentCommand Line
show unit file settingssystemctl show sshd
Show contents of the unit filesystemctl cat sshd
Show whether the unit is activesystemctl is-active sshd
Show whether the unit has failedsystemctl is-failed sshd
Edit unit file configurationsudo systemctl edit sshd
Restart daemonsudo systemctl daemon-reload

Services

The contentCommand Line
Start service nginxsystemctl start nginx
Stop service nginxsystemctl stop nginx
Show status of service nginxsystemctl status nginx
Start nginx now and at system startupsystemctl enable –now nginx
At system startup, start (enable) nginxsystemctl enable nginx
At system startup, do not start nginxsystemctl disable nginx
Show whether service nginx is enabledsystemctl is-enabled nginx
Prevent service from starting (mask)systemctl mask nginx
Unmask service, allowing it to be startedsystemctl unmask nginx
List all available servicessystemctl list-unit-files –-type service

For example as below

Targets (runlevels)

Targets, also known as runlevels in Linux, play a crucial role in managing the system’s state and functionality. Think of targets as different modes or scenarios your computer can operate in, each with a specific set of services and processes.

In simpler terms, runlevels help define what your computer is supposed to do at different stages – be it during startup, regular operation, or shutdown. For instance, runlevel 3 might focus on a multi-user environment with networking capabilities, while runlevel 5 could include a graphical user interface for a more user-friendly experience.

These runlevels or targets allow users to customize and control the behavior of their Linux system based on their needs. Whether you’re setting up a server that doesn’t require a graphical interface or a desktop environment for everyday use, understanding and configuring runlevels is essential for tailoring your Linux experience.

The contentCommand line
List all available targetssystemctl list-unit-files –-type target
Show dependencies of a targetsystemctl list-dependencies nginx
Show default boot targetsystemctl get-default
Boot to a text consolesystemctl set-default multi-user
Boot to a graphical desktopsystemctl set-default graphical

FAQ Section

1. What is the difference between systemctl and journalctl?

systemctl manages services, units, and targets, while journalctl is used to view logs maintained by Systemd.

2. Can Systemd work alongside other init systems?

Yes, but it’s not recommended as conflicts can arise. Most modern Linux distributions have fully transitioned to Systemd.

3. How do I troubleshoot failed services?

Use:

systemctl status <service-name>

Then, check logs with:

journalctl -u <service-name>

External Resources

Conclusion

You should utilize the helpful Systemd Cheat Sheet in Linux. The cheat sheet includes fundamental systemd commands, and there are even more advanced features and options to explore. For detailed information about specific commands or options, you can check the systemd documentation or man pages (man systemctl). I hope you find this information useful. Thank you for visiting the DevopsRoles page!”

Kubernetes day one

#Introduction

In this tutorial, We study together K8s (Kubernetes). Let go of Kubernetes day one.

  • Method installs for Kubernetes.
  • Use Managed Kubernetes service from CSP.
  • Install and configure Kubectl for Linux and macOS.
  • Configuring Kubernetes in Minikube Windows or Linux.
  • Minikube install commands.
  • Create the First POD configuration in YAML.
  • How to generate Pod Manifests via CLI.

Method installs for Kubernetes.

There are multiple methods to get started with a full Kubernetes Environment.

  • Use the Managed Kubernetes Service.
  • Install and configure Kubernetes Manually
  • Use Minikube

Managed Kubernetes Service.

Provides like: AWS, GCP, IBM, and others providers.

Minikube

It’s a tool that makes it easy to run Kubernetes locally.

Minikube run a single node K8s cluster on VM on your laptop. You can try out or develop with it.

Install and configure Kubernetes Manually

It’s the Hard Way. You install and configure components of K8s.

Install Kubectl on Windows

it allows running commands against K8s clusters.

Kubectl to deploy applications, manage cluster resources, and view logs. Link here.

Download Kubectl here

Add path environment variable for K8s

Confirm kubectl command on Windows.

Install Minikube on Windows

Link here.

For example below:

From a terminal start your cluster.

K8S PODS

Kubernetes Pod is a group of one or more application containers that share resources.

  • A Pod runs on a Node.
  • Each Node is managed by the Master.
  • A Node has multiple pods.
  • A Node is a worker machine in K8s.

The command same docker vs K8s

docker run –name webserver nginxkubectl run webserver –image=nginx
docker exec -it webserver bashkubectl exec -it webserver — bash
docker stop webserver
docker rm webserver
kubectl delete pod webserver

Updating later!

Deploy the Latest Portainer Release

Portainer frequently releases updates. You can not simply login to your Portainer container upgrade button, in this tutorial, How to Deploy the Latest Portainer Release.

Backup Portainer container.

I’ll back up the current Portainer deployment.
Login with admin user and click Settings in the left navigation as in the picture below:

I will download the backup file to local storage and save a .tar.gz

Stop/Remove the Current Portainer Container

Login to the Container ID of Portainer and run the command below:

docker ps -a|grep portainer
docker stop ID
docker rm ID

Where ID is the ID of the Portainer container.

For example, The output terminal is as below:

Deploy the Latest Portainer Release

See install Portainer docker here. I used portainer_data for persistent storage.

First, You need to pull down the Portainer latest.

docker pull portainer/portainer-ce:latest

Deploy Portainer with the command line as below

docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

Open a web browser and access to link: http://SERVER:9000

Restore a Backup for the Portainer container.

You need to deploy a fresh instance of Portainer with an empty data volume and choose the Restore Portainer from the backup option during setup. Click Select file and navigate to the .tar.gz file you downloaded earlier. After selecting the file, click Restore Portainer.

Conclusion

You have to deploy Portainer Docker. Please note that these steps provide a basic overview of deploying Portainer.

For a production environment, it’s essential to consider security measures and other best practices. It’s always recommended to consult Portainer’s official documentation for more detailed instructions specific to the latest release and any additional configuration options.

I hope will this your helpful. Thank you for reading the DevopsRoles page!

How to install CouchDB on Rocky Linux 8: A Comprehensive Guide

Introduction

In this tutorial, How to Install CouchDB on Rocky Linux Server. We’ll cover each step, from updating your system and installing necessary dependencies to configuring CouchDB for optimal performance. By the end of this guide, you will have a fully functional CouchDB instance running on your Rocky Linux server, ready to handle your database needs with reliability and efficiency.

  • CouchDB is a NoSQL database.
  • CouchDB stores and presents data in JavaScript Object Notation.

Install CouchDB on Rocky Linux 8

Update the System

$ sudo yum update

Install “epel-release” repository.

$ sudo yum install epel-release

Enable the Apache CouchDB package repository.

$ sudo vi /etc/yum.repos.d/apache-couchdb.repo

The content is as below:

[bintray--apache-couchdb-rpm]
name=bintray--apache-couchdb-rpm
baseurl=http://apache.bintray.com/couchdb-rpm/el$releasever/$basearch/
gpgcheck=0
repo_gpgcheck=0
enabled=1

You want to install Standalone or Cluster Mode. I will use standalone mode.

Install CouchDB

How to fix the error code below:

[vagrant@localhost ~]$ sudo yum install couchdb
bintray--apache-couchdb-rpm                                                                                                                                                      170  B/s | 166  B     00:00
Errors during downloading metadata for repository 'bintray--apache-couchdb-rpm':
  - Status code: 502 for http://apache.bintray.com/couchdb-rpm/el8/x86_64/repodata/repomd.xml (IP: 34.215.50.170)
Error: Failed to download metadata for repo 'bintray--apache-couchdb-rpm': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried

You need to delete the repo and add the repo for “couchdb.repo” as below:

$ sudo rm /etc/yum.repos.d/apache-couchdb.repo
$ sudo yum-config-manager --add-repo https://couchdb.apache.org/repo/couchdb.repo

YouTube: Step-by-Step Guide: Installing CouchDB on Rocky Linux 8

Now, You install the Couchdb server.

$ sudo yum install couchdb

The output terminal is the picture below:

Verify the installation.

Start services

# systemctl start couchdb
# systemctl enable couchdb
# systemctl status couchdb

Firewalld setting allows port 5984

$ sudo firewall-cmd --zone=public --permanent --add-port=5984/tcp
$ sudo systemctl start firewalld

The CouchDB server will run on localhost:5984

Configuration of CouchDB on Rocky Linux 8

CouchDB’s configuration files are located in the /opt/couchdb/etc/ directory.

Open the file

$ sudo vi /opt/couchdb/etc/local.ini

uncommenting the line just below

[admins]
admin = mypassword

Uncomment the port and bind-address values.

[chttpd]
port = 5984
bind_address = 0.0.0.0

Save the changes and exit the configuration file.

Creating a Database

Access CouchDB Web Interface at http://127.0.0.1:5984/_utils/ with your user credentials and create a new database with CouchDB.

By default, CouchDB listens on port 5984.

Conclusion

You have to Install CouchDB on Rocky Linux 8. CouchDB should now be installed and running on your Rocky Linux 8 system. Remember to secure your CouchDB installation and configure any necessary authentication and access controls based on your requirements. I hope this will be helpful for you. Thank you for reading the DevopsRoles page!

How to install kubernetes on ubuntu

To install Kubernetes on Ubuntu, you can use the kubeadm tool, which simplifies the process of setting up a cluster. Here’s a step-by-step guide on how to install Kubernetes on Ubuntu.

Kubernetes Requirements

  • Master Node.
  • Worker Node 1.
  • The host OS is Ubuntu Server.

1. Update Ubuntu Server

It is always an updated system package. use the command line below:

$ sudo apt update

2. Install Docker on Ubuntu Server

$ sudo apt install curl -y
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sh get-docker.sh
$ sudo usermod -aG docker $USER
$ docker --version

Repeat on all other nodes.

3.How to install Kubernetes on Ubuntu server.

Use the command line to install K8s as below.

$ sudo apt-get install -y apt-transport-https ca-certificates curl
$ sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

Repeat for each server node.

4. Add software repositories

k8s are not included in the default repositories. Use the command line below:

$ echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
$ sudo apt-get update

Repeat for each server node.

5. Install the tool for Kubernetes

A tool that helps to initialize a cluster using Kubernetes Admin or Kubeadm. Kubelet is the worker package, which runs on all nodes and starts containers. Use the command line below

$ sudo apt-get install -y kubeadm kubelet kubectl
$ sudo apt-mark hold kubelet kubeadm kubectl

Repeat for each server node.

6. Disabling swap memory on each server

$ sudo swapoff -a

7. Setting a unique hostname for each server node.

Decide which server to set as the primary node.

$ sudo hostnamectl set-hostname k8s-master

Next, Set a worker node hostname

$ sudo hostnamectl set-hostname k8s-node1

If you add a worker node, set a unique hostname on each one.

8. Initialize Kubernetes on the master node

On the master node, Run the command below:

$ sudo kubeadm init --apiserver-advertise-address=192.168.56.11 --pod-network-cidr=10.100.0.0/16

The output terminal is as below:

vagrant@k8s-master:~$ sudo kubeadm init --apiserver-advertise-address=192.168.56.11 --pod-network-cidr=10.100.0.0/16
[init] Using Kubernetes version: v1.24.2
[preflight] Running pre-flight checks
        [WARNING SystemVerification]: missing optional cgroups: blkio
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[certs] Using certificateDir folder "/etc/kubernetes/pki"
[certs] Generating "ca" certificate and key
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [k8s-master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 192.168.56.11]
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [k8s-master localhost] and IPs [192.168.56.11 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [k8s-master localhost] and IPs [192.168.56.11 127.0.0.1 ::1]
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Starting the kubelet
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"
[control-plane] Creating static Pod manifest for "kube-controller-manager"
[control-plane] Creating static Pod manifest for "kube-scheduler"
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[apiclient] All control plane components are healthy after 4.501962 seconds
[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config" in namespace kube-system with the configuration for the kubelets in the cluster
[upload-certs] Skipping phase. Please see --upload-certs
[mark-control-plane] Marking the node k8s-master as control-plane by adding the labels: [node-role.kubernetes.io/control-plane node.kubernetes.io/exclude-from-external-load-balancers]
[mark-control-plane] Marking the node k8s-master as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule node-role.kubernetes.io/control-plane:NoSchedule]
[bootstrap-token] Using token: 8ke6fa.3c5ll272057418qj
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] Configured RBAC rules to allow Node Bootstrap tokens to get nodes
[bootstrap-token] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] Configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.56.11:6443 --token 8ke6fa.3c5ll272057418qj \
        --discovery-token-ca-cert-hash sha256:4e69979a597f673781606eb7ab6bed5ccb741f46756b17f196b9cd76d3b51053

This is used to join the worker nodes to the cluster. We will create a directory for the cluster.

$ mkdir -p $HOME/.kube 
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

9. Deploy the pod network to the cluster.

A pod network allows communication between different nodes in the cluster. For example, Use the flannel virtual network. Use the command line below

$ sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Verify working and communicating

# kubectl get all -A

Join the worker node to Cluster.

The syntax:

kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash>

Use kubeadm join command on each worker node to join it to the cluster.

$ sudo kubeadm join 192.168.56.11:6443 --token 8ke6fa.3c5ll272057418qj \
        --discovery-token-ca-cert-hash \
sha256:4e69979a597f673781606eb7ab6bed5ccb741f46756b17f196b9cd76d3b5105

Waiting minutes, You can check the status of the nodes. Switch to the Master node and run the command line as below:

kubectl get nodes

Conclusion

You have successfully installed Kubernetes on Ubuntu. I hope this guide proves to be helpful for you in navigating the installation process. Thank you for choosing to read the DevopsRoles page! For more detailed instructions on how to install Kubernetes on Ubuntu, please refer to our comprehensive guide on installing Kubernetes on Ubuntu.

Docker deploy Joomla

Introduction

Docker has become an essential tool in the DevOps world, simplifying the deployment and management of applications. Using Docker to deploy Joomla – one of the most popular Content Management Systems (CMS) – offers significant advantages. In this article, we will guide you through each step to Docker deploy Joomla, helping you leverage the full potential of Docker for your Joomla project.

Requirements

  • Have installed Docker on your system.
  • The host OS is Ubuntu Server.

To deploy Joomla using Docker, you’ll need to follow these steps:

Docker Joomla

Create a new Docker joomla network

docker network create joomla-network

Check Joomla network is created.

Next, pull Joomla and MySQL images as command below:

docker pull mysql:5.7
docker pull joomla

Create the MySQL volume

docker volume create mysql-data

Deploy the database

docker run -d --name joomladb  -v mysql-data:/var/lib/mysql --network joomla-network -e "MYSQL_ROOT_PASSWORD=PWORD_MYSQL" -e MYSQL_USER=joomla -e "MYSQL_PASSWORD=PWORD_MYSQL" -e "MYSQL_DATABASE=joomla" mysql:5.7

Where PWORD_MYSQL is a unique/strong password

How to deploy Joomla

create a volume to hold the Joomla data as command below:

docker volume create joomla-data
docker run -d --name joomla -p 80:80 -v joomla-data:/var/www/html --network joomla-network -e JOOMLA_DB_HOST=joomladb -e JOOMLA_DB_USER=joomla -e JOOMLA_DB_PASSWORD=PWORD_MYSQL joomla

Access the web-based installer

Open the web browser to http://SERVER:PORT, where SERVER is either the IP address or domain of the hosting server, and PORT is the external port.

Follow the Joomla setup wizard to configure your Joomla instance.

Via Youtube

Conclusion

Deploying Joomla with Docker not only simplifies the installation and configuration process but also enhances the management and scalability of your application. With the detailed steps provided in this guide, you can confidently deploy and manage Joomla on the Docker platform. Using Docker saves time and improves the performance and reliability of your system. Start today to experience the benefits Docker brings to your Joomla project. I hope will this your helpful. Thank you for reading the DevopsRoles page!

Setup Kubernetes Cluster with K3s

Introduction

In this tutorial, How to setup Kubernetes Cluster with K3s. It is a lightweight Kubernetes distribution developed by Rancher. K3s consume fewer resources than traditional distributions. It’s easy to set up and manage Kubernetes Cluster.

To set up a Kubernetes cluster using K3s, you can follow these steps:

Setup Kubernetes Cluster with K3s

First, You need to get a Linux machine.

Start by provisioning the servers that will be part of your Kubernetes cluster.

You can use virtual machines or bare-metal servers. Ensure that the servers have a compatible operating system (such as Ubuntu, CentOS, or RHEL).

Download the Rancher binary

Link download here. or you use the wget command or curl command to get download it.

wget https://github.com/k3s-io/k3s/releases/download/v1.23.5%2Bk3s1/k3s

make the binary executable.

chmod +x k3s

The output terminal is as below:

vagrant@controller:~$ wget https://github.com/k3s-io/k3s/releases/download/v1.23.5%2Bk3s1/k3s
--2022-06-05 08:49:28--  https://github.com/k3s-io/k3s/releases/download/v1.23.5%2Bk3s1/k3s
Resolving github.com (github.com)... 20.205.243.166
Connecting to github.com (github.com)|20.205.243.166|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/135516270/88b18d50-2447-4216-b672-fdf17488cb41?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20220605%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20220605T084929Z&X-Amz-Expires=300&X-Amz-Signature=54b2aa58e831f8f8d179189c940eb5c38b4df7d4e3e33c18c9376b446f029742&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=135516270&response-content-disposition=attachment%3B%20filename%3Dk3s&response-content-type=application%2Foctet-stream [following]
--2022-06-05 08:49:28--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/135516270/88b18d50-2447-4216-b672-fdf17488cb41?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20220605%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20220605T084929Z&X-Amz-Expires=300&X-Amz-Signature=54b2aa58e831f8f8d179189c940eb5c38b4df7d4e3e33c18c9376b446f029742&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=135516270&response-content-disposition=attachment%3B%20filename%3Dk3s&response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 62468096 (60M) [application/octet-stream]
Saving to: ‘k3s’

k3s                                100%[==============================================================>]  59.57M  4.95MB/s    in 24s

2022-06-05 08:49:53 (2.46 MB/s) - ‘k3s’ saved [62468096/62468096]

vagrant@controller:~$ ls -l
total 61004
-rw-rw-r-- 1 vagrant vagrant 62468096 Mar 31 01:05 k3s
vagrant@controller:~$ chmod +x k3s

Start the K3s Server.

sudo ./k3s server

Check your Kubernetes cluster

sudo ./k3s kubectl get nodes

The output terminal is as below:

How to manage your cluster

You can run kubectl commands through the k3s binary. K3s provides a built-in kubectl utility.

For example, To drain the node you created.

sudo ./k3s kubectl drain your-hostname

Or use kubectl cordon a node with the command below:

sudo ./k3s kubectl cordon your-hostname

Add nodes to a K3s cluster

We created a cluster with just one node with the step above. If you want add 1 node to your cluster.

On Master:

first, you determine the node token value of your server. get the token value with the command below:

sudo cat /var/lib/rancher/k3s/server/node-token

For example, the Token values the output as below:

K10c94d11d4970c4ac58973c98ee32c9c1c4cb4fc30d81adfaf3ddf405ba1c48b49::server:7b1dcfc180415f105af019717027e77c

On Worker

Install k3s agent

export K3S_NODE_NAME=node1
export K3S_URL="https://192.168.56.11:6443"
export K3S_TOKEN=K10c94d11d4970c4ac58973c98ee32c9c1c4cb4fc30d81adfaf3ddf405ba1c48b49::server:7b1dcfc180415f105af019717027e77c
curl -sfL https://get.k3s.io | sh -s -

Then, the Additional node run command below:

sudo k3s agent --server https://myserver:6443 --token K3S_TOKEN

Repeat this process to add as many nodes as you want to your cluster.

The result, of the Master

Conclusion

You have setup Kubernetes cluster using K3s. You can now use kubectl it to deploy and manage your applications on the cluster.

Further, you can do with k8s k3s such as customize networking or logging, change the container runtime, and set up certificates. I hope will this your helpful. Thank you for reading the DevopsRoles page!

Devops Tutorial

Exit mobile version