Запуск программ "видящих" на месте одной и той же директории разные: каждая "свою" Пятничный вопрос: есть некая программа PROG для которой конфигурационные файлы сидят в директории $HOME/.PROGrc. Требуется одновременно запускать несколько процессов с этой программой для обработки разных наборов данных, но конфигурация для каждого набора должна быть своя. То есть, хотелось бы создать несколько директорий и сделать так, чтобы каждая копия PROG при запуске видела на месте $HOME/.PROGrc "свою" конфигурацию.
mount --bind по понятным соображениям не подходит: оно на всю систему и включается рутом. Symbolic link тоже не катит.
Возможно, вопрос можно решить запуском в контейнере или в виртуалке, но стоит ли оверхед и головная боль, связанные с этим такой простой, казалось бы, функциональности? Дело в том, что программа тянет за собой кучу shared libraries и прочего барахла, и поэтому каждая такая песочница будет занимать немало места в виртуальной памяти.
Признаюсь, никогда не пробовал контейнеры и хотелось бы узнать мнение знающих людей, нет ли возможности не раздувать без необходимости размер каждой "песочницы"?
Заранее спасибо.
P.S. Ясно, что код программы недоступен, поэтому самому сделать конфигурацию более гибкой не получится.
UPDATE: В результате обсуждения задаче была решена переопределением $HOME с помощью скрипта (см. под катом). Всем спасибо.
#!/bin/sh
cdir="$HOME/.PROGrc"
mods="$HOME/PROGmodules"
proghome=".PROG_priv_home"
proglock=".PROG_lock"
start_PROG_priv_home () {
if [ -f "$proglock" ] ; then
echo "PROG is already running in this directory. Exiting."
exit 0
fi
touch "$proglock"
if [ ! -d "$proghome" ] ; then
echo "Creating private PROG home directory $proghome"
mkdir -p "$proghome" || exit
echo "Copying configuration files to $proghome"
cp -a "$cdir" "$proghome"/ &&
ln -s "$mods" "$proghome"/ || ( echo "... FAILED" ; rm -f "$proglock" ; exit )
fi
echo 'Redefining $HOME variable to ' "$proghome"
export HOME="$proghome"
echo 'Starting PROG'
PROG "$@"
rm -f "$proglock"
}
start_PROG_priv_home &
sleep 1