Использование ports в FreeBSD на хостингах без прав root


ramok аватар

ramok - Posted on 12 Июль 2006

Допустим у вас есть хостинг(естественно без прав 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

0
Ваша оценка: Ничего

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% #.........

Отправить комментарий

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.