I appreciate the answer of @egreg and I based my own solution on it, since I wrote a book that uses TL 2017 but I wanted to do package maintenance using TL 2019.
Since, however, Debian-based systems will not work well with this solution due to how they compile sudo, I created a solution and a BASH script at: https://github.com/ServusCarolus/tl-switch
Further below is the README.md file from the repo as of this post. Here is the TL;DR:
I downloaded the net installer for TexLive 2019 and installed it as root under the default: /usr/local/texlive/2019
I did this for root and for my normal user account:
sudo mkdir -p /opt/tex/root
sudo mkdir /opt/tex/charles
sudo chown charles:charles /opt/tex/charles
I modded root's .bashrc and my user .profile like so:
if [ -d "/opt/tex/$USER/bin" ] ; then
PATH="/opt/tex/$USER/bin:$PATH"
fi
I installed the script as shown in the README below on my 32-bit machine and my 64-bit machine. The script knows how to find both binary directory types.
As a normal user, I can switch TL distributions without becoming root simply by typing tl-switch yes and tl-switch no. When new releases appear, I can switch via tl-switch yes 2020 and so on.
Similar to the answer above, the script either creates or destroys a symlink to the vanilla TL distribution(s) in the user's writable directory under /opt/tex But it does some error checking in the process and saves time.
I become root via sudo su and I can switch distributions the same way, update and do maintenance with tlmgr and do so without altering the context of my normal user. Moreover, this approach scales to as many users and TL distributions that I might want.
Below I talk about other possible solutions because different people have different needs. But at least this approach might help avoid the automatic fallback to the distro packages due to sudo and secure_path. Thanks again to @egreg for providing a good basis and framework.
tl-switch
Switch context between vanilla TeXLive installed under /usr/local/texlive and the Linux distro version of TeXLive installed on a system like Debian, Ubuntu, Mint, etc.
The script and installation are based on ths answers at:
Multiple TeXlive installations
Caveat: A Word about sudo
Even if one creates a shell script in /etc/profile.d in order to put a symbolic link to the vanilla TL path before /usr/bin in the command search path, the sudo command will not follow the link by default.
The issue is that Debian and friends build sudo to use secure_path. There are various workarounds to this issue, depending on the user's preference. See:
https://stackoverflow.com/questions/257616/why-does-sudo-change-the-path
When installing vanilla TL as root and using this script, one must type, e.g., sudo su to switch contexts to the superuser before running tlmgr. Alternatives include:
The least invasive route, e.g.:
sudo env PATH=$PATH tlmgr -gui
Use the common group route below and do not use sudo, but set the directories to exist under /usr/local/texlive/ as you would, had you installed via sudo.
Redefine sudo in various ways, as the link above discusses. YMMV.
Regardless of the issues above, normal use works as expected.
Observe caution when editing files. For example, sudo echo "$USER" should point to the regular user, not root. That means one should avoid shortcuts like ~./ in file paths. One should use unambiguous, full paths.
Although the GUI interface of tlmgr will not create files owned by root when run via sudo, one should avoid using many desktop-integrated GUI programs while running sudo. Doing so may create files owned by root in one's home directory tree. That can prevent user programs from saving information properly.
To do a full context switch, do either su or sudo su, depending on the distribution.
Excursus: Make a Group
Another way to avoid problems with sudo is to make the TeXLive installation writeable to all TeX users. The problem here is that chaos might ensue if multiple users meddle with the installation. We include this for completeness:
sudo addgroup texusers
sudo addgroup "$USER" texusers
sudo mkdir -p /usr/local/texlive
sudo chgrp -R texusers /usr/local/texlive
sudo chmod -R 2775 /usr/local/texlive
Note that adduser and addgroup are Debian-isms; other distributions (and Debian-based ones too) have the commands useradd and groupadd. See the man pages for those commands. Thus, you would use instead:
sudo groupadd texusers
sudo usermod -a -G texusers "$USER"
Then one can install TL as part of the texusers group.
See also: https://www.tecmint.com/create-a-shared-directory-in-linux/
Step 1: Install Vanilla TL
For installing vanilla TL see: https://www.tug.org/texlive/acquire.html
Note: Never install the symbolic links when installing vanilla TL.
Step 2: Create Directories
We create paths for each user to create directory links:
sudo mkdir -p /opt/tex/root
sudo mkdir "/opt/tex/$USER"
sudo chown "$USER":$USER" "/opt/tex/$USER"
We repeat the final two lines for each user, most likely substituting each username for $USER, e.g.:
sudo mkdir /opt/tex/bob
sudo chown bob:bob /opt/tex/bob
Step 3: Modifying profiles
We put this snippet in each user's .profile and in root's .bashrc:
if [ -d "/opt/tex/$USER/bin" ] ; then
PATH="/opt/tex/$USER/bin:$PATH"
fi
Another approach would put the snippet in everyone's .bashrc, then add source .bashrc to everyone's .profile. That would renew the path environment every time one opens a terminal. Or one can set terminals to open a login shell.
When editing root's .bashrc, remember to use sudo su or specify /root/.bashrc as the file. Otherwise sudo nano ~/.bashrc refers to the user's .bashrc file instead.
Step 4: Install the Script
We go to the directory where we downloaded or cloned the repository and locate the tl-switch script. We then type:
sudo cp ./tl-switch /usr/local/bin
chmod +x /usr/local/bin/tl-switch
All users now will have access to running the script.
Step 5: Reboot
After the install procedure is done, it is good to restart the machine before using TeXLive so that the paths for root and the users can be updated properly.
Step 6: Switching to and from Vanilla TeXLive
When a user (or root) wants to enable access to vanilla TL 2019, one need only type:
tl-switch yes
To specify another installation under /usr/local/texlive, use, e.g.:
tl-switch yes 2018
To disable vanilla TL and use the distro version, one need only type:
tl-switch no
If one changes context in the middle of a session, the search paths will not change. One way to tackle that (somewhat) is mentioned in Step 3 above.
Final Thoughts
An immediate downside to this method is needing to, e.g., sudo su to switch contexts to the superuser before running tlmgr. Its benefits include isolating users from each other and allowing one to change contexts without extensive system modification. Yet contexts only should be changed before logging out and back in again to avoid problems.
/usr/bin, then calling/usr/bin/pdflatexwill run the TL 2011 binary and use the corresponding TeX tree. – egreg Dec 21 '13 at 16:08texdocordvipsor eventlmgr? How to fix it? Setting up the$PATHis not enough? – Sigur Dec 21 '13 at 16:13$PATHis surely enough for using the most recent release. You can always change it in a shell to use the old release. – egreg Dec 21 '13 at 17:08$PATH. – Alex Dec 22 '13 at 13:36