Hoher CPU-Verbrauch durch Tracker-Miner-Fs unter Ubuntu 20.04

In meiner Ubuntu-Installation habe ich das Problem, dass der Prozess Tracker-Miner-FS viel CPU verbraucht (konstant 5-10%) und einiges an Ram (ca. 200MB).

Der Tracker Miner ist Teil der Suche innerhalb von Gnome.

Während andere Nutzer davon berichten, dass ein hoher CPU-Verbrauch nur direkt nach dem Systemstart vorkam, bestand dieser bei mir konstant.

Analyse

Über tracker status lässt sich der aktuelle Status der Trackers abfragen. Hier konnte ich feststellen, dass die Indizierung lief, aber keine neuen Dateien dazukommen.

Über tracker daemon lassen sich die Indizierungsjobs anzeigen. Dort konnte ich sehen, dass der Prozess bei mir in einem über SSH eingebundenen Verzeichnis mit vielen Bildern festhängt.

Die aktuelle Konfiguration lässt sich über das folgende Kommando auslesen (ohne sudo ausführen):

gsettings list-recursively | grep -i org.freedesktop.Tracker | sort | uniq

Problemlösung

Indizierung im Batteriebetrieb

Da ich zum einen mit der Akku-Laufzeit meines Laptops nicht zufrieden bin, möchte ich die Indizierung im Batteriebetrieb abschalten. Dies ist über die folgenden Einstellungen möglich:

gsettings set org.freedesktop.Tracker.Miner.Files index-on-battery-first-time false
gsettings set org.freedesktop.Tracker.Miner.Files index-on-battery false

Siehe https://wiki.gnome.org/Projects/Tracker/Documentation/Configuration

Dateien von der Indizierung ausschließen

Wie oben erwähnt, hängt die Indizierung bei mir beim einlesen meine Fotos. Da ich nicht 10.000sende Fotos in meiner Suche benötige. Also möchte ich dieses Verzeichnis und seine Unterordner gerne von der Indizierung ausschließen.
Die folgenden Einstellungen definieren welche Dateien und Verzeichnisse ausgeschlossen werden:

org.freedesktop.Tracker.Miner.Files ignored-directories ['po', 'CVS', 'core-dumps', 'lost+found']
org.freedesktop.Tracker.Miner.Files ignored-directories-with-content ['.trackerignore', '.git', '.hg', '.nomedia']
org.freedesktop.Tracker.Miner.Files ignored-files ['*~', '*.o', '*.la', '*.lo', '*.loT', '*.in', '*.csproj', '*.m4', '*.rej', '*.gmo', '*.orig', '*.pc', '*.omf', '*.aux', '*.tmp', '*.vmdk', '*.vm*', '*.nvram', '*.part', '*.rcore', '*.lzo', 'autom4te', 'conftest', 'confstat', 'Makefile', 'SCCS', 'ltmain.sh', 'libtool', 'config.status', 'confdefs.h', 'configure', '#*#', '~$*.doc?', '~$*.dot?', '~$*.xls?', '~$*.xlt?', '~$*.xlam', '~$*.ppt?', '~$*.pot?', '~$*.ppam', '~$*.ppsm', '~$*.ppsx', '~$*.vsd?', '~$*.vss?', '~$*.vst?', 'mimeapps.list', 'mimeinfo.cache', 'gnome-mimeapps.list', 'kde-mimeapps.list', '*.directory']

Eigentlich sollte also eine .trackerignore-Datei in einem Verzeichnis ausreichen, um dieses zu ignorieren. Im ersten Versuch hat dies bei mir leider nicht wie gewünscht funktioniert und der Tracker ist dennoch in ein Unterverzeichnis abgetaucht.

Über GUI Konfigurieren

Aufruf über Einstellungen -> Suchen. Dort gibt es oben in der Titelleiste den Button „Orte durchsuchen“ über den Konfiguriert werden kann welche Verzeichnisse durchsucht werden sollen. Diesen Button habe ich die ersten Male auf der Einstellungsseite völlig übersehen.

Tracker komplett deaktivieren über Desktop-Files

Auf GitHub gibt es eine Beschreibung den Tracker komplett für euren Nutzer zu deaktivieren ohne an Systemdateien herumfummeln zu müssen:
(habe ich selbst noch nicht getestet)

tracker daemon -t
cd ~/.config/autostart
cp -v /etc/xdg/autostart/tracker-*.desktop ./
for FILE in tracker-*.desktop; do echo Hidden=true >> $FILE; done
rm -rf ~/.cache/tracker ~/.local/share/tracker

Tracker über Konfiguration deaktivieren

Ein weiterer Tipp zum Deaktivieren von Tracker ist die Konfiguration:

gsettings set org.freedesktop.Tracker.Miner.Files enable-monitors false
gsettings set org.freedesktop.Tracker.Miner.Files ignored-files "['*']"
gsettings set org.freedesktop.Tracker.Miner.Files crawling-interval -2

Insbesondere das Setzen des Crawling Intervalls auf -2 soll den Indexer abschalten.

Verzeichnis von Linux-Server unter Ubuntu 20.04 einbinden

Auf meinem Laptop möchte ich ein Verzeichnis von meinem Selbstbau-NAS einbinden. Da beides Linuxsysteme sind, verwende ich kein smb, sondern eine Freigabe über SSH.

Mit sshfs ist dies kein Problem. Ein entferntes Verzeichnis kann über SSH in einem beliebigen lokalen Verzeichnis eingebunden werden.

Für die Einbindung fand ich die folgende Anleitung sehr gut: https://askubuntu.com/a/925848/950658

Als Voraussetzung muss eine Key-basierte Authentifizierung zum Server eingerichtet sein. Hier ist beschrieben, wie diese eingerichtet wird: Link

Die Schritte in Kurzform:

sudo apt install sshfs autofs

Neue Zeile in /etc/auto.master hinzufügen:

/- /etc/auto.sshfs --timeout=30

Die neue Datei /etc/auto.sshfs anlegen:

/local_directory -fstype=fuse,allow_other,IdentityFile=/local_private_key :sshfs\#user@remote_host\:/remote_directory

Wichtig: Der # vor dem Benutzernamen muss bleiben und es muss der Pfad zum Private Key angegeben werden. Ich hatte versehentlich meinen Public Key angegeben (id_rsa.pub) und habe mich darüber gewundert warum ich trotzdem nach meinem Kennwort gefragt werde.

Ubuntu 20.04 LTS auf MacBook Pro (Retina, 15″, Ende 2013)

Installation

Ubuntu Image per LinuxLive USB Creator (https://www.linuxliveusb.com/) auf USB-Stick spielen.

Beim Start des Macbooks die Alt-Taste drücken, um in die Bootauswahl zu gelangen.

Installation mit „Third Party Treibern“ (sonst wird die Netzwerkkarte nicht erkannt)

Grafiktreiber

Grafikkarte ermitteln:
lspci | grep -i --color 'vga|3d|2d'
Ausgabe bei mir:
01:00.0 VGA compatible controller: NVIDIA Corporation GK107M [GeForce GT 750M Mac Edition] (rev a1)

Bei mir funktioniert der Treiber nvidia-driver-390 für die GeForce GT 750M sehr gut:

Eine manuelle Installation des nvidia-Treibers hat bei mir nicht gut funktioniert.

Helligkeit einstellen

Leider scheint es ein verbreitetes Problem zu sein, dass die Helligkeitseinstellungen des Displays nicht funktionieren. Bei mir erschien beim Druck auf F1 und F2 zwar die Helligkeitsregulierung, aber am Display veränderte sich nichts.

Der Tipp unter https://askubuntu.com/a/813067/950658 hat mir weitergeholfen.
Eine neue rc.local-Datei anlegen:
sudo vim /etc/rc.local
und dort folgendes eintragen:
setpci -v -H1 -s 00:01.00 BRIDGE_CONTROL=0

Zum vorab Test kann auch nur die zweite Zeile mit sudo-Rechten ausgeführt werden.

Tastatur

Da ich bisher nur Windows und Linux genutzt habe, kommt mir das Tastaturlayout des Macs komisch vor. Ich habe deshalb unter Ubuntu die Tastatur auf Deutsch statt Deutsch (Macintosh) gestellt. Das @ ist nun wieder auf AltGr + Q.

Leider fehlen einige Tasten auf der Mac-Tastatur. Besonders häufig vermisse ich die Entf-Taste, die über Fn + Backspace (vorheriges Zeichen löschen) ersetzt werden kann.

FN-Tasten (F1-F12)

Um die Funktionstasten nicht automatisch mit den FN-Funktionen belegt zu haben, sondern per Druck auf die FN-Taste zu aktivieren: https://askubuntu.com/a/7553/950658

Test mit:

echo 2 > /sys/module/hid_apple/parameters/fnmode

Permanente Änderung der FN-Tasten:

echo options hid_apple fnmode=2 | sudo tee -a /etc/modprobe.d/hid_apple.conf
sudo update-initramfs -u -k all
sudo reboot # optional

Webcam

Die Webcam des Macbooks wird standardmäßig nicht erkannt. Weder Skype noch Cheese finden eine passende Webcam.

Über den FacetimeHD Treiber (https://github.com/patjak/bcwc_pcie/wiki) kann die Webcam aktiviert werden.
Auf askubuntu (https://askubuntu.com/a/1215628/950658) sind die Schritte gut zusammengefasst:

sudo apt-get install git
sudo apt-get install curl xz-utils cpio
git clone https://github.com/patjak/facetimehd-firmware.git
cd facetimehd-firmware
make
sudo make install
cd ..
sudo apt-get install kmod libssl-dev checkinstall
git clone https://github.com/patjak/bcwc_pcie.git
cd bcwc_pcie
make
sudo make install
sudo depmod
sudo modprobe -r bdc_pci
sudo modprobe facetimehd
sudo nano /etc/modules
**add line "facetimehd", write out (ctl+o) & close**

Die Meldungen beim zweiten Ausführen von „make install“ können ignoriert werden.

Der Treiber hat einen Bug der den Laptop vom Betreten des Standby abhält. Deshalb muss das Modul vor dem Standby entfernt werden und danach wieder geladen werden. Dies erledigt das Script unter https://gist.github.com/mauron85/f764c88d2dc47af157487a7a318dd35b

Es muss in lib/systemd/system-sleep/suspend-modules abgelegt werden und mit sudo chmod a+x /lib/systemd/system-sleep/suspend-modules als ausführbar markiert werden. Dann könnt ihr facetimehd zu /etc/suspend-modules.conf hinzufügen.
Es wird außerdem empfohlen das Module bdc_pci zu blacklisten: „Don’t forget to add a file /etc/modprobe.d/blacklist-facetimehd.conf with the line blacklist bdc_pci to prevent bdc_pci from being auto-loaded.“ (Quelle)

Die Änderungen müssen nach einem Kernel-Update vermutlich erneut durchgeführt werden. Es kann auch ein Paket erstellt werden, das automatisch aktualisiert wird.
Die probiere ich vielleicht später mal aus: https://github.com/patjak/bcwc_pcie/wiki/Get-Started#setting-up-dkms-auto-compile-on-kernal-update

Seafile CLI sync certificate error

If you get the following error while syncing your seafile library with a server using a self signed certificate, you have to add the certficate to your certificate store.

Error:

urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)>

Solution:

  1. Retrieve the self-signed certificate (usually .pem or .crt)
  2. Make sure you have ca-certificates installed
    apt-get install ca-certificates
  3. Copy your certificate into the certificate folder
    cp cert.pem /usr/share/ca-certificates
  4. Activate the certificate
    dpkg-reconfigure ca-certificates

For more information see: http://unix.stackexchange.com/a/90607

Update Seafile Client 4.x to 5.x on Raspberry Pi

To update your Seafile Client (e.g. 3.1.7) on your Raspberry you just have to install the new packages of version 5.x.

1. Download packages

2. Install packages

dpkg -i libsearpc-3.0_3.0-latest-2_armhf.deb
dpkg -i ccnet_5.0.1-1_armhf.deb
dpkg -i seafile_5.0.1-1_armhf.deb
dpkg -i seafile-client_5.0.1-1_armhf.deb

As usual: Please, report if you have any issues and also report if it worked for you.

Update Seafile Server on Raspberry

  1. Get link of newest seafile server release from https://github.com/haiwen/seafile-rpi/releases (e.g. v4.4.0/seafile-server_4.4.0_pi.tar.gz)
  2. Switch to the seafile user: sudo su seafile
  3. Switch to the seafile home folder: cd ~
  4. Download the new release: e.g. wget https://github.com/haiwen/seafile-rpi/releases/download/v4.4.0/seafile-server_4.4.0_pi.tar.gz
  5. Unpack the new release: tar -xzf seafile-server_4.4.0_pi.tar.gz
  6. Follow the steps in http://manual.seafile.com/deploy/upgrade.html

Fix „SSLCertificateFile: file ‚…‘ does not exist or is empty“

After updating a certificate in Plesk I got the error message:

New configuration files for the Apache web server were not created due to the errors in configuration templates:
Syntax error on line 50 of /etc/apache2/plesk.conf.d/vhosts/xxx.conf: SSLCertificateFile: file ‚/opt/psa/var/certificates/cert-xxx‘ does not exist or is empty .

Detailed error descriptions were sent to you by email. Please resolve the issues and click here to generate broken configuration files once again or here to generate all configuration files

To fix this:

  1. Log into your server using ssh
  2. cd /opt/psa/var/certificates/
  3. Determine the new name of the certificate (first output of ls -lt) e.g. cert-yyyyy
  4. Create the missing certificate: cp cert-yyyyy cert-xxxxx
  5. Click on the link in the error message to regenerate all configuration files.

The error message should disappear.

Update Seafile Client 3.x to 4.x on Raspberry Pi

To update your Seafile Client (e.g. 3.1.7) on your Raspberry you just have to install the new packages of version 4.x.

1. Download packages

2. Install packages

dpkg -i libsearpc-3.0_3.0.4-1_armhf.deb
dpkg -i ccnet_4.0.6-1_armhf.deb
dpkg -i seafile_4.0.6-1_armhf.deb
dpkg -i seafile-client_4.0.6-1_armhf.deb

As usual: Please, report if you have any issues and also report if it worked for you.

Angular.js: Conditional filtering of list

I just spent 2 hours in finding a solution. In case anybody else needs this:

I want to filter a list. Not all the time, but conditional. In my case only if a checkbox is checked. If experimented with if and various custom filter solutions.

This is the very simple solution using unique from the ui.utils package:

HTML

<html>
<head>
  <script src="ui-utils/ui-utils.min.js"></script>
</head>
<body>
<input 
  type="checkbox" 
  ng-model='variable_with_field' 
  ng-true-value="field_to_be_filtered"
>
<tr 
  data-ng-repeat="release in 
  filtered = (releases | unique:variable_with_field )"
>
  <td>do some outputs</td>
</tr>
</body>
</html>

JS:

var clientApp = angular.module('clientApp', [ 'ui.utils' ]);
$scope.variable_with_field = false;

Initially the list is not filtered. If the checkbox is checked all duplicates are removed. If the duplicates should be removed already on load set $scope.variable_with_field on the field_name.

Seafile Client on Raspberry PI

The Raspberry PI is often used as a server for seafile. For this case there are ready-to-use binaries (http://seafile.com/en/download/) and good tutorials how to do so.

Unfortunately this is not the case for the client on raspberry. This article describes how to easily setup the seafile client on raspberry. It is also possible to install the client in parallel to the server on the same raspberry.

Make sure you have python installed:

sudo apt-get -y install python2.7 python-setuptools python-simplejson python-imaging sqlite3

Install the following packages. For the cli-version of the client only the first three are needed (and I have not yet tested the visual seafile-client):

Seafile 5.0.1 (current)

Seafile 4.0.x (old)

Seafile 3.1.x (old)

dpkg -i libsearpc-3.0_3.0.4-1_armhf.deb
dpkg -i ccnet_4.0.6-1_armhf.deb
dpkg -i seafile_4.0.6-1_armhf.deb
dpkg -i seafile-client_4.0.6-1_armhf.deb

These packages are created using checkinstall and following the steps on http://manual.seafile.com/build_seafile/linux.html

If you have dependency errors try to also install the following (however most should be only needed for the build):

sudo apt-get install autoconf automake libtool libevent-dev libcurl4-openssl-dev libgtk2.0-dev uuid-dev intltool libsqlite3-dev valac libjansson-dev libqt4-dev cmake libfuse-dev libssl-dev

Now you can start the seafile client:

# choose a folder where to store the seafile client settings e.g ~/.seafile-client
mkdir ~/.seafile-client            # create the settings folder
seaf-cli init -d ~/.seafile-client  # initialise seafile client with this folder
seaf-cli start

And sync your library:

seaf-cli sync -l "the id of the library" -s  "the url + port of server" -d "the folder where the library folder will be downloaded" -u "username on server" -p "password"

More information on the client usage is available on: https://seacloud.cc/group/3/wiki/seafile-cli-manual