tinyproxy - это маленький и не требовательный к ресурсам HTTP/SSL-прокси-сервер. Его целесообразно применять там, где не хочется ставить что-то более навороченное, типа squid-а.
Заметил я однажды на одном из серверов, что tinyproxy не взлетает, ругаясь в свой лог-файл /var/log/tinyproxy/tinyproxy.log таким вот образом:
INFO Feb 16 10:40:57 [25015]: Now running as group "tinyproxy". INFO Feb 16 10:40:57 [25015]: Now running as user "tinyproxy". ERROR Feb 16 10:40:57 [25015]: Could not allocate memory for child counting.
Само собой, сразу полез проверять что с памятью, но свободной памяти оказалось предостаточно. На всякий случай остановил даже тяжелые по памяти процессы, съедающие обычно по нескольку гигабайт RSS --- безрезультатно, ошибка никуда не делась.
Запустив tinyproxy через strace, я увидел следующее:
munmap(0x2b2ae6a30000, 4096) = 0 umask(0177) = 0177 gettimeofday({1329484731, 868249}, NULL) = 0 getpid() = 13041 open("/tmp/tinyproxy.shared.P0QttN", O_RDWR|O_CREAT|O_EXCL, 0600) = 3 unlink("/tmp/tinyproxy.shared.P0QttN") = 0 ftruncate(3, 40) = 0 mmap(NULL, 40, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0) = 0x2b2ae6a30000 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x2b2ae6a3ce40) = 13042 --- SIGCHLD (Child exited) @ 0 (0) --- exit_group(0) = ?
Эта попытка создать файл в директории /tmp навела меня на мысль проверить права доступа к ней. Оказалось, что права там нестандартные:
[avz@ds1 /tmp]# ls -ld /tmp lrwxrwxrwx 1 root root 24 Апр 10 2009 /tmp -> /mnt/disk2/tmp/ [avz@ds1 /tmp]# ls -ld /mnt/disk2/tmp drwxrwxr-x 4 root www 4096 Фев 17 13:18 /mnt/disk2/tmp/
Как видно, отсутствует права на запись для пользователей, не входящих в группу www. А сам tinyproxy как раз должен работать от имени пользователя tinyproxy, который в группу www не входит. После комнады chmod o+w /mnt/disk2/tmp tinyproxy успешно запустился :)
Поставил я этот tinyproxy, а он вообще тупо не запускается. И что с ним делать? strace тоже ситуацию не прояснил.
Капец. То ли инит-скрипт писал какой-то дятел, то ли rpm-ку tinyproxy-1.8.2-1.el5.rf.i386 из репы rpmforge собирал какой-то ламер криворукий.
Что пришлось допилить:
1) вручную создать директорию для логов (вычитал в messages):
mkdir /var/log/tinyproxy ; chown tinyproxy /var/log/tinyproxy
2) в инит-скрипте /etc/init.d.tinyproxy заменить строку DAEMON="/usr/bin/tinyproxy" на DAEMON="/usr/sbin/tinyproxy"
3) переместить конфиг-файл /etc/tinyproxy.conf в /etc/tinyproxy/tinyproxy.conf
4) создать диру для pid-файла и поправить:
mkdir /var/run/tinyproxy ; chown tinyproxy /var/run/tinyproxy