Clear Microsoft Teams company SSO login page on Ubuntu

If you have Microsoft Teams installed on Ubuntu used with a company single sign-on page, you might have problems logging in with your personal Microsoft account.

If you want to clear any login info from Microsoft Teams. doing apt remove teams or apt purge teams won’t clear login cache, or company SSO page from the application, as those are stored inside you home folder.

To clear SSO page in Microsoft Teams on Ubuntu you need to remove its configurations files inside your home directory inside .config folder.

There are two folders related to Microsoft Teams, that get created in your user home folder, which get created when you run Microsoft Teams for the first time.

Those two folders are Microsoft/Microsoft Teams/ and Microsoft Teams - Preview/ inside .config folder in your home directory.

Their full paths, if you home folder is /home/$USER, will be /home/$USER/.config/Microsoft Teams - Preview/ and /home/$USER/.config/Microsoft/Microsoft Teams/, if you delete those folder, you will reset Microsoft Teams, as they were just freshly installed and never run before.

TLDR; to reset Microsoft Teams on Ubuntu as they were just freshly installed and remove company SSO page from it, do the following.

rm -rf ~/.config/Microsoft/Microsoft\ Teams/ ~/.config/Microsoft\ Teams\ -\ Preview/

Or if you don’t want to use \ to escape space, put folder names inside quotes.

rm -rf ~/.config/Microsoft/'Microsoft Teams'/ ~/.config/'Microsoft Teams - Preview'/

How to convert from CentOS 8 to CentOS 8 Stream

Here are the steps needed to convert from CentOS 8 to CentOS 8 Stream.

First backup anything important, the conversion process is fairly simple and smooth with no issues usually but just in case make backups of important stuff if anything goes wrong.

Second step is to install all pending updates on current CentOS 8 installation.

Update to latest version of packages with following command:

dnf update

After updates are installed reboot the machine to make sure latest kernel version is loaded and that everything is working normally with latest package versions before migrating to CentOS 8 Stream:

reboot

After the machine is back up install centos-release-stream package with following command

dnf install centos-release-stream
dnf install centos-release-stream

After centos-release-stream has been installed swap repos from CentOS Linux 8 repos to CentOS Stream 8 repos with following command

dnf swap centos-linux-repos centos-stream-repo
dnf swap centos-linux-repos centos-stream-repo

After repos have been swapped check if correct repos are listed in dnf with following command

dnf repolist

You should see CentOS Stream 8 repos listed now instead of CentOS Linux 8 repos that were there before.

dnf repolist before swap
dnf repolist after swap has been made

When CentOS 8 Stream repos have been set sync all installed packages with CentOS Stream versions using following command:

dnf distro-sync

After packages have been synced you can use cat /etc/redhat-release or hostnamectl command to check and confirm that you are now running CentOS Stream 8 OS.

This is an output of hostnamectl command before the sync:

hostnamectl 
   Static hostname: server0
         Icon name: computer-vm
           Chassis: vm
        Machine ID: ba45dac81f4e4f6f9c9bb2657914c81e
           Boot ID: e36de8bd66f1467983104acd47defac0
    Virtualization: kvm
  Operating System: CentOS Linux 8
       CPE OS Name: cpe:/o:centos:centos:8
            Kernel: Linux 4.18.0-348.2.1.el8_5.x86_64
      Architecture: x86-64

This is an output of hostnamectl command after dnf sync command has been run:

hostnamectl 
   Static hostname: server0
         Icon name: computer-vm
           Chassis: vm
        Machine ID: ba45dac81f4e4f6f9c9bb2657914c81e
           Boot ID: 526a47bb15b4420db4cc3cf364af9555
    Virtualization: kvm
  Operating System: CentOS Stream 8
       CPE OS Name: cpe:/o:centos:centos:8
            Kernel: Linux 4.18.0-348.7.1.el8_5.x86_64
      Architecture: x86-64

Reboot the server and check for any possible issues.

Install OpenLiteSpeed with PHP 8.1

These are the steps to install OpenLiteSpeed with lsphp81 on CentOS replacements like AlmaLinux 8 or RockyLinux 8.

First add LiteSpeed repositories for AlmaLinux 8 & CentOS 8 with following command:

rpm -Uvh http://rpms.litespeedtech.com/centos/litespeed-repo-1.1-1.el8.noarch.rpm

After you have installed the rpm package you will get /etc/yum.repos.d/litespeed.repo repo file which you will need to edit in order to avoid getting the following error when installing or updating packages with yum/dnf.

Invalid configuration value: failovermethod=priority in /etc/yum.repos.d/litespeed.repo; Configuration: OptionBinding with id "failovermethod" does not exist

This will happen because the ‘failovermethod’ option is not supported by dnf which comes with RHEL 8.

Comment out that line from /etc/yum.repos.d/litespeed.repo with following command:

sed -i 's/failovermethod=priority/#failovermethod=priority/' /etc/yum.repos.d/litespeed.repo

Install OpenLiteSpeed with following command:

dnf install openlitespeed

After you have installed OpenLiteSpeed install Extra Packages for Enterprise Linux (EPEL) repository with following command:

dnf install epel-release

After that install PHP 8.1 for OpenLiteSpeed with most commonly used packages:

dnf install lsphp81 lsphp81-common lsphp81-mysqlnd lsphp81-gd lsphp81-process lsphp81-mbstring lsphp81-xml lsphp81-opcache

If you wish to install a different version of PHP just replace lsphp81 with lsphp80 for PHP 8.0 or lsphp74 for PHP 7.4 and similar.

By default OpenLiteSpeed will run on port 8088 and its WebAdmin Console will run on port 7080.

OpenLiteSpeed WebAdmin Console will have default username admin but the admin password will be randomly generated.

If you want to reset OpenLiteSpeed admin password you can run /usr/local/lsws/admin/misc/admpass.sh script which can be used to set admin password to desired value.

If you run the script it will use username admin if you don’t specify any and will then ask you to input a new password for OpenLiteSpeed administration web interface.

/usr/local/lsws/admin/misc/admpass.sh 

Please specify the user name of administrator.
This is the user name required to login the administration Web interface.

User name [admin]: 

Please specify the administrator's password.
This is the password required to login the administration Web interface.

Password: 
Retype password: 
Administrator's username/password is updated successfully!

Bluetooth headphones and YouTube videos stop working after upgrade to Fedora 35

After upgrade from Fedora 34 to Fedora 35 Bluetooth headphones and speakers might stop working, and you might get the following error when trying to watch YouTube videos “If playback doesn’t begin shortly try restarting your device”

When checking /var/log/messages or journalctl -f you will see the following error logged when trying to open a video or enabling Bluetooth headphones or speakers.

pulseaudio[2366]: Failed to create sink input: sink is suspended.

Issue can be resolved by swapping pulseaudio packages with pipewire-pulseaudio using the following command

dnf swap --allowerasing pulseaudio pipewire-pulseaudio

Small WordPress backup script that sends email on failed backups and deletes old backups

This is a simple backup script in bash, for WordPress on Linux. It is based on the script from Small WordPress backup script post.
Like the script there it will dump MySQL database used by WordPress site and create a tar.gz file that will have WordPress site files and database dump.
This script will also send out an email if the backup process fails on any stage and delete old backups files.

#!/bin/bash

bkpDir=/local/backup/directory
webroot=/wordpress/install/directory/
bkpAge=90 #How many days of backup to keep

dbUser=$(grep DB_USER $webroot/wp-config.php | awk -F\' '{print$4}')
dbName=$(grep DB_NAME $webroot/wp-config.php | awk -F\' '{print$4}')
dbPassword=$(grep DB_PASSWORD $webroot/wp-config.php | awk -F\' '{print$4}')
dbDump="$bkpDir""$dbName"_$(date +'%F_%H_%M').sql

rUser=remoteuser
rHost=remoteserver
rDir=/remote/backup/directory/
rSSHport=22

email="[email protected]"
errorFile="$bkpDir"errors

rm -f "$errorFile"

mysqldump -u $dbUser -p$dbPassword $dbName > $dbDump || echo "$(date +'%F %T') MySQL backup of $dbName failed." >> "$errorFile"

tar -czf "$bkpDir"srvfail_$(date +'%F_%H_%M').tar.gz $webroot $dbDump || echo "$(date +'%F %T') Tar process failed." >> "$errorFile"

rsync -az $bkpDir -e "ssh -p $rSSHport" $rUser@$rHost:$rDir --delete || echo "$(date +'%F %T') rsync to $rHost failed." >> "$errorFile"

rm -f "$bkpDir"*$(date -d "$bkpAge days ago" +'%F')*

if test -f "$errorFile"; then
    cat "$errorFile" | mail -s "Backup process on $(hostname) failed" "$email"
fi

It will create two backup files, one for database dump in format that looks like “dbname__2021-12-01-06-00.sql” and one tar.gz file that will look like “wpbackup_2021-12-01_06-00.tar.gz”.

Script can be saved as wpbackup.sh and put in crontab to run at a certain time like 6:00AM.

0 6 * * * /path/to/script/wpbackup.sh >/dev/null 2>&1

or if you want to have output of it in case of errors

0 6 * * * /path/to/script/wpbackup.sh > /var/log/wpbackup.log 2>&1