Rootless

From Gentoo Wiki
Jump to:navigation Jump to:search
Warning
This page has been nominated for deletion.

The given reason is: Dated info which really just points to Prefix for any useful infomation. Paludis is defunct in Gentoo

If you disagree with its deletion, do not remove this notice; discuss your objections on the associated discussion page.

Administrators, please remember to check if anything links here and the page history before deleting.

This notice should remain for a minimum of 1 month after it was placed on the page. If discussion is still ongoing it should remain until a consensus is reached, at which time the page may be deleted or this notice may be removed. (However, if the page has only been edited by the user who nominated it for deletion and/or is in the nominator's user space, then a speedy deletion may be called for.)

Rootless Gentoo Installations

Gentoo can be installed in root-less mode. The packages will be installed as a regular user, for instance in ~/root/. The user can add the binary/library paths from there and run programs that could not be installed on the system otherwise.

There are caveats for certain packages, though. Certain packages will fail to install, because they have not been thought to be installed this way. The most common reasons are:

  • usage of 'install' with root uid/gid
  • RESTRICT=userpriv is unavoidable for some packages

Portage

Usage of portage is documented on the Gentoo Prefix project.

Paludis

Throughout this section we will consider that the prefix will be ~/root.

The steps are:

  • install stage3 archive
  • create paludis files
  • create paludis folders in the prefix:
mkdir ~/root/{var/{db/pkg,paludis/distfiles,cache/paludis/{names_cache,write_cache},tmp/paludis}
  • edit ~/.paludis-test/specpath.conf:
root = /home/user/root
  • copy your paludis configuration to ~/root/etc/paludis/
  • edit the paludis configuration; configure repositories (buildroot, location), and paths
  • edit use configuration file to have minimal use flags for system bootstrap
  • install paludis manually (don't use emerge, unless you proceed as in the above section)
cd ~/root
git clone git:/.../paludis.git
cd paludis
./auto..
make
  • create ~/root/paludis/cave wrapper to run cave from its source directory
#!/usr/bin/env python
# Wrapper to run cave from its source dir 
import sys, os, subprocess

# Add folder containing libs to library path
libdirs=[]
for cwd, dirs, files in os.walk("."):
  for file in files:
    if file.endswith(".so") and cwd not in libdirs:
      libdirs.append(cwd)
os.environ["LD_LIBRARY_PATH"] = ":".join(libdirs)

os.environ["PALUDIS_NO_GLOBAL_HOOKS"] = "1"
#os.environ["PALUDIS_DO_NOTHING_SANDBOXY"] = "1"
os.environ["PALUDIS_DISTRIBUTIONS_DIR"] = "paludis/distributions"
os.environ["PALUDIS_NO_CHOWN"] = "1"

if __name__ == '__main__':
  sys._exit(subprocess.Popen(["./src/clients/cave/.libs/cave", "--environment", "paludis:test"] + sys.argv[1:]).wait())
  • ./cave resolve paludis -/ n
  • create ~/root/root/bin/cave, a wrapper to the properly installed cave binary:
#!/usr/bin/env python
# Cave wrapper
import sys, os, subprocess

os.environ["PALUDIS_NO_GLOBAL_HOOKS"] = "1"
#os.environ["PALUDIS_DO_NOTHING_SANDBOXY"] = "1"
os.environ["PALUDIS_DISTRIBUTIONS_DIR"] = os.path.expanduser("~/root/etc/paludis/distributions")
os.environ["PALUDIS_NO_CHOWN"] = "1"
 
def main():

if __name__ == '__main__':
  sys._exit(subprocess.Popen([os.path.expanduser("~/root/usr/bin/cave"), "--environment", "paludis:test"] + sys.argv[1:]).wait())
  • add bin/library paths to the environment
  • add PATH=$ROOT/root/bin:$PATH to paludis bashrc
  • create an wrapper for install to avoid chgrp failures
  • cave resolve system -/ n ...