PostgreSQL как посмотреть, где хранятся файлы БД на Linux-машине

Тема на 5 минут. Если сервер настраивался не вами, то бывает сразу сложно разобраться, где лежат файлы БД PostgreSQL, т. к. их расположение может быть настроено отличным, от по-умолчанию, образом.

Поможет в этом следующая консольная команда:

ps auxw | grep postgres | grep — -D

в итоге, мы получим  нечто на подопбии такого:
postgres 12917  0.0  0.1 118783 60648 ?        S    Jul27   0:01 /usr/pgsql-9/bin/postgres -D /data/postgres-9
Вот после опции -D и указан каталог, в котором лежат файлы БД (обычно в подпапке base).
http://geckich.blogspot.com/

Как завершить зависший процесс из консоли (cmd) Windows

У Windows есть аналог линуксовой команды kill – taskkill,  позволяющий завершить зависший “намертво” процесс, который никак нельзя завершить в графическом интерфейсе.

Для начала, необходимо узнать PID засшей службы или процесса.

Делаем это либо с помощью команды в cmd (с администраторскими правами) tasklist, либо заходим в апплет Службы, открываем свойства зависшей и смотрим её Имя:

Теперь в cmd (для Windows 2008+ – с правами Администратора) находим PID службы:

C:Windowssystem32>sc queryex nscp

SERVICE_NAME: nscp
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 544

А теперь команда для завершения процесса:

C:>taskkill /PID 544 /F

http://geckich.blogspot.com/

Решение проблемы с извлечением дисков в Linux

Если привод компакт-дисков не реагирует на нажатие кнопки извлечения, то следует открыть консоль и попробовать выполнить следующую команду от root или с sudo:

eject /dev/cdrom

Если, при этом выдаётся следующая ошибка:

eject: unable to eject, last error: Inappropriate ioctl for device

То нужно попробовать следующую последовательность команд:

file /dev/sr0

должна выдать такой результат:
/dev/sr0: sticky block special
Далее:
eject -i off

После этого диск должен извлечься при нажатии кнопки на дисководе.
Ссылки:
http://geckich.blogspot.com/

Vino – стандартный VNC-сервер многих Linux-дистрибутивов или как настроить удаленный доступ на свой Linux

Недавно столкнулся с проблемой неработоспособности удаленного рабочего стола в Linux Debian. По-умолчанию за подключение удаленно к рабочему столу по протоколу VNC отвечает демон vino.

Конфигурационных файлов в /etc он не имеет, в init.d его тоже нет. Чтобы его настроить делаем следующее:

1. Нужно дописать опцию Enable=true в секции “xdmcp” конфига /etc/gdm3/daemon.conf для Gnome 3.

2. Заходим в консоль под нашим десктопным пользователем и вызываем окно настроек Vino:

vino-preferences

Откроется окно вроде такого:

Где указываем отмечаем галочки и устанавливаем пароль.
Также в опции vino можно зайти через апплет Desktop Sharing или Remote Desktop (смотря какой дистрибутив).

Если отметить опцию Configure network automatically to accept connections, то vino будет открывать порт на роутере (если там разрешен UPnP) 5900 наружу, в Интернет, что обычно не желательно.

3. Запускаем собственно демона:

export DISPLAY=:0.0
xhost +/usr/lib/vino/vino-server &
netstat -nl | grep 5900
Последняя команда служит для проверки того, что vino запустился и слушает порт 5900.

4. Теперь с другой машины, которая имеет доступ к нашей пробуем подключиться (для Windows это можно сделать при помощи бесплатных программ TightVNC или UltraVNC).

Настройки по-умолчанию должны сработать.

5. Теперь проблема в том, что vino не стартует со стартом системы и не имеет скрипта запуска. И стартовать он должен с тем пользователем, на который планируется удалённый вход. Для этого нужно добавить в файл /home/username/.bashrc в конец следующие строчки:

export DISPLAY=:0.0
/usr/lib/vino/vino-server &

Теперь vino будет стартовать автоматически когда этот пользователь входит в систему и принимать удаленные подключения.

UPDATE:

Обнаружил, что при таком тексте .bashrc каждый раз, когда открываешь терминальную сессию, то vino ругается в консоль, что он уже запущен. Посему необходимо изменить текст на следующий, включающий в себя проверку:

export DISPLAY=:0.0
ps cax | grep vino-server > /dev/null
if [ $? -ne 0 ]; then
  /usr/lib/vino/vino-server &
fi

Ссылки:

  1. http://debian-handbook.info/browse/wheezy/sect.remote-login.html
  2. http://ubuntuforums.org/showthread.php?t=266981&s=bdce9ca764aeb4ff4abf932220541d93
  3. http://stackoverflow.com/questions/9117507/linux-unix-command-to-determine-if-process-is-running
http://geckich.blogspot.com/

Студенческий анлок (Jailbreak) смартфонов под управлением Windows Phone 7 (Nokia Lumia)

Для телефонов под управлением Windows Phone 7.8 (а так же 7.5 и 8) существует несколько способов анлока или джеилбрейка, но почти все эти способы работают не на всех моделях и даже если модель подходит, то в ней может оказаться не подходящий загрузчик (а подходящий как правило есть только в самых ранних партиях).

Самый безопасный, но и самый мало функциональный анлок – это т. н. студенческий.

Суть его состоит в том, что мы совершенно легально регистрируемся как начинающий разработчик для платформы Windows Phone, что дает нам возможность устанавливать приложения не только из Магазина, но и из пакетов XAP.

Бесплатный студенческий аккаунт позволяет установить одновременно только 2 пакета XAP… Можно увеличить лимит до 10, если купить платный аккаунт.

Процедура такова.

1. Вначале нам нужно заиметь почтовый ящик в домене .edu дабы подтвердить наш студенческий статус. Если у вас уже есть такой почтовый ящик, то используйте его. А если нет, то вы можете получить свой выполнив бесплатную регистрацию на сайте  https://secure.californiacolleges.edu/ – нужно просто заполнить вдумчиво форму – и всё, почтовый ящик у нас есть. Входящую почту нужно искать (после лог-ина, естественно)  по этому адресу.

2. Теперь необходимо зарегистрировать аккаунт разработчика. Для этого идем на сайт Microsoft Dreamspark и нажимаем внизу Create account. Идти желательно браузером Internet Explorer. Заполняем форму – там всё очевидно. Также нужно уже иметь или зарегистрировать аккаунт Windows Live ID. Именно здесь на этапе регистрации нужно будет ввести свой адрес почты .edu для получения письма с ссылкой для подтверждения аккаунта. Письма на этом сайте отображаются несколько кривовато, потому с ссылкой придется малость повозиться – я уже не помню точно, как я ее оттуда вытащил, но это вполне реально.
Находим строчку вида:
-Navigate to: https://www.msacademicverify.com/AVE/NewActivate?=
ACID=3DL%2byQVWHYymALYTI%2flZA%3d%3d&lc=3D1033=0D
И экспериментируем. “=0D” в конце точно не нужно копировать. Также нужно убрать пробелы.

3. После регистрации, подтверждения и авторизации идем сюда  Windows Phone 7 App Development и скачиваем Windows Phone SDK. Точнее, 3 его компоненты и устанавливаем в том порядке, в котором написано в даунлоадере (он представляет из себя 2 плагина для IE, описание установки которых и ссылки есть на страничке скачивания). Скачать можно ТОЛЬКО в браузере Internet Explorer. Никакие Chrome или Firefox тут не помогут… Майкрософт, что ж вы хотели.

4. Подключаем Nokia Lumia, которой хотим сделать анлок к ПК. На Пк должен быть установлен Zune. Запускаем программу Windows Phone Developer Registration, которая идёт вместе с Windows Phone SDK. Предварительно разблокировав экран телефона (иначе получите ошибку как на моей картинке)

Вводим данные своего аккаунта Windows Live ID и нажимаем кнопку внизу, ждем положительного результата.

5. Теперь можно ставить программы из пакета XAP с помощью опять же входящей в установленную Windows Phone SDK утилиты Application Deployment:

Здесь указываем XAP, нажимаем Deploy и дожидаемся результата. При запуске этой утилиты экран телефона так же должен быть разблокирован!

При достижении лимита пакетов (по-умолч. 2) будете получать ошибку с кодом 0×81030119.
“Error – 0x89731811” – означает, что не запущен Zune или его служба. Соответственно, запускаем Zune и смотрим, чтобы он увидел телефон.

Всё вышеописанное проверено и работает на телефоне Nokia Lumia 900.

Ссылки:

  1. http://jailbreaknokia.blogspot.com/2013/07/jailbreak-nokia-lumia-900.html
  2. http://atechguide.com/get-edu-email-address/
  3. http://forum.xda-developers.com/showthread.php?t=917613
UPD
Нашел расшифровку некоторых кодов ошибок при Applicati
on Deployment:
  • 0×8973180E: Zune программное обеспечение не установлено. Пожалуйста, установите последнюю версию программного обеспечения Zune.
  • 0×8973180F: неправильная версия softeware Zune установлен. Вы можете скачать последнюю версию.
  • 0×89731810: Поврежденный конфигурации устройства. Чтобы устранить эту проблему, переустановите Visual Studio 2010 Express для Windows Phone.
  • 0×89731811: Zune программного обеспечения не запускается. Пожалуйста, попробуйте еще раз с Zune для обеспечения работы программного обеспечения.
  • 0×89731812: Подключение к устройству не удалось. Пожалуйста, убедитесь, что телефон подключен и не на экране блокировки.
  • 0×89731813: Применение Не удалось запустить. Пожалуйста, убедитесь, что устройство было зарегистрировано и разблокирована. Объяснение о том, как зарегистрироваться можно найти здесь .
  • 0×89740005: Закончился срок регистрации телефона как для разработки. Т. е. нужно повторить пункт 4. Ну или телефон вообще не был зарегистрирован. 
  • 0×89740006: Телефон заблокирован. Пожалуйста, разблокируйте телефон и попробуйте снова.
  • 0×81030110: Не удалось установить приложение. Runtime ошибка. Возможности WMAppManifest.xml файл, расположенный в содержимом атрибута является неправильным.
  • 0×81030118: Установка приложения не удалась. Устройство разработчик заблокирован. Регистрация для разработчиков разблокировать программу перед развертыванием приложения.
  • 0×81030119: Не удается установить приложение. Вы достигли максимального числа приложений, разрабатываемых для устройства может быть установлен на такое развитие событий. Пожалуйста, удалите предыдущие разработчиком приложения. (можно просто увеличить число устанавливаемых приложений с помощью твика или xap).
  • 0x81030120: Устанавливаемое приложение имеет флаг ID_CAP_INTEROPSERVICES.

http://geckich.blogspot.com/

Починка колёсика мышки, если изображение дергается при прокручивании

Недавно приключилась такая беда – у мышки фирмы A4Tech X5 стало глючить колёсико – при прокручивании колёсиком картинка дергается вверх-вниз. Мышка мне очень нравится и выбрасывать её было жалко. К тому же решение проблемы нашлось в интернете.

Пишут, что этот бок проявляется в течении полгода-года на многих мышках фирмы A4Tech и лечится следующим образом:

1. Разбираем мышку (обычно путем откручивания пары болтов внизу)

2. Находим механизм колесика и аккуратно вытаскиваем колесико вместе с осью на которой оно сидит (отгибаем слегка вверх и вытаскиваем). Видим нечто похожее как на картинке:

3. Стрелками указаны металлические зажими, который надо подогнуть к механизму. Я сделал это кусачками, можно утконосами, маленькими плоскогубцами или чем-нибудь похожим – но без сильного фанатизма, чтобы не сломать! 🙂

4. Собираем всю конструкцию воедино и наслаждаемся нормальной работой колёсика.

Ссылки:

http://uluchshim.ru/2010/11/kak-pochinit-slomannoe-ili-ploxo-rabotayushhee-kolesiko-na-lyuboj-myshke/

http://geckich.blogspot.com/

Как создать файл произвольного размера в OS Windows

Делается это довольно просто. Открываем консоль (cmd)  и набираем команду, например, для файла размеров 2 Гб (последний аргумент – в байтах)

fsutil file createnew C:testfile.txt 2147483648

http://geckich.blogspot.com/

Ошибка после установки Zabbix: Zabbix server is not running: the information displayed may not be current

Если вы установили серверную часть системы мониторинга Zabbix на системах RHEL (Oracle Linux, RedHat, CentOS) и вроде бы всё правильно, но в веб-интерфейсе вылазит ошибка
Zabbix server is not running: the information displayed may not be current

то, здесь обычно 2 варианта:

  • самый простой – не запущен или не корректно сконфигурирован демон zabbix-server. Проверьте, совпадают ли номера портов в конфигах zabbix-server (/etc/zabbix/zabbix_server.conf) и zabbix-web (/etc/zabbix/web/zabbix.conf.php), а так же правильно ли настроено подключение к БД.
  • если всё в конфигурационных файлах правильно и демон запущен, это скорее всего значит, что вам надо или отключить систему защиты SeLinux совсем или – что будет корректнее – изменить политику доступа к портам системы для демона httpd.

1. Проверим, что проблема действительно в настройках SeLinux:

tail -f /var/log/audit/audit.log |grep -i avc

Должны периодически добавляться в лог строки вроде этой:

type=AVC msg=audit(1395664684.460:297): avc:  denied  { name_connect } for  pid=3078 comm=”httpd” dest=10051 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:zabbix_port_t:s0 tclass=tcp_socket
а команда:
getsebool -a | grep zabbix
должна в таком случае дать результат:
zabbix_can_network –> off
Изменим политику для httpd:
setsebool -P httpd_can_network_connect on
Проверяем:
getsebool httpd_can_network_connect
Результат должен быть следующий:
httpd_can_network_connect –> on
Теперь веб-интерфейс Zabbix должен нормально подключаться к серверу через порт 10051 (по-умолчанию) и ошибка исчезнет.
http://geckich.blogspot.com/

Установка и удаление X-сервера для RHEL Linux

Устанавливать X-сервер на серверную машину конечно же не правильно. Но бывают ситуации, когда без этого не обойтись. Например, нужно установить что-либо, а установщик только GUI и экспортировать дисплей нельзя. Для этого можно установить X-сервер (в этой статье будет использован оконный менеджер Gnome), сделать дело и удалить X-сервер полностью.

В общем, от философии к делу.

Для установки X-сервера в RHEL-подобных ОС Linux (Oracle Linux, RedHat, CentOS, Fedora), которые были установлены без Xorg достаточно выполнить команду:

yum groupinstall “GNOME Desktop Environment” “X Window System” “Desktop”

В большинстве случаев создавать/редактировать конфигурационные файлы не понадобиться. Колдовать с конфигом Xorg придётся в случае нестандартных драйверов, режима нескольких мониторов и т. п., что не есть наш случай просто временной установки X-сервера. Запускаем X-сервер:

startx

Далее логинимся, делаем своё черное дело и после этого можно так же легко удалить X сервер вместе со всеми его пакетами:

yum groupremove “GNOME Desktop Environment” “X Window System” “Desktop”

http://geckich.blogspot.com/

Использование библиотеки Mechanize в Python для авторизации, отправки веб-форм и скачивания файлов

Для языка Python существует довольно много библиотек для работы с веб-ресурсами. Это и стандартная urllib / urllib2 и сторонние – mechanize, Twill, Request, Client Form.

В данной статье я рассмотрю работу с библиотекой mechanize, т. к. именно ее инструменты помогли мне “победить” задачу автоматизации скачивания материала с одного веб-сайта.

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

Проблема заключалась в следующих моментах:

  • для скачивания нужно было авторизоваться на сайте. Причем, авторизация с помощью forms, а не Basic HTTP. 
  • необходимо было хранить кукисы, дабы авторизация не пропала. 
  • путем манипуляций со списками (SelectControl) выбирались параметры скачивания. 
  • далее нужно было получить ссылку, содержащую уникальный токен, не позволявший сачать файл по одной и той же ссылке боле 1 раза просто поменяв параметры GET запроса. 
  • и авторизация и скачивание и всё остальное нехорошие программисты сделали на одной html-странице в одной и той же форме, только с разными кнопками типа Submit.

Итак, начнемс. Вначале импорт необходимых библиотек. Mechanize не идет в стандартной поставке с Python  и его необходимо установить или с помозью PiPy или вручную, как написано на официальном сайте (python setup.py install).

import cookielib, shutil, os
from mechanize import Browser

Далее, создаем объекты: основной Browser и объект для хранения кукисов, который прикрепляем к нашему Browser. Объект Browser представляет собой контейнер по смыслу похожий на вкладку настоящего браузера. Т. е. в пределах его можно оществлять навигацию по web-сайту, авторизацию, хранить кукисы и т. д.

br = Browser()
# Create cookie jar and attach it to Browser
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

Затем, добавляем html хэдэры и открываем URL нужной странички в объекте Browser.

# Add some headers
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
# Open url in Browser instance
br.open('http://www.example.com/download.aspx')

Далее выбираем форму, в которую будем вносить данные. nr=0 – индекс формы по счету в коде веб-страницы (0,1,2 …) И вводим данные в поля для авторизации в формате (для элементов типа TextControl):

br[“id_html_элемента”] = “Значение”

id элементов и возможные значения можно посмотреть двумя способами:

  • в браузере Google Chrome нажать правой кнопкой мыши на нужном элементе и выбрать Просмотр исходного кода элемента, затем правой кнопкой на выделенном элементе и Copy as HTML. После этого, вставить текст в любой текстовый редактор. 
  • выполнив код в интерпретаторе python или в отдельном скрипте:

import cookielib
from mechanize import ParseResponse, urlopen
response = urlopen("http://www.eoddata.com/download.aspx")
forms = ParseResponse(response, backwards_compat=False)
form = forms[0]
print form

Вы получите список всех элементов формы и их возможных значений в формате:

<Тип(id=список_значений)>

Вроде такого:

<aspnetForm POST http://www.example.com/download.aspx application/x-www-form-urlencoded
  <SelectControl(ctl00$DataFormat=[17, 2, 36, 16, 27, 28, 33, 32, 8, 24, 35, *9, 1, 39, 11, 14, 6, 5, 4, 12, 3, 26, 15])>
  <SubmitControl(ctl00$Download=Download) (readonly)>
  <TextControl(ctl00$txtEmail=)>
  <PasswordControl(ctl00$txtPassword=)>
  <CheckboxControl(ctl00$Remember=[on])>
  <SubmitControl(ctl00$btnLogin=Login) (readonly)>>

Итак, пример кода основного скрипта для авторизации:

# Select form for modification and "enter" login info
br.select_form(nr=0)
br["ctl00$txtEmail"] = "User"
br["ctl00$txtPassword"] = "Secret"
# Submit form
br.submit(nr=3)

Обратите внимание на строку

br.submit(nr=3)

В скобках указан номер кноки типа Submit по порядку её нахождения в html-коде страницы. Это важно, если в форме есть несколько кнопок типа Submit, но выполняющих различные функции (как в нашем случае). Нумерация 0,1,2…

Далее, выбираем необходимые данные в списках значений, например (значения посмотреть описанными выше методами):

br.select_form(nr=0)
# Select Options
br["ctl00$cboSomething"] = ["EXAMPLE",]
br["ctl00$cboDataFormat"] = ["11",]
# Update page
br.submit(nr=1)

После этого парсим код страницы для получения ссылки на файл. В каждом конкретном случае парсинг будет, конечно же, разным – потому не привожу его здесь.

Скачиваем файл (считая, что искомый URL на файл находится в переменной download_url):

local_path = "/home/user"
filename = "very_important.txt"
f = br.retrieve(download_url)[0]
# Copy saved file to normal location
shutil.copy2(f,os.path.join(local_path, filename))

В переменной f мы получаем путь к скачанному файлу, обычно это какое-то случайное имя в директории /tmp. Далее перемещаем его в нужное нам место.

Ссылки:

  • http://stockrt.github.io/p/emulating-a-browser-in-python-with-mechanize/
  • http://www.voidspace.org.uk/python/articles/authentication.shtml
  • http://mozgovipc.blogspot.com/2012/06/python-http-basic-authentication-with.html
  • http://docs.python-requests.org/en/latest/
  • http://stackoverflow.com/questions/9541677/urllib2-post-request
  • http://docs.python.org/2/howto/urllib2.html
  • http://stackoverflow.com/questions/9288662/need-more-mechanize-documentation-python
  • http://www.pythonforbeginners.com/cheatsheet/python-mechanize-cheat-sheet
  • http://blog.spritecloud.com/2010/01/posting-forms-with-python/
http://geckich.blogspot.com/