Skip to content

Instantly share code, notes, and snippets.

@anutator
Last active January 3, 2023 18:12
Show Gist options
  • Select an option

  • Save anutator/1848cea9a316d5591ccc3201d91f5d2a to your computer and use it in GitHub Desktop.

Select an option

Save anutator/1848cea9a316d5591ccc3201d91f5d2a to your computer and use it in GitHub Desktop.
Linux

Использование массивов в gzip

Когда-то делала интересный вариант архивирования для Asterisk, который практически нигде в Интернете не описан, но очень удобен, потому что лаконичен. Я уверена, что мало кто так делал архивирование. Обычно в команде tar пишут простыню.

Дополню: дамп SQL не всегда целесообразно делать через mysqldump. Если база очень большая, нужно использовать новый способ через mysqlsh с автоматическим архивированием в zstd архивы. Этот способ намного быстрее и не требует блокировки.

Сначала создается массив astfiles, где перечисляем в каждой строке папку или файл, который нужно архивировать. Это удобно, потому что ненужные компоненты всегда можно закомментировать решеткой в начале строки. При этом сам элемент массива astfiles может быть переменной. Потом архируем вызывая этот массив. Вот часть из скрипта бэкапа:

bkdir="/backup"                  # каталог бэкапа
timestamp=$(date +%Y%m%d_%H%M)   # текущие дата и время
hostname=$(hostname -s)    # имя хоста (актуально для удаленных бэкапов когда с нескольких хостов собирают архивы)
astFile="astbackup-$hostname-$timestamp.tar.gz" # имя файла итогового архива бэкапа
sqlFile="sqldump-$timestamp.sql"                # имя файла дампа sql
astPath="$bkdir/$astFile"    # полный путь
sqlPath="$bkdir/$sqlFile"    # полный путь к дампу sql

# Снимаем дамп базы (одной или нескольких) SQL со статистикой звонков
mysqldump asterisk > $sqlPath

# Перечисляем каталоги или отдельные файлы для бэкапа в массиве astfiles. Ненужное закомментировать
astfiles=(    
# /etc/dahdi
$sqlPath              # дамп базы данных MariaDB со статистикой по звонкам
/etc/asterisk         # файлы конфигурации Asterisk
/etc/zabbix           # файлы конфигурации Zabbix
/etc/profile.d        # каталог с алиасами Linux, скриптами, настройками редактора vim и пр.
/etc/yum.repos.d      # каталог со списком репозиториев
/var/www/html/acdr    # каталог веб-сервера, скрипт статистики звонков
... тут любые каталоги и папки, ненужное закомментировать.
)

### отобразим на экране весь список каталогов и файлов, которые бэкапим
echo 'Список файлов и каталогов бэкапа:'
echo ${astfiles[@]}

### Сжатие всех каталогов и файлов в один архив.
tar czfp $astPath ${astfiles[@]} 

### Удаляем дамп базы CDR, т.к. он теперь есть в сжатом виде внутри общего архива.
# Работает, если даже несколько баз бэкапили, для этого ставим *
rm -f $bkdir/sqldump-*.sql

Далее у меня в файле описано копирование на сетевое хранилище NAS и удаление старых копий: Удаляем бэкапы старше keep_days. Удаляем старые бэкапы, количество которых превышает keep_copies. Отображаем статус и конечные каталоги.

Подсчитать время исполнения скрипта

Cколько времени занимает архивирование:

date=$(date '+%Y-%m-%d_%H-%M-%S')  # дата в читабельном формате
start=$SECONDS  # для подсчета, сколько времени занимает бэкап
..... 
тут всякие команды, например архивирование
.....
end=$SECONDS
echo "Длительность бэкапа youtrack: $((end-start)) секунд."

Архиватор zstd

Эффективно архивировать большие каталоги можно с помощью zstd — продвинутого архиватора от Facebook. Я тестировала — скорость реально намного выше стандартного gzip, сжимает лучше. Проверьте свою версию архиватора tar --version. Если она >= 1.31, то zstd уже поддерживается. Если нет (обычно в CentOS 7 старая версия 1.26), обновите из исходников:

cd
wget https://ftp.gnu.org/gnu/tar/tar-latest.tar.gz
tar xf tar-latest.tar.gz
cd tar-1.34/
./configure --prefix=/usr # предварительно должны быть установлены Development Tools или хотя бы пакеты make и gcc
make
sudo make install
cd ..
rm -rf tar*

Теперь мы можем использовать zstd при архивировании добавляя флаг --zstd:

tar -C /sites --zstd -cf /backup/youtrack/youtrack_$date.tar.zst youtrack

Но ещё удобнее использовать флаг -a (он же --auto-compress) для автоматического определения типа архива по суффиксу, т.е. достаточно будет правильно назвать имя файла архива, для zstd это .zst или .tzst. Пример:

tar -C /sites -caf /backup/youtrack/youtrack_$date.tzst youtrack

Примечание: флаг не имеет отношения к типу сжатия, а указывает на переход в определенный каталог перед сжатием. Мне надо сжать каталог /sites/youtrack, но чтобы внутри архива был не полный путь, а только каталог youtrack. Я заранее перехожу в каталоге /sites и указываю, что архивировать буду папку youtrack.

Устаревшая команда apt-key

Ошибка при выполнении sudo apt update:

35 packages can be upgraded. Run 'apt list --upgradable' to see them.
W: https://repo.skype.com/deb/dists/stable/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg),
see the DEPRECATION section in apt-key(8) for details.

Как добавлять ключ (старый вариант распространен в инструкциях в Интернете):

# Старый вариант → в /etc/apt/trusted.gpg, что неправильно
curl https://repo.skype.com/data/SKYPE-GPG-KEY | sudo apt-key add -
# Новый вариант
curl https://repo.skype.com/data/SKYPE-GPG-KEY | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/skype.gpg
# или
wget -O- https://download.webmin.com/jcameron-key.asc | sudo gpg --dearmor -o /usr/share/keyrings/jcameron-key.gpg 

Как починить, если ключ был ранее добавлен в trusted.gpg

Так он будет и в trusted.gpg, и в skype.gpg

# список ключей, посмотреть последний октет ключа для skype
bestann@pop-os:~$ apt-key list | grep -iB1 skype
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
      D404 0146 BE39 7250 9FD5  7FC7 1F30 45A5 DF75 87C3
uid           [ unknown] Skype Linux Client Repository <se-um@microsoft.com>

# экспортируем ключ в gpg
$ sudo apt-key export DF7587C3 | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/skype.gpg
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).

нужно ли это??? vim /etc/apt/sources.list.d/skype-stable.list Без этого и так ошибка пропадает.

deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/skype.gpg] https://repo.skype.com/deb stable main

Проблема с просмотром .epub в Foliate

После обновления домашней операционной системы !Pop_OS до 22.04 перестал работать Foliate (открывает книги .epub формата), переустановка не помогала, висел и не открывал файлы. Нашла решение проблемы на форуме — rm ~/.local/share/mime/mime.cache. Помогает, правда ненадолго. Снова приходится вводить эту команду.

Не работает sftp

Если не работает sftp, проверить путь в строке подсистемы sftp в файле конфигурации /etc/ssh/sshd_config. Указанный в строке файл должен существовать (проверить через ls -lah). У нас была ошибка, связанная с тем, что когда-то кто-то через Ansible закинул файл sshd_config на серваки, а путь к sftp-server был неправильный. В итоге вход на сервер по ssh работал, а вот файлы закинуть по sftp не удавалось.

Subsystem sftp /usr/libexec/openssh/sftp-server

Как починить репозитории CentOS8, которые сломались в феврале из-за окончания поддержки от RedHat:

sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*  
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
dnf clean all
dnf check
dnf check-update
dnf update
reboot

После этого можно остаться на Vault репозиториях либо обновиться до Oracle Linux 8 (инструкция есть на сайте Oracle), либо до Rocky Linux. Можно переключиться на репозитории для CentOS Stream, но я бы все-таки перешла на Oracle, как у нас в компании — хоть какие-то гарантии для серверов, которые работают в продакшн.

Не забываем, что CentOS7 все еще поддерживается, поэтому пока эту операционку не трогаем. Но надо иметь ввиду, что CentOS7 невозможно обновить до 8 версии, поэтому при установке новых Linux сразу рекомендую ставить Oracle 8. Кроме стандартного образа .iso у Oracle есть подготовленный образ для заливки на VMware. Если есть навыки работы с Terraform, можно автоматизировать установку. Отмечу, что в Oracle есть 2 версии ядра — своя версия и от RedHat. Я читала, что можно обновить ядро без перезагрузки, но, если честно, пока не тестировала, работает ли это в принципе.

Ссылки

https://github.com/orhun/kmon — управление ядром Linux и отслеживание активности

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment