Keyd's Blog

События и новости

Фильм “Эверест” – стоит посмотреть

Фильм окзался отличным, достойным потраченного времени.
Всем рекомендую. Перед просмотром стоит прочитать историю, которая лежит в основе фильма: https://ru.wikipedia.org/wiki/Трагедия_на_Джомолунгме_в_мае_1996_года

Фильм "Эверест"

*nix: как быстро удалить директорию с большим количеством файлов

UPD: как выяснилось, куда-то в процесс тестирования закралась ошибка =(

На синтетических тестах rsync даже проиграл другим способам =(

$ time ./cleandir

real 30m37.241s
user 0m1.622s
sys 18m30.156s

$ time find ./2/ -type f -delete

real 34m2.340s
user 0m8.748s
sys 23m16.103s

$ time rsync -a –delete ./3/ ./2/

real 48m21.617s
user 0m22.072s
sys 39m42.210s

Самый быстрый способ – это с помощью вот такой программы:

#include <dirent.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
struct dirent *entry;
DIR *dp;
chdir(“/home/keyd/tmp/2″);
dp = opendir(“.”);
while( (entry = readdir(dp)) != NULL ) {
if ( strcmp(entry->d_name, “.”) && strcmp(entry->d_name, “..”) ){
unlink(entry->d_name);
}
}
}

Такие дела.

Для истории, предыдущий вывод в эксперименте.

На удивление, оказалось, что сделать пустую директорию, а потом rsync’ом с delete’ом эту директорию скопировать в директорию с большим количеством файлов, работает быстрее всего. Magic!

$ mkdir ./empty; rsync -a –delete ./empty ./directory_with_many_files/

Форма супер-минималистического поиска Яндекса

yandex

Про http://ya.ru/ слышали многие.
А вот слышали ли вы про http://ya.ru/white или http://ya.ru/black ?
Попробуйте!

, ,

Настройка шифрования luks, vpn-сервера tinc и необходимых для них правил iptables на android 4.4.4 сборки cyanogenmod 11

tinclogo

Всё описанное ниже имеет скорее исследовательский интерес, и является, по-сути, записью действий, чтобы не забыть на будущее. На полноту не претендует.
В качестве эксперимента решил поиграться с клёвым full-mesh vpn сервером tinc. Код открытый, взять можно тут: http://tinc-vpn.org/
Поставил на двух серверах, почитал доки, настроил.
В базовом случае настраивается просто:

$ mkdir -p /etc/tinc/mynet/hosts
$ cat > /etc/tinc/mynet/tinc.conf
Name = host1
ConnectTo = host2
Device = /dev/net/tun
Forwarding = Off
^D
$ cat > /etc/tinc/mynet/tinc-up
#!/bin/sh
ifconfig $INTERFACE 192.168.100.1 netmask 255.255.255.0
^D
$ cat > /etc/tinc/mynet/tinc-down
#!/bin/sh
ifconfig $INTERFACE down
^D
$ cat > /etc/tinc/mynet/hosts/host1
Address = your internet ip of host1
Subnet = 192.168.100.1/32
^D
$ /usr/sbin/tincd -n mynet -K

В итоге должны появиться файлы в директории /etc/tinc/mynet/:

hosts
rsa_key.priv
tinc.conf
tinc-down
tinc-up

Внутри директории hosts:

host1

rsa_key.priv – это приватный ключ, он на каждой сервере свой,
публичная часть ключа сохраняется в /etc/tinc/mynet/hosts/host1 под строкой Subnet = …
На втором сервере (host2) нужно проделать всё то же самое (можно просто скопировать все файлы, кроме rsa_key.priv) и запустить:

$ cat > /etc/tinc/mynet/tinc-up
#!/bin/sh
ifconfig $INTERFACE 192.168.100.2 netmask 255.255.255.0
^D
$ cat > /etc/tinc/mynet/hosts/host2
Address = your internet ip of host2
Subnet = 192.168.100.2/32
^D
$ cat > /etc/tinc/mynet/tinc.conf
Name = host2
ConnectTo = host1
Device = /dev/net/tun
Forwarding = Off
^D
$ /usr/sbin/tincd -n mynet -K

Это сгенерирует приватный и публичный ключ для host2.
Запускаем-тестируем – на первом хосте должен подняться интерфейс с ip 192.168.100.1, на втором с ip 192.168.100.2, хосты должны быть доступны друг-другу по этим адресам.

И вот тут у меня возникло желание сделать одним из серверов свой телефон на android’е. Телефон – штука совсем небезопасная, просто так приватный ключ на флешку уже не положишь. Значит нужно настроить шифрованное хранилище, куда этот ключ можно спрятать. Плюс в моём случае на телефоне работает firewall iptables, соответственно, нужно настроить правила для доступа ко второму серверу с телефона.

Итак, для настройки нам понадобятся:
Телефон с android, root
LUKS Manager – https://play.google.com/store/apps/details?id=com.nemesis2.luksmanager&hl=ru — для настройки зашифрованного хранилища
AFWall – https://play.google.com/store/apps/details?id=dev.ukanth.ufirewall&hl=ru — для настройки iptables
TINC_gui – https://play.google.com/store/apps/details?id=org.poirsouille.tinc_gui&hl=ru — запускалка tinc-сервера на телефоне

Можно, конечно, обойтись без графических приблуд, но с ними немного удобнее будет пользоваться в будущем.
Настраиваем зашифрованное хранилище luks (работает не на всех телефонах, скорее всего, на стоковом ядре работать не будет – тем не менее, cyanogenmod 11 вполне годится):
1. Подключаем телефон к отладчику adb:

На хост-машине:
$ adb start-server
$ adb devices
$ adb shell

Тут есть нюанс. В настройках телефона нужно разрешить root-доступ для отладчика (Настройки->Суперпользователь в CM11).
2. LUKS Manager достаточно странный, чтобы он заработал его нужно немного улучшить. В консоли отладчика запускаем:

$ su
# chmod 755 /data/data/com.nemesis2.luksmanager/lm.cryptsetup
# chmod 755 /data/data/com.nemesis2.luksmanager/luks
# ln -s /data/data/com.nemesis2.luksmanager/lm.cryptsetup /system/xbin/
# ln -s /data/data/com.nemesis2.luksmanager/luks /system/xbin/

Если в процессе ругается на read-only filesystem, нужно сказать (в зависимости от того, на какой раздел ругается):

# mount -o rw,remount /system
# mount -o rw,remount /data

3. Теперь, по-идее, luks manager сможет нормально работать. Запускаем его, говорим create, при создании контейнера выбираем vfat (ext2 у меня так и не взлетел в cm11).
Ура, у нас есть готовый контейнер (если повезло).
4. Создаём директорию /mnt/sdcard/tinc, копируем в неё всё, что касается host2.
Если есть желание, можно перегенерировать ключи, tincd живёт в /data/data/org.poirsouille.tinc_gui/files/tincd.
5. Кладём rsa_key.priv в свежесозданное зашифрованное хранилище.
6. Прописываем в tinc.conf:

Name = host2
ConnectTo = host1
Device = /dev/tun
DeviceType = tap
KeyExpire = 3600
Interface = tap0
# Путь к файлу, который лежит в зашифрованном хралище
PrivateKeyFile = /mnt/sdcard/secured_storage/rsa_key.priv
ScriptsInterpreter = /system/bin/sh
Forwarding = Off

6. Запускаем tinc gui, указываем, что конфигурация tinc живёт в /mnt/sdcard/tinc/mynet/
7. Если у вас нет firewall, то всё должно заработать (ну или tcpdump вам в помощь + отладка tinc’а). Доки по отладке tinc: http://tinc-vpn.org/documentation/Solving-problems.html#Solving-problems
8. Если firewall есть, то я выкрутился следующим образом:

# cat > /mnt/sdcard/tinc/iptables.rules
IPTABLES=/system/bin/iptables

$IPTABLES -I afwall-wifi-wan -m owner –uid-owner 11111 -j RETURN
$IPTABLES -I afwall-wifi-lan -m owner –uid-owner 11111 -j RETURN

$IPTABLES -I afwall-wifi-lan –destination 100.100.100.100 -j RETURN
$IPTABLES -I afwall-wifi-wan –destination 100.100.100.100 -j RETURN
$IPTABLES -I afwall-3g-home –destination 100.100.100.100 -j RETURN
^D

100.100.100.100 – адрес сервера host1
11111 – uid tinc_gui, посмотреть можно так:

# cd /data/data/org.poirsouille.tinc_gui/files
# ls -lan
-rwxrwx--x 11111 11111 452824 2014-11-08 21:50 tincd

9. В настройках afwall+ указал полученный скрипт как custom script:

AFWall+ -> Настройки -> Пользовательские скрипты, в поле вводим:
. /mnt/sdcard/tinc/iptables.rules

10. Теперь при применении правил будет подгружаться наш custom script для firewall’а, который будет открывать доступ приложению tinc-gui и всем, кто хочет постучать в host1.

, , , , , ,

Интересно: “Безусловный Основной Доход” в Швейцарии

В Швейцарии собрали необходимое количество подписей за введение безусловного дохода в 2000 евро для всех жителей страны. Эти деньги будут выплачиваться всем без исключения, вне зависимости от того, работает ли человек или нет.
Очень интересная инициатива. Конечно, пока это только проект закона, но насколько я понимаю, правительство Швейцарии должно будет его рассмотреть.
Оказывается, что подобный эксперимент уже проводили в Намибии.

И ведь главное, что эта идея обладает очень здравым зерном – многие люди начнут делать то, что хочется им, а не то, что приносит им деньги. И мне кажется, что такой подход приведёт к появлению большого количества новых талантов. Подобный подход полностью меняет отношение к жизни в целом и к работе в частности. Надеюсь, что у Швейцарии получится. Возможно, мы не так уж и далеки от миров, описанных у Стругацких.

Наткнулся тут: http://mi3ch.livejournal.com/2449111.html
И ещё почитать можно тут: http://aftershock.su/?q=node/202145

Previous Posts