Diff: [root] @ 58d70b53b20 | faq | css

Merge branch 'master' of bitcheese.net:/var/gits/bwiki

Merged: <a href="/diff/9ffd7e105a2f26a86b6becad0e06c25adaa2437f">9ffd7e105a2f26a86b6becad0e06c25adaa2437f</a> <a href="/diff/dc391f8c6c82ca9cd546dd6dcd61d00591beb19e">dc391f8c6c82ca9cd546dd6dcd61d00591beb19e</a>

File: QMPDClient/index [Diff]

diff --git a/QMPDClient/index b/QMPDClient/index
index b2f2965..9cf342f 100644
-- a/QMPDClient/index
++ b/QMPDClient/index
@@ -23,7 +23,7 @@ h2. Links

* Bleeding edge from git: "tarball":http://git.bitcheese.net/?a=archive&p=qmpdclient&h=HEAD&t=targz
* Latest version (1.1.2): "tarball":http://dump.bitcheese.net/files/dedycec/qmpdclient-1.1.2.tar.bz2 , "deb":http://dump.bitcheese.net/files/wadawut/qmpdclient_1.1.2-1_i386.deb
* 1.1.0-33-ge62ba15 "binaries":http://dump.bitcheese.net/files/QMPDClient.zip 1.1.2 "binaries":http://dump.bitcheese.net/files/QMPDClient1.1.2.zip for windows made by "Martin Roths":http://martin.dieroths.at/ Martin Roths
* Legacy version with qt < 4.4 support (1.0.12): "tarball":http://dump.bitcheese.net/files/jojanos/qmpdclient-1.0.12.tar.bz2
* "Mailing list":http://groups.google.com/group/qmpdclient, "announcements":http://groups.google.com/group/qmpdclient-announce.
* -Bugtracker at Assembla- Closed due to Ass-embla's inability to handle spam. Please report bugs to mailing list (see above) for now.

File: code/hjpath [Diff]

diff --git a/code/hjpath b/code/hjpath
index edd24c5..0b413e9 100644
-- a/code/hjpath
++ b/code/hjpath
@@ -1,6 +1,6 @@
h1. hjpath

Hjpath is Haskell library for XPath-like queries on JSON code. It's based on "RJson":http://hackage.haskell.org/package/RJson "hjson":http://hackage.haskell.org/package/hjson library.

Currently supported features:

File: git-sucks [Diff]

diff --git a/git-sucks b/git-sucks
index b54a966..8f5008c 100644
-- a/git-sucks
++ b/git-sucks
@@ -1,4 +1,4 @@
*This article about git is a stub. You can help -Wikipe- Bitcheese.net project by expanding it.__ it.*

h1. Git Sucks

@@ -24,18 +24,6 @@ h3. No unicode support

Do you know how to work with non-ASCII characters in filenames in git repo? I don't.

h1. Git Rocks

* where git rocks

h2. Working with branches


h2. Prefomance

"Benchmarks say":http://git.or.cz/gitwiki/GitBenchmarks what git is faster than another VCS on some operations. Well, it may be important if... Hm, I don't know.

h2. Git vs CVS vs SVN vs Mercurial vs Bazaar

And don't think what CVS, SVN, mercurial or bazaar is better than git. It's not truth, these version control systems are much worse. You can read about it below.
@@ -46,5 +34,5 @@ h1. Links
* "Video about camp":http://projects.haskell.org/camp/unique — "This video explains all!"
* "Darcs's patch theory on official manual":http://darcs.net/manual/node9.html
* "Darcs's patch theory on wikibooks":http://en.wikibooks.org/wiki/Understanding_darcs/Patch_theory — there are more images here
* "Bazaar vs Git":http://bazaar-vcs.org/BzrVsGit — humoristic humorous work by ubuntu creators.
* "Cutting Edge Revision Control":http://bryan-murdock.blogspot.com/2007/03/cutting-edge-revision-control.html — there is small benchmark here too

File created: 33188 hellnet/feedback [Diff]

diff --git a/hellnet/feedback b/hellnet/feedback
new file mode 100644
index 0000000..ff663ee
-- /dev/null
++ b/hellnet/feedback
@@ -0,0 +1,3 @@
h1. Hellnet feedback

Hellnet "mailing list":mailto:hellnet@googlegroups.com ("web":http://groups.google.com/group/hellnet)
\ No newline at end of file

File created: 33188 hellnet/hellage/admin [Diff]

diff --git a/hellnet/hellage/admin b/hellnet/hellage/admin
new file mode 100644
index 0000000..e11a3b0
-- /dev/null
++ b/hellnet/hellage/admin
@@ -0,0 +1,13 @@
h1. How to run your own Hellage index

First, see [[use]] for installing Hellage.

Then, see [[/hellnet/hspawn/use#metatrees]] for information how to create your own meta key.

Last, run

bc. $ hellage-genmeta mykey hackage

Where @mykey@ is your key alias and @hackage@ is your meta name.

This will download index and packages from [http://hackage.haskell.org] and store links in your meta. If download of certain package is stalled for too long, feel free to interrupt the program; next time it will start where it ended, only need to re-download index.
\ No newline at end of file

File created: 33188 hellnet/hellage/index [Diff]

diff --git a/hellnet/hellage/index b/hellnet/hellage/index
new file mode 100644
index 0000000..b9d81bc
-- /dev/null
++ b/hellnet/hellage/index
@@ -0,0 +1,4 @@
use - How to use it
admin - How to run your own mirror

Hellage is a distributed "Hackage":http://hackage.haskell.org/ haskell packages' repository mirror.
\ No newline at end of file

File created: 33188 hellnet/hellage/use [Diff]

diff --git a/hellnet/hellage/use b/hellnet/hellage/use
new file mode 100644
index 0000000..667ce2b
-- /dev/null
++ b/hellnet/hellage/use
@@ -0,0 +1,72 @@
h1. How to use Hellage

h2. Install

This may be insanely difficult. Or not.

If you can't build from source, get the [[../hspawn/jumpstart]] package.

h3. Otherwise

First, "install Hellnet":/hellnet/hspawn/build. If you manage it, the rest is simple:

bc. $ cabal install hellage

or, @git clone git://git.bitcheese.net/hellage && cd hellage && runghc Setup.hs install@ and have fun.

h2. Actually use it

First, you need to add at least one Hellnet node to your nodelist. You can use bitcheese.net:6666 for now.

bc. $ hell-nodes handshake bitcheese.net 6666

Then you need to run hellage daemon on your machine:

bc. $ hellage 8da7ec91e46c4b1444bd1b1a151a038a0544fad23266111a8a84178efb9499cb756a265bbe456bd9ec9ba309bf146f8453ba17201ff968e181e36b5efe54fc1f hackage

Here, *8da7ec...* is my encryption key ID and *hackage* is meta name of hellage. If you plan to use this (or any other) key often, you can create an alias:

bc. $ hell-meta alias add voker57_key 8da7ec91e46c4b1444bd1b1a151a038a0544fad23266111a8a84178efb9499cb756a265bbe456bd9ec9ba309bf146f8453ba17201ff968e181e36b5efe54fc1f

and then refer to this key as "voker57" everywhere:

bc. $ hellage voker57_key hackage

This command will run hellage on its default port, which is 6609. If you want to change it, run hellage with -p 64657.

*WARNING WARNING*: Currently hellage does not bind to localhost, thus anybody with access to port can use it. Use firewalls or whatever to protect.

Now, let's add hellage to cabal's sources:

bc. $ editor ~/.cabal/config

Search out the @remote-repo:@, comment it out and add hellage:

bc. -- remote-repo: hackage.haskell.org:http://hackage.haskell.org/packages/archive
remote-repo: hellage:http://localhost:6609

Update the hellage index:

bc. $ wget http://localhost:6609/update -O- 2>/dev/null

If result is "Failed" then something went wrong and hellage won't work. Check node connectivity.

Then, run @cabal update@ to get package index:

bc. $ cabal update

If everything was OK, then you can download packages now:

bc. $ cabal install empty

Congratulations! You got hellage up and running.

h2. Tricks

* If you don't like to keep a terminal emulator constantly running, i suggest using "daemontools":http://packages.debian.org/sid/daemontools or "dtach":http://dtach.sourceforge.net/ or "screen":http://www.gnu.org/software/screen/ for daemonizing hellage.
* You can update hellage via hellage!

h2. Troubleshooting / Feedback

If you succeeded, or failed, in installing hellage by this manual, share your experience in "hellnet mailing list":http://groups.google.com/group/hellnet.
\ No newline at end of file

File: hellnet/hspawn/build [Diff]

diff --git a/hellnet/hspawn/build b/hellnet/hspawn/build
index e510dd9..9cdb1c4 100644
-- a/hellnet/hspawn/build
++ b/hellnet/hspawn/build
@@ -2,11 +2,11 @@ h1. Building hspawn from source

Warning: this requires lot of magic

h2. Downloading Manually

Get the latest source from git: @git clone git://git.bitcheese.net/Hellnet@

Requirements are: "GHC":http://haskell.org/ghc 6.10 6.12 (didn't check with other compilers), "Cabal":http://haskell.org/cabal (you will have to install them manually, as described "here":http://book.realworldhaskell.org/read/installing-ghc-and-haskell-libraries.html) HTTP, Lucu, Crypto (these are Cabal packages, you can install them with @cabal install name@)

Once you have all those installed, Hellnet can be built with

@@ -18,4 +18,16 @@ On first stage, Cabal may complain about missing dependencies, you'll have to in

Alternatively, if you don't want to mess with Cabal, you can just run 'make', it will compile all the executables in current folder. They are static and can be safely moved.

h2. Via cabal

Hellnet is available on Hackage. To install it, you'll need working Cabal setup (see above). Then

bc. $ cabal install hellnet

And pray, since not all packages on hackage are ready for GHC 6.12 and you may have to patch them.

h2. Jumpstart

Last resort: download [[jumpstart]] package, extract & launch.

Now, to the next step, [[use]].
\ No newline at end of file

File created: 33188 hellnet/hspawn/jumpstart [Diff]

diff --git a/hellnet/hspawn/jumpstart b/hellnet/hspawn/jumpstart
new file mode 100644
index 0000000..ee56ab1
-- /dev/null
++ b/hellnet/hspawn/jumpstart
@@ -0,0 +1,7 @@
h1. Hellnet jumpstart package

If you can't build hellnet from hackage, this package is probably for you.

This archive contains all required Hellnet && Hellage linux-x86 executables, built statically. They may require openssl, libffi and whatever your system will notify you on launch.

"0.1-1-gdd80491":http://dump.bitcheese.net/files/hellnet-bin.tar.bz2 12 MB
\ No newline at end of file

File created: 33188 hellnet/hspawn/serve [Diff]

diff --git a/hellnet/hspawn/serve b/hellnet/hspawn/serve
new file mode 100644
index 0000000..a051d04
-- /dev/null
++ b/hellnet/hspawn/serve
@@ -0,0 +1,24 @@
h1. Running your own Hellnet node

First: You will not be serving unrelated content, only stuff you downloaded.

h2. Why?

* That is the only way to publish your own metatrees for now
* You help the network

h2. How?

[[build|Install hellnet]].

bc. $ hell-serve 6666

6666 is server port, which should be open to Internet. This will launch Hellnet server.


bc. $ hell-nodes handshake bitcheese.net 6666

If response is "Handshake successful", all is good. Server have added you to its nodelist and will announce your address to everybody, who in turn will be able to download your chunks and metatrees.

Otherwise, read the message and fix the error.
\ No newline at end of file

File: hellnet/hspawn/use [Diff]

diff --git a/hellnet/hspawn/use b/hellnet/hspawn/use
index e4d52a1..e51a38b 100644
-- a/hellnet/hspawn/use
++ b/hellnet/hspawn/use
@@ -51,7 +51,7 @@ bc. % hell-get "hell://file/04e69a4c0cf881dfe487cb76551e0cbfabde629453765dd647f2

And after short wait read the text of GPL.


h2(#metatrees). Meta trees

[[/hellnet/tech/metatrees|Meta trees]] are tool to publish named information to Hellnet and keep it updated. Authenticity of information is guaranteed via digital signatures.

File: hellnet/index [Diff]

diff --git a/hellnet/index b/hellnet/index
index 950ba43..9b067e3 100644
-- a/hellnet/index
++ b/hellnet/index
@@ -1,3 +1,13 @@
tech - descriptions of technologies used in Hellnet
hspawn - documentation related to Haskell implementation
protocols - protocols' documentation
crypto - cryptographic stuff used in Hellnet
hellage - distributed hackage mirror using Hellnet
philosophy - about the project, its goals and idea
feedback - how to provide feedback & get help on Hellnet

Hellnet is a project to create simple, distributed, anonymous data sharing network.

You can see current state of matters on [[status]] page.

Current use cases: [[hellage]], [[general file sharing & setup|hspawn/use]]

File created: 33188 hellnet/philosophy [Diff]

diff --git a/hellnet/philosophy b/hellnet/philosophy
new file mode 100644
index 0000000..63bace5
-- /dev/null
++ b/hellnet/philosophy
@@ -0,0 +1,9 @@
h1. Hellnet philosophy

Hellnet is simple. It tries to rely on already existing things.

Hellnet is not for playing hide-and-seek with law enforcement. It's for simple, reliable distribution of legal content. No esprit de corps: you store only what you like to store, no other people's CP on your hard drive.

_...or is it me too lazy to write code for sophisticated routing and shared storage?_

Hellnet is named so because I like this name.
\ No newline at end of file

File: hellnet/protocols/http/index [Diff]

diff --git a/hellnet/protocols/http/index b/hellnet/protocols/http/index
index b8d5f22..0e444c4 100644
-- a/hellnet/protocols/http/index
++ b/hellnet/protocols/http/index
@@ -6,6 +6,6 @@ h2. Query types

|_. Query |_. Path |_. Static/dynamic |_. Description |
| GET | @/chunks/([0-9a-f]+)@ | static | [[/hellnet/tech/chunk|Chunk]] with hash $1 |
| GET | @/meta/([0-9a-f]+)/([^/]+){,\.key,\.sign}@ @^hell://meta/([0-9a-f]{64})/([^/]+)/(.*)(/.*)$@ | static | [[../tech/metatrees|Metatree]] of key $1 and name $2, and its signature & date $2 |
| GET, HEAD | @/hello@ | static | Check whether node is up |
| POST | @/handshake@ | dynamic | Establish a link to node |
\ No newline at end of file

File: start [Diff]

diff --git a/start b/start
index 40bf724..d72d5d4 100644
-- a/start
++ b/start
@@ -1,6 +1,6 @@
h1=. Welcome to BitCheese.net

p=. !http://dump.bitcheese.net/files/rykejup/sketch-touchdown-small.png!:http://dump.bitcheese.net/files/xaxagoh/sketch-touchdown.png !http://dump.bitcheese.net/files/ginidyf/bart.png!:http://markmail.org/message/zdxh4doot7fe53ff

h1=. Places of interest

File created: 33188 wtd/slax [Diff]

diff --git a/wtd/slax b/wtd/slax
new file mode 100644
index 0000000..3688288
-- /dev/null
++ b/wtd/slax
@@ -0,0 +1,287 @@
h1. Доводим live-usb до ума

p. Статья спасена из "блога на вордпрессе":http://apsheronets.wordpress.com/tag/slax/.

h2. Часть 1: Почему SLAX?

Моей задачей было создание портативной домашней системы. Я не хотел делать никакой служебный дистрибутив или что-то в этом роде. Для восстановления системы у меня есть SystemRescueCD, для проверки сетей — замечательный BackTrack, поэтому мне такое не нужно. Мне хотелось сделать так. чтобы на чужом компьютере всё было как дома.

За время моего использования GNU/Linux я совсем отвык от windows-интерфейса. Теперь я переключаю раскладку клавишей CapsLock, использую compose key, настраиваю систему через консоль, держу SSH на сервере, набираю код в VIM'е, управляю программами при помощи мышиных жестов, шифрую переписку, пользуюсь Jabber'ом... Мелочи, но их много.

И чтобы можно было как-то работать на чужих машинах, я хотел сделать портативную систему, имитирующую мою домашнюю. Поставить её на флешку и таскать с собой повсюду. Ну не засунешь же ноутбук в карман?

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

* маленький, простой, лёгкий и быстрый;
* изначально создавался как live-дистрибутив и прекрасно выполняет эту роль;
* придерживается "принципа KISS":http://en.wikipedia.org/wiki/KISS_principle;
* имеет немалочисленное сообщество;
* построен на основе замечательной системы модулей, отдельно сохраняет изменения в файловой системе;
* может быть установлен на файловую систему FAT;
* поставляется со средой KDE, моей любимой.

h2. Часть 2: Как работает?

Чтобы всем было непонятно, я расскажу, откуда в слаксе файлы берутся.

В директории @slax/base/@ лежат LZM-модули, из которых вылупляется базовая система. Сам модуль напоминает пакет, только с одним отличием — он никогда не распаковывается на физический носитель, а просто подключается к файловой системе. И не нужно никаких процедур установок или удалений: модуль либо подключён, либо нет. Для подключения стороннего модуля к системе достаточно набрать @activate "имя_модуля"@ или положить его в директорию @slax/modules/@, откуда он сам подключится после запуска системы.

А как быть с данными, которые накапливаются в процессе работы? Они все складываются в директорию @slax/changes/@ на флеш-носителе. Например, если вы набрали документ и сохранили его по адресу @/home/user/document.odf@, то физически система положит его в @slax/changes/home/user/document.odf@. При следующем запуске так же загрузится базовая система из модулей, директория @slax/changes/@ подключится к корню и всё станет так, как было за сеанс предыдущей работы.

Следует отметить, что многие конфигурационные файлы (директория @/etc@) создаются live-скриптами каждый раз заново, поэтому бесполезно, например, редактировать @/etc/X11/xorg.conf@ по своему вскусу — он всё равно будет стёрт после перезагрузки.

Но самое интересное — это возможность оверлея. В @slax/changes/@ хранятся не только данные о пользовательских файлах, но и данные об изменении уже существующих файлов из модулей! Допустим, мы хотим заменить утилиту @ls@ своей версией, более продвинутой, с возможностью грабить караваны. Для этого нам нужно просто переместить её в директорию @/bin/@, заменив оригинальный файл. Разумеется, изменения вступят в силу немедленно: набрав @ls@ в консоли, мы получим "продвинутую" версию. Тем временем на физический носитель запишется файл @slax/changes/bin/ls@, который после перезагрузки "перекроет" оригинальную версию из модуля. С оригинальной же версией ничего не происходит. То есть модули доступны только для чтения, но есть возможность изменения файлов, находящихся в них.

Таким образом, если новая версия @ls@ окажется нестабильной, всё, что нам нужно для восстановления былой работоспособности — это удаление @slax/changes/bin/ls@. Так как система не найдёт утилиту @ls@ в папке @slax/changes/@, она пойдёт за ней в модуль, где утилита оставалась без изменений всё это время. Как вы уже могли догадаться, "поломать" оригинальные системные файлы становится невозможно, а для ремонта нам всего лишь нужно почистить @slax/changes/@. Чего хочешь, то и твори.

Кстати, есть возможность не только изменять файлы из базовой системы, но и «удалять» их. Попробуйте разобраться, как это работатет.

Также сводится до банальности процесс обновления системы. Старые файлы просто заменяются файлами нового релиза, а @slax/modules/@ и @slax/changes/@ остаются нетронутыми. Поэтому все изменения за время жизни системы сохраняются, и никаких вам пакетных менеджеров и конфликтов.

h2. Часть 3: Установка

Ставим на flash-носитель. Раздел на нашей флешке можно сформатировать в любую файловую систему — хоть в FAT, хоть в Ext2, хоть в ReiserFS. Везде заработает. Никаких своп-разделов не нужно: если таковые имеются на жёстком диске, они будут подключены при загрузке системы.

p(. Несмотря на то, что SLAX, используя хитрые костыли, нормально работает в FAT'е, я НЕ рекомендую устанавливать систему на FAT-раздел. Просто потому, что в этом случае:

*( возможны потери сохранённых данных в случае некорректного завершения работы;
* права на файлы и папки, символические ссылки, а так же регистр символов в именах файлов и папок будут сохраняться необычным способом;
* вы закалебаетесь чистить флешку от вирусов с Windows-машин.

p(. Кстати, я установил SLAX именно на FAT, и мне приходится терпеть все эти неудобства.

Итак, скачиваем последнюю версию дистрибутива в формате tar с "ftp://slax.org/":ftp://slax.org/. Ещё лучше "стянуть с торрента":http://linuxtracker.org/index.php?page=torrents&amp;search=&amp;category=24&amp;active=0. Когда скачали — монтируем раздел на флешке в какую-либо директорию. У меня это @/mnt/flash@:

bc. # mount /dev/sda1 /mnt/flash

Распаковываем скачанный архив в эту папку:

bc. # tar xvf slax-*.tar -C /mnt/flash

Затем делаем этот раздел загрузочным. Для этого переходим в каталог @boot/@ на нашей флешке и запускам скрипт @bootinst.sh@:

bc. # cd /mnt/flash/boot
# sh bootinst.sh

Всё. Можно перезагрузиться, настроить в BIOS'е загрузку с USB-Flash и пользоваться портативной системой.

h3. Локализация

Вообще-то на официальном FTP-сервере есть всё необходимое для русификации. Но так как идущую по умолчанию локаль iso88595 мы в гробу видели, нам придётся идти другим путём.

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

Схема русификации несложная. Скачиваем два файла — модуль с локалями и загрузочный образ:


Образ @initrd.gz@ поместите в директорию @boot/@, модуль @russian-utf8-6.0.7-i486-2.lzm@ — в @slax/modules/@. После перезапуска у вас будет полностью русифицированная система.

И не забудьте переключить кодировку в Konsole. Выбор кодировки — в меню.

h3. Языки ввода

Пожалуйста, не надо ничего ковырять в @xorg.conf@. Он всё равно будет стёрт live-скриптами после перезагрузки. Прочитайте лучше "моё руководство по переключению раскладок клавиатуры в KDE":http://apsheronets.wordpress.com/2008/05/05/kde-keyboard-layout/.

h2. Часть 4: Синхронизация

Очень удобно работать за чужим компьютером, если на нём есть копии своих данных. Если речь не идёт об их утечке, разумеется. А когда к любому компьютеру можно подцепить флешку, загрузить SLAX и работать свою работу как ни в чём не бывало, а потом ещё и перенести через ту же флешку наработанную работу к себе домой — то это вообще отпад. Как можно догадаться, для этого нужно регулярно синхронизировать данные между флеш-носителем и своим родным десктопом. О некоторых тонкостях этого дела я сейчас расскажу.

Для начала нужно решить, что мы будем синхронизировать. Это могут быть:

* программы;
* их настройки;
* создаваемые нами самими данные.

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

С настройками вроде бы всё понятно: если я отключил функцию варки кофя в emacs, то я хочу видеть эту функцию отключённой и на своей портативной системе! Синхронизируя конфигурационные файлы между системами, у меня будут одинаковые настройки и одинаковое поведение программ на обеих системах. Но и тут не всё ладно. Бестолково, например, синхронизировать файлы из каталога @/etc@, часть которых всё равно перезаписывается при каждом старте SLAX'а.

Также следует понимать, что на не все настройки мы хотим видеть одинаковыми. Запись логов в IRC-клиенте — очень полезная вещь на десктопе, но писать их на флеш-носитель неразумно: он имеет ограниченное количество циклов перезаписи и от такой эксплуатации накроется быстрее обычного. Ярлычки на панельке могут радовать глаза, но на портативной системе, где не окажется запускаемых ими программ, они окажутся совершенно бесполезными.

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

Копия наших рабочих данных на SLAX'е позволяет нам за любым компьютером скоротать время, занимаясь любимой работой. Пописать, покодить.

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


p. Тут просто помните об одном побочном эффекте. Наша флешка — не только переносная система, но и место для бекапа. Очень удобное и быстрое. Так что чем ценнее данные, тем нужнее они в списке на синхронизацию.

p(. Только не забывайте, что вашу флешку — и все данные на ней — могут украсть. Шифрования мы пока ещё не прикрутили.

Главным инструментом для синхронизации будет Unison.

p(. "Unison":http://ru.wikipedia.org/wiki/Unison — утилита для синхронизации файлов, написанная на языке OCaml. Она позволяет синхронизировать две копии файлов, на локальном компьютере или на двух разных хостах, обновляя каждую копию в зависимости от произведённых изменений.

*( Unison работает под Unix-подобными операционными системами и под Windows. Он также может работать с разными платформами одновременно, например, синхронизируя файлы между Windows-ноутбуком и Unix-сервером.
* В отличие от простых утилит для создания зеркал и бекапов, Unison умеет работать с изменениями в обеих копиях файлов. Неконфликтующие изменения могут вноситься автоматически, конфликтующие определяются и отображаются для ручного разрешения.
* Unison — не распределённая файловая система, а потому может работать без дополнительных модулей в ядре и прав суперпользователя.
* Unison работает между любыми компьютерами, соединёнными между собой глобальной или локальной сетью, через сокет или зашифрованное соединение. Он аккуратно относится к ширине канала и прекрасно работает даже на медленных PPP-соединениях. Передача небольших изменений больших файлов оптимизируется протоколом, похожим на rsync.
* Unison устойчив к сбоям, позволяет восстановить копии файлов после обрыва связи или некорретного завершения работы.
* Unison имеет чистую, точную спецификацию, а исходный код Unison'а доступен по лицензии GPL.

Unison нам понадобиться главным образом на нашем десктопе, так что установите его с помощью своего любимого пакетного менеджера. Иногда он будет нужным и на флешке, поэтому скачайте "мой lzm-модуль юнисона":http://komar.bitcheese.net/lzms/ и поместите его в @slax/modules@.

p(. Для любителей графических интерфейсов я специально не собрал GUI-версию unison'а — чтобы не выкабенивались и сами почувствовали удобство консольной версии.

Сначала надо научиться работать с этой штукой. Создайте где-нибудь две директории и напихайте в одну и в другую разных файлов. Затем наберите в командной строке unison и смотрите на вывод.


Нам будут показаны два столбика — для первой и для второй папки, справа от них — синхронизируемый файл, а так же срелки между двумя директориями. Где начало стрелки — папка, в которой было произведено изменение, а где конец — где его не было и куда нужно эти изменения внести. То есть файл как бы переносится из начала стрелки в конец. Если такая стрелка есть — значит, файл не конфликтует, и, если вы этого хотите, unison сделает действие по умолчанию. Для этого нужно нажать F. Если с действием по умолчанию вы по какой-то причине не согласны — нажмите на @<@ или @>@, «поворачивая» стрелку в ту сторону, в которую вам нравится. Если вы не хотите ничего делать с этим файлом — поставьте @/@ (слеш), и файл просто пропустится.

p(. Ещё один немаловажный момент. Перед первым боевым запуском синхронизируйте и часовые пояса на обеих системах. Проще всего это сделать кликнув правой кнопкой по «часикам» в KDE. При определённых обстоятельствах это может привести к тому, что даты изменения файлов будут различаться на несколько часов.

Подробнее о юнисоне "написано в документации на официальном сайте":http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html. Прочитайте, там всё не так страшно, как кажется. Здесь я лишь покажу, как получилось у меня.

p(. Кстати, можно избавиться от многих проблем, связанных с различием логинов, сделав на SLAX'е символическую ссылку в @/home@ на директорию @/root@. Например, @/home/user → /root@

Я сделал файл @~/.unison/slax.prf@ следующего содержания:

bc.. #
# Paths for synchronization

# Unison :)
path = .unison/slax.prf

# Vim
path = .vimrc

# Bash
path = .bashrc

# KWallet
path = .kde/share/apps/kwallet/
path = .kde/share/config/kwalletrc

path = .ssh/

# Kontact
path = .kde/share/config/kontactrc
path = .kde/share/config/kontact_summaryrc
path = .kde/share/apps/korganizer/
path = .kde/share/config/kaddressbookrc
path = .kde/share/apps/kabc/
path = .kde/share/apps/kontactsummary
path = .kde/share/config/kcmkmailsummaryrc
path = .kde/share/config/kcmkorgsummaryrc
path = .kde/share/config/kcmsdsummaryrc

# My signature for emails
path = .signature

# Basket
path = .kde/share/apps/basket
path = .kde/share/config/basketrc

# Konversation
path = .kde/share/apps/konversation
#path = .kde/share/config/konversationrc # Because log settings

# Konqueror
path = .kde/share/config/konquerorrc
path = .kde/share/apps/konqueror/bookmarks.xml
path = .kde/share/apps/konqueror/konqueror.rc
path = .kde/share/apps/konqueror/profiles/
path = .kde/share/apps/kcookiejar/cookies # Konqueror's cookies
path = .kde/share/config/khtmlrc # Konqueror's AdBlock

# Kopete
path = .kde/share/apps/kopete_cryptography
#path = .kde/share/apps/kopete_history
path = .kde/share/apps/kopete
#path = .kde/share/apps/kopete_statistics
path = .kde/share/config/kopeterc

# Konsole
path = .kde/share/config/konsolerc
path = .kde/share/config/konsolepartrc
path = .kde/share/apps/konsole/

# Yakuake
path = .kde/share/config/yakuakerc
path = .kde/share/apps/yakuake # always empty?

# KDE hotkeys
path = .kde/share/config/khotkeysrc

# KWin rules
path = .kde/share/config/kwinrulesrc

# Developers! Developers! Developers!
path = devel/

# Ignore paths

# Ignore sockets
ignore = Name *socket*

# Ignore cache
ignore = Path .kde/cache-*
ignore = Path .kde/share/apps/konqueror/faviconrc

# Kopete cache too
ignore = Path .kde/share/apps/kopete/jabber-capabilities-cache.xml
ignore = Path .kde/share/apps/kopete/jabberphotos
ignore = Path .kde/share/apps/kopete/oscarpictures

# Ignore temporary files
ignore = Name lock
ignore = Name *random_seed*
ignore = Name *.new
ignore = Name std.vcf__*

# Ignore SLAX specific files
ignore = Name .pxovl*

p. И добавил в @/usr/local/bin/@ на обоих системах два похожих, но разных скрипта.


bc. #!/bin/sh
# Synchronization script for SLAX.
# Version for USB-Flash.
[ "$1" = "" ] &amp;&amp; home="/mnt/hda2/home/komar/" || home=$1
unison slax \
$home \


bc. #!/bin/sh
# Synchronization script for SLAX.
# Version for home.
unison slax -perms 0 \ # Because I use FAT

p(. В директорию @/usr/local/bin/@ сам Бог велел класть самописные скрипты, так как она во многих дистрибутивах по умолчанию включена в @$PATH@, её не тронут пакетные менеджеры и её удобно бекапить.

У меня синхронизация занимает несколько секунд. Пробуйте.

h2. Приложение

h3. Как загрузиться с флешки, если BIOS не поддерживает загрузку с USB?

Такое можно часто встретить на старых компьютерах. USB-контролёр есть, а загрузку с него BIOS не поддерживает. Дабы избежать такой несправедливости, Томас подготовил маленькие образы для CD, загружающие ядро и и загрузочный образ. Их можно найти на "ftp://slax.org":ftp://slax.org, записать на mini-cd и таскать при себе где-нибудь в кошельке.

Однако этот загрузочный образ сведёт на нет все наши старания по юникодизации системы. Если вы настраивали русский язык так, как писал я, то будет лучше записать образ с другим initrd, корректно работающим с русским языком. Такую исошку я сделал, её можно скачать под именем @slax-boot-usb-from-cd-utf8-x.x.x.iso@ здесь:


h3. Модули

Так как разработка SLAX'а сейчас фактически стоит на месте, приходится делать свои модули для необходимых программ.

Собранные мною модули в красивом каталоге со скриншотиками лежат на slax.org: "http://www.slax.org/modules.php?author=874":http://www.slax.org/modules.php?author=874.

Но, по закону мироздания, это сайт часто бывает недоступным. Поэтому я зеракалирую их здесь: "http://komar.bitcheese.net/lzms/":http://komar.bitcheese.net/lzms/.

Если интересуют только slaxbuild'ы - посмотрите здесь: "http://komar.bitcheese.net/darcs/slaxbuilds/":http://komar.bitcheese.net/darcs/slaxbuilds/.

By Alexander Markov on 2010-03-05 15:28:32 +0300 Powered by bitcheese wiki engine