Tag: howto

How-to, linux @ 13 Декабрь 2008, “2 Comments”
Сейчас вот неожиданно озадачился включением поддержки Framebuffer в консоли.
Чтобы включить framebuffer на моем ноутбуке пришлось неплохо погуглить и пошевелить мозгой.
Первое от чего я отказался, здраво поразмыслив - от частых хаутушек по поводу включение vesafb, поскольку на мой взгляд vesa достаточно старая технология и у нее есть куча ограничений. В общем решил остановится на родном nvidiafb, для этого:
1. В /etc/modprobe.d/blacklist-framebuffer комментируем строку:
#blacklist nvidiafb
2. В /etc/initramfs-tools/modules добавляем:
fbcon
nvidiafb

3. В /boot/grub/menu.lst
Добавляем в конец подобной строки:
kernel /boot/vmlinuz-2.6.27-7-generic root=UUID=da9646cb-59fb-4125-9c94-cb7ad728bd36 ro quiet video=nvidiafb vga=0x0360
0x0360(8 бит) можно сменить на 0x0361(24 бит):
Единственная проблема, что при 24 битах видео работает, и даже в цвете, но тормозииит(да и вообще вывод консоли очень тормозит). А при 8ми битах - не работает видео, и неверно работает /dev/fb0 вообще. Зато разрешение получше, чем по умолчнаию.
После этого:
update-initramfs -u
Перезагружаемся, и получаем нормальные шрифты в консоли и приятное разрешение. Осталось только для уюта тукса поставить в консоли :)
How-to, linux @ 11 Декабрь 2008, “11 Comments”
Поскольку у меня компьютер сейчас запущен почти всегда(новый ноутбук не такой шумный как старый, когда на нем ничего не запущено, кроме(например rtorrent).
Захотелось решить проблему с будильником, поскольку к телефонному я уже привык и выключаю его не просыпаясь.
Сначала я ставил включение музыки в кронтабе, но поскольку его античеловечный интерфейс весьма неудобен(да и крон это чересчур для такой простой задачи, как разовый будильник). И тут я вспомнил про at, это более простой менеджер расписания, причем он сильно проще чем cronab, хотя и менее функциональный.
Ставил будильник так:
~ $ at 8:30
warning: commands will be executed using /bin/sh
at> /usr/bin/mpc play #включение музыки в mpd
at> #Ctrl+D
~ $ at -l
11 Thu Dec 11 08:30:00 2008 a lib

В общем задание добавлялось, и я спокойно шел спать.
Сегодня озадачился написанием скрипта, который бы облегчил мне установку будильника.
Создал
touch /usr/bin/alarm
vim /usr/bin/alarm


#!/bin/bash
echo "/usr/bin/mpc play" | at $1


Теперь ставлю будильник чуть проще:
~ $ alarm 8:30

В принципе я хочу ещё доработать, чтобы было постепенное увеличение громкости через alsa, ну и ещё пару функций типа расписания и готовых вариантов будильника и т.д. Но пока хватит. Пойду посплю
~ $ alarm 8:00

P.S. Первые два топика по запросу "bash at alarm" - фигня, неумело написанные скрипты :)
How-to, linux @ 28 Ноябрь 2008, “10 Comments”
Прелюдия: сейчас я хочу попытаться объяснить почему я выбираю именно этот способ установки.
Установка без первоначальной графической оболочки позволит как минимум в два раза ускорить сам процесс установки и последующего обновления. Почему?
Ну во первых если устанавливать с графикой, но без драйверов, которые вы устанавливаете позже, то попортите себе все нервы ожидая отрисовки окошек :)
Во вторых - вам не нужно будет ожидать обновления всего того набора пакетов, которые после установки будут поставлены(а это порядка 200-300Мб дополнительно придется скачать, кому то может быть и не так много, но мне честно говоря жалко времени на пустое обновление)
В третьих - замучаетесь очищать ubuntu от предустановленных программ. А так будет установлено строго то, что нужно :)

Итак, прежде всего нужно будет скачать свежий образ системы с сайта ubuntu.com:
http://mirror.yandex.ru/ubuntu-releases/intrepid/ubuntu-8.10-alternate-i386.iso
Или, еще лучше:
http://mirror.yandex.ru/ubuntu-releases/8.04.1/ubuntu-8.04.1-alternate-i386.iso
При установке выбираем - установка без графического интерфейса. (так называемая ubuntu minimal)
Проходим всю установку, так как будто Вы устанавливаете обычную ubuntu с alternate cd (а live cd просто не будет работать на самом деле :)
Разбиваем диск на разделы - лично я рекомендую на / - 2 Гб, на /var - 3Гб , на /usr - 8 Гб, на swap порядка 500Мб чтобы было , на /home - всё остальное. В случае переустановки вы можете отформатировать / , /var - 3Гб , на /usr
После разбивки диска, ждём когда установится базовая система и после перезагрузки попадаем в консоль:
user@host~$:
Сейчас поставим базовую систему, которая нам понадобится для работы, установки драйверов и поддержания системы в актуальном состоянии:
sudo aptitude update
sudo aptitude upgrade
sudo aptitude install xorg dkms mc alsa-base linux-headers-$(uname -r) build-essential gcc gsynaptics

Теперь нужно добавить пользователя в группу video чтобы не было проблем с правами при дальнейшей работе.
sudo usermod -a -G video user
Перезагружаемся, чтобы все драйвера устанавливались на новое ядро. Это важно, поскольку если вы сейчас всё соберете и перезагрузитесь, всё придется проделывать заново.
Сейчас будем собирать драйвера:
Устанавливаем и настраиваем драйвера для видеокарты:
sudo -s && cd /usr/src
wget http://ru.download.nvidia.com/XFree86/Linux-x86/177.82/NVIDIA-Linux-x86-177.82-pkg1.run
sh NVIDIA-Linux-x86-177.82-pkg1.run

При установке нужно отказаться от скачивания заранее собранного модуля, и собрать его самому. В самом конце Вам предложат автоматически настроить xorg - безусловно соглашаемся.
После этого добавляем в /etc/X11/xorg.conf
В Section "Device"
Option "NoLogo" "true"
Устанавливаем и настраиваем wifi
wget http://snapshots.madwifi-project.org/madwifi-hal-0.10.5.6/madwifi-hal-0.10.5.6-r3875-20081105.tar.gz
tar xzf madwifi-hal-0.10.5.6-r3875-20081105.tar.gz
mcedit /usr/src/madwifi-hal-0.10.5.6-r3875-20081105/dkms.conf

Добавляем туда:
PACKAGE_NAME="madwifi-hal"
PACKAGE_VERSION="0.10.5.6-r3875-20081105"
AUTOINSTALL="yes"
BUILT_MODULE_NAME[0]="ath_pci"
BUILT_MODULE_LOCATION[0]="ath/"
DEST_MODULE_LOCATION[0]="/kernel/net/"
BUILT_MODULE_NAME[1]="ath_hal"
BUILT_MODULE_LOCATION[1]="ath_hal/"
DEST_MODULE_LOCATION[1]="/kernel/net/"
BUILT_MODULE_NAME[2]="ath_rate_sample"
BUILT_MODULE_LOCATION[2]="ath_rate/sample/"
DEST_MODULE_LOCATION[2]="/kernel/net/"
BUILT_MODULE_NAME[3]="ath_rate_minstrel"
BUILT_MODULE_LOCATION[3]="ath_rate/minstrel/"
DEST_MODULE_LOCATION[3]="/kernel/net/"
BUILT_MODULE_NAME[4]="ath_rate_amrr"
BUILT_MODULE_LOCATION[4]="ath_rate/amrr/"
DEST_MODULE_LOCATION[4]="/kernel/net/"
BUILT_MODULE_NAME[5]="ath_rate_onoe"
BUILT_MODULE_LOCATION[5]="ath_rate/onoe/"
DEST_MODULE_LOCATION[5]="/kernel/net/"
BUILT_MODULE_NAME[6]="wlan"
BUILT_MODULE_LOCATION[6]="net80211/"
DEST_MODULE_LOCATION[6]="/kernel/net/"
BUILT_MODULE_NAME[7]="wlan_scan_ap"
BUILT_MODULE_LOCATION[7]="net80211/"
DEST_MODULE_LOCATION[7]="/kernel/net/"
BUILT_MODULE_NAME[8]="wlan_scan_sta"
BUILT_MODULE_LOCATION[8]="net80211/"
DEST_MODULE_LOCATION[8]="/kernel/net/"
BUILT_MODULE_NAME[9]="wlan_tkip"
BUILT_MODULE_LOCATION[9]="net80211/"
DEST_MODULE_LOCATION[9]="/kernel/net/"
BUILT_MODULE_NAME[10]="wlan_xauth"
BUILT_MODULE_LOCATION[10]="net80211/"
DEST_MODULE_LOCATION[10]="/kernel/net/"
BUILT_MODULE_NAME[11]="wlan_wep"
BUILT_MODULE_LOCATION[11]="net80211/"
DEST_MODULE_LOCATION[11]="/kernel/net/"
BUILT_MODULE_NAME[12]="wlan_ccmp"
BUILT_MODULE_LOCATION[12]="net80211/"
DEST_MODULE_LOCATION[12]="/kernel/net/"
BUILT_MODULE_NAME[13]="wlan_acl"
BUILT_MODULE_LOCATION[13]="net80211/"
DEST_MODULE_LOCATION[13]="/kernel/net/"


dkms add -m madwifi-hal -v 0.10.5.6-r3875-20081105
dkms build -m madwifi-hal -v 0.10.5.6-r3875-20081105
dkms install -m madwifi-hal -v 0.10.5.6-r3875-20081105


Настраиваем тачпад(он работает из коробки, но кнопочка отключения и включения не работает сама по себе, можно повесить на сочетание клавиш на выполнение команду отключения и включения тачпада(мне он мешает печатать):

Заменяем в /etc/X11/xorg.conf в Section "ServerLayout"
InputDevice "Synaptics Touchpad" "CorePointer
Заменяем Section "InputDevice" на
Section "InputDevice"
Identifier "Synaptics Touchpad"
Driver "synaptics"
Option "Protocol" "auto"
Option "SendCoreEvents" "True"
Option "Protocol" "auto-dev"
Option "Device" "/dev/psaux"
Option "SHMConfig" "True"
EndSection


Чтобы включить/выключить тачпад использую команду:
synclient -l | egrep "Touch.*=.*1" && synclient TouchpadOff=0 || synclient TouchpadOff=1
В fluxbox у меня она висит на none 180, это Fn + F3
none 180 :ExecCommand synclient -l | egrep "Touch.*=.*1" && synclient TouchpadOff=0 || synclient TouchpadOf
Также хорошая команда:
xset dpms force off
её я повесил на Fn + F5
none 150 :ExecCommand xset dpms force off
Но это оффтопик, вернёмся к нашим баранам.

Итак, базовую функциональность мы уже поимели, теперь можно заняться установкой нужного окружения.
Есди хотите получить базовые дистрибутивы Ubuntu, Kubuntu или Xubuntu, то нужно поставить пакеты:
ubuntu-desktop, kubuntu-desktop или xubuntu-desktop
Лично меня Gnome в 8.10 очень разочаровал, непонятно почему меню гнома открывается с большой задержкой. Поэтому я остановился на наборе:
sudo aptitude install fluxbox wdm firefox sonata mpd pcmanfm pidgin tilda whois traceroute openssh-server vim-full vim-perl unrar rar p7zip p7zip-full opera openoffice.org nautilus mpc mplayer msttcorefonts apcalc msttcorefonts evince gimp gpicview

Настройка отображения шрифтов в Ubuntu:
sudo apt-get install ttf-liberation
cd /tmp
wget ftp://linvinus.ru/fonts/hardy/fonts.tar.bz2
sudo mv /etc/fonts /etc/fonts.backup
sudo tar jxvf ./fonts.tar.bz2 -C /etc


Огромное спасибо хочется выразить тем людям которые составили эти хауту
Установка wifi с помощью dkms(к сожалению не помню где я первый раз видел эту хаутушку, если поможете найти автора - буду благодарен)
Шрифты Hardy спасибо Денису, за то что он излечил проблему "шревтов"
Англоязычное Ubuntu Community За помощь в отключении тачпада.

Вот скриншот того что у меня сейчас есть:
lhttp://img.librarian.spb.ru/20081127222859117694760.png
Пока ищу способ поставить курсор для мышки, на стандартный убунтовский... А то меня черный не возбуждает.
linux, жизнь @ 31 Октябрь 2008, “1 Comments”
В одной из статей моего блога я писал, что прикрутил статистику к блогу.
Исходники скрипта, который делает такую статистику я взял из статьи на Хабрахабре
Однако на текущий момент, файлы которые там выложены - не работают.
Оказалось всё просто - человек который их выложил - разрабатывал на локальной машине, и путь к файлам, которые писал скрипт были неверные, а именно /home/localhost/...
В общем это происходило изза глобальной переменной $GLOBAL["path"].
Я немного исправил файл, в котором возникали ошибки, и выложил его Вам, для скачивания, забрать скрипт статистики можно по этой ссылке

Коротко о настройке скрипта:
В файле config.php указываем 4 значения:
$u="user";
$p="pass";
$id="site_id";
$path="/path/to/statistics/folder";

где user - имя пользователя Google(можно создать отдельного в GA)
pass - пароль к имени пользователя
site_id - id сайта в системе GA https://www.google.com/analytics/reporting/dashboard?id=xxxxxxx
/path/to/statistics/folder - путь к папке с скриптом, папка должна быть доступна для просмотра снаружи.
Теперь можно запустить считывание данных из Google Analytics: http://example.com/stats/stat.php
Потом можно смотреть данные статистики: http://example.com/stats/index.php
Обновление можно повесить на регулярное выполнение в crontab'е:
0 */2 * * * /usr/local/bin/php /path/to/statistics/folder/stat.php
(тут нужно уточнять у ТП провайдера какого вида должна быть задача(можно например командой GET http://example.com/stats/stat.php > /dev/null

В принципе эту статистику можно прикрутить непосредственно в админку сайта(например Wordpress, если будет время - покурю один плагин, может переделаю его)
Можно выводить непосредственно на странице, как это сделано у меня.
Для того чтобы сделать вывод аналогичный моему - устанавливаете плагин Exec-PHP, и в коде страницы вписываете:
<?php include("/path/to/statistic/folder/index.php"); ?>
linux @ 11 Октябрь 2008, “3 Comments”
Наткнулся на хорошую статью, подумал что неплохо было бы перевести ну и немного дополнить.

Собственно задача - подключить раздел удалённой машины по SSH.
sudo su
1. Устанавливаем:
aptitude install sshfs
2. Настраиваем автоматическое подключение:
Добавляем запись в fstab
gedit /etc/fstab

sshfs#user@host:/home/name /mnt/sshfs/homebox fuse comment=sshfs,port=22,noauto,users,exec,uid=1000,gid=1000,allow_other,reconnect,transform_symlinks,BatchMode=yes 0 0

Если у Вас отличается порт подключения SSH то можете сменить его здесь port=22
Добавляем в конфиг fuse:
echo user_allow_other >> /etc/fuse.conf
3. Настраиваем автомонтирование, если есть/нет сети.
Добавляем в /etc/network/if-up.d/mountsshfs
gedit /etc/network/if-up.d/mountsshfs

#!/bin/sh
## http://ubuntuforums.org/showthread.php?t=430312
## The script will attempt to mount any fstab entry with an option
## "...,comment=$SELECTED_STRING,..."
## Use this to select specific sshfs mounts rather than all of them.
SELECTED_STRING="sshfs"
# Not for loopback
[ "$IFACE" != "lo" ] || exit 0
## define a number of useful functions
## returns true if input contains nothing but the digits 0-9, false otherwise
## so realy, more like isa_positive_integer
isa_number () {
! echo $1 | egrep -q '[^0-9]'
return $?
}
## returns true if the given uid or username is that of the current user
am_i () {
[ "$1" = "`id -u`" ] || [ "$1" = "`id -un`" ]
}
## takes a username or uid and finds it in /etc/passwd
## echoes the name and returns true on success
## echoes nothing and returns false on failure
user_from_uid () {
if isa_number "$1"
then
# look for the corresponding name in /etc/passwd
local IFS=":"
while read name x uid the_rest
do
if [ "$1" = "$uid" ]
then
echo "$name"
return 0
fi
done else
# look for the username in /etc/passwd
if grep -q "^${1}:" /etc/passwd
then
echo "$1"
return 0
fi
fi
# if nothing was found, return false
return 1
}
## Parses a string of comma-separated fstab options and finds out the
## username/uid assigned within them.
## echoes the found username/uid and returns true if found
## echoes "root" and returns false if none found
uid_from_fs_opts () {
local uid=`echo $1 | egrep -o 'uid=[^,]+'`
if [ -z "$uid" ]; then
# no uid was specified, so default is root
echo "root"
return 1
else
# delete the "uid=" at the beginning
uid_length=`expr length $uid - 3`
uid=`expr substr $uid 5 $uid_length`
echo $uid
return 0
fi
}
# unmount all shares first
sh "/etc/network/if-down.d/umountsshfs"
while read fs mp type opts dump pass extra
do
# check validity of line
if [ -z "$pass" -o -n "$extra" -o "`expr substr ${fs}x 1 1`" = "#" ];
then
# line is invalid or a comment, so skip it
continue
# check if the line is a selected line
elif echo $opts | grep -q "comment=$SELECTED_STRING"; then
# get the uid of the mount
mp_uid=`uid_from_fs_opts $opts`
if am_i "$mp_uid"; then
# current user owns the mount, so mount it normally
{ sh -c "mount $mp" &&
echo "$mp mounted as current user (`id -un`)" ||
echo "$mp failed to mount as current user (`id -un`)";
} &
elif am_i root; then
# running as root, so sudo mount as user
if isa_number "$mp_uid"; then
# sudo wants a "#" sign icon front of a numeric uid
mp_uid="#$mp_uid"
fi
{ sudo -u "$mp_uid" sh -c "mount $mp" &&
echo "$mp mounted as $mp_uid" ||
echo "$mp failed to mount as $mp_uid";
} &
else
# otherwise, don't try to mount another user's mount point
echo "Not attempting to mount $mp as other user $mp_uid"
fi
fi
# if not an sshfs line, do nothing
done wait


и /etc/network/if-down.d/umountsshfs
gedit /etc/network/if-down.d/umountsshfs

#!/bin/bash
# Not for loopback!
[ "$IFACE" != "lo" ] || exit 0
# comment this for testing
exec 1>/dev/null # squelch output for non-interactive
# umount all sshfs mounts
mounted=`grep 'fuse.sshfs\|sshfs#' /etc/mtab | awk '{ print $2 }'`
[ -n "$mounted" ] && { for mount in $mounted; do umount -l $mount; done; }


И меняем права доступа на файл:
chmod 755 /etc/network/if-up.d/mountsshfs /etc/network/if-down.d/umountsshfs
chown root:root /etc/network/if-up.d/mountsshfs /etc/network/if-down.d/umountsshfs


Собственно мне не совсем понятно, как именно происходит это монтирование, если на стороннем хосте не реализована авторизация по ключам.
← + Ctrl + →