GNU/Linux >> Znalost Linux >  >> Linux

Jak nainstalovat balíčky v Linuxu (CentOS) bez uživatele root s automatickým zpracováním závislostí?

Pro instalaci libovolného balíčku do úložiště distribuce je možné použít yum a rpm. Zde je recept:

Najděte název balíčku

Použijte yum search .

Stáhnout

Stáhněte si balíček a všechny jeho závislosti pomocí yumdownloader (který je standardně dostupný na CentOS). Budete jej muset předat --resolve získat řešení závislosti. yumdownloader stáhne se do aktuálního adresáře, pokud nezadáte --destdir .

mkdir -p ~/rpm
yumdownloader --destdir ~/rpm --resolve vim-common

Vyberte umístění předpony

Může to být ~ , ~/centos nebo ~/y . Pokud je váš domov pomalý, protože je na síťovém souborovém systému, můžete jej vložit do /var/tmp/... .

mkdir ~/centos

Rozbalte všechny balíčky .rpm

Extrahujte všechny balíčky .rpm do zvoleného umístění předpony.

cd ~/centos && rpm2cpio ~/rpm/x.rpm | cpio -id
  • rpm2cpio vydá soubor .rpm jako archiv .cpio na stdout.
  • cpio čte to z stdin
  • -i znamená extrahovat (do aktuálního adresáře)
  • -d znamená vytvořit chybějící adresář

Volitelně můžete použít -v :podrobný

Nakonfigurujte prostředí

Budete muset nakonfigurovat proměnnou prostředí PATH a LD_LIBRARY_PATH aby nainstalované balíčky fungovaly správně. Zde je odpovídající ukázka z mého ~/.bashrc :

export PATH="$HOME/centos/usr/sbin:$HOME/centos/usr/bin:$HOME/centos/bin:$PATH"

L='/lib:/lib64:/usr/lib:/usr/lib64'
export LD_LIBRARY_PATH="$L:$HOME/centos/usr/lib:$HOME/centos/usr/lib64"

Upravená poznámka (děkuji @AmitNaidu za upozornění na mou chybu):

Podle dokumentace bash o spouštěcích souborech se při připojování k serveru přes ssh získává pouze .bashrc:

Vyvoláno vzdáleným démonem shellu

Bash se pokouší určit, kdy je spuštěn se svým standardním vstupem připojeným k síťovému připojení, jako když je spuštěn vzdáleným shellovým démonem, obvykle rshd, nebo bezpečným shellovým démonem sshd. Pokud Bash zjistí, že je spouštěn tímto způsobem, čte a provádí příkazy z ~/.bashrc, pokud tento soubor existuje a je čitelný.

Nyní, pokud chcete tímto způsobem nainstalovat mnoho balíčků, možná budete chtít tento proces zautomatizovat. Pokud ano, podívejte se na toto úložiště.

Další poznámka:pokud se pokoušíte nainstalovat některý z gcc, zlib, make, cmake, git, fish, zsh or tmux , měli byste opravdu zvážit použití conda, viz moje další odpověď.


TL;DR Použijte Minicondu, conda-forge je úžasná.

curl "https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh" | sh

Nebo alternativně:

curl https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh > Miniconda.sh
bash Miniconda.sh -b -p ~/conda
# -b is used to specify that this is done "in batch", so skip the EULA prompt
# -p lets you specify where you want conda installed

Běžně požadované balíčky:

  • gcc conda install gcc
  • zlib conda install zlib
  • vytvořit conda install make
  • cmake conda install cmake
  • git conda install git
  • ryba conda install -c conda-forge fish
  • zsh conda install -c ActivisionGameScience zsh
  • tmux conda install -c conda-forge tmux
    • Tento tmux má chybu s názvem knihovny ncurse, kterou používá. Můžete to obejít tak, že přejdete na da/lib složka a symbolické propojení ln -sT libtinfow.so.6.1 libtinfo.so.6

Pro zbytek můžete zkusit https://anaconda.org/search?q= .

Dlouho jsem se snažil přimět správce balíčků, aby dobře fungoval na CentOS/RedHat, ale bez úspěchu. Nejlepší, co jsem mohl udělat, bylo nainstalovat Gentoo Prefix do správného umístění na jiném CentOS s přístupem root a pak scp a .tar.xz celé instalace na cílový server (jediný způsob, jak získat správné gcc pro Gentoo Prefix). Mohl jsem emerge (sestavit a nainstalovat) balíčky na cílovém serveru, ale stále narážely na problémy s místními obyvateli a oprávněními.

Nedávno jsem dosáhl uživatelské instalace některých zajímavých balíčků pomocí conda. Zde je návod, jak jej nainstalovat z příkazového řádku:

curl "https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh" | sh

Pokud jako já je vaše domovská složka umístěna na vzdáleném disku (síťový souborový systém), možná ji nebudete chtít instalovat do domovské složky, takže možná budete chtít použít něco jako mkdir /var/tmp/lo poté zadejte instalační složku jako /var/tmp/lo/da během instalace.

Potom budete moci nainstalovat poměrně hodně balíčků, i když možná ne všechny, které jste chtěli. Většinu času, pokud není ve výchozím kanálu, bude v conda-forge . Existující balíčky můžete zkontrolovat na https://anaconda.org/search?q=

Další správci balíčků, které jsem se pokusil použít po conda:

Linuxbrew

Myslel jsem, že s tím bude snadné nainstalovat homebrew (linuxbrew), ale jejich zdroje jsou chaotické a používají pevně zakódovanou absolutní cestu k interpretru ruby, který selže, protože to není poslední verze a tak dále a tak dále a dal jsem nahoru.

Nix

Nix stále vyžaduje, abyste používali složku /nix. Také to napevno zakódovali a je těžké to správně nastavit při každém stažení, které musí provést během instalace (natož aktualizací).

Předpona Gentoo

Očekávám, že Gentoo Prefix bude snazší instalovat přímou nyní, když můžeme gcc použít na cílovém serveru. -- Dobře, zkusil jsem to, ale během instalace (2018-09-28) jsem narazil na chyby v oprávněních:

portage.exception.OperationNotPermitted: chown(b'~/gentoo/tmp/var/tmp/portage/sys-apps/gentoo-functions-0.12/image/var', 2000, 2000)

PkgSrc

Teď zkusím pkgsrc. -- Použijte (starší) verzi 64bitové verze EL 6.x, pokud používáte CentOS 6 nebo pokud narazíte na problémy s verzí (G)LibC s verzí 7.x. -- Žádné štěstí, pevné kódy pkgsrc /usr/pkg/sbin a /usr/pkg/bin . Takže to nemůže být použito jako uživatel, pokud možná nenastavíte prostředí fakechroot. Ale nikdy jsem to nedělal a očekávám problémy s použitelností.

Prosím komentujte/odpovězte, pokud se vám podaří nainstalovat jakýkoli jiný správce balíčků.


Linux
  1. Jak nainstalovat Nextcloud s ISPConfig 3.1

  2. Přidat uživatele do skupiny v Linuxu, jak na to (s příklady)

  3. Nainstalujte WordPress na Linux pomocí Apache

  1. Jak nainstalovat Erlang na Rocky Linux/Alma Linux/CentOS 8

  2. UNIX / Linux :Jak odstranit ekvivalentního uživatele root (uživatel jiného typu než root s UID 0)

  3. Jak zjistím oprávnění konkrétního uživatele v systému Linux s přístupem root?

  1. Jak poskytnout uživateli oprávnění root na Kali Linuxu

  2. Jak nainstalovat RPM soubory (balíčky) na CentOS Linux

  3. Jak spravovat CentOS Linux pomocí GUI