# SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2020-06-17 12:44+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. type: Content of: #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:11 msgid "Package Management" msgstr "" #. type: Content of: <sect1><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:13 msgid "" "Package Management is an often requested addition to the LFS Book. A Package " "Manager allows tracking the installation of files making it easy to remove " "and upgrade packages. As well as the binary and library files, a package " "manager will handle the installation of configuration files. Before you " "begin to wonder, NO—this section will not talk about nor recommend any " "particular package manager. What it provides is a roundup of the more " "popular techniques and how they work. The perfect package manager for you " "may be among these techniques or may be a combination of two or more of " "these techniques. This section briefly mentions issues that may arise when " "upgrading packages." msgstr "" #. type: Content of: <sect1><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:24 msgid "Some reasons why no package manager is mentioned in LFS or BLFS include:" msgstr "" #. type: Content of: <sect1><itemizedlist><listitem><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:29 msgid "" "Dealing with package management takes the focus away from the goals of these " "books—teaching how a Linux system is built." msgstr "" #. type: Content of: <sect1><itemizedlist><listitem><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:34 msgid "" "There are multiple solutions for package management, each having its " "strengths and drawbacks. Including one that satisfies all audiences is " "difficult." msgstr "" #. type: Content of: <sect1><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:40 msgid "" "There are some hints written on the topic of package management. Visit the " "<ulink url=\"&hints-index;\">Hints Project</ulink> and see if one of them " "fits your need." msgstr "" #. type: Content of: <sect1><sect2><title> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:45 msgid "Upgrade Issues" msgstr "" #. type: Content of: <sect1><sect2><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:47 msgid "" "A Package Manager makes it easy to upgrade to newer versions when they are " "released. Generally the instructions in the LFS and BLFS books can be used " "to upgrade to the newer versions. Here are some points that you should be " "aware of when upgrading packages, especially on a running system." msgstr "" #. type: Content of: <sect1><sect2><itemizedlist><listitem><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:54 msgid "" "If Glibc needs to be upgraded to a newer version, (e.g. from glibc-2.31 to " "glibc-2.32), it is safer to rebuild LFS. Though you " "<emphasis>may</emphasis> be able to rebuild all the packages in their " "dependency order, we do not recommend it." msgstr "" #. type: Content of: <sect1><sect2><itemizedlist><listitem><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:60 msgid "" "If a package containing a shared library is updated, and if the name of the " "library changes, then any the packages dynamically linked to the library " "need to be recompiled in order to link against the newer library. (Note " "that there is no correlation between the package version and the name of the " "library.) For example, consider a package foo-1.2.3 that installs a shared " "library with name <filename class='libraryfile'>libfoo.so.1</filename>. If " "you upgrade the package to a newer version foo-1.2.4 that installs a shared " "library with name <filename class='libraryfile'>libfoo.so.2</filename>. In " "this case, any packages that are dynamically linked to <filename " "class='libraryfile'>libfoo.so.1</filename> need to be recompiled to link " "against <filename class='libraryfile'>libfoo.so.2</filename> in order to use " "the new library version. You should not remove the previous libraries unless " "all the dependent packages are recompiled." msgstr "" #. type: Content of: <sect1><sect2><title> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:79 msgid "Package Management Techniques" msgstr "" #. type: Content of: <sect1><sect2><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:81 msgid "" "The following are some common package management techniques. Before making a " "decision on a package manager, do some research on the various techniques, " "particularly the drawbacks of the particular scheme." msgstr "" #. type: Content of: <sect1><sect2><sect3><title> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:86 msgid "It is All in My Head!" msgstr "" #. type: Content of: <sect1><sect2><sect3><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:88 msgid "" "Yes, this is a package management technique. Some folks do not find the need " "for a package manager because they know the packages intimately and know " "what files are installed by each package. Some users also do not need any " "package management because they plan on rebuilding the entire system when a " "package is changed." msgstr "" #. type: Content of: <sect1><sect2><sect3><title> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:97 msgid "Install in Separate Directories" msgstr "" #. type: Content of: <sect1><sect2><sect3><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:99 msgid "" "This is a simplistic package management that does not need any extra package " "to manage the installations. Each package is installed in a separate " "directory. For example, package foo-1.1 is installed in <filename " "class='directory'>/usr/pkg/foo-1.1</filename> and a symlink is made from " "<filename>/usr/pkg/foo</filename> to <filename " "class='directory'>/usr/pkg/foo-1.1</filename>. When installing a new version " "foo-1.2, it is installed in <filename " "class='directory'>/usr/pkg/foo-1.2</filename> and the previous symlink is " "replaced by a symlink to the new version." msgstr "" #. type: Content of: <sect1><sect2><sect3><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:109 msgid "" "Environment variables such as <envar>PATH</envar>, " "<envar>LD_LIBRARY_PATH</envar>, <envar>MANPATH</envar>, " "<envar>INFOPATH</envar> and <envar>CPPFLAGS</envar> need to be expanded to " "include <filename>/usr/pkg/foo</filename>. For more than a few packages, " "this scheme becomes unmanageable." msgstr "" #. type: Content of: <sect1><sect2><sect3><title> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:118 msgid "Symlink Style Package Management" msgstr "" #. type: Content of: <sect1><sect2><sect3><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:120 msgid "" "This is a variation of the previous package management technique. Each " "package is installed similar to the previous scheme. But instead of making " "the symlink, each file is symlinked into the <filename " "class='directory'>/usr</filename> hierarchy. This removes the need to expand " "the environment variables. Though the symlinks can be created by the user to " "automate the creation, many package managers have been written using this " "approach. A few of the popular ones include Stow, Epkg, Graft, and Depot." msgstr "" #. type: Content of: <sect1><sect2><sect3><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:129 msgid "" "The installation needs to be faked, so that the package thinks that it is " "installed in <filename class=\"directory\">/usr</filename> though in reality " "it is installed in the <filename class=\"directory\">/usr/pkg</filename> " "hierarchy. Installing in this manner is not usually a trivial task. For " "example, consider that you are installing a package libfoo-1.1. The " "following instructions may not install the package properly:" msgstr "" #. type: Content of: <sect1><sect2><sect3><screen> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:137 #, no-wrap msgid "" "<userinput>./configure --prefix=/usr/pkg/libfoo/1.1\n" "make\n" "make install</userinput>" msgstr "" #. type: Content of: <sect1><sect2><sect3><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:141 msgid "" "The installation will work, but the dependent packages may not link to " "libfoo as you would expect. If you compile a package that links against " "libfoo, you may notice that it is linked to <filename " "class='libraryfile'>/usr/pkg/libfoo/1.1/lib/libfoo.so.1</filename> instead " "of <filename class='libraryfile'>/usr/lib/libfoo.so.1</filename> as you " "would expect. The correct approach is to use the <envar>DESTDIR</envar> " "strategy to fake installation of the package. This approach works as " "follows:" msgstr "" #. type: Content of: <sect1><sect2><sect3><screen> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:150 #, no-wrap msgid "" "<userinput>./configure --prefix=/usr\n" "make\n" "make DESTDIR=/usr/pkg/libfoo/1.1 install</userinput>" msgstr "" #. type: Content of: <sect1><sect2><sect3><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:154 msgid "" "Most packages support this approach, but there are some which do not. For " "the non-compliant packages, you may either need to manually install the " "package, or you may find that it is easier to install some problematic " "packages into <filename class='directory'>/opt</filename>." msgstr "" #. type: Content of: <sect1><sect2><sect3><title> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:162 msgid "Timestamp Based" msgstr "" #. type: Content of: <sect1><sect2><sect3><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:164 msgid "" "In this technique, a file is timestamped before the installation of the " "package. After the installation, a simple use of the <command>find</command> " "command with the appropriate options can generate a log of all the files " "installed after the timestamp file was created. A package manager written " "with this approach is install-log." msgstr "" #. type: Content of: <sect1><sect2><sect3><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:170 msgid "" "Though this scheme has the advantage of being simple, it has two " "drawbacks. If, during installation, the files are installed with any " "timestamp other than the current time, those files will not be tracked by " "the package manager. Also, this scheme can only be used when one package is " "installed at a time. The logs are not reliable if two packages are being " "installed on two different consoles." msgstr "" #. type: Content of: <sect1><sect2><sect3><title> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:180 msgid "Tracing Installation Scripts" msgstr "" #. type: Content of: <sect1><sect2><sect3><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:182 msgid "" "In this approach, the commands that the installation scripts perform are " "recorded. There are two techniques that one can use:" msgstr "" #. type: Content of: <sect1><sect2><sect3><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:185 msgid "" "The <envar>LD_PRELOAD</envar> environment variable can be set to point to a " "library to be preloaded before installation. During installation, this " "library tracks the packages that are being installed by attaching itself to " "various executables such as <command>cp</command>, " "<command>install</command>, <command>mv</command> and tracking the system " "calls that modify the filesystem. For this approach to work, all the " "executables need to be dynamically linked without the suid or sgid bit. " "Preloading the library may cause some unwanted side-effects during " "installation. Therefore, it is advised that one performs some tests to " "ensure that the package manager does not break anything and logs all the " "appropriate files." msgstr "" #. type: Content of: <sect1><sect2><sect3><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:197 msgid "" "The second technique is to use <command>strace</command>, which logs all " "system calls made during the execution of the installation scripts." msgstr "" #. type: Content of: <sect1><sect2><sect3><title> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:203 msgid "Creating Package Archives" msgstr "" #. type: Content of: <sect1><sect2><sect3><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:205 msgid "" "In this scheme, the package installation is faked into a separate tree as " "described in the Symlink style package management. After the installation, a " "package archive is created using the installed files. This archive is then " "used to install the package either on the local machine or can even be used " "to install the package on other machines." msgstr "" #. type: Content of: <sect1><sect2><sect3><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:211 msgid "" "This approach is used by most of the package managers found in the " "commercial distributions. Examples of package managers that follow this " "approach are RPM (which, incidentally, is required by the <ulink " "url=\"http://refspecs.linuxfoundation.org/lsb.shtml\">Linux Standard Base " "Specification</ulink>), pkg-utils, Debian's apt, and Gentoo's Portage " "system. A hint describing how to adopt this style of package management for " "LFS systems is located at <ulink url=\"&hints-root;fakeroot.txt\"/>." msgstr "" #. type: Content of: <sect1><sect2><sect3><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:220 msgid "" "Creation of package files that include dependency information is complex and " "is beyond the scope of LFS." msgstr "" #. type: Content of: <sect1><sect2><sect3><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:223 msgid "" "Slackware uses a <command>tar</command> based system for package archives. " "This system purposely does not handle package dependencies as more complex " "package managers do. For details of Slackware package management, see " "<ulink url=\"http://www.slackbook.org/html/package-management.html\"/>." msgstr "" #. type: Content of: <sect1><sect2><sect3><title> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:231 msgid "User Based Management" msgstr "" #. type: Content of: <sect1><sect2><sect3><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:233 msgid "" "This scheme, unique to LFS, was devised by Matthias Benkmann, and is " "available from the <ulink url=\"&hints-index;\">Hints Project</ulink>. In " "this scheme, each package is installed as a separate user into the standard " "locations. Files belonging to a package are easily identified by checking " "the user ID. The features and shortcomings of this approach are too complex " "to describe in this section. For the details please see the hint at <ulink " "url=\"&hints-root;more_control_and_pkg_man.txt\"/>." msgstr "" #. type: Content of: <sect1><sect2><title> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:246 msgid "Deploying LFS on Multiple Systems" msgstr "" #. type: Content of: <sect1><sect2><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:248 msgid "" "One of the advantages of an LFS system is that there are no files that " "depend on the position of files on a disk system. Cloning an LFS build to " "another computer with the same architecture as the base system is as simple " "as using <command>tar</command> on the LFS partition that contains the root " "directory (about 250MB uncompressed for a base LFS build), copying that file " "via network transfer or CD-ROM to the new system and expanding it. From " "that point, a few configuration files will have to be changed. " "Configuration files that may need to be updated include: " "<filename>/etc/hosts</filename>, <filename>/etc/fstab</filename>, " "<filename>/etc/passwd</filename>, <filename>/etc/group</filename>, <phrase " "revision=\"systemd\"> <filename>/etc/shadow</filename>, and " "<filename>/etc/ld.so.conf</filename>. </phrase> <phrase revision=\"sysv\"> " "<filename>/etc/shadow</filename>, <filename>/etc/ld.so.conf</filename>, " "<filename>/etc/sysconfig/rc.site</filename>, " "<filename>/etc/sysconfig/network</filename>, and " "<filename>/etc/sysconfig/ifconfig.eth0</filename>. </phrase>" msgstr "" #. type: Content of: <sect1><sect2><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:273 msgid "" "A custom kernel may need to be built for the new system depending on " "differences in system hardware and the original kernel configuration." msgstr "" #. type: Content of: <sect1><sect2><note><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:277 msgid "" "There have been some reports of issues when copying between similar but not " "identical architectures. For instance, the instruction set for an Intel " "system is not identical with an AMD processor and later versions of some " "processors may have instructions that are unavailable in earlier versions." msgstr "" #. type: Content of: <sect1><sect2><para> #: /home/xry111/svn-repos/LFS-BOOK/chapter08/pkgmgt.xml:283 msgid "" "Finally the new system has to be made bootable via <xref " "linkend=\"ch-bootable-grub\"/>." msgstr ""