вторник, 28 июня 2011 г.

Как узнать версию Ubuntu и версию ядра.

Часто возникает необходимость определить версию дистрибутива Ubuntu, которая установлена у вас на компьютере и текущую версию ядра.

Определяем версию Ubuntu из командной строки

Команда lsb_release

Команда lsb_release предназначена для вывода информации о текущей версии дистрибутива Ubuntu. Чтобы получить требуемую информацию, выполните в командной строке команду lsb_release -a:
$ lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 9.10
Release: 9.10
Codename: karmic
 
Файл /etc/lsb-release Так же информация о версии Ubuntu хранится в файле /etc/lsb-release. Чтобы вывести файл, выполните в командной строке команду cat /etc/lsb-release:
 
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=9.10
DISTRIB_CODENAME=karmic
DISTRIB_DESCRIPTION="Ubuntu 9.10"

Файл /etc/issue

Есть еще один простой способ определить версию, это просмотреть содержимое файла /etc/issue, хотя сам файл предназначен несколько для других целей. Для этого в командной строке выполните:
$ cat /etc/issue
Ubuntu 9.10 \n \l
  
Определяем текущую версию ядра
Для определения версии ядра можно также воспользоваться командой uname. Выполните в командной строке:
$ uname -r 2.6.31-20-generic
Параметр -r используется для того, чтобы вывести информацию о версии ядра. Также можно вывести всю информацию, предоставляемую командой uname, для этого выполните команду с параметром -a:
$ uname -a Linux yuriy 2.6.31-20-generic #58-Ubuntu SMP Fri Mar 12 05:23:09 UTC 2010 i686 GNU
 

воскресенье, 26 июня 2011 г.

Полезныe утилиты для использования в сценариях

notify-send

При помощи утилиты notify-send вы можете показывать всплывающие уведомления путём отправки сообщений через notification daemon из командной строки. Очень удобный способ сообщать пользователям о каких-то событиях. Прежде, чем вы сможете воспользоваться этой утилитой, её необходимо установить, поскольку обычно она не установлена по умолчанию. В Ubuntu программа устанавливается так:
$ sudo apt-get install libnotify-bin
Теперь можно отправлять уведомления прямиком на рабочий стол пользователю:
$ notify-send "rsnapshot done :)"
Также notify-send принимает опции, при помощи которых можно управлять отображением. С ними можно ознакомиться на man-странице программы.

tput

При помощи утилиты tput вы можете получить дополнительные возможности при работе с терминалом, такие как:
  • перемещение курсора в любую позицию экрана;
  • получение информации о терминале;
  • установка цвета символов и фона;
  • печать жирным шрифтом;
  • печать в инверсном режиме и т. п.
Пример кода с использованием tput:
#!/bin/bash
 
# clear the screen
tput clear
 
# Move cursor to screen location X,Y (top left is 0,0)
tput cup 3 15
 
# Set a foreground colour using ANSI escape
tput setaf 3
echo "XYX Corp LTD."
tput sgr0
 
tput cup 5 17
# Set reverse video mode
tput rev
echo "M A I N - M E N U"
tput sgr0
 
tput cup 7 15
echo "1. User Management"
 
tput cup 8 15
echo "2. Service Management"
 
tput cup 9 15
echo "3. Process Management"
 
tput cup 10 15
echo "4. Backup"
 
# Set bold mode
tput bold
tput cup 12 15
read -p "Enter your choice [1-4] " choice
 
tput clear
tput sgr0
tput rc
Вот, что получится в результате:
Если вас заинтересовали возможности tput, вы можете получить больше информации на страницах man tput и man 5 terminfo.

setleds

При помощи команды setleds вы можете включать/отключать светодиоды клавиатуры. Например, чтобы включить Num Lock:
setleds -D +num
отключить Num Lock:
setleds -D -num
И, соответственно:
  • +caps — включить Caps Lock;
  • -caps — отключить Caps Lock;
  • +scroll — включить Scroll Lock;
  • -scroll — отключить Scroll Lock.
Более подробно о возможностях setleds можно узнать из man setleds.

zenity

При помощи zenity вы можете отображать GTK-диалоги и получать обратно ответы пользователя. Ниже приведён пример использования zenity в сценарии получения whois-информации.
#!/bin/bash
# Get domain name
_zenity="/usr/bin/zenity"
_out="/tmp/whois.output.$$"
domain=$(${_zenity} --title  "Enter domain" \
             --entry --text "Enter the domain you would like to see whois info" )
 
if [ $? -eq 0 ]
then
  # Display a progress dialog while searching whois database
  whois $domain  | tee >(${_zenity} --width=200 --height=100 \
          --title="whois" --progress \
               --pulsate --text="Searching domain info..." \
                                    --auto-kill --auto-close \
                                    --percentage=10) >${_out}
 
  # Display back output
  ${_zenity} --width=800 --height=600  \
      --title "Whois info for $domain" \
      --text-info --filename="${_out}"
else
  ${_zenity} --error \
      --text="No input provided"
fi
Так это выглядит в работе:
С полным перечнем поддерживаемых виджетов GTK+, а также справкой по работе с zenity можно ознакомиться на man-странице программы, а также при помощи команды
zenity --help

kdialog

kdialog подобен zenity, однако он использует возможности библиотеки QT, а не GTK+. Пример использования:
kdialog --dontagain myscript:nofilemsg --msgbox "File: '~/.backup/config' not found."
На странице shell scripting with KDE Dialogs можно получить больше информации о работе с kdialog.

dialog

При помощи dialog вы можете создавать пользовательский интерфейс в терминале, используя возможности библиотеки ncurses. Например:
#!/bin/bash
dialog --title "Delete file" \
--backtitle "Linux Shell Script Tutorial Example" \
--yesno "Are you sure you want to permanently delete \"/tmp/foo.txt\"?" 7 60
 
# Get exit status
# 0 means user hit [yes] button.
# 1 means user hit [no] button.
# 255 means user hit [Esc] key.
response=$?
case $response in
   0) echo "File deleted.";;
   1) echo "File not deleted.";;
   255) echo "[ESC] key pressed.";;
esac
Подробности о работе с dialog — на man-странице программы.
Помимо рассмотренных выше утилит, предоставляющих возможность построения пользовательских интерфейсов, со многими UNIX/Linux поставляются и другие. Некоторые из них:
  • xmessage — умеет выводить диалоги с кнопками и сообщениями;
  • gmessage — GTK+ аналог xmessage;
  • whiptail — похожа на dialog;
  • python-dialog — dialog-модуль для Python.

logger

Утилита logger представляет собой интерфейс к syslog. При помощи этой программы вы можете отправлять сообщения о событиях для регистрации в системном лог-файле или каком-либо другом.
$ logger "Hello World"
$ tail /var/log/messages
Jan 11 15:11:19 adesktop ashep: Hello World
За справкой традиционно обращайтесь к man logger.

setterm

При помощи утилиты setterm можно управлять различными параметрами терминала. В приведённом ниже примере устанавливается время гашения экрана монитора равным 15 минутам, а переключение в энергосберегающий режим — 60:
setterm -blank 15 -powersave powerdown -powerdown 60
В следующем примере текст в xterm будет выведен подчёркнутым:
setterm -underline on;
echo "Add Your Important Message Here"
setterm -underline off
Также, например, вы можете отключить отображение курсора на экране:
setterm -cursor off
и затем включить его:
setterm -cursor on
За подробностями по работе с программой — man setterm.

Отправка сообщений хостам MS Windows

При помощи утилиты smbclient можно отправлять текстовые сообщения пользователям хостов SMB/CIFS, если на них запущена соответствующая служба.
echo "Hello World" | smbclient -M hostname
Документация: man smbclient.

Работа с сокетами из bash

Непосредственно из bash вы можете открывать сокеты и передавать через них данные. Вам вовсе необязательно пользоваться curl или lynx, чтобы получить данные по сети от удалённого сервера. Bash особым образом интерпретирует обращения к файлам:
  • /dev/tcp/host/port — если host является корректным именем хоста, а port — номером порта, то bash попытается открыть сетевое соединение к этому хосту на указанный TCP-порт;
  • /dev/udp/host/port — то же самое, только речь идёт о UDP-соединениях.
Используя это, вы можете, например, определять, открыт или закрыт определённый порт:
(echo >/dev/tcp/localhost/25) &>/dev/null && echo "TCP port 25 open" || echo "TCP port 25 close"
Обернув вышеприведённый пример в цикл, можно проверять диапазон портов:
echo "Scanning TCP ports..."
for p in {1..1023}
do
  (echo >/dev/tcp/localhost/$p) >/dev/null 2>&1 && echo "$p open"
done
А при помощи следующего примера можно сделать так, чтобы ваш сценарий работал подобно HTTP-клиенту.
#!/bin/bash
exec 3 <> /dev/tcp/${1:-www.cyberciti.biz}/80
 
printf "GET / HTTP/1.0\r\n" >&3
printf "Accept: text/html, text/plain\r\n" >&3
printf "Accept-Language: en\r\n" >&3
printf "User-Agent: nixCraft_BashScript v.%s\r\n" "${BASH_VERSION}" >&3
printf "\r\n" >&3
 
while read LINE <&3
do
   # do something on $LINE
   # or send $LINE to grep or awk for grabbing data
   # or simply display back data with echo command
   echo $LINE
done
Больше информации, как всегда, вы можете получить на man-странице bash.

Замечание о заданиях cron и GUI-приложениях

Если вы планируете запускать ваши сценарии, написанные с использованием Zenity или ей подобными, не забывайте прежде определять значение переменной DISPLAY в строке описания задания файла crontab. Например:
@hourly  DISPLAY=:0.0 /home/vivek/scripts/monitor.stock.sh

суббота, 25 июня 2011 г.

Не много советов.

Очень простой способ передать файлы с машины на машину — tar cz. | nc -l -p 2214 (на передающей стороне) и nc адрес 2214 | tar xz (на принимающей). 2214 — номер порта, выбирается по желанию. в разных версиях nc нужно писать nc -l -p или nc -l

В локальной сети из дефолтно-настроенных убунт, можно обращаться к машинам по имени, а не по айпи: username-desktop.local отрезольвится в ip машины, которую назвали username-desktop

Avahi-browse -a быстро покажет список имен машин с в локальной сети, а ключ -r покажет сразу и их ip. требуется avahi, он есть в дефолтной убунте. сама команда — в пакете avahi-utils

Используйте set -e в скриптах. неотработавший «cd» во временный каталог может надолго испортить содержимое /home

Чтобы вернуться в предыдущий каталог, есть команда cd -. Еще есть команда dirs -v, показывающая историю переходов. Еще можно делать вот так: cd -2

Пишите в скриптах длинные --варианты параметров

Узнать сколько места занимает каждая папка:  du -h -s -c /*

Не пишите в скриптах rm -rf $VAR/

Используйте visudo для редактирования sudoers

Потеряли пароль рута? при загрузке укажите ядру параметр init=/bin/bash и сбростье пароль через passwd

Пользуйтесь bash -x для отладки скриптов

Пользуйтесь strace для отладки всего остального. от лишнего выхлопа спасет параметр -e имявызова

Не путайте /bin/sh и /bin/bash, это не всегда одно и то же. особенно в дебиане, особенно в убунте

Если терминал переклинило после некорректного выхода из псевдографической программы иили вырвашегося на просторы stdout мусора, есть волшебная команда reset

exec >file в скрипте перенаправит его вывод в файл и не перезапустит скрипт

Используйте в скриптах mktemp для создания временных файлов и каталогов

Пишите переменные вот так: ${VAR}

VAR=X и export VAR=X — разные вещи

dd может показывать, сколько он уже скопировал, если пнуть его черз kill -USR1

Sudo echo > file открывает файл на запись не с правами рута. это делается так: sudo sh -c 'echo > file'

Пишите --параметры перед аргументами, иначе ls file -l в bsd вас удивит

Нормально работающие версии утилит в bsd и макоси имеют приставку g: gsed, gmake

Выбираем планировщик.

Для начала проверим производительность HDD c разными планировщиками.

1.) sudo apt-get install hdparm

2.) Выполним маленький скрипт:

DISC="sda";
 cat /sys/block/$DISC/queue/scheduler;
 for T in noop anticipatory deadline cfq; do
     echo $T > /sys/block/$DISC/queue/scheduler;
     cat /sys/block/$DISC/queue/scheduler;
     sync && /sbin/hdparm -tT /dev/$DISC && echo "----";
     sleep 15;
 done


Если диск не sda, то соответствующим образом правим кусок кода с объявлением: DISC="sda"


Рассмотрим разные планировщики.

Noop
Простейший планировщик, работающий по принципу FIFO. Переупорядочения нет, слиянию могут подлежать только запросы, находящиеся рядом в очереди. Хорошо подходит для устройств со случайным доступом, вроде Flash памяти.
Deadline
Планировщик, который ставит больший приоритет запросам на чтение, нежели запросам на запись. Запросы переупорядочиваются, но при этом время обработки запроса не должно превышать заданные пределы(по умолчанию, 0.5 с для чтения, 5 с для записи)
Для реализации используются 4 очереди: 2 очереди sorted-by-start-sector(для чтения и для записи) и 2 очереди FIFO(тоже для чтения и для записи). Обычно, запросы берутся из сортированных очередей, но если поджимает deadline(таймаут) первого запроса из очереди FIFO, то обработка запросов продолжается по сортированным очередям с этого элемента. Лучше всего подходит для организации баз данных.

CFQ — Completely Fair Queuing
Цель этого планировщика — честное распределения времени доступа к ресурсу всех инициаторов запросов. CFQ может быть настроен для уравнивания процессов, групп процессов, пользователей.

По реализации, CFQ подразумевает по одной FIFO-очереди на инициатора запросов и переключается между очередями по алгоритму Round-robin.

Не знаю, кому нужна такая честность, но переупорядочения запросов для минимизации перемещения считывающей головки жесткого диска в этом планировщике нет.
Anticipatory
Ключевая идея — перед обработкой запросов можно немного подождать, отдохнуть. Зато за эти несколько миллисекунд, соберется информация наперед, которая позволит более взвешенно принимать решения, в каком порядке запросы выполнять.

Планировщик Anticipatory базируется на Deadline. Подходит для десктопов, т.к. сохраняется отзывчивость подсистемы ввода вывода. Не подходит для RAID, TCQ. Плохо подходит в ситуациях, когда синхронные запросы посылаются разными процессами.


Чтобы посмотреть все доступные планировщики в системе и узнать, какой из них активен выполняем:
cat /sys/block/{DEVICE-NAME}/queue/scheduler

Здесь {DEVICE-NAME} — имя блочного устройства, например sda.


Смена планировщика на лету
Чтобы поменять планировщик в реальном времени без перезагрузки выполняем:
sudo -i
echo {SCHEDULER-NAME} > /sys/block/{DEVICE-NAME}/queue/scheduler



Здесь {SCHEDULER-NAME} — один из присутствующих в системе планировщиков, у меня это: noop anticipatory deadline cfq. Например, чтобы поставить планировщик deadline, выполяем:
sudo -i
echo deadline > /sys/block/sda/queue/scheduler

Фиксация настройки планировщика
Далее, нам нужно заставить Ubuntu использовать выбранный нами планировщик и после перезагрузки. Для этого добавляем строку GRUB_CMDLINE_LINUX_DEFAULT="elevator={SCHEDULER-NAME}" в конфиг GRUB 2.
sudo nano /etc/default/grub

После внесения изменений нужно обновить конфигурацию grub:
sudo update-grub

Если у вас grub, а не grub2, то добавляем строку elevator={SCHEDULER-NAME} в /boot/grub/grub.conf.

Своя сборка Ubuntu

Подготовка
Во время сборки часто придется выполнять команды с правами рута, поэтому сразу выполним:
sudo -s

Создадим папку, в которой и будем проводить все работы
mkdir ~/MyUbuntu
cd ~/MyUbuntu

Сделаем папку, в которую скопируем все файлы с образа компакт-диска убунты
mkdir myubuntu_iso
mount -o loop /путь/до/ubuntu-10.04-desktop-i386.iso /mnt
rsync -a /mnt/ myubuntu_iso
umount /mnt

А вот и пришло время распаковать уже сам squashfs-образ livecd, который из себя представляет корневую файловую систему убунты
unsquashfs myubuntu_iso/casper/filesystem.squashfs
mv squashfs-root myubuntu_root

Вход в chroot-окружение
Теперь можно приступить к изменениям. Для этого надо использовать chroot
cp /etc/hosts myubuntu_root/etc/
cp /etc/resolv.conf myubuntu_root/etc/     # Это строчка для того, чтобы в chroot-окружения работал инет
cp /etc/apt/sources.list myubuntu_root/etc/apt/sources.list # Это если вы планируете устанавливать ПО с помощью apt-get и т.п.
mount --bind /dev/ myubuntu_root/dev     # Это для доступа к устройствам хостевого компа
chroot myubuntu_root

Следующие команды необходимы для нормальной работы некоторых утилит в chroot-окружении, в частности — для самого apt-get, aptitude или synaptic
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts
export HOME=/root
export LC_ALL=C
dbus-uuidgen > /var/lib/dbus/machine-id
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl


Теперь есть возможность пользоваться консольными утилитами, как и в обычной убунте (nano, vi, apt-get, aptitude, gconftool-2, mv, cp и так далее)

Работа в chroot-окружении (установка пакетов, настройка и т. п.)
Если же хочется воспользоваться графическими утилитами (такими как synaptic, наприме), то в другом терминале запустите эту команду:
Xnest -ac :1

И у вас появится окошко, в котором и будут работать гуишные проги. В самом-же chroot-окружении нужно указать монитор (то самое окошко xnest’а):
export DISPLAY=localhost:1

И дальше уже можно спокойно запускать synaptic и т. п. Чтобы были рамки окон, тогда еще надо:
metacity &

Тут уже можно проделывать любые операции как в обычной убунте — будь то установка пакетов, изменение конфигов и т. п.
Небольшой пример использования gconftool-2, чтобы кнопочки в metacity были справа:
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type string --set «/apps/metacity/general/button_layout» «menu:minimize, maximize, close»

Выход из chroot-окружения
После проделанных изменений, нужно удалить временные файлы, отмонтировать фс и т. п.:
aptitude clean
rm -rf /tmp/* ~/.bash_history
rm /etc/resolv.conf
rm /var/lib/dbus/machine-id
rm /sbin/initctl
rm /etc/apt/sources.list      # Хотя этот файл можно оставить, если хотите, чтобы в сборке были прописаны зеркала
dpkg-divert --rename --remove /sbin/initctl
umount /proc
umount /sys
umount /dev/pts
exit                                 # Выходим из самого chroot-окружения
umount myubuntu_root/dev


Подготовка ISO-образа
Если мы изменили состав ПО в сборке, то надо выполнить следующие команды, которые сделают новые списки пакетов:
chmod +w myubuntu_iso/casper/filesystem.manifest
chroot myubuntu_root dpkg-query -W --showformat='${Package} ${Version}\n' > myubuntu_iso/casper/filesystem.manifest
cp myubuntu_iso/casper/filesystem.manifest myubuntu_iso/casper/filesystem.manifest-desktop
sed -i '/ubiquity/d' myubuntu_iso/casper/filesystem.manifest-desktop
sed -i '/casper/d' myubuntu_iso/casper/filesystem.manifest-desktop

Собственно, файлы *.manifest — это список пакетов в системе и файл filesystem.manifest-desktop — это файл только тех пакетов, которые буду устанавливаться на комп. То есть, если вы хотите оставить пакет на livecd, но сделать так, чтобы он не ставился на компьютер во время установки, то просто удалите его упоминание в этом файле.
Если вы поменяли или обновили ядро в chroot-окружении, то это же ядро надо скопировать на сам диск, чтобы могли грузиться модули. Например:
cp myubuntu_root/boot/vmlinuz-2.6.32-22-generic myubuntu_iso/casper/vmlinuz
cp myubuntu_root/boot/initrd.img-2.6.32-22-generic myubuntu_iso/casper/initrd.gz
gzip -dc myubuntu_iso/casper/initrd.gz | sudo lzma -7 > myubuntu_iso/casper/initrd.lz

Теперь необходимо запаковать корневую файловую систему обратно в squashfs-образ:
rm myubuntu_iso/casper/filesystem.squashfs
mksquashfs myubuntu_root myubuntu_iso/casper/filesystem.squashfs
rm -r myubuntu_root      # Для экономии можно удалить распакованную корневую фс

Если хотите, чтобы при загрузке livecd автоматически выбирался русский язык:
echo "ru" > myubuntu_iso/isolinux/lang

Так как в составе диска убунты поменяли файлы, нужно пересоздать файл md5sum.txt
cd myubuntu_iso
rm md5sum.txt
find -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.txt

И можно уже приступить к созданию самого iso-образа:

mkisofs -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin /
-c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table /
-o ../ubuntu-$VERSION-custom.iso .

пятница, 24 июня 2011 г.

Удалённое включение ПК c Linux

Для того, чтобы иметь возможность разбудить компьютер удалённо, необходимо, чтобы в нём был установлен источник питания ATX версии не ниже 2.01, материнская плата, поддерживающая Wake On Lan, а также сетевая плата с поддержкой этой технологии.

Настройка

Определить, поддерживает ли материнская плата вашего компьютера Wake On Lan, можно зайдя в настройки CMOS Setup в раздел настроек управления питанием.
Найдите там опцию «Wake On Lan» и убедитесь, что она включена.

После загрузки системы установите, если необходимо, пакет ethtool, при помощи которого можно в том числе и переключать сетевую плату в режим пробуждения по сигналу Wake On Lan от других машин:

sudo apt-get install ethtool

Далее, необходимо определить, поддерживает ли установленная сетевая плата Wake On Lan, и включена ли эта опция:


sudo ethtool eth0 | grep -i wake-on


Supports Wake-on: pumbg
Wake-on: d

В строке Supports Wake-On перечислены механизмы, поддерживаемые сетевой платой. В моём примере я пользуюсь методом отправки так называемым Magic Packet, и если вам нужно то же самое, то убедитесь, что в Supports Wake On присутствует буква «g». Буква «d» в строке Wake-on обозначает, что Wake On Lan для данного сетевого интерфейса отключён. Чтобы включить его в режим распознавания Magic
Packet, необходимо выполнить:

ethtool -s eth0 wol g

Имейте ввиду, что после включения компьютера, вероятней всего, опция Wake-on опять перейдёт в состояние «d» , добавте в /etc/rc.local

ethtool -s eth0 wol g

,где eth0 это сетевая карта подключенная в локальную сеть.

Теперь всё готово для пробуждения системы по получению Magic Packet. Для того, чтобы его отправить, необходимо знать MAC-адрес сетевого интерфейса включаемого компьютера, поэтому прежде, чем выключать систему, запишите его:

ifconfig eth0 | grep -i hwaddr

eth0      Link encap:Ethernet  HWaddr 00:0e:2e:b9:cb:ad

Включение

Теперь с любого другого компьютера, находящегося в том же сегменте локальной сети (в принципе, это необязательно, но тогда необходимо, чтобы в вашей сети маршрутизаторы корректно пробрасывали широковещательные пакеты), можно включить ранее сконфигурированную удалённую систему. Для этого понадобится утилита
wakeonlan, которую необходимо установить:

sudo apt-get install wakeonlan

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

wakeonlan -p 8 00:0e:2e:b9:cb:ad

Опцией -p указывается номер UDP-порта, с которого будет отправлен Magic Packet. Указание этой опции обязательно, поскольку по умолчанию wakeonlan использует девятый порт, помеченный в /etc/services как discard, что означает то, что пакет с этого порта отправить не получится. В принципе, можно использовать любой незанятый в системе UDP-порт.

вторник, 21 июня 2011 г.

Решение проблемы с русскими именами в zip

1.) Подключить репозиторий ppa:frol/zip-i18n
sudo add-apt-repository ppa:frol/zip-i18n
sudo apt-get update

2.) Установить библиотеку libnatspec0
sudo apt-get install libnatspec0

3.) Обновить пакеты p7zip-full, zip и unzip

4.) Удаляем пакет rar.

четверг, 16 июня 2011 г.

Установка программ не входящих в дистрибутив при помощи менеджера xstow

Установка пакета из исходников, обычный способ

Классический для свободного софта путь распространения, распространение в исходных текстах. В таком виде программа представляет собой архив с именем вида:
name-version.tar.gz
Установка такого софта производится выполнением набора несложных команд:
tar -xzvf name-version.tar.gz
  cd name-version
  ./configure
  make
  sudo make install
Расшифровка действий:

ШагКомандаЧто делает
1tar -xzvf name-version.tar.gzРаспаковка архива
2cd name-versionПереходим в полученный после распаковки директорий
3./configureНастройка исходников на нашу систему
4makeКомпиляция
5sudo make installУстановка

Проблемы

Проблема 1: Отсутствие нужных библиотек

Очень часто все не идет так гладко, а на шаге 3, команда configure на что-то жалуется. А жалуется она как правило на отсутствие нужных библиотек, или заголовков библиотек. Рассматриваем внимательно выход, который выдала команда configure на консоль и устанавливаем недостающие библиотеки и заголовки. Заголовки для Debian-подобных дистрибутивов, в том числе и для Ubuntu находятся в пакетах с суффиксом -dev в названии пакета.
Предположим мы увидели, что configure жалуется на библиотеку, устанавливаем ее в систему:
sudo apt-get install name
Запускаем configure опять. Теперь жалуется на заголовки этой же библиотеки. Устанавливаем и их:
sudo apt-get install name-dev
Ну наконец, установили все нужное, откомпилировали, работаем и получаем удовольствие. Казалось бы, счастье, вот оно. Но нет, вырисовывается проблема 2:

Проблема 2: Бардак в системе

Предположим, мы установили одну программу из исходников, другую, третью. И вдруг нам понадобилось удалить первую, или заменить ее версию. А мы, оказывается не знаем, какие файлы относятся к этой программе и где они. Одни программы устанавливают свои файлы в иерархию /usr/local , другие вообще в /usr . В общем, мы не знаем, как вычистить файлы, относящиеся к пакету.

Отступление: Стандартная иерархия файловой системы Linux (File System Hierarchy Standard)

В Linux есть стандарт на размещение файлов в системе. Ссылки приведены в разделе Литература. По этому стандарту, в иерархии директорий /usr должны храниться файлы используемые пользователями, в том числе и пользователям с других компьютеров. В иерархии директорий /usr/local - файлы используемые локальными пользователями. Таким образом нам нужно наши программы ставить в иерархию /usr/local, и при этом избежать бардака.

Улучшеный способ установки: менеджер пакетов xstow

Сделать это нам поможет менеджер пакетов xstow. Можно пользоваться также менеджером stow, xstow - это расширенная версия. Что он делает? Очень простую вещь. Мы устанавливаем наши программы в иерархию /usr/local/stow, каждую программу в свою директорию, а потом менеджер xstow создает символьные линки на наши файлы из иерархии /usr/local. Устанавливаем xstow:
sudo apt-get install xstow
Теперь последовательность операций при установке пакета с использованием менеджера xstow. 
tar -xzvf name-version.tar.gz
cd name-version
./configure --prefix=/usr/local/stow/name-version
make
sudo make install
cd /usr/local/stow/
sudo xstow name-version
Расшифровка действий:

ШагКомандаЧто делает
1tar -xzvf name-version.tar.gzРаспаковка архива
2cd name-versionПереходим в полученный после распаковки директорий
3./configureНастройка исходников на нашу систему
4makeКомпиляция
5sudo make installУстановка
6cd /usr/local/stow/Переходим в директорий, где лежат программы
7sudo xstow name-versionСоздаем символьные линки в иерархию /usr/local

Команда:
sudo xstow -D name-version
Удаляет символьные ссылки. После удаления ссылок директорию с файлами программы, находящуюся в /usr/local/stow/ можно удалять.


четверг, 2 июня 2011 г.

Список оборудования.

sudo lshw > ~/info
или
sudo lshw -short > ~/info

Создание списка установленных пакетов в Debian (Ubuntu).

Для того, чтобы создать список установленных в Debian (Ubuntu) пакетов можно воспользоваться следующей командой:
dpkg --get-selections > ~/installed_programs

Что бы записать в файл краткую информацию о пакетах (версия пакета и краткое описание):
COLUMNS=150 dpkg -l > ~/packages

Конвертирование русских тегов в юникод.

Для работы нужен python-mutagen: 
1.) sudo apt-get install python-mutagen (если не установлен python-mutagen)

2.) find /.... -iname "*.mp3" -print0 | xargs -0 mid3iconv -e CP1251 -d --remove-v1
где /.... - директория где искать файлы.