Поиск по этому блогу

среда, 14 октября 2009 г.

Текущая кодировка в Windows на C#

Узнать текущую кодировку в Windows можно при помощи

Encoding.Default.WebName

К примеру код:

MessageBox.Show(Encoding.Default.WebName);

Выводит следующее:

понедельник, 21 сентября 2009 г.

Установка программ в Wine


Низкий поклон и хвала разработчикам Wine http://www.winehq.org/ . Такую технологию сваяли! А вот установка софта не всегда прямолинейна, т.к. разные приложения требуют различных, порой существенных настроек в winecfg. Вспомнить хотябы установку Directx, это ж убиться веником (с) :)
Тут на помощь приходит Winetricks - утилита для автоматизированной установки многих приложений и библиотек, таких как тот же Directx или Internet Explorer 6, являющихся основой для многих Windows-приложений.

Подробнее о Winetricks http://wiki.winehq.org/winetricks , а скачать его можно командой
# wget http://www.kegel.com/wine/winetricks

понедельник, 31 августа 2009 г.

Как я MySQL-сервер на FreeBSD7.1 ставил

Как будто уже и не в первый раз на MySQL ставлю, а с таким еще не сталкивался.
Как обычно обновляю порты, захожу в порт с мускулом:

#cd /usr/ports/databases/mysql51-server

Далее как обычно:

#make

#make install

#mysql_install_db

Устанавливаю на базу юзера и группу как mysql:mysql

Пытаюсь стартануть сервер:

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

И пусто, нет привычной строки Starting mysql.

Запускаю клиент:

#mysql

И получаю:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Тоесть сервер не запущен.

Аналогично себя повел и mysqltest:

# mysqltest
mysqltest: Could not open connection 'default' after 500 attempts: 2002 Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
not ok

После скитаний по интернету, портам, поиска логов и размышлений над правами начинается тупой перебор :(

Запускаю скрипт запуска MySQL, чтобы посмотреть на праметры:

# /usr/local/etc/rc.d/mysql-server
Usage: /usr/local/etc/rc.d/mysql-server [fast|force|one](start|stop|restart|rcvar|status|poll)
Заинтересовал параметр rcvar

Пробую:

# /usr/local/etc/rc.d/mysql-server rcvar
# mysql mysql_enable=NO

На всякий случай добавляю в /etc/rc.conf строку mysql_enable="YES"

Опять пробую:

# /usr/local/etc/rc.d/mysql-server rcvar

# mysql
mysql_enable=YES

Да, подтянуло параметр из /etc/rc.conf

После чего мистика :) - сервер запустился:

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

Как все просто оказалось на самом деле

понедельник, 3 августа 2009 г.

Преобразование числа в строку и обратно на C++ под Linux

По непонятной мне причине(или я ошибаюсь) в Linux отсутствует функция itoa - пробразование числа в строку,
хотя и реализована atoi - преобразование строки в число.
Для пробразования числа в строку рекомендутся использовать sprintf, как описано тут http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/

/* sprintf example */
#include <stdlib.h>
int main ()
{
char buffer [50];
int n, a=5, b=3;
n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
printf ("[%s] is a %d char long string\n",buffer,n);
return 0;
}

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

(листинг stringconvert.h)

#ifndef _STRINGCONVERT_H
#define _STRINGCONVERT_H
#include <string>
#include <sstream>

template <typename T>
std::string toString(T val)
{
std::ostringstream oss;
oss<< val;
return oss.str();
}

template <typename T>
T fromString(const std::string& s)
{
std::istringstream iss(s);
T res;
iss >> res;
return res;
}

#endif /* _STRINGCONVERT_H */

А использовать его очень просто:

(листинг main.cpp)

#include <stdlib.h>
#include "stringconvert.h"
#include <string.h>
#include <iostream>
/*
*
*/
using namespace std;

int main(int argc, char** argv)
{
//convert numbers to string
int i = 1234;
float f = 1234.12;
double d = -345.67;

string s_i = toString(i);
string s_f = toString(f);
string s_d = toString(d);

//print numbers converted to strings
cout << "Integer to string: " << s_i << endl;
cout << "Float to string: " << s_f << endl;
cout << "Double to string: " << s_d << endl << endl;

//convert string to numbers

string s_ii = "456";
string s_ff = "456.678";
string s_dd = "-890.45";

int ii = fromString<int>(s_ii);
float ff = fromString<float>(s_ff);
double dd = fromString<double>(s_dd);

//print strings converted to numbers
cout << "String to integer: " << ii << endl;
cout << "String to float: " << ff << endl;
cout << "String to double: " << dd << endl;

return (EXIT_SUCCESS);
}

Вывод программы:

Integer to string: 1234
Float to string: 1234.12
Double to string: -345.67

String to integer: 456
String to float: 456.678
String to double: -890.45

Преобразование происходит при помощи шаблонов
функций(о том, что это такое можно глянуть тут http://programmersclub.ru/29/ )

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

пятница, 31 июля 2009 г.

Kernel Panic при обновлении Kubuntu с 8.04 до 9.04

Писал когдато пост, где плакался что такое обновление прошло неудачно http://dendroudnotes.blogspot.com/2009/05/kubuntu.html и закончилось переустановкой системы. Решил все же обновить систему на другой машине с 8.04 до 9.04 авось повезет. Не повезло :) Как рекомендуется на офсайте обновляю все пакеты и в апдейтере появляется кнопка "Обновить версию", нажимаю, запускается мастер обновления скачивает больше гига пакетов, распаковывает инсталит довольно долго. Приблизительно на 50% установки предлагает перезагрузиться. Перезагрузка и Kernel Panic.
Но решение всеже нашел!
Сразу после загрузки BIOS загрузчик предлагает нажать Esc для входа в меню загрузки. В меню предлагается загрузить одно из установленных ядер как в обычном, так и в режиме восстановления.

Новое ядро отказалось грузиться в любом из режимов, но какое-то из старых загружается, но ругается на недоступность каких-то тем при переходе к ГУИ режиму и забывает про клавиатуру и мышь.
Пробую загрузить его-же в режиме восстановления.
И т.к. ядро при нормальном запуске ругалось на то что чего-то не может найти выбираю dpkg Repair broken packages. Устанавливается оргромное количество пакетов, так понимаю те пакеты, которые небыли установленны при нормальном обновлении. Перезагружаюсь, старое ядро запускается и Kubuntu 9.04 отлично стартует.
По субьективному мнению KDE 4.2 работает намного быстрее нежели KDE 3.5 ну и конечно-же намного красивее.

суббота, 4 июля 2009 г.

FTP сервер за NAT на FreeBSD 7.1

Настройка маршрутизации для FTP протокола оказывается довольно сложная вещь и делал я это в первый раз, поэтому объективность поста может быть под вопросом, но тем не менее работает.

И так имеется:

-Интернет, откуда нужно открыть доступ к FTP-серверу;
-Машина с FreeBSD 7.1 и PF используемая в качестве роутера c внешним интерфейсом 100.100.10.123 и DMZ интерфейсом 192.168.0.1;
-DMZ с серверами, в том числе и FTP-сервером;
-FTP-сервер с адрессом 192.168.0.12, работающий на 1025 порту;

FTP использует пассивный режим, но простой редирект в PF почему-то не дал результата.

Решение было найдено при помощи ftp-proxy, который начиная с FreeBSD 7.0 идет в системе по умолчанию и не нуждается в установке.

Для начала нужно научиться вообще перенаправлять трафик при помощи ftp-proxy. Для этого с правами рута:

#
ftp-proxy -R 192.168.0.12 -p 21 -b 100.100.10.123 -P 1025

Тут 192.168.0.12 - IP FTP-сервера в DMZ, 100.100.10.123 - IP внешнего интерфйса, 1025 - порт, на котором запущен FTP-сервер, 21 - порт, на котороый подключаются пользователи из интернета.

И открыть 21 порт в фаэрволе, если он закрыт. Для этого в /etc/pf.conf вписать строчку

pass in on $ext_if inet proto tcp to $ext_ip port 21 flags S/SA keep state

где $ext_if имя внешнего интерфейса, а $ext_ip его IP-адресс и перезапустить фаэрвол:

#pfctl -f /etc/pf.conf

Если все получилось, то FTP-сервер должен отвечать на подключения извне(хотя подключения может и не произойти, но порт будет открытым и FTP-сервер увидит попытку подключения) , и в списке процессов должен появится запущенный ftp-proxy:

#ps ax|grep ftp-proxy
535 ?? Ss 0:07,99 ftp-proxy
537 ?? Ss 0:08,35 ftp-proxy -R 192.168.0.12 -p 21 -b 100.100.10.123 -P 1025


Проверить работоспособность сервера можно, к примеру, при помощи http://www.net2ftp.com/

Но это был старт "Вручную". Для того чтобы ftp-proxy запускался при старте системы я добавил /etc/rc.conf строку:

ftp-proxy -R 192.168.0.12 -p 21 -b 100.100.10.123 -P 1025

Возможно и не правильно, но рекомендованный способ запуска с указанием в rc.conf

ftpproxy_enable="YES"
ftpproxy_flags="-R 192.168.0.12 -p 21 -b 100.100.10.123 -P 1025"

НЕ ПОМОГ.

В /etc/pf.conf нужно добавить такие правила:

########## \ redirect ftp from internet/##################
#Якоря для ftp-proxy
nat-anchor "ftp-proxy/*"
nat on $ext_if inet from $int_dmz -> ($ext_if)
rdr-anchor "ftp-proxy/*"
###########################################

#################\ ftp filter rights/######################
pass in on $ext_if inet proto tcp to $ext_ip port 21 flags S/SA keep state
pass out on $int_dmz inet proto tcp to $ftpserv_ip port 21 user proxy flags S/SA keep state
anchor "ftp-proxy/*"
###########################################

Где:

$ext_if - внешний интерфейс;
$ext_ip - IP адресс интерфейса $ext_if
$int_dmz - интерфес роутера, смотрящий в DMZ сеть, в которой находится FTP-сервер;
$ftpserv_ip - IP адресс FTP-сервера в DMZ

Более подробно по настройке ftp-proxy можно почитать тут http://www.openbsd.org/faq/pf/ftp.html

четверг, 2 июля 2009 г.

Как ставить < > (знак больше/меньше) в HTML

Пришлось както вставить в заголовок блога знаки < > . Но оказалось что просто так знаки больше и меньше в загловок поста вставить не получится - они будут восприняты как HTML теги и не отобразятся, аналогично с ними будут такие же проблемы и в HTML. Для того чтобы их всетаки вставить, их нужно заменить на комбинации:
Для < "& lt;"
Для > "& gt;"
(без кавычек и пробелов после &)

Аналогично это работает и в HTML.

Полностью по спецсимволам можно глянуть тут: http://html.manual.ru/book/info/specialchars.php

понедельник, 1 июня 2009 г.

CURL в C++

Почитать про использование CURL можно тут

понедельник, 11 мая 2009 г.

Нормальный редактор в mc

Если не ошибаюсь то начиная с Ubuntu 8.10 в MC стоит какойто не очень привычный редактор nano с черным фоном и сложностями в управлении. Лечится это довольно легко. Для того чтобы вернуть редактором по умолчанию привычный mcedit нужно в файле ~/.mc/ini значение use_internal_edit поменять с 0 на 1.

Настройка сети в KDE4 Kubuntu 9.04

Не перестаю удивляться сборшикам Kubuntu и разработчикам KDE4. Ну какого в релизы пихать неработающий софт? Ну как настроить сеть этим network-managerОМ?
Если всё же дернуло поставить Kubuntu c KDE 4, то стандартными средствами сеть поднять удастся врядли.
Для поднятия интерфейса со статическим адресом содержимое файла /etc/network/interfaces должно быть похожим на это

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 19.14.12.18
netmask 255.255.255.0
gateway 19.14.12.1

19.14.12.18 - IP адрес
19.14.12.1 - шлюз по умолчанию

Далее, чтобы заработал DNS, создаем файл /etc/resolv.conf и пишем туда 1 строчку

nameserver 111.222.333.444

где 111.222.333.444 - DNS-сервер провайдера

По идее все должно заработать, после перезагрузки

Пока что единственное позитивное впечатление от KDE 4 - довольно шустрая работа, хотя и машинка МОНСТР с Core2 Q8200 ;)

Обновление Kubuntu

Ну неужели у меня руки не из того места растут?
Решил обновиться с Kubuntu 8.04 до 9.04. На офсайте написано: заходишь в Адепт, обновляеш список пакетов и жмеш кнопку Обновить версию и все ОК. Сделал так, запустилась обновлялка, предложила скачать больше гига обновлений. Скачала, под конец установки сказало что произошла какая-то ирора "Не могу скачать пакет" и закрылось. После перезагрузки - Kernel Panik. Попытался загрузить старое ядро - удалось лишь в режиме восстановления.
И такое почти каждый раз при обновлении бубунты :(

воскресенье, 10 мая 2009 г.

Отключение свопа в Linux

Отключить использование свопа позволяет команда swapoff, соответственно включить - swapon. К примеру, swapoff -a отключает использование всех своп-разделов, а swapon -a соответственно включает.

пятница, 8 мая 2009 г.

VNC сервер под Linux

Понадобилось удаленно управлять одной гуишной программой под Linux. Сразу решил попробовать знакомые Krfb и Krdc - сервер и клиент для удаленного рабочего стола. Но их глючность и падучесть, также то, что доступ идет именно к реальному рабочему столу заставило искать другое решение.
Всем тербованиям удовлетворил vncserver.
Для дебианподобных дистрибутивов( kubuntu в моем случае ) установка выглядит так:

#sudo apt-get install vnc4server

Дальше, чтобы все заработало необходимо запустить первый раз сервер без параметров:

#vnc4server

Ввести пароль, который будет использоваться для доступа к рабочему столу.
Будут автоматически созданы файлы:

$HOME/.vnc/passwd - хранится пароль и довольно интересный файл $HOME/.vnc/xstartup - скрипт, определяющий какие приложения болжны быть запущены при старте сервера. по умолчанию этот файл выглядит так:

# cat xstartup


#!/bin/sh

# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &


Тут указан только запуск эмулятора терминала, будет запущена консоль в окне без рамки, т.к. не запущен никакой менеджер окон. При желании можно заменить запуск терминала на запуск KDE или GNOME или добавить еще что-либо.

Запуск сервера происходит командой vnc4server :номер экрана, например:

#vnc4server :3

Доступиться к удаленному рабочему столу можно используя клиент Krdc, вписав в поле Remote desktop vnc:/адрес машины :номер экрана:

vnc:/192.168.0.2 :3

Жмем Next, если надо используем бумажник для хранения паролей(не пользуюсь), вводим пароль и видим нечто подобное













Из-под Windows, после перебора нескольких VNC-клиентов, доступ был организован при помощи RealVNC.

четверг, 7 мая 2009 г.

Сброс кеша DNS BIND 9

Для того чтобы очистить кеш в кеширующем DNS-сервере
BIND 9 без перезагрузки системы нужно сказать:

#rndc flush

среда, 6 мая 2009 г.

Автозапуск в XFCE


Для *nix есть много графических оболочек. Кроме знакомых мне KDE и GNOME пришлось попробовать и XFCE4. Как казалось приятная и легкая оболочка, довольно стабильная, можно использовать на машинах где KDE еле ползает. А вот сделать автозапуск программы оказалось не совсем тривиальной задачей.
Автозапуск в
XFCE4 делается при помощи создания *.desktop (любое имя с расширением desktop) файлов, которые имеют формат:

[Desktop Entry]
Encoding=UTF-8
Version=0.9.4

Type=Application
Name=название Comment=
Exec=/полный/путь/к/приложению StartupNotify=false Terminal=false Hidden=false

И находятся в ~/.config/autostart/

Также автозапуск программы можно настроить при помощи утилиты xfce4-autostart-editor

четверг, 30 апреля 2009 г.

Firefox + Linux amd64 + Java = ?

Каждый раз при установке Linux, восоновном бубунты всякие, ставлю и свой любимы браузер Firefox. На то, что по умолчанию не работает флеш особо не волнует, а вот поддержка Java очень нужна. Дання вещь реализована Sun начиная с JRE 1.6.0_12. Подключение же Java-плагина в Firefox на Linux amd64 слегка отличется от x86.

Если еще не установлена необходимая версия JRE - ставим. Скачать необходимую JRE можно тут https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jre-6u12-oth-JPR@CDS-CDS_Developer . Это инсталятор. Для установки даем скачаному файлу права на выполнение и запускаем с правами root, соглашаемся с условией лицензии и т.д. :)

Далее нужно сделать символическую ссылку на файл libnpjp2.so, являющийся Java-плагином, который расположен каталоге lib/amd64/ установки jre.

#sudo ln -s /usr/lib64/jvm/jre1.6.0_12/lib/amd64/libnpjp2.so /usr/lib/firefox-3.0.8/plugins

Перезапускаем Firefox, если все сделано правильно и я нигде не ошибся Java заработает.

P.S. Также почитать можно тут http://plugindoc.mozdev.org/linux-amd64.html

вторник, 28 апреля 2009 г.

MyChat сервер под Linux

Как оказалось поднять сервер MyChat под Linux особого труда не составляет. Для этих целей был взят довольно старенький комп, на котором KDE еле ползала. Установлена легкая графическая среда XFCE и новенький wine 1.1.18. MyChat сервер установился без проблем и запустился. Но встроенный FTP-сервер подниматься не захотел. Позже выяснилось что в Linux использовать порт ниже 1024 может только root. Измененил номера порта на порт выше 1024 и встроенный FTP отлично заработал. Запустить же сервер на порту мене 1024 без прав root позволяет privbind.

четверг, 16 апреля 2009 г.

MyChat под Linux

Решил поставить на рабочей машине клиент MyChat. Сижу я под Kubuntu 8.04.
Для начала беру свежую версию wine, как это сделать написано сдесь http://www.winehq.org/download/ Качаю клиент чата, с офсайта nsoft-s.com MyChat 3.9.5, размер, однако, впечатляет :)
Установка прошла без проблем. Чат запустился и по умолчанию поломился конектиться на localhost и конечно же ничего там не нашел. Прописываю адрес сервера жму ОК и тут вылетает сообщение об ошибке. Ошибка повторяется регулярно при попытке добавить новый адрес сервера. Копание в логах клиента и общение с разработчиками MyChat дало результат: оказывается в реестре wine банально отсутствует необходимый ключ.
Исправление ошибки заключется в создании ключа "Run"(выглядит как папка) в реестре wine.

Для этого в консоли :

# wine regedit

Открывается редактор реестра wine. Идем HKEY_CURENT_USER -> Software -> Microsoft -> Windows на CurrentVersion правый клик Создать -> Ключ и называем его run

Чат работает прекрасно :)

Разработчики пообещали все подправить в следующей версии.

среда, 15 апреля 2009 г.

Поднятие сетевой платы ASUS NX1001 под FreeBSD

Понадобилось сделать небольшую DMZ, для этих целей приобрел плату ASUS NX1001(http://ru.asus.com/products.aspx?l1=29&l2=171&l3=742&l4=0&model=1995&modelmenu=1), т.к. знакомых дешовеньких Realtek в наличии не оказалось.
С ходу адаптер под FreeBSD нормально работать отказался, но определился правильно.

# ifconfig

ste0: flags=8843 metric 0 mtu 1500
options=8
ether 00:1f:c6:35:57:92
inet 192.112.0.1 netmask 0xffffff00 broadcast 192.112.0.255
media: Ethernet autoselect (none)
status: no carrier


Хотя кабель и подключен, но конекта нет и индикатор на адаптере не светится, также о отсутствии линка говорит status: no carrier.

После копания в нете выяснилось что эта крточка в FreeBSD 6.х запускалась только после правки и пересборки ядра. У меня же FreeBSD 7.1 и сетевая плата определилась, но не работала.
Как оказалось плата просто не может автоматически выбирать режим работы и после задания вручную все прекрасно заработало.

Говорим:

# ifconfig ste0 media 100baseTX mediaopt full-duplex


Проверяем:

# ifconfig
ste0: flags=8843 metric 0 mtu 1500
options=8
ether 00:1f:c6:3a:57:92
inet 191.112.0.1 netmask 0xffffff00 broadcast 191.112.0.255
media: Ethernet 100baseTX
status: active

Для того чтоб плата правильно инициализировалась при загрузке системы в /etc/rc.conf нужно добавить строку:

ifconfig ste0 media 100baseTX mediaopt full-duplex

тем самым указав нужный режим.



вторник, 24 марта 2009 г.

Остановка вращения шпинделя HDD под FreeBSD

Поднял шлюз на FreeBSD, а через пару дней он таки достал громкой работой - гул старого винчестера довольно сильно раздражает.
Загорелся я идеей остановить вращение шпинделя. Пол дня копания в нете привело к обнаружению довольно интересной команды atacontrol.
Судя по мануалке команда используется для управления ATA-устройствами, управления ими в RAID, подключении и отключении.

# atacontrol
usage: atacontrol args:
atacontrol list
atacontrol info channel
atacontrol attach channel
atacontrol detach channel
atacontrol reinit channel
atacontrol create type [interleave] disk0 ... diskN
atacontrol delete array
atacontrol addspare array disk
atacontrol rebuild array
atacontrol status array
atacontrol mode device [mode]
atacontrol cap device
atacontrol spindown device [seconds]

В данном случае нас интересует только последняя строчка

atacontrol spindown device [seconds]


К примеру

#atacontrol spindown ad0 60

должно привести к отключению вращения шпинделя устройства ad0, если к нему нет обращений в течении 60 секунд. Используеться имено имя устройства "ad0", а не путь к устройству "/dev/ad0".
Для отключения остановки HDD т.е. чтоб гудел постоянно нужно сказать

#atacontrol spindown ad0 0

А для просмотра текущего состояния говорим

#atacontrol spindown ad0

т.е. без указания вермени

Приступим к полевым испытаниям:

#atacontrol spindown ad0 60

Ждем, ждем, ждем и ничего.

Уменьшаем время до 5 секунд:

#atacontrol spindown ad0 5

ad0: Idle, spin down
ad0: drive spun down.
ad0: request while spun down, starting.

Винт издает звуки остановки и тут же запускаеться заново :( Получаеться что остановка всетаки отрабатывает но ктото постоянно делает обращение к файлам. Так вспоминаем... и смотрим ps ax... Надо бы отключить sendmail, cron и всех остальных кто юзает винт. В данном случае комп используется как роутер и юзать винт ему особо ненадо. Также прийдется пожертвовать хранением логов.

Добавляем в rc.conf чтобы полностью вырубить sendmail и cron:

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
cron_enable="NO"

Перезагружаемся, пробуем

#atacontrol spindown ad0 5

ad0: Idle, spin down
ad0: drive spun down.
ad0: request while spun down, starting.

Опять тож самое, винт дернулся и запустился заново. Подозрения падают на логи, причем самый разные, включая консольные команды юзера. И тут вспоминаю про то, как ставил FreeBSD на флешку. Ведь mount умеет монтировать не только разделы, а и память, создавая нечто похожее на файловую систему в оперативной памяти. В конечном итоге /etc/fstab
принял такой вид:

# cat /etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1a / ufs rw 1 1
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
md /tmp mfs rw,-s16M,nosuid,noatime 0 0
md /var/tmp mfs rw,-s16M,nosuid,noatime 0 0
md /var/run mfs rw,-s4M,nosuid,noatime 0 0
md /var/log mfs rw,-s16M,nosuid,noatime 0 0
md /root mfs rw,-s4M,nosuid,noatime 0 0
md /home mfs rw,-s4M,nosuid,noatime 0 0
/proc /proc procfs rw,noauto 0 0

Тоетсь реально монтируется только корневой раздел, а папки с файлами которых происходит какая-либо работа отображаются в память и никоим образом не связаны с реальными на диске. Также следует заметить, что своп не монтируется и его использование при остановка винчестера нелогично.
Все каталоги, примонтированные в память, создаются пустыми, поэтому в каталоги, в которых хранятся какие-либо конфиги эти конфиги нужно скопировать обратно. Для этого делаем их копии в какую либо папку, а потом копируем скриптом обратно в папки, примонтированные в память(ниже в
скрипте hddstop.sh).

Перезагружаемся пробуем

#atacontrol spindown ad0 5

ad0: Idle, spin down
ad0: drive spun down.

И тишина :)

Теперь чтобы выключение HDD происходило после загрузки системы создаем скрипт с любым именем в /usr/local/etc/rc.d и не забываем сделать его исполняемым.

К примеру:

# cat /usr/local/etc/rc.d/hddstop.sh

#!/bin/sh
#echo -n ' FooBar'

case "$1" in
start)
#copy mgety config and ppp files
######
cp /usr/share/mgetty_config_copy/mgetty+sendfax/* /usr/local/etc/mgetty+sendfax/
cp /usr/share/mgetty_config_copy/ppp/* /etc/ppp/
cp -R /usr/share/mgetty_config_copy/spool/* /var/spool/
######

atacontrol spindown ad0 50

echo "Spindown after 50 seconds" >&2
;;
stop)
atacontrol spindown ad0 0
echo "Spindown disabled" >&2
;;
*)
echo "This comand just start ataconfig" >&2
exit 64
;;
esac
exit 0



Перезагружаемся, ждем, проходит минута-полторы и тишина :)

З.Ы. Все эти пляски с бубном имели место лишь потому, что железо старое и с флешки грузиться не умеет. Умей грузиться - стартовало бы с флешки.

Пускаем локальную сеть в нет при помощи FreeBSD-шлюза

Поднимал недавно интернет-шлюз для того чтобы пускать локальную сеть в мир. В качестве железа взял старенький Celeron 800, с материнкой на i815, 128 + 256 памяти. Винчестера в наличии небыло поэтому решил идти в ногу со временем и поставить свеженькую FreeBSD 7.1 на флешку как описано здесь и по подобным мануалам. Таким образом FreeBSD удалось установить даже на фотоаппарат и загрузить с него ноут :), а вот старенький комп грузится с флешки категорически отказывался. Пришлось купить б/у винчестер WD на 20Гб.
Поднятие NAT на PF и кеширующего DNS не составило особого труда.

Конфиги на память.

rc.conf

saver="fire"
sshd_enable="YES"
named_enable="YES"
inetd_enable="YES"
pf_enable="YES"
gateway_enable="YES"
apm_enable="YES"
#############################################################################
# localization
#############################################################################
keymap=ru.koi8-r
keychange="61 ^[[K"
scrnmap=koi8-r2cp866
font8x16=cp866b-8x16
font8x14=cp866-8x14
font8x8=cp866-8x8
#############################################################################

ifconfig_rl1="inet xxx.xxx.xxx.xxx netmask 255.255.255.0"

ifconfig_rl0="inet xxx.xxx.xxx.xxx netmask 255.255.255.0"
defaultrouter="yyy.yyy.yyy.yy"

pf.conf

ext_if="rl0"
int_if="rl1"

set block-policy drop

scrub in all
scrub min-ttl 64
scrub in on $ext_if all fragment reassemble

nat on $ext_if from any to any -> ($ext_if)

block all
pass quick on $int_if all
pass out quick on {$ext_if} all keep state
pass on lo0 all #может и не совсем коректно, но нужно чтобы и сама фря использовала свой кеширующий DNS

resolv.conf

nameserver 127.0.0.1

/var/named/etc/namedb/namedb.conf

Подправляем и не забываем раскоментировать секцию forwarders, должно получиться что-то похожее:

forwarders {
yyy.yyy.yyy.yyy;zzz.zzz.zzz.zzz;
};


Вообщем все просто и без извращений.

пятница, 20 марта 2009 г.

Приступим

Решил все-таки завести себе блог :) Надоело постоянно натыкатся на одни и теже грабли по нескольку раз вспоминая "А как же я тогда делал?". Надеюсь, посты будут полезны не только мне, а и многим столкнувшимся с такими вещами как программинг и админинг :)