Обновляем MySQL 5.7 —> 8.0 на Ubuntu 18.04 с панелью Vesta

Скачиваем deb-пакет, который при установке автоматически настроит репозиторий MySQL Community Edition от Oracle. По ссылке внизу «No, tanks, just begin my download». Нажмите на нее правой мышью и скопируйте ссылку на deb-пакет, т.к. ниже я вставил ту, что была акутальна на момент написания статьи.

cd /tmp
wget https://dev.mysql.com/get/mysql-apt-config_0.8.10-1_all.deb
apt install ./mysql-apt-config*.deb

В открывшемся консольном диалоге настройки выберите, что сейчас у вас MySQL 5.7 (скрипт сам это определит и предложит), потом — что хотите поставить 8.0, нажмите стрелку вправо для перевода фокуса на нижний «Ok» и Enter.

apt update
apt dist-upgrade
mysql_upgrade --force -uroot -p

Автозапуск Thunderbird или любой другой программы в трее на Linux

Есть графические программы, которые:
а) надо бы запускать автоматически при входе в ОС
б) не умеют сворачиваться в трей, а на весь экран их окно не нужно

У меня такая потребность возникла с Thunderbird. Почтовая база (папка ~/.thunderbird) весит более 14 ГБ, запуск Thunderbird происходит секунд 15, и это на SSD-диске. Поэтому получается, что я хочу открыть почтовый ящик, а приходится довольно долго ждать, пока запустится почтовая программа. При запуске ОС окно Thunderbird на весь экран тоже не нужно, в панели задач оно тоже не должно висеть и мешаться. Встала задача автоматически запускать Thunderbird в трее.

Для этого установим необходимые пакеты:
На Debian/Ubuntu: sudo apt install wmctrl kdocker

Теперь попробуем выполнить в терминале команду:
thunderbird & sleep 17 && kdocker -b -w `wmctrl -l | grep -i thunderbird | awk '{print $1}'`

Она запускает thunderbird, ждет 17 секунд, пока он запустится (измените 17 на время запуска программы у вас), затем находит окно, в названии которого есть слово «thunderbird» с буквами в любом регистре, и сворачивает его в трей. В трее появляется значок Thunderbird. Если развернуть его из трея и свернуть окно, то оно сворачивается обратно в трей, а закрытие окна закрывает его, как и без kdocker.
. Если нужно оставить программу рабочей, но убрать из трея, то нужно нажатием на значок в трее выбрать «Undock».

Далее нужно добавить команду /bin/bash -c "thunderbird & sleep 17 && kdocker -b -w `wmctrl -l | grep -i thunderbird | awk '{print $1}'`" в автозапуск. Например, в XFCE это делается так: Настройки —> Сеансы и запуск —> Автозапуск.

Теперь я могу за доли секунды развернуть окно Thunderbird. Вместо thunderbird можно запускать любую другую программу.

P.S. Пользователи GNOME, ненавидящие трей, который выпилили из их Гнома, могут попробовать как-то запускать программу на отдельном рабочем столе, который не является рабочим столом по умолчанию.

Как скомпилировать exe для Windows на Linux (C, C++)

Если вдруг понадобится на линуксе кросскомпилить бинарник под Windows, вот инструкция: Читать далее Как скомпилировать exe для Windows на Linux (C, C++)

SP Flash Tool Linux: стопорится на загрузке DA (Download Agent)

Прошивал телефон LG (Android) через SP Flash Tool с Linux (Ubuntu), SP Flash Tool запускал от root на всякий случай, хотя достаточно добавить пользователя в группу dialout: sudo adduser `whoami` dialout и перезайти в сеанс/перезагрузиться, чтобы root не требовался для работы с COM-портом.


Никаких драйверов в Linux устанавливать не нужно… То есть пропускаем огромное полотно инструкций для виндузятнигов!

Для запуска SP Flash Tool на Linux без терминала, мышкой:
Открываем папку с распакованным архивом SpFlashTool, правой мышью на файл flash_tool.sh, Свойства, ставим галку, что он исполняемый, ок, нажимаем на него 2 раза — программа прошивки запустилась.

Для запуска через терминал:
1) в терминале переходим в папку с распакованным архивом SpFlashTool:
cd "путь к папке в кавычках"
2) выполняем bash flash_tool.sh для запуска от пользователя или
su
bash flash_tools.sh
для запуска от root.
Все, программа запустилась!


Но при прошивке SP Flash Tool стопорился на «Download DA 100%», зависал, в консоли было написано:

connect DA end stage: 2, enable DRAM in 1st DA: 0
COM port is open. Trying to sync with the target...

Решение такое: Читать далее SP Flash Tool Linux: стопорится на загрузке DA (Download Agent)

Автоматическое обновление Ubuntu

UPD: приведенный ниже скрипт превратился в целую систему автообновлений с блокировкой выключения во время обновления: system-autoupdate


Замучился постоянно устанавливать обновления на сервер с Ubuntu, unnatended-upgrades не хочу конфигурировать, да и делает он не совсем то, что нужно, поэтому сделал автообновление системы скриптом. Его код ниже. Что делает скрипт, прописано в коде комментариями.
Читать далее Автоматическое обновление Ubuntu

Отключаем Plymouth в Ubuntu одной командой

for i in quite splash; do sudo sed -i "s/$i//g" /etc/default/grub; done; sudo update-grub
Это отключит графическую заставку при загрузке ОС, зато позволит легко попадать в консоль-tty (Alt+ctrl+F{1..12}) при незапуске иксов.

Проверяем работу прокси из командной строки Linux/UNIX

http_proxy="http://username:password@adress:port" https_proxy="http://username:password@adress:port" curl http://yandex.ru/internet | grep IP
(это команда в одну строку, где http_proxy, https_proxy - это переменные окружения)
Firefox (bug #1344551), Chromium, Lynx не умеют брать логин и пароль из переменной окружения.
Должен быть показан IP-адрес прокси-сервера.
можно прописать
export http_proxy="http://username:password@adress:port" https_proxy="http://username:password@adress:port"
в ~/.profile для задания параметров прокси для конкретного пользователя и в /etc/environment, чтобы их задать общесистемно.

Программы могут как читать эту переменную окружения, так и игнорировать ее. Различные графические конфигураторы прокси в KDE/Xfce/др. DE просто настраивают эту переменную окружения.
env | grep -i proxy — чтобы посмотреть текущие значения переменных окружения с параметрами прокси.

Настройка сети systemd-networkd (Ubuntu 18.04 и др.) на FirstVDS KVM

sudo nano /etc/systemd/network/50-1vds.network

[Match]
Name=ens*
[Network]
DHCP=no
# ping to Google DNS 8.8.8.8 is less than to Yandex 77.88.8.*
DNS=8.8.8.8
DNS=77.88.8.8
DNS=77.88.8.1
DNS=9.9.9.9
NTP=ntp.ubuntu.com
Gateway=10.0.0.1
[Address]
Address=212.109.197.147/32
Peer=10.0.0.1

212.109.197.147 замените на IP-адрес своего виртуального сервера (VPS, VDS) с виртуализацией KVM на хостинге FirstVDS (1vds). Name=ens* — проверьте, что в выводе команды ip a сетевой интерфейс называется, например, ens3, а не eth0; если eth0, то тогда: Name=eth*
sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd
Документация по systemd-networkd здесь.


Для простого DHCP конфиг такой:

[Match]
Name=en*
 
[Network]
DHCP=yes
DNS=8.8.8.8
#DNS=
NTP=ntp.ubuntu.com

Починил php на Ubuntu 18.04

Ubuntu 18.04, панель Vesta.
php -i
php --ini
По этим командам было видно, что из папок с симлинками на конфиги не подгружались конфиги, а все потому что при смене названия файлов в /etc/php/7.2/mods-available/ побились символические ссылки. Этот скрипт их пересоздает для всех установленных версий php, подключая все доступные расширения для модулей cgi, fpm и cli.

alias ls="/bin/ls"
for php_version in $(ls /etc/php/)
do
	rm -fv /etc/php/${php_version}/fpm/conf.d/* /etc/php/${php_version}/cli/conf.d/* /etc/php/${php_version}/cgi/conf.d/*
	for i in i in $(ls /etc/php/${php_version}/mods-available/)
	do
		ln -s /etc/php/${php_version}/mods-available/${i} /etc/php/${php_version}/fpm/conf.d/${i}
		ln -s /etc/php/${php_version}/mods-available/${i} /etc/php/${php_version}/cli/conf.d/${i}
		ln -s /etc/php/${php_version}/mods-available/${i} /etc/php/${php_version}/cgi/conf.d/${i}
	done
done

А ошибки были такого вида:
PHP Fatal error: Uncaught Error: Call to undefined function Symfony\Polyfill\Mbstring\iconv() in /usr/share/php/Symfony/Polyfill/Mbstring/Mbstring.php:534 (при запуске composer)

2018/03/28 23:51:08 [error] 11030#11030: *10 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function Symfony\Polyfill\Mbstring\iconv_strpos() in /home/admin/web/domain.com/public_html/vendor/symfony/polyfill-mbstring/Mbstring.php:363
Stack trace:
#0 /home/admin/web/domain.com/public_html/vendor/symfony/polyfill-mbstring/bootstrap.php(32): Symfony\Polyfill\Mbstring\Mbstring::mb_strpos('', '/json', 0, 'UTF-8')
#1 /home/admin/web/domain.com/public_html/vendor/laravel/framework/src/Illuminate/Support/Str.php(103): mb_strpos('', '/json')
#2 /home/admin/web/domain.com/public_html/vendor/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithContentTypes.php(34): Illuminate\Support\Str::contains('', Array)
#3 /home/admin/web/domain.com/public_html/vendor/laravel/framework/src/Illuminate/Http/Request.php(339): Illuminate\Http\Request->isJson()
#4 /home/admin/web/domain.com/public_html/vendor/laravel/framework/src/Illuminate/Http/Request.php(367): Illuminate\Http\Request->getInputSource()
#5 /home/admin/we" while reading response header from upstream, client: 109.173.112.243, server: domain.com, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9002", host: "domain.com"

Как сделать настоящее время фотографирование временем создания файла на диске?

Задача: у нас есть операционная система Linux (Ubuntu, Mint, ROSA, Arch, Debian, …) и папка с фотографиями, в этой папке много подпапок с фотографями, в подпапках могут быть еще подпапки до неограниченного уровня вложенности. В EXIF-данных большинства фотографий записано время их снятия по данным фотокамеры, однако файловый менеджер думает, что файл был создан в другое время, например, когда вы его откуда-то скопировали. Это неудобно, например, нельзя отсортировать фотографии по дате создания не выходя из файлового менедежра. Читать далее Как сделать настоящее время фотографирование временем создания файла на диске?