Yearly Archives: 2016


Delete all files and keep the directory structure

Scenario

You have a complex folder structure and you want to remove all files and at the same time keep all folders intact.

We will present one method, using two variations of it that can achieve the above.
The method uses the GNU find command to find all files and delete them one by one.

Variation A

find . ! -type d -exec rm '{}' \;

This above command will search in the current directory and sub-directories for anything that is not a folder and then it will delete them.

  • find . – Searches in this folder, since we did not define depth, it will search in all sub-folders as well
  • ! -type dtype d instructs find to match all Directories, by adding the ! in front of the instruction it negates the result and instructs find to match anything but the Directories
  • -exec rm '{}' \; – for every result, the command after exec is executed. The filename replaces '{}' so that the results get deleted one by one.

Variation B

find . ! -type d -delete

In this example, we replaced -exec rm '{}' \; with the simpler to remember directive of -delete.


Java: Methods on how to iterate over a List

Following we present a few methods on how to iterate over a List in Java.

Currently we present:

  1. Using a standard for loop
  2. Using an iterator to loop
  3. Using a For-Each loop
  4. Using Streams

[download id=”2234″]

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class ListLooper {

    public static void main(final String[] argv) {

        final String elementsArray[] = new String[] { "First Element", "Second Element", "Third Element" };
        // First of all we convert an array of Strings to a list of Strings, we do this to avoid adding each element to the list we will use by using the add() method.
        final List<String> elementsList = Arrays.asList(elementsArray);

        // Method 1: Using a standard for loop
        System.out.println("Method 1: Using a standard for loop");
        // We will loop N times, where N is the size of the list.
        // Since the first element of the list is on position 0, we start from that and finish at position N-1.
        for (int i = 0; i < elementsList.size(); i++) {

            // Using get() we retrieve the element at position.
            System.out.println(elementsList.get(i));
        }

        // Method 2: Using an iterator to loop
        System.out.println("Method 2: Using an iterator to loop");
        // The Java iterator is an interface that belongs to the collection framework and allows us to traverse a collection and access the data element of the collection without bothering the user about the implementation details of that collection. 
        final Iterator<String> iterator = elementsList.iterator();
        while (iterator.hasNext()) {

            // next() returns the next element in the collection until the hasNext() method returns false.
            System.out.println(iterator.next());
        }

        // Method 3: Using a For-Each loop
        System.out.println("Method 3: Using a For-Each loop");
        // This code works for any object that implements the Iterable interface.
        for (final String element : elementsList) {

            System.out.println(element);
        }

        // Method 4: Using Streams
        System.out.println("Method 4: Using Streams");
        // This code will not work for Java versions earlier than Java 8.
        elementsList.forEach((element) -> {

            System.out.println(element);
        });
     }
}

[download id=”2234″]

Compilation and execution are presented in the next section.


javac ListLooper.java;

java ListLooper;
Method 1: Using a standard for loop
First Element
Second Element
Third Element
Method 2: Using an iterator to loop
First Element
Second Element
Third Element
Method 3: Using a For-Each loop
First Element
Second Element
Third Element
Method 4: Using Streams
First Element
Second Element
Third Element

Following is the Java version used in this article

java -version
openjdk version "1.8.0_111"
OpenJDK Runtime Environment (build 1.8.0_111-b16)
OpenJDK 64-Bit Server VM (build 25.111-b16, mixed mode)

Installing Jenkins on Red Hat (CentOS 7 64bit) distributions

Following the official guides:

We tried to install Jenkins using the RPM repositories.

sudo yum install java -y;
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo;
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key;
sudo yum install jenkins -y;

Unfortunately, that resulted in an error:

warning: /var/cache/yum/x86_64/7/jenkins/packages/jenkins-2.19.2-1.1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID d50582e6: NOKEY

Public key for jenkins-2.19.2-1.1.noarch.rpm is not installed

Apparently, sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key; failed silently and it did not import the key.

To verify, we executed rpm -qa gpg-pubkey* to display a list of all keys installed for RPM verification. From that list we wanted to see if any of the keys was the one needed by jenkins which should end with the value d50582e6. Since none of them matched, we tried to manually re-import it which failed again.

Our Solution

Our solution, although ugly, was to disable  PGP verification in the file /etc/yum.repos.d/jenkins.repo.

[jenkins]
name=Jenkins-stable
baseurl=http://pkg.jenkins.io/redhat-stable
gpgcheck=0

That was enough to allow us to install the package using:

sudo yum install jenkins -y;

Finally, we started jenkins using sudo service jenkins start;.

Logs from failed installation


[bytefreaks@localhost ~]$ sudo yum install jenkins -y
[sudo] password for bytefreaks:
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.coreix.net
* extras: mirrors.coreix.net
* updates: mirrors.coreix.net
Resolving Dependencies
--> Running transaction check
---> Package jenkins.noarch 0:2.19.2-1.1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=======================================================================================================================================================================================================================================
Package                                                Arch                                                  Version                                                     Repository                                              Size
=======================================================================================================================================================================================================================================
Installing:
jenkins                                                noarch                                                2.19.2-1.1                                                  jenkins                                                 66 M

Transaction Summary
=======================================================================================================================================================================================================================================
Install  1 Package

Total size: 66 M
Installed size: 67 M
Downloading packages:
warning: /var/cache/yum/x86_64/7/jenkins/packages/jenkins-2.19.2-1.1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID d50582e6: NOKEY


Public key for jenkins-2.19.2-1.1.noarch.rpm is not installed


Install terminator in CentOS 7 (64bit) 2

We installed CentOS 7 (64bit) using this ISO, which we downloaded from http://vault.centos.org/7.1.1503/isos/x86_64/

Once we got the OS started, we executed yum update -y to update all installed packages that were older than the versions in the repositories.
After the update process was complete, we then tried to install terminator using yum.

The Problem

Executing yum install -y terminator resulted in an error:

Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Install Process
Loading mirror speeds from cached hostfile
* base: mirror.us.leaseweb.net
* extras: mirror.us.leaseweb.net
* updates: mirror.us.leaseweb.net
No package terminator available.
Error: Nothing to do

Solution

To solve the problem we needed to install the Extra Packages for Enterprise Linux (EPEL) repository using yum install -y epel-release.

After the installation was done, we executed yum install -y terminator once more and the installation of terminator succeeded.

Example Logs

Following is the full log from the terminal, showing the correct completion of the installation

[root@localhost bytefreaks]# yum install terminator
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirror.us.leaseweb.net
 * extras: mirror.us.leaseweb.net
 * updates: mirror.us.leaseweb.net
No package terminator available.
Error: Nothing to do
[root@localhost bytefreaks]# yum install -y epel-release
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirror.us.leaseweb.net
 * extras: mirror.us.leaseweb.net
 * updates: mirror.us.leaseweb.net
Resolving Dependencies
--> Running transaction check
---> Package epel-release.noarch 0:7-6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================================================
 Package                        Arch                     Version                 Repository                Size
================================================================================================================
Installing:
 epel-release                   noarch                   7-6                     extras                    14 k

Transaction Summary
================================================================================================================
Install  1 Package

Total download size: 14 k
Installed size: 24 k
Downloading packages:
epel-release-7-6.noarch.rpm                                                              |  14 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : epel-release-7-6.noarch                                                                      1/1 
  Verifying  : epel-release-7-6.noarch                                                                      1/1 

Installed:
  epel-release.noarch 0:7-6                                                                                     

Complete!
[root@localhost bytefreaks]# yum install terminator -y
Loaded plugins: fastestmirror, langpacks
epel/x86_64/metalink                                                                     |  23 kB  00:00:00     
epel                                                                                     | 4.3 kB  00:00:00     
(1/3): epel/x86_64/group_gz                                                              | 170 kB  00:00:01     
epel/x86_64/primary_db         FAILED                                          
https://ftp.fau.de/epel/7/x86_64/repodata/e11482622ec75721199897552409e0b0b1d6fd798be905c88014f539d027efec-primary.sqlite.xz: [Errno 14] HTTPS Error 404 - Not Found
Trying other mirror.
To address this issue please refer to the below knowledge base article 

https://access.redhat.com/articles/1320623

If above article doesn't help to resolve this issue please create a bug on https://bugs.centos.org/

(2/3): epel/x86_64/primary_db                                                            | 4.3 MB  00:00:12     
(3/3): epel/x86_64/updateinfo                                                            | 674 kB  00:00:18     
Loading mirror speeds from cached hostfile
 * base: mirror.us.leaseweb.net
 * epel: mirror.de.leaseweb.net
 * extras: mirror.us.leaseweb.net
 * updates: mirror.us.leaseweb.net
Resolving Dependencies
--> Running transaction check
---> Package terminator.noarch 0:0.98-3.el7 will be installed
--> Processing Dependency: vte for package: terminator-0.98-3.el7.noarch
--> Processing Dependency: python-psutil for package: terminator-0.98-3.el7.noarch
--> Processing Dependency: python-keybinder for package: terminator-0.98-3.el7.noarch
--> Processing Dependency: gnome-python2-gconf for package: terminator-0.98-3.el7.noarch
--> Processing Dependency: gnome-python2-bonobo for package: terminator-0.98-3.el7.noarch
--> Running transaction check
---> Package gnome-python2-bonobo.x86_64 0:2.28.1-14.el7 will be installed
--> Processing Dependency: gnome-python2-canvas(x86-64) = 2.28.1-14.el7 for package: gnome-python2-bonobo-2.28.1-14.el7.x86_64
--> Processing Dependency: gnome-python2(x86-64) = 2.28.1-14.el7 for package: gnome-python2-bonobo-2.28.1-14.el7.x86_64
--> Processing Dependency: pyorbit(x86-64) >= 2.0.1 for package: gnome-python2-bonobo-2.28.1-14.el7.x86_64
--> Processing Dependency: libbonoboui(x86-64) >= 2.8.0 for package: gnome-python2-bonobo-2.28.1-14.el7.x86_64
--> Processing Dependency: libbonobo(x86-64) >= 2.8.0 for package: gnome-python2-bonobo-2.28.1-14.el7.x86_64
--> Processing Dependency: libgnomecanvas-2.so.0()(64bit) for package: gnome-python2-bonobo-2.28.1-14.el7.x86_64
--> Processing Dependency: libgnome-2.so.0()(64bit) for package: gnome-python2-bonobo-2.28.1-14.el7.x86_64
--> Processing Dependency: libbonoboui-2.so.0()(64bit) for package: gnome-python2-bonobo-2.28.1-14.el7.x86_64
--> Processing Dependency: libbonobo-activation.so.4()(64bit) for package: gnome-python2-bonobo-2.28.1-14.el7.x86_64
--> Processing Dependency: libbonobo-2.so.0()(64bit) for package: gnome-python2-bonobo-2.28.1-14.el7.x86_64
--> Processing Dependency: libart_lgpl_2.so.2()(64bit) for package: gnome-python2-bonobo-2.28.1-14.el7.x86_64
--> Processing Dependency: libORBit-2.so.0()(64bit) for package: gnome-python2-bonobo-2.28.1-14.el7.x86_64
---> Package gnome-python2-gconf.x86_64 0:2.28.1-14.el7 will be installed
---> Package python-keybinder.x86_64 0:0.3.1-1.el7 will be installed
--> Processing Dependency: keybinder = 0.3.1-1.el7 for package: python-keybinder-0.3.1-1.el7.x86_64
--> Processing Dependency: libkeybinder.so.0()(64bit) for package: python-keybinder-0.3.1-1.el7.x86_64
---> Package python-psutil.x86_64 0:2.2.1-1.el7 will be installed
---> Package vte.x86_64 0:0.28.2-10.el7 will be installed
--> Running transaction check
---> Package ORBit2.x86_64 0:2.14.19-13.el7 will be installed
--> Processing Dependency: libIDL-2.so.0()(64bit) for package: ORBit2-2.14.19-13.el7.x86_64
---> Package gnome-python2.x86_64 0:2.28.1-14.el7 will be installed
---> Package gnome-python2-canvas.x86_64 0:2.28.1-14.el7 will be installed
---> Package keybinder.x86_64 0:0.3.1-1.el7 will be installed
---> Package libart_lgpl.x86_64 0:2.3.21-10.el7 will be installed
---> Package libbonobo.x86_64 0:2.32.1-7.el7 will be installed
---> Package libbonoboui.x86_64 0:2.24.5-7.el7 will be installed
---> Package libgnome.x86_64 0:2.32.1-9.el7 will be installed
--> Processing Dependency: libgnomevfs-2.so.0()(64bit) for package: libgnome-2.32.1-9.el7.x86_64
---> Package libgnomecanvas.x86_64 0:2.30.3-8.el7 will be installed
---> Package pyorbit.x86_64 0:2.24.0-15.el7 will be installed
--> Running transaction check
---> Package gnome-vfs2.x86_64 0:2.24.4-14.el7 will be installed
--> Processing Dependency: libfam.so.0()(64bit) for package: gnome-vfs2-2.24.4-14.el7.x86_64
---> Package libIDL.x86_64 0:0.8.14-8.el7 will be installed
--> Running transaction check
---> Package gamin.x86_64 0:0.1.10-16.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================================================
 Package                            Arch                 Version                       Repository          Size
================================================================================================================
Installing:
 terminator                         noarch               0.98-3.el7                    epel               3.4 M
Installing for dependencies:
 ORBit2                             x86_64               2.14.19-13.el7                base               176 k
 gamin                              x86_64               0.1.10-16.el7                 base               128 k
 gnome-python2                      x86_64               2.28.1-14.el7                 base                47 k
 gnome-python2-bonobo               x86_64               2.28.1-14.el7                 base                87 k
 gnome-python2-canvas               x86_64               2.28.1-14.el7                 base                34 k
 gnome-python2-gconf                x86_64               2.28.1-14.el7                 base                46 k
 gnome-vfs2                         x86_64               2.24.4-14.el7                 base               839 k
 keybinder                          x86_64               0.3.1-1.el7                   epel                15 k
 libIDL                             x86_64               0.8.14-8.el7                  base                87 k
 libart_lgpl                        x86_64               2.3.21-10.el7                 base                67 k
 libbonobo                          x86_64               2.32.1-7.el7                  base               437 k
 libbonoboui                        x86_64               2.24.5-7.el7                  base               342 k
 libgnome                           x86_64               2.32.1-9.el7                  base               741 k
 libgnomecanvas                     x86_64               2.30.3-8.el7                  base               226 k
 pyorbit                            x86_64               2.24.0-15.el7                 base                51 k
 python-keybinder                   x86_64               0.3.1-1.el7                   epel                19 k
 python-psutil                      x86_64               2.2.1-1.el7                   epel               114 k
 vte                                x86_64               0.28.2-10.el7                 epel               361 k

Transaction Summary
================================================================================================================
Install  1 Package (+18 Dependent packages)

Total download size: 7.1 M
Installed size: 27 M
Downloading packages:
(1/19): gnome-python2-2.28.1-14.el7.x86_64.rpm                                           |  47 kB  00:00:02     
(2/19): gnome-python2-canvas-2.28.1-14.el7.x86_64.rpm                                    |  34 kB  00:00:02     
(3/19): ORBit2-2.14.19-13.el7.x86_64.rpm                                                 | 176 kB  00:00:02     
(4/19): gnome-python2-gconf-2.28.1-14.el7.x86_64.rpm                                     |  46 kB  00:00:01     
(5/19): libIDL-0.8.14-8.el7.x86_64.rpm                                                   |  87 kB  00:00:00     
warning: /var/cache/yum/x86_64/7/epel/packages/keybinder-0.3.1-1.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
Public key for keybinder-0.3.1-1.el7.x86_64.rpm is not installed
(6/19): keybinder-0.3.1-1.el7.x86_64.rpm                                                 |  15 kB  00:00:02     
(7/19): libart_lgpl-2.3.21-10.el7.x86_64.rpm                                             |  67 kB  00:00:01     
(8/19): gnome-vfs2-2.24.4-14.el7.x86_64.rpm                                              | 839 kB  00:00:03     
(9/19): gamin-0.1.10-16.el7.x86_64.rpm                                                   | 128 kB  00:00:07     
(10/19): libgnome-2.32.1-9.el7.x86_64.rpm                                                | 741 kB  00:00:01     
(11/19): libbonoboui-2.24.5-7.el7.x86_64.rpm                                             | 342 kB  00:00:02     
(12/19): pyorbit-2.24.0-15.el7.x86_64.rpm                                                |  51 kB  00:00:00     
(13/19): libbonobo-2.32.1-7.el7.x86_64.rpm                                               | 437 kB  00:00:02     
(14/19): python-keybinder-0.3.1-1.el7.x86_64.rpm                                         |  19 kB  00:00:00     
(15/19): gnome-python2-bonobo-2.28.1-14.el7.x86_64.rpm                                   |  87 kB  00:00:08     
(16/19): python-psutil-2.2.1-1.el7.x86_64.rpm                                            | 114 kB  00:00:00     
(17/19): vte-0.28.2-10.el7.x86_64.rpm                                                    | 361 kB  00:00:01     
(18/19): libgnomecanvas-2.30.3-8.el7.x86_64.rpm                                          | 226 kB  00:00:03     
(19/19): terminator-0.98-3.el7.noarch.rpm                                                | 3.4 MB  00:00:05     
----------------------------------------------------------------------------------------------------------------
Total                                                                           524 kB/s | 7.1 MB  00:00:13     
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Importing GPG key 0x352C64E5:
 Userid     : "Fedora EPEL (7) <[email protected]>"
 Fingerprint: 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
 Package    : epel-release-7-6.noarch (@extras)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : libart_lgpl-2.3.21-10.el7.x86_64                                                            1/19 
  Installing : libgnomecanvas-2.30.3-8.el7.x86_64                                                          2/19 
  Installing : gnome-python2-2.28.1-14.el7.x86_64                                                          3/19 
  Installing : libIDL-0.8.14-8.el7.x86_64                                                                  4/19 
  Installing : ORBit2-2.14.19-13.el7.x86_64                                                                5/19 
  Installing : libbonobo-2.32.1-7.el7.x86_64                                                               6/19 
  Installing : pyorbit-2.24.0-15.el7.x86_64                                                                7/19 
  Installing : gnome-python2-gconf-2.28.1-14.el7.x86_64                                                    8/19 
  Installing : gnome-python2-canvas-2.28.1-14.el7.x86_64                                                   9/19 
  Installing : vte-0.28.2-10.el7.x86_64                                                                   10/19 
  Installing : keybinder-0.3.1-1.el7.x86_64                                                               11/19 
  Installing : python-keybinder-0.3.1-1.el7.x86_64                                                        12/19 
  Installing : python-psutil-2.2.1-1.el7.x86_64                                                           13/19 
  Installing : gamin-0.1.10-16.el7.x86_64                                                                 14/19 
  Installing : gnome-vfs2-2.24.4-14.el7.x86_64                                                            15/19 
  Installing : libgnome-2.32.1-9.el7.x86_64                                                               16/19 
  Installing : libbonoboui-2.24.5-7.el7.x86_64                                                            17/19 
  Installing : gnome-python2-bonobo-2.28.1-14.el7.x86_64                                                  18/19 
  Installing : terminator-0.98-3.el7.noarch                                                               19/19 
  Verifying  : libbonobo-2.32.1-7.el7.x86_64                                                               1/19 
  Verifying  : libgnome-2.32.1-9.el7.x86_64                                                                2/19 
  Verifying  : libgnomecanvas-2.30.3-8.el7.x86_64                                                          3/19 
  Verifying  : gamin-0.1.10-16.el7.x86_64                                                                  4/19 
  Verifying  : libIDL-0.8.14-8.el7.x86_64                                                                  5/19 
  Verifying  : gnome-python2-gconf-2.28.1-14.el7.x86_64                                                    6/19 
  Verifying  : gnome-python2-canvas-2.28.1-14.el7.x86_64                                                   7/19 
  Verifying  : python-psutil-2.2.1-1.el7.x86_64                                                            8/19 
  Verifying  : keybinder-0.3.1-1.el7.x86_64                                                                9/19 
  Verifying  : terminator-0.98-3.el7.noarch                                                               10/19 
  Verifying  : python-keybinder-0.3.1-1.el7.x86_64                                                        11/19 
  Verifying  : libbonoboui-2.24.5-7.el7.x86_64                                                            12/19 
  Verifying  : vte-0.28.2-10.el7.x86_64                                                                   13/19 
  Verifying  : gnome-vfs2-2.24.4-14.el7.x86_64                                                            14/19 
  Verifying  : ORBit2-2.14.19-13.el7.x86_64                                                               15/19 
  Verifying  : pyorbit-2.24.0-15.el7.x86_64                                                               16/19 
  Verifying  : gnome-python2-2.28.1-14.el7.x86_64                                                         17/19 
  Verifying  : gnome-python2-bonobo-2.28.1-14.el7.x86_64                                                  18/19 
  Verifying  : libart_lgpl-2.3.21-10.el7.x86_64                                                           19/19 

Installed:
  terminator.noarch 0:0.98-3.el7                                                                                

Dependency Installed:
  ORBit2.x86_64 0:2.14.19-13.el7                         gamin.x86_64 0:0.1.10-16.el7                          
  gnome-python2.x86_64 0:2.28.1-14.el7                   gnome-python2-bonobo.x86_64 0:2.28.1-14.el7           
  gnome-python2-canvas.x86_64 0:2.28.1-14.el7            gnome-python2-gconf.x86_64 0:2.28.1-14.el7            
  gnome-vfs2.x86_64 0:2.24.4-14.el7                      keybinder.x86_64 0:0.3.1-1.el7                        
  libIDL.x86_64 0:0.8.14-8.el7                           libart_lgpl.x86_64 0:2.3.21-10.el7                    
  libbonobo.x86_64 0:2.32.1-7.el7                        libbonoboui.x86_64 0:2.24.5-7.el7                     
  libgnome.x86_64 0:2.32.1-9.el7                         libgnomecanvas.x86_64 0:2.30.3-8.el7                  
  pyorbit.x86_64 0:2.24.0-15.el7                         python-keybinder.x86_64 0:0.3.1-1.el7                 
  python-psutil.x86_64 0:2.2.1-1.el7                     vte.x86_64 0:0.28.2-10.el7                            

Complete!