28 июля, 2010

Скрипт добавления нового виртуального хоста

Как-то поднадоело мне постоянно редактировать вручную httpd.conf и /etc/hosts и я решил написать скрипт, который бы позволил автоматизировать этот процесс
Вот такой скрипт:

#!/bin/sh

# Константы:
HOSTS='/tc/hosts'; # Путь к файлу hosts
HTTPD_CONF='/etc/httpd/conf/extra/httpd-vhosts.conf';

# Путь к файлу с настройками виртуальных хостов
DIR_HTTP='/srv/http/'; # Путь к директориям с хостами
IP_MASK='127.0.0.'; # Маска по которой будет формироваться новый IP
INDEX_FILE='index.php'; # Index файл в корневой папке нового виртуального хоста
DIR_LOG='/var/log/httpd/'; # Путь к папке с логами
EMAIL_ADMIN='wikide@gmail.com'; # Email админестратора

# Функция вывода ошибок
get_error() {
    echo $1;
    exit 0;
}

# Функция проверки ip
check_ip() {
    if [ "`cat $HOSTS | grep \"$ip\"`" ]; then
        echo 1;
    fi
}

# Проверяем наличея параметра с именем хоста
if [ "$1" ]; then
    if [ "$2" ]; then
        # Если задан свой IP
        new_ip=$2;
        if [ "`check_ip $new_ip`" ]; then # Проверка на наличее в файле
            get_error 'Такой ip адрес - '$new_ip' уже занят. Введите другой или пусть скрипт '$0' сам сгенерирует ip адресс для нового хоста.';
        fi;
    else
        # Получаем IP автоматически
        new_ip=$IP_MASK$((`tail -1 $HOSTS | awk '{ split($1, ip, "."); print ip[4]}'`+1));
    fi

    # Если корневая папка нового хоста уже существует
    if [ -d $DIR_HTTP$1/ ]; then
        get_error 'Директория '$1' уже есть в '$DIR_HTTP'. Подберите другое имя.';
    else
        # Создаем корневую директорию виртуального хоста
        mkdir $DIR_HTTP$1;
        echo -e "
    <html>
     <head>
      <title>New host</title>
     </head>
     <body>
        <h1>Created host '$1'!</h1>
     </body>
    </html>" > $DIR_HTTP$1'/index.php';
  
    # Запись в hosts
        sudo echo $new_ip  $1 | sudo tee -a $HOSTS 1>/dev/null;

    # Запись в конфиг Apache
        sudo echo -e "#Create date: `date '+%F %T'`
          DirectoryIndex $INDEX_FILE
          ServerAdmin $EMAIL_ADMIN
          DocumentRoot \"$DIR_HTTP$1/\"
          ServerName $1
          ServerAlias $1
          ErrorLog \"$DIR_LOG$1.log\"
          CustomLog \"$DIR_LOG$1\" common" | sudo tee -a $HTTPD_CONF 1>/dev/null;

        # Перезапускаем сервер
        sudo apachectl restart;

        # Выводими сообщение

        echo 'Виртуальный хост "'$1'" успешно создан'
    fi
else
    get_error 'Нужно обязательно указать название нового хоста $0 NAME_HOST [IP_HOST]';
fi

exit 0;

,

27 июля, 2010

Скрипт запуска wifi в ARCH Linux

Небольшой скрипт для подключения к сетям wifi в ARCH linux

#!/bin/bash

# Определяем интрфейс ( в моем случае это - wlan0)
if [ "$2" ]; then 
	dev=$2;
else 
	dev="wlan0";
fi

# Действие
case "$1" in
	start)
		sudo ifconfig $dev up;
		sudo wpa_supplicant -B -i$dev -c/etc/wpa_supplicant.conf;
		sleep 3;
		sudo dhcpcd $dev 2&gt;/dev/null;
	;;
	stop)	
		sudo killall -9 dhcpcd 3&gt;/dev/null;
		sudo killall -9 wpa_supplicant 3&gt;/dev/null;
		sudo ifconfig $dev down;
	;;
	list)
		sudo ifconfig $dev up;
		sleep 1;
		sudo iwlist $dev scanning;
		sudo ifconfig $dev down;
	;;
	restart)
		$0 stop;
		$0 start;
	;;
	status)
		echo -n 'IP arrdess: '; ifconfig wlan0 | grep "inet addr" | awk '{print $2}' | sed 's/addr://'
		echo -n "Essid: "; iwconfig wlan0 | grep "Ralink STA" | awk '{print $4}' | sed 's/ESSID://'
	;;
	*)

	if [ "$1"  ]; then
		echo "usage: $0 {start|stop|list|restart}"; 
	else 
		echo "Restarting";
		$0 restart;
	fi

esac

exit 0

Вот такой вот скрипт :)

,

26 июля, 2010

Запись звука в Linux

Запись звука в Linux из консоли.
На моём субноуте есть микрофон, вот подумал, что неплохобы понять как записывать снимать звук с него, вот что нашёл:

Запись в wav:

$ arecord test.wav 

Переконвертировать wav в mp3 можно вот так:

$ cat test.wav | lame - > test.mp3

или сразу создать mp3

$ arecord | lame - > test.mp3

Вот так можно записать ядро системы linux в mp3 :)

$ cat /boot/mykernel.img > /dev/dsp &amp; arecord | lame - > test.mp3

,

Статус аккумулятора в приглашении командной строки

Вот очередной велосипед на тему показа статуса аккумулятора для нэтбука на ARCH Linux :)

Вот такой получается скрипт на sh (думаю все ясно из комментов):

#!/bin/zsh

# Определяем уровень заряда аккумулятора на текущий момент
remaining_bat=`cat /proc/acpi/battery/BAT0/state | grep remaining | awk {'print $3'}`;

# Определяем 100% заряда для аккумулятора
full_bat=`cat /proc/acpi/battery/BAT0/info | grep full | awk {'print $4'}`;

# Определяем подключён сетевой провод или нет
stat=`cat /proc/acpi/battery/BAT0/state | grep charging | awk {'print $3'}`;

if [ $stat = 'charging' ]; then
stat='+'; # Провод подключён ( ноут зяряжеается )
else if [ $stat = 'charged' ]; then
stat=''; # ( Аккумулятор зяряжен)
else
stat='-'; # Провод не подключён ( ноут разряжается )
fi
fi

# получаем заряд батареи в % ( Школьная математика - Рулит! :) )
bat=$(($remaining_bat*100/$full_bat));

# основные цвета ( ESC - последовательности, подробнее - $ man console_codes )
RED="\033[31m"; # Красный
YELLOW="\033[33m"; # Жёлтый
WHITE="\033[38m"; # Белый

# Цвет по-умолчанию
DEFAULT="\033[0m";

if [ $bat -lt 10 ]; then # Если заряд аккамулятора меньше 10% (краасные цвет)
result="$RED$stat$bat";
else if [ $bat -lt 30 ]; then # Если заряд аккамулятора меньше 30% (жёлтый цвет)
result="$YELLOW$stat$bat";
else
result="$WHTE$stat$bat"; # Заряд аккамулятора больше 30% ( белый цвет )
fi
fi

# Выводим результат
echo -e $result%%$DEFAULT;

exit 0;

Далее говорим zsh о том, что нужно выводить в PROMPT результат этого скрипта.
В файле ~/.zshrc в функции precmd() прописываем где-нибудь в начале:

precmd() {
   BAT=`binf.sh`;
   PROMPT="battery:(`echo $BAT`)::%{$reset_color%}%{$fg_bold[green]%}%m {$reset_color%}::%{$fg_bold[crey]%}[ %~ ]%{$rese+t_color%}&gt; "
.....

Как-то вот так, где binf.sh — скрипт выше.
Обязательно нужно, чтобы binf.sh лежал по пути в переменной PATH, я для этой цели создал папку bin в домашней директории и сделал ссылку на файл в папке /bin

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

,

Получить снимок с web камеры через консоль Linux

Вот способ получисть снимок с web камеры из шел.
Искал способ как получить снимок (фото) с web камеры
Наткнулся только на статью про видеозахват через — ffmpeg. Вот ссылка — http://www.newmoldova.com/?q=node/85

Почитав немного ман по ffmpeg попробовал вот такую конструкцию:

$ ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -f image2 snapshot.jpg 2&gt;/dev/null

Вроде работает :)
-f video2linux — формат видео для захвата
-s 1024×768 — размер кадра захвата
-i /dev/video0 — файла web камеры
-f image2 snapshot.jpg — выходной тим и имя файла

,

17 июля, 2010

javascript как узнать все свойства объекта

Небольшая функция на javascript, которая позволяет узнать все свойства объекта

Вот сама функция:

function fnShowProps(obj, objName) {
    var result = "";
    for (var i in obj) // обращение к свойствам объекта по индексу
        result += objName + "." + i + " = " + obj[i] + "\n";
    document.write(result);
}

Вот пример исползования:

fnShowProps(window.location, "location")

Результат:

location.pathname = /JavaScript/
location.protocol = http:
location.search = ?8
location.hash =
location.hostname = htmlcssjs.ru
location.href = http://htmlcssjs.ru/JavaScript/?8
location.host = htmlcssjs.ru
location.port =
location.reload = function reload() { [native code] }
location.replace = function replace() { [native code] }
location.assign = function assign() { [native code] }

Источник: http://htmlcssjs.ru/JavaScript/?8

 

,

foreach в javascript

Во несколько способов реализации foreach в javascript

Вариант 1:

for (var key in some_array) {
            var val = some_array [key];
	    alert (key+' = '+val);	
}

Вариант 2:

for(i=0, c=arr.length; i&lt;c; i++) {
	my_func(arr[i]);
}

Нужно отметить, что второй вариант не совсем реализует foreach, так как перебираются только значения массива без ключей.

15 июля, 2010

Немного об svn

Вот небольшой мануал по использованию svn

Создать репозитарий можно вот так:

$ svnadmin create new_repo

Настраиваем svn вот так:
Идем в new_repo/conf и открываем в любимом редакторе файл svnserve.conf.
В нём мне пригодилось исправить только секцию [general] вот так:

[general]<br>anon-access = none<br>password-db = passwd

anon-access = none — этим сообщаем, что анонимный доступ нужно запретить
password-db = passwd — этим сообщаем, что пароли и логины пользователей svn находится в файле passwd

Файл passwd правим таким образом:

[users]<br>user = password


Запуск серванта svn в FreeBSD:
Если уже запущен, то убиваем процесс (скорее всего прекращать работу сервера через killall -9 не совсем правильно, да простит меня Джа)

$ killall -9 svnserve<br>$ svnserve -d -r ./new_repo

Чекаем свой проджект вот так:

$ svn co svn://my_name_user@host_svn/new_repo project_dir

my_name_user — пользователь svn
host_svn — хост с svn
new_repo — наша директория с репозитарием
project_dir — локальная папка проекта

Далее svn спросит пароль, имя ползователя и возможно задаст ещё пару вопросов, отвечаем..
Если всё правильно, то svn выдаст сообщение типа — Checked out revision n,
где n — номер версии (если репозитарий чекается первый раз, то версия будет 0)

Далее добавляем файлы своего проекта в папку проекта (project_dir) и делаем вот так :

$ svn add * Отправляем обновление на svn сервер:
$ svn commit -m "Добавляем файло в нашу репу ;) "

Вот и все! Кратко, дёшево и сердито, как и должно быть у бадлокодера %)))

З.Ы. Не забывайте про руководства svn и google! Всем удачи!

,

14 июля, 2010

Поиск файла по содержимому этого файла

То что давно хотел узнать :)

Вот так можно найти строку по содержимому файла.

$ find /etc -type f -exec grep -Hn "nameserver" {} \; 2&gt;/dev/null

Вот так можно найти все файлы в каталоге /etc в которых есть слово «nameserver»
Опции grep:

H — выводим имя файла со строкой.
n — номер строки в файле.

Ошибки перенаправляем в /dev/null
При желании можно написать вот такой скрипт:

#/bin/sh

dir='.';
if [ -z $1 ] 
then
	echo 'Команду нужно запускать вот так: find.str  [dir]';
else
	if [ -z $2 ]
	then
		dir=$2
	fi
	
	find . -type f -exec grep -Hn $1 {} \; 2>/dev/null
fi

 

,

13 июля, 2010

Unix — пример работы с текстом

Скачал тут недавно книгу из двух текстовых файлов в koi8-r и с переводами строки в стиле Win (^M)

Решил поправить это дело таким вот образом:

$ cat book_p1.txt book_p2.txt | sed 's/\r//' | iconv -f koi8-r -t utf8 > book.txt

Вот так вот :) Unix — это круто!

9 июля, 2010

Немного о шифровании

Шифрование

Если нужно зашифровать отдельный файл (к примеру архив или документ) — можно воспользоваться утилитой openssl.
Шифрование файла file будет выглядеть так:

$ openssl enc -e -aes-256-cbc -k ПАРОЛЬ -in ./file -out ./file.encoded

или так:

$ cat ./file | openssl enc -e -aes-256-cbc -k ПАРОЛЬ &gt; file.encoded

Параметр -k и пароль можно не указывать, тогда он будет запрошен во время выполнения команды.

вот ещё варианты:

$ openssl aes-128-cbc -salt -in file -out file.aes
$ openssl aes-128-cbc -d -salt -in file.aes -out file

Дешифрование

Расшифровать обратно файл можно будет командой:

<span style="font-family: monospace;">$ </span>openssl enc -d -aes-256-cbc -k ПАРОЛЬ -in ./file -out ./file.encoded

(параметр -e меняется на -d) ну или соответственно:

$ cat ./file.encoded | openssl enc -d -aes-256-cbc -k ПАРОЛЬ &gt; ./file

Параметр -k и пароль можно не указывать, тогда он будет запрошен во время выполнения команды.

Комбинирование (Создание шифрованого архива, разбиение на тома)

Естественно команды можно комбинировать, и к примеру создание архива директории dir со сжатием gzip и шифрованием openssl aes будет выглядеть так:

$ tar -czf - ./dir | openssl enc -e -aes-256-cbc -k ПАРОЛЬ > archive.tar.gz.encoded

Рашифровываем (в обратном порядке):

$ openssl enc -d -aes-256-cbc -in ./archive.tar.gz.encoded | tar -xz

Плюс если шифрованный архив надо разбить на куски — добавляем split, все ограничивается только вашей фантазией :)

$ tar -czf - ./dir | openssl enc -e -aes-256-cbc -k ПАРОЛЬ | split -db 4M - arc

Склеиваем, дешифруем, разжимаем, разворачиваем:

$ cat arc* | openssl enc -d -aes-256-cbc | tar -xzf - 

Шифрование GPG

GnuPG очень известный способ шифрования и подписи электронных писем или других данных, кроме того gpg предоставляет расширенную систему управления ключами. В данных примерах рассматривается только шифрование файлов
Самым простым является симметричный шифр. В этом случае файл шифруется с помощью пароля, соответственно расшифровать его може тот, кто знает этот пароль, никаких ключей не требуется. Gpg добавляет расширение «*.gpg» к имени зашифрованного файла.

$ gpg -c file                        # Зашифровать файл по паролю
$ gpg file.gpg                       # Расшифровать файл ( -o другой файл) 

8 июля, 2010

Немного о правах в Unix

[announce]Чтобы было понятно и не забыть самому, что значат циферки в правах :)[/announce]
Итак, основы Unix, но я всегда  забываю как формируются цифры прав доступа в Unix, поэтому и решил написать сюда об этом. чтобы в случае  чего можно было подглядеть.

Вот примерная схема:

-r-w-x—r-w-x—r-w-x-
——-   ——-  ———
    U         G         O

Легенда:
U — Владелец файла
G — Группа владельца файла
O — Все остальные

-r- — Разрешение на чтение
-w- -Разрешение на запись
-x- -Разрешение на использование

Теперь о том как формируются цифры:

Каждое разрешение представляет из себя ,если грубо, булевое значение т.е может быть равно 0 (выключено) или  1(включено)
Таким образом получаем двоичный код   -111-111-111- что значит -rwx-rwx-rwx, а как мы знаем  из курса информатики 111 в двоичной системе счисления есть 7 в восьмеричной, значит запись -111-111-111- в двоичной системе счисления будет равна -7-7-7- в восьмеричной. Кажется все логично и просто :)

Нембольшая таблица, чтобы было понятно наглядно.

Доступ Двоичное число Восьмеричное число
000 0
—x 001 1
-w- 010 2
-wx 011 3
r— 100 4
r-x 101 5
rw- 110 6
rwx 111 7

Вот небольшая программка, которую я написал на js. Может кому-нибудь она поможет лучше понять принцип прав доступа в Unix

При написании статьи пользовался книгой — Маслякова В.Г, Linux на 100%(+DVD), СПб.:Питер,2009, 336c.

7 июля, 2010

настройка sudo

[announce]Настраиваем sudo в ARCHLinux..[/announce]
Программа sudo предназначина для запуска команд с привелегиями root пользователя:
например:

$ sudo halt

Для настройки рекомендуеться запустить команду visudo от ползователя root, которая запустит редактор vi с файлом для редактирования — /etc/sudoers

Немного о синтаксисе файла.

Чтобы разрешить пользователю выполнять все команды от root  нужно ввести строку:

  

user ALL=(ALL) ALL

Если нужно дать возможность запускать на машине только несклько команд, то можно искользовать такой синтаксис:

user ALL=/usr/sbin/halt

Эта строка позволит запускать пользователю user команду halt. Для того,  чтобы позволить пользователю запускать несколько  команд от  пользователя root нужно перечислить команды, включая абсолютный путь к команде, через запятую.

user      ALL=/usr/sbin/halt,  /bin/mount

Эта строка позволит запускать от полззователя root команды halt и mount

Итак, примерно получается такой синтаксис как я понял:

первое поле user — имя пользователя от которого будет запускаться команда sudo
второе поле ALL= — это имя машины на которой разрашено запускать каоманды через sudo
третье поле (ALL) — это пользователь от кого будет запущена команда через sudo, по-умолчанию root
четвертое поле — список команд с абсолютным путем к команде.

Еще пара любопытных опций.
Немного юмора от разработчиков sudo. Если в /etc/sudoers есть эта строка, то вместо стандартного сообщения о введенном неверно пароле будет выводиться шутливое предупреждение:

Defaults insults 

Данная строка укажет на то что sudo будет хранить пароль 10мин.

Defaults:ALL timestamp_timeout=10

*Примечание: каждая запись занимает одну строку, поэтому некоторые записи могут быть большими, для переноса можно ипользовать символ \ тобишь как-то так:

user      ALL=/usr/sbin/halt,  \
/bin/mount

Это будет одна строка.

Источники:

$ man sudo
$ man sudoers

http://wiki.archlinux.org/index.php/Sudo_(Русский)
http://wiki.archlinux.org/index.php/Sudo

конечно же :)

Очень странный сайт с какими-то ошибками и неправильной кодировкой (сразу видно НАШ былокодерский! :) ) — http://www.infocity.kiev.ua/os/content/os299_2.phtml 

6 июля, 2010

Поднимаем Samba

Поднимаем Samba в FreeBSD 8.1
Итак, для того, чтобы подружить windows с FreeBSD поднимаем самбу

# cd /usr/ports/net/samba3 && make install clean

Далее добавляем в /etc/rc.conf строку — inetd_enable=»YES»

Запускаем —
# /etc/rc.d/inetd start

Открываем браузер и вводим в адресную строку: <domain_samba_server>:901 где  <domain_samba_server> имя или ip машины на которой запустили самбу, например http://localhost:901 или http://127.0.0.1:901
После ввода пароля и логина можем управлять настройками самбы из браузера.

Проще как мне кажется отредактировать файл /usr/local/etc/smb.conf при помощи любимого текстового редактора ( конечно же vi :) )

После сохранения настроек запускаем Самбу —
/etc/rc.conf — сюда по традиции добавляем строки:

winbindd_enable="YES"
nmbd_enable="YES"
smbd_enable="YES"

И запускаем скрипт запуска самбы:

# /usr/local/etc/rc.d/samba start

 

LAMP для FreeBSD

[announce]Ставим на фрю LAMP ну или тогда уж FAMP ))[/announce]
Нужно поставить Apache+Mysql+php на FreeBSD 8.1, который в народе заветься LAMP я буду назвать FAMP так как в качестве ОС системы буду использовать не Linux а FreeBSD
Вот как делать:

Для начала поставим Apache:*

# cd  /usr/ports/www/apache13 && make install clean

Затем ставим php и mysql

# cd /usr/ports/lang/php5 && make install clean

В меню config выбираем модуль Apache
Ставим mysql

# cd /usr/ports/databases/mysql50-server && make install clean

прописываем в в rc.conf строки для автоматического старта серверов Apache и Mysql:

apache_enable=»YES»
mysql_enable=»YES»

Запускаем:

# /usr/local/etc/rc.d/mysql-server start &
# apachectl start

можно попробовать сделать скрипт типа такого —

# vim install-lamp.sh

#!/bin/sh
cd  /usr/ports/www/apache13 && make install clean
cd /usr/ports/lang/php5 && make install clean
cd /usr/ports/databases/mysql50-server && make install clean
echo ‘apache_enable=»YES»‘ >> /etc/rc.conf
echo ‘mysql_enable=»YES»‘ >> /etc/rc.conf
/usr/local/etc/rc.d/mysql-server start &
apachectl start

Делаем скрипт запускаемым:

# chmod 775 install-lamp.sh

или запускаем так:

# /bin/sh install-lamp.sh

Зупускать нужно из под пользователя root или используя команду sudo

Вот FAMP и готов )))

* примечание: сначала хотел поставить сервер apache22, но возникли ошибки при установки с пакетом db чего-то там.. так как версия сервера для меня была не принципиальна и не очень много желания было ковырять в сторону исправления этой ошибки, я поставил версию 1.3

PS. В процессе установки FreeBSD я по нехватки опыта отметил php и apache для установки из коробки, все поставилось хорошо, вот только php установился не как модуль apache, а отдельно о чем мне после запуска сервера apache, сообщил inpdex.php, который отобразился как текст в браузере :) Мне пришлось удалить все пакеты связанные с php через pkg_delete и затем собрать php из портов с поддержкой модуля для Apache.

Источник информации: http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-apache.html
Привожу англоязычную документацию не из-за понтов (с английским у меня не очень..) просто дело в том, что в локализованном хэндбуке вариант настройки и установки не подошёл мне (скорее всего из-за устаревшей информации, которая приводится в русскоязычной документации)

**Пока не поменял владельца /var/db/mysql вот так — chown -R mysql:mysql /var/db/mysql/ mysql скрвер не стартавала (решение подглядел вот тут в комментариях — http://chrv.ru/?p=11)

2 июля, 2010

HTML 5

[announce]Пора переходить[/announce]

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

Вот что новенького появилось (движение в сторону упрощения, что не может не радовать :) ):

  • Логическая разбивка (header, footer, nav …) и это есть прикольно! :)
  • Доктайп стал очень простым — !DOCTYPE html
  • У ссылок можно использовать атрибут — target
  • Тэг script может не содержать никакие атрибуты
  •  

    В IE чтобы вся эта красота заработала нужно вставить небольшой код javascript в документе на HTML5:

    Так:

    <!-- [if IE] -->
    <script>
    document.createElement('header');
    document.createElement('nav');
    document.createElement('section');
    document.createElement('article');
    document.createElement('aside');
    document.createElement('footer');
    </script>
    <!-- [endif]-->
    

    Или так:

    <!--[if IE]>
      <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    

     

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

    Я прочитал из этого ресураса о html5 http://dimox.name/hello-html5-goodbye-xhtml2/

1 июля, 2010

FreeBSD

[announce]Ставлю и кручу фряку (очень увлекательно :) ) Подробности читайте в http://killercoder.ru/zennix/ [/announce]

666666666666666666666666666666666666666666666666626666666666666666666666666666666666666666666666666666666666666666666666
6666666666666666666666666666666666666666666
6624 4666666666666666666666666666666666666666666666666666666666666666666666
66666666666666666666666666666666666666666
62445 466666666666666666666666666666662222666666666666666666666666666666666666
66666666666666666666666666666666666666
6244225 56666666666666666666666666666666666524 42666666666666666666666666666666666
666666666666666666666666666666666666
6244224 4666666666666666666666666666666666666424 466666666666666666666666666666666
6666666666666666666666666666666666
62422224 466666666666666666666666666666666666666425 2666666666666666666666666666666
666666666666666666666666666666666
622222225 56662224455 554226666666666666666422 466666666666666666666666666666
66666666666666666666666666666666
642222224 5 42222455 5426666666666664225 46666666666666666666666666666
66666666666666666666666666666666
222222225555555542225555 526666666624225 2666666666666666666666666666
66666666666666666666666666666666
52222245422244222224222225 566622454222 5666666666666666666666666666
66666666666666666666666666666666
4222254224422252222444442225 5544442222225 666666666666666666666666666
66666666666666666666666666666666
22225424266662522426666254225 55555 5222222222225 5666666666666666666666666666
66666666666666666666666666666666
64254446666665222666666625222244555 542222222455 2666666666666666666666666666
666666666666666666666666666666666
45442666666422266666666625222225 544445 26666666666666666666666666666
666666666666666666666666666666666
4542666666242666666666662 2222245 5266666666666666666666666666666
66666666666666666666666666666666
65426224266422666666666666542222255 526666666666666666666666666666666
66666666666666666666666666666666
2542465 5644 52 5266666666542222254 52666666666666666666666666666666666
66666666666666666666666666666666
5455 5 524 22 66666662522222224 4266666666666666666666666666666666666
666666666666666666666666666666
62525 44 55 26666662522222224 4266666666666666666666666666666666666666
66666666666666666666666666666
2242225 425 26666665422222225 26666666666666666666666666666666666666666
666666666666666666666666666
6242222244444424 56666665522222222 56666666666666666666666666666666666666666
66666666666666666
6666666666242222242222222245 466666655222222224 46666666666666666666666666666666666666666
66666666666666666
6222266666522222242222222245555222244555422224555 26666666666666666666666666666666666666666
666666666666666666
6222222662422222444222224 522222222222222225 466666666666666666666666666666666666666666
6666666666666
666666622422266222222224555555555422222222222222225 5666666666666666666666666666666666666666666
6666666666666
222266662662226624222555222222222222222222222222225 46666666666666666666666666666666666666666666
6666666666666
622224266666222666244445 4222222222222222245 555 266666666666666666666666666666666666666666666
66666666666666
642222222622246666662245 542222222222455 554445 26666666666666666666666666666666666666666666666
6666
622666666666666222222242666666666624 5555555 542222445 52666666666666666666666666666666666666666666666666
66666
62222222666666622222222662222224266622555444422224455 466666666666666666666666666666666666666666666666666
6666666
662222222222222222222252222225 466666625 55555 266666666666666666666666666666666666666666666666666
6666666666
6222222222226666242542224 566666662224444422222222244 266666666666666666666666666666666666666666666666666
6666666666666
666666666666662444445 54222666242222222222222222225 26666666666666666666666666666666666666666666666666
66666666666666666666666666
242222225 422222222222222222225 2666666666666666666666666666666666666666666666666
66666666666666666666666666
422222225 544444444422222224 525 5666666666666666666666666666666666666666666666666
66666666666666666666666666
62244445 522222222245555455 525 266666666666666666666666666666666666666666666666
6666666666666666666666666666
62555444 422222222222455 24 466666666666666666666666666666666666666666666666
666666666666666666666666666666
6224445 4222222222222225 566666666666666666666666666666666666666666666666
666666666666666666666666666666666666
625 54222222222222455 566666666666666666666666666666666666666666666666
66666666666666666666666666666666666666
6 5442222222244 466666666666666666666666666666666666666666666666
666666666666666666666666666666666666666
65 5 5555 5666666666666666666666666666666666666666666666666
666666666666666666666666666666666666666
645 2666666666666666666666666666666666666666666666666
666666666666666666666666666666666666666
222255 5666666666666666666666666666666666666666666666666
666666666666666666666666666666666666666
422222245 522245 266666666666666666666666666666666666666666666666
666666666666666666666666666666666666666
242222222224555 54222445 66666666666666666666666666666666666666666666666
666666666666666666666666666666666666666
6442222222222224 542225 56666666666666666666666666666666666666666666666
66666666666666666666666666666666666666666
25222222222224 55 5266666666666666666666666666666666666666666666
666666666666666666666666666666666666666666
2 5554444455 46666666666666666666666666666666666666666666
666666666666666666666666666666666666666666
2 5 526666666666666666666666666666666666666666
666666666666666666666666666666666666666666
65522245 555 5 5426666666666666666666666666666666666666
6666666666666666666666666666666666666666
662452224455 5444444 55 5 2624 542266666666666666666666666666666666
666666666666666666666666
66666662222222244452224244 5422455 445 26662245 544226666666666666666666666666
66666666666666666
66666666266625 422445444554555555555 56666666622255 5544422266666666666666
66666666666666
66666666666666662 5 542222622224 5442555555 266666666666666222455 554266666666
66666666666666
2666666666666666222666666666666625 422445 6666666666666666666666662222222244555 5466666
66666666666666
2666666666666252666666666666666662 56666666666666666666666666666666666662244 4666
666666666666666
62222666666645266666666622222224 5426666666666666666666666666666252666666666245 466
6666666666666666666
6666666666666666666666666625 542266666666666666666666666666666244445266666624 266
6666666666666666666666666666666
666666622222225 555544222666666666666666666666666666666662244222224 44555 46666
66666666666666666666666666666666666666666
6666666666666666666666666666666666666666666666622442222222225 55426666666
66666666666666666666666666666666666666666666666666666666666666666666666666666666666
6624444444455555 5266666666666666
6666666666666666666666666666666666666666666666666666666666666666666666666666666666
62222222222266666666666666666666666666
666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666

Ставлю и кручу фряку (очень увлекательно :) ) Подробности читайте в http://killercoder.ru/zennix/

ASCII стянул отсюда — http://www.codeismylife.com/ascii_freebsd_daemon/3223.html

30 июня, 2010

Пересборка Мира и ядра

Пересобрал мир и ядро на только что установленной фряке. Вот как было дело


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

Итак, приступим

Для оптимизации компиляции нужно отредактировать /etc/make.conf
Пример make.conf можно найти в /usr/share/examples/make.conf
У меня получился вот так — http://killercoder.ru/zennix/Nastroyka_make_conf_v_FreeBSD

Обновляемся через cvsup как тут — http://killercoder.ru/zennix/Obnovlenie_ishodnikov_cherez_cvsup

Читаем тут — http://www.freebsd.org/doc/ru/books/handbook/makeworld.html

Загружаемся в однопользовательский режим:
После загрузки вводим:

# fsck -p
# mount -u /
# mount -a -t ufs
# swapon -a

Переходим в директорию с исходниками (у меня /usr/src/)

# cd /usr/src/

На этапе выбора архитектуры мира произошла накладка, дело в том что uname -a возвратил мне i386, а
dmesg | grep CPU — Athlon64 :)

Нужно было безболезненно перейти на другую архитектуру так как make buildkernel отказался запускаться с параметром в файле конфигурации ядра cpu HAMMER — это для 64х битных атлонов.
Google нашёл по этому поводу статью вот она — http://unixfaq.ru/index.pl?req=qs&id=527

Учитывая данные сведения сделал:

# make buildworld TARGET_ARCH = amd64

Сборка, запустилась. Я не очень силён в команде make, но кажется можно было бы запустить и с параметром -j4, а для amd64 возможно и -j8 для увеличения производительности и скорости сборки.

Дальше переходим 
Копируем ядро GENERIC для нужной нам платформы в удобное место в данном случае это ~/ # cp /usr/src/sys/amd64/conf/GENERIC ~/KERNEL_`date %d_%m_%Y`  Идею с именем нового ядра подсказал lissyara вот отсюда — http://www.lissyara.su/articles/freebsd/tuning/make_kernel/

Редактируем опции ядра при помощи любимого редактора, в моем случае это vi :)

# vi  KERNEL_01_07_2010

Свой конф приводить думаю бессмысленно, могу только сказать, что ознакомится с дополнительными параметрами ядра можно в файле /usr/src/sys/amd64/conf/NOTES и в /usr/src/sys/NOTES — это если вы понимаете по-английски :) я же пользовался опять же Гуглом и http://www.freebsd.org/doc/ru/books/handbook/kernelconfig-config.html,

Собираем ядро
При сборки ядра make buildkernel TARGET_ARCH=amd64 KERNCONF=KERNEL_01_07_2010 выдал ошибку, после перезагрузки компьютера, я повторил попытку, но команда не сработала, тогда я решил пересобрать ядро с командой

# make buildkernel TARGET_ARCH=amd64

Эта команда прошла и запустилась компиляция ядра.
После компиляции запустил установку нового ядра и make выдал ошибку

Error: Please set DESTDIR

Установил DESTDIR:

# export DESTDIR=/usr/src/

Запустил
# make installkernel TARGET_ARCH=amd64

Вроде пошла установка, но выскачела опять ошибка:

cd: can’t cd to /usr/obj/amd64/usr/sys/GENERIC