вторник, 27 марта 2012 г.

Ноутбуки Asus и Ubuntu 10.04

Попался как то в руки такой себе замечательный ноут ASUS K50C.
Ubuntu 10.04 лягла на него "наура". Собсна, а что там такого?! Но без пост-исталяционных косяков не обошлось.

Поковырявшись в интернетах, обнаружил, что ASUS не дружит с UBUNTU. Т.е. даже на сайте производителя так и заявляют - бла, бла, бла только "mast die" поддерживается и все тут.

После установки ubuntu 10.04 поймал проблемы с видео и сетью.

Сеть как бы была... Интерфейс поднимался. Таблица маршрутизации рисовалась. Сам себя пинговал. Иногда, даже еще и к другим тазикам пинг пролазил. Но полноценной работы сети не наблюдалось.

С видео наблюдались такие глюки:
При загрузке, на моменте старта grup2, изображение начинало дрожать и прыгать. При появлении экрана приглашения в систему изображение стабилизировалось, но на грустном разрешении 800х600. При переключении в виртуальные консоли tty1...tty6 (ctrl+alt+f1...f6) - изображение опять хаотично дрожит и скачет ка при закрузке...

Проблемы с сетью лечатся так:

правим /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quite splash pci=nomsi"

Update`тим grup2 и ребутимся:
$sudo update-grub2
$sudo reboot

Урррра! Сеть появилась. Везде ходится свободно!



С видюхой пришлось поколдовать...

Баг с дрожанием изображения - "мечта эпилептика", лечится так:
$sudo bash
#echo blacklist vga16fb > /etc/modprobe.d/blacklist-vga16fb.conf
#update-initramfs -u
#reboot

Стало полегче - появились доступные виртуальные консоли!
Идем дальше...

Смотрим, что за видео адаптеры присутствуют в системе:
$lspci | grep VGA
на выхлопе имеем что то типа:
01:00.0 VGA compatible controller: Silicon Integrated Systems [SiS] 771/671 PCIE VGA Display Adapter (rev 10)
Ога! Определились, что нам нужен sis`овский драйвер ([SiS] 771/671 PCIE)

Качаем от сюда драйвер под нашу ось... Распаковываем и добавляем в модуля:
$tar xzvf sis_drv_ubuntu1004_20100504.tar.gz
$cd sis_drv_ubuntu1004_20100504
$sudo cp sis_drv.* /usr/lib/xorg/modules

Драйвера подкинули. Генерим чистый конфиг Xorg`a:
переходим в виртуальную консоль - Ctrl+Alt+f1
$sudo service gdm stop
$sudo bash
#Xorg -configure
#mv xorg.conf.new /etc/X11/xorg.conf
Теперь правим этот конфиг под наши нужды. Просто добавим/поправим секцию Device так:
Section "Device"
     Identifier "Configured Video Device"
     Driver "sis"

     Option "UseTiming1366" "yes"
EndSection

Перезагружаемся. Вуаля!

Насладиться прелестями 3D эффектов к сожалению не удастся, ибо данный драйвер предназначен только для 2D, но прилично работать вполне позволяет.

вторник, 13 марта 2012 г.

Интернет сайт за NAT. Проброс сайта в локальной сети. Shorewall. Forwardings

Возникла такая вот задача:
Есть сервер в локальной сети (IP=192.168.0.1), на котором крутится интернет сайт. Есть шлюз в мир (eth0 IP=192.168.0.2), на котором установлен shorewall (настройка шлюза и shorewall), с постоянным IP-адресом (bb.bb.bb.bb) и зарезервированным доменным именем (www.mydomen.com). Необходимо: обеспечить возможность обращения к интернет сайту из "мира" и из локальной сети по доменному имени (www.mydomen.com).


С открытием и пробросом сайта в "мир" как бы проблем не возникло. Тут совсем все просто.
Разрешаем на shorewall`е интрент запросы:
 
$sudo mcedit /etc/shorewall/rules
 
ACCEPT              net          fw         tcp        www
or
WEB(ACCEPT)     net          fw 

И пробрасуем интернет запросы на наш сервер, где крутится сайт:
 
$sudo mcedit /etc/shorewall/rules
 
DNAT  net          loc:192.168.0.1         tcp        www

Собственно на этом все. Вуаля, доступ из мира разрешен!!!


А вот с доступом из локальной сети придется повозиться.
ВАЖНО!!! В интерфейсах необходимо добавить опцию routeback:
$sudo mcedit /etc/shorewall/interfaces
 
#ZONE INTERFACE BROADCAST OPTIONS
loc       eth0          detect         routeback  

Добавим правило маскарада:
$sudo mcedit /etc/shorewall/interfaces
 
#INTERFACE              SOURCE         ADDRESS          PROTO          PORT(S)
eth0:192.168.0.1       eth0              192.168.0.2      tcp               www

И, собственно, правило проброса в локальную сеть:
$sudo mcedit /etc/shorewall/rules
#ACTION     SOURCE       DEST             PROTO     DEST         SOURCE       ORIGINAL       RATE USER/ MARK
#                                                                    PORT         PORT (S)     DEST
DNAT          loc       loc:192.168.0.1      tcp         www           -               bb.bb.bb.bb

Если постоянный внешний IP-адрес отсутствует или по доменному имени резолвится несколько IP-адресов, то необходимо использовать параметры:
$sudo mcedit /etc/shorewall/params
 ETH1_IP=$(find_first_interface_address eth1) 
 
где eth1 - интерфейс, который смотрит в мир (ADSL например)

Тогда правило проброса будет выглядеть так:
$sudo mcedit /etc/shorewall/rules
#ACTION     SOURCE       DEST             PROTO     DEST         SOURCE       ORIGINAL       RATE USER/ MARK
#                                                                    PORT         PORT (S)     DEST
DNAT          loc       loc:192.168.0.1      tcp         www           -               $ETH1_IP


Теперь все ok! Mission complete :)

Более подробную инфу на буржуйском смотри тут:
http://shorewall.net/FAQ.htm#faq2
http://shorewall.net/FAQ.htm
http://shorewall.net/Documentation.html

понедельник, 27 февраля 2012 г.

LAMP server под ubuntu 10.04 и не только!


В связи с тем что уже реально заколебался каждый раз напрягать мозг и гуглить когда надо прикрутить «Лампу» решил сделать заметку для себя. Инфы в инетах много, но реально «стоящей» мало...
LAMP server — аббревиатура: Linux, Apache, MySQL, PHP/Perl/Python (плюс, сюда часто добавляют Ruby On Rails).
Устанавливается достаточно просто, можно при помощи одной команды:
$ sudo apt-get install lamp-server^

но это довольно тупо и как показала практика неэффективно... (для профессиональных танцоров с бубном подойдёт, ну или сервер планируется «не замысловатый»). А так...
  1. Linux — как установить и правильно настроить сервер на Linux надо отдельную статейку создавать, предполагается что он есть! (ubuntu 10.04 рулит!)
  2. Apache. Установка веб-сервера Apache довольно проста:
$ sudo apt-get install apache2
  1. PHP. Не забываем модуль для работы с мускулом:
$ sudo apt-get install php5 libapache2-mod-php5 php5-mysql
хотя на много лучше:
$ sudo apt-get install libapache2-mod-php5 libapache2-mod-ruby php5 php5-common php5-curl php5-dev
php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming
php5-mysql php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

последняя команда добавит модули PHP. Занимает не так много места, но мало ли что в жизни случиться...

(После данной операции, объём занятого дискового пространства возрастёт где-то на 60MB, но зато готовы ко всем превратностям судьбы). Если стрёмно или впадлу, но требуются дополнительные модули PHP, то полный список пакетов доступных в репозитарии, можно получить, введя
$sudo apt-cache search php5
  1. Пакеты для «мускула» устанавливаются командой:
$ sudo apt-get install mysql-server mysql-client

В процессе установки должен появиться запрос на ввод пароля администратора базы данных. Если установку прошла в тихом режиме (а такого я ни разу не встречал!), не задавая вопросов, то надыть установить пароль root вручную:
$ sudo mysqladmin -u root password пароль

После данной операции, объём занятого дискового пространства возрастёт ещё на 50MB
ну типо всё... а нет!
$ sudo /etc/init.d/apache2 restart
(для деликатного ребута : $ sudo /etc/init.d/apache2 reload)

Проверить что у на выхлопе получилось необходимо так:
Набираем в браузере строку http://localhost, – в ответ мы должны увидеть надпись «It works! и бла-бла-бла». Чтобы проверить работу PHP, создаем файл test.php и пробуем к нему обратиться:
$ sudo echo '<?phpinfo()?>' > /var/www/test.php
и в браузере http://localhost/test.php
В ответ появиться таблица с настройками PHP. Если вместо счастья ахинея типа «404» или вообще ошибка, следует просмотреть логи веб-сервера, расположенные в каталоге /var/log/apache2. Тут как правило багатенно информативных подсказок и косяки озвучиваются.
  1. web-сервер без виртуальных хостов (создания нескольких сайтов для одного ip-шника) - «унылость» и провокация (с возможностью наживы для разработчика в будущем!) Поэтому кратко:
Существует 2 папки - /etc/apache2/sites-available — там список потенциально возможных сайтов, и /etc/apache2/sites-enabled — тут рабочие сайты.
В папке sites-available есть готовый шаблон как правильно оформить виртуальный хост (его лучше оставить как памятку на будущие). На базе этого шаблона надо создать новый файл с таким содержанием:
<VirtualHost *:80>
ServerAlias Алиас_сайта #будет отдельная статья (указывать не обязательно, также рулится на уровне доменных имён)
ServerAdmin webmaster@localhost #мыло админа ;)
ServerName site1.lg.ua # имя сайта
DirectoryIndex index.php index.html index.htm # порядок поиска индексных файлов
DocumentRoot /var/www/site1.lg.ua # путь (любой) к папке с сайтом 

<Directory>

<Directory /var/www/site1.lg.ua> # настройка доступа для директории
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
…..
ErrorLog /var/log/apache2/error.log # лог ошибок
# Possible values include: debug, info, notice, warn, error, crit,alert, emerg.
LogLevel debug #логировать все ошибки и предупреждения 
CustomLog /var/log/apache2/access.log combined # лог доступа

</virtualHost>

Все каталоги указанные в этом конфиге должны быть созданы в ручную, а название сайта продублировано в /etc/hosts!
О! Чтобы сайт включить необходимо после всех вышеозначенных манипуляций воспользоваться командой
#a2ensite /etc/apache2/sites-available/имя_сайта

Чтобы выключить соответсвенно
#a2dissite /etc/apache2/sites-available/имя_сайта

Ну или прибить в папке sites-enabled одноимённый конфиг.
Пы.Сы. При первом запуске веб-сервера в консоли выводится сообщение о том, что Апач не может определить доменное имя данного хоста:

«apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName»
ну или как-то так.... Это не проблема, но реально кумарит! Чтобы его убрать, следует установить значение переменной ServerName в apache2.conf. (Иногда эта настройка вынесена в отдельный файл /etc/apache2/conf.d/fqdn).
ServerName пофиг-что

Пы.Пы.сы. Имеет смысл сразу поставить phpmyadmin... Веб-сервер работает с правами пользователя: USER=www-data GROUP=www-data
Основные конфигурационные файлы LAMP в Ubuntu
  • /etc/network/interfaces – настройка сетевых интерфейсов
  • /etc/hostname – сетевое имя узла
  • /etc/hosts – соответствие имени и IP (локальный DNS)
  • /etc/resolv.conf – IP-адреса DNS-серверов
  • /etc/apt/sources.list – используемые APT-репозитарии пакетов
  • /etc/mysql/my.cnf – настройка MySQL
  • /etc/apache2 – каталог с конфигурационными файлами веб-сервера
  • /etc/apache2/apache2.conf – основной файл настройки Apache
  • /etc/apache2/conf.d/fqdn – имя (ServerName) веб-сервера по дефолту
  • /etc/apache2/envvars – основные переменные Apache
  • /etc/apache2/sites-available/default – сайт по-умолчанию
  • /etc/php5 – файлы настроек PHP5


Большинство взято от сюда: http://www.xakep.ru/magazine/xa/120/120/1.asp ну и из личного опыта (само собой).

Собственные ярлки на панели (Launcher) Unity

Собрал давича из исходников RealVNC. VncServer добавил в автозагрузку, тут поблем думаю нет. А вот с добавлением ярлычка для vncviewer в лаунчер возникли траблы... Вот мануал как добавить любой ярлычок на панель:

1. Создаем в /usr/share/applications файл *.desktop для интересующей нас проги. В моем случае это vncviewer.desktop такого содержания:
$sudo mcedit /usr/share/applications/vncviewer.desktop

[Desktop Entry]
Name=VNCViewer
Comment=VNCViewer
Exec=vncviewer
Icon=vncviewer.png
Terminal=0
Type=Application
Encoding=UTF-8
Categories=Network;Application;

2. С помощью gimp`a или др. редактора изображений создаем/конвертируем иконку (*.png) в размер 32х32 пиксиля. Называем ее vncviewer.png (т.к. в конфиге Icon=vncviewer.png) или с таким именем, который пропишем в конфиге. Кидаем иконку в /usr/share/icons

3. Запускаем nautilus или любой другой менеджер файлов. Переходим в /usr/share/applications и тащим интересующий нас *.desktop (vncviewer.desktop) на панель (Launcher).
Или можно прописать руками:
$dconf-editor
desktop-->unity-->launcher-->favorites
добавить параметр: 'vncviewer.desktop'

пятница, 24 февраля 2012 г.

Cкрипт удаленной перезагрузки linux-сервера через openssh

Так случается, что не всегда есть возможность самому подключиться к удаленному Linux-серверу, чтобы его перезагрузить (например, для вступления в силу каких-либо изменений). Тогда появляется необходимость дать права на перезагрузку юзверю. Но, чтобы не давать ему админских прав на управление сервером, можно наваять скриптец для удаленной перезагрузки. Понадобится:

1. Openssh-server на Linux-сервере:
admin@server$ sudo apt-get install openssh-server

2. Openssh-client на Linux-клиенте:
admin@client$ sudo apt-get install openssh-client

3. Создаем на сервере пользователя, от имени которого будет выполняться ребут:
admin@server$ sudo useradd -m -s /bin/bash rebootuser
admin@server$ sudo passwd rebootuser
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully 

4. На клиенте создаем открытый ключ (дабыне палить root пароли юзверям):
admin@client$ ssh-keygen -t rsa
 
на предложение
Enter passphrase:
Enter same passphrase again:
нажать 'Enter' (т.е. Оставить пустым, чтоб ssh не требовал пароль)

ключ будет лежать в ~/.ssh/id_rsa.pub

5. Копируем открытый ключ на сервер:
Содержимое файла ~/.ssh/id_rsa.pub на клиенте, необходимо скопировать в файл домашней директории пользователя, от имени которого будет осуществляться подключение по ssh (в нашем случае - это rebootuser) ~/.ssh/authorized_keys (если его нет, создаем) на сервере. Сохраняем. Дергаем службу ssh ($sudo /etc/init.d/ssh restart)

Логинимся на серв для проверки:
admin@client$ ssh rebootuser@'server_ip'

Вуаля! Входим без запроса пароля!

6. Разрешаем на сервере rebotuser`у выполнять перезгрузку и выключение сервера без ввода пароля:
admin@server$ sudo visudo
и в конц добавляем
rebootuser 'server_name'=NOPASSWD: /sbin/reboot,/sbin/shutdown -h now

7. Создаем на клиенте скрипт ребута и делаем его исполнительным:
admin@client$ mcedit reboot_halt.sh
и вставляем в него:
ssh -t rebootuser@'server_ip' 'sudo reboot'
для выключения соответственно:
ssh -t rebootuser@'server_ip' 'sudo shutdown -h now'
даем права на исполнение:
admin@client$ chmod o+x reboot_halt.sh

Жопиздан:)

четверг, 23 февраля 2012 г.

Ошибка GPG

При обновлении Ubuntu столкнулся с такой вот ошибкой:
         Ошибка GPG: http://ua.archive.ubuntu.com lucid Release

Лечится так:
$ sudo -i
# apt-get clean
# cd /var/lib/apt
# mv lists lists.old
# mkdir -p lists/partial
# apt-get clean
# apt-get update

четверг, 16 февраля 2012 г.

Установка драйвера nVidia на Ubuntu 11.10 через консоль

Есть 2 неплохих способа установки драйвера nVidia на Ubuntu 11.10 через консоль:

Способ 1. Используем репозиторий Х-SWAT:
$sudo apt-add-repository ppa:ubuntu-x-swat/x-updates
$sudo apt-get update
$sudo apt-get install nvidia-current

Способ 2. Качаем с оф. Сайта nvidia драйвер (NVIDIA-Linux-x86-290.10.run) под свой девайс. Преходим в полноценный терминальный режим (Ctr+Alt+F1). Оключаем X не перегружаясь в режим восстановления:
#/etc/init.d/lightdm stop
если установлен gnome (или версия Ubuntu <= 10.04), то команда:
#/etc/init.d/gdm stop
 далее:
#sh /home/drivers/NVIDIA-Linux-x86-290.10.run


По окончании  выполнения установки/обновления драйвера - ребут.