Архив рубрики «linux»

nvidia в ubuntu: реанимация

20.11.2009

Внезапно умерли иксы. Как в анекдоте: шел ежик ubuntu по лесу, забыл как дышать грузить драйвер nvidia и умер.

Шел ежик по лесу, и вдруг забыл как дышать

Шел ежик по лесу, и вдруг забыл как дышать

Симптомы такие: при загрузке в том месте, где система обычно переходит в графический режим, экран начинает бешено мигать, при этом видно, что загружаются демоны. В конце концов видим обычное приглашение текстовой консоли, однако войти в систему невозможно, потому что клавиатура практически не слушается. Потому что в это время Xorg, словно в Колесе Сансары, непрерывно перерождается и умирает, не находя модуля nvidia:

/var/log/Xorg.0.log:

(II) LoadModule: "nvidia"
(WW) Warning, couldn't open module nvidia
(II) UnloadModule: "nvidia"
(EE) Failed to load module "nvidia" (module does not exist, 0)

Примерно такие сообщения я увидел в логах, войдя с ноута по ssh на терпящую бедствие рабочую станцию.

Гугление показало, что многие в такой ситуации тупо ставят бинарные драйверы от производителя. Интересно, что примерно год я тоже прельстился этим как бы очевидным и простым решением. Проблемы появляются не сразу, а в тот момент когда система обновит ядро. Драйверы, собранные для другой версии, с новой работать откажутся. И придется, матерясь, вручную переустанавливать бинарные драйверы.

Тут позволю себе немного лирики.

Линукс дома стоит у меня уже давно, и проблем с ним никогда особо не было.Смешные случаи были. Вот например жена, человек максимально далекий от компов, по радио как-то услышала, что есть такой Линукс, и под ним нет ни вирусов, ни троянов, и вообще чудо-система! И так ей эта идея понравилась, что говорит мне: «Слушай, а давай нам тоже этот Линукс поставим! Я в нем может тоже разберусь». Я ей говорю, «Мать, а ты не заметила что последние полгода ты на моем компе сидишь на этом самом Линуксе?» Это при том, что она не только по интернетам ходила, но и проги под Wine запускала, в Open Office чего-то та ваяла, GIMP-ом фотки редактировала ("странный у тебя фотошоп"). Посмеялись, удивлению её не было предела..

В общем, Линукс в целом был надежной домашней системой. А тут, после обновления Ubuntu до 9.10, начался сплошной гемор: то тут отвалится, то там. Ни кино посмотреть, ни в инет выйти. И вот сегодня женщина предложила снести к ебеням Ubuntu и поставить «нормальный виндовс».

Парни из Canonical! Я понимаю, что выпускать новый релиз каждые полгода — это ужасно круто, и ваши боссы наверняка гордятся вами и тем, что все идет по плану, но блин, чуваки! Мне ужасно неудобно перед женой, что вместо того, чтобы провести с ней вечер, я сижу и тупо втыкаю в десятки сообщений на форумах, где такие же бедняги сидят и тупо не знают что делать с сошедшей с ума железкой.

На этом с лирикой закончим.

В общем, гугль не помог, пришлось действовать по наитию.

Сначала смотрим, что у нас есть в системе:

$ sudo dpkg --get-selections|grep nvidia
nvidia-173-modaliases                           install
nvidia-180-modaliases                           install
nvidia-185-libvdpau                             deinstall
nvidia-185-modaliases                           install
nvidia-190-kernel-source                        install
nvidia-190-libvdpau                             install
nvidia-190-modaliases                           install
nvidia-96-modaliases                            install
nvidia-common                                   install
nvidia-glx                                      deinstall
nvidia-glx-173                                  deinstall
nvidia-glx-177                                  deinstall
nvidia-glx-185                                  deinstall
nvidia-glx-190                                  deinstall
nvidia-glx-new                                  deinstall
nvidia-glx-new-envy                             deinstall
nvidia-kernel-common                            install
nvidia-settings                                 deinstall
nvidia-settings-190                             install

Как видно, много всего. Удаляем всё:

$ sudo dpkg --get-selections | grep nvidia | grep -v deinstall | awk '{print $1}' | xargs sudo apt-get remove

Проверяем, что все удалено:

$ sudo dpkg --get-selections | grep nvidia | grep -v deinstall

И ставим только то, что нужно, а именно последний официальный драйвер от Canonical:

$ sudo apt-get install nvidia-glx-185

Сборка и установка проходят нормально, перегружаемся и видим, что ежик вспомнил как дышать и пошел дальше.

Тот самый ежик (картинка с сайта photo.ejik-land.ru)

Тот самый ежик (картинка с сайта photo.ejik-land.ru)

firefox: оптимизация внутренних баз данных sqlite

26.08.2009
$ find .mozilla/firefox -type f -name "*.sqlite" -exec time sqlite3 \{\} "VACUUM" ";"

via

linux: как узнать (проверить) key fingerprint?

08.06.2009

Узнать fingerprint ключа можно при помощи команды ssh-keygen:

# ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key
2048 e2:02:50:2b:d8:1f:ce:d4:18:07:02:7b:22:90:44:25 /etc/ssh/ssh_host_rsa_key.pub (RSA)

По-умолчанию команда ищет публичный ключ и печатает для него fingerprint.

Создание /etc/init.d/nginx на debian 5.0 lenny

05.06.2009
$ sudo vim /etc/init.d/nginx

Вставляем нижеследующий код (помним про команду ‘set :paste’ для вставки в VIM):

#!/bin/sh
### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $remote_fs $syslog $named $network $time
# Required-Stop:     $remote_fs $syslog $named $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start nginx at boot time
# Description:       Enable service provided by nginx.
### END INIT INFO
# $Id$
 
NGINXHOME=/usr/local/nginx
NGINXPID=$NGINXHOME/logs/nginx.pid
 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=$NGINXHOME/sbin/nginx
NAME=nginx
DESC=nginx
 
if [ ! -x $DAEMON ]
then
   echo "Couldn't find $DAEMON. Please set path to DAEMON."
   exit 0
fi
 
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
	. /etc/default/nginx
fi
 
set -e
 
case "$1" in
  start)
	echo -n "Starting $DESC: "
	start-stop-daemon --start --pidfile $NGINXPID \
		--exec $DAEMON -- $DAEMON_OPTS
	echo "$NAME."
	;;
  stop)
	echo -n "Stopping $DESC: "
	start-stop-daemon --stop --pidfile $NGINXPID \
		--exec $DAEMON
	echo "$NAME."
	;;
  restart|force-reload)
	echo -n "Restarting $DESC: "
	start-stop-daemon --stop --pidfile \
		$NGINXHOME/run/$NAME.pid --exec $DAEMON
	sleep 1
	start-stop-daemon --start --pidfile \
		$NGINXPID --exec $DAEMON -- $DAEMON_OPTS
	echo "$NAME."
	;;
  reload)
      echo -n "Reloading $DESC configuration: "
      start-stop-daemon --stop --signal HUP --pidfile $NGINXPID \
          --exec $DAEMON
      echo "$NAME."
      ;;
  *)
	N=/etc/init.d/$NAME
	echo "Usage: $N {start|stop|restart|force-reload}" >&2
	exit 1
	;;
esac
 
exit 0

Сохраняем скрипт и выходим из vim.

Делаем скрипт исполняемым:

$ sudo chmod 755 /etc/init.d/nginx

Указываем, что nginx нужно запускать при запуске и остановке сервера:

$  sudo /usr/sbin/update-rc.d -f nginx defaults

UPD: Блок, заключенный между строками

### BEGIN INIT INFO
### END INIT INFO

обеспечивает LSB-совместимость. Подробнее см. http://wiki.debian.org/LSBInitScripts

Установка nginx на debian 5.0 lenny

04.06.2009

На "пустом" свежеустановленном Debian не хватает ряда инструментов и библиотек для сборки и установки nginx.

Ставим gcc, make, и компания:

$ sudo apt-get install build-essential

Библиотеки для сборки nginx:

$ sudo apt-get install libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev

Для поддержки встроенного Perl добавляем:

$ sudo apt-get install libperl-dev

Собственно процесс сборки и установки (вместо 0.7.XX впишите номер актуальной версии):

$ wget http://sysoev.ru/nginx/nginx-0.7.XX.tar.gz
$ tar zxvf nginx-0.7.XX.tar.gz
$ ln -s nginx-0.7.XX nginx
$ cd nginx
$ ./configure \
--prefix=/usr/local/nginx \
--with-cc-opt="-I /usr/include" \
--with-ld-opt="-L /usr/lib" \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_perl_module  \
--with-http_ssl_module
 
$ make && make install
 

Обратите внимание, параметры

--with-cc-opt="-I /usr/include" --with-ld-opt="-L /usr/lib"

указывают на расположение системных заголовков и библиотек, без них configure не видит ряда системных библиотек.

Unix: Поиск и замена во многих файлах одновременно

09.02.2009

Задача: найти все файлы содержащие OLDTEXT, и заменить OLDTEXT на NEWTEXT.

Решение:

grep -HR OLDTEXT ./ | awk '{print $1}' | sed 's/:.*$//' | grep -v '~' | sort | uniq | xargs vim -p

В открывшемся окне vim командуем:

:tabdo %s/OLDTEXT/NEWTEXT/g

(заменить OLDTEXT на NEWTEXT во всех вкладках)

:xa

(записать изменения во всех вкладках)
либо

:qa!

(отменить изменения во всех вкладках)

Ссылки по теме:

  1. VIM FAQ
  2. Save all open buffers at once
  3. Сохранение файла без прав на запись в vim используя sudo
  4. [SLUG] Vim. Search and replace in multiple files

linux: iproute2 для управления сетевой подсистемой

19.12.2008

iproute2 -- набор утилит для управления сетевой подсистемой TCP/IP и управления трафиком в Linux.

Большинство руководств по конфигурированию сети до сих пор ссылаются на ifconfig, route и arp, однако ifconfig может вести себя неадекватно в современном сетевом окружении. Эти утилиты должны уйти на свалку истории, однако большинство дистрибутивов все еще включают их. Большинство систем управления сетью используют ifconfig, предоставляя лишь минимальный набор возможностей.

Проект /etc/net project ставит целью поддержку современных сетевых технологий, и, предоставляет набор утилит для наиболее полного контроля всех возможностей iproute2, включая управление трафиком.

Ссылки по теме:

ubuntu: обновляем систему до последнего релиза

18.12.2008

Инструкция по обновлению:
http://www.ubuntu.com/getubuntu/upgrading

Поехали..

tar: Просмотр содержимого архива (tar.gz, tgz, tar.bzip2)

05.12.2008

Для вывода оглавления tar-архива используется команда -t:

~$ tar -tvf archive.tar
-rw-rw-rw-  0 username  groupname 45523421 Dec  5 16:17 file1.txt
-rw-r--r--  0 username  groupname 13234112 Dec  5 16:17 file2.txt
-rw-r--r--  0 username  groupname 75323624 Dec  5 16:17 file3.txt

Для tar.gz (tgz; tar+gzip):

~$ tar -ztvf archive.tar.gz
...

Для tar.bz2 (tar+bzip2):

~$ tar -jtvf archive.tar.bz2
...

Использованные команды:
-t – печать содержимого архива на stdout
-v - подробный вывод, аналог ключа -l утилиты ls. Без этой команды будет выведен краткий спискок файлов без размеров и прав.
-f имя_файла - использовать указанный файл в качестве архива, иначе читать с ленты
-zgzip-фильтр. В некоторых реализациях использовать необязательно.
-jbzip2-фильтр. В некоторых реализациях использовать необязательно.

ubuntu: сохранение точки монтирования при смене названия устройства

02.12.2008

Понадобилось мне слить информацию со старого HDD, отформатированного в NTFS. Подключив его, обнаружил, что порядок монтирования устройств сбился, все разделы NTFS "съехали": тот, что был /dev/sda1 стал /dev/sdb1, /dev/sdb1 стал /dev/sdc1, а новый диск получил идентификатор /dev/sda1. В итоге новый диск оказался смонтирован на месте старого, а старый стал вроде как новым несмонтированным устройством.

Система, жившая до того на семействе /dev/sda2..8, спокойно перенесла виртуальный переезд на /dev/sdb2..6, поэтому я даже не сразу сообразил, как такое могло произойти, и как уберечься от подобных фокусов в дальнейшем.

Отгадка, как обычно, крылась в манах (UsingUUID):

Linux now prefers to use UUID (Universally Unique Identifier), LABEL, or symlinks to identify media storage devices on a system. Directly using /dev/hd*# or /dev/sd*# is no longer preferred since these device assignments can change between system boots:

  • all filesystems should be specified by UUID= or LABEL= for each partition.
  • all physical devices should be specified by a symlink, like /dev/cdrom for a cd drive and /dev/disk/by-id/... for each physical hard drive.

The files for which UUID is most critical:

  • /boot/grub/menu.lst
  • /etc/fstab
  • /etc/initramfs-tools/conf.d/resume

Просмотр /etc/fstab подтвердил догадку. Системные ext3 разделы были смонтированы через UUID, в то время как ntfs-разделы монтировались по старинке через имена вида /dev/sd*.

Таким образом, решение проблемы заключается в монтировании ntfs-разделов по UUID.

Узнать UUID для конкретного раздела можно так:

$ sudo vol_id -u /dev/sdb1
7CF803F6A8035E22
 

Размонтируем все ntfs-разделы, меняем записи в /etc/fstab, и заново монтируем раздел.

Было:

/dev/sda1 /mnt/sda1 ntfs  rw,noexec,utf8  0 0

Стало:

UUID=7CF803F6A8035E22 /mnt/sda1 ntfs  rw,noexec,utf8  0 0

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

UPD: Харитон пишет:

мне было известно 4 способа определения uuid'а, теперь знаю пятый))
- с помощью утилиты blkid (входит в пакет e2fsprogs)
sudo blkid /dev/sda1
- "...существуют и другие способы получить UUID например для ext2 используя dumpe2fs..."
dumpe2fs -h /dev/sda6
- или так:
ls -al /dev/disk/by-uuid/
- или так:
sudo tune2fs -l /dev/sda1 | grep UUID

самый примечательный из них третий, т.к. можно обойтись без sudo и дает список uuid'ов всех устройств