tl-переключатель

tl-переключатель

Я использую Lubuntu 11.10. У меня полностью установлен TeXlive 2011.

Я только что установил TeXlive 2013, работающий install-tlскрипт. Все было хорошо. Я выбрал маленькую схему. Никаких проблем.

Итак, согласногиднам следует сделать это:

После завершения установки необходимо добавить каталог бинарных файлов TeX Live в PATH — за исключением Windows, где об этом позаботится установщик. Например:

PATH=/usr/local/texlive/2013/bin/i386-linux:$PATH

Вместо i386-linux используйте синтаксис вашей оболочки, каталога установки и имени вашей двоичной платформы.

Никаких проблем до сих пор. Я изменил свой $PATHи при выполнении pdflatex --versionна терминале я получил

pdfTeX 3.1415926-2.5-1.40.14 (TeX Live 2013) kpathsea версия 6.1.1

Но я хотел бы узнать, как поступить с последним предложением:

Если на одном компьютере установлено несколько TeX, вам необходимо изменить путь поиска, чтобы переключаться между ними.

Как это сделать?

решение1

Предположим, у вас на машине есть три установки TeX, скажем, vanilla TeX Live 2014 и 2015, а также TeX Live, предоставляемый Ubuntu/Debian. Бинарники для трех дистрибутивов будут находиться в

/usr/local/texlive/2014/bin/<arch>
/usr/local/texlive/2015/bin/<arch>
/usr/bin

где <arch>может быть i386-linux, x86_64-linuxили другая строка, относящаяся к аппаратной архитектуре вашего компьютера.

Если вы зададите PATHпеременную с помощью

export PATH=/usr/local/texlive/2015/bin/i386-linux:$PATH

в вашем .profileфайле или с помощью метода добавления файла /etc/profile.d(который я рекомендую), а затем вызова

pdftex --version

из оболочки покажет

pdfTeX 3.14159265-2.6-1.40.16 (TeX Live 2015)
kpathsea version 6.2.1
[...]

и вы уверены, что любая программа TeX будет использовать дерево, расположенное в

/usr/local/texlive/2015

Это связано с тем, как kpathseaработает библиотека, с которой связаны все программы TeX Live: она устанавливает ряд переменных среды выполнения на основе каталога, в котором находится вызываемый двоичный файл.

Вы можете попробовать увидеть это, выполнив следующие отдельные вызовы из оболочки (опять же, используйте строку, <arch>соответствующую архитектуре вашей машины):

kpsewhich plain.tex
/usr/local/texlive/2014/bin/x86_64-linux/kpsewhich plain.tex
/usr/bin/kpsewhich plain.tex

и вы получите три разных ответа:

/usr/local/texlive/2015/texmf-dist/tex/plain/base/plain.tex
/usr/local/texlive/2014/texmf-dist/tex/plain/base/plain.tex
/usr/share/texlive/texmf-dist/tex/plain/base/plain.tex

Программа kpsewhichпредставляет собой публичный интерфейс к kpathseaбиблиотеке.

У вас могут возникнуть большие проблемы, если вы PATHне настроите систему таким образом, чтобы приложения с графическим интерфейсом видели бинарный каталог TeX Live.до /usr/bin. В моих тестовых виртуальных машинах я размещаю файл с именем , texlive.shсодержащий/etc/profile.d

export PATH=/opt/texbin:${PATH}

и я создаю символическую ссылку, /opt/texbinуказывающую на самую последнюю версию TeX Live, которая есть у меня на машине, выполнив команду

sudo rm /opt/texbin
sudo ln -s /usr/local/texlive/2015/bin/x86_64-linux /opt/texbin

Таким образом, echo $PATHбудет показано что-то вроде

/opt/texbin:...:/usr/bin:...

при условии, что нет более позднего файла в /etc/profile.dдобавляет что-то перед PATH. Важно то, что /opt/texbinэто перед /usr/bin.

В новом выпуске TeX Live вам просто нужно сбросить символическую ссылку и больше ничего не делать: программы GUI и оболочка найдут правильные двоичные файлы. Но, как показано выше, вы по-прежнему можете запускать программы в других дистрибутивах TeX.

Помните: когда вы устанавливаете ванильный TeX Live,никогдаустановите опцию «Создать символическую ссылку в системных каталогах» на «Да». Убедитесь, что она установлена ​​на «Нет», особенно в системах GNU/Linux, где дистрибутив, предоставляемый TeX Live, будет вступать в силу в случае обновлений.

решение2

Я ценю ответ @egreg и основываю свое решение на нем, поскольку я написал книгу, в которой используется TL 2017, но мне хотелось выполнять обслуживание пакетов с использованием TL 2019.

Однако, поскольку системы на базе Debian не будут хорошо работать с этим решением из-за особенностей их компиляции sudo, я создал решение и скрипт BASH по адресу:https://github.com/ServusCarolus/tl-switch

Ниже приведен файл README.md из репозитория на момент публикации этого поста. Вот TL;DR:

  1. Я загрузил сетевой установщик для TexLive 2019 и установил его как root под настройками по умолчанию:/usr/local/texlive/2019

  2. Я сделал это для учетной записи root и для моей обычной учетной записи:

    sudo mkdir -p /opt/tex/root
    sudo mkdir /opt/tex/charles
    sudo chown charles:charles /opt/tex/charles
    
  3. Я модифицировал root .bashrcи своего пользователя .profileследующим образом:

    if [ -d "/opt/tex/$USER/bin" ] ; then
        PATH="/opt/tex/$USER/bin:$PATH"
    fi
    
  4. Я установил скрипт, как показано в README ниже, на моей 32-битной машине и моей 64-битной машине. Скрипт знает, как найти оба типа бинарных каталогов.

Как обычный пользователь, я могу переключать дистрибутивы TL, не становясь пользователем root, просто набрав tl-switch yesи tl-switch no. Когда появляются новые релизы, я могу переключаться через tl-switch yes 2020и так далее.

Подобно ответу выше, скрипт либо создает, либо уничтожает символическую ссылку на дистрибутив(ы) vanilla TL в доступном для записи каталоге пользователя в /opt/texНо он выполняет некоторую проверку ошибок в процессе и экономит время.

Я становлюсь root через sudo suи могу переключать дистрибутивы таким же образом, обновлять и проводить обслуживание tlmgrи делать это без изменения контекста моего обычного пользователя. Более того, этот подход масштабируется до стольких пользователей и дистрибутивов TL, сколько мне может понадобиться.

Ниже я расскажу о других возможных решениях, поскольку у разных людей разные потребности. Но по крайней мере этот подход может помочь избежать автоматического отката к дистрибутивным пакетам из-за sudoи secure_path. Еще раз спасибо @egreg за предоставление хорошей основы и фреймворка.

tl-переключатель

Переключение контекста между обычной версией TeXLive, установленной в /usr/local/texlive, и версией TeXLive для дистрибутивов Linux, установленной в таких системах, как Debian, Ubuntu, Mint и т. д.

Скрипт и установка основаны на этих ответах: Несколько установок TeXlive

Предостережение: Несколько слов оsudo

Даже если создать скрипт оболочки, чтобы /etc/profile.dпоместить символическую ссылку на путь vanilla TL перед /usr/binпутем поиска команд, sudoкоманда по умолчанию не будет следовать по ссылке.

Проблема в том, что Debian и его друзья строят sudoдля использования secure_path. Существуют различные обходные пути для этой проблемы, в зависимости от предпочтений пользователя. Смотрите: https://stackoverflow.com/questions/257616/why-does-sudo-change-the-path

При установке vanilla TL как root и использовании этого скрипта необходимо ввести, например, sudo suдля переключения контекста на суперпользователя перед запуском tlmgr. Альтернативы включают:

  1. Наименее инвазивный путь, например:

    sudo env PATH=$PATH tlmgr -gui
    
  2. Используйте общий групповой маршрут ниже и не используйте sudo, но задайте каталоги, которые будут существовать /usr/local/texlive/так же, как если бы вы устанавливали через sudo.

  3. Переопределить sudoразличными способами, как обсуждается по ссылке выше. YMMV.

Несмотря на вышеперечисленные проблемы, при обычном использовании устройство работает так, как и ожидалось.

Соблюдайте осторожность при редактировании файлов. Например, sudo echo "$USER"должно указывать на обычного пользователя, а не на root. Это значит, что следует избегать сокращений, как ~./в путях к файлам. Следует использовать однозначные, полные пути.

Хотя графический интерфейс пользователя tlmgrне создает файлы, принадлежащие пользователю root при запуске через sudo, следует избегать использования многих интегрированных в рабочий стол программ с графическим интерфейсом пользователя во время работы sudo. Это может привести к созданию файлов, принадлежащих пользователю root, в дереве домашнего каталога. Это может помешать пользовательским программам правильно сохранять информацию.

Чтобы выполнить полное переключение контекста, выполните команду suили sudo su, в зависимости от дистрибутива.

Экскурс: Создайте группу

Другой способ избежать проблем sudo— сделать установку TeXLive доступной для записи всем пользователям TeX. Проблема здесь в том, что может возникнуть хаос, если несколько пользователей вмешаются в установку. Мы включаем это для полноты:

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

Обратите внимание, что adduser и addgroup являются Debian-измами; в других дистрибутивах (и в дистрибутивах на основе Debian) есть команды useraddи groupadd. Смотрите man-страницы для этих команд. Таким образом, вместо этого вы должны использовать:

sudo groupadd texusers
sudo usermod -a -G texusers "$USER"

Затем можно установить TL как часть группы texusers. Смотрите также:https://www.tecmint.com/create-a-shared-directory-in-linux/

Шаг 1: Установка Vanilla TL

Для установки vanilla TL см.:https://www.tug.org/texlive/acquire.html

Примечание: никогда не устанавливайте символические ссылки при установке vanilla TL.

Шаг 2: Создание каталогов

Мы создаем пути для каждого пользователя для создания ссылок каталогов:

sudo mkdir -p /opt/tex/root
sudo mkdir "/opt/tex/$USER"
sudo chown "$USER":$USER" "/opt/tex/$USER"

Мы повторяем последние две строки для каждого пользователя, скорее всего, заменяя каждое имя пользователя на $USER, например:

sudo mkdir /opt/tex/bob
sudo chown bob:bob /opt/tex/bob

Шаг 3: Изменение профилей

Мы помещаем этот фрагмент в папку каждого пользователя .profileи в папку root .bashrc:

if [ -d "/opt/tex/$USER/bin" ] ; then
    PATH="/opt/tex/$USER/bin:$PATH"
fi

Другой подход заключается в том, чтобы поместить фрагмент в everyone's .bashrc, а затем добавить source .bashrcв everyone's .profile. Это будет обновлять среду path каждый раз, когда кто-то открывает терминал. Или можно настроить терминалы на открытие оболочки входа.

При редактировании root's .bashrcне забудьте использовать sudo suили указать /root/.bashrcв качестве файла. В противном случае sudo nano ~/.bashrcссылается на файл пользователя .bashrc.

Шаг 4: Установка скрипта

Переходим в каталог, куда скачали или клонировали репозиторий, и находим скрипт tl-switch. Затем вводим:

sudo cp ./tl-switch /usr/local/bin
chmod +x /usr/local/bin/tl-switch

Теперь все пользователи будут иметь доступ к запуску скрипта.

Шаг 5: Перезагрузка

После завершения процедуры установки рекомендуется перезагрузить компьютер перед использованием TeXLive, чтобы пути для root и пользователей могли быть обновлены должным образом.

Шаг 6: Переход на Vanilla TeXLive и обратно

Когда пользователь (или root) хочет разрешить доступ к vanilla TL 2019, ему нужно всего лишь ввести:

tl-switch yes

Чтобы указать другую установку в разделе /usr/local/texlive, используйте, например:

tl-switch yes 2018

Чтобы отключить vanilla TL и использовать версию дистрибутива, нужно всего лишь ввести:

tl-switch no

Если изменить контекст в середине сеанса, пути поиска не изменятся. Один из способов решения этой проблемы (в некоторой степени) упомянут в шаге 3 выше.

Последние мысли

Непосредственным недостатком этого метода является необходимость, например, sudo suпереключения контекстов на суперпользователя перед запуском tlmgr. Его преимущества включают изоляцию пользователей друг от друга и возможность менять контексты без значительных изменений системы. Однако контексты следует менять только перед выходом из системы и повторным входом, чтобы избежать проблем.

Связанный контент