Using the TeX Live Manager in Usermode ====================================== (to be discussed and implemented) (partial implementation working for install and remove is in tlpkg/dev/dev.usermode-tlmgr.patch) 0. Contents ----------- 0. Contents 1. Rational and definition 2. General layout 3. Description of actions 4. Open questions 5. Changes to the infrastructure --------------------------------------------------------------- 0.1 Implementation notes ------------------------ - User has to first call tlmgr init-usertree [ --usertree .... ] - available_architectures is set to the empty list, this allows updating packages depending on .ARCH packages, but I am not sure if that is a good idea fixed now, only relocated packages can be installed in usermode - update, install, remove, paper done - postinstall action call -sys variant if !$opts{"usermode"} - most other actions exit 1 with warning if in usermode - backup and restore should be checked --------------------------------------------------------------- 1. Rationale and definition --------------------------- The idea behind developing a user mode for the TeX Live Manager is providing a tool to manage different texmf trees for users without write permissions to the system TeX Live installation on a multi user system. If a user without write permissions to the main installation tree is calling tlmgr, or it is called with --user (name to be decided) command line argument, then tlmgr will work in "usermode" and will behave as specified here. Already supported actions (where no write permissions are needed): help, version, search, show, list, check, print-arch Actions that behave differently in usermode: install, update, remove, option, paper, generate, backup, restore uninstall, symlinks Actions that are not supported in usermode: arch Actions I am not sure by now gui ------------------------------------------------------------ 2. General layout ----------------- In usermode tlmgr manages a different texmf tree. By default it is TEXMFHOME but can be changed with --user-tree ... (name to be decided) (which implies automatically --user). The so managed texmf tree TREE contains a new toplevel directory TREE/tlpkg which in turns contains the tlpdb, and the sub directory tlpkg/tlpobj. The file TREE/tlpkg/texlive.tlpdb contains only the packages that have been installed into the user tree TREE plus additional options in the virtual package 00texlive.installation (like with the main installation's texlive.tlpdb). Management in user mode is only possible for "relocatable" packages, that are packages that share the common prefix $TeXLive::TLConfig::RelocPrefix which is set to texmf-dist That means that only a package where all files are from the texmf-dist tree can be managed in usermode. These packages' containers are created relocatable, that is, the files in the tar file do not have the "texmf-dist" part included, thus can be unpacked directly into TEXMFHOME. In the tlpdb this fact is advertised in a TLPOBJ with the new field relocated 1 As an example: name 12many category Package revision ... relocated 1 shortdesc ... ... docfiles size=98 RELOC/doc/latex/12many/12many.pdf RELOC/doc/latex/12many/README ... srcfiles size=6 RELOC/source/latex/12many/12many.dtx RELOC/source/latex/12many/12many.ins runfiles size=1 RELOC/tex/latex/12many/12many.sty ... The normal installation procedure of TeX Live (i.e., currently TLUtils::install_package) will take care that when unpacking these relocated containers the missing "texmf-dist" is added. ----------------------------------------------- 3. Description of actions ------------------------- install: in usermode the tlmgr action install will check that the package and all depending packages are either all relocated, or those that are not relocated are already installed in the system installation. If this is true it will unpack all containers to be installed into the user tree (TEXMFHOME or the value of --user-tree) and add the respective packages to the user texlive.tlpdb (creating it if there has non be created till now). Open question: Should we support installation of dependencies at all or should install only work on single package in user mode. If only on single package, what to do with collections and other dependencies? Maybe the user has to install all packages by hand? backup, restore, remove, update: in usermode the tlmgr action update will check that all packages to be updated are installed in the user tree, otherwise it behaves exactely like the system tlmgr. option: only acts upon the user's texlive.tlpdb paper: changes configuration files in user tree generate: creates configuration files in user tree uninstall: will remove all packages from the user's texlive.tlpdb, and then remove the tlpkg directory in the user tree symlinks: takes the settings from the user's texlive.tlpdb, other then that it behaves the same way gui: the GUI should be adapted to do (at least): - if in usermode show all packages with specification whether it is from user tree or system tree - show packags that have versions in the user tree and the system tree - other actions work as described above arch: is simply not supported because it needs access to the binary directories which are not in the texmf-dist prefix, so no operation is allowed ----------------------------------------------------------------------- 4. Open questions ----------------- a. Post install actions: what should be done with post install actions: - fileassoc -> ignore - shortcuts -> make them only for the user? - TLPackageConfigurations (should it go anyway) ? - post install code scripts: we could pass the "user" argument so scripts can react on that b. Behaviour if system tree has been updated and provides newer packages: - warn the user - automatically remove packages in the user tree that are older NO!!! c. Currently user mode is only when installing from CD/NET, but not from svn/DVD. Should this be fixed? -------------------------------------------------------------------------- 5. Changes to the infrastructure (those already known) -------------------------------- - texlive.tlpdb: entries can now files without any leading texmf tree, but then the package has to contain the "relocated 1" key/value pair - TLPOBJ.pm: accept new key "relocated" - tl-update-container: . add cmd line option for $opt_relative . adjust the tlpobj if the container was build relocatable so that texmf-dist prefix is removed from the files - TLUtils.pm install_package(s): check for relocatable and adjust $target by adding $RelocPrefix - tlmgr.pl too many to actually list them --------------------------------------------------------------------------- np, last changed 2009-05-02