====== CentOS советы ======
===== HowTo - Как сделать xyz? =====
==== CentOS 8 > Stream ====
Ошибка
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
Exited with code exit status 1
Решение
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Linux-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.epel.cloud|g' /etc/yum.repos.d/CentOS-Linux-*
Говорят лучше использовать vault.epel.cloud вместо vault.centos.org
==== Очистить файлы btmp и wtmp ====
Сломалась ротация логов, что привело к переполнению диска из-за файла ''/var/log/btmp''
Быстро очистить файл можно командой
# cat /dev/null > /var/log/btmp
==== killall: command not found ====
[[https://ss64.com/bash/killall.html|man killall]]
# yum install psmisc
==== Как надежно удалить файл ====
Через утилиту [[https://askubuntu.com/a/57580|shred]]. Она уже есть в пакете [[https://www.centos.org/forums/viewtopic.php?t=2907|coreutils]].
==== Обновление до 6.x_latest версии с CentOS 6.4/6.3/6.2/6.1/6.0 ====
Посмотреть версию ОС
# cat /etc/redhat-release
CentOS release 6.5 (Final)
Обновить
# yum clean all
# yum update glibc* yum* rpm* python*
# yum update
[dx@dx ~]# git --version
git version 1.7.12.4
Свежую версию Git можно установить из репозитория [[http://ghettoforge.org/|Ghettoforge]]
CentOS 5
rpm -Uvh http://mirror.symnds.com/distributions/gf/el/5/gf/x86_64/gf-release-5-8.gf.el5.noarch.rpm
CentOS 6
rpm -Uvh http://mirror.symnds.com/distributions/gf/el/6/gf/x86_64/gf-release-6-8.gf.el6.noarch.rpm
CentOS 7
http://mirror.symnds.com/distributions/gf/el/7/gf/x86_64/gf-release-7-8.gf.el7.noarch.rpm
[dx@dx ~]## yum provides git
git-1.7.1-3.el6_4.1.i686 : Fast Version Control System
Repo : base
Matched from:
git-2.6.0-1.gf.el6.i686 : Fast Version Control System
Repo : installed
Matched from:
Other : Provides-match: git
P.S. WTF, зачем мне может понадобиться новая версия git?! Всё что надо есть в EPEL!
Оказывается может. В CentOS, как и в Debian древний софт, как бивни мамонта, зато stable блин. Когда делал простой скрипт обновления phpmyadmin git ругался. fix https://davejamesmiller.com/blog/automatic-upgrades-for-phpmyadmin
==== Как распаковать содержимое rpm-пакета? ====
via http://michael-xiii.blogspot.ru/2011/11/rpm.html
Обычный rpm-пакет - это архив формата cpio вместе с некоторым набором метаданных.
Распаковать его можно
# rpm2cpio package.rpm | cpio -dimv
Параметры и флаги:
* имя rpm-файла, который необходимо распаковать и перенаправить вывод на архиватор cpio.
* -i - распаковать архив,
* -d - сохранить структуру директорий.
* -v - вывести список распакованных файлов,
* -m - наследовать даты модификаций извлекаемых файлов.
==== Как рестартнуть все сервисы без перезагрузки OS ====
via http://www.vds54.ru/help/kak-restartnut-vse-servisy-without-reboot
Если требуется перезагрузить все сервисы на CentOS без ребута самого сервера, то для простоты можно воспользоваться следующей командой:
LANG=C chkconfig --list | grep 3:on | awk '{system("/etc/init.d/"$1 " restart")}'
Посмотреть список сервисов, которые будут перезапущены таким образом можно следующим образом:
LANG=C chkconfig --list | grep 3:on
//P.S. будьте осторожны, так как /etc/init.d/networking и sshd будут так же перезапущены.//
==== Запустить скрипт через каждые 30 минут ====
Каждые 30 минут
*/30 * * * * /path/script.sh
Запускать в XX:00 и XX:30
00,30 * * * * /path/script.sh
==== Открываем crontab в nano ====
EDITOR=nano crontab -e
Делаем nano редактором по-умолчанию (добавляем в ''.bash_profile'').
# export EDITOR=/usr/bin/nano
==== Red Hat Enterprise Linux Release Dates ====
via https://access.redhat.com/articles/3078#RHEL6
==== Проверить скорость диска ====
Проверить скорость записи диска. Данная команда пишет 512 МБ на диск и потом показывает скорость. Важным ключом является conv=fdatasync. Она заставляет dd сделать sync и убедится что все данные действительно записаны на диск. Если не использовать этот ключ, то dd будет писать в память и бенчмарк получится неверный
# dd if=/dev/zero of=/tmp/speedtest bs=1M count=512 conv=fdatasync; rm -f /tmp/speedtest
[[https://4te.me/post/bash-tips-a-tricks/|via]]
==== Как создать swap файл? ====
Создаём swap-файл размером 256MB
# отключаем swap
swapoff -a
# создаём swap-файл размером 256 МБ
dd if=/dev/zero of=/swap bs=1M count=256
# инициализируем созданный swap-файл
mkswap /swap
# включаем swap
swapon -a
Не забываем про chmod иначе будет **insecure permissions 0644, 0600 suggested**.
# chmod 600 /swap
Добавляем информацию о swap в файл ''/etc/fstab''
/swapfile swap swap defaults 0 0
Вариант для ленивых - https://github.com/Cretezy/Swap
# wget https://raw.githubusercontent.com/Cretezy/Swap/master/swap.sh -O swap
# sh swap 1G
Если возникла ошибка **msgid "memory exhausted by input buffer of size %zu bytes (%s)"**
Неправильно
dd if=/dev/zero of=/swapfile bs=1G count=4
dd: memory exhausted by input buffer of size 1073741824 bytes (1.0 GiB)
Правильно
dd if=/dev/zero of=/swap bs=1M count=4000
fallocate НЕ НАДО использовать для создания swap
[[http://manpages.ubuntu.com/manpages/xenial/en/man8/mkswap.8.html|mkswap manpage]]
Note that a swap file must not contain any holes. Using cp(1) to create the file is not acceptable. Neither is use of fallocate(1) on file systems that support preallocated files, such as XFS or ext4, or on copy-on-write filesystems like btrfs. It is recommended to use dd(1) and /dev/zero in these cases. Please read notes from swapon(8) before adding a swap file to copy-on-write filesystems.
[[http://manpages.ubuntu.com/manpages/xenial/en/man8/swapon.8.html|swapon manpage]]
You should not use swapon on a file with holes. This can be seen in the system log as
swapon: swapfile has holes.
The swap file implementation in the kernel expects to be able to write to the file directly, without the assistance of the filesystem. This is a problem on preallocated files (e.g. fallocate(1)) on filesystems like XFS or ext4, and on copy-on-write filesystems like btrfs.
==== Как очистить swap и кэш памяти (cached memory) ====
**Очистить swap**
swapoff -a && swapon -a
Куда исчезают при этом данные? :)
**Очистить кэш памяти**
Начиная с Linux ядра 2.6.16 у администраторов системы появилась возможность принудительной очистки системных кэшей (https://linux-mm.org/Drop_Caches)
Очистить 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
Бытует мнение, что перед выполнением необходимо запустить команду sync. Проверить FIXME
==== Вывести список установленных rpm из определенного репозитория ====
via http://stackoverflow.com/questions/4609933/how-to-list-installed-packages-from-a-given-repo-using-yum
yum list installed | grep reponame
==== Изменить hostname в CentOS ====
В файл ''/etc/sysconfig/network'' добавить
HOSTNAME="foobar.domain.com"
Выполнить команду
# hostname foobar.domain.com
В файл ''/etc/hosts'' добавить
127.0.0.1 localhost localhost.localdomain
192.168.13.77 foobar.domain.com
# /etc/init.d/network restart
==== Количество соединений с одного IP ====
Количество соединений с одного IP
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
netstat -an | grep 80 | wc -l
==== Есть ли аналог --no-install-recommends в CentOS? ====
Нет.
https://www.linux.org.ru/forum/general/10213374
==== В CentOS старый PHP и он не обновляется ====
Joomla требует минимум 5.3.10
# View the Changelog
# Because CentOS and the upstream vendor have backported security patches, the version numbers can often be misleading when you look for CVE fixes. Checking the changelog of a package is a good way to see if the fix has been implemented. Once again, rpm comes to the rescue.
rpm -q --changelog
===== Ошибки =====
==== /usr/sbin/logtail: No such file or directory ====
yum install logcheck
==== /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory ====
Узнать где доступна либа
# yum provides ld-linux.so.2
glibc-2.17-260.el7.i686 : The GNU libc libraries
Repo : base
Matched from:
Provides : ld-linux.so.2
Установка пакета
# yum install glibc.i686
Для старых систем
# yum install glibc.i386
Для Debian
# apt-get install ia32-libs
==== Another app is currently holding the yum lock ====
Ошибка **Another app is currently holding the yum lock; waiting for it to exit...**
# ps aux | grep yum
# kill yum-PID
Если не помогло
# rm /var/run/yum.pid
# yum update
==== iptables: line 268: restorecon: command not found ====
Ошибка
iptables: Saving firewall rules to /etc/sysconfig/iptables: /etc/init.d/iptables: line 268: restorecon: command not found
Решение
# yum install policycoreutils
==== error: cannot open Packages database in /var/lib/rpm ====
Ошибка
rpmdb: Thread/process 23378/140496680339200 failed: Thread died in Berkeley DB library
error: db3 error(-30974) from dbenv->failchk: DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db3 - (-30974)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:
Error: rpmdb open failed
Как починить
# db_recover -h /var/lib/rpm
# yum clean all
Или так
# mv /var/lib/rpm/__db* /tmp/
# rpm --rebuilddb
# yum clean all
==== Из Mac OS (Linux?) нет доступа к Samba (CentOS 7) ====
**Ошибка**
* https://bugzilla.redhat.com/show_bug.cgi?id=1327951
* https://bugzilla.samba.org/show_bug.cgi?id=11849
* https://bugs.centos.org/view.php?id=10935
**Как исправить**
Установить предыдущую версию Samba через ''yum downgrade''
Либо берем RPMы здесь ftp://mirror.switch.ch/pool/4/mirror/centos/7.2.1511/updates/x86_64/Packages/ и делаем ''rpm -i pkg.rpm''
Список необходимых пакетов
libsmbclient-4.2.3-12.el7_2.x86_64.rpm
libwbclient-4.2.3-12.el7_2.x86_64.rpm
samba-4.2.3-12.el7_2.x86_64.rpm
samba-client-libs-4.2.3-12.el7_2.x86_64.rpm
samba-common-4.2.3-12.el7_2.noarch.rpm
samba-common-libs-4.2.3-12.el7_2.x86_64.rpm
samba-common-tools-4.2.3-12.el7_2.x86_64.rpm
samba-libs-4.2.3-12.el7_2.x86_64.rpm
==== yum, curl, php, java, etc не работают, illegal instruction ====
* https://www.centos.org/forums/viewtopic.php?f=13&t=58002
* https://bugs.centos.org/view.php?id=10930
* http://g33kinfo.com/info/archives/6564
Ошибка возникает если
* Установлен RHEL/CentOS 6.8
* Виртуальная машина Xen
* Установлен флаг AES
К примеру Wordpress при этом в режиме nginx+php-fpm падает с ошибкой 502 Bad Gateway.
Как исправить работу Wordpress (nginx+fpm)
Добавить строку
putenv("NSS_DISABLE_HW_AES=1");
в файлы
index.php
wp-cron.php
wp-load.php
/wp-admin/admin.php
Либо добавляем в конфиг fpm пуля переменную
env[NSS_DISABLE_HW_AES] = 1 в файл /etc/php-fpm.d/admin.conf
http://www.sctechgroup.com/2016/06/07/segfaults-libfreeblpriv3-upgrading-rhel-6-8-illegal-instruction/
==== 3.10.0-327.el7 crashes on every boot ====
initcall_blacklist=clocksource_done_booting
* https://bugzilla.redhat.com/show_bug.cgi?id=1285235
* https://bugs.centos.org/view.php?id=9860
* https://arrfab.net/posts/2015/Dec/15/kernel-3100-327-issue-on-amd-neo-processor/
Передать ядру при загрузке параметр ''initcall_blacklist=clocksource_done_booting kernel''
Добавить в файл ''/etc/default/grub'' такой же параметр
...
GRUB_CMDLINE_LINUX="rhgb quiet initcall_blacklist=clocksource_done_booting"
...
Выполнить
# grub2-mkconfig -o /etc/grub2.conf
==== -bash: netstat: command not found ====
Опа, netstat выпилили из дефолта
# yum whatprovides netstat
net-tools-2.0-0.17.20131004git.el7.x86_64 : Basic networking tools
Repo : @base
Matched from:
Filename : /usr/bin/netstat
Окэй Google yum
# yum install net-tools
==== Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again ====
* https://community.hpcloud.com/article/centos-63-instance-giving-cannot-retrieve-metalink-repository-epel-error
* https://www.centos.org/forums/viewtopic.php?t=1420
Ошибка **Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again**
Решение
# yum --disablerepo=epel -y update ca-certificates
==== Куда пропало место на диске? ====
Если ''df -h'' и ''df -i'' в норме, а свободного места нет проверьте ''/usr/sbin/lsof | grep deleted''
* [[https://debian.pro/1654|Кончилось место на сервере? А файлов меньше чем занятого места?]]
* http://blogosys.ru/2015/02/rashozhdenie-v-znacheniyah-du-i-df/
* http://shurshun.ru/linux-df-neverno-otobrazhaet-svobodnoe-mesto/
* http://www.ivankuznetsov.com/2010/02/no-space-left-on-device-running-out-of-inodes.html
==== atomic-release, The GPG keys listed for ====
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID 4520afa9: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY.art.txt
The GPG keys listed for the "CentOS / Red Hat Enterprise Linux 6 - atomicrocketturtle.com" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.
Скачиваем новый GPG ключ
# wget https://www.atomicorp.com/RPM-GPG-KEY.atomicorp.txt
# mv RPM-GPG-KEY.atomicorp.txt /etc/pki/rpm-gpg/RPM-GPG-KEY.atomicorp.txt
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY.atomicorp.txt
либо так
# rpm --import https://www.atomicorp.com/RPM-GPG-KEY.atomicorp.txt
Редактируем файл ''/etc/yum.repos.d/atomic.repo''
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY.atomicorp.txt
file:///etc/pki/rpm-gpg/RPM-GPG-KEY.art.txt
Если не помогло, то отключаем проверку GPG
gpgcheck=0
либо доверяем настроить .repo скрипту Atomic
# wget -q -O - http://www.atomicorp.com/installers/atomic | sh
==== su mysql - account is currently not available ====
[[http://wiki.rfremix.ru/index.php/Запуск_команд_от_имени_системных_пользователей|http://wiki.rfremix.ru/index.php/Запуск_команд_от_имени_системных_пользователей]]
Это происходит из-за того, что у этих пользователей в качестве шела указан /sbin/nologin. Можно воспользоваться параметром -s для указания другого шела:
su - nobody -s /bin/sh
==== /usr/bin/ld: cannot find -lz ====
Ошибка **/usr/bin/ld: cannot find -lz**
Решение
# yum install zlib-static
Ошибка **/usr/bin/ld: cannot find -lpthread**
Решение
yum install glibc-static
Ошибка ''/usr/bin/ld: cannot find -lstdc++''
Решение
yum install libstdc++-static
==== Не запускается sshd: /var/empty/sshd must be owned by root ====
Ошибка
# service sshd start
/var/empty/sshd must be owned by root and not group or world-writable
Решение
# chown root:root /var/empty/sshd
# chmod 711 /var/empty/sshd
# /etc/init.d/sshd start
==== Another MySQL daemon already running with the same unix socket ====
# service mysqld stop
# rm -rf /var/lib/mysql/mysql.sock
# service mysqld start
В итоге, недавно в багтреке mysql я нашел ту же проблему. Во всем виновато обновление centos. После обновления папка /tmp имеет неверные права, из-за чего не удаляется корректно сокет, а также не создается. Решение такое: 1) Удаляем сокет (решение выше по ссылке) 2) Меняем chmod 777 -R /tmp 3) Перезагружаем сервер. Если после этого сервер баз данных поднялся сразу, значит проблема решена* http://stackoverflow.com/questions/20407292/centos-another-mysql-daemon-already-running-with-the-same-unix-socket * http://kb.sp.parallels.com/en/119334 * https://bugs.mysql.com/bug.php?id=71086 * https://bugzilla.redhat.com/show_bug.cgi?id=1037650 ==== Warning: SuexecUserGroup directive requires SUEXEC wrapper ==== Появилось после установки prefork вместо itk
# chown root:root /usr/sbin/suexec
# chmod 4755 /usr/sbin/suexec
===== Ссылки =====
* [[http://redhat-club.org/2011/%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-nat-%D0%B2-rhel-centos-fedora|Настройка NAT в RHEL, CentOS, Fedora]]
* [[https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security_Guide/sect-Security_Guide-IPTables-IPTables_Control_Scripts.html|IPTables Control Scripts]]
* [[http://forum.clodo.ru/index.php/topic/88-%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%B5%D0%B9%D1%88%D0%B0%D1%8F-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-iptables-%D0%BF%D0%BE%D0%B4-centos/|Простейшая настройка iptables под CentOS]]
* https://www.linode.com/wiki/index.php/CentOS_IPTables_sh
* Artwork: https://projects.centos.org/trac/artwork/wiki/Extras, http://fedora.nicubunu.ro/centos/