Показаны сообщения с ярлыком centos. Показать все сообщения
Показаны сообщения с ярлыком centos. Показать все сообщения

четверг, 31 октября 2013 г.

При замене mysql на mariadb вылезает проблема с зависимостями других пакетов от mysql-libs

Второй раз наткнулся на эту траблу - решил записать на будущее для себя. Суть проблемы - использую в centos репозиторий centalt. Из него mysql обновляется и заменяется на mariadb. При этом дальше при установке некоторых пакетов, которые требуют mysql-libs, возникают проблемы, что они не находят библиотек.
Вот такая ошибка получается
Processing Dependency: libmysqlclient.so.16()(64bit) for package: asterisk-mysql-1.8.20.0-1.el6.x86_64
Package mysql-libs-5.1.69-1.el6_4.x86_64 is obsoleted by mariadb-libs-5.5.33a-1.el6.x86_64 which is already installed

Для решения ставлю из репо remi пакет compat-mysql51-5.1.54-1.el6.remi.x86_64.rpm

rpm -ihv http://rpms.famillecollet.com/enterprise/6/remi/x86_64/remi-release-6-2.el6.remi.noarch.rpm
yum --enablerepo=remi install compat-mysql51

И после этого все ок.

четверг, 14 февраля 2013 г.

centos link teaming (bonding)

Запишу себе на будущее, чтобы не забыть.
Чтобы объединить порты линки в линуксе в один, надо сделать следующее:


Загрузить нужный модуль и настроить его. Для этого в файл /etc/modprobe.d/bonding.conf вписать
alias bond0 bonding
options bond0 miimon=100 mode=4 lacp_rate=1
Тут используется mode=4 (который обычный 802.3ad), а так их много разных режимов.
Далее надо настроить сетевухи и специальный интерфейс, который будет их объединять.
В сетевухах пишем:

ifcfg-eth0:

DEVICE=eth0
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
USERCTL=no
ETHTOOL_OPTS="speed 1000 duplex full autoneg on"
MASTER=bond0
SLAVE=yes

ifcfg-eth1:

DEVICE=eth1
BOOTPROTO=none
NM_CONTROLLED=no
ONBOOT=yes
USERCTL=no
ETHTOOL_OPTS="speed 1000 duplex full autoneg on"
MASTER=bond0
SLAVE=yes

Ключевые тут последние две строки, третья с конца (ethtool_opts) обеспечивает работу интерфейса на гигабите, а не на 100Мб, как он по умолчанию, гад такой, поднимается.

Ну и итоговый интерфейс bond0

ifcfg-bond0:

DEVICE=bond0
BOOTPROTO=dhcp
NM_CONTROLLED=no
ONBOOT=yes
USERCTL=no
Собственно тут ничего такого, просто интерфейс, который перечислен в качестве мастера физическим сетевухам и у меня тут он получает адрес автоматом.

На стороне свитча (в частности тут на циске) создаем port-channel интерфейс и аттачим к нему пару портов, куда приходят эти сетевухи.
Типа как-то так:
interface Port-channel1
 description Teamed link to centos
 switchport mode trunk
!
interface GigabitEthernet1/0/5
 description link1
 switchport mode trunk
 channel-group 1 mode active
!
interface GigabitEthernet1/0/6
 description link2
 switchport mode trunk
 channel-group 1 mode active
!
Ну вроде как и все. Просто, но тем не менее, чтобы не искать, если вдруг понадобится :)


среда, 10 августа 2011 г.

centos usb drive automount (udev)

Настроил тут на работе хост под торренты на centos 6. Т.к. временами к нему подключается usb-винт для скидывания информации, то захотелось настроить так, чтобы этот диск автоматически монтировался куда надо, а при выдергивании - размонтировался. Поиск в инете долго не мог дать мне искомого, поэтому запишу себе на будущее, как это делается.

Делается средствами udev, достаточно просто. Есть правило, которое реагирует на все диски /dev/sd[e-z][1-9] (потому как четыре диска sda,sdb,sdc,sdd в системе уже присутствуют). Для такого диска программой blkid загружается информация о нем (нас интересуют метка диска и файловая система), на основе метки диска задается директория, куда он будет смонтирован. На основе файловой системы формируются опции для монтирования и команда монтирования.

Дальше срабатывает команда монтирования.

При извлечении диска он отмонтируется и директория, куда он монтировался, удаляется. Все просто и понятно :)

KERNEL!="sd[e-z][1-9]", GOTO="ro_auto_mount_end"

# Import FS infos
IMPORT{program}="/sbin/blkid -o udev -p %N"

# Get a label if present, otherwise specify one
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="storage-%k"

# Global mount options
ACTION=="add", ENV{mount_options}="rw,noauto,user,noexec,nodev,noatime,uid=t,gid=t"

# Filesystem-specific mount options
ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", ENV{mount_options}="$env{mount_options},umask=002"
ACTION=="add", ENV{ID_FS_TYPE}=="msdos", ENV{mount_options}="$env{mount_options},umask=002, quiet"
ACTION=="add", ENV{ID_FS_TYPE}=="vfat", ENV{mount_options}="$env{mount_options},umask=002,flush,quiet"
ACTION=="add", ENV{ID_FS_TYPE}=="xfs", ENV{mount_options}="norecovery,$env{mount_options}"
ACTION=="add", ENV{ID_FS_TYPE}=="jfs", ENV{mount_options}="nointegrity,$env{mount_options}"
ACTION=="add", ENV{ID_FS_TYPE}=="reiserfs", ENV{mount_options}="nolog,$env{mount_options}"

# Create the mount point
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}"

# Mount the device

# Special Mounts for ext3, ext4 and hfs

# Mount ext2 and ext3 as ext2
ACTION=="add", ENV{ID_FS_TYPE}=="ext2|ext3", RUN+="/bin/mount -t ext2 -o $env{mount_options} /dev/%k /media/%E{dir_name}", GOTO="mount_complete"

# Mount hfs and hfsplus as hfsplus
ACTION=="add", ENV{ID_FS_TYPE}=="hfs|hfsplus", RUN+="/bin/mount -t hfsplus -o $env{mount_options} /dev/%k /media/%E{dir_name}", GOTO="mount_complete"

# Execute mount with no fstype specified (auto)
ACTION=="add", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}"

# Clean up after removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"

# Exit
LABEL="mount_complete"
LABEL="ro_auto_mount_end"

Я в процессе поиска решения модифицировал под себя подобный набор правил udev, все заработало, но хотелось еще красивого создания/удаления точек монтирования при условии, что диск может и не иметь метки и тогда он монтируется по имени своего устройства. И тут наткнулся на вот этот набор правил, который радостно и подогнал под себя. Где взял - уже не помню...

понедельник, 23 августа 2010 г.

dynamic dns

Недавно прочитал статью http://habrahabr.ru/blogs/linux/101380/ и в очередной раз загорелся сделать у себя на домашнем серваке динамическое обновление имени в ДНС в своём домене. А то до сих пор использовал dyndns для этого. Как оказалось, настроить всё довольно просто.
Сначала генерим ключик для общения клиента с ДНС сервером
/usr/sbin/dnssec-keygen -a HMAC-MD5 -b 512 -n HOST h.olegk.ru
Потом полученный ключ прописываем в настройках ДНС-сервера

key "h.olegk.ru" {
        algorithm       hmac-md5;
        secret          "....";
};
zone "olegk.ru" IN {
        type master;
        file "dynupdated/olegk.ru";
        allow-update { key h.olegk.ru; };
};
И на клиенте (на домашнем сервере) прописываем простейший скрипт, который тупо запускается через некоторые интервалы времени и перезаписывает A-запись домашнего сервака в домене (я поставил каждые 2 минуты - нагрузка пока позволяет :)).
#!/bin/sh
IFACE="eth2"
TTL=60
SERVER=ns1.olegk.ru
HOSTNAME=h.olegk.ru
ZONE=olegk.ru
KEYFILE=/etc/namedb/Kh.olegk.ru.+157+63926.private

new_ip_address=`/sbin/ifconfig $IFACE | grep "inet addr:" | awk '{print $2}' | awk -F ":" '{print $2}'`
new_ip_address=${new_ip_address/ /}

nsupdate -v -k $KEYFILE << EOF
server $SERVER
zone $ZONE
update delete $HOSTNAME A
update add $HOSTNAME $TTL A $new_ip_address
send
EOF
До кучи настроил потом еще и запись dhcp-сервером всех узлов домашней сетки в отдельную DNS-зону, чтобы можно было не запоминать внутренний IP какого-нибудь домашнего второстепенного сервака (например того же ноута с убунтой, который заливает мне фотки в пикасу или мониторит квартиру камерой). Для этого потребовалось всего лишь добавить в настройки dhcp-сервера
ddns-update-style interim;
ignore client-updates;
update-static-leases true;

key "h.olegk.ru" {
        algorithm       hmac-md5;
        secret          "...";
}

zone net.olegk.ru. {
        primary ns1.olegk.ru;
        key h.olegk.ru;
}
Вот так всё просто. Красота!


P.S.: как в блоггер вставлять куски кода, чтобы было красиво???

пятница, 6 августа 2010 г.

обновление centos 4.8 до 5.5

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

В общем-то все просто. Если точно следовать мануалу вот отсюда - http://planet.admon.org/howto/update-centos-4-to-centos-5-remotely/, то проблем вообще не будет :)
Я по сути по инфе оттуда все и сделал. Процесс прошел на ура, проблемы были связаны только с моими отступлениями от мануала :).

Скопипастю текст целиком на случай гибели исходной статьи:


Update CentOS 4 to CentOS 5 remotely

I just successfully updated my Dell PowerEdge 1850 from CentOS 4.8 to CentOS 5.4, luckily the issues I faced were not so rare. The steps I used are listed below, may it helpful for you as well! Although this post is mainly intended for CentOS it should work on RHEL systems as well.
Before you start, A word of advice i believe most experienced RHEL/CentOS users will show you regarding what you’re thinking:
Upgrade between minor versions (i.e. CentOS 5.2 -> 5.3 -> 5.4, or even 5.0 -> 5.4) YES
Upgrade between major system versions (i.e. CentOS 4.8 to CentOS 5.4) NO
As far as I recall, not even Red Hat recommends this – although they do guarantee the miner updates will go smoothly. Even if you manage to hammer that 4.8 to 5.4 upgrade into place, you might end up with a mess that will be very difficult to maintain. Before processing the system update, it’s suggested to create a backup!
If you are currently running a version of RHEL/CentOS earlier than 4.8 (cat /etc/redhat-release), then please do a proper ‘yum update‘ and get your current system updated to 4.8 before we start.
Then the first thing we need to do is to make sure none of our core binaries, libraries or other content is immutable as it causes package installation failures. If you use immutable bits on system paths then you should run these commands:

chattr -Ria /bin
chattr -Ria /etc
chattr -Ria /etc
chattr -Ria /include
chattr -Ria /lib
chattr -Ria /sbin
chattr -Ria /usr/bin
chattr -Ria /usr/include
chattr -Ria /usr/lib
chattr -Ria /usr/libexec
chattr -Ria /usr/local/bin
chattr -Ria /usr/local/include
chattr -Ria /usr/local/lib
chattr -Ria /usr/local/sbin
chattr -Ria /usr/sbin
chattr -Ria /usr/share
chattr -Ria /var/lib
chattr -Ria /var/lock
chattr -Ria /var/log
chattr -Ria /var/run
chattr -Ria /var/spool/repackage

Once finished, go ahead and have a quick run through of cleaning up yum cache, double check that any pending updates are installed and rebuild the rpmdb:

yum clean all && yum update

If you run into any dependency issues for packages that are not essential, such as syslinux and lftp then you can either exclude them or better just remove them. If the denpency issue is openssh-server related, you can enable telnet login during update by modifing /etc/xinetd.d/telnet.

rpm -e lftp syslinux mkboot

OR (but not recommended)

yum update --exclude=syslinux --exclude=lftp --exclude=mkboot

At this point you should be able to run a ‘yum update‘ command with optional exclude and receive no errors. Now we are ready to get going, please google around, find and download these packages, they mostly available at CentOS official mirror site:

# ls
centos-release-5-4.el5.centos.1.i386.rpm    python-elementtree-1.2.6-5.el4.centos.i386.rpm
centos-release-notes-5.4-4.i386.rpm       python-elementtree-1.2.6-5.el5.i386.rpm
kernel-2.6.18-164.el5.i686.rpm            python-elementtree-1.2.6-5.i386.rpm
kernel-devel-2.6.18-164.el5.i686.rpm      python-sqlite-1.1.7-1.2.1.i386.rpm

We need to go ahead and setup the centos-release package as follows:

rpm -Uhv centos-release-*.rpm

If you see that CentOS-Base.repo was created as /etc/yum.repos.d/CentOS-Base.repo.rpmnew then move it to the right place:

# mv /etc/yum.repos.d/CentOS-Base.repo.rpmnew /etc/yum.repos.d/CentOS-Base.repo

Now we are ready to go with kernel changes, this is an important part so pay attention. The key to successful upgrade is that you remove ALL OLD KERNELS as many packages will fail to install during the upgrade if they detect a release 4.x kernel due to minimum kernel version dependency checks. We will first start with installing the new CentOS 5.4 kernel so it preserves grub templating:

rpm -ivh kernel-2.6.18-164.el5.i686.rpm kernel-devel-2.6.18-164.el5.i686.rpm --nodeps

NOTE: release 5.x has smp support integrated into the standard kernel, so no *-smp version is required for multi-processor systems.
If you are running an older system the chances are you got allot of older kernel packages installed, so make sure you get them all out of the way:

rpm -e $(rpm -qa | grep kernel | grep -v 2.6.18 | tr 'n' ' ') --nodeps

That said and done you should now only have 2 kernel packages installed which are the 2.6.18 release 5.x kernels. DO NOT under any circumstance continue if you still got 2.6.9 release 4.x kernels packages installed, remove them ALL!

# rpm -qa | grep -i kernel
kernel-2.6.18-164.el5
kernel-devel-2.6.18-164.el5

A cleanup of /etc/grub.conf may be required, though the rpm command should have done this for you already, but review it anyways for good measure. You should find that 2.6.18-164.el5 is the only kernel in the file. When kernel updated, a reboot here is OK, but it’s not suggested.
Then we can continute the system updates. There is a known bug with python-elementtree package versions which cause yum/rpm to think the release 4.x version is newer than the 5.x version, to get around this without blowing up the entire python installation we need to remove the package from just the rpmdb as follows:

rpm -e --justdb python-elementtree --nodeps

We can now go ahead and use yum to start the upgrade process, this is a dry run and will take some minutes to compile list of available packages and associated dependency checks. You should carry the exclude options, if any, that you used during the ‘yum update’ process as so to avoid unresolvable dependencies:

yum clean all
yum upgrade

You will end up with a small list of dependency errors, these should be resolved by again evaluating a packages need as a critical system component and either removing it with ‘rpm -e‘ or excluding it with ‘–exclude‘ (remember to query description if you are unsure what something does). In my case the packages that threw up red flags were stuff I had manually installed over time such as nfs in addition to default installed samba, these can all safely be removed or excluded as you prefer.

Error: Missing Dependency: perl(Convert::ASN1) is needed by package samba
    Error: Missing Dependency: libevent-1.1a.so.1 is needed bypackage nfs-utils

At this point you should be ready to do a final dry run and see where we stand on dependencies, rerun the earlier ‘yum upgrade‘ while making sure to carry over any exclude options you are using.
You should now end up with a summary of actions that yum needs to perform, go ahead and kick it off… this will take a bit time to complete.

Transaction Summary
    ===========================================================
    Install 183 Package(s)
    Update 527 Package(s)
    Remove 0 Package(s)
    Total download size: 679 M
    Is this ok [y/N]:Y

Once yum has completed we need to fix a few things, the first is the rpmdb needs a rebuild due to version changes that will cause any rpm commands to fail:

rm -f /var/lib/rpm/__db.00*
rpm --rebuilddb
yum clean all

The next issue on the list is python-elementtree and python-sqlite, one or both of these may haveended up in a broken state that will cause all yum commands to break, so we will go ahead and reinstall both of them:

rpm -e --justdb python-elementtree --nodeps
rpm -ivh python-elementtree-1.2.6-5.el5.i386.rpm
rpm -ivh python-sqlite-1.1.7-1.2.1.i386.rpm --nodeps --force

The yum command should now work, go ahead and run it with no options, if you do not get any errors, you are all sorted!
Hopefully the install went well for you, the only thing left to do is go ahead and reboot the system:

shutdown -rf now

For the sake of avoiding a system raised fsck, we will reboot with the -f option to skip fsck.

пропускать vpn (pptp) нормально через линуксовый нат

Запишу себе на будущее, чтобы не забывать.

Чтобы через линуксовый нат нормально ходил pptp vpn, надо в  /etc/sysconfig/iptables-config в переменную IPTABLES_MODULES  добавить модули ip_gre ip_nat_pptp ip_conntrack_pptp.

понедельник, 21 июня 2010 г.

googlecl

Гугловцы выпустили замечательную утилитку. Применений можно найти массу. Например, можно залить все фотки из какой-то папки в веб-альбомы пикасы разом. Одной командой типа
google picasa post --title Added --tags="новые фотки, разобрать" *.jpg

Уже попробовал - работает на ура :)
Поддерживает немало уже сервисов. Блоггер, пикасу, доки, календарь. Кто-то уже использует для того, чтобы пихать из мониторинга события в календарь, чтобы потом календарь слал смс-ки (он это умеет) - типа халявное уведомление на смс.
Мне лично пока полезнее всего заливка фоток на вебпикасу массой с последующим разгребанием там :). Еще мелькнула мысль потом, когда сделаю-таки камеры на этаже, все задетекченные картинки сразу заливать в пикасу и там распознавать лица. Сразу будет база посещений, кто когда ходит :) Хехе.
Блин, да можно даже сделать, чтобы сервак события из логов в блог постил :) Типа - "О, я получил 100000-е письмо! Но оно опять спам :( Мне грустно :(".

При установке столкнулся с тем, что этой утилитке питон нужен не ниже 2.5, а в центосе 2.3 чтоли. И новый безболезненно не воткнуть :( Я аж задумался сменить на роутере систему на убунту. На старом ноуте, который вторым серваком - стоит убунту. Экспериментировал пока на нем :) - там все установилось и заработало сходу.

Интересно работает авторизация. Я запускал утилитку по ssh. При запуске она спросила, для какого пользователя гугла все делаем. Указал. Она выдала ссылку OpenAuth, по которой надо пройти, залогиниться своим гугло-аккаунтом а разрешить доступ - и все, утилитка имеет нужный доступ. Изящно - нигде пароли не палятся, но все работает.

вторник, 15 июня 2010 г.

motion detect

Искал тут софтинку, которая будет детектить движение на камере и по этому событию писать видео и скидывать картинки с камеры. ZoneMinder как-то показался тяжеловат. А тут наткнулся в поиске на софтинку motion. Как ни странно - оказалось именно то, что надо. Ставится одной командой и в убунте, и в centos, и сразу работает :).
В итоге теперь мониторит ситуацию дома, когда там никого нету, и в серверной на удаленном объекте :)

вторник, 27 октября 2009 г.

centos 5.4 и vmware server

Обновил тут на практически всех серверах Centos с 5.3 до 5.4. Огреб проблему на двух серверах, где крутятся виртуалки на vmware server 2.0.1 - виртуалки работают, а веб-интерфейс vmware не работает. Оказалось, это уже известный баг, проблема в взаимодействии vmware и новой версии glibc.
Решение из комментариев к багу мне не подошло - не сработало почему-то. При подсунутой старой библиотеке vmware-hostd продолжал радостно валиться.
Пришлось откатывать glibc обратно. Причем просто yum downgrade glibc отказался её откатывать, говоря, что низзя. А вот когда скачал старые rpm-ы (http://mirror.centos.org/centos/5.3/updates/x86_64/RPMS/glibc-2.5-34.el5_3.1.x86_64.rpm, http://mirror.centos.org/centos/5.3/updates/x86_64/RPMS/glibc-common-2.5-34.el5_3.1.x86_64.rpm, http://mirror.centos.org/centos/5.3/updates/x86_64/RPMS/glibc-devel-2.5-34.el5_3.1.x86_64.rpm, http://mirror.centos.org/centos/5.3/updates/x86_64/RPMS/glibc-headers-2.5-34.el5_3.1.x86_64.rpm) и установил их через все тот же "yum downgrade
glibc-2.5-34.el5_3.1.x86_64.rpm glibc-common-2.5-34.el5_3.1.x86_64.rpm glibc-devel-2.5-34.el5_3.1.x86_64.rpm glibc-headers-2.5-34.el5_3.1.x86_64.rpm", да перезапустил vmware - все заработало.
Ну и потом добавил glibc в исключения yum, чтобы пока не обновлялся - в /etc/yum.conf добавил "exclude=glibc,glibc-common,glibc-devel,glibc-headers".

UPD: По просьбам нашел у себя старые файлы и выложил в гуглодоки:
glibc-2.5-34.el5_3.1.x86_64.rpm
glibc-common-2.5-34.el5_3.1.x86_64.rpm
glibc-devel-2.5-34.el5_3.1.x86_64.rpm
glibc-headers-2.5-34.el5_3.1.x86_64.rpm

Есть только такие, извините :)