PackageKit can’t find file in /var/cache/PackageKit/

After installing RPM Fusion repos on Fedora 28 you might be getting an error shown by update manager every few minutes in GUI.
Error will say something like this: “Error when getting information for file “/var/cache/PackageKit/28/metadata/rpmfusion-nonfree-nvidia-driver/repodata/appstream.xml.gz”: No such file or directory

Error is described here https://bugzilla.redhat.com/show_bug.cgi?id=1580162 and seem to be caused by a repo that claims to support appdata but doesn’t actually provide it.

Error can be resolved by changing enabled_metadata=1 to enabled_metadata=0 in repo description file.
In case of above error change was made in /etc/yum.repos.d/rpmfusion-nonfree.repo and it now looks like this:

[rpmfusion-nonfree]
name=RPM Fusion for Fedora $releasever - Nonfree
#baseurl=http://download1.rpmfusion.org/nonfree/fedora/releases/$releasever/Everything/$basearch/os/
metalink=https://mirrors.rpmfusion.org/metalink?repo=nonfree-fedora-$releasever&arch=$basearch
enabled=1
enabled_metadata=0 #changed from 1 to 0
metadata_expire=14d
type=rpm-md
gpgcheck=1
repo_gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-nonfree-fedora-$releasever

[rpmfusion-nonfree-debuginfo]
name=RPM Fusion for Fedora $releasever - Nonfree - Debug
#baseurl=http://download1.rpmfusion.org/nonfree/fedora/releases/$releasever/Everything/$basearch/debug/
metalink=https://mirrors.rpmfusion.org/metalink?repo=nonfree-fedora-debug-$releasever&arch=$basearch
enabled=0
metadata_expire=7d
type=rpm-md
gpgcheck=1
repo_gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-nonfree-fedora-$releasever

[rpmfusion-nonfree-source]
name=RPM Fusion for Fedora $releasever - Nonfree - Source
#baseurl=http://download1.rpmfusion.org/nonfree/fedora/releases/$releasever/Everything/source/SRPMS/
metalink=https://mirrors.rpmfusion.org/metalink?repo=nonfree-fedora-source-$releasever&arch=$basearch
enabled=0
metadata_expire=7d
type=rpm-md
gpgcheck=1
repo_gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-nonfree-fedora-$releasever

After the change is made run pkcon repair and then pkcon update to check for any errors.

[[email protected] ~]# pkcon repair
                              [=========================]         
Finished                      [=========================]         
                              [=========================]         
Finished                      [=========================]         
[[email protected] ~]# pkcon update
Getting updates               [=========================]         
Finished                      [=========================]         
No packages require updating to newer versions.
[[email protected] ~]# 

How to enable h264 codec on Fedora 28

If you are running Fedora 28 you might have some issues with playing some type of videos in Firefox, Chromium and Vivaldi browsers.

You might be presented with a following type of error when trying to open video stream:
H.264 (High Profile) decoder is required to play the file, but is not installed

Also when visiting https://www.youtube.com/html5 you will see that browser does not support H.264 and MSE & H.264.

Here is how to enable H.264 for specific browsers.

Firefox

First you need to install and enable rpmfusion-free and rpmfusion-nonfree repositories.
Following command will install both RPM Fusion repositories.

sudo dnf install https://download1.rpmfusion.org/{free/fedora/rpmfusion-free,nonfree/fedora/rpmfusion-nonfree}-release-$(rpm -E %fedora).noarch.rpm

After that install compat-ffmpeg28 and ffmpeg-libs packages

sudo dnf install compat-ffmpeg28 ffmpeg-libs
Chromium

Chromium supports Vorbis, Theora, WebM and HTML5 audio and video standards, but does not include the non-free AAC, H.264, MP3 or Adobe Flash code that is found in Chrome.

To add H.264 you need to install chromium-libs-media-freeworld package from RPM Fusion.

Install RPM Fusion repositories.

sudo dnf install https://download1.rpmfusion.org/{free/fedora/rpmfusion-free,nonfree/fedora/rpmfusion-nonfree}-release-$(rpm -E %fedora).noarch.rpm

Install chromium-libs-media-freeworld package.

sudo dnf install chromium-libs-media-freeworld
Vivaldi

For Vivaldi you need to follow same steps as for Chromium, and add an extra step of copying a file to Vivaldi directory.

Install RPM Fusion repositories.

sudo dnf install https://download1.rpmfusion.org/{free/fedora/rpmfusion-free,nonfree/fedora/rpmfusion-nonfree}-release-$(rpm -E %fedora).noarch.rpm

Install chromium-libs-media-freeworld package.

sudo dnf install chromium-libs-media-freeworld

Copy /usr/lib64/chromium-browser/libffmpeg.so to /opt/vivaldi/lib/.

sudo cp -av /usr/lib64/chromium-browser/libffmpeg.so /opt/vivaldi/lib/
cp: overwrite '/opt/vivaldi/lib/libffmpeg.so'? y
removed '/opt/vivaldi/lib/libffmpeg.so'
'/usr/lib64/chromium-browser/libffmpeg.so' -> '/opt/vivaldi/lib/libffmpeg.so'

Last step will need to be repeated after every Vivaldi update.

Create key and CSR for multi-domain certificate.

If you want to secure multiple domains with one TLS/SSL certificate you will need to use multi-domain certificate with more than one Subject Alternative Name (SAN) specified in it.

Following is the procedure to create CSR for multiSAN certificate with openSSL.

First create a config file that will contain SAN information and all other parameters that need to be passed to openSSL to create CSR file.

Create multisan.conf file with following content.

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
default_keyfile = multisan.key
prompt = no

[req_distinguished_name]
C = CountryCode (US,GB,...)
ST = State
L = City
O = OrganizatioName
OU = OrganizationUnit
CN = server.domain1.com

[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = server.domain1.com
DNS.2 = server.domain2.com
DNS.3 = server.domain3.com

Once multisan.conf file has been created create CSR file and private key to be used with certificate with following command:

openssl req -new -nodes -out multisan.csr -config multisan.conf

This will automatically write private key to multisan.key file in the same location you executed the command.

openssl req -new -nodes -out multisan.csr -config multisan.conf 
Generating a 2048 bit RSA private key
.......+++++
.......................................................................+++++
writing new private key to 'multisan.key'

Once CSR and key files have been created you can confirm CSR content with following command:

openssl req -text -noout -in multisan.csr

Now that you have CSR file you can upload that CSR to your TLS/SSL certificate vendor to order issuing of the certificate.

Automatic backup of Ubiquiti ES-48-LITE over SSH

Ubiquiti ES-48-LITE currently doesn’t have an option to copy startup config to remote machine over scp.

This script will connect to Ubiquiti EdgeSwitch  over SSH and save startup config locally on machine running the script.

#!/usr/bin/expect -f

set user "username"
set sshpass "password for ssh access"
set enablepass "password for enable mode"
set device "device IP or hostname"
set cfgbackup "/path/to/save/config"

spawn ssh [email protected]$device

expect "assword:"
send "$sshpass\r"

expect ">"
send "enable\r$enablepass\rterminal length 0\r"

expect "#"
log_file -noappend $cfgbackup
send "show startup-config\r"
expect "#\n"
log_file

send "exit\rexit\r"

exec /bin/sed -i {1d;$d} $cfbbackup

 

Find which directory is using most inodes

Oneliners to find which directory on the server is using most inodes:

To find how many inodes are used per each directory on certain path run:

find ./ -maxdepth 1 -type d -print0 | while IFS= read -r -d $'\0' dir; do echo "$(find "$dir" | wc -l) "$dir""; done| sort -n | tail

Last line will show the path being searched and second to last line will be directory with most inodes, then cd to that directory and run again to see which subfolder is using most inodes.

To get directory with most inodes immediately, without the need to cd in each directory you can run following:

find ./ -type d -print0 | while IFS= read -r -d $'\0' dir; do echo "$(stat -t "$dir" | awk '{print$2}') "$dir""; done | sort -n | tail

This will not show the number of inodes used, only which directory has most inodes in it.
Oneliner from top can be used to get exact number of inodes in it.