Quick HOWTO: Run Loop in GitHub Actions

In GitHub Action workflows, there is no direct way to repeat the same job or step using variables. We have to use the "matrix" to achieve this.

Example:


my_loop_job:
name: loop job
runs-on: my-github-runners
strategy:
matrix:
my_variable: [ "var1", "var2", "var3" ]
        
steps:
- name: test loop
run: |
          echo "running the steps for $my_variable"
sh myscript.sh $



When using strategy matrix, it will create parallel jobs using the variables passed.  Maximum jobs matrix can create is 256 Jobs.


Quick HOWTO: Reset Jenkins Admin Password

To reset the jenkins admin password, You can simply disable the security in the config.xml file.

1. If your jenkins is running on the Linux OS, edit the below file.

vi /var/lib/jenkins/config.xml file.

2. Search for the word <useSecurity>true</useSecurity>
and change the word true to false

3. Restart the Jenkins server.
service jenkins restart

4. Now go to the Jenkins portal again and Jenkins will not ask any credentials this time. You navigate to "Manage Jenkins" to set the administrator password again.

5. Enable the security again by changing settings to <useSecurity>true</useSecurity> and restart the Jenkins again.

Note: 

If your jenkins is running on Windows OS, config.xml file located in C:\Program Files (x86)\Jenkis\ folder.


Quick HOWTO: dracut fails in Linux

Issue:  dracut fails when you trying to create initramfs image file.

[root@linux_server1 boot]# dracut -f /boot/initramfs-2.6.39-400.298.2.el6uek.x86_64.img 2.6.39-400.298.2
E: Failed to install /etc/system-fips

[root@linux_server1 boot]# ls -l /boot/initramfs-2.6.39-400.298.2.el6uek.x86_64.img

ls: cannot access /boot/initramfs-2.6.39-400.298.2.el6uek.x86_64.img: No such file or directory

Fix / Solution: Touch /etc/system-fips and try again.

[root@linux_server1 boot]# touch /etc/system-fips
[root@linux_server1 boot]# dracut -f /boot/initramfs-2.6.39-400.298.2.el6uek.x86_64.img 2.6.39-400.298.2.el6uek.x86_64
[root@linux_server1 boot]# ls -l /boot/initramfs-2.6.39-400.298.2.el6uek.x86_64.img
-rw------- 1 root root 31035863 May 21 03:06 /boot/initramfs-2.6.39-400.298.2.el6uek.x86_64.img 

Hope this helps..!

Quick HOWTO: Run SSH sessions in Parallel


 You often used "for loop" in shell script to gather an information from large number of your Linux / Unix infrastructure servers. However if your server count is more, it may take lot of time to finish the task. Do you think it will be good if the ssh sessions to remote servers run in parallel? Since the modern day servers having multi-core CPU's we can utilize the real parallel and multi processing of them. 

xargs is your friend here to accomplish your this.

Here is the example to run the SSH sessions in parallel:

xrags -a -n1 -P50 -I{} sh -c "ssh -q {} 'df -Ph /var' "


In this example,

-a --  Takes the input from the file instead of STDIN

-P -- number to processes to execute in parallel. In our example we are starting 50 processes in parallel.

-I -- Used to specify a name to the variable passing to the command we are executing. In our example, we have used {}. For example, You can specify like -I"server" instead of I{}.

Another example:

xrags -a -n1 -P50 -I"server" sh -c "scp server:/tmp/"



One disadvantage in xargs is the output will not be in a order. you need to make your script writes to a log with clear host identification to gather a report from multiple hosts.

Not only SSH and SCP, you can run any process / task which you want to start and run in parallel. Alternatively you can download and use "parallel" tool which is slightly better than xargs.




Quick HOWTO: View contents of RPM without installing it

In Linux, You may wonder what are the files inside a rpm package and you may want to check them before installing it.

You can do this with the below rpm commands:

If the rpm file available locally:
[root@linux_server1 ~]# rpm -qlp telnet-0.17-48.el6.x86_64.rpm
/usr/bin/telnet
/usr/share/man/man1/telnet.1.gz
[root@linux_server1 ~]#

[root@linux_server1 ~]# rpm -q -filesbypkg -p numactl-devel-2.0.9-2.el6.x86_64.rpm
numactl-devel             /usr/include/numa.h
numactl-devel             /usr/include/numacompat1.h
numactl-devel             /usr/include/numaif.h
numactl-devel             /usr/lib64/libnuma.a
numactl-devel             /usr/lib64/libnuma.so
[root@linux_server1 ~]#

If you want to check the contents of a rpm located in a remote repository:
[root@linux_server1 ~]# repoquery --list telnet
/usr/bin/telnet
/usr/share/man/man1/telnet.1.gz
[root@linux_server1 ~]#

If you want to check the pre installation and post installation scripts which runs while you installing a rpm package.
[root@linux_server1 ~]# rpm -qp --scripts sysstat-9.0.4-33.el6.x86_64.rpm
postinstall scriptlet (using /bin/sh):
/sbin/chkconfig --add sysstat
preuninstall scriptlet (using /bin/sh):
if [ "$1" = 0 ]; then
  # Remove sa logs if removing sysstat completely
  rm -f /var/log/sa/*
  # Remove service
  /sbin/chkconfig --del sysstat
fi
[root@linux_server1 ~]#

If the rpm is already installed, you can use same commands without passing the arguement "-p".

Example:
rpm -ql sysstat-9.0.4-33.el6.x86_64
rpm -q --scripts sysstat-9.0.4-33.el6.x86_64


If you want to extract the rpm contents without installing it.
root@linux_server1~]# rpm2cpio telnet-0.17-48.el6.x86_64.rpm | cpio -idmv
./usr/bin/telnet
./usr/share/man/man1/telnet.1.gz
220 blocks