tag:blogger.com,1999:blog-21501093852616981702024-03-01T13:39:42.530+08:00linuxwaveLinux is for everybody. Lets enjoy it.Unknownnoreply@blogger.comBlogger403125tag:blogger.com,1999:blog-2150109385261698170.post-59345857220755947152023-11-20T08:30:00.045+08:002024-01-02T10:27:17.879+08:00Install clustercontrol v2 on ubuntu 22.04 using podman<div>Clustercontrol is a database cluster management system, developed by severalnines.com, that ease up the work of database cluster deployment and management, using a nice web interface. Please follow below steps to install clustercontrol v2 using podman.</div><div><br /></div>First, install podman<div><blockquote><span style="color: red;">$ sudo apt update && sudo apt install podman -y</span></blockquote></div><div><br /></div><div>Configure podman registries. Add below lines into the end of /etc/containers/registries.conf</div><div><div><span style="color: #38761d;"></span></div><blockquote><div><span style="color: #38761d;">[registries.search]</span></div><div><span style="color: #38761d;">registries = ['docker.io']</span></div></blockquote><div><span style="color: #38761d;"></span></div></div><div><br /></div><div>Pull the latest clustercontrol image</div><div><blockquote><span style="color: red;">$ podman pull severalnines/clustercontrol</span></blockquote></div><div><br /></div><div>Create necessary directories</div><div><blockquote><span style="color: red;">$ mkdir -p clustercontrol/{backups,cmon.d,cmonlib,datadir,prom-conf,prom-data,sshkey}</span></blockquote></div><div><br /></div><div>Create ssh key, and save them into clustercontrol/sshkey</div><div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ ssh-keygen -t ed25519</span></div><div><div><span style="color: #b45f06;">Generating public/private ed25519 key pair.</span></div><div><span style="color: #b45f06;">Enter file in which to save the key (/home/myuser/.ssh/id_ed25519): /home/myuser/clustercontrol/sshkey/id_ed25519<span> </span></span></div><div><span style="color: #b45f06;">Enter passphrase (empty for no passphrase): </span></div><div><span style="color: #b45f06;">Enter same passphrase again: </span></div></div><div><span style="color: #b45f06;">...</span></div></blockquote><div><span style="color: #b45f06;"></span></div><div><br /></div><div>Start clustercontrol</div><div><div><span style="color: red;"></span></div></div><blockquote><div><div><span style="color: red;">$ podman run -d --name clustercontrol \</span></div><div><span style="color: red;">-h clustercontrol \</span></div><div><span style="color: red;">-p 5000:80 \</span></div><div><span style="color: red;">-p 5001:443 \</span></div><div><span style="color: red;">-p 9443:9443 \</span></div><div><span style="color: red;">-p 19501:19501 \</span></div><div><span style="color: red;">-e DOCKER_HOST_ADDRESS=192.168.10.10 \</span></div><div><span style="color: red;">-v $PWD/clustercontrol/cmon.d:/etc/cmon.d \</span></div><div><span style="color: red;">-v $PWD/clustercontrol/datadir:/var/lib/mysql \</span></div><div><span style="color: red;">-v $PWD/clustercontrol/sshkey:/root/.ssh \</span></div><div><span style="color: red;">-v $PWD/clustercontrol/cmonlib:/var/lib/cmon \</span></div><div><span style="color: red;">-v $PWD/clustercontrol/backups:/root/backups \</span></div><div><span style="color: red;">-v $PWD/clustercontrol/prom-data:/var/lib/prometheus \</span></div><div><span style="color: red;">-v $PWD/clustercontrol/prom-conf:/etc/prometheus \</span></div><div><span style="color: red;">severalnines/clustercontrol</span></div></div><div></div></blockquote><div><br /></div><div>Create username, and set password for the user</div><div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ podman exec -it clustercontrol bash</span></div><div><span style="color: red;"># s9s user --create --generate-key --controller="https://localhost:9501" --group=admins myuser</span></div><div><span style="color: red;"># s9s user --change-password --new-password=anypassword myuser</span></div></blockquote><div><span style="color: red;"></span></div><div><br /></div><div>Open a web browser, and browse to the ip address of the server with port 5001 for https</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhNfXcAlRgfg0MrwLk7Gmhkpt8lrf49Hk02sHEifFQoQ082uLuKqh50w9AdT_yXq5k7raDC9it0tn1Y0ieUCNNi8AEpp9lPNXTChW4pm4BzdnxxLDli49DqlG5ot8p53ow_8LmmbmtlWiZ4kebNR1847jKd_N7xg4gNSWUHaRIvEnXZOmeBZy0IL2eXyrI" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="630" data-original-width="1240" height="326" src="https://blogger.googleusercontent.com/img/a/AVvXsEhNfXcAlRgfg0MrwLk7Gmhkpt8lrf49Hk02sHEifFQoQ082uLuKqh50w9AdT_yXq5k7raDC9it0tn1Y0ieUCNNi8AEpp9lPNXTChW4pm4BzdnxxLDli49DqlG5ot8p53ow_8LmmbmtlWiZ4kebNR1847jKd_N7xg4gNSWUHaRIvEnXZOmeBZy0IL2eXyrI=w640-h326" width="640" /></a></div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>Login using the user and password created above</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjkNUQ7EgWuWswkS4wCztiAGNmL4BQ0XQe2d2JfsKJllShw-z2wNPpcpdcxikIqoVrwm9RxgiQ4p9Y75BNv0d0lYQ294HKw51HKvL6a3Q7UP4ZQWy3D1l4mbk1rWeQ-FeK9ebmw3AOFV1hocPwrxvlUQFmm9ma1F61fYO4j5n6XFEj2-FECcXAPJFgUcY0" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="573" data-original-width="1206" height="304" src="https://blogger.googleusercontent.com/img/a/AVvXsEjkNUQ7EgWuWswkS4wCztiAGNmL4BQ0XQe2d2JfsKJllShw-z2wNPpcpdcxikIqoVrwm9RxgiQ4p9Y75BNv0d0lYQ294HKw51HKvL6a3Q7UP4ZQWy3D1l4mbk1rWeQ-FeK9ebmw3AOFV1hocPwrxvlUQFmm9ma1F61fYO4j5n6XFEj2-FECcXAPJFgUcY0=w640-h304" width="640" /></a></div><br /><br /></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-3169464326314447292023-11-10T08:11:00.054+08:002023-12-31T08:25:18.334+08:00Using psql without entering password<p>Sometimes, we need to run psql command without entering the password, even though the account is protected with password. The usual situations are, when we are running the psql command in a script, or we have to constantly monitor the output of psql commands using watch. Here is the method on how to achieve that.</p><p>Create a .pgpass file inside the user's home directory who's going to access psql without password</p><p></p><blockquote><span style="color: red;">$ touch ~/.pgpass</span></blockquote><p></p><p>Follow below format to add the user's details into pgpass</p><p>hostname:port:database:username:password</p><p></p><blockquote><span style="color: red;">$ echo "10.10.10.10:5432:mydatabase:myuser:mysuperlongpassword" > ~/.pgpass</span></blockquote><p></p><p>We can also use wildcard, such as *. If you password contains ":" or "\", use "\" to escape them</p><p></p><blockquote><span style="color: red;">$ echo "*:*:mydatabase:myuser:mysuperlongpassword" > ~/.pgpass</span></blockquote><p></p><div>Give a proper permission to the file, nobody accept the owner of the home directory is allowed to use the file</div><div><blockquote><span style="color: red;">$ chmod 0600 ~/.pgpass</span></blockquote></div><div>Now we should be able to use psql to mydatabase as myuser, without entering any password</div><div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ psql -h localhost -U myuser mydatabase</span></div><div><span style="color: #b45f06;">postgres=# </span></div></blockquote><div><span style="color: #b45f06;"></span></div><div><br /></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-65548645619190952702023-11-04T07:18:00.191+08:002023-12-31T08:10:40.609+08:00Postgresql 16 streaming replication on ubuntu 22.04<div>Streaming Replication is a feature in PostgreSQL that allows continuous shipping and application of WAL XLOG records to standby servers to keep them current.</div><div><br /></div><div>Below is the steps to configure streaming replication using postgresql 16 on ubuntu 22.04, with one master and one slave.</div><div><br /></div><div>First, install postgresql in all nodes by referring <a href="https://www.linuxwave.info/2023/11/postgresql-16-installation-on-ubuntu.html" target="_blank">here</a>.</div><div><br /></div><div><br /></div><div>In master node, do below steps:</div><div><br /></div><div>- add this configuration (uncomment wherever necessary) in /etc/postgresql/16/main/postgresql.conf. For one slave node, set max_wal_senders to 3, and add 2 for every additional slave nodes, according to <a href="https://www.percona.com/blog/setting-up-streaming-replication-postgresql/" target="_blank">percona</a>.</div><div><div></div><blockquote><div><span style="color: #38761d;">listen_addresses = '*'</span></div><div><span style="color: #38761d;">wal_level = replica</span></div><div><span style="color: #38761d;">max_wal_senders = 3</span></div></blockquote></div><div> - create a user for replication</div><div></div><blockquote><div><span style="color: red;">$ sudo su - postgres</span></div><div><span style="color: red;">postgres@master:~$ createuser --replication -P replicauser </span></div></blockquote><div>- allow replication from slave's ip address. Add below line in /etc/postgresql/16/main/pg_hba.conf, assuming our slave node's ip address is 172.17.0.4</div><div></div><blockquote><div><span style="color: #38761d;">host replication replicauser 172.17.0.4/32 scram-sha-256</span></div></blockquote><div>- Restart postgres</div><div><blockquote><span style="color: red;">$ sudo systemctl restart postgresql</span></blockquote><p><br /></p><p>In slave node, do below steps:</p><p>- remove postgresql data directory which is /etc/postgresql/16/main (we can also rename it to save as a backup)</p><blockquote><p><span style="color: red;">$ sudo su - postgres</span></p></blockquote><blockquote><p><span style="color: red;">postgres@slave:~$ rm -rf /etc/postgresql/16/main</span></p></blockquote><p>- set a proper permission to the data directory</p><p></p><blockquote><span style="color: red;">postgres@slave:~$ chmod 700 /etc/postgresql/16/main</span></blockquote><p></p><p>- copy data from master (assuming master's ip address is 172.17.0.3)</p><blockquote><p><span style="color: red;">postgres@slave:~$ pg_basebackup -h 172.17.0.3 -U replicauser -D /var/lib/postgresql/16/main/</span></p></blockquote><p>- add standby.signal file inside postgresql data directory, to tell postgresql that this is a standby node</p><blockquote><p><span style="color: red;">postgres@slave:~$ touch /var/lib/postgresql/16/main/standby.signal</span></p></blockquote><p>- add below configuration (uncomment wherever necessary) /etc/postgresql/16/main/postgresql.conf</p><blockquote><p><span style="color: red;">listen_addresses = '*'</span></p></blockquote><blockquote><p><span style="color: red;">hot_standby = on</span></p></blockquote><blockquote><p><span style="color: red;">primary_conninfo = 'host=172.17.0.3 port=5432 user=replicauser password=1' </span></p></blockquote><p>- restart postgresql</p><blockquote><p><span style="color: red;">$ sudo systemctl restart postgresql</span></p></blockquote><p><br /></p><p>Verify the replication is working </p><p>- in master, check pg_stat_replication table</p><p></p><blockquote><p><span style="color: red;">$ sudo su - postgres</span></p><p><span style="color: red;">postgres=# select client_addr, state from pg_stat_replication where usename like 'replicauser';</span></p></blockquote><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjfbwtTGbW1LsKXCRNF7NUQbQQ3smvGZ21Ses1POETKeeFMbCDeaiCBTOcdkPZR8ehG1JbDLmPggoz1mDfgRAzQlCKl4yPB_q0-otfMUpOitVAwdHJO3PPMELtNzFbsZ0lFrHkZ0Mgfn6aKxErUdoBde7oz5h4VhXZxRqfiU1xzhNqSoGe-lnc8YW-K9jE" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="89" data-original-width="677" height="84" src="https://blogger.googleusercontent.com/img/a/AVvXsEjfbwtTGbW1LsKXCRNF7NUQbQQ3smvGZ21Ses1POETKeeFMbCDeaiCBTOcdkPZR8ehG1JbDLmPggoz1mDfgRAzQlCKl4yPB_q0-otfMUpOitVAwdHJO3PPMELtNzFbsZ0lFrHkZ0Mgfn6aKxErUdoBde7oz5h4VhXZxRqfiU1xzhNqSoGe-lnc8YW-K9jE=w640-h84" width="640" /></a></div><br /><br /><p></p><p><br /></p><p><br /></p><p><br /></p><p>- Check if walsender process is running in master</p><p></p><blockquote><p><span style="color: red;">$ ps -ef | grep wal</span></p></blockquote><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEitak0Aemg_M8OBwMWIpBNdPJBj2kr6aS3W39Xd-ky-HAttnK-vJzn2PMWlSZHgHJi-lBaLGZ9FLBJeQC3q_ss4LYe_SkRk0T8kXF4gYKK3G6n1S5Fp2Xp1qgyZLU8pakLbath9p9tA3jWcGD_jtryj7ycAP6kLTHatN68CFcQboo_xQyVBnOdwrM3QSeQ" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="89" data-original-width="675" height="84" src="https://blogger.googleusercontent.com/img/a/AVvXsEitak0Aemg_M8OBwMWIpBNdPJBj2kr6aS3W39Xd-ky-HAttnK-vJzn2PMWlSZHgHJi-lBaLGZ9FLBJeQC3q_ss4LYe_SkRk0T8kXF4gYKK3G6n1S5Fp2Xp1qgyZLU8pakLbath9p9tA3jWcGD_jtryj7ycAP6kLTHatN68CFcQboo_xQyVBnOdwrM3QSeQ=w640-h84" width="640" /></a></div><br /> <p></p><p><br /></p><p><br /></p><p><br /></p><p>- Check if walreceiver is running in slave</p><blockquote><p><span style="color: red;">$ ps -ef | grep wal</span></p></blockquote><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjZGGONEwxXQ7wdueU8rw8qXYURVobFcZTQPB4vrBPiTv3cBWX4UNZ9PUzuZJAepJS_7QpZhnfUEevs9GWxar763YUw58HL72207fT0PhYlKvtB4UUQT_6JHMwEhA2fQrGGhkNMvwLHcxlj995vIVCUc_o76DW-jnGcli9OEBr_K6MjA3zNB9frNQCNzW8" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="54" data-original-width="673" height="52" src="https://blogger.googleusercontent.com/img/a/AVvXsEjZGGONEwxXQ7wdueU8rw8qXYURVobFcZTQPB4vrBPiTv3cBWX4UNZ9PUzuZJAepJS_7QpZhnfUEevs9GWxar763YUw58HL72207fT0PhYlKvtB4UUQT_6JHMwEhA2fQrGGhkNMvwLHcxlj995vIVCUc_o76DW-jnGcli9OEBr_K6MjA3zNB9frNQCNzW8=w640-h52" width="640" /></a></div><br /><br /><p></p><p>- </p><p><br /></p><p>We can also create a database in master, and verify that the same database appear in slave almost instantly .</p></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-17793863749095019582023-11-01T07:30:00.006+08:002023-12-23T12:51:29.194+08:00Postgresql 16 installation on ubuntu 22.04Postgresql 16 is the latest postgresql version, released on Sept 2023. To install postgresql 16 on ubuntu 22.04, just follow below steps<div><br /></div><div>First, create a postgresql repository file</div><div></div><blockquote><div><span style="color: red;">$ sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'</span></div><div></div></blockquote><div><br /></div><div>Then, import repository signing key</div><div></div><blockquote><div><span style="color: red;">$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -</span></div><div></div></blockquote><div><br /></div><div>Update the package list</div><div></div><blockquote><div><span style="color: red;">$ sudo apt update</span></div><div></div></blockquote><div><br /></div><div>Install postgresql</div><div></div><blockquote><div><span style="color: red;">$ sudo apt install postgresql-16 -y</span></div><div></div></blockquote><div><br /></div><div><div>Configure postgresql to listen on all interfaces rather than just localhost</div><div>- Edit /etc/postgresql/16/main/postgresql.conf</div><blockquote><div><span style="color: red;">$ sudo vi /etc/postgresql/16/main/postgresql.conf</span></div></blockquote><div>- Add below configuration</div><blockquote><div><span style="color: #38761d;">listen_addresses = '*'</span></div></blockquote></div><div>- Save and exit</div><div><br /></div><div>Start postgresql</div><blockquote><div><span style="color: red;">$ sudo systemctl start postgresql</span></div></blockquote><div><br /></div><div>Enable postgresql on boot</div><blockquote><div><span style="color: red;">$ sudo systemctl enable postgresql</span></div></blockquote><div><br /></div><div>Allow postgresql port (5432) on ufw</div><blockquote><div><span style="color: red;">$ sudo ufw allow 5432/tcp</span></div></blockquote><div><br /></div><div>Access to postgresql database and check version</div><div></div><blockquote><div><span style="color: red;">$ sudo su - postgres</span></div><div><span style="color: red;">postgres@host:~$ psql</span></div><div><span style="color: red;">postgres=# select version();</span></div></blockquote><div><span style="color: red;"></span></div><div><br /></div><div>The output should look like below</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi141ER9rASaunbPe5Np85bvFjBM7Dx1Xje_ZUO2kFhldqf_caARqiSYzhPQ93Pql03FHFhawPztgI7Cdrq9yNWjFlAadY0Z_pJumteIxCdzIfa4mOM-4IsC_OMqot3puSd1nlmgFaV0KgCrySDh4p_g5R4pWMYnzrcv_Eh_ZaJedr6jtCEa7m05v01gkY" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="145" data-original-width="933" height="101" src="https://blogger.googleusercontent.com/img/a/AVvXsEi141ER9rASaunbPe5Np85bvFjBM7Dx1Xje_ZUO2kFhldqf_caARqiSYzhPQ93Pql03FHFhawPztgI7Cdrq9yNWjFlAadY0Z_pJumteIxCdzIfa4mOM-4IsC_OMqot3puSd1nlmgFaV0KgCrySDh4p_g5R4pWMYnzrcv_Eh_ZaJedr6jtCEa7m05v01gkY=w640-h101" width="640" /></a></div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>Type \q to exit psql</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhYS2We_B6taxLbuC8T-qtsGWVv_K6NctZJyDyEw6BMIG7nAfERXmBfdFaUd93E5Kt8EvVaVo3kzopboNvr1v93UUiZNyKOlNOkYwAmvOXRN0ExgRUymYnEEehim-YrILikC0pCpv4dDof3B4J_zm-nSVezvkBSS6JkZdYWeuAB4voth89MLVbxI2RarAY" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="105" data-original-width="338" height="99" src="https://blogger.googleusercontent.com/img/a/AVvXsEhYS2We_B6taxLbuC8T-qtsGWVv_K6NctZJyDyEw6BMIG7nAfERXmBfdFaUd93E5Kt8EvVaVo3kzopboNvr1v93UUiZNyKOlNOkYwAmvOXRN0ExgRUymYnEEehim-YrILikC0pCpv4dDof3B4J_zm-nSVezvkBSS6JkZdYWeuAB4voth89MLVbxI2RarAY" width="320" /></a></div><br /><br /></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-17236486885756980072023-09-29T21:33:00.020+08:002024-01-17T21:42:19.471+08:00View information about audio or video files in command lineOne of the command to accomplish this, is called mediainfo. It is not installed by default, so we have to install it first.<div><br /></div><div>To install mediainfo in ubuntu, simply run</div><div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ sudo apt update && sudo apt install mediainfo -y</span></div><div></div></blockquote><div><br /></div><div>Once installed, we can check the information of any audio / video file using the command</div><div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ mediainfo myfile.mp4</span></div><div></div></blockquote><div><br /></div><div>Some of the information that we can get from a video file</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg8QZ18jGqDCOX_rFFqixn4yLmlOF67vbVwAcPRBbOATTiyKMRf9aafWVRVsYCDG7FGOa65DOm6DrtvLqJZQ60mnfYibhZn3VegdyoJHhAygbCC6yWGjJMtNLpIFbavGjZjILYBWZ1QBv-YyH0H5RtUNdiULbb8tMJY8zLIAOcr5pa5qDOjHhZZToLoRyk" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="372" data-original-width="538" height="276" src="https://blogger.googleusercontent.com/img/a/AVvXsEg8QZ18jGqDCOX_rFFqixn4yLmlOF67vbVwAcPRBbOATTiyKMRf9aafWVRVsYCDG7FGOa65DOm6DrtvLqJZQ60mnfYibhZn3VegdyoJHhAygbCC6yWGjJMtNLpIFbavGjZjILYBWZ1QBv-YyH0H5RtUNdiULbb8tMJY8zLIAOcr5pa5qDOjHhZZToLoRyk=w400-h276" width="400" /></a></div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>Some of the information that we can get from an audio file</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjTFQe5y1zoMcWhDTuJVriv5OHXBeJkMMecHBoVOAS09_zIiBd86GYdTE62lzY5crB5v49qrf7xJakVYCzq1iOrzA85tYy_8nitVr04lcC04lUdSOIBjAiU6v1mHOwZ1CZoLP51IgIK5K4ETkORDZIE-CNTIOVtVeIzbbCOd1SyCj2nGbxJd13zXebIv98" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="456" data-original-width="547" height="333" src="https://blogger.googleusercontent.com/img/a/AVvXsEjTFQe5y1zoMcWhDTuJVriv5OHXBeJkMMecHBoVOAS09_zIiBd86GYdTE62lzY5crB5v49qrf7xJakVYCzq1iOrzA85tYy_8nitVr04lcC04lUdSOIBjAiU6v1mHOwZ1CZoLP51IgIK5K4ETkORDZIE-CNTIOVtVeIzbbCOd1SyCj2nGbxJd13zXebIv98=w400-h333" width="400" /></a></div><br /><br /></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-1174401508826896812023-09-21T08:25:00.034+08:002024-01-15T08:32:23.303+08:00Extracting audio from video using ffmpegTo extract audio from a video, here is the command<div><div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ ffmpeg -i video.mp4 -q:a 0 -map a audio.mp4</span></div><div></div></blockquote><div><br /></div><div>whereby we supply the name of our video to using -i and put the name of the audio file at the end of the command.</div></div><div><br /></div><div>If we want to extract only some part of the audio from the video, we can use below command</div><div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ ffmpeg -i video.mp4 -ss 00:03:00 -t 00:00:45.0 -q:a 0 -map a audio.mp4</span></div><div><div></div></div></blockquote><div><div><br /></div></div><div>where -ss is the start time of the video, that we want to extract, and -t is the duration of how much time we want to extract from the -ss time. In the above example, the output will be an audio extract from a video called video.mp4, starting from the third minute, until 45 seconds after the third minute. </div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-91979140331727575742023-09-18T11:25:00.052+08:002024-01-11T11:42:54.335+08:00Converting rpm into deb, tgz and vice versa using alien<div>To convert rpm to deb, or vice versa, we can use a tool called alien. To install alien in an ubuntu machine:</div><div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ sudo apt install alien -y</span></div><div></div></blockquote><div><br /></div><div>To install alien in redhat based distro:<br /></div><blockquote><div><span style="color: red;">$ sudo dnf install alien -y</span></div><div></div></blockquote><div><br /></div><div>Once installed, we can easily convert any rpm into deb:</div><div></div><blockquote><div><span style="color: red;">$ sudo alien --to-deb myapp.rpm</span></div><div></div></blockquote><div><br /></div><div>A file called myapp.deb will be created once alien finished doing its magic.</div><div><br /></div><div>We can also use alien to convert deb to rpm:</div><div></div><blockquote><div><span style="color: red;">$ sudo alien --to-rpm myapp.deb</span></div><div></div></blockquote><div><br /></div><div>A file called myapp.rpm will be created.</div><div><br /></div><div>We can also convert to tgz package:</div><div></div><blockquote><div><span style="color: red;">$ sudo alien --to-tgz myapp.deb</span></div><div></div></blockquote><div><br /></div><div>To generate multiple packages format:</div><div></div><blockquote><div><span style="color: red;">$ sudo alien --to-rpm --to-deb myapp.tgz</span></div><div></div></blockquote><div><br /></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-75702975691345917512023-09-10T07:50:00.044+08:002024-01-08T08:02:11.260+08:00Determine if your system is using systemdSystemd is a suite of basic building blocks for a Linux system that provides a system and service manager that runs as PID 1 and starts the rest of the system. It works as a replacement for sysvinit.<div>Almost all popular distros are using systemd, but if you need to use old version of the popular distros, or simply some non popular distros, here is how you can determine whether the linux your are having is using systemd, or not.</div><div><br /></div><div>First, check which process is running PID 1.</div><div></div><blockquote><div><span style="color: red;">$ ps 1</span></div><div></div></blockquote><div><br /></div><div>The output, most of the time will be /sbin/init. </div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjffvn5q4Ovi5OAK-dB7e6VvqLdNFz6WsaX2eJnEKpLb5--KR75KqzUIrnPRppLgQQsupKX52z_Ee9vAYnQzhXWY-rRq1PPXGwRLqH5zGrD99TYS5Y7bGaYBzH6FEnK0fx6ZbZdha7ZVNPrPCvIuoJNzw9ygTa1SjXNsNWUms5OIWMVEGqzFZPblY8hcS0" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="50" data-original-width="319" height="50" src="https://blogger.googleusercontent.com/img/a/AVvXsEjffvn5q4Ovi5OAK-dB7e6VvqLdNFz6WsaX2eJnEKpLb5--KR75KqzUIrnPRppLgQQsupKX52z_Ee9vAYnQzhXWY-rRq1PPXGwRLqH5zGrD99TYS5Y7bGaYBzH6FEnK0fx6ZbZdha7ZVNPrPCvIuoJNzw9ygTa1SjXNsNWUms5OIWMVEGqzFZPblY8hcS0" width="320" /></a></div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>Now we need to determine if /sbin/init is a symlink to something else. There are 2 commands we can use to achieve that:</div><div>1. use stat</div><div></div><blockquote><div><span style="color: red;">$ stat /sbin/init</span></div></blockquote><div>2. use readlink</div><div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ readlink /sbin/init</span></div><div></div></blockquote><div><br /></div><div>In a systemd based system, you will be getting output showing that /sbin/init is actually a symlink to /lib/systemd/systemd, where as in other system, you will not get that output.</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgr0LAkziazfzAZfg7vSMLW5CGLTQqd_cDDd_9q5wAsUtJk5SJKCRaaUcdvnuy00N7AO49USF5Nnj_kc-1LZj1FEJAvHOHfoPqLHq8k5TvM4iWEgZc1t0ZBSywqMpqCvO2JBVaOGjmJihrdPbBbRUetKjhsl8dogzX-JvpXPZxVLgOs_d5h7ZR7OqvCqHM" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="224" data-original-width="594" height="151" src="https://blogger.googleusercontent.com/img/a/AVvXsEgr0LAkziazfzAZfg7vSMLW5CGLTQqd_cDDd_9q5wAsUtJk5SJKCRaaUcdvnuy00N7AO49USF5Nnj_kc-1LZj1FEJAvHOHfoPqLHq8k5TvM4iWEgZc1t0ZBSywqMpqCvO2JBVaOGjmJihrdPbBbRUetKjhsl8dogzX-JvpXPZxVLgOs_d5h7ZR7OqvCqHM=w400-h151" width="400" /></a></div><br /><br /></div><div><br /><br /></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-34087685924116172162023-09-04T11:45:00.002+08:002024-01-03T13:15:33.696+08:00Remove background from picture using command lineRemoving a picture's background is sometimes a necessity, especially if you need the picture to integrate into other document or other picture. Here I will show how we can achieve that in linux using a python application called rembg.<div><br /></div><div>First, make sure we have python installed. Most linux will have it installed by default, but just check to make sure</div><div><blockquote><span style="color: red;">$ python -V</span></blockquote></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEitkrVBu9Vd3mD1Jzb5MrvbsPc6yq4vankpokz8l6YncpWrqMQE7MjrjVk8XWD7hgwJ0d9n1BbGwUGKTZ646Nps-vz3VGkyt4_HRcpTwjCF0vuJ86UzhBMypG-VGVjLv9ZtsMrxohyLVZIcH8lZO9DFiopaGkMh3509sOBG4pNb7eyoY-M_NN71hzfkBTQ" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="59" data-original-width="134" height="52" src="https://blogger.googleusercontent.com/img/a/AVvXsEitkrVBu9Vd3mD1Jzb5MrvbsPc6yq4vankpokz8l6YncpWrqMQE7MjrjVk8XWD7hgwJ0d9n1BbGwUGKTZ646Nps-vz3VGkyt4_HRcpTwjCF0vuJ86UzhBMypG-VGVjLv9ZtsMrxohyLVZIcH8lZO9DFiopaGkMh3509sOBG4pNb7eyoY-M_NN71hzfkBTQ=w119-h52" width="119" /></a></div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>In order avoid installing python libraries globally, we will create a virtual environment to keep the rembg application files. You can read more about virtual environment, by clicking <a href="https://www.linuxwave.info/2023/08/installing-pythons-virtual-environment.html" target="_blank">here</a>. So we will create a virtual environment called rembg</div><div><blockquote><span style="color: red;">$ python3 -m venv rembg</span></blockquote></div><div><br /></div><div>Activate the virtual environment</div><div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ cd rembg</span></div><div><span style="color: red;">$ source bin/activate</span></div><div></div></blockquote><div><br /></div><div>Update pip</div><div><blockquote><span style="color: red;">(rembg) $ pip install --upgrade pip</span></blockquote></div><div><br /></div><div>Install rembg[cli] package</div><div><blockquote><span style="color: red;">(rembg) $ pip install rembg[cli]</span></blockquote></div><div><br /></div><div>Once installed, we can use "--help" to see what are the options available for rembg</div><div><blockquote><span style="color: red;">$ rembg --help</span></blockquote></div><div><br /></div><div>Now we can use rembg to remove background. Let's say we have a picture called mypicture.jpg, and we want to remove its background, and save the new picture as mypicture-nobg.jpg:</div><div><blockquote><span style="color: red;">(rembg) $ rembg i mypicture.jpg mypicture-nobg.jpg</span></blockquote></div><div><br /></div><div>Verify that the background has been removed in the new picture.</div><div><br /></div><div>rembg also comes with http-server, for those who wanted a web interface to remove background from picture. Just run rembg with "s" flag to launch the rembg http server</div><div><blockquote><span style="color: red;">$ rembg s</span></blockquote></div><div><br /></div><div>A web app will be launched on http://localhost:5000, where you can upload the file to be background removed, and click submit to get the output.</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi584V1WwG9b2dIZPdBFj43o-FXw7Sij-gpFa2kvMZVQY0txEQSZtXBzer-3Kg32ogxY_WhbGer99QUEreFx5MYKUzRoTWIy0-Fs14TzoUndKW3aFK-Tql1XE33iudm5g5xD4zC1HEjeY39A78540NrdT2WsVBOK3yxAAFWi2tOnQjFdamYUCqO6Y74HYk" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="692" data-original-width="1222" height="362" src="https://blogger.googleusercontent.com/img/a/AVvXsEi584V1WwG9b2dIZPdBFj43o-FXw7Sij-gpFa2kvMZVQY0txEQSZtXBzer-3Kg32ogxY_WhbGer99QUEreFx5MYKUzRoTWIy0-Fs14TzoUndKW3aFK-Tql1XE33iudm5g5xD4zC1HEjeY39A78540NrdT2WsVBOK3yxAAFWi2tOnQjFdamYUCqO6Y74HYk=w640-h362" width="640" /></a></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div>Simply press "ctrl + c" to cancel rembg's http server, when you are done.<br /><br /></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-10783260079881414192023-08-31T10:52:00.057+08:002024-01-03T11:42:42.323+08:00Installing python's virtual environment in ubuntu linuxPython's virtual environment, is a way that developer can use to separate python's packages for different projects, in a single machine. The packages installed in this lightweight virtual environment, would be available in other virtual environment, thus removing the possibility of packages, org packages' version clashing inside a single machine.<div><br /></div><div>First, we need to determine which python version is currently installed in our machine</div><div><blockquote><span style="color: red;">$ python -V</span></blockquote></div><div><span style="color: red;"></span><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiWDY0A8Zk_-X1g48Ietm_YO0zRhgWjPJSOQJsll6207_2A7JfqN0vDMMJGVQmG_EbCiOiavptZ97e0albophB7oxfVvPjpukHrcRzgYKBySXPvrF0S1wTv6iII7z3JSD60hMizsBPVzyzC85Ysdsa33s8bBPx8pRZmOJVRnf3am0BmyNkfL6PDfAHkbG8" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="57" data-original-width="125" height="51" src="https://blogger.googleusercontent.com/img/a/AVvXsEiWDY0A8Zk_-X1g48Ietm_YO0zRhgWjPJSOQJsll6207_2A7JfqN0vDMMJGVQmG_EbCiOiavptZ97e0albophB7oxfVvPjpukHrcRzgYKBySXPvrF0S1wTv6iII7z3JSD60hMizsBPVzyzC85Ysdsa33s8bBPx8pRZmOJVRnf3am0BmyNkfL6PDfAHkbG8=w114-h51" width="114" /></a></div><br /> </div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>Then, we need to install python-venv</div><div><blockquote><span style="color: red;">$ sudo apt update && sudo apt install python3.10-venv -y</span></blockquote></div><div><br /></div><div>Once we have venv, we can start creating virtual environment. Let's say we wanted to have a virtual environment for a project called myproject, run this command</div><div><blockquote><span style="color: red;">$ python3 -m venv myproject</span></blockquote></div><div><br /></div><div>The above command will create a directory called myproject, with necessary files in it. To activate the virtual environment, and start using it, we can run below commands</div><div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ cd myproject</span></div><div><span style="color: red;">$ source bin/activate</span></div></blockquote><div><span style="color: red;"></span></div><div><br /></div><div>How do we know that we are already inside the virtual environment? We will see the name of the virtual environment at our bash prompt, like below</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiSOVurnY1tDJIdJhm2T1s8-POW7CoxlwVhil7p7OMOoCxUppggNsYN39VOvxxYlQMxViDcJQdLK1hbE2jYIxMxILNSpyCAeDp8Lm44d_aRkPYElFW0UcO3e3jDe2hxREpO3o8eCLHwBPAnf4j9uKa9HiMqLsWEZZF2nYb_IlhmxczoNVKxmvoMj7U52W8" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="60" data-original-width="211" height="57" src="https://blogger.googleusercontent.com/img/a/AVvXsEiSOVurnY1tDJIdJhm2T1s8-POW7CoxlwVhil7p7OMOoCxUppggNsYN39VOvxxYlQMxViDcJQdLK1hbE2jYIxMxILNSpyCAeDp8Lm44d_aRkPYElFW0UcO3e3jDe2hxREpO3o8eCLHwBPAnf4j9uKa9HiMqLsWEZZF2nYb_IlhmxczoNVKxmvoMj7U52W8=w200-h57" width="200" /></a></div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>We can now install any package that we need inside the virtual environment using pip, and that packages can only be used if we activate "myproject" virtual environment</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhpBxh9oFIJwogt4TH0ddFbA3Mj8cNbWY0fKCmAfIIStTvGB3Pyx8zuhPKuMywsk0ztRf0aIhCCOM2ItoYdJD0BJDTiOANoHLs5ZKxpFAoH6fc4vEXJ2QlwMP204Z4lsR53GqQ8EtyPcqXdR2Gq7QVgGx9nnE6D8_5ct03o6wFlowvkw-a-RQXgUiHYf0Q" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="107" data-original-width="196" height="109" src="https://blogger.googleusercontent.com/img/a/AVvXsEhpBxh9oFIJwogt4TH0ddFbA3Mj8cNbWY0fKCmAfIIStTvGB3Pyx8zuhPKuMywsk0ztRf0aIhCCOM2ItoYdJD0BJDTiOANoHLs5ZKxpFAoH6fc4vEXJ2QlwMP204Z4lsR53GqQ8EtyPcqXdR2Gq7QVgGx9nnE6D8_5ct03o6wFlowvkw-a-RQXgUiHYf0Q=w200-h109" width="200" /></a></div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>To exit from the virtualenvironment, simply run deactivate command, and we will get back our standard bash prompt</div><div><blockquote><span style="color: red;">$ deactivate</span></blockquote></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjSN10dB5WacL_uqElWiQlLzz_QHFD-7xDO7-UwqaaaFCKvYPVRaGCmA7pF0zf625Ddxko7l62flpe1U5fezhXDHYJ7qdHWmLTu_1j5s5yIwmsclNmJiARyCTbpdsiBlpt0WNhv0T18ZnlgAUD4SNsGVgv-zrO2EP9gFJQmay81QpGOmTX8Sa4R_TX0vPs" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="37" data-original-width="212" height="35" src="https://blogger.googleusercontent.com/img/a/AVvXsEjSN10dB5WacL_uqElWiQlLzz_QHFD-7xDO7-UwqaaaFCKvYPVRaGCmA7pF0zf625Ddxko7l62flpe1U5fezhXDHYJ7qdHWmLTu_1j5s5yIwmsclNmJiARyCTbpdsiBlpt0WNhv0T18ZnlgAUD4SNsGVgv-zrO2EP9gFJQmay81QpGOmTX8Sa4R_TX0vPs=w200-h35" width="200" /></a></div><br /><br /></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-62614770046590771012023-08-23T08:31:00.060+08:002023-12-27T08:57:22.977+08:00Reducing disk usage by journalctl logsSystemd is using journalctl as the log keeper for its services. The log location is at /var/log/journal.<div><br /></div><div>To check the disk usage of journalctl log</div><div><span style="color: red;"></span><blockquote><span style="color: red;">$ sudo journalctl --disk-usage</span></blockquote></div><div><br /></div><div>To check the logs date, just run </div><blockquote><div><span style="color: red;">$ sudo journalctl </span></div></blockquote><div><br /></div><div><div>To flush active logs to file, so it can be cleared (vacuum)</div><blockquote><div><span style="color: red;">$ sudo journalctl --flush</span></div></blockquote></div><div><br /></div><div>To clear the log, we can use "journalctl --vacuum-size". This below command will reduce the total size used by journalctl log to 1G. This command however, will only work on archived logs, and not active logs.</div><blockquote><div><span style="color: red;">$ sudo journalctl --vacuum-size=1G</span></div></blockquote><div><br /></div><div>We can also vacuum by date, this command will remove data older than a month. Same with vacuum-size, this will work only to the archived logs.</div><blockquote><div><span style="color: red;">$ sudo journalctl --vacuum-time=1month </span></div></blockquote><div><br /></div><div>We can also ask journalctl to rotate its log files, using --rotate. The rotation criteria can be set in /etc/systemd/journald.conf, by editing MaxFileSec and MaxRetentionSec configuration.</div><blockquote><div><span style="color: red;">$ sudo journalctl --rotate</span></div></blockquote>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-64599154950557570702023-08-15T11:26:00.057+08:002023-12-26T11:43:43.869+08:00Enable server time sync in ubuntu with chronyChrony is an implementation of the Network Time Protocol (NTP). It is an alternative to ntpd, a reference implementation of NTP. It runs on Unix-like operating systems (including Linux and macOS) and is released under the GNU GPL v2. It is the default NTP client and server in Red Hat Enterprise Linux 8 and SUSE Linux Enterprise Server 15, and available in many Linux distributions.<div><br /></div><div>To enable chrony in ubuntu, we can install it first</div><div></div><blockquote><div><span style="color: red;">$ sudo apt update && sudo apt install chrony -y</span></div></blockquote><div>Start chrony once it is installed</div><div></div><blockquote><div><span style="color: red;">$ sudo systemctl start chrony</span></div></blockquote><div>Enable chrony on boot</div><div></div><blockquote><div><span style="color: red;">$ sudo systemctl enable chrony</span></div></blockquote><div>We can change the server that chrony sync from, by editing /etc/chrony/chrony.conf. By default, chrony in ubuntu will use ntp.ubuntu.com</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEinet_cRUFYGWJO-XN778R-SCoRuLSnLqAO51v1Yi4EH7iIUBjtvkN2qXbVkBEBqSsgRD0sQ2xtqm2qWxlHwkdBfc3lyk7wOD8U5isadiMDQ6IK9dZ9Hm7QImb5nWxaLjX6AeaU5SykLlSrohPLOUmdbgABx19kSBL1kOsdgtWi3dua7_xpaAWH1Kl_5eI" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="70" data-original-width="393" height="71" src="https://blogger.googleusercontent.com/img/a/AVvXsEinet_cRUFYGWJO-XN778R-SCoRuLSnLqAO51v1Yi4EH7iIUBjtvkN2qXbVkBEBqSsgRD0sQ2xtqm2qWxlHwkdBfc3lyk7wOD8U5isadiMDQ6IK9dZ9Hm7QImb5nWxaLjX6AeaU5SykLlSrohPLOUmdbgABx19kSBL1kOsdgtWi3dua7_xpaAWH1Kl_5eI=w400-h71" width="400" /></a></div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>To check the status of time sync</div><blockquote><div><span style="color: red;">$ sudo chronyc sources -v</span></div></blockquote><div><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjJWrJnbdWM5_qyTmvHFbmmGICAYic6Wc5NDOKXEGefjTRELPAF_YH-Kcl49ax_VdUS_u8ooWFh1ZF8LozbYOw5V_i18cb41Gr-yskcvUVjWDnwGxF_D5qSCI4Z5EIvvK3vTpgu2D1u4sk6c9XHBgDZkmSsm1d18Gwb0AQCr601GkiOAaPKecDWMyNmrnw" style="clear: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img alt="" data-original-height="344" data-original-width="656" height="336" src="https://blogger.googleusercontent.com/img/a/AVvXsEjJWrJnbdWM5_qyTmvHFbmmGICAYic6Wc5NDOKXEGefjTRELPAF_YH-Kcl49ax_VdUS_u8ooWFh1ZF8LozbYOw5V_i18cb41Gr-yskcvUVjWDnwGxF_D5qSCI4Z5EIvvK3vTpgu2D1u4sk6c9XHBgDZkmSsm1d18Gwb0AQCr601GkiOAaPKecDWMyNmrnw=w640-h336" width="640" /></a></div><div><br /></div><div>We can see that from the above example, the current best source of time is 144.126.242.176.</div><div><br /></div><div>Make sure there is at least one server with ^* status.</div><div><br /></div><div>If the time is skewed, we can force resync using below command </div><blockquote><div><span style="color: red;">$ sudo chronyc makestep</span></div></blockquote><div>To install and configure chrony in redhat based linux, please refer to <a href="https://www.linuxwave.info/2019/05/update-time-and-date-using-chrony.html" target="_blank">this article</a></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-1668836455775760792023-08-08T11:11:00.122+08:002023-12-25T14:43:46.035+08:00Tuning kernel parameters in linuxFor most people, the kernel provided with our favorite linux distro is good enough for daily use. But for some other people, they need more performance out of their linux machine, so they need to tune some kernel parameters, to suit whatever need they have in their hands.<div><br /></div><div><div>We can add the parameter to the kernel runtime (would not survive reboot) by using sysctl command</div><blockquote><span style="color: red;">$ sudo sysctl <tunable class>.<tunable></span></blockquote></div><div>To make the change permanent, we can add the kernel parameter to /etc/sysctl.conf or /etc/sysctl.d/filename.conf (best practice) by using any text editor</div><div><br /></div><div>We can also add the parameter by using </div><blockquote><div><span style="color: red;">$ sudo sysctl -w <tunable class>.<tunable> >> /etc/sysctl.conf</span></div></blockquote><blockquote><span style="color: red;">$ sudo sysctl -w <tunable class>.<tunable> >> /etc/sysctl.d/filename.conf</span></blockquote><div>Load kernel parameters from /etc/sysctl.conf or /etc/sysctl.d/filename.conf </div><blockquote><div><span style="color: red;">$ sudo sysctl -p </span></div></blockquote><blockquote><div><span style="color: red;">$ sudo sysctl -p /etc/sysctl.d/filename.conf</span></div></blockquote><div>We can also load from all system configuration files. System configuration files are /etc/sysctl.d/*.conf, /run/sysctl.d/*.conf, /usr/local/lib/sysctl.d/*.conf, /usr/lib/sysctl.d/*.conf, /lib/sysctl.d/*.conf and /etc/sysctl.conf</div><blockquote><div><span style="color: red;">$ sudo sysctl --system</span></div></blockquote><div>View all the kernel parameters currently available by using</div><blockquote><div><span style="color: red;">$ sudo sysctl -a</span></div></blockquote><div>We can also set pattern for the displayed results. For example, </div><blockquote><div><span style="color: red;">$ sudo sysctl -a --pattern 'kernel'</span></div></blockquote><p><br /></p><p>What are the available tunable classes? According to Red Hat, these are the ones available in RHEL.</p><p>- abi: execution domain and personalities </p><p>- crypto: cryptographic interfaces</p><p>- debug: kernel debugging interfaces</p><p>- dev: device specific information</p><p>- fs: global and specific filesystem tunables</p><p>- kernel: global kernel tunables</p><p>- net: network tunables</p><p>- sunrpc: sun remote procedure calls (NFS)</p><p>- user: user namespace limits</p><p>- vm: tuning and management of memory, buffer and cache</p><p><br /></p><p>How to get information about the tunables and its usage? Refer to <a href="https://www.kernel.org/doc/Documentation/">https://www.kernel.org/doc/Documentation/</a></p>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-67429655722887097572023-08-01T07:50:00.026+08:002023-12-19T08:53:55.341+08:00Lenovo Thinkpad X260 touchpad scrolling not smooth in Linux Mint 21.2I just installed Linux Mint 21.2 onto a Lenovo Thinkpad X260. Everything is good, except that the scrolling using the touchpad is not smooth. After reading around, some people suggested to change the drive to synaptics, instead of the default libinput. Here is how to achieve that:<div><br /></div><div>Get the id of the touchpad</div><div></div><blockquote><div><span style="color: red;">$ xinput list | grep -i touchpad</span></div><div></div></blockquote><div><img alt="" src="data:image/png;base64,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" /></div><div><br /></div><div> </div><div>Check properties of the touchpad, my id for the touchpad is 11, the id might differ. You should be seeing a lot of libinput inside the output (refer picture), to show that the touchpad is using libinput driver</div><div></div><blockquote><div><span style="color: red;">$ xinput list-props 11</span></div><div></div></blockquote><div><img alt="" src="data:image/png;base64,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" /></div><div><br /></div><div>We can also determine which driver is being used, by using below command</div><blockquote><div><span style="color: red;">$ grep -i "using input" /var/log/Xorg.0.log </span><br /></div></blockquote><div><img alt="" src="data:image/png;base64,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" /> <br /></div><div> </div><div>Install synaptics driver</div><div></div><blockquote><div><span style="color: red;">$ sudo apt update && sudo apt install xserver-xorg-input-synaptics -y</span></div><div></div></blockquote><div><br /></div><div>Logout and log in to switch the driver from libinput to synaptics <br /></div><div><div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhubtf0QVu-WI-g_lylb3Q1KIEwvqangnCZWQAW7Lhv2udf3MGnlSbI3F3x7IpD1yzXkyeCAYf9i_o_w_GlU1V7Mj1E9HNmXV80HvxDi2LSEaZWcd3XMEw4jIo49gxMLYX8YkHt4gTSunn_WI4Vymc5O5lco_HsgceDyh8-uCCQ2cBxfIAbhXLScNVbKAA" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="576" data-original-width="603" height="306" src="https://blogger.googleusercontent.com/img/a/AVvXsEhubtf0QVu-WI-g_lylb3Q1KIEwvqangnCZWQAW7Lhv2udf3MGnlSbI3F3x7IpD1yzXkyeCAYf9i_o_w_GlU1V7Mj1E9HNmXV80HvxDi2LSEaZWcd3XMEw4jIo49gxMLYX8YkHt4gTSunn_WI4Vymc5O5lco_HsgceDyh8-uCCQ2cBxfIAbhXLScNVbKAA=w320-h306" width="320" /></a></div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>Check the driver again, you should see a lot of synaptics, like below </div><div></div><blockquote><div><span style="color: red;">$ xinput list-props 11</span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgMimX-L7lpy2stLgrQvDTo3IVvSl08BEsewrsArIgw690SkvkO_q-RFaNjCD6VVo9cDNgEOxGTIJGs1qdh8CwV1Nhf-6Y-kDjmjABn7_Zdae9nhGwyYp1mgoTAGNpFC5sRv8zBpUZmEHzFUwwSLku2jMSRgF87COXVIQSBXIspQ2MGpb_6DNPx91DVUOU" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a></div></div></blockquote><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgMimX-L7lpy2stLgrQvDTo3IVvSl08BEsewrsArIgw690SkvkO_q-RFaNjCD6VVo9cDNgEOxGTIJGs1qdh8CwV1Nhf-6Y-kDjmjABn7_Zdae9nhGwyYp1mgoTAGNpFC5sRv8zBpUZmEHzFUwwSLku2jMSRgF87COXVIQSBXIspQ2MGpb_6DNPx91DVUOU" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="259" data-original-width="434" height="239" src="https://blogger.googleusercontent.com/img/a/AVvXsEgMimX-L7lpy2stLgrQvDTo3IVvSl08BEsewrsArIgw690SkvkO_q-RFaNjCD6VVo9cDNgEOxGTIJGs1qdh8CwV1Nhf-6Y-kDjmjABn7_Zdae9nhGwyYp1mgoTAGNpFC5sRv8zBpUZmEHzFUwwSLku2jMSRgF87COXVIQSBXIspQ2MGpb_6DNPx91DVUOU=w400-h239" width="400" /></a></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div>Your scrolling with touchpad will be much better compared to the previous driver. </div><div> </div><div>With both synaptics and libinput installed, synaptics will take priority. </div><div> </div><div>If you want to change back to libinput, simply uninstall synaptics</div><div><span style="color: red;"><blockquote>$ sudo apt remove xserver-xorg-input-synaptics</blockquote></span><br /></div><div></div><div>Then logout and log in again to activate libinput.</div><div><br /></div><div><br /></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-77029071242574411812023-07-27T15:41:00.037+08:002023-12-18T15:55:19.878+08:00Delete iptables rule using line numberTo easiest way to delete iptables rules, is by listing the rule with line number like below<div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ sudo iptables -L OUTPUT --line-number</span></div><div></div></blockquote><div><br /></div><div>In this example, we are listing all the rules inside OUTPUT chain, with line number</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhss9O3U7djaSXC5116OdHPYR8Ue0nEyQByZ2NXN8BVnkG8api7r2OadED4TDiUeaI04qefzklSjQAiXX5HnYp1cbRjKSIiLzcxkEHwfKZv-a_-he8W3FGLTLr0n6s6CGuObd3UUG26sqXaYmj7w4tGAUBIL8YpPI0WkXehvWr3o2KjZMjmcoueyPRqkhg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="77" data-original-width="620" height="50" src="https://blogger.googleusercontent.com/img/a/AVvXsEhss9O3U7djaSXC5116OdHPYR8Ue0nEyQByZ2NXN8BVnkG8api7r2OadED4TDiUeaI04qefzklSjQAiXX5HnYp1cbRjKSIiLzcxkEHwfKZv-a_-he8W3FGLTLr0n6s6CGuObd3UUG26sqXaYmj7w4tGAUBIL8YpPI0WkXehvWr3o2KjZMjmcoueyPRqkhg=w400-h50" width="400" /></a></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div>To delete that rule, use this command</div><div></div><blockquote><div><span style="color: red;">$ sudo iptables -D OUTPUT 1</span></div><div></div></blockquote><div><br /></div><div>like below</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjnP-AwJNweJbPmzuGFcra-46NbIChuIsq86lMtoJyHOwBWwbH8hdzZlx9AMbSdakFawRq5r1qK2uT-xTLINHRYho9z3Lwl2Yhj3AUb6I0YT_eZkt-pvaYvEqkX3xWGORPYeNOj0sERfQ3BSOQJ4u6e_4cyJzyJ1EXiSbxXfP2sH_LRmvHzIPH1h3tO3m4" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="42" data-original-width="286" height="29" src="https://blogger.googleusercontent.com/img/a/AVvXsEjnP-AwJNweJbPmzuGFcra-46NbIChuIsq86lMtoJyHOwBWwbH8hdzZlx9AMbSdakFawRq5r1qK2uT-xTLINHRYho9z3Lwl2Yhj3AUb6I0YT_eZkt-pvaYvEqkX3xWGORPYeNOj0sERfQ3BSOQJ4u6e_4cyJzyJ1EXiSbxXfP2sH_LRmvHzIPH1h3tO3m4=w200-h29" width="200" /></a></div><br /><br /><br /></div><div><br /></div><div>We can run the first command to verify that the rule has been deleted</div><div></div><blockquote><div><span style="color: red;">$ sudo iptables -L OUTPUT --line-number</span></div><div></div></blockquote><div><br /></div><div>like below</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhQJwq9DFNfe3DZbBRc2gxH_KjpcB-956-ZMMYe8V5CS7G010U56Iczu9TP3oRzlvaJAnMEzK6gb2MCd19Uy7QMujutIBRwCD8jrWxcKb1B76K4jFWQg8zA10l9sF1vNWzmN7sXCqEPk2ycN7alAlc1gjCetdtrHxVIn89wodtVFqdsKavbUAcFIWiyOyE" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="62" data-original-width="575" height="44" src="https://blogger.googleusercontent.com/img/a/AVvXsEhQJwq9DFNfe3DZbBRc2gxH_KjpcB-956-ZMMYe8V5CS7G010U56Iczu9TP3oRzlvaJAnMEzK6gb2MCd19Uy7QMujutIBRwCD8jrWxcKb1B76K4jFWQg8zA10l9sF1vNWzmN7sXCqEPk2ycN7alAlc1gjCetdtrHxVIn89wodtVFqdsKavbUAcFIWiyOyE=w400-h44" width="400" /></a></div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div>To delete multiple rules, just repeat the same steps over and over again.</div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-65114585387674424932023-07-22T08:28:00.002+08:002023-12-17T08:48:14.247+08:00Brave browser failed to load in Linux Mint due to a locked profileThe issue is, whenever we click on the brave browser logo, it will show a loading animation, and it won't start after a few seconds.<div><br /></div><div>To troubleshoot this, I launch brave using terminal by running below command:</div><div></div><blockquote><div><span style="color: red;">$ brave-browser</span></div><div></div></blockquote><div><br /></div><div>And I can see an error, which is<br /></div><blockquote><div><span style="color: #b45f06;">"[3056:3056:1217/082602.062706:ERROR:process_singleton_posix.cc(353)] The profile appears to be in use by another Brave process (2300) on another computer (hisham-workmachine). Brave has locked the profile so that it doesn't get corrupted. If you are sure no other processes are using this profile, you can unlock the profile and relaunch Brave."</span></div><div></div></blockquote><div>I just found out that the error happened when I changed my hostname.</div><div><br /></div><div>To recover brave, we just need to unlock the profile, by removing in ~/.config/BraveSoftware/Brave-Browser/SingletonLock. I usually will just rename it, and not deleting it, just in case.</div><div></div><blockquote><div><span style="color: red;">$ cd ~/.config/BraveSoftware/Brave-Browser/</span></div><div><span style="color: red;">$ mv SingletonLock SingletonLock.0</span></div></blockquote><div></div><div><br /></div><div>We should be able to launch brave now 😁</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhRKon_VrhnKoUgAASsNdGV_yWBNb0OUCjqoIU7wc5nPm9HNZDwoPq47WgGg5s_3Y34w3KKFVIGgS6cBCiOGtnKwyva5KF38xg32UmMaekIFbk2h2_dGlTu-j27TmfTUWaq9a2qJzkBH_65aR2AsqX9E8J7XULEEZ4BQBM9BQPyPQQhRO9o-sNPmopzNvo" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="204" data-original-width="1020" height="128" src="https://blogger.googleusercontent.com/img/a/AVvXsEhRKon_VrhnKoUgAASsNdGV_yWBNb0OUCjqoIU7wc5nPm9HNZDwoPq47WgGg5s_3Y34w3KKFVIGgS6cBCiOGtnKwyva5KF38xg32UmMaekIFbk2h2_dGlTu-j27TmfTUWaq9a2qJzkBH_65aR2AsqX9E8J7XULEEZ4BQBM9BQPyPQQhRO9o-sNPmopzNvo=w640-h128" width="640" /></a></div><br /><br /></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-68904523768487398772023-07-18T07:39:00.003+08:002023-12-17T08:01:58.249+08:00Transferring podman image to another machine via network without registryUnlike docker, podman comes with a useful tool to transfer image over network, without the need of any registry, which is podman image scp. This tool will take advantage of ssh connection between machines to transfer images.<div><br /></div><div>To transfer an image to another machine, just use below command</div><div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ podman image scp imagename:tag user@anothermachine::</span></div><div></div></blockquote><div><br /></div><div>We can also use this command to transfer the image between different users in one machine</div><div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ podman image scp userA@localhost::imagename:tag userB@localhost::</span></div><div></div></blockquote><div><br /></div><div>Or to transfer from root storage to a rootless storage</div><div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ sudo podman image scp root@localhost::imagename:tag nonroot@localhost::</span></div><div></div></blockquote><div><br /></div><div>Or vice versa</div><div></div><blockquote><div><span style="color: red;">$ podman image scp imagename:tag root@localhost::</span></div><div></div></blockquote><div><br /></div><div>If no destination user is specified, podman transfer to the current user</div><div><blockquote><span style="color: red;">$ podman image scp userB@localhost::imagename:tag </span></blockquote></div><div><br /></div><div>We can also run the command from remote machine (machineC), to transfer image from machineA to machineB</div><div><blockquote><span style="color: red;">$ podman image scp user@machineA::imagename:tag user@machineB::</span></blockquote></div><div><br /></div><div>To get more information about this command, use man</div><div><span style="color: red;"></span><blockquote><span style="color: red;">$ man podman-image-scp</span></blockquote></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-84707031811672120202023-07-12T07:27:00.002+08:002023-12-17T08:03:14.040+08:00Transferring docker image to another machine via network without a registry<p>We can use "docker save" and "docker load" commands to achieve this, combined with ssh.</p><p>These are the steps:</p><p>Save your image to a file</p><blockquote><p><span style="color: red;">$ docker save -o filename imagename:tag</span></p></blockquote><p>To get a smaller filesize, we can use xz, bzip2 or gz compression</p><blockquote><p><span style="color: red;">$ docker save imagename:tag | xz > filename.xz</span></p></blockquote><blockquote><p><span style="color: red;">$ docker save imagename:tag | bzip2 > filename.bz2</span></p></blockquote><blockquote><p><span style="color: red;">$ docker save imagename:tag | gzip > filename.gz </span></p></blockquote><p>Then, transfer the file over ssh to another machine</p><blockquote><p><span style="color: red;">$ scp filename.xz user@anothermachine</span></p></blockquote><p>Load back the image in the other machine. "Docker load" will automatically decompress the file if it is compressed with xz, bzip2 or gz.</p><blockquote><p><span style="color: red;">$ docker load -i filename.xz</span></p></blockquote><p>We can also use redirection, instead of the -i option</p><blockquote><p><span style="color: red;">$ docker load < filename.xz</span></p></blockquote><p>All that can also be done in one liner</p><blockquote><p><span style="color: red;">$ docker save imagename:tag | xz | ssh user@anothermachine docker load</span></p></blockquote>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-77351373191675755302023-07-05T22:11:00.002+08:002023-12-16T22:28:03.225+08:00Using wireguard vpn client on ubuntuWireguard is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN.<div><br /></div><div>To use wireguard as a client, first, we need to get the wireguard configuration file from the provider. It will come with .conf naming convention.</div><div><br /></div><div>Once we have that, we need to install wireguard package together with resolvconf</div><div></div><blockquote><div><span style="color: red;">$ sudo apt install wireguard resolvconf -y</span></div><div></div></blockquote><div><br /></div><div>Then, put the wireguard configuration file into /etc/wireguard</div><div></div><blockquote><div><span style="color: red;">$ sudo mv mywireguard.conf /etc/wireguard</span></div><div></div></blockquote><div><br /></div><div>We are now able to use wireguard and connect to the wireguard server. Use below command to setup wireguard interface using the above configuration</div><div></div><blockquote><div><span style="color: red;">$ sudo wg-quick up mywireguard</span></div><div></div></blockquote><div><br /></div><div>An interface will be created with the same name</div><div></div><blockquote><div><span style="color: red;">$ sudo ip link dev show mywireguard</span></div><div><div><span style="color: #b45f06;">8: mywireguard: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000</span></div><div><span style="color: #b45f06;"> link/none</span></div></div><div></div></blockquote><div><br /></div><div>We should now be able to connect to any host inside the wireguard server's network.</div><div><br /></div><div>To turn off wireguard, simply use below command</div><div><blockquote><span style="color: red;">$ sudo wg-quick down mywireguard</span></blockquote></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-48808223085576678202023-07-03T20:16:00.008+08:002023-12-16T21:11:07.454+08:00Install zapzap, a desktop whatsapp client on ubuntu linuxzapzap is a desktop whatsapp client built for linux, and available to be installed via flathub. To install zapzap in ubuntu and its derivatives:<div><br /></div><div>Install flatpak</div><div></div><blockquote><div><span style="color: red;">$ sudo apt update && sudo apt install flatpak -y</span></div><div></div></blockquote><div><br /></div><div>Add flathub repo</div><div></div><blockquote><div><span style="color: red;">$ flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo</span></div><div></div></blockquote><div><br /></div><div>Install zapzap using flatpak</div><div></div><blockquote><div><span style="color: red;">$ sudo flatpak install flathub com.rtosta.zapzap</span></div><div></div></blockquote><div><br /></div><div>Once installed, launch zapzap. You will be presented with something like below</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgUMAyHugOH4bg-0LB6A2sTjOHIqzeJel1AsMcLIf4WfmTsUeKrQ5333XeNlHzSEQPO8bbiW0uyfa5ykhLV1j4OXrvvtvsNVd-qVo4A_SPdQoxXsigcmLX1HrFo1roVkp6wUoO41ieJLbWnSiUbigk0xLwyqfDX4hGpM3X4yJ22NWEN1FDCNZ7Xjy74hUY" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="548" data-original-width="1202" height="183" src="https://blogger.googleusercontent.com/img/a/AVvXsEgUMAyHugOH4bg-0LB6A2sTjOHIqzeJel1AsMcLIf4WfmTsUeKrQ5333XeNlHzSEQPO8bbiW0uyfa5ykhLV1j4OXrvvtvsNVd-qVo4A_SPdQoxXsigcmLX1HrFo1roVkp6wUoO41ieJLbWnSiUbigk0xLwyqfDX4hGpM3X4yJ22NWEN1FDCNZ7Xjy74hUY=w400-h183" width="400" /></a><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgUMAyHugOH4bg-0LB6A2sTjOHIqzeJel1AsMcLIf4WfmTsUeKrQ5333XeNlHzSEQPO8bbiW0uyfa5ykhLV1j4OXrvvtvsNVd-qVo4A_SPdQoxXsigcmLX1HrFo1roVkp6wUoO41ieJLbWnSiUbigk0xLwyqfDX4hGpM3X4yJ22NWEN1FDCNZ7Xjy74hUY" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br /></a></div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>Follow the steps in the above picture, which are</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgbmuWa2-Fqb5WXUZIVVeMl5dHeQoUOfPOIwK6EEmcd9HWUL2x42uC7hlNfwC6twjbhhnOHo3AHtdT9Dt5_iXt-MwjGyrB0EcSjY2434GExIxjfLuCDC_3NOGotVB6q7UPEHchqRm7cMuaR-9n1blMaX59Smet4rDicaWV8dnUptHHVQay0uF0yy3vLw1w" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="194" data-original-width="506" height="154" src="https://blogger.googleusercontent.com/img/a/AVvXsEgbmuWa2-Fqb5WXUZIVVeMl5dHeQoUOfPOIwK6EEmcd9HWUL2x42uC7hlNfwC6twjbhhnOHo3AHtdT9Dt5_iXt-MwjGyrB0EcSjY2434GExIxjfLuCDC_3NOGotVB6q7UPEHchqRm7cMuaR-9n1blMaX59Smet4rDicaWV8dnUptHHVQay0uF0yy3vLw1w=w400-h154" width="400" /></a></div><br /><br /></div><div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>You should now be able to use your whatsapp in zapzap</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgZLegmzbqpTw7m8xBvAOIEbezjaLk2Qhgm8QWv-CYQ5YGiPMKwws9S3rXl145K3mVWVojSKNac0wiOof5coiU5S_B204idBSzjJ_yDOwCiMisBbMMYx-Fwd7I5V5_oi7ClP7dFSsQ6CutHJ8w9dVOtgylYRRL5jPkmKQe-Sm-aBttac1250ys7G2chfwI" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="284" data-original-width="1016" height="111" src="https://blogger.googleusercontent.com/img/a/AVvXsEgZLegmzbqpTw7m8xBvAOIEbezjaLk2Qhgm8QWv-CYQ5YGiPMKwws9S3rXl145K3mVWVojSKNac0wiOof5coiU5S_B204idBSzjJ_yDOwCiMisBbMMYx-Fwd7I5V5_oi7ClP7dFSsQ6CutHJ8w9dVOtgylYRRL5jPkmKQe-Sm-aBttac1250ys7G2chfwI=w400-h111" width="400" /></a></div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-26338087693262708182023-06-20T19:12:00.062+08:002023-12-13T19:29:41.986+08:00Configure sftp serversftp server is an ftp server, but using ssh protocol. To set up one, please follow below steps.<div><br /></div><div>First, create a directory to keep the uploaded data</div><div></div><blockquote><div><span style="color: red;">$ sudo mkdir /data</span></div><div></div></blockquote><div><br /></div><div>Then, create a special group for sftp users</div><div></div><blockquote><div><span style="color: red;">$ sudo groupadd sftp_users</span></div><div></div></blockquote><div><br /></div><div>Next, create a user called newuser that doesn't have regular login privileges, as a member of the newly created group, home directory set to /upload, and shell set to /sbin/nologin.</div><div></div><blockquote><div><span style="color: red;">$ sudo useradd -g sftp_users -d /upload -s /sbin/nologin newuser</span></div><div></div></blockquote><div><br /></div><div>Set a password for the new user</div><div></div><blockquote><div><span style="color: red;">$ sudo passwd newuser</span></div><div></div></blockquote><div><br /></div><div>Create an sftp directory for the new user, and set proper permissions for the directory</div><div></div><blockquote><div><span style="color: red;">$ sudo mkdir -p /data/newuser/upload</span></div><div><span style="color: red;">$ sudo chown -R root:sftp_users /data/newuser</span></div><div><span style="color: red;">$ sudo chown -R newuser:sftp_users /data/newuser/upload</span></div></blockquote><div></div><div><br /></div><div>Add below lines to the end of /etc/ssh/sshd_config. Use any text editor that you are familiar with. Save the file once done.</div><div></div><blockquote><div><span style="color: #38761d;">Match Group sftp_users</span></div><div><span style="color: #38761d;">ChrootDirectory /data/%u</span></div><div><span style="color: #38761d;">ForceCommand internal-sftpd </span></div></blockquote><div></div><div><br /></div><div>Test /etc/ssh/sshd_config for any syntax error</div><div></div><blockquote><div><span style="color: red;">$ sudo sshd -t -f /etc/ssh/sshd_config</span></div><div></div></blockquote><div><br /></div><div>Restart ssh if no error reported from the above command</div><div></div><blockquote><div><span style="color: red;">$ sudo systemctl restart sshd</span></div><div></div></blockquote><div><br /></div><div>Now we can use the user to upload or download data from the server</div><div></div><blockquote><div><span style="color: red;">$ sftp newuser@server.ip.add.ress</span></div><div></div></blockquote><div><br /></div><div>Use "get" command to download, and "put" command to upload file.</div><div><br /></div><div>We can also use applications like winscp and filezilla, to get a user interface.</div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-37918910474196560062023-06-12T18:14:00.014+08:002023-12-13T18:37:25.164+08:00Autostart podman containers on host boot/rebootPodman is an excellent alternative to docker, but it would not survive host reboot since it does not have any daemon running. Is all hope lost? Nope, podman has one trick up its sleeve that can save the day.<div><br /></div><div>Introducing "podman generate" command. This command can generate yaml, json or systemd file for any containers. In this case, we are going to generate a systemd script for our container, to make sure it survives host reboot.</div><div><br /></div><div>How to use this tool? First we need a running container.</div><div><br /></div><div>Once we have a running container, simply run below command to create systemd service file for your container (in this example, mycontainer is the name of the container), and save it to a file called container-mycontainer.service.</div><div></div><blockquote><div><span style="color: red;">$ podman generate systemd --new --name mycontainer -f</span></div><div></div></blockquote><div><br /></div><div>Then, move the conatainer-mycontainer.service file into /etc/systemd/system, for systemd to start recognizing your service (we changed the name to just mycontainer.service, to shorten the name, and make it easier to type). </div><div></div><blockquote><div><span style="color: red;">$ sudo mv container-mycontainer.service /etc/systemd/system/mycontainer.service</span></div><div></div></blockquote><div><br /></div><div>After that, we need to reload the systemd for the root user, to make systemd aware of the new service.</div><div></div><blockquote><div><span style="color: red;">$ sudo systemctl daemon-reload</span></div><div></div></blockquote><div><br /></div><div>Now, start the new service, and enable it on every boot</div><div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ sudo systemctl enable --now mycontainer.service</span></div><div></div></blockquote><div><br /></div><div>Check whether your new service is running</div><div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ sudo systemctl status mycontainer.service</span></div><div></div></blockquote><div><br /></div><div><br /></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-91109744588139965992023-06-05T10:37:00.002+08:002024-01-01T23:31:39.543+08:00How to Install Clustercontrol Using Podman on Ubuntu 22.04Clustercontrol is a database cluster management system, developed by <a href="https://severalnines.com/" target="_blank">severalnines</a>. This tool is really useful if you want to install and manage multiple database clusters from one interface, easily. This tool supports many database types such as mysql, mariadb, postgresql, timescaledb and also redis.<div><br /></div><div>This software can easily be installed using docker, just follow the instructions <a href="https://hub.docker.com/r/severalnines/clustercontrol#run-container" target="_blank">here</a>. For podman users, worry not, below are the detailed instructions on how to do the same using podman. These steps have been tested on ubuntu 22.04, but they should run in any linux that support podman.</div><div><br /></div><div>1. Make sure you have podman installed, please refer <a href="https://www.linuxwave.info/2022/12/how-to-install-podman-on-ubuntu-2204.html" target="_blank">here</a> if you have not install podman</div><div><br /></div><div>2. Create some directories for clustercontrol's data and configuration</div><div></div><blockquote><div><span style="color: red;">$ mkdir -p clustercontrol/{cmon.d,datadir,sshkey,cmonlib,backups,prom-data,prom-conf}</span></div><div></div></blockquote><div><br /></div><div>3. Get the machine's ip address</div><div></div><blockquote><div><span style="color: red;">$ hostname -I</span></div><div></div></blockquote><div><br /></div><div>4. Copy ssh key into sshkey directory</div><div></div><blockquote><div><span style="color: red;">$ cp ~/.ssh/id_rsa ~/clustercontrol/sshkey</span></div><div></div></blockquote><div><br /></div><div>4.1 If you don't have ssh keys yet, please follow <a href="https://www.linuxwave.info/2014/11/how-to-generate-ssh-rsa-keys.html" target="_blank">here</a> to generate a pair</div><div><br /></div><div>5. Run clustercontrol using podman (image 1.9.5-4 is fully working at the time of writing of this article)</div><div><div></div><blockquote><div><span style="color: red;">podman run -d --name clustercontrol \</span></div><div><span style="color: red;">-h clustercontrol \</span></div><div><span style="color: red;">-p 5000:80 \</span></div><div><span style="color: red;">-p 5001:443 \</span></div><div><span style="color: red;">-p 9443:9443 \</span></div><div><span style="color: red;">-p 19501:19501 \</span></div><div><span style="color: red;">-e DOCKER_HOST_ADDRESS=192.168.10.10 \</span></div><div><span style="color: red;">-v $PWD/clustercontrol/cmon.d:/etc/cmon.d \</span></div><div><span style="color: red;">-v $PWD/clustercontrol/datadir:/var/lib/mysql \</span></div><div><span style="color: red;">-v $PWD/clustercontrol/sshkey:/root/.ssh \</span></div><div><span style="color: red;">-v $PWD/clustercontrol/cmonlib:/var/lib/cmon \</span></div><div><span style="color: red;">-v $PWD/clustercontrol/backups:/root/backups \</span></div><div><div><span style="color: red;">-v $PWD/clustercontrol/prom-data:/var/lib/prometheus \</span></div><div><span style="color: red;">-v $PWD/clustercontrol/prom-conf:/etc/prometheus \</span></div></div><div><span style="color: red;">docker.io/severalnines/clustercontrol:1.9.5-4</span></div></blockquote><div></div></div><div><br /></div><div>6. Open a browser, and browse to https://192.168.10.10:5001, and replace the 192.16810.10 to your own ip address that you use in the command above. You should be able to see below page. Register and create user to start using clustercontrol.</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhQt6ipW1o_vFbnrgRqr92nWcU2AkDGObujjJ8iHqiDtsHXMlpQarEmKErqEGN9EnmzcggFyOeQVwan2B2yWE5_ZHutwOfqeJsg4g0nJ6ypaPZDNSevLnY6IJzYdAmr6w2bXxriBaLRHmCYwryFUk1F_jPTNCHGrI6P_Fv6mO0QFuW1PrBWWseJzkII" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="622" data-original-width="565" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEhQt6ipW1o_vFbnrgRqr92nWcU2AkDGObujjJ8iHqiDtsHXMlpQarEmKErqEGN9EnmzcggFyOeQVwan2B2yWE5_ZHutwOfqeJsg4g0nJ6ypaPZDNSevLnY6IJzYdAmr6w2bXxriBaLRHmCYwryFUk1F_jPTNCHGrI6P_Fv6mO0QFuW1PrBWWseJzkII=w581-h640" width="581" /></a></div><br /><br /></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-32004551354447051702023-05-24T10:42:00.013+08:002023-11-29T11:12:49.156+08:00Unable to ssh into docker playground virtual machine (Permission denied (publickey) error)<a href="https://labs.play-with-docker.com/" target="_blank">Docker playground</a> is a very useful place to learn how to use docker. However, the web interface is sometimes can be quite difficult to use, especially if we are trying to copy long commands into the virtual machine. <div><br /></div><div>A good solution to this, is to connect to the virtual machine using ssh. We can copy the link at the ssh column of the virtual machine, and paste it in our terminal. </div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiOcQUwkK7H7j-W9M8nGz5DzFZZIOZupok_iupX7qRez0R_rViFa-V6-q8ZJoG2UBWX6LAVN__AhEkDnc65M_FPF9ZZC5JYn-GOwn74k0yheIW4M65rKY4COfiFOcu-RNRVDs1xCe6aV-TJdIMdxKqqWYXbSNge90GLdpdBH4zseZO6KWM3LI28iEwwxIM" style="clear: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img alt="" data-original-height="514" data-original-width="942" height="350" src="https://blogger.googleusercontent.com/img/a/AVvXsEiOcQUwkK7H7j-W9M8nGz5DzFZZIOZupok_iupX7qRez0R_rViFa-V6-q8ZJoG2UBWX6LAVN__AhEkDnc65M_FPF9ZZC5JYn-GOwn74k0yheIW4M65rKY4COfiFOcu-RNRVDs1xCe6aV-TJdIMdxKqqWYXbSNge90GLdpdBH4zseZO6KWM3LI28iEwwxIM=w640-h350" width="640" /></a></div><div><br /></div><div><br /></div><div><br /></div><div>One of the issue that we encounter when we are trying to ssh into the virtual machine, is we will get permission denied (publickey) error, like below </div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj-5uD0SfT2S_miSzCEUKdjWW7wAiSUmTQQ7EqBYHsDLLKbX-94xQd6bR9E7SOEysWHuSE6ZsvOa8HLuX2X-jD6D9gyEocONjh2v0yC7VnrANpOFmmGZ9UmytcQzO4-fWVITlPamUvFlgFf1Q4LMHhuZripct2pAhknd_s4j16FI8pvvx0NdCpqrgW3u50" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br /><img alt="" data-original-height="66" data-original-width="1001" height="42" src="https://blogger.googleusercontent.com/img/a/AVvXsEj-5uD0SfT2S_miSzCEUKdjWW7wAiSUmTQQ7EqBYHsDLLKbX-94xQd6bR9E7SOEysWHuSE6ZsvOa8HLuX2X-jD6D9gyEocONjh2v0yC7VnrANpOFmmGZ9UmytcQzO4-fWVITlPamUvFlgFf1Q4LMHhuZripct2pAhknd_s4j16FI8pvvx0NdCpqrgW3u50=w640-h42" width="640" /></a></div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>The reason this happened is, the ssh server inside the playground's virtual machine is expecting the client to connect from a machine that owns a ed25519 key. This can be verified by running below command inside the playground's virtual machine</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiNWJXRXUS4Qxy-QyiWO9YcCwtF7ASNdWY7Gnr5NCqYGCIjIQk0hcIFKd9bwB0URLCwpSbCrj1h23dfGzhdsYxgJFO_s8MfVECsZPNyv9bdLYdSfeQRmuxAThKnP6q6JoydByHe8i748uRMVLBj-zg5x6fp_JDxK7YqSOtosrwfFWiw3cs7ioSiGA4yIs8" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="69" data-original-width="913" height="48" src="https://blogger.googleusercontent.com/img/a/AVvXsEiNWJXRXUS4Qxy-QyiWO9YcCwtF7ASNdWY7Gnr5NCqYGCIjIQk0hcIFKd9bwB0URLCwpSbCrj1h23dfGzhdsYxgJFO_s8MfVECsZPNyv9bdLYdSfeQRmuxAThKnP6q6JoydByHe8i748uRMVLBj-zg5x6fp_JDxK7YqSOtosrwfFWiw3cs7ioSiGA4yIs8=w640-h48" width="640" /></a></div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>To encounter that, simply create an ed25519 in our machine, using ssh-keygen</div><div><span style="color: red;"><blockquote>$ ssh-keygen -t ed25519</blockquote></span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj99hnGM9soYE2zQuXcOylgYbw8MTYsrkgtt2tafKuWa19GiP5GjGNizodNKlXiy_BceeWUpEhEz8_-TdAH0PxODmWKPM-RamBQI-UPApCd0BJqluSk5LK1FVGofHs8M1_vD_KXRaXo46tRvbO3ebg-1VItg4-e6FNzJ5RQJ9WF2FBKUVd1RrBRw9aBdy8" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="401" data-original-width="712" height="360" src="https://blogger.googleusercontent.com/img/a/AVvXsEj99hnGM9soYE2zQuXcOylgYbw8MTYsrkgtt2tafKuWa19GiP5GjGNizodNKlXiy_BceeWUpEhEz8_-TdAH0PxODmWKPM-RamBQI-UPApCd0BJqluSk5LK1FVGofHs8M1_vD_KXRaXo46tRvbO3ebg-1VItg4-e6FNzJ5RQJ9WF2FBKUVd1RrBRw9aBdy8=w640-h360" width="640" /></a></div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>We should be able to ssh into the playground's virtual machine now</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjfFG2-FbBGuCxKzgJeHXL5A2S_QQj777A22MidhDNwNNW5eb_kRw9nsegM0Wcn_SensvvOKevhEZDXVzsyvbed8y0o6waRVBr9W1zYu7JVZbp4OpB66o_CvsRpxwdKlZcBkLFK5UrInVemyIJm78o_9tTHffKjdlCRrdQyVgkFrljGTjWYbUEJ7g1QryA" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="232" data-original-width="935" height="158" src="https://blogger.googleusercontent.com/img/a/AVvXsEjfFG2-FbBGuCxKzgJeHXL5A2S_QQj777A22MidhDNwNNW5eb_kRw9nsegM0Wcn_SensvvOKevhEZDXVzsyvbed8y0o6waRVBr9W1zYu7JVZbp4OpB66o_CvsRpxwdKlZcBkLFK5UrInVemyIJm78o_9tTHffKjdlCRrdQyVgkFrljGTjWYbUEJ7g1QryA=w640-h158" width="640" /></a></div><br /><br /></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0tag:blogger.com,1999:blog-2150109385261698170.post-6702062833455551142023-05-16T20:59:00.059+08:002023-11-20T21:36:59.588+08:00Hide Apache Httpd Version in HTTP HeaderHiding software version in any deployment is a basic security practice that we can use to lower the risk of the deployment being breached. In this post, we will see how we can hide the apache httpd version from the http header, and from server generated pages.<div><br /></div><div>To check our header, just use curl. Let's say we have an apache httpd server running on localhost</div><div></div><blockquote><div><span style="color: red;">$ curl --header http://localhost</span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg3sEk0-9ClpFj528rHmDaXB4XJQFD8_1RFqA6UhwSg92ETPQm_ENRMLc0ZGfPkmmYg1l4olFVz8-xqyjWzV4TP000R7i6t-ABh6e0GP7N-hRvFdZ-HwcJpw9w3xlaOSx_kAcNUsoh9VkCoArWuLGwlJvW3emCmh6LvIgpFlrnRUvhLYvR-P-f4OLWZGU0" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a></div></div></blockquote><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg3sEk0-9ClpFj528rHmDaXB4XJQFD8_1RFqA6UhwSg92ETPQm_ENRMLc0ZGfPkmmYg1l4olFVz8-xqyjWzV4TP000R7i6t-ABh6e0GP7N-hRvFdZ-HwcJpw9w3xlaOSx_kAcNUsoh9VkCoArWuLGwlJvW3emCmh6LvIgpFlrnRUvhLYvR-P-f4OLWZGU0" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="160" data-original-width="363" height="141" src="https://blogger.googleusercontent.com/img/a/AVvXsEg3sEk0-9ClpFj528rHmDaXB4XJQFD8_1RFqA6UhwSg92ETPQm_ENRMLc0ZGfPkmmYg1l4olFVz8-xqyjWzV4TP000R7i6t-ABh6e0GP7N-hRvFdZ-HwcJpw9w3xlaOSx_kAcNUsoh9VkCoArWuLGwlJvW3emCmh6LvIgpFlrnRUvhLYvR-P-f4OLWZGU0" width="320" /></a></div><br /><br /></div><div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>The version will also showing in the server generated page, like when we tried to access non existent page</div><div></div><blockquote><div><span style="color: red;">$ curl --header http://localhost/error</span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg5eOKiy2AT6_MMnai8hy6WZmYPqpiMYCP4eqbo90TIUMVfR1Um77LzgjwY2Rtcgt-AgZOku6Y5TiwTKFWl7cLys2nqPfr0kKICiu0VSxYpypJh0Z_9o8hNZ2n2Jl6YtFYHj30dF3-i7G6FyDELk54AAnqrRZfPcYCaqefpUHLTx4641rz6iGdM9DbFEMQ" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a></div></div></blockquote><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg5eOKiy2AT6_MMnai8hy6WZmYPqpiMYCP4eqbo90TIUMVfR1Um77LzgjwY2Rtcgt-AgZOku6Y5TiwTKFWl7cLys2nqPfr0kKICiu0VSxYpypJh0Z_9o8hNZ2n2Jl6YtFYHj30dF3-i7G6FyDELk54AAnqrRZfPcYCaqefpUHLTx4641rz6iGdM9DbFEMQ" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="89" data-original-width="356" height="80" src="https://blogger.googleusercontent.com/img/a/AVvXsEg5eOKiy2AT6_MMnai8hy6WZmYPqpiMYCP4eqbo90TIUMVfR1Um77LzgjwY2Rtcgt-AgZOku6Y5TiwTKFWl7cLys2nqPfr0kKICiu0VSxYpypJh0Z_9o8hNZ2n2Jl6YtFYHj30dF3-i7G6FyDELk54AAnqrRZfPcYCaqefpUHLTx4641rz6iGdM9DbFEMQ" width="320" /></a></div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>To hide the version number, we can just add below line into httpd.conf. I usually will put it at the bottom of the configuration file. The location of the httpd.conf will varies depending on how you install httpd. The usual location is at /etc/httpd/conf/httpd.conf:</div><div><span style="color: #38761d;"></span></div><blockquote><div><span style="color: #38761d;">ServerToken Prod</span></div><div><span style="color: #38761d;">ServerSignature Off</span></div></blockquote><div><span style="color: #38761d;"></span></div><div><br /></div><div>"ServerToken Prod" will hide apache httpd version from http header, while "ServerSignature Off" will hide the version from server generated pages.</div><div><br /></div><div>Example is like below</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgL9ccFlLLZ9YPduE8XC1DoT1hzZb0CP05_rh0AEzvdciYwu9x6PanEZDoMzuZyjyJMCZoddOAkG93DjlczVmHDXEEpSbjwzgLrEBqpr_8WWcIPQnZABwGYf4jiBUtOfC27eb6eE9HCxIw2K7pITswF3SLF1jrdhje6n3vTO73TOXpf94A-liXpYfMND38" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="156" data-original-width="483" height="129" src="https://blogger.googleusercontent.com/img/a/AVvXsEgL9ccFlLLZ9YPduE8XC1DoT1hzZb0CP05_rh0AEzvdciYwu9x6PanEZDoMzuZyjyJMCZoddOAkG93DjlczVmHDXEEpSbjwzgLrEBqpr_8WWcIPQnZABwGYf4jiBUtOfC27eb6eE9HCxIw2K7pITswF3SLF1jrdhje6n3vTO73TOXpf94A-liXpYfMND38=w400-h129" width="400" /></a></div><br /><br /></div><div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>To make sure that our change is syntax error free, test with "apachectl -t"</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgXrcBCef6IlIHhU6bTetONuIOpa8ijK7oqnTtdg6bKBMYtACA-UX-crL7WQytgXKwBoBfdYx7iXRp_1vCvCb6WxoCKEv03jhnLyiKNIVQrtRxL01epypFCkWDWCDc7zmCM2ouOjOwIPffyT2oqxyinPTO_8_1nL8T_m-sl_0Asn08y5I_cbckbThLU78k" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="68" data-original-width="163" height="83" src="https://blogger.googleusercontent.com/img/a/AVvXsEgXrcBCef6IlIHhU6bTetONuIOpa8ijK7oqnTtdg6bKBMYtACA-UX-crL7WQytgXKwBoBfdYx7iXRp_1vCvCb6WxoCKEv03jhnLyiKNIVQrtRxL01epypFCkWDWCDc7zmCM2ouOjOwIPffyT2oqxyinPTO_8_1nL8T_m-sl_0Asn08y5I_cbckbThLU78k=w200-h83" width="200" /></a></div><br /><br /></div><div><br /><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>Once we are satisfied, restart apache httpd</div><div></div><blockquote><div><span style="color: red;"># systemctl restart httpd</span></div><div></div></blockquote><div><br /></div><div>Then, we test it back using curl, and we do not see the version anymore</div><div><span style="color: red;"></span></div><blockquote><div><span style="color: red;">$ curl --head http://localhost</span></div><div><span style="color: red;">$ curl --head http://localhost/error</span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEie7S2jP1-hnFPrvU4LOi-fDviQiDN0IcJgemttLztTbM9B2MqPwdOEjcuhWSv8cp-goZRUYiqBGvyHM-tdjvLj6Q2QA4JvMIVC2iRsq1JL8bcOkvwd_xwzFmdLO5yMkUeQ15Yf10aM-p7dMR58tcoH9wJiUC7pqG29gsdhpe24YjdvJm0vtzvoflnvALY" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a></div></div></blockquote><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEie7S2jP1-hnFPrvU4LOi-fDviQiDN0IcJgemttLztTbM9B2MqPwdOEjcuhWSv8cp-goZRUYiqBGvyHM-tdjvLj6Q2QA4JvMIVC2iRsq1JL8bcOkvwd_xwzFmdLO5yMkUeQ15Yf10aM-p7dMR58tcoH9wJiUC7pqG29gsdhpe24YjdvJm0vtzvoflnvALY" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="267" data-original-width="411" height="208" src="https://blogger.googleusercontent.com/img/a/AVvXsEie7S2jP1-hnFPrvU4LOi-fDviQiDN0IcJgemttLztTbM9B2MqPwdOEjcuhWSv8cp-goZRUYiqBGvyHM-tdjvLj6Q2QA4JvMIVC2iRsq1JL8bcOkvwd_xwzFmdLO5yMkUeQ15Yf10aM-p7dMR58tcoH9wJiUC7pqG29gsdhpe24YjdvJm0vtzvoflnvALY" width="320" /></a></div><br /><br /></div>Hishamhttp://www.blogger.com/profile/02134722812269928737noreply@blogger.com0