Использование ports в FreeBSD на хостингах без прав root
Допустим у вас есть хостинг(естественно без прав root) и злые админы не реагируют на просьбы поставить так вами любмый редактор или IRC бот. Если есть компилятор то наиболее очевидным выходом является компиляция программ из исходных которов взятых с сайта производителя. Со всеми вытекающими последствиями как проблемы с библиотеками, обновлением новыйх версий, ключами компиляции и так далее и тому подобное...
С другой стороны сейчас практически в каждой ОС имеется система пакетов позволяющая легко и непринужденно устанавливать все необходимое. Здесь пойдет речь о портах FreeBSD, но я уверен что такое можно провернуть и
и rpm и с deb..
Итак.
0) те кто не в курсе что такое порты - читаем что это такое и как их использовать
http://freebsd.org.ua/doc/ru_RU.KOI8-R/books/handbook/ports.html
Проблема в том что бы указать системе портов что права root ей ненужны и установить программы в Ваш домашний каталог.
1) укажем системе портов где что находится
export PREFIX=~/ # все устанавливать относительно домашнего каталога export WRKDIRPREFIX=~/ # все cтроить относительно домашнего каталога export DISTDIR=~/usr/ports/distfiles # готовые пакеты и временные файлы распологать в этом каталоге export PKG_DBDIR=~/var/db/pkg # тут система пакетов будт откладывать информацию об установенных пакетах export PORT_DBDIR=~/var/db/ports # тут система портов будет делать тоже самое Ж:-) export INSTALL_AS_USER=$USER # все что необходимо устанавливать от имени нашего пользователя
Любопытные могут посмотреть переменные которые сущетвуют в
* man ports
* /usr/ports/Mk/bsd.port.mk
все это рекомендую занести в стартовые файлы вашего любмиого шела (~/.shrc, ~/.zshrc, ~/.bashrc. с csh-совместимых шелах думаю разберетесь сами Ж:-)
так же незабыть добавить PATH для нашего каталога с бинарниками
export PATH=$HOME/bin:$PATH
2) устанавливаем собстенно говоря программы
$ cd /usr/ports/irc/eggdrop $ make install clean $ cd /usr/ports/editors/vim-lite $ make install clean ...
вот и все Ж:-) бинарные файлы будут в ~/bin, библиотеки в ~/lib и так далее
если ставить какние нибуть php пакеты типа phpbb то можно попросить не ставить пакеты по зависимостям (зачем нам свой личный php в домашнем каталоге? Ж:-)
$ cd /usr/ports/www/phpbb/ $ make install NO_DEPENDS=1
3) для работы с пакетами испольщуем обычные pkg_* утилиты
$ pkg_info # список установленых пакетов $ pkg_info -L имя_пакета_версия # посмотреть куда что поставилось из пакета $ pkg_add и pkg_delete # установить/удалить бинарный пакет
если вас не интересует вопрос простого управления пакетами и вам не нужны базы установленных пакетов
то установив export NO_PKG_REGISTER=1 можно обойтись без PKG_DBDIR и PORT_DBDIR.
Так же если у вас не хватает дисковой квоты то можно попробовать WRKDIRPREFIX и DISTDIR указать на /tmp или подобную системную директорию. Часто админы ленятся там ставить квоты Ж:-)
PS:
если компилятора нет, то можно ставить бинарные пакеты с помощью pkg_add
- 1847 просмотров
Страница для печати


mount -o noexec ...
а кто сказал что будет легко?.. Ж:-)
если пров захочет, он не даст этого делать. но ведь может и разрешать..
ps
кстати подали идею в качестве места сборки использовать /tmp или другую подобную диру если квота маленькая
плюс к тому допишу о том как ставить пакет без зависимостей. удобно для всяких php вещей типа phpbb что бы не тянул за собой весь php Ж:-)
--
Signature invent in progress 22% #.........
не знаю, правда, возможно ли такое. но на некоторых хостингах было бы очень полезно!
ни себе "не знаю, правда, возможно ли такое."
я как раз на vim и eggdrop проверил. не из пальца же я это все высосал Ж:-)
ps
с возвращеницем Ж:-P
--
Signature invent in progress 21% #.........
я про deb и apt
ps: пасиб что дождался ;)
в man dpkg есть
--root=dir | --admindir=dir | --instdir=dir
Изменить каталоги по умолчанию. Каталог admindir по умолчанию
имеет значение /var/lib/dpkg и содержит много файлов, в которых
даётся информация о состоянии установленных или удалённых пакетов
и т.д. Каталог instdir по умолчанию равен / и указывает каталог,
куда будут устанавливаться пакеты. Он также передаётся функции
chroot(2) перед запуском сценария установки пакета -- это
означает, что сценарии будут считать instdir корневым каталогом.
Изменение каталога root устанавливает каталог instdir в значение
dir, а каталога admindir -- в значение dir/var/lib/dpkg.
===
так что думаю думаю сочетая fakeroot и эти опции можно добится примерно такого же эффекта. как только появится хостинг на дебе без рута опробуем.. Ж:-)
--
Signature invent in progress 21% #.........
Отправить комментарий