Analitycs

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

понедельник, 14 мая 2012 г.

Как установить MySQL SSH tunnel?

Если вам нужно приконектится к внешнему MySQL, а его порт 3306 закрыт firewall, то быстрейший способ получить желаемое (кроме установки пива админу) - это установить свой собственный SSH tunnel - с гейшами и шахматами.

Делается это так.

ssh -f -L 8080:my.super.puper.host.ru:3306 -l remote_user another.my.super.system.org sleep 60

Понятно, что SSH на firewall должен быть открыт.

После установки туннеля - уже обращаемся к самому себе:

mysql -h 127.0.0.1 -P 8080 -u user -p database

Можно жить.

среда, 25 апреля 2012 г.

MacOS X - использование mysql из Zend Server

Для использования MySQL клиента из Zend Server под MacOS вместо установленного из портов (зачем тащить еще один порт - если mysql уже есть в системе? ) нужно сделать следующее:

1) проверить есть ли /etc/zce.rc -

$ /usr/local/zend/mysql/bin/mysql
/etc/zce.rc doesn't exist!

2) создать/отредактировать его

ZCE_PREFIX=/usr/local/zend
if [ -z "$LIBPATH" ];then
   LIBPATH=/lib:/usr/lib:/usr/local/zend/lib
else
   LIBPATH=$LIBPATH:/usr/local/zend/lib
fi
export LIBPATH
APACHE_VER=2.2.11
WEB_USER=qtmhhttp
WEB_GROUP=nogroup
APACHE_PID_FILE=
PRODUCT_NAME=ZendServer
PRODUCT_VERSION=5.0.0
export INSTALLATION_UID=091708121207
DIST=pe
JB_EN=true
ZEND_TMPDIR=/tmp

3) Сделать симлинк на зендовский клиент

sudo ln -s /usr/local/zend/mysql/bin/mysql  /usr/bin/mysql

Теперь можно работать - ну или собираем из портов, либо ставим MAMP (не люблю).

пятница, 13 апреля 2012 г.

Supervisord soft-reload

Чтобы мягко перезапустить supervisord (без убивания процесса), набираем

sudo supervisorctl reread
sudo supervisorctl update

четверг, 1 марта 2012 г.

Как удалить все папки .svn от subversion?

Есть у subversion (в отличии от git) не очень удобная особенность хранить служебную информацию в скрытых папках .svn. При каких-то манипуляциях с переносом каталога они жутко раздражают. Быстренько их удалить

find . -name .svn -exec rm -rf {} \;

среда, 29 февраля 2012 г.

Как правильно деплоить Python сервис запущеный через supervisord?

Иногда supervisord заглючивает и он неправильно определяет необходимость перекомпиляции pyc файлов при обновлении python файлов, что при деплое новой версии сервиса на Python приводит к забавным, но неприятным эффектам

Рекомендуемый порядок действия

# supervisorctl stop my_super_service

Теперь обновляем файлы, затем РУЧКАМИ удаляем pyc

# find path_to_my_service -type f -name "*.pyc" -delete
# supervisorctl start my_super_service

При использовании сервисов автоматического деплоя - имеет смысл повесить эти операции на автоматические хуки - до и после деплоя.

среда, 25 января 2012 г.

Как узнать установленную версию Apache?

Для Red Hat дистрибутивов От рута
# httpd -v
Server version: Apache/2.2.17 (Unix)
Server built:   Oct 19 2010 16:27:47
От простого смертного
# ps aux | grep httpd
web     1152  1.6  0.7 314296 62168 ?        S    00:42   0:03 /usr/sbin/httpd

# /usr/sbin/httpd -v
Server version: Apache/2.2.17 (Unix)
Server built:   Oct 19 2010 16:27:47
Либо
# rpm -qa|grep httpd
httpd-2.2.17-1.el5
httpd-tools-2.2.17-1.el5
Для debian-based, понятное дело - httpd заменить на apache2.

четверг, 5 января 2012 г.

Как исправить Permissions 0644 for '/Users/xxx/.ssh/id_dsa' are too open.


При миграции на новый комп после переноса SSH ключей через флешку при коннекте к удаленной машине появляется следующая ошибка

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Permissions 0644 for '/Users/xxx/.ssh/id_dsa' are too open.

It is recommended that your private key files are NOT accessible by others.

This private key will be ignored.

bad permissions: ignore key: /Users/xxx/.ssh/id_dsa

Лечится это следующим - нужно выставить права 700

cd ~/.ssh
chmod 700 id_rsa

пятница, 23 декабря 2011 г.

Как удалить MacPorts?

Недавно при миграции на новый макбук я допустил стратегическую ошибку - полностью восстановился из архива TimeMachine и наступил на грабли - старый-то ноут был 32-битный, а новый - уже 64 бита.

После 2 дней попыток обойти все баги перекомпиляции MacPort, решил их снести к чертовой матери и попробовать собрать все начисто.

Итак, как удалить MacPorts?


# port -f uninstall installed

После чего ставлю/собираю заново то, что нужно - пока "коробочка жужжит" (с) ;-)

Если же нужно вычистить всю жизнедеятельность MacPorts из системы, то


$ sudo rm -rf /opt/local \
    /Applications/DarwinPorts  /Applications/MacPorts \
    /Library/LaunchDaemons/org.macports.* /Library/Receipts/DarwinPorts*.pkg \
    /Library/Receipts/MacPorts*.pkg /Library/StartupItems/DarwinPortsStartup \
    /Library/Tcl/darwinports1.0 /Library/Tcl/macports1.0 \
    ~/.macports

Да, если у вас вторая версия - то удаляемые каталоги, разумеется, меняются на те, что у вас. 

Найдено тут, HomeBrew ставить не собираюсь. ПОКА не собираюсь, во всяком случае.

четверг, 24 ноября 2011 г.

Как сделать автодополнение git в MacOS X?

При установке git возникает ошибка и автодополнение не работает

-bash: __git_ps1: command not found

Лечение (работаю со SnowLeopard)

Ставим MacPorts из .dmg, затем в консоли

$ sudo port selfupdate
$ sudo port install git-core +bash_completion

Если нужна дополнительная работа с SVN и docs, вторую строчку заменяем на:


$ sudo port install git-core +bash_completion +doc +svn

Затем добавляем в ваш ~/.profile или ~/.bash_profile:

# MacPorts Bash shell command completion
if [ -f /opt/local/etc/bash_completion ]; then
    . /opt/local/etc/bash_completion
fi

среда, 23 ноября 2011 г.

Как распаковать содержимое rpm-пакета?

Довелось недавно устанавливать дополнительный софт на одну виртуалку со сломанным дистрибутивом. Предыдущий админ воткнул посторонние пакеты, переломав зависимости. Так как надо было поставить обычную софтинку на PHP - решил просто расковырять RPM пакет.

Обычный rpm-пакет - это архив формата cpio вместе с некоторым набором метаданных.

Распаковать его можно

# rpm2cpio package.rpm | cpio -dimv

Параметры и флаги



  • имя rpm-файла, который необходимо распаковать и перенаправить вывод на архиватор cpio.
  • -i - распаковать архив,
  • -d - сохранить структуру директорий.
  • -v - вывести список распакованных файлов,
  • -m - наследовать даты модификаций извлекаемых файлов.
  • суббота, 19 ноября 2011 г.

    Как запустить приложение MacOS X из terminal.app с передаваемым файлом?

    Когда работаешь в консоли - иногда лень тянуться к мышке, а запустить какой-то сложный редактор нужно. Тогда используется полезная программа open

    $ open -a TextMate ./README

    четверг, 10 ноября 2011 г.

    Синхронизация времени на CentOS/Fedora

    Как поправить разошедшееся время на CentOS/Fedora

    $ sudo yum update tzdata -y
    

    Проверить/выставить

    $ cat /etc/sysconfig/clock 
    ZONE="Europe/Moscow" 

    И под конец запустить

    $ sudo chkconfig --level 345 ntpd on && sudo service ntpd start
    

    Подрезано тут (спасибо sanjek65)

    вторник, 1 ноября 2011 г.

    Как исправить переход на зимнее время в MacOS X Snow Leopard 10.6.8?

    Проблема 2011 года подкралась незаметно - новые машины с Lion не пострадали, а вот Snow Leopard честно перевел часы, не зная о новом приказе президента РФ.

    Варианта решения два

    1) Поставить другой TimeZone в настройках

    2) Отхачить по аргентинскому рецепту (первый хак для консоли, второй для GUI)

    mkdir temp
    cd temp
    curl -O http://www.iana.org/time-zones/repository/releases/tzdata2011m.tar.gz
    tar zxvf tzdata2011m.tar.gz
    sudo zic europe
    
    curl -O http://www.opensource.apple.com/tarballs/ICU/ICU-400.42.tar.gz
    tar zxvf ICU-400.42.tar.gz
    cp tzdata2011m.tar.gz ICU-400.42/icuSources/tools/tzcode/
    cd ICU-400.42/icuSources
    ./runConfigureICU MacOSX --with-data-packaging=archive
    gnumake
    sudo install -o root -g wheel -m 0644 -Sp data/out/icudt40l.dat /usr/share/icu/icudt40l.dat
    cd ../../..
    rm -rf temp
    
    
    Источник 

    суббота, 22 октября 2011 г.

    Немного о сборке программ с dylib в MacOS

    Узнать, какие зависимости у файла к библиотекам

    $ otool -L yourFile
    

    На примере злополучной библиотеки MySQL для Qt

    $ otool -L /Developer/Applications/Qt/plugins/sqldrivers/libqsqlmysql.dylib
    /Developer/Applications/Qt/plugins/sqldrivers/libqsqlmysql.dylib:
     libqsqlmysql.dylib (compatibility version 0.0.0, current version 0.0.0)
     /opt/local/lib/mysql5/mysql/libmysqlclient_r.16.dylib (compatibility version 17.0.0, current version 17.0.0)
     QtSql.framework/Versions/4/QtSql (compatibility version 4.6.0, current version 4.6.2)
     QtCore.framework/Versions/4/QtCore (compatibility version 4.6.0, current version 4.6.2)
     /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
     /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 438.0.0)
     /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)
    

    Включить показ динамически загружаемых библиотек runtime

    # export DYLD_PRINT_LIBRARIES=1

    В результате

    $ nano dylib.log
    dyld: loaded: /usr/bin/nano
    dyld: loaded: /usr/lib/libncurses.5.4.dylib
    dyld: loaded: /usr/lib/libSystem.B.dylib
    dyld: loaded: /usr/lib/system/libmathCommon.A.dylib

    Потом, разумеется, не забываем выключить в 0.

    Изменить путь линкуемой библиотеки

    $ install_name_tool -change /Developer/Applications/Qt/plugins/sqldrivers/libqsqlmysql.dylib @executable_path/libqsqlmysql.dylib ./dist/MyApp.app/Contents/MacOS/MyApp
    
    

    Спасибо MikhailEdoshin

    понедельник, 17 октября 2011 г.

    py2app собирает .app с Qt4 без MySQL (libqsqlmysql.dylib)

    Все чудесатей и чудесатей - сказала Алиса.
    Все чудестраньше и чудестраньше

    Мало того что, в Qt4 по умолчанию отсутствует поддержка MySQL - приходится докомпилировать  плагин из исходников, так еще и выяснилось, что при сборке .app пакета приложения py2app честно включает туда библиотеки Qt,  но забывает положить ее же plugins.

    Лечение

    $ macdeployqt ./dist/YourSuperPuperApplication.app
    
    
    
    После непродолжительной ругани в консоли в .app появляется папка PlugIns - обратите внимание на большую I в центре названия.

    Но разумеется - папка sqldrivers там не появилась (это было бы слишком просто ;-) ), приходится докопировать "ручками".

    
    
    $ cp -R /Developer/Applications/Qt/plugins/sqldrivers ./distYourSuperPuperApplication.app/Content/PlugIns/
    

    После чего приложение вроде бы подхватило MySQL и попыталось взлететь... но, к сожалению -  грохнулось на взлёте по другой причине.

    Но это, уже как говорится - другая история... ;-)

    Одно не понимаю - толи лыжи не едут, то ли я... чего то не понимаю - почему такие сложности на каждом шагу? ЧЯДН?

    locate/updatedb в MacOS

    Когда постоянно переключаешься между системами - их мелкие различия (такие, как отличия в сервисах и командах) начинают безумно раздражать.

    Например, всегда раздражает не работающий locate/updatedb в MacOS по умолчанию "из коробки.

    Но если locate дает явную подсказку - чего и как запускать, чтобы заработало, до updatedb - просто отсутствует как класс.

    # updatedn
    sh: updatedb: command not found

    Лечение

    # sudo ln -s /usr/libexec/locate.updatedb /usr/bin/updatedb
    
    # sudo updatedb
    
    И теперь наслаждаемся нормально работающим locate. ;-)

    Найдено тут

    воскресенье, 16 октября 2011 г.

    Как обновить MacPorts на MacOS X?

    Вкратце - для тех кто не знаком, представляю MacPorts - система полноценных портов для красноглазиков любителей true-unix-way в MacOs.

    Собственно - после их установки работаем как с обычным FreeBSD

    # /opt/local/bin/port install py2app

    Время от времени нужно делать обновление самих портов

    # /opt/local/bin/port selfupdate

    Но самый страшный вопрос - это как обновить MacPorts?

    Отвечаю... примерно так



    # port upgrade outdated

    И можно идти курить, есть, спать... и все такое прочее ;-)

    суббота, 8 октября 2011 г.

    Ошибка - Невозможно подключиться к базе данных QMYSQL (Mac, Python, Qt)

    Симптомы

    При запуске Qt приложения с MySQL ошибка "Невозможно подключиться к базе данных QMYSQL".

    Причина

    Отсутствие драйвера MySQL "из коробки" в каких-то вариантах Qt. Почему-то по умолчанию включают только SQLite.

    Как лечить?

    Скомпилировать драйвер самостоятельно, для чего умные люди написали вот такой скриптик.

    Разумеется, не забываем поправить необходимую версию Qt и проверить, чтобы в путях не было пробелов. (У меня в username есть пробел, из-за чего время от времени ловлю различные проблемы с компиляторами)

    понедельник, 3 октября 2011 г.

    Как бекапить проекты с помощью rsync, sshpass, scp?

    Как известно, "админы делятся на две категории - те кто не делает backup, и те, кто его УЖЕ делает". (с)

    Ежедневный бэкап

    Как кому удобно - я делаю mysqldump базы на продакшене и потом rsync синхронизирую httpdocs и дамп на удаленную машину. Для авторизации - используются ключи.

    #!/bin/bash                                                                                                      
    DESTINATION=/var/www/vhosts/xxx/httpdocs                                                              
    KEY="ssh -i /home/user/.ssh/scm_dsa -l xxx"                                                          
    ORIG_HOST=user@xxxx                                                                                              
    rsync -a -e "$KEY" --delete --exclude="${DESTINATION}/cache/*" $ORIG_HOST:${DESTINATION}/* ${DESTINATION}/
    

    Недельный бэкап

    Уже на удаленной машине архивирую засинхронизированную папку несколько раз и через несколько дней заливаю архив на backup-space. К сожалению, доступ в backup-машинам - только по ftp, поэтому приходится немного извращаться, используя для авторизации sshpass.

    #!/bin/bash
    
    VHOSTS_DIR=/var/www/vhosts
    TMP_DIR=/mnt/backup
    BACKUP_DIR=FTP_USER@XXXXX.XXX.XX:/
    
    /usr/local/bin/sshpass -pFTP_PASSWORD scp ${TMP_DIR}/* ${BACKUP_DIR}scp -Cp ${TMP_DIR}/* ${BACKUP_DIR}
    
    

    /etc/crontab

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

    0 3 * * * root /home/user/bin/backup.sh >> /home/user/logs/backup.log
    7 1 * * 0 root /home/user/bin/backup_weekly.sh >> /home/user/logs/backup_weekly.log
    В этом гаджете обнаружена ошибка