Что делать с ошибкой W: Possible missing firmware /lib/firmware/rtl_nic/rtl8105e-1.fw for module r8169 например при обновлении ядра? Собственно это не совсем ошибка, а предупреждение. Просто для работы realtek не хватает пакета firmware-realtek.
Рубрика: Ubuntu
Ubuntu
Опыт общения на форумах по Linux
Случилась у меня казалось бы неразрешимая проблема. Во время обновления Debian 6 не захотело вставать ядро. Все идеи иссякли и я полез на форумы по linux искать совета.
В этом посте хочу описать свои впечатления о 5-ти форумах, крупных и первых в списке гугла. Я грамотно составил текст сообщения и разместил на всех форумах, как делал уже это с php форумами.
Список полезных команд для Linux (Ubuntu, Debian) – ОБНОВЛЯЕМЫЙ
Давно хотел создать эту тему. Поехали..
Сетевая карта TF-3200 в Ubuntu
Погорел чип на материнке, нет подключения к сети. Надо купить сетевую карту! Знакомая ситуация?
В моем случае это была сетевая карта TF-3200 от TPlink, которая сейчас популярна в магазинах. Для конечно же нужен драйвер. На диск я не заглядывал, т.к. нету дисковода, а за драйвером полез на официальный сайт.
Переустановка Unity
Что делать, если Unity работало, но все пошло не так?
И не помогают команды unity –reset и unity –replace.
Или Unity вообще не был установлен, а очень хочется.
Тогда необходимо выполнить следующее.
Упрощение установки программ в WINE (Ubuntu style)
NFS – альтернатива sshfs
Для тех, кто работает с проектом на удаленном сервере, наверняка важна комфортность этой работы, особенно если используется IDE. В моем случае IDE NetBeans. У этой иде есть особенность, она сканирует проект при открытии, а при открытии большого удаленного проекта это сканирование может происходить и 30 минут. Во время сканирования иде превращается в тормозящий тектовый редактор, невозможно перейти к ф-ии по ctrl и вообще ничего, кроме написания кода. Да и то файлик может сохраняться долго.
Для монтирования удаленной системы раньше я использовал sshfs. Описывал в этом посте.
Преимущества:
+ защищенное соединение, запрашивает пароль
+ возможность автомонтирования
+ не плохая скорость доступа..
Недостатки:
– все же не достаточная скорость доступа
– соединение часто отваливается (по таймауту, неактивности или отвалу инета).
В итоге мне приходилось часто открывать проект заново и ждать пока он пересканируется >_<.
Позже я услышал о NFS – Network File System. По сути это как подключение сетевого диска. Для развертывания необходима установка серверного пакета на сервере:
1 2 3 |
$sudo apt-get install nfs-kernel-server nfs-common portmap |
и клиентского на своей машине:
1 2 3 |
$sudo apt-get install nfs-common portmap |
*portmap может быть заменен на rpcbind
Далее прописать папку и ip которому открыт доступ в
1 2 3 |
$sudo nano /etc/exports |
Строчка настройки выглядит примерно так:
1 2 3 |
/data 192.168.1.1(rw,no_root_squash,async) |
или можно указать диапазон или * для всех.
1 2 3 |
/data 192.168.1.1./24(rw,no_root_squash,sync) |
Доступные опции:
ro: Только на чтение, стоит по умолчанию
rw: Доступна запись
no_root_squash: ограничивать ли рута. если не установлена эта опция, то доступ к файлам идет от пользователя nobody. если опция установлена и на клиентской машине у вас пользователь с уровнем доступа root, то он будет как бы root на серверной папке.
no_subtree_check: проверять или нет поддиректории. если открыта только одна папка и нет подпапок, то включение этой опции ускорит запросы
sync: по умолчанию asynk. включение synk более безопасно, если вдруг соединение оборвется или сервер перезагрузится, то данные в редактируемом файле не потеряются. asynk быстрее.
После настройки надо перезапустить сервер:
1 2 3 |
$sudo /etc/init.d/nfs-kernel-server restart |
Хотя можно применять настройки после изменений так:
1 2 3 |
$sudo exportfs -a |
Для подключения папки на клиентской машине произвести описанную выше установку, далее просто:
1 2 3 |
mount ip:/home ~/mnt/srv |
Таким образом я замонтировал открытую папку /home с сервера с ip в свою домашнюю папку /mnt/srv.
Можно настроить монтирование в fstab
1 2 3 4 5 6 |
$sudo nano /etc/fstab и в конце дописываем следующую строку, например: 192.168.1.1:/data ~/data nfs rw,hard,intr 0 0 |
Тогда подключить можно
1 2 3 |
$sudo mount ~/data |
NFS
Преимущества:
+ перманентное соединение. разрывы гораздо реже (не было уже 2 дня)
+ скорость доступа. по моему проект подключенный так отсканировался быстрее, так же файлы сохраняются без задержек
Недостатки:
– безопасность. (доступ указывается для ИП, пароль не запрашивается)
Настройка memcached в debian для php на нескольких серверах
Понадобилась настройка memcached (memcache) на 2 сервера. Задача оказалась не такой тривиальной. С доступом на localhost, где демон слушает по умолчанию, проблем не было. Однако на удаленный сервер достучаться не получалось. Сервера оба debian.
Возможно этот пост актуален только для меня и проблем может не возникать.
Домашняя страница проекта на code.google.
Для начала установка. Тут все просто:
1 2 3 4 5 6 7 8 |
Step 1. $ sudo apt-get install memcached Step 2. $ sudo apt-get install php5-memcached Step 3. $ sudo /etc/init.d/apache2 restart |
Взято с мануала по memcached на php.net. Хотя при установке туда не заглядывал.
После установки можно проверить слушается ли теперь порт 11211.
1 2 3 4 |
# netstat -tap | grep memcached tcp 0 0 localhost:11211 *:* LISTEN 13036/memcached |
Так же можно проверить настройки конфига.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#/etc/memcached.conf #Memcached будет работать, как демон -d #Лог будет складывать туда logfile /var/log/memcached.log #Отведём 256 мегабайт ОЗУ под хранилище -m 256 #Слушать будет этот порт -p 11211 #от какого пользователя запускать. тут не root для безопасности -u nobody #Слушаем localhost -l 127.0.0.1 |
После изменений конфига делаем:
1 2 3 |
/etc/init.d/memcached restart |
Примеры выше взяты с Хабра.
В коде php используется очень просто. В данном случае у меня создается класс CACHE с singlton, приведен кусок.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
class Cache { static private $instance = null; public $memcache; // по умолчанию время жизни кэша - сутки private $timelimit = 86400; // $config - набор параметров public function __construct($config = array()) { // если в конфиге указано время жизни кэша - берем его if ($config['timelimit']) $this->timelimit = $config['timelimit']; $this->memcache = new Memcached(); $this->memcache->addServer('localhost', 11211); $this->memcache->addServer('*.*.*.*', 11211); } public static function instance($config = array()) { if (self::$instance == null) self::$instance = new Cache($config); return self::$instance; } .................. //Потом можно $this->memcache->set("foo", "Hello!"); $this->memcache->set("bar", "Memcached..."); $arr = array( $this->memcache->get("foo"), $this->memcache->get("bar") ); |
И тут то и выяснилось, что на второй сервер обращения не доходят. Элементарная подмена в конфиге адреса прослушивания ничего не дала (-l *.*.*.*).
Диагностику помогут провести следующие ф-ии:
1. Показать есть ли процесс memcached
1 2 3 4 |
ps aux | grep memca nobody 21195 0.1 0.1 88884 23756 ? Sl 08:21 0:05 /usr/bin/memcached -v -m 1000 -p 11211 -u nobody -l *.*.*.*, 127.0.0.1 |
Тут мы видим, что процесс есть и запущен на нужном адресе. Памяти выделено 1000мб, пользователь nobody. 127.0.0.1 тут оказался лишним, memcached не поддерживает несколько ip.
2. Показать слушаемые порты
1 2 3 4 |
netstat -tap | grep memca tcp 0 0 razlet_second:11211 *:* LISTEN 21195/memcached |
Точно слушает.
3. Включить вывод ошибок в php. :) Ошибок не было.
4. Догадка о закрытом порте. Если не установлено, то ставим nmap. Проверяем localhost или ip.
1 2 3 4 |
sudo apt-get install nmap nmap -sT -O localhost |
Можно еще так проверить. Если нет соединения, то закрыт.
1 2 3 4 |
sudo apt-get install telnet telnet *.*.*.* 11211 |
Выдаст список открытых портов. В моем списке 11211 не оказалось. “Вот в чем собака зарыта”. :)
5. Смотрим iptables.
1 2 3 |
iptables -L |
Собственно есть еще много ключей, -nat например, но этого хватит. Выдаст список установленных для этого фаерволла правил. Еще можно так:
1 2 3 |
iptables-save |
Если без перенаправления, то в консоли выведутся правила. Через эту команду можно организовать сохранение настроек, т.к. после перезагрузки они сбросятся.
1 2 3 4 |
iptables-save > /etc/iprules.lst iptables-restore < /etc/iprules.lst |
Далее порт 11211 надо открыть, но только для одного IP адреса.
Тут мне пригодились следующие ф-ии:
1. Показать нумерованный список правил и удалить правило по номеру
1 2 3 4 |
iptables -L INPUT --line-numbers iptables -D INPUT номер |
2. закрыть все входящие, для которых нет правил на открытие
1 2 3 4 5 6 |
iptables -P INPUT DROP #открыть только для одного ИП и порта iptables -A INPUT -s 1.2.3.4 -p tcp --dport 11211 -j ACCEPT |
Еще примеры:
открыть все исходящие порты
iptables -P OUTPUT ACCEPT
открыть порт 80 для всех входящих соединений
iptables -A INPUT –dport 80 -j ACCEPT
открыть 22 и 5432 порты только для конкретного IP
iptables -A INPUT -m multiport –dports 22,5432 -s IP_ADDRESS -j ACCEPT
Так же не забудьте открыть другие нужные порты для нужных ИП.
Более подробная настройка iptables в этом посте, с примерами скриптов.
Еще можно подкрутить сессии в php.ini на использование с memcached.
1 2 3 4 5 6 7 8 |
[Session] ; Handler used to store/retrieve data. ; http://php.net/session.save-handler extension = memcache.so session.save_handler = memcache session.save_path = "tcp://127.0.0.1:11211" |
Для мониторинга была установлена утилита phpmemcachedadmin. В ней можно создать стек ваших серверов с memcached и смотреть статистику в приятном интерфейсе.
Skype error: libxss на ubuntu 11.10 64bit
skype: error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory
А я просто хотел sudo apt-get install skype. Что же делать?
Сначала проверим, возможно не установилась нужная библиотека. Хотя apt тянул все нужные библиотеки и libXss.so в том числе.
Проверяем
sudo apt-get install libXss.so
или
apt-file search libXss.so
или
dpkg -S libXss.so
Скорее всего вам выдаст что-то вроде
1 2 3 4 5 6 7 8 9 |
ia32-libs: /usr/lib32/libXss.so ia32-libs: /usr/lib32/libXss.so.1 ia32-libs: /usr/lib32/libXss.so.1.0.0 libxss-dev: /usr/lib/libXss.so libxss1: /usr/lib/libXss.so.1 libxss1: /usr/lib/libXss.so.1.0.0 libxss1-dbg: /usr/lib/debug/usr/lib/libXss.so.1.0.0 |
Конечно же установщик потянул с собой нужные ia32-libs и libxss1 библиотеки. Но скайп все равно не работает. Дело в том, что скайп написан в 32 битной архитектуре, а у нас 64 битная система, значит нам нужны библиотеки под 32 бит – i386.
Решение:
1 2 3 4 5 |
echo foreign-architecture i386 | sudo tee /etc/dpkg/dpkg.cfg.d/multiarch sudo apt-get install libxss1:i386 libqtcore4:i386 libqt4-dbus:i386 sudo apt-get install libqtgui4:i386 |
UPD. 10.08.13
Еще одна ошибка
error while loading shared libraries: libGL.so.1: cannot open shared object file: No such file or directory
Фиксится таким образом:
1 2 3 |
sudo nano /etc/ld.so.conf.d/skype.conf |
Добавить туда это
1 2 3 |
/usr/lib/i386-linux-gnu/mesa/ |
И запускаем конфиг.
1 2 3 |
sudo ldconfig -v |
Для ubuntu 13.04
1 2 3 4 5 |
sudo add-apt-repository "deb http://archive.canonical.com/ $(lsb_release -sc) partner" sudo apt-get update sudo apt-get install skype && sudo apt-get -f install |
1 2 3 |
sudo apt-get install sni-qt sni-qt:i386 |
Автоматическое монтирование по sshfs, автоматический вход по ssh
Если необходимо работать с кодом на удаленном сервере то можно пойти несколькими путями:
- FTP – качает tmp файл, редактирует и закачивает обратно на лету. Можно использовать редактор с подсветкой.
- Зайти по ssh и пользоваться консольными редакторами nano, vim и др, а так же mc. Необходимо постоянно вводить пароль, достает.
- Примонтировать файловую систему через FTP или SSH. В этом случае получим как будто папку в нашей файловой системе типа /mnt/server и тогда возможно использовать IDE с доступом ко всему проекту сразу.
Сейчас рассмотрим третий вариант. Монтирование по FTP осуществляется в Ubuntu с помощью пакета curlftpfs. Однако подключение будет очень медленным, отрывать большие проекты в IDE будет практически невозможно. Монтирование по ssh не смотря на шифрование поддерживает скорость 200-250кб.
Для начало надо установить пакет sshfs.
1 2 3 |
sudo apt-get install sshfs |
Следующие действия уже выполнять не нужно, они выполняются автоматически, но все же приведу пример. Возможно нужно будет перезагрузиться.
1 2 3 4 5 6 7 8 |
# Загрузка модуля sudo modprobe fuse # Настройка прав доступа sudo adduser username fuse sudo chown root:fuse /dev/fuse |
Пример использования sshfs
1 2 3 4 |
mkdir ~/mnt/server sshfs username@host:/remotepath ~/mnt/server |
Чтобы отмонтировать
1 2 3 |
umount ~/mnt/server |
И вот в момент подключения будет запрошен пароль. Открытая сессия будет сохраняться до перезагрузки или завершения сеанса, т.е. не надо будет восстанавливать сессию как с ssh после перерыва в работе. Но когда работаешь с сервером каждый день, то подключаться каждый раз перед работой тоже надоедает. Стоит сделать автоматическое монтирование по sshfs.
Для начала генерируем открытый и закрытый ключ.
1 2 3 |
ssh-keygen -t rsa |
На все вопросы генерации жмем Enter, пароль вводить не надо. В итоге будут созданы ключи в ~/.ssh директории.
id_rsa – закрытый ключ, должен быть секретным и никому не виден.
id_rsa.pub – открытый, его и будем использовать для входа без пароля.
Все, что остается сделать, это записать открытый ключ в файл .ssh/authorized_keys на сервере для нужного пользователя. Если для root то /root/.ssh/ иначе в /home/user/.ssh
Способ первый длинный:
Копируем открытый ключ на сервер. Выполняется на клиентской машине.
1 2 3 |
scp .ssh/id_rsa.pub @:/home/user/.ssh |
Копируем ключ в нужный файл. Выполняется на сервере.
1 2 3 |
cat id_rsa.pub >> authorized_keys |
Способ второй короткий:
Копируем с клиентской машины ключ сразу куда надо на сервер.
1 2 3 |
ssh-copy-id -i ~/.ssh/id_rsa.pub @ |
Та-да! Теперь еще можно выставить права на чтение на сервере:
1 2 3 |
chmod 0700 ~/.ssh |
Пробуем зайти по ssh.
1 2 3 |
ssh user@server.com |
Если вход произошел успешно и главное без ввода пароля, то полдела уже сделано. Теперь задействуем установленный ранее sshfs. Но сделаем это хитро. Создадим bash скрипт и добавим его в автозагрузку.
1 2 3 4 |
#!/bin/sh sshfs @:/home/user /mnt/server |
Тут например монтируем домашнюю удаленную папку в папку server на локальной машине.
Меняем права на выполнение для файла
1 2 3 4 5 |
chmod +x name.sh #или chmod 777 name.sh |
В автозагрузку можно добавить просто команду или переместить этот файл в /etc/init.d/ или создать правило в cron с меткой @reboot.
Теперь при каждой перезагрузке файловая система будет монтироваться автоматически по sshfs и не надо вводить пароль!
Можно сделать автоматическое монтирование и без rsa ключей. Для этого надо добавить в автозагрузку команду:
1 2 3 |
echo 'password' | sshfs root@server.com:/srv /home/user/mnt/server/ -o password_stdin |
Пароль берется автоматически из стандартного потока ввода-вывода.
Возможные проблемы.
1. Agent admitted failure to sign using the key.Permission denied (publickey).
Означает, что сгенерированный rsa ключ не установлен в системе, не привязан. Для привязки надо выполнить:
1 2 3 |
ssh-add ~/.ssh/id_rsa |
2. Что если не вышло выполнить команду из пункта 1 и выдалась ошибка
Could not open a connection to your authentication agent
Надо выполнить сначала
1 2 3 |
ssh-agent /bin/bash |
И уже после ssh-add из пункта 1.