Изменение часового пояса в Linux

Дата: 12.09.2015Метки:

Как правило, на Linux-серверах для настройки аппаратных часов используют время установленное по Гринвичу. Во время загрузки, Linux синхронизирует время с аппаратными часами с учетом сдвига для конкретной временной временной зоны. Абсолютное большинство программ в процессе работы используют время системных часов. После установки нового сервера важно указать правильные настройки часового пояса.

Делаем резервную копию файла с текущими настройками:

mv /etc/localtime  /etc/localtime-old

Создаем символическую ссылку на необходимый нам timezone:

ln -sf /usr/share/zoneinfo/Europe/Nederlands /etc/localtime

Для того чтобы убедиться что системное время соответствует выбранному часовому поясу, необходимо выполнить команду date. Результат выполнения команды:

Sat Sep 12 14:01:37 EEST 2015

Как вариант для изменения часового пояса в Debian можно использовать специальную утилиту. Для этого в терминале необходимо выполнит следующую команду:

dpkg-reconfigure tzdata

На экране появится псевдографический интерфейс, в котором необходимо выбрать регион и город.

Добавляем SWAP в Linux

Дата: 23.08.2015Метки:

При заказе виртуального сервера, часто для установки используется заранее подготовленные шаблоны, из-за чего в системе может отсутствовать SWAP-раздел. Что бы предотвратить ошибки вызванные переполнением RAM и обеспечит нормальное функционирование системы в будущем, необходимо добавить в систему дополнительное SWAP-пространство.

Как правило, в процессе установки под SWAP выделяют отдельный раздел на диске, но начиная с версии ядра Linux 2.6 работа SWAP-файла не уступает по производительности SWAP-разделу. Поэтому, в большинстве случаев я предпочитаю использовать SWAP-файл размещенный в корневом разделе диска. Это добавляет гибкости для обслуживания системы в будущем: я в любой момент с легкостью могу уменьшить или увеличить размер файла, при необходимости перенести на другой раздел или полностью удалить.

Ниже приведен пример скрипта для быстрой настройки SWAP:

if [ -f /swapfile ]; then
    echo "Swapfile already exists?"
    exit 1
fi

fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
sysctl vm.swappiness=10
sysctl vm.vfs_cache_pressure=50
echo "/swapfile   none    swap    sw    0   0" >> /etc/fstab
echo vm.swappiness=10 >> /etc/sysctl.conf
echo vm.vfs_cache_pressure=50 >> /etc/sysctl.conf

Параметр vm.swappiness указывает системе при каком минимальном проценте свободной памяти необходимо задействовать SWAP. Значение параметра может быть в пределах от 0 — 100. Но для улучшения производительности лучше установит значение данного параметра равным 10.

В случае использования SSD, необходимо уменьшит размер дискового кэша, для этого рекомендуется установить значение параметра vm.vfs_cache_pressure равным 50.

Иногда может возникнуть необходимость очистить SWAP без перезагрузки системы, для этого используем следующую команду:

swapoff -a && swapon -a

Для принудительной очистки системных кэшей используем команду:

sync

# Чистим pagecache:
echo 1 > /proc/sys/vm/drop_caches

# Чистим dentrie и inode кэши:
echo 2 > /proc/sys/vm/drop_caches

# Чистим pagecache, dentrie и inode кэши:
echo 3 > /proc/sys/vm/drop_caches

Как правило, я старюсь перегружать сервер только при крайней необходимости. Одна из причин, по которой я люблю Linux — если не течет память, то система абсолютно не нуждается в перезагрузке. Исключительно в целях профилактики чтобы очистить кеши и SWAP, на всех своих серверах в cron добавляю следующую команду:

0 0 * * * swapoff -a && swapon -a && sync && echo 3 > /proc/sys/vm/drop_caches

Задать минимальный размер свободной оперативной памяти после чего данные будут cсбрасываться в swap:

sysctl vm.min_free_kbytes=1024000

Синхронизация времени в контейнере KVM

Дата: 11.08.2015Метки:

Без регулярной синхронизации, в зависимости от нагрузки на хост-систему, время внутри KVM контейнера может быстро сбивается. Причина такого поведения вызвана архитектурой операционной системы и особенностями технологии виртуализации.

Большинство операционных систем используют время аппаратных часов только в процессе загрузки, после чего для подсчета времени используются системные часы. В условиях виртуализации процедуры отвечающие за системное время не могут работать также как на реальном железе, в результате часы внутри виртуальной машины начинают постепенно отставать.

Для поддержания времени в актуальном состоянии необходимо регулярно выполнять синхронизацию. Для этих целей можно использовать ntpd, но для контейнеров KVM предпочтительнее использовать синхронизацию системного времени с аппаратными часам kvm-clock.

Время kvm-clock соответствуют времени на хост-системе, таким образом нет необходимости использовать ntpd в каждой гостевой системе.

Для коррекции системного времени мы будем использовать аппаратное время:

/sbin/hwclock --hctosys

Для того что бы система регулярно каждый час синхронизировала часы, добавим задание в cron:

crontab -e
0 */1 * * * /sbin/hwclock --hctosys

 

Wget ERROR: The certificate is not trusted

Дата: 11.08.2015Метки:

Из-за отсутствия в системе корневых сертификатов, wget при попытке получить данные с сервера по протоколу https не может выполнить проверку подлинности сертификата. В результате мы получим такую ошибку:

ERROR: The certificate of 'openssl.org' is not trusted.

Для решения проблемы необходимо установить пакет ca-certificates:

apt-get install ca-certificates

Как вариант можно использовать опцию игнорирования проверки подлинности:

wget --no-check-certificate

Следует отметить, использовать данную опцию необходимо крайне осторожно, это потенциально опасно и может поставить под угрозу всю систему.

Backup данных на Яндекс Диск в Linux

Простой и одновременно надежный скрипт для создания и дальнейшего хранения бэкапов на Яндекс Диске. В примере ниже скрипт ежедневно в полночь делает дамп базы MySQL и создает архив всех файлов в заданном каталоге. Переменная TIME подобрана таким образом, чтобы бэкап за предыдущий день, кроме последнего числа месяца, затирался свежей резервной копией. При желании можно хранить бэкапы за каждый день, для этого измените формат даты на +%Y-%m-%d.

Создаем файл backup.sh, копируем в него следующие строки:

#!/bin/bash
# Задаем формат даты
TIME=`date +%Y-%b`

FILES=/tmp/www.$TIME.tar.gz
MYSQL=/tmp/mysql.$TIME.sql.gz

# Создаем архив файлов
tar -czf $FS_FILE -P /www

# Создаем архив базы MySQL
mysqldump -u backup --password=password --all-databases --ignore-table=mysql.event | gzip > $MYSQL

# Загружаем данные
curl --user user@yandex.ru:password -T "{$FILES,$MYSQL}" https://webdav.yandex.ru/

# Удаляем файлы
rm $FILES $MYSQL

Создадим пользователя для бэкапа данных MySQL, назначим права для SELECT и Lock Tables:

CREATE USER 'backup'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, LOCK TABLES ON * . * TO 'backup'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Даем скрипту права на запуск:

chmod 0700 backup.sh

Добавим задание в crontab:

crontab -e
# Запускаем скрипт каждый день в полночь
0 0 * * * /home/backup.sh

Backup данных на OneDrive в Linux

В Windows 10 клиент OneDrive установлен в системе по умолчанию и изначально для хранения данных сервис предоставляет 15GB бесплатного пространства. Дополнительно можно получить «вечных» +30GB за счет бонусных программ. В моем случае это были: привлечение новых пользователей, загрузка изображений с камеры и программа лояльности. Как видите, можно получить существенный объем хранилища совсем даром. Так почему бы не использовать это место с пользой? Связи с чем я решил отказаться от использования DropBox и перенести все важные данные в облако OneDrive.

Еще я использовал Яндекс Диск в качестве хранилища бэкапов для Linux сервера. Главное достоинство Яндекс Диска — возможность заливать файлы по протоколу WebDAV просто используя сurl. Что бы все важные данные хранились в одном месте, было принято решение перенести бэкапы в OneDrive.

Для работы с OneDrive в Linux без использования клиента необходимо использовать OneDrive API. Я не горел желанием самостоятельно его ковырять, поэтому был взят уже готовый скрипт скрипт bash-onedrive-upload. Для работы скрипта необходимо указать Client ID и Client secret, для этого в Microsoft account Developer Center необходимо создать новое приложение. В настройках приложения «Edit settings» — «API Settings» обязательно нужно выбрать опцию «Mobile or desktop client app: yes».

Заливаем скрипт bash-onedrive-upload на сервер, bash-json-parser необходимо скачать отдельно и положить в каталог /libs/json/. Даем право на запуск:

chmod 0700 onedrive-authorize onedrive-base onedrive-upload ./libs/json/bash-json-parser

В файле onedrive.cfg необходимо указать полученные Client ID и Client secret:

export refresh_token_file="${script_base_folder}/.refresh_token"

# Authentication config
export api_client_id="Client ID"
export api_client_secret="Client secret"

# Upload config
# Leave empty for root folder
export api_folder_id=""
export max_upload_threads=2

Если оставить параметр export api_folder_id пустым, то по умолчанию файлы будут заливаться в корень OneDrive. При желании можно задать любой вложенный каталог. Для этого из адресной строки веб-интерфейса OneDrive необходимо скопировать id этого каталога.

Запускаем скрипт onedrive-authorize. Скрипт попросит перейти в браузере по указанной ссылке, где вам необходимо разрешить доступ приложению к данным OneDrive. После отверждения откроется пустая страница, из адресной строки которой в окно терминала необходимо скопировать значение параметра code. Если вы все сделали правильно, то увидите в терминале нечто похожее на это:

./onedrive-authorize
Please open the following URL in your browser and follow the steps until you see a blank page:
https://login.live.com/oauth20_authorize.srf?client_id=0000000000000000&scope=wl.skydrive%20wl.skydrive_update%20wl.offline_access&response_type=code&redirect_uri=https://login.live.com/oauth20_desktop.srf

When ready, please enter the value of the code parameter (from the URL of the blank page) and press return
111111111-1111-1111-1111-111111111111
It seems like we have a refresh token, so we are ready to go

После чего можно использовать скрипт для загрузки файлов:

#загрузка файла в коневой каталог
./onedrive-upload file1

#загрузка файла в вложенный каталог
./onedrive-upload -f "path" file1

Скрипт создания бэкапа и загрузки на сервер OneDrive:

BACKUP_FILES="/home/www /etc/nginx"
MYSQL_USER="user"
MYSQL_PASS="password"
TMP_DIR=/tmp/backup
BACKUP_TAR=/tmp/backup.`date +%y.%m.%d`.tar

mkdir -p $TMP_DIR

# Backup files
tar -czf $TMP_DIR/fs.tar.gz -P $BACKUP_FILES

# Backup MySQL
for db in $(mysql -B -s -u $MYSQL_USER --password=$MYSQL_PASS -e 'show databases' | grep -v information_schema)
do
# Exclude database
    if [ $db != "performance_schema" ] && [ $db != "mysql" ]; then
    mysqldump -u $MYSQL_USER --password=$MYSQL_PASS $db | gzip > $TMP_DIR/mysql.$db.sql.gz
    fi
done

# Merge files
tar -cf - -C $TMP_DIR . > $BACKUP_TAR

# OneDrive upload
./onedrive-upload -f "Sites/backup" $BACKUP_TAR

rm -r $TMP_DIR $BACKUP_TAR

Скрипт создает отдельный файл дампа для каждой базы MySQL, за исключением служебных данных, которые прописаны в исключения.

Установка Google Chrome в Fedora

Дата: 01.08.2015Метки:

На данном примере я опишу установку Google Chrome в Fedora 25, в случае использования более ранних версий Fedora или RHEL/CentOS, вместо менеджера пакетов dnf необходимо использовать yum. Для поддержания браузера в актуальном состоянии лучший вариант установки Chrome из официального репозитория Google. Добавляем информацию о репозитории:

cat << EOF > /etc/yum.repos.d/google-chrome.repo
[google-chrome]
name=google-chrome - \$basearch
baseurl=http://dl.google.com/linux/chrome/rpm/stable/\$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
EOF

Для установки Google Chrome используем одну из следующих команд:

#Установка стабильной версии
dnf install google-chrome-stable

#Установка бета-версии
google-chrome-beta

#Установка dev-версии
dnf install google-chrome-unstable

Автоматическое монтирование дисков в Linux

Дата: 31.07.2015Метки:

Для начала необходимо узнать UUID монтируемого устройства. Для этого выполним команду:

blkid /dev/sdb1
/dev/sdb1: UUID="34e63ef2-fdf3-4330-8544-a5c732df779e" TYPE="ext4" PARTUUID="4ec77176-01"

Что бы диск автоматически монтировался при запуске системы необходимо добавить в fstab:

nano /etc/fstab
UUID=34e63ef2-fdf3-4330-8544-a5c732df779e /media/Storage	ext4	defaults	0 0

В случае монтирования ntfs разделов, необходимо указать тип файловой системы ntfs-3g.

Для того чтобы монтируемый диск отображался в сайдбаре nautilus, точка монтирования должна находится в каталоге /media, как это сделано в моем примере выше.

Загрузочная флешка с Fedora

Дата: 31.07.2015Метки:

Для начала определим имя присвоенное системой для нашей флешки. В терминале с правами root выполним следующую команду:

$ lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0 465.8G  0 disk 
├─sda1            8:1    0   500M  0 part /boot
└─sda2            8:2    0 465.3G  0 part 
  ├─fedora-swap 253:0    0   3.9G  0 lvm  [SWAP]
  ├─fedora-root 253:1    0    50G  0 lvm  /
  └─fedora-home 253:2    0 411.4G  0 lvm  /home
sdb               8:16   0 931.5G  0 disk 
└─sdb1            8:17   0 931.5G  0 part 
sdc               8:32   1     7G  0 disk 
├─sdc1            8:33   1   447M  0 part 
├─sdc2            8:34   1   6.2M  0 part 
└─sdc3            8:35   1  24.7M  0 part 
sr0              11:0    1  1024M  0 rom

Как видно из результата: имя устройства sdc, диск разбит на 3 логических раздела. Удаляем все существующие разделы:

fdisk /dev/sdX

Welcome to fdisk (util-linux 2.26.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d
Partition number (1-3, default 3): 1

Partition 1 has been deleted.

Command (m for help): d
Partition number (2,3, default 3): 2

Partition 2 has been deleted.

Command (m for help): d
Selected partition 3
Partition 3 has been deleted.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Записываем образ Fedora на диск:

dd if=/home/user/fedora.iso of=/dev/sdХ bs=8M
55+1 records in
55+1 records out
468713472 bytes (469 MB) copied, 76.9137 s, 6.1 MB/s

Дублирование ярлыка Google Chrome в доке

Дата: 31.07.2015Метки:

Если закрепить ярлык Chrome в доке, то после его запуска появляется еще один ярлык, отвечающий за активное окно. Данная проблема впервые была замечена мной в Fedora 22, но подобная ситуация может быть и в других дистрибутивах. Для исправления необходимо внести изменения в ярлык запуска.

Открываем с правами на редактирования файл:

sudo nano /usr/share/applications/google-chrome.desktop

Добавляем параметр StartupWMClass=Google-chrome-stable в следующие секции:

[Desktop Entry]
[NewWindow Shortcut Group]
[NewIncognito Shortcut Group]

Как вариант можно установить бета версию google-chrome-beta, там эта проблема исправлена.