вівторок, 19 березня 2013 р.

umount... device is busy? Кто держит мою флешку?!!!

Частенько после того как поработал с флешкой, внешним или сетевым диском не возможно его нормально демонтировать - device is busy!

Вопрос кто держит мою флешку?

Ответ можно получить в два хода
fuser -m <устройство или точка монтирования>
получим PID а дальше
ps -A|grep <PID который получили>
Дальше можно соорудить конвеер, чтобы сразу получить имя процесса, который держит устройство. Но не сейчас.

Например как я узнал, кто захватил мой внешний диск

root@legatus ~ # fuser -m  /run/media/magedon/7f9776a7-7cef-4105-860c-17a723220f85
/run/media/magedon/7f9776a7-7cef-4105-860c-17a723220f85:   645
root@legatus ~ # ps -A|grep 645
  645 ?        01:05:51 skype
и так мой диск захватил skype. Скайп выключил штатным методом, без всяких киллов.
И дальше просто демонтируем диск тоже штатными средствами. 

P.S. Кстати, а что это понадобилось Майкрософту на моём диске? Ведь скайп уже Майкрософт.
Пора искать альтернативу скайпу.

пʼятниця, 15 березня 2013 р.

WebBrowser x64 && Java Applets

Система ArchLinux x64
Установленные пакеты:

  • jdk7-openjdk
  • jre7-openjdk

Хочу Ява Приложение запускаемое с сайта банка.

При переходе на страничку с java апплетом меня просто перекидывало на сайт Oracle с предложением установить java.

Думал, что надо ставить 32ный браузер с 32ной явой.

Но попробовал поставить icedtea-web-java7 и все заработало.

Надо будет попробовать еще WebEx. Интересно будет ли работать звук?

субота, 9 березня 2013 р.

Как заставить Konqueror нормально отображать страницы

Доброе время суток, Все!

Преамбула

В рабочей обстановке мне нужно подключаться к одним и тем же сервисам под разными аккаунтами. Например к gmail.comCalendar Google и так далее и тому подобное. И каждый раз при этом мне нужно уточнять каким аккаунтом нужно подключится. И хорошо ещё что сервис спрашивает.
Решил я эту проблему тем что пользуюсь несколькими браузерами одновременно. До недавнего времени это были Chromium и Firefox. Но настало время что мне их стало не хватать. Но т.к. я пользуюсь KDE, в который по умолчанию включен свой веббраузер Konqueror, который может работать как и Dolphin. Название слеплено из KDE + conqueror. Conqueror, A214 -  британский тяжёлый танк 1950-х годов

Теперь суть

Как оказалось, у нашего танка можно менять движки. По умолчанию он использует KHTML и поэтому отображение некоторых страниц довольно корявое. В частности gmail сразу говорит, что браузер не совместим. Поэтому нужно заменить этот движок на WebKit.
Для начала нужно поставить этот движок в систему. У меня в арче это делается так
pacman -S kwebkitpart
В вашей системе смотрите сами как.
Потом просто запускаем Konqueror и в настройках меняем ему движок.
По английски эта опция называется Default web browser engine.

Вывод

После этого Konqueror стал показывать как Chromium. Однако для меня он всётаки не удобен.

вівторок, 5 лютого 2013 р.

Chromium постоянно просит пароль

Как же меня достал этот Chromium! Постоянно просит пароль!
Вначале я терпел. Пытался вводить пароль. А ему плевать.

В общем нашёл ключик как это отключить -  запускать его с параметром --password-store=basic
Командная строка будет выглядеть примерно так
/opt/google/chrome/google-chrome --password-store=basic %U
Что это означает не искал. Возможно не самое правильное решение, но он перестал меня доставать. 

четвер, 8 листопада 2012 р.

Групповая обработка файлов в bash (цикл for)

Есть две папки
  1. bin - куда собирается программа
  2. 10y - папка с материалами, с которыми должна работать программа.
Раньше я просто копировал папку с материалами в bin. Однако настало время что я узнал, что мой винт не резиновый а материалов там пол Гига.

В общем решил симлинки положить в bin. Но создавать в ручную около 50 симлинков лень. Решил поискать как это дело можно автоматизировать.
Нашел.

Итак, структура каталогов следующая

project
├── 10y
├── bin
...
└── src


for file in 10y/*; do ln -s ../10y/$file ../bin/$file; done
  1. Заходим в каталог project
  2. Пишем выше приведенную строчку и жмем ентер
  3. Наслаждаемся результатом ))
следующая строка ищет все файлы и каталоги в папке 10y
for file in 10y/*;
где  file - это переменная итератор

далее создает для каждого выбранного файла или каталога относительный симлинк в папке bin
do ln -s ../10y/$file ../bin/$file;
значение переменной извлекается через  $, поэтому пишем не просто file, а $file

В общем виде цикл организован так
for <переменная итератор> in <маска>; do <действие>; done
Обратите внимание на точки с запятыми do и done - это обязательно

субота, 18 лютого 2012 р.

Как убрать закладки у PageControl?

Уже много раз нужно было убрать у TPageControl эти закладки. Не TabSheet,  а именно сам заголовок. Мне нужно было для визарда, для формы настроек, где слева дерево, а справа страница с контролами.
Как сделать это с TPageControl сразу не понятно и поэтому как я только не изголялся - использовал и TFrame, и TNoteBook. Всё неудобно. Но как это сделать с TPageControl я долго не искал, потомучто нужно было делать срочно.
И вот настал момент, когда сказали переделать существующий PageControl, у которого около 20 страниц, на каждой из которых может быть до 20 контролов. Переделывать все это заново как-то не хотелось.
Правду люди говорят:
"Лень -  двигатель прогресса"
Нашел как это сделать. И все оказалось очень просто. И так.

  1. Кидаем на форму TPageControl.
  2. Устанавливаем  TPageControl.Style := tsButtons.
  3. Заполняем его TTabSheet-ами
  4. У каждого табшита устанавливаем TabVisible := False;
  5. Потом присваиваем TPageControl.ActivePage := TabSheet1;
В моем случае я сделал при создании формы
 pcMain.Style := tsButtons;
 for I := 0 to pcMain.PageCount-1 do
    pcMain.Pages[I].TabVisible := False;
 pcMain.ActivePage := tsBasic;

Заполнил TreeView нодами с заданными значениями SelectedIndex. Потом в TTreeView.OnChange 

procedure TfrmMain.PropTreeChange(Sender: TObject; Node: TTreeNode);
begin
  case Node.SelectedIndex of
    10  : pcMain.ActivePage := tsBasic;
    20  : pcMain.ActivePage := tsDocs;
    30,
    31  : pcMain.ActivePage := tsTextsOffer;
    32  : pcMain.ActivePage := tsTextsInfo;
...

где tsBasic и тому подобные - это TTabSheet


Вот и все

пʼятниця, 17 лютого 2012 р.

Проблемы с наследниками TFrame

Добавил в проект фрейм  TCustomTextFrame = class (TFrame). Визуальных контролов на него не ложил. Просто добавил нужные свойства, методы, объявил абстракные...
Добавить наследника TCustomTextFrame  через File/Add New/Other/Inherited не получилось.
Добавил простой фрейм и вручную в коде поменял ему предка с TFrame на TCustomTextFrame 
TframeTextsOffer = class(TCustomTextFrame)
Всё  нормально подхватилось и заработало.

Самое интересно началось на следующий день - при открытии в дизайнтайме TframeTextsOffer вылетала ошибка, что нет такого свойства как ClientHeight. Компилялось молча, но при запуске приложения тоже ругалось на ClientHeight.

Оказалось что делфи почемуто добавляет внуку, так сказать, фрейма в *.dfm свойства ClientHeigh, ClientWidth и ещё кучу всякого. Но у фрейма такого нет. Вот и ругается.
Но простое удаление не дает результатов -  делфи при открытии TframeTextsOffer  в дизайнтайме упорно добавляет эти свойства, на которые потом сама же и ругается.

Помогло только изменение вручную в *.dfm object frameTextsOffer: TframeTextsOffer  на inherited frameTextsOffer: TframeTextsOffer.

Не знаю насколько это правильно, но пока работает.

вівторок, 24 січня 2012 р.

Delphi и дескрипшены к полям MS Access

Задача: Получить коментарии (описания) полей в MS Access и сделать их хинтами к контролам.


Итак что нужно сделать
  1. Получить комментарии к полям
  2. Список Таблица.Поле=Коментарий
  3. Обновить хинты контролов.
Первое.
В DataModule делаю 


private
  FFieldsComments: TStrings;
  ...

  procedure UpdateFieldsComments;
published
  property FieldsComments: TStrings read FFieldsComments;


FFieldsComments создается в DataModuleCreate и разрушается в DataModuleDestroy.


procedure TdmMain.UpdateFieldsComments;
var
  ADODataSet: TADODataSet;
begin
  if Assigned(FFieldsComments) and ADOConnection1.Connected then
  begin
    FFieldsComments.Clear;
    ADODataSet := TADODataSet.Create(Self);
    try
      ADOConnection1.OpenSchema(siColumns, VarArrayOf([Unassigned, Unassigned, tblDeviceCharacteristics.TableName]), EmptyParam, ADODataSet);
      ADODataSet.Open;
      ADODataSet.First;
      while not ADODataSet.Eof do
      begin
        if ADODataSet.FieldByName('DESCRIPTION').AsWideString <> '' then
          FFieldsComments.Append(ADODataSet.FieldByName('TABLE_NAME').AsWideString + '.' +ADODataSet.FieldByName('COLUMN_NAME').AsWideString + '=' +ADODataSet.FieldByName('DESCRIPTION').AsWideString);
        ADODataSet.Next;
      end;
    finally
       FreeAndNil(ADODataSet)
    end;
  end;
end;



Всё делается методом OpenSchema.Самый мне непонятный параметр это второй. Туда передаю VarArrayOf(...), но я пока не нашел описания что есть что в этом масиве. Я просто подставил то что нашёл в инете и получил, что хотел. Может, если найду описание дополню статью. 
Процедуру UpdateFieldsComments вызываю в ADOConnection.OnAfterConnect.

Теперь в форме нужно обновить хинты.


procedure TfrmMain.UpdateHitnsFromDB;
var
  i: integer;
  procedure UpdateDBEditHint( AControl: TDBEdit);
  begin
    if AControl.DataSource.DataSet is TADOTable then
      AControl.Hint := dmMain.FieldsComments.Values[TADOTable(AControl.DataSource.DataSet).TableName + '.' + AControl.DataField];
  end;

  procedure UpdateDBLinkEditHint( AControl: TDBLinkEdit);
  begin
    if AControl.DataSource.DataSet is TADOTable then
      AControl.Hint := dmMain.FieldsComments.Values[TADOTable(AControl.DataSource.DataSet).TableName + '.' + AControl.DataField];
  end;

  procedure UpdateDBLookupComboBoxHint( AControl: TDBLookupComboBox);
  begin
    if AControl.DataSource.DataSet is TADOTable then
      AControl.Hint := dmMain.FieldsComments.Values[TADOTable(AControl.DataSource.DataSet).TableName + '.' + AControl.DataField];
  end;

begin
  for I := 0 to ComponentCount-1 do
    if Components[I] is TDBEdit then
      UpdateDBEditHint(Components[I] as TDBEdit)
    else if Components[I] is TDBLinkEdit then
       UpdateDBLinkEditHint(Components[I] as TDBLinkEdit)
    else if Components[I] is TDBLookupComboBox then
       UpdateDBLookupComboBoxHint(Components[I] as TDBLookupComboBox)
end;

UpdateHitnsFromDB вызываю в actConnectExecute
Вот и все.  


середа, 18 січня 2012 р.

Delphi и Диалог выбора папки

Сколько себя помню у Delphi никогда не было своего компонента выбора папки типа TOpenDialog и каждый раз когда нужно было выбирать именно папку искал как это делается.
Вот теперь решил записать то что я нашел и немного переделал для себя.
Это пока функция, возможно когда-то сделаю компонент типа TOpenFolder.

И так всё эавязано на функции ShBrowseForFolder из модуля ShlObj или по новому Winapi.ShlObj.
Но множество примеров, которые я видел были без кнопки Create New Folder и без возможности установки пути по умолчанию.
И так код:
...
function SelectFolder(hWnd: HWND; const Caption: WideString; var Folder: WideString): boolean;
...
implementation
uses  ShlObj, ActiveX, Forms;
var
  DefaultPath: widestring = '';
...
//Эта функция нужна для установки пути по умолчанию
function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam: LPARAM; lpData: LPARAM): integer; stdcall;
begin
  Result := 0;
  if uMsg = BFFM_INITIALIZED then
    SendMessage(hwnd, BFFM_SETSELECTION, 1, LongInt(PWideChar(DefaultPath)));
end;

function SelectFolder(hWnd: HWND; const Caption: WideString; var Folder: WideString): boolean;
var
  WindowList: Pointer;
  BrowseInfo : TBrowseInfo;
  Buffer: PChar;
  RootItemIDList, ItemIDList: PItemIDList;
  ShellMalloc: IMalloc;
  IDesktopFolder: IShellFolder;
  Eaten, Flags: LongWord;
begin
  FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);
  if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then
  begin
    Buffer := ShellMalloc.Alloc(MAX_PATH);
    try
      DefaultPath := Folder;
      RootItemIDList := nil;
      with BrowseInfo do
      begin
        hwndOwner := hWnd;
        pidlRoot := RootItemIDList;
        pszDisplayName := Buffer;
        lpfn := @BrowseCallbackProc;
        lpszTitle := PWideChar(Caption);
        ulFlags := BIF_RETURNONLYFSDIRS or $0040 or BIF_EDITBOX or BIF_STATUSTEXT;
      end;
      WindowList := DisableTaskWindows(0);
      try
        ItemIDList := ShBrowseForFolder(BrowseInfo);
      finally
        EnableTaskWindows(WindowList);
      end;
      Result :=  ItemIDList <> nil;
      if Result then
      begin
        ShGetPathFromIDList(ItemIDList, Buffer);
        ShellMalloc.Free(ItemIDList);
        Folder := Buffer
      end;
    finally
      ShellMalloc.Free(Buffer);
      DefaultPath := '';
    end;
  end;
end;



Теперь пример использования:
procedure TframeGeneralSettings.Button1Click(Sender: TObject);
var
  Value: WideString;
begin
  Value := edtImagesFolder.Text;
  if SelectFolder(Handle,  'Select ' + lblImagesFolder.Caption, Value) and (Value <> edtImagesFolder.Text) then
    edtImagesFolder.Text := Value;
end;




пʼятниця, 9 грудня 2011 р.

Delphi не загружает мои компоненты

Появилась необходимость написать свой компонет потомок TCustomLabel. Написал. Может в будущем сделаю заметочку, что и как писал

Так вот. Создал пакет, создал компонент и с дефотными настройками собрал и поставил. Стало без проблем. Заменил в основном проекте все лабелы на свои.

Всё работает отлично. Настроение хорошее...

Пока делфу не перегрузил. Тут оказалось, что оно не видит мой пакетик, мою бэпээлочку. Разбираюсь. Оказалось если не указать, куда ставить пакет, то  оно его ставит в 
С:\Documents and Settings\All Users\Documents\RAD Studio\5.0\Bpl\
С:\Documents and Settings\All Users\Documents\RAD Studio\5.0\Dcp\
И при загрузке от туда не поднимает. Т.к. я буду отдавать этот компонент людям, что бы они дальше с ним работали, то я не надаюсь, что каждый додумается добавить эти папки в пути поиска.

Полез в настройки делфы и подсмотрел как она обзывает папку с собой и  в настройках пакета прописал пути Output directory и DCP output directory



Теперь пакет ставится в 
С:\Program Files\CodeGear\RAD Studio\5.0\bin\
С:\Program Files\CodeGear\RAD Studio\5.0\lib\
Может я что-то сделал не канонично. Но по крайней мере работает.

вівторок, 29 листопада 2011 р.

Archlinux & VirtualBox перекомпиляция модуля ядра

На данный момент пользую на хосте ArchLinux, а для работы пользую виртуалки под VirtualBox. Но иногда обновляю систему на хосте и когда обновляется ядро, VirtualBox отказывается работать и проси пересобрать ядро такой командой
/etc/rc.d/vboxdrv setup
Она то и сбивала меня с толку. Дело в том, что в Арче не команды /etc/rc.d/vboxdrv. А так как это обнаруживалось во время рабочего дня - искать каноничных решений времени обычно небыло. Просто переставлял VirtualBox.

Но вот нашлось время более внимательнее посмотреть на проблему и вот что оказалось нужно было запускать
/etc/rc.d/rc.vboxdrv setup

пʼятниця, 21 жовтня 2011 р.

Samba 3.6.0: В windows не работают симлинки

Т.к. я в основном работю в сетях с машинами на которых стоит Windows, то часто бывает нужно дать кому-то что-то переписать.

Но все данные (аудио, видео, книги...) у меня лежат посортированные по папочкам (мечтаю сеть и до конца все посортировать :)). А открывать доступ на кучу папок не есть Ъ. Поэтому в линуксе я открываю одну папочку для людей, а туда кидаю симлинки на нужную мне информацию.

Получается что открывать ничего не надо. А что бы дать доступ нужно только проверить права на сам файл\папку (должны иметь право чтения для группы самбы или для всех) и кинуть туда симлинк.

Так вот. Давно никому ничего не надо было открывать. Система переставилась. Теперь у меня Archlinux. Обновился пару раз. И тут оказалось что из под винды нельзя ходить по симлинкам.

Погуглив нашел решение: в /etc/samba/smb.conf дописать

[global] 
follow symlinks = yes 
wide links = yes 
unix extensions = no

пʼятниця, 17 червня 2011 р.

Virtualbox, Could not load the Host USB Proxy Service (VERR_FILE_NOT_FOUND)

Could not load the Host USB Proxy Service (VERR_FILE_NOT_FOUND).The service might be not installed on the host computer.

Код ошибки: 0x80004005
Компонент: Host Интерфейс: IHost {81729c26-1aec-46f5-b7c0-cc7364738fdb} Вызванный объект: IMachine {0332de0e-ce75-461f-8c6f-0fa42616404a} 

Решение:
Добавить в /etc/fstab следующую строку
none /proc/bus/usb usbfs devgid=46,devmode=664 0 0 
И перемонтировать
mount -a 
Подробнее тут
Взято здесь

вівторок, 17 травня 2011 р.

KDE не выключает комп

Некоторое время назад мой KDE4 перестал выключать комп. Я ему выключить, а он вырубает графику и переходит в консоль. В конце концов надоело каждый раз заходить и писать sudo poweroff. Погуглив тему, увидел, что не только у меня такая проблема. И сразу выискалось решение
kdesu systemsettings -> Вход в систему -> Выключение -> Команды завершения работы, "Выключение:"
У меня там было
/sbin/shutdown -p now 
Я поменял на
/sbin/poweroff 
И всё заработало.
 

субота, 14 травня 2011 р.

Nepomukservises - пожиратель процессорного времени

Если у вас KDE4 и комп что-то тормозит гляньте список процессов. Возможно и у вас злобствует сабж.
Список процессов можно посмотреть в консоли командой top или в KDE4 по хоткею Ctrl+Esc 
Это оказалась поисковая система типа GoogleDesctop. Когда-то я сталкивался уже с этим поделием, но разобравшись с проблемой не записал её сюда. Поэтому пришлось искать решение ещё раз.
Пакета с именем Nepomuk в моём текущем дистрибутиве (Archlinux x64) не нашлось. Поэтому если не удалить, то, погуглив, нашёл хоть как отключить сабж.
Оказалось проще простого.
1. Открываем Параметры системы

2. Открываем поиск по меткам и содержимому

 3. Отключаем этот Nepomuk


Ну и убить уже запущенный процесс. Для этого нам нужно получить PID запущенного процесса. Его можно узнать в списке запущенных процессов (см. выше) а потом просто
kill -9 ПолученныйPID
-9 это убить без суда и следствия.

субота, 23 квітня 2011 р.

Nmap: Сканирование сети

Надо было выключить свой нотик, который остался в офисе за был за шлюзом. Помнил свой IP который получал серваком в офсисе, так что думал что проблем нет. Зашел на сервак через ssh. Но тут оказалось что именно в этот раз нотик я не подключал через eth, а через wlan. IP wlan я конечно не знал. Как найти свой нотик среди других компов? Оказалось очень просто:
nmap 192.168.1.1-255
И по списку открытых постов уже легко определил, свой нотик, т.к. я знаю что у меня там запущено и какие порты открыты.
nmap очень полезный инструмент. Стоит почитать про него подробнее. Возможно когда-то напишу более развернуто про него

понеділок, 4 квітня 2011 р.

Создание дерева каталогов

Периодически появляется потребность создавать дерево каталогов. Например нужно создать /tmp/dir1/subdir1/subdir2/subdir3. Обычно для этого я писал:

mkdir /tmp/dir1
mkdir /tmp/dir1/subdir1
mkdir /tmp/dir1/subdir1/subdir2
mkdir /tmp/dir1/subdir1/subdir2/subdir3

Немного покопавшись нашёл как это делать одной командой:

mkdir -p /tmp/dir1/subdir1/subdir2/subdir3

Так. Это была создана линейная структура каталогов, если её можно так назвать. А часто на практике нужна разветвлённая. У каждого программиста есть своя структура каталогов для проектов. И всякий раз создавать вручную каждый каталог не очень интересно. Например нужно создать следующую структуру каталогов:

Poject1
Poject1\bin
Poject1\bin\x64
Poject1\bin\x32
Poject1\lib
Poject1\src
Poject1\doc
Poject1\doc\html
Poject1\doc\pdf
Poject1\doc\man
Poject1\doc\info

В данном случае нам поможет таже команда mkdir. Это можно записать так:

mkdir -p Poject1/{bin/{x64,x32},lib,src,doc/{html,pdf,man,info}}

Разобраться с этой командой думаю не составит труда.

вівторок, 7 вересня 2010 р.

bash: Кто самый большой у нас в каталоге?

Проблема: пришло к концу место на разделе /home.
Задача: Найти замый жирный каталог

Решение:
du -m --max-depth=1 | sort -n

,где du - Disk Usage - утилита для определения занимаемого места файлом или каталогом.
параметры: 
-m выдавать информацию в мегабайтах, а то по умолчанию оно выдаем в понятном для человека виде - цифра и символ килобайт, мегабайт или гигабайт. Но так как сортировать будем не мы, а утилитка sort, то эти символы будут только мешать. В данном примере я указал в мегабайтах, т.к. размер раздела в гигабайтах, но можно указать и в килобайтах -k, и в байтах -b. В битах почемуто не хочет показывать :)
--max-depth=1  показывать файлы и каталоги только текущего уровня, не выдавая нагора все их внутренности

| перенаправляет результат работы du команде sort

sort сортирует данные полученные от du по первой колонке по убыванию по умолчанию.
параметры: 
-n указываем, что воспринимать первую колонку как цифры, а не как строки

Вот и все. Остальные параметры смотрите в манах

понеділок, 6 вересня 2010 р.

Установка и настройка Subversion на базе ALTLinux 5.1

Недавно была мной мне поставлена задача установить и настроить такую систему контроля версий как Subversion. Оказалось что всё не так очевидно и сразу поднимаемо. Вот и решил сделать заметочку на память.

Итак есть машина под ALTLinux 5.1. На ней и будем экспериментировать.

Установка и настройка сервера.

Первым делом скачиваем и устанавливаем сам сервер subversion.
В линуксе это легко и просто сделать через утилиту synaptic или в консоли с помощью apt-get
apt-get install subversion-server-common subversion-server-standalone

эти пакеты я доставил, т.к. кое-какие уже были установлены с разными IDE.
Все репозитарии должны находиться в папке /var/lib/subversion или хотя бы линк туда кинуть надо.
У меня раздел для хранения файлов находится в home. Поэтому под рутом создаем каталог для всех репозитариев SVNa.
mkdir /home/svn 

Создаём сам репозитарий с причудливым именем test02
svnadmin create /home/svn/test02

Эта комманда создаст всю структуру репозитария с базой, конфигами и прочей необходимой всячиной. Сделаем первое вливание. Како-нить файлик
svn import /var/www/apache2/html/ file:///home/cvsroot/ -m "initial import"

Теперь настроим сам репозитарий. Для этого нам нужен каталог /home/svn/test02/conf. В нем содержаться 3 файла
svnserve.conf - общие настройки репозитария
passwd   - пользователи репозиратия 
authz  - тут назначение доступа к каталогам в самом репозитарии

ВНИМАНИЕ! Все параметры в этих файлах не должны начинаться с пробелов. А то когда я просто раскоментировал то, что мне нужно, оно не заработало - ругалось на стороне клиента, что в такой-то строке svnserve.conf нехватает чего-то.

svnserve.conf 
Тут все настройки уже есть, их нужно только раскоментировать и по необходимости изменить. Нас интересует только секция general. В конце концов приведите ее к виду:
[general]
# Запрещаем доступ анонимным пользователям
anon-access = none
#Авторизированным разрешаем запись
auth-access = write

#Здесь указываем где хранится список пользователей и паролей. passwd - это имя файла
password-db = passwd

#Если вам нужно разделить доступ к каталогам внутри репозитария для пользователей, то нам нужна следующая опция. authz  - это имя файла.
authz-db = authz


#Здесь задаем имя репозитария. Это и будет идентификатором репозитария.
realm = test02

Не разкоментируйте authz-db = authz, если не собираетесь сразу менять назначать права на определённые каталоги разным пользователям в файле authz.  А то получаеться указали читать права из файла  authz, а в нем все ничего не назначено. Результат - Access denied для всех, даром, и пусть никто не уйдёт обиженным!

passwd
Тут определяем пользователей и пароли к ним. Пароли хранятся тут в открытом виде, но при грамотном администрировании это не проблема. Итак секция users.
[users]
boss = b0sP@ssw0rD
user01 = useR01P@ssw0rD
user02 = userR2P@ssw0rD


authz
Если вам нужно разделить права доступа к разным каталогам внутри репозитария, то поправьте этот файл. Зачем это нужно? Ну например, есть группа программстов они имеют право писать в девелопмент ветку, а релиз имеют право только читать. В нее иммеет право вносить изменения только бос. Ну и может быть, если это комерческая разработка, то наверняка тут будет еще и чать репозитария, к исходникам которой, никто не должен иметь доступа, кроме боса. Ну вот примерно так.
[groups]
# В этой секции определяем группы пользователей
developers = user01,user02
admins = bos

[test02:/]
# Название этой секции означает корень репозитария test02.
# В ней мы указываем, что все пользователи имеют достутп на чтение в корне. 
# Без этого у меня не давало доступа вообще ни к чему.
* = r

[test02:/branch]
# На папочку branch даем доступ на чтение и запись разработчикам и админам.
@developers = rw
@admins = rw

[test02:/trunk]
# На папочку trunk даем доступ на чтение разработчикам на запись админам.
@developers = r
@admins = rw

[test02:/secret]
# На папочку secret даем доступ на чтение только user01, на запись только bos. А все остальные не имеют права просматривать эту папку.
bos = rw
user01 = r
* =


Так как мы все эти действия делали от пользователя root, то и все правана папку /home/svn/test02 имеет только он. А репозитарий работает от пользователя subversion. Если вы ставили Subversion альтовый, то у вас уже есть  этот пользоватетль. Просто установите его владельцем папки /home/svn и всего её содержимого и дать права чтение/записть только ему, а всем остальным убрать даже чтение.(Вспомните незашифрованные пароли в /home/svn/test02/conf/passwd)
chown -R subversion /home/svn
chmod u=rwX  /home/svn
chmod oa-rwX  /home/svn

Теперь нужно запустить сервер subversion. В ALTLinux это делается простой коммандой
service svnserve start

И укажите ему стартовать при запуске системы
chkconfig svnserve on

Вроде всё. Если что забыл пишите.

субота, 28 серпня 2010 р.

Обустройство FireFox: Смена поисковика по умолчанию

Я как-то привык использовать Google поисковиком по умолчанию. А вот с некоторого времени Firefox пошла мода у всяких посисковых систем ставить себя по умолчанию. Это меня раздражало очень сильно. И наконец вот достало. Добрые люди подсказали как исправить ситуацию.

Шаг 1.Запускаем ФФ и в адресной строке пишем about:config
Жмем ентер и соглашаемся с тем, что если мы что-то поломаем, то это наши проблемы.

Шаг 2. Ищем ключ keyword.URL. Он содержит запрос к поисковому серверу
Шаг 3. Кликаем на нем и в открывшемся диалоговом окне заменяем строку поискового заспроса. См. в таблице 1
шаг 4. Жмем Ок и наслаждаемся


Таблица 1. Поисковые запросы
Googlehttp://www.google.com.ua/search?q=
Yandexhttp://yandex.ru/yandsearch?stype=first&clid=46511&text=
Mail.ruhttp://go.mail.ru/search?utf8in=1&fr=fftbUFix&q=

Все это выглядит так
Вот и всё.