Gentoo Way Linux, Gentoo, Kubuntu, Ubuntu, Debian … компилируем всё!

12Май/110

Linux — Video streaming и iPad 2

Получив в своё распоряжение сей девайс и чуток поигравшись с ним захотелось чего-то бо́льшего нежели просто игры - например просмотр любого видео из домашней коллекции без необходимости синхронизироваться с iTunes. Программ такого рода оказалось довольно много - на любой вкус и цвет но, они все работают только под Windows или Mac OS X, печально - мне нужно чтобы работало в Ubuntu. Поискав ещё, удалось найти варианты с заявленной поддержкой Linux, «из коробки» они конечно же не запускаются.

В итоге получился интересный мануальчик (для (K)Ubuntu) по установке серверной части для программ Air Video и VLC Streamer.
Свой выбор я остановил на платной версии Air Video (есть и бесплатная но показывает в списке к просмотру не все файлы на компьютере) т.к. у неё более дружественный интерфейс и имеется одна немаловажная особенность - перемотка видео на любую точку (как ролики на YouTube), в VLC же видео можно смотреть и перематывать только в пределах обработанного участка. Собственно вот небольшая табличка сравнения:

Air VideoVLC Streamer
Цена$2.99$1.99
Ограничения бесплатной версииЕсть - отображает не все файлы на ПКНет, поддерживается за счёт рекламы iAd
Кодирование на летуЕсть, вывод сразу в потокЕсть, вывод в файл + передача в поток
ПеремоткаЕстьЕсть, только в пределах перекодированного фрагмента
Очередь перекодированияЕсть, вывод в отдельный файл m4v (можно скопировать или перенести в iTunes)Есть, только подготовка для дальнейшего просмотра.
Предпросмотр кодируемого видеоЕстьНет
Изменение масштаба, усиление звукаЕстьНет
Управление субтитрамиЕстьВкл/Выкл
Выбор звуковой дорожкиЕстьНет
GUIНетЕсть

Air Video

Air Video


VLC Streamer

VLC Streamer

10Мар/111

Linux — Debmirror и несколько зеркал

gentoo icon

Debmirror это perl скрипт который применяется для организации зекала репозитория Debian или Ubuntu.

Однако сам по себе он делает только то, для чего предназначен и не каплей больше (но настроек у него от этого не меньше и сделать зеркало он может по-различным протоколам и с различными условиями). Что же делать если нужно организовать несколько зеркал?

6Ноя/1015

Cacti — XBT Tracker statistics

И снова cacti. На этот раз выкладываю свой вариант шаблона для мониторинга XBTT т.к. тот, что выложен на официальном сайте, уже устарел да и вообще, говорят что он не работает, а у меня как раз есть рабочий :)

Архив с шаблоном и скриптом.
MD5:

7cdc55725a7ef580df5b5f91bca8884c  cacti-xbtt.tar.gz

Версия 0.2 для обновлённого вывода статистики в XBTT (добавились проценты у seeders и т.п.)
MD5:

15bc335147f35721ece4117f5eb9ec2d  cacti-xbtt-0.2.tar.gz

Для работы нужны следующие программы:

  • bash
  • lynx
  • awk

Установка:
1) Распаковать
2) Скопировать xbtt_stat.sh в /scripts/ (проверьте чтобы lynx и awk лежали там же где и в скрипте)
3) Импортировать шаблон

Рабочие графики cacti xbtt.

Метки записи: , , 15 Комментарии
4Окт/104

Cacti — MegaFon balance

cacti

Т.к. в cacti смотрю каждый день то решил что было бы неплохо выводить туда и остаток средств на счету в МегаФон-е.
Скрипт адаптирован для Московского региона но при желании легко переделывается под другой регион и даже под другого оператора (если оператор предоставляет такие данные для автоматического сбора и не ставит на них капчу).

Не забудьте убедиться что в Сервис-Гиде в разделе Настройка Сервис-Гид -> Автоматический доступ выбрано "Доступ в «Сервис-Гид» открыт пользователям и автоматизированным системам".

Cacti - MegaFon balance

Архив с шаблоном и скриптом.
MD5:

0565784eaf166e60c1c2f0ed5b0e2910  cacti-megafon.tar.gz

Установка:
1) Распаковать
2) Скопировать megafon.pl в /scripts/
3) Импортировать шаблон

Метки записи: , , , 4 Комментарии
25Сен/101

ATI — 10.9 FGLRX не собирается в DKMS

ATI Radeon

Очередное обновление, очередное «исправление», новые ошибки...одним словом - ATI.

Симптомы - fglrx не проходит фазу компиляции в DKMS, build log показывает что-то такое:

DKMS make.log for fglrx-8.771 for kernel 2.6.32-25-generic (x86_64)
Сбт Сен 25 16:09:51 MSD 2010
AMD kernel module generator version 2.1
doing Makefile based build for kernel 2.6.x and higher
/var/lib/dkms/fglrx/8.771/build/2.6.x
rm -rf *.c *.h *.o *.ko *.GCC* .??* *.symvers
make -C /lib/modules/2.6.32-25-generic/build SUBDIRS=/var/lib/dkms/fglrx/8.771/build/2.6.x modules
make[1]: Вход в каталог `/usr/src/linux-headers-2.6.32-25-generic'
  CC [M]  /var/lib/dkms/fglrx/8.771/build/2.6.x/firegl_public.o
  CC [M]  /var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_acpi.o
  CC [M]  /var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_agp.o
  CC [M]  /var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_debug.o
  CC [M]  /var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_ioctl.o
/var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_ioctl.c: In function ‘KCL_IOCTL_AllocUserSpace32’:
/var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_ioctl.c:196: error: implicit declaration of function ‘compat_alloc_user_space’
/var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_ioctl.c:196: warning: return makes pointer from integer without a cast
make[2]: *** [/var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_ioctl.o] Ошибка 1
make[1]: *** [_module_/var/lib/dkms/fglrx/8.771/build/2.6.x] Ошибка 2
make[1]: Выход из каталога `/usr/src/linux-headers-2.6.32-25-generic'

make: *** [kmod_build] Ошибка 2
build failed with return value 2

Чтобы обойти ошибку можно подождать пару недель, вроде обещали исправить в октябре - но это же слишком долго.

Решение

Сделать нужно следующее - от root открыть файл /usr/src/linux-headers-2.6.32-25-generic/arch/x86/include/asm/compat.h (или что у Вас сейчас используется), действие действительно и для x86 и для x86_64 архитектур (у меня например x86_64):

sudo nano /usr/src/linux-headers-2.6.32-25-generic/arch/x86/include/asm/compat.h

Мотаем вниз файла и видим строчку:

#endif /* _ASM_X86_COMPAT_H */

Между этой строчкой и последней фигурной скобкой ( } ) копируем и вставляем код:

static inline void __user *compat_alloc_user_space(unsigned long len)
{
    struct pt_regs *regs = task_pt_regs(current);
    return (void __user *)regs->sp - len;
}

(на самом деле не обязательно вставлять код именно в это место - просто на всякий случай, чтобы не вставить его в какую-нибудь другую функцию)

Сохраняем файл и пробуем переустановить fglrx. Теперь всё должно получиться :)

Не думаю что этот код что-то может сломать но после установки его можно удалить, если есть желание.

Метки записи: , , , , Читать полностью
10Май/100

Kubuntu 10.04 — Эффекты и проприетарные драйвера для ATI

ATI Radeon

После обновления (а точнее после чистой установки) Kubuntu 10.04 установил проприетарные драйвера для своей ATI Radeon HD 4800 Series и как обычно что-то сломалось...на этот раз сломались эффекты рабочего стола (Через XRender работали но уж очень медленно). Что впрочем не удивительно т.к. дрова свежие и ещё толком не обкатанные. К тому же это ведь ATI...

Для справки - драйвера можно установить через jockey-kde или же:

sudo apt-get update
sudo apt-get install linux-headers-`uname -r` fglrx fglrx-amdcccle fglrx-dev fglrx-modaliases
sudo aticonfig --initial
sudo reboot

Покопавшись в настройках обнаружил что эффекты будут работать если выставить флаг «Отключить внутреннюю проверку» в разделе Параметры системы - Рабочий стол - Эффекты рабочего стола - Дополнительно

Но нужно же что бы они работали и в обычном режиме :)

Для этого нужно проверить чтобы в соответствующих разделах xorg.conf были эти значения:

Section "Device"
    Option      "AllowGLXWithComposite" "true"
EndSection

Section "Extensions"
    Option      "Composite" "Enable"
    Option      "DAMAGE" "Enable"
    Option      "RENDER" "Enable"
EndSection

После применения настроек эффекты работают и при отключении «Отключить внутреннюю проверку».

Метки записи: , , , Нет комментариев
10Янв/104

Linux — MySQL binary log

MySQL

Основательно занявшись решением вопроса "Куда пропадает свободное место?" с удивлением обнаружил что оно занято файлами mysqld-bin.* в /var/lib/mysql

Это же надо было так проколоться. Сервер работает больше года и и за это время бинарные логи разрослись и заняли 14 гигабайт из 20 гиг выделенных на всю систему (не очень активно MySQL используется) но т.к. всегда было что удалить как-то не особо обращал на это внимание (то сорцы старые удалишь то ещё что-то).

Что можно было бы сделать в данной ситуации:

  • Перенести логи на другой раздел (мне не подходит)
  • Увеличить размер, выделенный под систему (тоже не подходит)
  • Уменьшить суммарный объём логов (самое оно)

Чтобы уменьшить занимаемое логами место можно в файл настроек /etc/mysql/my.cnf добавить следующую конфигурацию:

    expire_logs_days = 5

Вообще не знаю зачем их хранить даже 5 дней, разве что делать репликацию на slave с задержкой до пяти дней...Да и восстаноление из них выглядит как-то сомнительно (хотя тоже имеет место быть).

Также можно удалить старые логи до нужного файла выполнив запрос:

    PURGE BINARY LOGS TO 'mysqld-bin.000123';

А вообще если они не нужны (а не нужны они в 99% на единичном сервере) то их можно отключить (в /etc/mysql/my.cnf):

#log-bin
9Дек/090

BIND — Настройка зоны и домены третьего уровня для сервера разработки.

В интернете можно найти много документации на тему настройки BIND на любом языке так что пусть это будет ещё один вариант настройки.

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

Краткое содержание:

  • Настройка своей зоны (в данном случае - home)
  • Настройка обратной зоны (PTR)
  • Настройка зоны третьего уровня для нужд разработки
Метки записи: , , Читать полностью
28Ноя/090

SSH — Авторизация по ключу, что делать если ключ украли.

Ни для кого ни секрет насколько удобна авторизация по публичному ключу, а если для кого-то секрет - то можете ознакомиться вот с этой статьёй.

Но случается и такое, что ключ нужно заменить, причины? Честно говоря вижу только две - ключ скомпрометирован и, что почти то же самое, его украли.

Заменить ключ не составляет особого труда - всего-то нужно удалить с серверов старый публичный и записать вместо него новый. Вроде бы всё предельно просто, а что если серверов не один, не два и не три, а 10, 20 и более? Вот тут-то и просыпается великая и могучая лень :) Но есть необходимость, а значит нужно что-то делать.

На этот случай и был написан небольшой скрипт:
renew.sh

#!/bin/bash                                              
# Author: Dmitriy Beketov (freemandigger --@-- gmail.com)
# Site: http://gentooway.ru                              
# Licence: Attribution-Noncommercial 3.0 Unported (http://creativecommons.org/licenses/by-nc/3.0/)

USAGE="Usage: ${0#*/} [-i id_rsa.old] [-d] <id_rsa.pub.old> <id_rsa.pub.new> <host list>"

privkey=""
dryrun=0  
# Parse command line
while getopts i:d opt; do                                                    
    case "$opt" in                                                          
      i) privkey="$OPTARG";;                                                
      d) dryrun=1;;                                                          
      *) echo $USAGE;;                                                      
    esac                                                                    
done                                                                        
shift $(($OPTIND - 1))                                                      
[[ "$1" == '--' ]] && shift                                                  
if [[ $# -lt 3 ]]; then                                                      
    echo $USAGE                                                              
    exit 1                                                                  
fi                                                                          
oldpubkey=$1                                                                
hostlist=$3                                                                  
newpubkey=$2                                                                
# Check files for exist                                                      
if [ "$privkey" ]; then                                                      
        if [ ! -f "$privkey" ]; then                                        
                echo $USAGE                                                  
                echo "Old private key file not found"                        
                exit 1                                                      
        fi                                                                  
        privkey="-i $privkey"                                                
fi                                                                          
if [ ! -f "$oldpubkey" ]; then
        echo $USAGE
        echo "Old public key file not found"
        exit 1
fi
if [ ! -f "$hostlist" ]; then
        echo $USAGE
        echo "Host list not found"
        exit 1
fi
if [ ! -f "$newpubkey" ]; then
        echo $USAGE
        echo "New public key file not found"
        exit 1
fi

# Get the part of old public key for grep
OLD=`cat $oldpubkey | awk '{print $2}'`

SSH='/usr/bin/ssh'
SSH_COPY='/usr/bin/ssh-copy-id'
SCP='/usr/bin/scp'

test $dryrun -gt 0 && echo "START DRY RUN" || echo "START"
for host in `cat $hostlist`
do
printf "Copy new key to $host\n"
$SCP -q $privkey $newpubkey $host:.ssh/newpubkey
if [ "$?" > 0 ]; then
        printf "\t[OK]\n"
        printf "\tAdding new key to authorized_keys\n"
        test $dryrun -gt 0 && printf "dry run" || $SSH $privkey $host "cat ~/.ssh/newpubkey >> ~/.ssh/authorized_keys"
        test $? -gt 0 && printf "\t[FAIL]\n" || printf "\t[OK]\n"
        printf "\tDeleting temporary file of new public key\n"
        $SSH $privkey $host "rm ~/.ssh/newpubkey"
        test $? -gt 0 && printf "\t[FAIL]\n" || printf "\t[OK]\n"
        printf "\tBackup authorized_keys to authorized_keys.bak\n"
        test $dryrun -gt 0 && printf "dry run" || $SSH $privkey $host cp .ssh/authorized_keys .ssh/authorized_keys.bak
        test $? -gt 0 && printf "\t[FAIL]\n" || printf "\t[OK]\n"
        printf "\tDeleting old public key from authorized_keys\n"
        test $dryrun -gt 0 && printf "dry run" || $SSH $privkey $host "cat ~/.ssh/authorized_keys.bak | grep -v '$OLD' > ~/.ssh/authorized_keys"
        test $? -gt 0 && printf "\t[FAIL]\n" || printf "\t[OK]\n"

else
        printf "\t[FALSE]\n"
fi
done
echo "FINISH"
exit 0
Параметры вызова (не обязательные):

-d - Тестовый запуск, скрипт попробует скопировать новый ключ во временный файл на удалённом сервере, а затем его же и удалить.
-i - Ключ для авторизации на серверах, на случай если в ~/.ssh/id_rsa уже установлен новый ключ то в данном параметре можно указать где брать старый.

Параметры вызова (обязательные):

id_rsa.pub.old - старый публичный ключ, который нужно заменить.
id_rsa.pub.new - новый публичный ключ.
host list - файл со списком пользователей/серверов, где нужно заменить ключ, формат user@host или из ~/.ssh/config

user1@host1
user2@host2
user223@host4
my_predefined_host
blabla@eee

Также можно скачать скрипт

17Ноя/097

Ubuntu — Шифруем home и swap в Ubuntu 9.10 Karmic

При установке (K)Ubuntu 9.10 Karmic (alternate) на очередную виртуальную машину обратил внимание на вопрос системы о том, желаю ли я зашифровать домашнюю директорию, я конечно же ответил "Да". Но при этом вспомнил что у самого домашняя машина была установлена без данной опции (давно устанавливалась, ещё 8.10 кажется была). Вобщем решил и себе сделать "апгрейд", а заодно зашифровать home и swap разделы...

Стоит заметить, что, проще наверное было бы переустановить систему с включенной опцией шифрования, но это же не "gentoo way" :)
К тому же стандартная поставка использует для шифрования eCryptfs и не шифрует swap. В чём разница? Это два разных подхода - eCryptfs шифрует на уровне файлов, а LUKS это блочное устройство (/dev/sdb5). Это как SSL и IPSec. У каждого есть свои плюсы и минусы.

Так что инструкция только для ознакомления. Внимание, при неосторожных действиях вы можете потерять весь домашний раздел...вобщем, вы предупреждены.

Используя Linux Unified Key Setup (LUKS) установка шифрованного раздела происходит очень быстро.

Подготовка

Установим необходимые пакеты:

apt-get install cryptsetup libpam-mount

device-mapper должен быть активирован (если нет - перезагрузитесь):

ls -l /dev/mapper/
итого 0
crw-rw---- 1 root root 10, 60 2009-11-16 21:12 control

...с поддержкой шифрования:

dmsetup targets | grep crypt
crypt            v1.7.0

Отлично. Всё готово, приступим.

Метки записи: , , Читать полностью