diff options
-rw-r--r-- | AUTHORS | 1 | ||||
-rw-r--r-- | THANKS | 2 | ||||
-rw-r--r-- | doc/guix.texi | 1100 | ||||
-rw-r--r-- | gnu-system.am | 1 | ||||
-rw-r--r-- | gnu/packages/docbook.scm | 47 | ||||
-rw-r--r-- | gnu/packages/gnome.scm | 15 | ||||
-rw-r--r-- | gnu/packages/linux.scm | 25 | ||||
-rw-r--r-- | gnu/packages/package-management.scm | 4 | ||||
-rw-r--r-- | gnu/packages/patches/flac-fix-memcmp-not-declared.patch | 13 | ||||
-rw-r--r-- | gnu/packages/video.scm | 4 | ||||
-rw-r--r-- | gnu/packages/web.scm | 32 | ||||
-rw-r--r-- | gnu/packages/xiph.scm | 16 | ||||
-rw-r--r-- | gnu/services/base.scm | 58 | ||||
-rw-r--r-- | gnu/system.scm | 7 | ||||
-rw-r--r-- | gnu/system/install.scm | 14 | ||||
-rw-r--r-- | gnu/system/linux-initrd.scm | 12 | ||||
-rw-r--r-- | guix/gexp.scm | 10 | ||||
-rw-r--r-- | guix/records.scm | 52 | ||||
-rw-r--r-- | guix/scripts/refresh.scm | 4 | ||||
-rw-r--r-- | po/guix/eo.po | 450 | ||||
-rw-r--r-- | po/guix/vi.po | 528 | ||||
-rw-r--r-- | po/packages/eo.po | 22 | ||||
-rw-r--r-- | tests/gexp.scm | 18 | ||||
-rw-r--r-- | tests/records.scm | 59 |
24 files changed, 1552 insertions, 942 deletions
@@ -21,6 +21,7 @@ alphabetical order): Cyril Roelandt <tipecaml@gmail.com> Alex Sassmannshausen <alex.sassmannshausen@gmail.com> Cyrill Schenkel <cyrill.schenkel@gmail.com> + Jason Self <j@jxself.org> Sree Harsha Totakura <sreeharsha@totakura.in> David Thompson <dthompson2@worcester.edu> Mark H. Weaver <mhw@netris.org> @@ -13,7 +13,7 @@ infrastructure help: Daniel Clark <dclark@pobox.com> Alexandru Cojocaru <xojoc@gmx.com> Aleix Conchillo Flaqué <aconchillo@gmail.com> - John Darrington <john@cellform.com> + John Darrington <jmd@gnu.org> Rafael Ferreira <rafael.f.f1@gmail.com> Christian Grothoff <christian@grothoff.org> Jeffrin Jose <ahiliation@yahoo.co.in> diff --git a/doc/guix.texi b/doc/guix.texi index 7187f76936..c7a7e8b55e 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -2604,12 +2604,12 @@ For information on porting to other architectures or kernels, @menu * System Installation:: Installing the whole operating system. +* System Configuration:: Configuring a GNU system. * Installing Debugging Files:: Feeding the debugger. * Package Modules:: Packages from the programmer's viewpoint. * Packaging Guidelines:: Growing the distribution. * Bootstrapping:: GNU/Linux built from scratch. * Porting:: Targeting another platform or kernel. -* System Configuration:: Configuring a GNU system. @end menu Building this distribution is a cooperative effort, and you are invited @@ -2631,11 +2631,47 @@ link that follows: @ref{Help,,, info, Info: An Introduction}. Hit @kbd{l} afterwards to come back here. @end ifinfo -@emph{This section documents work-in-progress. The system lacks -features and may be buggy. You've been warned. But more than a -disclaimer, this is an invitation to report issues (and success -stories!), and join us in improving it. @xref{Contributing}, for more -info.} +@subsection Limitations + +As of version @value{VERSION}, GNU@tie{}Guix and the GNU system +distribution are alpha software. It may contain bugs and lack important +features. Thus, if you are looking for a stable production system that +respects your freedom as a computer user, a good solution at this point +is to consider @url{http://www.gnu.org/distros/free-distros.html, one of +more established GNU/Linux distributions}. We hope you can soon switch +to the GNU system without fear, of course. In the meantime, you can +also keep using your distribution and try out the package manager on top +of it (@pxref{Installation}). + +Before you proceed with the installation, be aware of the following +noteworthy limitations applicable to version @value{VERSION}: + +@itemize +@item +The installation process does not include a graphical user interface and +requires familiarity with GNU/Linux (see the following subsections to +get a feel of what that means.) + +@item +The system does not yet provide graphical desktop environments such as +GNOME and KDE. + +@item +Support for encrypted disks, the Logical Volume Manager (LVM), and swap +devices are missing. + +@item +Few system services are currently supported out-of-the-box +(@pxref{Services}). + +@item +On the order of 1,000 packages are available, which means that you may +occasionally find that a useful package is missing. +@end itemize + +You've been warned. But more than a disclaimer, this is an invitation +to report issues (and success stories!), and join us in improving it. +@xref{Contributing}, for more info. @subsection USB Stick Installation @@ -2781,473 +2817,6 @@ guix system disk-image --image-size=800MiB gnu/system/install.scm @file{gnu/system/install.scm} in the source tree for more information about the installation image. - -@node Installing Debugging Files -@section Installing Debugging Files - -@cindex debugging files -Program binaries, as produced by the GCC compilers for instance, are -typically written in the ELF format, with a section containing -@dfn{debugging information}. Debugging information is what allows the -debugger, GDB, to map binary code to source code; it is required to -debug a compiled program in good conditions. - -The problem with debugging information is that is takes up a fair amount -of disk space. For example, debugging information for the GNU C Library -weighs in at more than 60 MiB. Thus, as a user, keeping all the -debugging info of all the installed programs is usually not an option. -Yet, space savings should not come at the cost of an impediment to -debugging---especially in the GNU system, which should make it easier -for users to exert their computing freedom (@pxref{GNU Distribution}). - -Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a -mechanism that allows users to get the best of both worlds: debugging -information can be stripped from the binaries and stored in separate -files. GDB is then able to load debugging information from those files, -when they are available (@pxref{Separate Debug Files,,, gdb, Debugging -with GDB}). - -The GNU distribution takes advantage of this by storing debugging -information in the @code{lib/debug} sub-directory of a separate package -output unimaginatively called @code{debug} (@pxref{Packages with -Multiple Outputs}). Users can choose to install the @code{debug} output -of a package when they need it. For instance, the following command -installs the debugging information for the GNU C Library and for GNU -Guile: - -@example -guix package -i glibc:debug guile:debug -@end example - -GDB must then be told to look for debug files in the user's profile, by -setting the @code{debug-file-directory} variable (consider setting it -from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with -GDB}): - -@example -(gdb) set debug-file-directory ~/.guix-profile/lib/debug -@end example - -From there on, GDB will pick up debugging information from the -@code{.debug} files under @file{~/.guix-profile/lib/debug}. - -In addition, you will most likely want GDB to be able to show the source -code being debugged. To do that, you will have to unpack the source -code of the package of interest (obtained with @code{guix build ---source}, @pxref{Invoking guix build}), and to point GDB to that source -directory using the @code{directory} command (@pxref{Source Path, -@code{directory},, gdb, Debugging with GDB}). - -@c XXX: keep me up-to-date -The @code{debug} output mechanism in Guix is implemented by the -@code{gnu-build-system} (@pxref{Build Systems}). Currently, it is -opt-in---debugging information is available only for those packages -whose definition explicitly declares a @code{debug} output. This may be -changed to opt-out in the future, if our build farm servers can handle -the load. To check whether a package has a @code{debug} output, use -@command{guix package --list-available} (@pxref{Invoking guix package}). - - -@node Package Modules -@section Package Modules - -From a programming viewpoint, the package definitions of the -GNU distribution are provided by Guile modules in the @code{(gnu packages -@dots{})} name space@footnote{Note that packages under the @code{(gnu -packages @dots{})} module name space are not necessarily ``GNU -packages''. This module naming scheme follows the usual Guile module -naming convention: @code{gnu} means that these modules are distributed -as part of the GNU system, and @code{packages} identifies modules that -define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile -Reference Manual}). For instance, the @code{(gnu packages emacs)} -module exports a variable named @code{emacs}, which is bound to a -@code{<package>} object (@pxref{Defining Packages}). - -The @code{(gnu packages @dots{})} module name space is special: it is -automatically scanned for packages by the command-line tools. For -instance, when running @code{guix package -i emacs}, all the @code{(gnu -packages @dots{})} modules are scanned until one that exports a package -object whose name is @code{emacs} is found. This package search -facility is implemented in the @code{(gnu packages)} module. - -Users can store package definitions in modules with different -names---e.g., @code{(my-packages emacs)}. In that case, commands such -as @command{guix package} and @command{guix build} have to be used with -the @code{-e} option so that they know where to find the package. - -The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}: -each package is built based solely on other packages in the -distribution. The root of this dependency graph is a small set of -@dfn{bootstrap binaries}, provided by the @code{(gnu packages -bootstrap)} module. For more information on bootstrapping, -@ref{Bootstrapping}. - -@node Packaging Guidelines -@section Packaging Guidelines - -The GNU distribution is nascent and may well lack some of your favorite -packages. This section describes how you can help make the distribution -grow. @xref{Contributing}, for additional information on how you can -help. - -Free software packages are usually distributed in the form of -@dfn{source code tarballs}---typically @file{tar.gz} files that contain -all the source files. Adding a package to the distribution means -essentially two things: adding a @dfn{recipe} that describes how to -build the package, including a list of other packages required to build -it, and adding @dfn{package meta-data} along with that recipe, such as a -description and licensing information. - -In Guix all this information is embodied in @dfn{package definitions}. -Package definitions provide a high-level view of the package. They are -written using the syntax of the Scheme programming language; in fact, -for each package we define a variable bound to the package definition, -and export that variable from a module (@pxref{Package Modules}). -However, in-depth Scheme knowledge is @emph{not} a prerequisite for -creating packages. For more information on package definitions, -@ref{Defining Packages}. - -Once a package definition is in place, stored in a file in the Guix -source tree, it can be tested using the @command{guix build} command -(@pxref{Invoking guix build}). For example, assuming the new package is -called @code{gnew}, you may run this command from the Guix build tree: - -@example -./pre-inst-env guix build gnew --keep-failed -@end example - -Using @code{--keep-failed} makes it easier to debug build failures since -it provides access to the failed build tree. Another useful -command-line option when debugging is @code{--log-file}, to access the -build log. - -If the package is unknown to the @command{guix} command, it may be that -the source file contains a syntax error, or lacks a @code{define-public} -clause to export the package variable. To figure it out, you may load -the module from Guile to get more information about the actual error: - -@example -./pre-inst-env guile -c '(use-modules (gnu packages gnew))' -@end example - -Once your package builds correctly, please send us a patch -(@pxref{Contributing}). Well, if you need help, we will be happy to -help you too. Once the patch is committed in the Guix repository, the -new package automatically gets built on the supported platforms by -@url{http://hydra.gnu.org/gnu/master, our continuous integration -system}. - -@cindex substituter -Users can obtain the new package definition simply by running -@command{guix pull} (@pxref{Invoking guix pull}). When -@code{hydra.gnu.org} is done building the package, installing the -package automatically downloads binaries from there -(@pxref{Substitutes}). The only place where human intervention is -needed is to review and apply the patch. - - -@menu -* Software Freedom:: What may go into the distribution. -* Package Naming:: What's in a name? -* Version Numbers:: When the name is not enough. -* Python Modules:: Taming the snake. -* Perl Modules:: Little pearls. -@end menu - -@node Software Freedom -@subsection Software Freedom - -@c Adapted from http://www.gnu.org/philosophy/philosophy.html. - -The GNU operating system has been developed so that users can have -freedom in their computing. GNU is @dfn{free software}, meaning that -users have the @url{http://www.gnu.org/philosophy/free-sw.html,four -essential freedoms}: to run the program, to study and change the program -in source code form, to redistribute exact copies, and to distribute -modified versions. Packages found in the GNU distribution provide only -software that conveys these four freedoms. - -In addition, the GNU distribution follow the -@url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free -software distribution guidelines}. Among other things, these guidelines -reject non-free firmware, recommendations of non-free software, and -discuss ways to deal with trademarks and patents. - -Some packages contain a small and optional subset that violates the -above guidelines, for instance because this subset is itself non-free -code. When that happens, the offending items are removed with -appropriate patches or code snippets in the package definition's -@code{origin} form (@pxref{Defining Packages}). That way, @code{guix -build --source} returns the ``freed'' source rather than the unmodified -upstream source. - - -@node Package Naming -@subsection Package Naming - -A package has actually two names associated with it: -First, there is the name of the @emph{Scheme variable}, the one following -@code{define-public}. By this name, the package can be made known in the -Scheme code, for instance as input to another package. Second, there is -the string in the @code{name} field of a package definition. This name -is used by package management commands such as -@command{guix package} and @command{guix build}. - -Both are usually the same and correspond to the lowercase conversion of -the project name chosen upstream, with underscores replaced with -hyphens. For instance, GNUnet is available as @code{gnunet}, and -SDL_net as @code{sdl-net}. - -We do not add @code{lib} prefixes for library packages, unless these are -already part of the official project name. But see @pxref{Python -Modules} and @ref{Perl Modules} for special rules concerning modules for -the Python and Perl languages. - - -@node Version Numbers -@subsection Version Numbers - -We usually package only the latest version of a given free software -project. But sometimes, for instance for incompatible library versions, -two (or more) versions of the same package are needed. These require -different Scheme variable names. We use the name as defined -in @ref{Package Naming} -for the most recent version; previous versions use the same name, suffixed -by @code{-} and the smallest prefix of the version number that may -distinguish the two versions. - -The name inside the package definition is the same for all versions of a -package and does not contain any version number. - -For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows: - -@example -(define-public gtk+ - (package - (name "gtk+") - (version "3.9.12") - ...)) -(define-public gtk+-2 - (package - (name "gtk+") - (version "2.24.20") - ...)) -@end example -If we also wanted GTK+ 3.8.2, this would be packaged as -@example -(define-public gtk+-3.8 - (package - (name "gtk+") - (version "3.8.2") - ...)) -@end example - - -@node Python Modules -@subsection Python Modules - -We currently package Python 2 and Python 3, under the Scheme variable names -@code{python-2} and @code{python} as explained in @ref{Version Numbers}. -To avoid confusion and naming clashes with other programming languages, it -seems desirable that the name of a package for a Python module contains -the word @code{python}. - -Some modules are compatible with only one version of Python, others with both. -If the package Foo compiles only with Python 3, we name it -@code{python-foo}; if it compiles only with Python 2, we name it -@code{python2-foo}. If it is compatible with both versions, we create two -packages with the corresponding names. - -If a project already contains the word @code{python}, we drop this; -for instance, the module python-dateutil is packaged under the names -@code{python-dateutil} and @code{python2-dateutil}. - - -@node Perl Modules -@subsection Perl Modules - -Perl programs standing for themselves are named as any other package, -using the lowercase upstream name. -For Perl packages containing a single class, we use the lowercase class name, -replace all occurrences of @code{::} by dashes and prepend the prefix -@code{perl-}. -So the class @code{XML::Parser} becomes @code{perl-xml-parser}. -Modules containing several classes keep their lowercase upstream name and -are also prepended by @code{perl-}. Such modules tend to have the word -@code{perl} somewhere in their name, which gets dropped in favor of the -prefix. For instance, @code{libwww-perl} becomes @code{perl-libwww}. - - - -@node Bootstrapping -@section Bootstrapping - -@c Adapted from the ELS 2013 paper. - -@cindex bootstrapping - -Bootstrapping in our context refers to how the distribution gets built -``from nothing''. Remember that the build environment of a derivation -contains nothing but its declared inputs (@pxref{Introduction}). So -there's an obvious chicken-and-egg problem: how does the first package -get built? How does the first compiler get compiled? Note that this is -a question of interest only to the curious hacker, not to the regular -user, so you can shamelessly skip this section if you consider yourself -a ``regular user''. - -@cindex bootstrap binaries -The GNU system is primarily made of C code, with libc at its core. The -GNU build system itself assumes the availability of a Bourne shell and -command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and -`grep'. Furthermore, build programs---programs that run -@code{./configure}, @code{make}, etc.---are written in Guile Scheme -(@pxref{Derivations}). Consequently, to be able to build anything at -all, from scratch, Guix relies on pre-built binaries of Guile, GCC, -Binutils, libc, and the other packages mentioned above---the -@dfn{bootstrap binaries}. - -These bootstrap binaries are ``taken for granted'', though we can also -re-create them if needed (more on that later). - -@unnumberedsubsec Preparing to Use the Bootstrap Binaries - -@c As of Emacs 24.3, Info-mode displays the image, but since it's a -@c large image, it's hard to scroll. Oh well. -@image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations} - -The figure above shows the very beginning of the dependency graph of the -distribution, corresponding to the package definitions of the @code{(gnu -packages bootstrap)} module. At this level of detail, things are -slightly complex. First, Guile itself consists of an ELF executable, -along with many source and compiled Scheme files that are dynamically -loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz} -tarball shown in this graph. This tarball is part of Guix's ``source'' -distribution, and gets inserted into the store with @code{add-to-store} -(@pxref{The Store}). - -But how do we write a derivation that unpacks this tarball and adds it -to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv} -derivation---the first one that gets built---uses @code{bash} as its -builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls -@code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar}, -@file{xz}, and @file{mkdir} are statically-linked binaries, also part of -the Guix source distribution, whose sole purpose is to allow the Guile -tarball to be unpacked. - -Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning -Guile that can be used to run subsequent build programs. Its first task -is to download tarballs containing the other pre-built binaries---this -is what the @code{.tar.xz.drv} derivations do. Guix modules such as -@code{ftp-client.scm} are used for this purpose. The -@code{module-import.drv} derivations import those modules in a directory -in the store, using the original layout. The -@code{module-import-compiled.drv} derivations compile those modules, and -write them in an output directory with the right layout. This -corresponds to the @code{#:modules} argument of -@code{build-expression->derivation} (@pxref{Derivations}). - -Finally, the various tarballs are unpacked by the -derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, -etc., at which point we have a working C tool chain. - - -@unnumberedsubsec Building the Build Tools - -@c TODO: Add a package-level dependency graph generated from (gnu -@c packages base). - -Bootstrapping is complete when we have a full tool chain that does not -depend on the pre-built bootstrap tools discussed above. This -no-dependency requirement is verified by checking whether the files of -the final tool chain contain references to the @file{/gnu/store} -directories of the bootstrap inputs. The process that leads to this -``final'' tool chain is described by the package definitions found in -the @code{(gnu packages base)} module. - -@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>. -The first tool that gets built with the bootstrap binaries is -GNU Make, which is a prerequisite for all the following packages. -From there Findutils and Diffutils get built. - -Then come the first-stage Binutils and GCC, built as pseudo cross -tools---i.e., with @code{--target} equal to @code{--host}. They are -used to build libc. Thanks to this cross-build trick, this libc is -guaranteed not to hold any reference to the initial tool chain. - -From there the final Binutils and GCC are built. GCC uses @code{ld} -from the final Binutils, and links programs against the just-built libc. -This tool chain is used to build the other packages used by Guix and by -the GNU Build System: Guile, Bash, Coreutils, etc. - -And voilà! At this point we have the complete set of build tools that -the GNU Build System expects. These are in the @code{%final-inputs} -variables of the @code{(gnu packages base)} module, and are implicitly -used by any package that uses @code{gnu-build-system} (@pxref{Defining -Packages}). - - -@unnumberedsubsec Building the Bootstrap Binaries - -Because the final tool chain does not depend on the bootstrap binaries, -those rarely need to be updated. Nevertheless, it is useful to have an -automated way to produce them, should an update occur, and this is what -the @code{(gnu packages make-bootstrap)} module provides. - -The following command builds the tarballs containing the bootstrap -binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture -of Coreutils and other basic command-line tools): - -@example -guix build bootstrap-tarballs -@end example - -The generated tarballs are those that should be referred to in the -@code{(gnu packages bootstrap)} module mentioned at the beginning of -this section. - -Still here? Then perhaps by now you've started to wonder: when do we -reach a fixed point? That is an interesting question! The answer is -unknown, but if you would like to investigate further (and have -significant computational and storage resources to do so), then let us -know. - -@node Porting -@section Porting to a New Platform - -As discussed above, the GNU distribution is self-contained, and -self-containment is achieved by relying on pre-built ``bootstrap -binaries'' (@pxref{Bootstrapping}). These binaries are specific to an -operating system kernel, CPU architecture, and application binary -interface (ABI). Thus, to port the distribution to a platform that is -not yet supported, one must build those bootstrap binaries, and update -the @code{(gnu packages bootstrap)} module to use them on that platform. - -Fortunately, Guix can @emph{cross compile} those bootstrap binaries. -When everything goes well, and assuming the GNU tool chain supports the -target platform, this can be as simple as running a command like this -one: - -@example -guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs -@end example - -Once these are built, the @code{(gnu packages bootstrap)} module needs -to be updated to refer to these binaries on the target platform. In -addition, the @code{glibc-dynamic-linker} procedure in that module must -be augmented to return the right file name for libc's dynamic linker on -that platform; likewise, @code{system->linux-architecture} in @code{(gnu -packages linux)} must be taught about the new platform. - -In practice, there may be some complications. First, it may be that the -extended GNU triplet that specifies an ABI (like the @code{eabi} suffix -above) is not recognized by all the GNU tools. Typically, glibc -recognizes some of these, whereas GCC uses an extra @code{--with-abi} -configure flag (see @code{gcc.scm} for examples of how to handle this). -Second, some of the required packages could fail to build for that -platform. Lastly, the generated binaries could be broken for some -reason. - - @node System Configuration @section System Configuration @@ -3278,6 +2847,8 @@ instance to support new system services. * File Systems:: Configuring file system mounts. * User Accounts:: Specifying user accounts. * Services:: Specifying system services. +* Setuid Programs:: Programs running with root privileges. +* Initial RAM Disk:: Linux-Libre bootstrapping. * Invoking guix system:: Instantiating a system configuration. * Defining Services:: Adding new service definitions. @end menu @@ -3690,6 +3261,123 @@ password. When @var{auto-login?} is true, log in automatically as @end deffn +@node Setuid Programs +@subsection Setuid Programs + +@cindex setuid programs +Some programs need to run with ``root'' privileges, even when they are +launched by unprivileged users. A notorious example is the +@command{passwd} programs, which can users can run to change their +password, and which requires write access to the @file{/etc/passwd} and +@file{/etc/shadow} files---something normally restricted to root, for +obvious security reasons. To address that, these executables are +@dfn{setuid-root}, meaning that they always run with root privileges +(@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual}, +for more info about the setuid mechanisms.) + +The store itself @emph{cannot} contain setuid programs: that would be a +security issue since any user on the system can write derivations that +populate the store (@pxref{The Store}). Thus, a different mechanism is +used: instead of changing the setuid bit directly on files that are in +the store, we let the system administrator @emph{declare} which programs +should be setuid root. + +The @code{setuid-programs} field of an @code{operating-system} +declaration contains a list of G-expressions denoting the names of +programs to be setuid-root (@pxref{Using the Configuration System}). +For instance, the @command{passwd} program, which is part of the Shadow +package, can be designated by this G-expression (@pxref{G-Expressions}): + +@example +#~(string-append #$shadow "/bin/passwd") +@end example + +A default set of setuid programs is defined by the +@code{%setuid-programs} variable of the @code{(gnu system)} module. + +@defvr {Scheme Variable} %setuid-programs +A list of G-expressions denoting common programs that are setuid-root. + +The list includes commands such as @command{passwd}, @command{ping}, +@command{su}, and @command{sudo}. +@end defvr + +Under the hood, the actual setuid programs are created in the +@file{/run/setuid-programs} directory at system activation time. The +files in this directory refer to the ``real'' binaries, which are in the +store. + + +@node Initial RAM Disk +@subsection Initial RAM Disk + +@cindex initial RAM disk (initrd) +@cindex initrd (initial RAM disk) +For bootstrapping purposes, the Linux-Libre kernel is passed an +@dfn{initial RAM disk}, or @dfn{initrd}. An initrd contains a temporary +root file system, as well as an initialization script. The latter is +responsible for mounting the real root file system, and for loading any +kernel modules that may be needed to achieve that. + +The @code{initrd} field of an @code{operating-system} declaration allows +you to specify which initrd you would like to use. The @code{(gnu +system linux-initrd)} module provides two ways to build an initrd: the +high-level @code{base-initrd} procedure, and the low-level +@code{expression->initrd} procedure. + +The @code{base-initrd} procedure is intended to cover most common uses. +For example, if you want to add a bunch of kernel modules to be loaded +at boot time, you can define the @code{initrd} field of the operating +system declaration like this: + +@example +(initrd (cut base-init <> + #:extra-modules '("my.ko" "modules.ko"))) +@end example + +It also handles common use cases that involves using the system as a +QEMU guest, or as a ``live'' system whose root file system is volatile. + +@deffn {Monadic Procedure} base-initrd @var{file-systems} @ + [#:qemu-networking? #f] [#:virtio? #f] [#:volatile-root? #f] @ + [#:extra-modules '()] +Return a monadic derivation that builds a generic initrd. @var{file-systems} is +a list of file-systems to be mounted by the initrd, possibly in addition to +the root file system specified on the kernel command line via @code{--root}. + +When @var{qemu-networking?} is true, set up networking with the standard QEMU +parameters. When @var{virtio?} is true, load additional modules so the initrd can +be used as a QEMU guest with para-virtualized I/O drivers. + +When @var{volatile-root?} is true, the root file system is writable but any changes +to it are lost. + +The initrd is automatically populated with all the kernel modules necessary +for @var{file-systems} and for the given options. However, additional kernel +modules can be listed in @var{extra-modules}. They will be added to the initrd, and +loaded at boot time in the order in which they appear. +@end deffn + +Needless to say, the initrds we produce and use embed a +statically-linked Guile, and the initialization program is a Guile +program. That gives a lot of flexibility. The +@code{expression->initrd} procedure builds such an initrd, given the +program to run in that initrd. + +@deffn {Monadic Procedure} expression->initrd @var{exp} @ + [#:guile %guile-static-stripped] [#:name "guile-initrd"] @ + [#:modules '()] [#:to-copy '()] [#:linux #f] @ + [#:linux-modules '()] +Return a derivation that builds a Linux initrd (a gzipped cpio archive) +containing @var{guile} and that evaluates @var{exp}, a G-expression, +upon booting. + +@var{linux-modules} is a list of @file{.ko} file names to be copied from +@var{linux} into the initrd. @var{to-copy} is a list of additional +derivations or packages to copy to the initrd. @var{modules} is a list +of Guile module names to be embedded in the initrd. +@end deffn + @node Invoking guix system @subsection Invoking @code{guix system} @@ -3846,6 +3534,472 @@ on-line documentation. Thus, the commands @command{deco start ncsd}, would expect (@pxref{Invoking deco,,, dmd, GNU dmd Manual}). +@node Installing Debugging Files +@section Installing Debugging Files + +@cindex debugging files +Program binaries, as produced by the GCC compilers for instance, are +typically written in the ELF format, with a section containing +@dfn{debugging information}. Debugging information is what allows the +debugger, GDB, to map binary code to source code; it is required to +debug a compiled program in good conditions. + +The problem with debugging information is that is takes up a fair amount +of disk space. For example, debugging information for the GNU C Library +weighs in at more than 60 MiB. Thus, as a user, keeping all the +debugging info of all the installed programs is usually not an option. +Yet, space savings should not come at the cost of an impediment to +debugging---especially in the GNU system, which should make it easier +for users to exert their computing freedom (@pxref{GNU Distribution}). + +Thankfully, the GNU Binary Utilities (Binutils) and GDB provide a +mechanism that allows users to get the best of both worlds: debugging +information can be stripped from the binaries and stored in separate +files. GDB is then able to load debugging information from those files, +when they are available (@pxref{Separate Debug Files,,, gdb, Debugging +with GDB}). + +The GNU distribution takes advantage of this by storing debugging +information in the @code{lib/debug} sub-directory of a separate package +output unimaginatively called @code{debug} (@pxref{Packages with +Multiple Outputs}). Users can choose to install the @code{debug} output +of a package when they need it. For instance, the following command +installs the debugging information for the GNU C Library and for GNU +Guile: + +@example +guix package -i glibc:debug guile:debug +@end example + +GDB must then be told to look for debug files in the user's profile, by +setting the @code{debug-file-directory} variable (consider setting it +from the @file{~/.gdbinit} file, @pxref{Startup,,, gdb, Debugging with +GDB}): + +@example +(gdb) set debug-file-directory ~/.guix-profile/lib/debug +@end example + +From there on, GDB will pick up debugging information from the +@code{.debug} files under @file{~/.guix-profile/lib/debug}. + +In addition, you will most likely want GDB to be able to show the source +code being debugged. To do that, you will have to unpack the source +code of the package of interest (obtained with @code{guix build +--source}, @pxref{Invoking guix build}), and to point GDB to that source +directory using the @code{directory} command (@pxref{Source Path, +@code{directory},, gdb, Debugging with GDB}). + +@c XXX: keep me up-to-date +The @code{debug} output mechanism in Guix is implemented by the +@code{gnu-build-system} (@pxref{Build Systems}). Currently, it is +opt-in---debugging information is available only for those packages +whose definition explicitly declares a @code{debug} output. This may be +changed to opt-out in the future, if our build farm servers can handle +the load. To check whether a package has a @code{debug} output, use +@command{guix package --list-available} (@pxref{Invoking guix package}). + + +@node Package Modules +@section Package Modules + +From a programming viewpoint, the package definitions of the +GNU distribution are provided by Guile modules in the @code{(gnu packages +@dots{})} name space@footnote{Note that packages under the @code{(gnu +packages @dots{})} module name space are not necessarily ``GNU +packages''. This module naming scheme follows the usual Guile module +naming convention: @code{gnu} means that these modules are distributed +as part of the GNU system, and @code{packages} identifies modules that +define packages.} (@pxref{Modules, Guile modules,, guile, GNU Guile +Reference Manual}). For instance, the @code{(gnu packages emacs)} +module exports a variable named @code{emacs}, which is bound to a +@code{<package>} object (@pxref{Defining Packages}). + +The @code{(gnu packages @dots{})} module name space is special: it is +automatically scanned for packages by the command-line tools. For +instance, when running @code{guix package -i emacs}, all the @code{(gnu +packages @dots{})} modules are scanned until one that exports a package +object whose name is @code{emacs} is found. This package search +facility is implemented in the @code{(gnu packages)} module. + +Users can store package definitions in modules with different +names---e.g., @code{(my-packages emacs)}. In that case, commands such +as @command{guix package} and @command{guix build} have to be used with +the @code{-e} option so that they know where to find the package. + +The distribution is fully @dfn{bootstrapped} and @dfn{self-contained}: +each package is built based solely on other packages in the +distribution. The root of this dependency graph is a small set of +@dfn{bootstrap binaries}, provided by the @code{(gnu packages +bootstrap)} module. For more information on bootstrapping, +@ref{Bootstrapping}. + +@node Packaging Guidelines +@section Packaging Guidelines + +The GNU distribution is nascent and may well lack some of your favorite +packages. This section describes how you can help make the distribution +grow. @xref{Contributing}, for additional information on how you can +help. + +Free software packages are usually distributed in the form of +@dfn{source code tarballs}---typically @file{tar.gz} files that contain +all the source files. Adding a package to the distribution means +essentially two things: adding a @dfn{recipe} that describes how to +build the package, including a list of other packages required to build +it, and adding @dfn{package meta-data} along with that recipe, such as a +description and licensing information. + +In Guix all this information is embodied in @dfn{package definitions}. +Package definitions provide a high-level view of the package. They are +written using the syntax of the Scheme programming language; in fact, +for each package we define a variable bound to the package definition, +and export that variable from a module (@pxref{Package Modules}). +However, in-depth Scheme knowledge is @emph{not} a prerequisite for +creating packages. For more information on package definitions, +@ref{Defining Packages}. + +Once a package definition is in place, stored in a file in the Guix +source tree, it can be tested using the @command{guix build} command +(@pxref{Invoking guix build}). For example, assuming the new package is +called @code{gnew}, you may run this command from the Guix build tree: + +@example +./pre-inst-env guix build gnew --keep-failed +@end example + +Using @code{--keep-failed} makes it easier to debug build failures since +it provides access to the failed build tree. Another useful +command-line option when debugging is @code{--log-file}, to access the +build log. + +If the package is unknown to the @command{guix} command, it may be that +the source file contains a syntax error, or lacks a @code{define-public} +clause to export the package variable. To figure it out, you may load +the module from Guile to get more information about the actual error: + +@example +./pre-inst-env guile -c '(use-modules (gnu packages gnew))' +@end example + +Once your package builds correctly, please send us a patch +(@pxref{Contributing}). Well, if you need help, we will be happy to +help you too. Once the patch is committed in the Guix repository, the +new package automatically gets built on the supported platforms by +@url{http://hydra.gnu.org/gnu/master, our continuous integration +system}. + +@cindex substituter +Users can obtain the new package definition simply by running +@command{guix pull} (@pxref{Invoking guix pull}). When +@code{hydra.gnu.org} is done building the package, installing the +package automatically downloads binaries from there +(@pxref{Substitutes}). The only place where human intervention is +needed is to review and apply the patch. + + +@menu +* Software Freedom:: What may go into the distribution. +* Package Naming:: What's in a name? +* Version Numbers:: When the name is not enough. +* Python Modules:: Taming the snake. +* Perl Modules:: Little pearls. +@end menu + +@node Software Freedom +@subsection Software Freedom + +@c Adapted from http://www.gnu.org/philosophy/philosophy.html. + +The GNU operating system has been developed so that users can have +freedom in their computing. GNU is @dfn{free software}, meaning that +users have the @url{http://www.gnu.org/philosophy/free-sw.html,four +essential freedoms}: to run the program, to study and change the program +in source code form, to redistribute exact copies, and to distribute +modified versions. Packages found in the GNU distribution provide only +software that conveys these four freedoms. + +In addition, the GNU distribution follow the +@url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,free +software distribution guidelines}. Among other things, these guidelines +reject non-free firmware, recommendations of non-free software, and +discuss ways to deal with trademarks and patents. + +Some packages contain a small and optional subset that violates the +above guidelines, for instance because this subset is itself non-free +code. When that happens, the offending items are removed with +appropriate patches or code snippets in the package definition's +@code{origin} form (@pxref{Defining Packages}). That way, @code{guix +build --source} returns the ``freed'' source rather than the unmodified +upstream source. + + +@node Package Naming +@subsection Package Naming + +A package has actually two names associated with it: +First, there is the name of the @emph{Scheme variable}, the one following +@code{define-public}. By this name, the package can be made known in the +Scheme code, for instance as input to another package. Second, there is +the string in the @code{name} field of a package definition. This name +is used by package management commands such as +@command{guix package} and @command{guix build}. + +Both are usually the same and correspond to the lowercase conversion of +the project name chosen upstream, with underscores replaced with +hyphens. For instance, GNUnet is available as @code{gnunet}, and +SDL_net as @code{sdl-net}. + +We do not add @code{lib} prefixes for library packages, unless these are +already part of the official project name. But see @pxref{Python +Modules} and @ref{Perl Modules} for special rules concerning modules for +the Python and Perl languages. + + +@node Version Numbers +@subsection Version Numbers + +We usually package only the latest version of a given free software +project. But sometimes, for instance for incompatible library versions, +two (or more) versions of the same package are needed. These require +different Scheme variable names. We use the name as defined +in @ref{Package Naming} +for the most recent version; previous versions use the same name, suffixed +by @code{-} and the smallest prefix of the version number that may +distinguish the two versions. + +The name inside the package definition is the same for all versions of a +package and does not contain any version number. + +For instance, the versions 2.24.20 and 3.9.12 of GTK+ may be packaged as follows: + +@example +(define-public gtk+ + (package + (name "gtk+") + (version "3.9.12") + ...)) +(define-public gtk+-2 + (package + (name "gtk+") + (version "2.24.20") + ...)) +@end example +If we also wanted GTK+ 3.8.2, this would be packaged as +@example +(define-public gtk+-3.8 + (package + (name "gtk+") + (version "3.8.2") + ...)) +@end example + + +@node Python Modules +@subsection Python Modules + +We currently package Python 2 and Python 3, under the Scheme variable names +@code{python-2} and @code{python} as explained in @ref{Version Numbers}. +To avoid confusion and naming clashes with other programming languages, it +seems desirable that the name of a package for a Python module contains +the word @code{python}. + +Some modules are compatible with only one version of Python, others with both. +If the package Foo compiles only with Python 3, we name it +@code{python-foo}; if it compiles only with Python 2, we name it +@code{python2-foo}. If it is compatible with both versions, we create two +packages with the corresponding names. + +If a project already contains the word @code{python}, we drop this; +for instance, the module python-dateutil is packaged under the names +@code{python-dateutil} and @code{python2-dateutil}. + + +@node Perl Modules +@subsection Perl Modules + +Perl programs standing for themselves are named as any other package, +using the lowercase upstream name. +For Perl packages containing a single class, we use the lowercase class name, +replace all occurrences of @code{::} by dashes and prepend the prefix +@code{perl-}. +So the class @code{XML::Parser} becomes @code{perl-xml-parser}. +Modules containing several classes keep their lowercase upstream name and +are also prepended by @code{perl-}. Such modules tend to have the word +@code{perl} somewhere in their name, which gets dropped in favor of the +prefix. For instance, @code{libwww-perl} becomes @code{perl-libwww}. + + + +@node Bootstrapping +@section Bootstrapping + +@c Adapted from the ELS 2013 paper. + +@cindex bootstrapping + +Bootstrapping in our context refers to how the distribution gets built +``from nothing''. Remember that the build environment of a derivation +contains nothing but its declared inputs (@pxref{Introduction}). So +there's an obvious chicken-and-egg problem: how does the first package +get built? How does the first compiler get compiled? Note that this is +a question of interest only to the curious hacker, not to the regular +user, so you can shamelessly skip this section if you consider yourself +a ``regular user''. + +@cindex bootstrap binaries +The GNU system is primarily made of C code, with libc at its core. The +GNU build system itself assumes the availability of a Bourne shell and +command-line tools provided by GNU Coreutils, Awk, Findutils, `sed', and +`grep'. Furthermore, build programs---programs that run +@code{./configure}, @code{make}, etc.---are written in Guile Scheme +(@pxref{Derivations}). Consequently, to be able to build anything at +all, from scratch, Guix relies on pre-built binaries of Guile, GCC, +Binutils, libc, and the other packages mentioned above---the +@dfn{bootstrap binaries}. + +These bootstrap binaries are ``taken for granted'', though we can also +re-create them if needed (more on that later). + +@unnumberedsubsec Preparing to Use the Bootstrap Binaries + +@c As of Emacs 24.3, Info-mode displays the image, but since it's a +@c large image, it's hard to scroll. Oh well. +@image{images/bootstrap-graph,6in,,Dependency graph of the early bootstrap derivations} + +The figure above shows the very beginning of the dependency graph of the +distribution, corresponding to the package definitions of the @code{(gnu +packages bootstrap)} module. At this level of detail, things are +slightly complex. First, Guile itself consists of an ELF executable, +along with many source and compiled Scheme files that are dynamically +loaded when it runs. This gets stored in the @file{guile-2.0.7.tar.xz} +tarball shown in this graph. This tarball is part of Guix's ``source'' +distribution, and gets inserted into the store with @code{add-to-store} +(@pxref{The Store}). + +But how do we write a derivation that unpacks this tarball and adds it +to the store? To solve this problem, the @code{guile-bootstrap-2.0.drv} +derivation---the first one that gets built---uses @code{bash} as its +builder, which runs @code{build-bootstrap-guile.sh}, which in turn calls +@code{tar} to unpack the tarball. Thus, @file{bash}, @file{tar}, +@file{xz}, and @file{mkdir} are statically-linked binaries, also part of +the Guix source distribution, whose sole purpose is to allow the Guile +tarball to be unpacked. + +Once @code{guile-bootstrap-2.0.drv} is built, we have a functioning +Guile that can be used to run subsequent build programs. Its first task +is to download tarballs containing the other pre-built binaries---this +is what the @code{.tar.xz.drv} derivations do. Guix modules such as +@code{ftp-client.scm} are used for this purpose. The +@code{module-import.drv} derivations import those modules in a directory +in the store, using the original layout. The +@code{module-import-compiled.drv} derivations compile those modules, and +write them in an output directory with the right layout. This +corresponds to the @code{#:modules} argument of +@code{build-expression->derivation} (@pxref{Derivations}). + +Finally, the various tarballs are unpacked by the +derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, +etc., at which point we have a working C tool chain. + + +@unnumberedsubsec Building the Build Tools + +@c TODO: Add a package-level dependency graph generated from (gnu +@c packages base). + +Bootstrapping is complete when we have a full tool chain that does not +depend on the pre-built bootstrap tools discussed above. This +no-dependency requirement is verified by checking whether the files of +the final tool chain contain references to the @file{/gnu/store} +directories of the bootstrap inputs. The process that leads to this +``final'' tool chain is described by the package definitions found in +the @code{(gnu packages base)} module. + +@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>. +The first tool that gets built with the bootstrap binaries is +GNU Make, which is a prerequisite for all the following packages. +From there Findutils and Diffutils get built. + +Then come the first-stage Binutils and GCC, built as pseudo cross +tools---i.e., with @code{--target} equal to @code{--host}. They are +used to build libc. Thanks to this cross-build trick, this libc is +guaranteed not to hold any reference to the initial tool chain. + +From there the final Binutils and GCC are built. GCC uses @code{ld} +from the final Binutils, and links programs against the just-built libc. +This tool chain is used to build the other packages used by Guix and by +the GNU Build System: Guile, Bash, Coreutils, etc. + +And voilà! At this point we have the complete set of build tools that +the GNU Build System expects. These are in the @code{%final-inputs} +variables of the @code{(gnu packages base)} module, and are implicitly +used by any package that uses @code{gnu-build-system} (@pxref{Defining +Packages}). + + +@unnumberedsubsec Building the Bootstrap Binaries + +Because the final tool chain does not depend on the bootstrap binaries, +those rarely need to be updated. Nevertheless, it is useful to have an +automated way to produce them, should an update occur, and this is what +the @code{(gnu packages make-bootstrap)} module provides. + +The following command builds the tarballs containing the bootstrap +binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture +of Coreutils and other basic command-line tools): + +@example +guix build bootstrap-tarballs +@end example + +The generated tarballs are those that should be referred to in the +@code{(gnu packages bootstrap)} module mentioned at the beginning of +this section. + +Still here? Then perhaps by now you've started to wonder: when do we +reach a fixed point? That is an interesting question! The answer is +unknown, but if you would like to investigate further (and have +significant computational and storage resources to do so), then let us +know. + +@node Porting +@section Porting to a New Platform + +As discussed above, the GNU distribution is self-contained, and +self-containment is achieved by relying on pre-built ``bootstrap +binaries'' (@pxref{Bootstrapping}). These binaries are specific to an +operating system kernel, CPU architecture, and application binary +interface (ABI). Thus, to port the distribution to a platform that is +not yet supported, one must build those bootstrap binaries, and update +the @code{(gnu packages bootstrap)} module to use them on that platform. + +Fortunately, Guix can @emph{cross compile} those bootstrap binaries. +When everything goes well, and assuming the GNU tool chain supports the +target platform, this can be as simple as running a command like this +one: + +@example +guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs +@end example + +Once these are built, the @code{(gnu packages bootstrap)} module needs +to be updated to refer to these binaries on the target platform. In +addition, the @code{glibc-dynamic-linker} procedure in that module must +be augmented to return the right file name for libc's dynamic linker on +that platform; likewise, @code{system->linux-architecture} in @code{(gnu +packages linux)} must be taught about the new platform. + +In practice, there may be some complications. First, it may be that the +extended GNU triplet that specifies an ABI (like the @code{eabi} suffix +above) is not recognized by all the GNU tools. Typically, glibc +recognizes some of these, whereas GCC uses an extra @code{--with-abi} +configure flag (see @code{gcc.scm} for examples of how to handle this). +Second, some of the required packages could fail to build for that +platform. Lastly, the generated binaries could be broken for some +reason. + + @c ********************************************************************* @node Contributing @chapter Contributing diff --git a/gnu-system.am b/gnu-system.am index 22bb4ef70d..7d2fbcce89 100644 --- a/gnu-system.am +++ b/gnu-system.am @@ -297,7 +297,6 @@ dist_patch_DATA = \ gnu/packages/patches/doxygen-tmake.patch \ gnu/packages/patches/emacs-configure-sh.patch \ gnu/packages/patches/findutils-absolute-paths.patch \ - gnu/packages/patches/flac-fix-memcmp-not-declared.patch \ gnu/packages/patches/flex-bison-tests.patch \ gnu/packages/patches/gawk-shell.patch \ gnu/packages/patches/gcc-cross-environment-variables.patch \ diff --git a/gnu/packages/docbook.scm b/gnu/packages/docbook.scm index 29fa409a8c..c689c9c81d 100644 --- a/gnu/packages/docbook.scm +++ b/gnu/packages/docbook.scm @@ -50,8 +50,12 @@ (dtd (string-append out "/xml/dtd/docbook"))) (mkdir-p dtd) (with-directory-excursion dtd - (system* unzip source)))) - #:modules ((guix build utils)))) + (system* unzip source)) + (substitute* (string-append out "/xml/dtd/docbook/catalog.xml") + (("uri=\"") + (string-append + "uri=\"file://" dtd "/"))))) + #:modules ((guix build utils)))) (native-inputs `(("unzip" ,unzip))) (home-page "http://docbook.org") (synopsis "DocBook XML DTDs for document authoring") @@ -61,20 +65,42 @@ suited to books and papers about computer hardware and software (though it is by no means limited to these applications.) This package provides XML DTDs.") (license (x11-style "" "See file headers.")))) +(define-public docbook-xml-4.4 + (package (inherit docbook-xml) + (version "4.4") + (source (origin + (method url-fetch) + (uri (string-append "http://www.docbook.org/xml/" version + "/docbook-xml-" version ".zip")) + (sha256 + (base32 + "141h4zsyc71sfi2zzd89v4bb4qqq9ca1ri9ix2als9f4i3mmkw82")))))) + +(define-public docbook-xml-4.3 + (package (inherit docbook-xml) + (version "4.3") + (source (origin + (method url-fetch) + (uri (string-append "http://www.docbook.org/xml/" version + "/docbook-xml-" version ".zip")) + (sha256 + (base32 + "0r1l2if1z4wm2v664sqdizm4gak6db1kx9y50jq89m3gxaa8l1i3")))))) + (define-public docbook-xsl (package (name "docbook-xsl") - (version "1.72.0") + (version "1.78.1") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/docbook/docbook-xsl-" version ".tar.bz2")) (sha256 (base32 - "1cnrfgqz8pc9wnlgqjch2338ad7jki6d4h6b2fhaxn1a2201df5k")))) + "0rxl013ncmz1n6ymk2idvx3hix9pdabk8xn01cpcv32wmfb753y9")))) (build-system trivial-build-system) (arguments - `(#:builder (begin + `(#:builder (let ((name-version (string-append ,name "-" ,version))) (use-modules (guix build utils)) (let* ((bzip2 (assoc-ref %build-inputs "bzip2")) @@ -86,10 +112,13 @@ by no means limited to these applications.) This package provides XML DTDs.") (system* (string-append tar "/bin/tar") "xvf" source) (mkdir-p xsl) - (copy-recursively (string-append ,name "-" ,version) - (string-append xsl "/" ,name - "-" ,version)))) - #:modules ((guix build utils)))) + (copy-recursively name-version + (string-append xsl "/" name-version)) + + (substitute* (string-append xsl "/" name-version "/catalog.xml") + (("rewritePrefix=\"./") + (string-append "rewritePrefix=\"file://" xsl "/" name-version "/"))))) + #:modules ((guix build utils)))) (native-inputs `(("bzip2" ,bzip2) ("tar" ,tar))) (home-page "http://docbook.org") diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm index a043d8d4d2..893c3e8a6b 100644 --- a/gnu/packages/gnome.scm +++ b/gnu/packages/gnome.scm @@ -26,6 +26,7 @@ #:use-module (gnu packages) #:use-module (gnu packages bison) #:use-module (gnu packages flex) + #:use-module (gnu packages docbook) #:use-module (gnu packages glib) #:use-module (gnu packages gnupg) #:use-module (gnu packages gstreamer) @@ -136,14 +137,24 @@ The gnome-about program helps find which version of GNOME is installed.") (base32 "19n4x25ndzngaciiyd8dd6s2mf9gv6nv3wv27ggns2smm7zkj1nb")))) (build-system gnu-build-system) + (arguments + `(#:phases + (alist-cons-before + 'check 'pre-check + (lambda* (#:key inputs #:allow-other-keys #:rest args) + ;; This is needed, because without it, xmlint etc tries + ;; to download docbookx.dtd from the net + (setenv "XML_CATALOG_FILES" + (string-append (assoc-ref inputs "docbook-xml") + "/xml/dtd/docbook/catalog.xml"))) + %standard-phases))) (native-inputs `(("intltool" ,intltool) + ("docbook-xml" ,docbook-xml-4.4) ("libxml2" ,libxml2) ("libxslt" ,libxslt) ("pkg-config" ,pkg-config) ("python-2" ,python-2))) - (arguments - `(#:tests? #f)) ; tries to load http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd (home-page "https://wiki.gnome.org/GnomeDocUtils") (synopsis "Documentation utilities for the Gnome project") diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index d33492a1af..b9864f4f44 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -1187,10 +1187,15 @@ system.") "0c34b0za2v0934acvgnva0vaqpghmmhz4zh7k0m9jd4mbc91byqm")) (modules '((guix build utils))) (snippet - '(substitute* "tests/Makefile.in" - ;; The '%: %.in' rule incorrectly uses @VERSION@. - (("@VERSION@") - "[@]VERSION[@]"))))) + '(begin + (substitute* "tests/Makefile.in" + ;; The '%: %.in' rule incorrectly uses @VERSION@. + (("@VERSION@") + "[@]VERSION[@]")) + (substitute* '("src/unicode_start" "src/unicode_stop") + ;; Assume the Coreutils are in $PATH. + (("/usr/bin/tty") + "tty")))))) (build-system gnu-build-system) (arguments '(#:phases (alist-cons-before @@ -1203,7 +1208,17 @@ system.") (string-append gzip "/bin/gzip")) (("bzip2") (string-append bzip2 "/bin/bzip2"))))) - %standard-phases))) + (alist-cons-after + 'install 'post-install + (lambda* (#:key outputs #:allow-other-keys) + ;; Make sure these programs find their comrades. + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin"))) + (for-each (lambda (prog) + (wrap-program (string-append bin "/" prog) + `("PATH" ":" prefix (,bin)))) + '("unicode_start" "unicode_stop")))) + %standard-phases)))) (inputs `(("check" ,check) ("gzip" ,guix:gzip) ("bzip2" ,guix:bzip2) diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm index 5ab537aa8a..cf808970ce 100644 --- a/gnu/packages/package-management.scm +++ b/gnu/packages/package-management.scm @@ -111,7 +111,7 @@ Nix package manager.") (define-public guix ;; Development version of Guix. - (let ((commit "20b1d19")) + (let ((commit "0ae8c15")) (package (inherit guix-0.6) (version (string-append "0.6." commit)) (source (origin @@ -122,7 +122,7 @@ Nix package manager.") (recursive? #t))) (sha256 (base32 - "0n278kzp586rzbhcghbj7am641yjc35pcb6n1r304myziwd0mz6r")))) + "1y6mwzwsjdxbfibqypb55dix371rifhfz0bygfr8k868lcdsawic")))) (arguments (substitute-keyword-arguments (package-arguments guix-0.6) ((#:phases phases) diff --git a/gnu/packages/patches/flac-fix-memcmp-not-declared.patch b/gnu/packages/patches/flac-fix-memcmp-not-declared.patch deleted file mode 100644 index 9dd5c81ba5..0000000000 --- a/gnu/packages/patches/flac-fix-memcmp-not-declared.patch +++ /dev/null @@ -1,13 +0,0 @@ -See http://sourceforge.net/p/flac/bugs/364/ - -diff -Naur flac-1.2.1-orig/examples/cpp/encode/file/main.cpp flac-1.2.1-ae/examples/cpp/encode/file/main.cpp ---- flac-1.2.1-orig/examples/cpp/encode/file/main.cpp 2012-12-27 20:15:11.000000000 +0100 -+++ flac-1.2.1-ae/examples/cpp/encode/file/main.cpp 2012-12-27 20:25:01.000000000 +0100 -@@ -30,6 +30,7 @@ - - #include <stdio.h> - #include <stdlib.h> -+#include <string.h> - #include "FLAC++/metadata.h" - #include "FLAC++/encoder.h" - diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm index 9946b3adcf..075113ca9d 100644 --- a/gnu/packages/video.scm +++ b/gnu/packages/video.scm @@ -56,14 +56,14 @@ (define-public ffmpeg (package (name "ffmpeg") - (version "2.2.1") + (version "2.3") (source (origin (method url-fetch) (uri (string-append "http://www.ffmpeg.org/releases/ffmpeg-" version ".tar.bz2")) (sha256 (base32 - "153kfk8rzrfxx930rrk417b2m695dvy47v4hci3nd49iggx9jzz1")))) + "17l0bx95al6cjhz3pzfcbwg07sbfbwqbxg34zl5lhl89w9jbngbb")))) (build-system gnu-build-system) (inputs `(("fontconfig" ,fontconfig) diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm index 6e94953bfe..4bf714bfe7 100644 --- a/gnu/packages/web.scm +++ b/gnu/packages/web.scm @@ -528,25 +528,19 @@ help you implement simple HTTP servers.") (alist-cons-before 'build 'pre-build (lambda* (#:key inputs #:allow-other-keys #:rest args) - ;; This stuff is needed, because without it, xmlint etc tries - ;; to download docbookx.dtd and docbook.xsl from the net - (let ((build (assoc-ref %standard-phases 'build)) - (docbook-xml (assoc-ref inputs "docbook-xml")) - (docbook-xsl (assoc-ref inputs "docbook-xsl")) - (our-catalog "/tmp/docbook-xml.xml")) - (setenv "XML_CATALOG_FILES" our-catalog) - (with-output-to-file our-catalog - (lambda () - (display (string-append - "<?xml version=\"1.0\"?> -<!DOCTYPE catalog PUBLIC \"-//OASIS//DTD XML Catalogs V1.0//EN\" -\"file:///usr/share/xml/schema/xml-core/catalog.dtd\"> -<catalog xmlns=\"urn:oasis:names:tc:entity:xmlns:xml:catalog\"> -<system systemId=\"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd\" -uri=\"file://" docbook-xml "/xml/dtd/docbook/docbookx.dtd\"/> -<system systemId=\"http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl\" -uri=\"file://" docbook-xsl "/xml/xsl/docbook-xsl-1.72.0/manpages/docbook.xsl\"/> -</catalog>\n")))))) + ;; Uncommenting the next two lines may assist in debugging + ;; (substitute* "docs/man5/Makefile" (("a2x") "a2x -v")) + ;; (setenv "XML_DEBUG_CATALOG" "1") + + (setenv "XML_CATALOG_FILES" + (string-append + (assoc-ref inputs "docbook-xsl") + "/xml/xsl/docbook-xsl-1.78.1/catalog.xml" + ;; Contrary to the documentation, the file names must + ;; be separated by a space, not a colon. + " " + (assoc-ref inputs "docbook-xml") + "/xml/dtd/docbook/catalog.xml"))) %standard-phases))) ;; All of the below are used to generate the documentation ;; (Should they be propagated inputs of asciidoc ??) diff --git a/gnu/packages/xiph.scm b/gnu/packages/xiph.scm index 03cf0e49d2..8259be3f7d 100644 --- a/gnu/packages/xiph.scm +++ b/gnu/packages/xiph.scm @@ -49,14 +49,14 @@ (define libogg (package (name "libogg") - (version "1.3.0") + (version "1.3.2") (source (origin (method url-fetch) (uri (string-append "http://downloads.xiph.org/releases/ogg/libogg-" version ".tar.xz")) (sha256 (base32 - "0jy79ffkl34vycnwfsj4svqsdg1lwy2l1rr49y8r4d44kh12a5r3")))) + "16z74q422jmprhyvy7c9x909li8cqzmvzyr8cgbm52xcsp6pqs1z")))) (build-system gnu-build-system) (synopsis "libogg, a library for manipulating the ogg multimedia format") (description @@ -72,14 +72,14 @@ periodic timestamps for seeking.") (define libvorbis (package (name "libvorbis") - (version "1.3.3") + (version "1.3.4") (source (origin (method url-fetch) (uri (string-append "http://downloads.xiph.org/releases/vorbis/libvorbis-" version ".tar.xz")) (sha256 (base32 - "1gby6hapz9njx4l9g0pndyk4q83z5fgrgc30mfwfgx7bllspsk43")))) + "0wpk87jnhngcl3nc5i39flkycx1sjzilx8jjx4zc4p8r55ylj19g")))) (build-system gnu-build-system) (propagated-inputs `(("libogg" ,libogg))) (arguments `(#:configure-flags '("LDFLAGS=-lm") @@ -192,16 +192,14 @@ OpenBSD's sndio.") (define flac (package (name "flac") - (version "1.2.1") + (version "1.3.0") (source (origin (method url-fetch) (uri (string-append "http://downloads.xiph.org/releases/flac/flac-" - version ".tar.gz")) + version ".tar.xz")) (sha256 (base32 - "1pry5lgzfg57pga1zbazzdd55fkgk3v5qy4axvrbny5lrr5s8dcn")) - (patches - (list (search-patch "flac-fix-memcmp-not-declared.patch"))))) + "1p0hh190kqvpkbk1bbajd81jfbmkyl4fn2i7pggk2zppq6m68bgs")))) (build-system gnu-build-system) (arguments `(#:parallel-tests? #f diff --git a/gnu/services/base.scm b/gnu/services/base.scm index acda08d19a..55ee5c4b08 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -25,7 +25,7 @@ #:use-module (gnu system linux) ; 'pam-service', etc. #:use-module (gnu packages admin) #:use-module ((gnu packages linux) - #:select (udev)) + #:select (udev kbd)) #:use-module ((gnu packages base) #:select (glibc-final)) #:use-module (gnu packages package-management) @@ -38,6 +38,7 @@ file-system-service user-processes-service host-name-service + console-font-service udev-service mingetty-service nscd-service @@ -199,6 +200,50 @@ stopped before 'kill' is called." (sethostname #$name))) (respawn? #f))))) +(define (unicode-start tty) + "Return a gexp to start Unicode support on @var{tty}." + + ;; We have to run 'unicode_start' in a pipe so that when it invokes the + ;; 'tty' command, that command returns TTY. + #~(begin + (let ((pid (primitive-fork))) + (case pid + ((0) + (close-fdes 0) + (dup2 (open-fdes #$tty O_RDONLY) 0) + (close-fdes 1) + (dup2 (open-fdes #$tty O_WRONLY) 1) + (execl (string-append #$kbd "/bin/unicode_start") + "unicode_start")) + (else + (zero? (cdr (waitpid pid)))))))) + +(define* (console-font-service tty #:optional (font "LatGrkCyr-8x16")) + "Return a service that sets up Unicode support in @var{tty} and loads +@var{font} for that tty (fonts are per virtual console in Linux.)" + ;; Note: 'LatGrkCyr-8x16' has the advantage of providing three common + ;; scripts as well as glyphs for em dash, quotation marks, and other Unicode + ;; codepoints notably found in the UTF-8 manual. + (let ((device (string-append "/dev/" tty))) + (with-monad %store-monad + (return (service + (documentation "Load a Unicode console font.") + (provision (list (symbol-append 'console-font- + (string->symbol tty)))) + + ;; Start after mingetty has been started on TTY, otherwise the + ;; settings are ignored. + (requirement (list (symbol-append 'term- + (string->symbol tty)))) + + (start #~(lambda _ + (and #$(unicode-start device) + (zero? + (system* (string-append #$kbd "/bin/setfont") + "-C" #$device #$font))))) + (stop #~(const #t)) + (respawn? #f)))))) + (define* (mingetty-service tty #:key (motd (text-file "motd" "Welcome.\n")) @@ -290,7 +335,7 @@ the ``message of the day''." # level notice or higher and anything of level err or # higher to the console. # Don't log private authentication messages! - *.err;auth.notice;authpriv.none /dev/console + *.alert;auth.notice;authpriv.none /dev/console # Log anything (except mail) of level info or higher. # Don't log private authentication messages! @@ -469,7 +514,14 @@ passed to @command{guix-daemon}." ;; Convenience variable holding the basic services. (let ((motd (text-file "motd" " This is the GNU operating system, welcome!\n\n"))) - (list (mingetty-service "tty1" #:motd motd) + (list (console-font-service "tty1") + (console-font-service "tty2") + (console-font-service "tty3") + (console-font-service "tty4") + (console-font-service "tty5") + (console-font-service "tty6") + + (mingetty-service "tty1" #:motd motd) (mingetty-service "tty2" #:motd motd) (mingetty-service "tty3" #:motd motd) (mingetty-service "tty4" #:motd motd) diff --git a/gnu/system.scm b/gnu/system.scm index 82397be3a3..20942ec7f0 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -222,7 +222,12 @@ explicitly appear in OS." lsof ;for Guix's 'list-runtime-roots' util-linux inetutils isc-dhcp net-tools ; XXX: remove when Inetutils suffices - module-init-tools udev kbd + + ;; Get 'insmod' & co. from kmod, not module-init-tools, since udev + ;; already depends on it anyway. + kmod udev + + e2fsprogs kbd ;; The packages below are also in %FINAL-INPUTS, so take them from ;; there to avoid duplication. diff --git a/gnu/system/install.scm b/gnu/system/install.scm index b30c5577e4..07e8938ba0 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -40,7 +40,7 @@ manual." #~(execl (string-append #$texinfo-4 "/bin/info") "info" "-d" "/run/current-system/profile/share/info" "-f" (string-append #$guix "/share/info/guix.info") - "-n" "System Configuration"))) + "-n" "System Installation"))) (define (installation-services) "Return the list services for the installation image." @@ -63,7 +63,9 @@ You have been warned. Thanks for being so brave. #:motd motd #:auto-login "root") - ;; Documentation. + ;; Documentation. The manual is in UTF-8, but + ;; 'console-font-service' sets up Unicode support and loads a font + ;; with all the useful glyphs like em dash and quotation marks. (mingetty-service "tty2" #:motd motd #:auto-login "guest" @@ -86,6 +88,14 @@ You have been warned. Thanks for being so brave. ;; Start udev so that useful device nodes are available. (udev-service) + ;; Install Unicode support and a suitable font. + (console-font-service "tty1") + (console-font-service "tty2") + (console-font-service "tty3") + (console-font-service "tty4") + (console-font-service "tty5") + (console-font-service "tty6") + (nscd-service)))) (define %issue diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm index afbfc692d3..9e39f2d663 100644 --- a/gnu/system/linux-initrd.scm +++ b/gnu/system/linux-initrd.scm @@ -57,11 +57,13 @@ (to-copy '()) (linux #f) (linux-modules '())) - "Return a package that contains a Linux initrd (a gzipped cpio archive) -containing GUILE and that evaluates EXP upon booting. LINUX-MODULES is a list -of `.ko' file names to be copied from LINUX into the initrd. TO-COPY is a -list of additional derivations or packages to copy to the initrd. MODULES is -a list of Guile module names to be embedded in the initrd." + "Return a derivation that builds a Linux initrd (a gzipped cpio archive) +containing GUILE and that evaluates EXP, a G-expression, upon booting. + +LINUX-MODULES is a list of '.ko' file names to be copied from LINUX into the +initrd. TO-COPY is a list of additional derivations or packages to copy to +the initrd. MODULES is a list of Guile module names to be embedded in the +initrd." ;; General Linux overview in `Documentation/early-userspace/README' and ;; `Documentation/filesystems/ramfs-rootfs-initramfs.txt'. diff --git a/guix/gexp.scm b/guix/gexp.scm index 7d6a882787..c9f6cbe99a 100644 --- a/guix/gexp.scm +++ b/guix/gexp.scm @@ -60,7 +60,12 @@ (define (write-gexp gexp port) "Write GEXP on PORT." (display "#<gexp " port) - (write (apply (gexp-proc gexp) (gexp-references gexp)) port) + + ;; Try to write the underlying sexp. Now, this trick doesn't work when + ;; doing things like (ungexp-splicing (gexp ())) because GEXP's procedure + ;; tries to use 'append' on that, which fails with wrong-type-arg. + (false-if-exception + (write (apply (gexp-proc gexp) (gexp-references gexp)) port)) (format port " ~a>" (number->string (object-address gexp) 16))) @@ -377,7 +382,8 @@ its search path." (gexp (call-with-output-file (ungexp output) (lambda (port) - (write '(ungexp exp) port)))))) + (write '(ungexp exp) port)))) + #:local-build? #t)) diff --git a/guix/records.scm b/guix/records.scm index 37d34b4c81..cd887b77ce 100644 --- a/guix/records.scm +++ b/guix/records.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -34,6 +34,14 @@ ;;; ;;; Code: +(define-syntax record-error + (syntax-rules () + "Report a syntactic error in use of CONSTRUCTOR." + ((_ constructor form fmt args ...) + (syntax-violation constructor + (format #f fmt args ...) + form)))) + (define-syntax define-record-type* (lambda (s) "Define the given record type such that an additional \"syntactic @@ -61,6 +69,14 @@ thunked fields." field+value) car)) + ;; Make sure there are no unknown field names. + (let* ((fields (map (compose car syntax->datum) + field+value)) + (unexpected (lset-difference eq? fields 'expected))) + (when (pair? unexpected) + (record-error 'name s "extraneous field initializers ~a" + unexpected))) + #`(make-struct type 0 #,@(map (lambda (field index) (or (field-inherited-value field) @@ -107,25 +123,21 @@ thunked fields." #`(lambda () #,value) value)))) - (let-syntax ((error* - (syntax-rules () - ((_ fmt args (... ...)) - (syntax-violation 'name - (format #f fmt args - (... ...)) - s))))) - (let ((fields (append fields (map car dflt)))) - (cond ((lset= eq? fields 'expected) - #`(let* #,(field-bindings - #'((field value) (... ...))) - (ctor #,@(map field-value 'expected)))) - ((pair? (lset-difference eq? fields 'expected)) - (error* "extraneous field initializers ~a" - (lset-difference eq? fields 'expected))) - (else - (error* "missing field initializers ~a" - (lset-difference eq? 'expected - fields))))))))))))) + (let ((fields (append fields (map car dflt)))) + (cond ((lset= eq? fields 'expected) + #`(let* #,(field-bindings + #'((field value) (... ...))) + (ctor #,@(map field-value 'expected)))) + ((pair? (lset-difference eq? fields 'expected)) + (record-error 'name s + "extraneous field initializers ~a" + (lset-difference eq? fields + 'expected))) + (else + (record-error 'name s + "missing field initializers ~a" + (lset-difference eq? 'expected + fields)))))))))))) (define (field-default-value s) (syntax-case s (default) diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm index c65a7d0cfb..af7beb748b 100644 --- a/guix/scripts/refresh.scm +++ b/guix/scripts/refresh.scm @@ -201,8 +201,8 @@ update would trigger a complete rebuild." (filter-map (match-lambda (('argument . value) (let ((p (find-packages-by-name value))) - (unless p - (leave (_ "~a: no package by that name") + (when (null? p) + (leave (_ "~a: no package by that name~%") value)) p)) (_ #f)) diff --git a/po/guix/eo.po b/po/guix/eo.po index 7d67da61ea..ec64cc8ef1 100644 --- a/po/guix/eo.po +++ b/po/guix/eo.po @@ -5,13 +5,13 @@ # msgid "" msgstr "" -"Project-Id-Version: guix 0.6-pre1\n" +"Project-Id-Version: guix 0.7-pre1\n" "Report-Msgid-Bugs-To: ludo@gnu.org\n" -"POT-Creation-Date: 2014-06-14 22:38+0200\n" -"PO-Revision-Date: 2014-06-03 09:35-0300\n" +"POT-Creation-Date: 2014-07-13 17:06+0200\n" +"PO-Revision-Date: 2014-07-14 11:29-0300\n" "Last-Translator: Felipe Castro <fefcas@gmail.com>\n" "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n" -"Language: eo\n" +"Language: Esperanto\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -22,12 +22,12 @@ msgstr "" msgid "cannot access `~a': ~a~%" msgstr "ne eblas atingi '~a': ~a~%" -#: guix/scripts/build.scm:54 guix/scripts/package.scm:337 +#: guix/scripts/build.scm:54 guix/scripts/package.scm:349 #, scheme-format msgid "ambiguous package specification `~a'~%" msgstr "plursenca pak-specifigo '~a'~%" -#: guix/scripts/build.scm:55 guix/scripts/package.scm:339 +#: guix/scripts/build.scm:55 guix/scripts/package.scm:351 #, scheme-format msgid "choosing ~a from ~a~%" msgstr "ni elektas ~a el ~a~%" @@ -69,8 +69,7 @@ msgid "" " --fallback fall back to building when the substituter fails" msgstr "" "\n" -" --fallback retropaŝi al konstruado kiam la anstataŭiganto " -"fiaskas" +" --fallback retropaŝi al konstruado kiam la anstataŭiganto fiaskas" #: guix/scripts/build.scm:129 msgid "" @@ -78,8 +77,7 @@ msgid "" " --no-substitutes build instead of resorting to pre-built substitutes" msgstr "" "\n" -" --no-substitutes konstrui anstataŭ provi jam-konstruitajn " -"anstataŭigantojn" +" --no-substitutes konstrui anstataŭ provi jam-konstruitajn anstataŭigantojn" #: guix/scripts/build.scm:131 msgid "" @@ -97,8 +95,7 @@ msgid "" msgstr "" "\n" " --max-silent-time=SEKUNDOJ\n" -" marki la konstruon kiel fiaskintan post SEKUNDOJ da " -"silento" +" marki la konstruon kiel fiaskintan post SEKUNDOJ da silento" #: guix/scripts/build.scm:136 msgid "" @@ -106,8 +103,7 @@ msgid "" " --timeout=SECONDS mark the build as failed after SECONDS of activity" msgstr "" "\n" -" --timeout=SEKUNDOJ marki la konstruon kiel fiaskintan post SEKUNDOJ da " -"aktivado" +" --timeout=SEKUNDOJ marki la konstruon kiel fiaskintan post SEKUNDOJ da aktivado" #: guix/scripts/build.scm:138 msgid "" @@ -195,8 +191,7 @@ msgid "" " as a garbage collector root" msgstr "" "\n" -" -r, --root=DOSIERO igi DOSIEROn simbola ligo al la rezulto, kaj " -"registri\n" +" -r, --root=DOSIERO igi DOSIEROn simbola ligo al la rezulto, kaj registri\n" " ĝin kiel radikon de rubaĵ-kolektanto" #: guix/scripts/build.scm:241 @@ -205,13 +200,12 @@ msgid "" " --log-file return the log file names for the given derivations" msgstr "" "\n" -" --log-file liveri la protokol-dosierajn nomojn por la " -"indikitaj derivaĵoj" +" --log-file liveri la protokol-dosierajn nomojn por la indikitaj derivaĵoj" #: guix/scripts/build.scm:246 guix/scripts/download.scm:53 -#: guix/scripts/package.scm:511 guix/scripts/gc.scm:58 +#: guix/scripts/package.scm:523 guix/scripts/gc.scm:58 #: guix/scripts/hash.scm:55 guix/scripts/pull.scm:82 -#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:142 +#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:334 msgid "" "\n" " -h, --help display this help and exit" @@ -220,9 +214,9 @@ msgstr "" " -h, --help montri ĉi tiun helpon kaj eliri" #: guix/scripts/build.scm:248 guix/scripts/download.scm:55 -#: guix/scripts/package.scm:513 guix/scripts/gc.scm:60 +#: guix/scripts/package.scm:525 guix/scripts/gc.scm:60 #: guix/scripts/hash.scm:57 guix/scripts/pull.scm:84 -#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:144 +#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:336 msgid "" "\n" " -V, --version display version information and exit" @@ -236,8 +230,8 @@ msgid "sources do not match any package:~{ ~a~}~%" msgstr "fontoj ne kongruas al iu ajn pako:~{ ~a~}~%" #: guix/scripts/build.scm:397 guix/scripts/download.scm:96 -#: guix/scripts/package.scm:744 guix/scripts/gc.scm:122 -#: guix/scripts/pull.scm:115 guix/scripts/system.scm:190 +#: guix/scripts/package.scm:756 guix/scripts/gc.scm:122 +#: guix/scripts/pull.scm:115 guix/scripts/system.scm:386 #, scheme-format msgid "~A: unrecognized option~%" msgstr "~A: nerekonata modifilo~%" @@ -286,73 +280,73 @@ msgstr "~a: analizo de URI fiaskis~%" msgid "~a: download failed~%" msgstr "~a: elŝuto fiaskis~%" -#: guix/scripts/package.scm:76 +#: guix/scripts/package.scm:88 #, scheme-format msgid "failed to build the empty profile~%" msgstr "fiasko dum konstruo de malplena profilo~%" -#: guix/scripts/package.scm:85 +#: guix/scripts/package.scm:97 #, scheme-format msgid "switching from generation ~a to ~a~%" msgstr "alterno el generacio ~a al ~a~%" -#: guix/scripts/package.scm:96 guix/scripts/package.scm:852 -#: guix/scripts/package.scm:964 +#: guix/scripts/package.scm:108 guix/scripts/package.scm:866 +#: guix/scripts/package.scm:978 #, scheme-format msgid "profile '~a' does not exist~%" msgstr "profilo '~a' ne ekzistas~%" -#: guix/scripts/package.scm:100 +#: guix/scripts/package.scm:112 #, scheme-format msgid "nothing to do: already at the empty profile~%" msgstr "nenio por fari: jam estas ĉe la malplena profilo~%" -#: guix/scripts/package.scm:185 +#: guix/scripts/package.scm:197 #, scheme-format msgid "The following package would be removed:~%~{~a~%~}~%" msgstr "La jena pako devos esti forigata:~%~{~a~%~}~%" -#: guix/scripts/package.scm:190 +#: guix/scripts/package.scm:202 #, scheme-format msgid "The following package will be removed:~%~{~a~%~}~%" msgstr "La jena pako estos forigata:~%~{~a~%~}~%" -#: guix/scripts/package.scm:202 +#: guix/scripts/package.scm:214 #, scheme-format msgid "The following package would be installed:~%~{~a~%~}~%" msgstr "La jena pako estus instalata:~% ~{~a~%~}~%" -#: guix/scripts/package.scm:207 +#: guix/scripts/package.scm:219 #, scheme-format msgid "The following package will be installed:~%~{~a~%~}~%" msgstr "La jena pako estos instalata:~% ~{~a~%~}~%" -#: guix/scripts/package.scm:327 +#: guix/scripts/package.scm:339 #, scheme-format msgid "package `~a' lacks output `~a'~%" msgstr "pako '~a' malhavas eligon '~a'~%" -#: guix/scripts/package.scm:344 +#: guix/scripts/package.scm:356 #, scheme-format msgid "~a: package not found~%" msgstr "~a: pako ne trovita~%" -#: guix/scripts/package.scm:379 +#: guix/scripts/package.scm:391 #, scheme-format msgid "looking for the latest release of GNU ~a..." msgstr "ni serĉas la lastan eldonon de GNU ~a..." -#: guix/scripts/package.scm:383 +#: guix/scripts/package.scm:395 #, scheme-format msgid "~a: note: using ~a but ~a is available upstream~%" msgstr "~a: rimarko: ni uzas ~a sed ~a disponeblas unuanivele~%" -#: guix/scripts/package.scm:455 +#: guix/scripts/package.scm:467 #, scheme-format msgid "The following environment variable definitions may be needed:~%" msgstr "La jenaj medi-variablaj difinoj povos esti necesaj:~%" -#: guix/scripts/package.scm:471 +#: guix/scripts/package.scm:483 msgid "" "Usage: guix package [OPTION]... PACKAGES...\n" "Install, remove, or upgrade PACKAGES in a single transaction.\n" @@ -360,7 +354,7 @@ msgstr "" "Uzmaniero: guix package [MODIFILO]... PAKOJ...\n" "Instalas, forigas, aŭ ĝisdatigas PAKOJn en ununura ago.\n" -#: guix/scripts/package.scm:473 +#: guix/scripts/package.scm:485 msgid "" "\n" " -i, --install=PACKAGE install PACKAGE" @@ -368,7 +362,7 @@ msgstr "" "\n" " -i, --install=PAKO instali PAKOn" -#: guix/scripts/package.scm:475 +#: guix/scripts/package.scm:487 msgid "" "\n" " -e, --install-from-expression=EXP\n" @@ -378,7 +372,7 @@ msgstr "" " -e, --install-from-expression=ESP\n" " instali la pakon ESP rezultas al" -#: guix/scripts/package.scm:478 +#: guix/scripts/package.scm:490 msgid "" "\n" " -r, --remove=PACKAGE remove PACKAGE" @@ -386,16 +380,15 @@ msgstr "" "\n" " -r, --remove=PAKO forigi PAKOn" -#: guix/scripts/package.scm:480 +#: guix/scripts/package.scm:492 msgid "" "\n" " -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP" msgstr "" "\n" -" -u, --upgrade[=REGESP] ĝisdatigi ĉiujn instalitajn pakojn kongruantajn al " -"REGESP" +" -u, --upgrade[=REGESP] ĝisdatigi ĉiujn instalitajn pakojn kongruantajn al REGESP" -#: guix/scripts/package.scm:482 +#: guix/scripts/package.scm:494 msgid "" "\n" " --roll-back roll back to the previous generation" @@ -403,7 +396,7 @@ msgstr "" "\n" " --roll-back retropaŝi al la antaŭa generacio" -#: guix/scripts/package.scm:484 +#: guix/scripts/package.scm:496 msgid "" "\n" " --search-paths display needed environment variable definitions" @@ -411,7 +404,7 @@ msgstr "" "\n" " --search-paths montri necesajn medi-variablajn difinojn" -#: guix/scripts/package.scm:486 +#: guix/scripts/package.scm:498 msgid "" "\n" " -l, --list-generations[=PATTERN]\n" @@ -421,7 +414,7 @@ msgstr "" " -I, --list-generations[=ŜABLONO]\n" " listigi generaciojn kongruantajn al ŜABLONO" -#: guix/scripts/package.scm:489 +#: guix/scripts/package.scm:501 msgid "" "\n" " -d, --delete-generations[=PATTERN]\n" @@ -431,16 +424,15 @@ msgstr "" " -d, --delete-generations[=ŜABLONO]\n" " forigi generaciojn kongruantajn al ŜABLONO" -#: guix/scripts/package.scm:492 +#: guix/scripts/package.scm:504 msgid "" "\n" " -p, --profile=PROFILE use PROFILE instead of the user's default profile" msgstr "" "\n" -" -p, --profile=PROFILO uzi PROFILOn anstataŭ la apriora profilo de la " -"uzanto" +" -p, --profile=PROFILO uzi PROFILOn anstataŭ la apriora profilo de la uzanto" -#: guix/scripts/package.scm:495 +#: guix/scripts/package.scm:507 msgid "" "\n" " --bootstrap use the bootstrap Guile to build the profile" @@ -448,7 +440,7 @@ msgstr "" "\n" " --bootstrap uzi la praŝargilon Guile por konstrui la profilon" -#: guix/scripts/package.scm:497 guix/scripts/pull.scm:75 +#: guix/scripts/package.scm:509 guix/scripts/pull.scm:75 msgid "" "\n" " --verbose produce verbose output" @@ -456,7 +448,7 @@ msgstr "" "\n" " --verbose produkti detalplenan eligon" -#: guix/scripts/package.scm:500 +#: guix/scripts/package.scm:512 msgid "" "\n" " -s, --search=REGEXP search in synopsis and description using REGEXP" @@ -464,7 +456,7 @@ msgstr "" "\n" " -s, --search=REGESP serĉi en resumo kaj priskribo uzante REGESP" -#: guix/scripts/package.scm:502 +#: guix/scripts/package.scm:514 msgid "" "\n" " -I, --list-installed[=REGEXP]\n" @@ -474,7 +466,7 @@ msgstr "" " -I, --list-installed[=REGESP]\n" " listigi instalitajn pakojn kongruantajn al REGESP" -#: guix/scripts/package.scm:505 +#: guix/scripts/package.scm:517 msgid "" "\n" " -A, --list-available[=REGEXP]\n" @@ -484,62 +476,62 @@ msgstr "" " -A, --list-available[=REGESP]\n" " listigi disponeblajn pakojn kongruantajn al REGESP" -#: guix/scripts/package.scm:748 +#: guix/scripts/package.scm:760 #, scheme-format msgid "~A: extraneous argument~%" msgstr "~A: fremda argumento~%" -#: guix/scripts/package.scm:763 +#: guix/scripts/package.scm:775 #, scheme-format msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%" msgstr "Provu \"info '(guix) Invoking guix package'\" por pli da informo.'%" -#: guix/scripts/package.scm:785 +#: guix/scripts/package.scm:797 #, scheme-format msgid "error: while creating directory `~a': ~a~%" msgstr "eraro: dum kreo de dosierujo '~a': ~a~%" -#: guix/scripts/package.scm:789 +#: guix/scripts/package.scm:801 #, scheme-format msgid "Please create the `~a' directory, with you as the owner.~%" msgstr "Bonvolu krei la dosierujon '~a', kun vi kiel posedanto.~%" -#: guix/scripts/package.scm:796 +#: guix/scripts/package.scm:808 #, scheme-format msgid "error: directory `~a' is not owned by you~%" msgstr "eraro: dosierujo '~a' ne estas posedata de vi~%" -#: guix/scripts/package.scm:799 +#: guix/scripts/package.scm:811 #, scheme-format msgid "Please change the owner of `~a' to user ~s.~%" msgstr "Bonvole ŝanĝu la posedanton de '~a' al la uzanto ~s.~%" -#: guix/scripts/package.scm:822 +#: guix/scripts/package.scm:836 #, scheme-format msgid "deleting ~a~%" msgstr "ni forigas ~a~%" -#: guix/scripts/package.scm:875 guix/scripts/package.scm:980 +#: guix/scripts/package.scm:889 guix/scripts/package.scm:994 #, scheme-format msgid "invalid syntax: ~a~%" msgstr "malvalida sintakso: ~a~%" -#: guix/scripts/package.scm:904 +#: guix/scripts/package.scm:918 #, scheme-format msgid "nothing to be done~%" msgstr "nenio por fari~%" -#: guix/scripts/package.scm:927 +#: guix/scripts/package.scm:941 #, scheme-format msgid "~a package in profile~%" msgstr "pako ~a en profilo~%" -#: guix/scripts/package.scm:942 +#: guix/scripts/package.scm:956 #, scheme-format msgid "Generation ~a\t~a" msgstr "Generacio ~a\t~a" -#: guix/scripts/package.scm:949 +#: guix/scripts/package.scm:963 #, scheme-format msgid "~a\t(current)~%" msgstr "~a\t(nuna)~%" @@ -761,8 +753,8 @@ msgstr "subskribo en '~a' estas difektita~%" #: guix/scripts/substitute-binary.scm:338 #, scheme-format -msgid "narinfo for '~a' lacks a signature~%" -msgstr "narinfo por '~a' malhavas subskribon~%" +msgid "substitute at '~a' lacks a signature~%" +msgstr "anstataŭigo ĉe '~a' malhavas subskribon~%" #: guix/scripts/substitute-binary.scm:526 #, scheme-format @@ -772,9 +764,7 @@ msgstr "Ni elŝutas, bonvolu atendi...~%" #: guix/scripts/substitute-binary.scm:528 #, scheme-format msgid "(Please consider upgrading Guile to get proper progress report.)~%" -msgstr "" -"(Bonvolu konsideri pri ĝisdatigo de Guile por havigi ĝustan progres-" -"raporton.)~%" +msgstr "(Bonvolu konsideri pri ĝisdatigo de Guile por havigi ĝustan progres-raporton.)~%" #: guix/scripts/substitute-binary.scm:545 #, scheme-format @@ -808,26 +798,19 @@ msgid "" msgstr "" "\n" " --substitute KONSERV-DOSIERO CELO\n" -" elŝuti KONSERV-DOSIEROn kaj konservi ĝin kiel Nar " -"en la\n" +" elŝuti KONSERV-DOSIEROn kaj konservi ĝin kiel Nar en la\n" " dosiero CELO" -#: guix/scripts/substitute-binary.scm:599 -msgid "" -"ACL for archive imports seems to be uninitialized, substitutes may be " -"unavailable\n" -msgstr "" -"ACL por importo de arĥivoj ŝajnas esti ne-ekigita, anstataŭoj eble ne " -"disponeblos\n" +#: guix/scripts/substitute-binary.scm:604 +msgid "ACL for archive imports seems to be uninitialized, substitutes may be unavailable\n" +msgstr "ACL por importo de arĥivoj ŝajnas esti ne-ekigita, anstataŭoj eble ne disponeblos\n" -#: guix/scripts/substitute-binary.scm:619 +#: guix/scripts/substitute-binary.scm:625 #, scheme-format msgid "failed to look up host '~a' (~a), substituter disabled~%" -msgstr "" -"ni malsukcesis serĉi gastiganton '~a' (~a), anstataŭiganto estas " -"malebligata~%" +msgstr "ni malsukcesis serĉi gastiganton '~a' (~a), anstataŭiganto estas malebligata~%" -#: guix/scripts/substitute-binary.scm:726 +#: guix/scripts/substitute-binary.scm:732 #, scheme-format msgid "~a: unrecognized options~%" msgstr "~a: nerekonata modifiloj~%" @@ -866,32 +849,52 @@ msgstr "" msgid "wrong arguments" msgstr "malĝustaj argumentoj" -#: guix/scripts/system.scm:67 +#: guix/scripts/system.scm:74 #, scheme-format msgid "failed to open operating system file '~a': ~a~%" msgstr "fiasko dum malfermo de la operaci-sistema dosiero '~a': ~a~%" -#: guix/scripts/system.scm:70 +#: guix/scripts/system.scm:78 guix/ui.scm:238 +#, scheme-format +msgid "~a: ~a~%" +msgstr "~a: ~a~%" + +#: guix/scripts/system.scm:81 #, scheme-format -msgid "failed to load machine file '~a': ~s~%" -msgstr "fiasko dum ŝargo de la maŝina dosiero '~a': ~s~%" +msgid "failed to load operating system file '~a': ~s~%" +msgstr "fiasko dum ŝargo je operaci-sistema dosiero '~a': ~s~%" -#: guix/scripts/system.scm:86 -#, fuzzy, scheme-format +#: guix/scripts/system.scm:111 +#, scheme-format msgid "failed to register '~a' under '~a'~%" -msgstr "fiasko dum kreo de radiko GC '~a': ~a~%" +msgstr "fiasko dum registro de '~a' sub '~a'~%" -#: guix/scripts/system.scm:102 +#: guix/scripts/system.scm:127 #, scheme-format msgid "initializing the current root file system~%" -msgstr "" +msgstr "ekigado de la nuna radika dosiersistemo~%" -#: guix/scripts/system.scm:113 -#, fuzzy, scheme-format +#: guix/scripts/system.scm:151 guix/scripts/system.scm:291 +#, scheme-format msgid "failed to install GRUB on device '~a'~%" -msgstr "fiasko dum instalo de lokaĵaro: ~a~%" +msgstr "fiasko dum instalo de GRUB en la aparato '~a'~%" + +#: guix/scripts/system.scm:176 +#, scheme-format +msgid "activating system...~%" +msgstr "ni aktivas la sistemon...~%" -#: guix/scripts/system.scm:121 +#: guix/scripts/system.scm:211 +#, scheme-format +msgid "unrecognized boot parameters for '~a'~%" +msgstr "nerekonataj ekŝargaj parametroj por '~a'~%" + +#: guix/scripts/system.scm:295 +#, scheme-format +msgid "initializing operating system under '~a'...~%" +msgstr "ni ekigas la operaci-sistemon sub '~a'...~%" + +#: guix/scripts/system.scm:311 msgid "" "Usage: guix system [OPTION] ACTION FILE\n" "Build the operating system declared in FILE according to ACTION.\n" @@ -899,62 +902,65 @@ msgstr "" "Uzmaniero: guix system [MODIFILO] AGO DOSIERO\n" "Konstrui la operaci-sistemon deklarita en DOSIERO akorde al AGO.\n" -#: guix/scripts/system.scm:124 +#: guix/scripts/system.scm:314 msgid "The valid values for ACTION are:\n" -msgstr "" +msgstr "La validaj valoroj por AGO estas:\n" -#: guix/scripts/system.scm:125 +#: guix/scripts/system.scm:315 +msgid " - 'reconfigure', switch to a new operating system configuration\n" +msgstr " - 'reconfigure', alterni al nova operaci-sistema agordaro\n" + +#: guix/scripts/system.scm:317 msgid " - 'build', build the operating system without installing anything\n" -msgstr "" +msgstr " - 'build', konstrui la operaci-sistemon sen instali ion ajn\n" -#: guix/scripts/system.scm:127 +#: guix/scripts/system.scm:319 msgid " - 'vm', build a virtual machine image that shares the host's store\n" -msgstr "" +msgstr " - 'vm', konstrui virtual-maŝinan bildon kiu kundividas la gastigantan memoron\n" -#: guix/scripts/system.scm:129 +#: guix/scripts/system.scm:321 msgid " - 'vm-image', build a freestanding virtual machine image\n" -msgstr "" +msgstr " - 'vm-image', konstrui memstaran virtual-maŝinan bildon\n" -#: guix/scripts/system.scm:131 +#: guix/scripts/system.scm:323 msgid " - 'disk-image', build a disk image, suitable for a USB stick\n" -msgstr "" +msgstr " - 'disk-image', konstrui disk-bildon, taŭga por USB-memoro\n" -#: guix/scripts/system.scm:133 +#: guix/scripts/system.scm:325 msgid " - 'init', initialize a root file system to run GNU.\n" -msgstr "" +msgstr " - 'init', ekigi radikan dosiersistemon por lanĉi GNU-on.\n" -#: guix/scripts/system.scm:137 +#: guix/scripts/system.scm:329 msgid "" "\n" " --image-size=SIZE for 'vm-image', produce an image of SIZE" msgstr "" +"\n" +" --image-size=GRANDO por 'vm-image', produkti bildon je GRANDO" -#: guix/scripts/system.scm:139 +#: guix/scripts/system.scm:331 msgid "" "\n" " --no-grub for 'init', do not install GRUB" msgstr "" +"\n" +" --no-grub por 'init', ne instali GRUB" -#: guix/scripts/system.scm:198 +#: guix/scripts/system.scm:394 #, scheme-format msgid "~a: unknown action~%" msgstr "~a: nekonata pako~%" -#: guix/scripts/system.scm:215 -#, fuzzy, scheme-format +#: guix/scripts/system.scm:411 +#, scheme-format msgid "wrong number of arguments for action '~a'~%" -msgstr "malĝusta nombro da argumentoj~%" +msgstr "malĝusta nombro da argumentoj por la ago '~a'~%" -#: guix/scripts/system.scm:234 +#: guix/scripts/system.scm:431 #, scheme-format msgid "no configuration file specified~%" msgstr "neniu agorda dosiero estis indikata~%" -#: guix/scripts/system.scm:272 -#, fuzzy, scheme-format -msgid "initializing operating system under '~a'...~%" -msgstr "fiasko dum malfermo de la operaci-sistema dosiero '~a': ~a~%" - #: guix/gnu-maintenance.scm:373 #, scheme-format msgid "signature verification failed for `~a'~%" @@ -983,16 +989,13 @@ msgstr "fiasko dum instalo de lokaĵaro: ~a~%" #: guix/ui.scm:150 msgid "" "Copyright (C) 2014 the Guix authors\n" -"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." -"html>\n" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Kopirajto (C) 2014 la aŭtoroj de Guix\n" -"Permeso GPLv3+: GNU GPL versio 3 aŭ posta <http://gnu.org/licenses/gpl." -"html>\n" -"Tio ĉi estas libera programaro: vi estas libera por modifi kaj redisdoni " -"ĝin.\n" +"Permeso GPLv3+: GNU GPL versio 3 aŭ posta <http://gnu.org/licenses/gpl.html>\n" +"Tio ĉi estas libera programaro: vi estas libera por modifi kaj redisdoni ĝin.\n" "Estas NENIU GARANTIO, plejamplekse permesate de leĝoj.\n" #: guix/ui.scm:158 @@ -1056,70 +1059,65 @@ msgstr "fiasko dum konekto al '~a': ~a~%" msgid "build failed: ~a~%" msgstr "konstruo fiakis: ~a~%" -#: guix/ui.scm:238 -#, scheme-format -msgid "~a: ~a~%" -msgstr "~a: ~a~%" - -#: guix/ui.scm:255 +#: guix/ui.scm:257 #, scheme-format msgid "failed to read expression ~s: ~s~%" msgstr "fiasko dum lego de esprimo ~s: ~s~%" -#: guix/ui.scm:261 +#: guix/ui.scm:263 #, scheme-format msgid "failed to evaluate expression `~a': ~s~%" msgstr "fiasko dum analizo de esprimo '~a': ~a~%" -#: guix/ui.scm:270 +#: guix/ui.scm:272 #, scheme-format msgid "expression ~s does not evaluate to a package~%" msgstr "la esprimo ~s ne rezultas pakon~%" -#: guix/ui.scm:317 +#: guix/ui.scm:319 #, scheme-format msgid "~:[The following derivation would be built:~%~{ ~a~%~}~;~]" msgstr "~:[La jena derivo povus esti konstruata:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:322 +#: guix/ui.scm:324 #, scheme-format msgid "~:[The following file would be downloaded:~%~{ ~a~%~}~;~]" msgstr "~:[La jena derivo povus esti elŝutata:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:328 +#: guix/ui.scm:330 #, scheme-format msgid "~:[The following derivation will be built:~%~{ ~a~%~}~;~]" msgstr "~:[La jena derivo estos esti konstruata:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:333 +#: guix/ui.scm:335 #, scheme-format msgid "~:[The following file will be downloaded:~%~{ ~a~%~}~;~]" msgstr "~:[La jena derivo estos esti elŝutata:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:350 +#: guix/ui.scm:352 msgid "<unknown location>" msgstr "<nekonata loko>" -#: guix/ui.scm:378 +#: guix/ui.scm:380 #, scheme-format msgid "failed to create configuration directory `~a': ~a~%" msgstr "fiasko dum kreo de agorda dosierujo '~a': ~a~%" -#: guix/ui.scm:459 guix/ui.scm:473 +#: guix/ui.scm:461 guix/ui.scm:475 msgid "unknown" msgstr "nekonata" -#: guix/ui.scm:582 +#: guix/ui.scm:584 #, scheme-format msgid "invalid argument: ~a~%" msgstr "malvalida argumento: ~a~%" -#: guix/ui.scm:587 +#: guix/ui.scm:589 #, scheme-format msgid "Try `guix --help' for more information.~%" msgstr "Provu 'guix --help' por pli da informo.~%" -#: guix/ui.scm:617 +#: guix/ui.scm:619 msgid "" "Usage: guix COMMAND ARGS...\n" "Run COMMAND with ARGS.\n" @@ -1127,21 +1125,21 @@ msgstr "" "Uzmaniero: guix KOMANDO ARGj...\n" "Lanĉas KOMANDOn kun ARGj.\n" -#: guix/ui.scm:620 +#: guix/ui.scm:622 msgid "COMMAND must be one of the sub-commands listed below:\n" msgstr "KOMANDO devas esti unu el la sub-komandoj sube listataj:\n" -#: guix/ui.scm:640 +#: guix/ui.scm:642 #, scheme-format msgid "guix: ~a: command not found~%" msgstr "guix: ~a: komando ne trovita~%" -#: guix/ui.scm:658 +#: guix/ui.scm:660 #, scheme-format msgid "guix: missing command name~%" msgstr "guix: mankas komanda nomo~%" -#: guix/ui.scm:666 +#: guix/ui.scm:668 #, scheme-format msgid "guix: unrecognized option '~a'~%" msgstr "guix: nerekonata modifilo: '~a'~%" @@ -1242,3 +1240,149 @@ msgstr "importita dosiero malhavas subskribon" #: guix/nar.scm:487 msgid "invalid inter-file archive mark" msgstr "malvalida inter-dosiera arĥiva marko" + +#~ msgid "Hello, GNU world: An example GNU package" +#~ msgstr "Saluton, mondo GNU: ekzemplo de pako GNU" + +#~ msgid "" +#~ "GNU Hello prints the message \"Hello, world!\" and then exits. It\n" +#~ "serves as an example of standard GNU coding practices. As such, it supports\n" +#~ "command-line arguments, multiple languages, and so on." +#~ msgstr "" +#~ "GNU Hello montras la mesaĝon \"Hello, world!\" kaj finiĝas. Ĝi\n" +#~ "funkcias kiel ekzemplo de norma kodumada tradicio de GNU. Tiel, ĝi subtenas\n" +#~ "komand-liniajn argumentojn, plurajn lingvojn, kaj tiel plu." + +#~ msgid "Print lines matching a pattern" +#~ msgstr "Montri liniojn kongruajn al ŝablono" + +#~ msgid "" +#~ "grep is a tool for finding text inside files. Text is found by\n" +#~ "matching a pattern provided by the user in one or many files. The pattern\n" +#~ "may be provided as a basic or extended regular expression, or as fixed\n" +#~ "strings. By default, the matching text is simply printed to the screen,\n" +#~ "however the output can be greatly customized to include, for example, line\n" +#~ "numbers. GNU grep offers many extensions over the standard utility,\n" +#~ "including, for example, recursive directory searching." +#~ msgstr "" +#~ "grep estas ilo por trovi tekstojn interne de dosieroj. Teksto estas trovita\n" +#~ "per kongruo al ŝablono indikita de la uzanto en unu aŭ pluraj dosieroj.\n" +#~ "La ŝablono povas esti indikata kiel bazan aŭ etenditan regul-esprimon, aŭ\n" +#~ "kiel fiksajn ĉenojn. Apriore, la kongruita teksto estas simple montrata\n" +#~ "en la ekrano, tamen la eligo povas esti ege personigita por inkluzivigi,\n" +#~ "ekzemple, lini-numerojn. GNU grep oferaj multajn kromaĵojn kompare al la\n" +#~ "originala aplikaĵo, inkluzive, ekzemple, rikuran serĉadon en dosierujoj." + +#~ msgid "Stream editor" +#~ msgstr "Flu-redaktilo" + +#~ msgid "Managing tar archives" +#~ msgstr "Administrado de arĥivoj tar" + +#~ msgid "Apply differences to originals, with optional backups" +#~ msgstr "Apliki malsamojn al originaloj, kun nedevigaj savkopioj" + +#~ msgid "Comparing and merging files" +#~ msgstr "Komparo kaj kunmikso de dosieroj" + +#~ msgid "Operating on files matching given criteria" +#~ msgstr "Operacio sur dosieroj kongruantaj al indikia kriterio" + +#~ msgid "Core GNU utilities (file, text, shell)" +#~ msgstr "Nukleaj utilaĵoj GNU (file, text, shell)" + +#~ msgid "Remake files automatically" +#~ msgstr "Reprocezi dosierojn aŭtomate" + +#~ msgid "Binary utilities: bfd gas gprof ld" +#~ msgstr "Duumaj utilaĵoj: bfd gas gprof ld" + +#~ msgid "The GNU C Library" +#~ msgstr "La Biblioteko GNU C" + +#~ msgid "Database of current and historical time zones" +#~ msgstr "Datumbazo de nuna kaj pasintaj temp-zonoj" + +#~ msgid "GNU C++ standard library (intermediate)" +#~ msgstr "GNU C++ norma biblioteko (intermeza)" + +#~ msgid "The linker wrapper" +#~ msgstr "La ligila ĉirkaŭanto" + +#~ msgid "Scheme implementation intended especially for extensions" +#~ msgstr "Realigo de Scheme celata speciale por aldonoj" + +#~ msgid "Framework for building readers for GNU Guile" +#~ msgstr "Framo por konstrui legilojn por GNU Guile" + +#~ msgid "Guile bindings to ncurses" +#~ msgstr "Bindoj de Guile por ncurses" + +#~ msgid "Run jobs at scheduled times" +#~ msgstr "Lanĉi taskoj je antaŭplanitaj horoj" + +#~ msgid "Collection of useful Guile Scheme modules" +#~ msgstr "Aro da utilaj moduloj de Guile Scheme" + +#~ msgid "JSON module for Guile" +#~ msgstr "Modulo JSON por Guile" + +#~ msgid "Lout, a document layout system similar in style to LaTeX" +#~ msgstr "Lout, dokument-aranĝa sistemo simila al LaTeX, laŭ stilo" + +#~ msgid "Manipulate plain text files as databases" +#~ msgstr "Manipuli simplajn tekst-dosierojn kiel datumbazojn" + +#~ msgid "failed to load machine file '~a': ~s~%" +#~ msgstr "fiasko dum ŝargo de la maŝina dosiero '~a': ~s~%" + +#~ msgid "" +#~ "Currently the only valid value for ACTION is 'vm', which builds\n" +#~ "a virtual machine of the given operating system.\n" +#~ msgstr "" +#~ "Momente la nura valida valoro por AGO estas 'vm', kio konstruas\n" +#~ "virtualan maŝinon por la indikita operaci-sistemo.\n" + +#~ msgid "~a: extraneous argument~%" +#~ msgstr "~a: fremda argumento~%" + +#~ msgid "Guile bindings to libssh" +#~ msgstr "Bindoj de Guile por libssh" + +#~ msgid "package `~a' has no source~%" +#~ msgstr "pako '~a' havas neniun fonton~%" + +#~ msgid "" +#~ "\n" +#~ " -n, --dry-run show what would be done without actually doing it" +#~ msgstr "" +#~ "\n" +#~ " -n, --dry-run montri kion estus farita sen fakte fari ĝin" + +#~ msgid "Yeah..." +#~ msgstr "Ja..." + +#~ msgid "" +#~ "The grep command searches one or more input files for lines containing a\n" +#~ "match to a specified pattern. By default, grep prints the matching\n" +#~ "lines." +#~ msgstr "" +#~ "La komando grep serĉas en unu al pli enigaj dosieroj liniojn enhavantajn\n" +#~ "kongruon al specifita ŝablono. Apriore, grep montras la kongruantajn\n" +#~ "liniojn." + +#~ msgid "" +#~ "Sed (stream editor) isn't really a true text editor or text processor.\n" +#~ "Instead, it is used to filter text, i.e., it takes text input and performs\n" +#~ "some operation (or set of operations) on it and outputs the modified text.\n" +#~ "Sed is typically used for extracting part of a file using pattern matching or\n" +#~ "substituting multiple occurrences of a string within a file." +#~ msgstr "" +#~ "Sed (flu-redaktilo) ne estas fakte vera tekst-redaktilo aŭ tekst-procezilo.\n" +#~ "Anstataŭe, ĝi estas uzata por filtri tekston, t.e., ĝi prenas tekston kaj\n" +#~ "aplikas iun operacion (aŭ aron) al ĝi kaj eligas la modifitan tekston.\n" +#~ "Sed ordinare estas uzata por eltiri parton de dosiero per ŝablon-kongruon aŭ\n" +#~ "por anstataŭigi multoblajn aperojn de ĉeno interne de dosiero." + +#~ msgid "profile `~a' does not exist~%" +#~ msgstr "profilo '~a' ne ekzistas~%" diff --git a/po/guix/vi.po b/po/guix/vi.po index ded1283fd5..260032c9db 100644 --- a/po/guix/vi.po +++ b/po/guix/vi.po @@ -1,14 +1,15 @@ # Vietnamese translation for guix. -# Copyright © 2013 Free Software Foundation, Inc. +# Bản dịch tiếng Việt dành cho guix. +# Copyright © 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the guix package. -# Trần Ngọc Quân <vnwildman@gmail.com>, 2013. +# Trần Ngọc Quân <vnwildman@gmail.com>, 2013-2014. # msgid "" msgstr "" -"Project-Id-Version: guix 0.5-pre2\n" +"Project-Id-Version: guix 0.7-pre1\n" "Report-Msgid-Bugs-To: ludo@gnu.org\n" -"POT-Creation-Date: 2014-06-14 22:38+0200\n" -"PO-Revision-Date: 2013-12-04 07:48+0700\n" +"POT-Creation-Date: 2014-07-13 17:06+0200\n" +"PO-Revision-Date: 2014-07-14 08:38+0700\n" "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n" "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n" "Language: vi\n" @@ -24,12 +25,12 @@ msgstr "" msgid "cannot access `~a': ~a~%" msgstr "không thể truy cập `~a': ~a~%" -#: guix/scripts/build.scm:54 guix/scripts/package.scm:337 +#: guix/scripts/build.scm:54 guix/scripts/package.scm:349 #, scheme-format msgid "ambiguous package specification `~a'~%" msgstr "đặc tả gói chưa rõ ràng `~a'~%" -#: guix/scripts/build.scm:55 guix/scripts/package.scm:339 +#: guix/scripts/build.scm:55 guix/scripts/package.scm:351 #, scheme-format msgid "choosing ~a from ~a~%" msgstr "chọn ~a từ ~a~%" @@ -79,14 +80,15 @@ msgid "" " --no-substitutes build instead of resorting to pre-built substitutes" msgstr "" "\n" -" --no-substitutes xây dựng thay vì nhờ vào phần thay thế được dựng " -"trước" +" --no-substitutes xây dựng thay vì nhờ vào phần thay thế được dựng trước" #: guix/scripts/build.scm:131 msgid "" "\n" " --no-build-hook do not attempt to offload builds via the build hook" msgstr "" +"\n" +" --no-build-hook không cố xây dựng không tải thông qua móc xây dựng" #: guix/scripts/build.scm:133 msgid "" @@ -96,19 +98,15 @@ msgid "" msgstr "" "\n" " --max-silent-time=GIÂY\n" -" đánh dấu là việc dịch sẽ là lỗi nếu lâu hơn số GIÂY " -"này" +" đánh dấu là việc dịch sẽ là lỗi nếu lâu hơn số GIÂY này" #: guix/scripts/build.scm:136 -#, fuzzy msgid "" "\n" " --timeout=SECONDS mark the build as failed after SECONDS of activity" msgstr "" "\n" -" --max-silent-time=GIÂY\n" -" đánh dấu là việc dịch sẽ là lỗi nếu lâu hơn số GIÂY " -"này" +" --timeout=GIÂY đánh dấu là việc dịch sẽ là lỗi nếu lâu hơn số GIÂY này" #: guix/scripts/build.scm:138 msgid "" @@ -137,8 +135,7 @@ msgid "" "Build the given PACKAGE-OR-DERIVATION and return their output paths.\n" msgstr "" "Cách dùng: guix build [TÙY-CHỌN]... PACKAGE-OR-DERIVATION...\n" -"Xây dựng PACKAGE-OR-DERIVATION đã cho và trả về đường dẫn kết xuất của " -"chúng.\n" +"Xây dựng PACKAGE-OR-DERIVATION đã cho và trả về đường dẫn kết xuất của chúng.\n" #: guix/scripts/build.scm:225 msgid "" @@ -162,7 +159,7 @@ msgid "" " -s, --system=SYSTEM attempt to build for SYSTEM--e.g., \"i686-linux\"" msgstr "" "\n" -" -s, --system=HỆ-THỐNG cố xây dựng cho HỆ-THỐNG--ví dụ: \"i686-linux\"" +" -s, --system=HỆ-THỐNG cố xây dựng cho HỆ-THỐNG--ví dụ: \"i686-linux\"" #: guix/scripts/build.scm:231 msgid "" @@ -178,6 +175,9 @@ msgid "" " --with-source=SOURCE\n" " use SOURCE when building the corresponding package" msgstr "" +"\n" +" --with-source=MÃ_NGUỒN\n" +" dùng mã nguồn khi xây dựng gói tương ứng" #: guix/scripts/build.scm:236 msgid "" @@ -194,8 +194,7 @@ msgid "" " as a garbage collector root" msgstr "" "\n" -" -r, --root=TẬP-TIN tạo TẬP-TIN một liên kết mềm đến kết quả, và đăng " -"ký nó\n" +" -r, --root=TẬP-TIN tạo TẬP-TIN một liên kết mềm đến kết quả, và đăng ký nó\n" " như là bộ gom rác gốc" #: guix/scripts/build.scm:241 @@ -207,9 +206,9 @@ msgstr "" " --log-file trả về tên của tập-tin nhật ký cho dẫn xuất đã cho" #: guix/scripts/build.scm:246 guix/scripts/download.scm:53 -#: guix/scripts/package.scm:511 guix/scripts/gc.scm:58 +#: guix/scripts/package.scm:523 guix/scripts/gc.scm:58 #: guix/scripts/hash.scm:55 guix/scripts/pull.scm:82 -#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:142 +#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:334 msgid "" "\n" " -h, --help display this help and exit" @@ -218,9 +217,9 @@ msgstr "" " -h, --help hiển thị trợ giúp này rồi thoát" #: guix/scripts/build.scm:248 guix/scripts/download.scm:55 -#: guix/scripts/package.scm:513 guix/scripts/gc.scm:60 +#: guix/scripts/package.scm:525 guix/scripts/gc.scm:60 #: guix/scripts/hash.scm:57 guix/scripts/pull.scm:84 -#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:144 +#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:336 msgid "" "\n" " -V, --version display version information and exit" @@ -231,11 +230,11 @@ msgstr "" #: guix/scripts/build.scm:368 #, scheme-format msgid "sources do not match any package:~{ ~a~}~%" -msgstr "" +msgstr "mã nguồn không khớp bất kỳ gói nào:~{ ~a~}~%" #: guix/scripts/build.scm:397 guix/scripts/download.scm:96 -#: guix/scripts/package.scm:744 guix/scripts/gc.scm:122 -#: guix/scripts/pull.scm:115 guix/scripts/system.scm:190 +#: guix/scripts/package.scm:756 guix/scripts/gc.scm:122 +#: guix/scripts/pull.scm:115 guix/scripts/system.scm:386 #, scheme-format msgid "~A: unrecognized option~%" msgstr "~A: tùy chọn không được chấp nhận~%" @@ -284,73 +283,73 @@ msgstr "~a: gặp lỗi khi phân tích URI~%" msgid "~a: download failed~%" msgstr "~a: tải về gặp lỗi~%" -#: guix/scripts/package.scm:76 +#: guix/scripts/package.scm:88 #, scheme-format msgid "failed to build the empty profile~%" msgstr "gặp lỗi khi xây dựng hồ sơ trống rỗng~%" -#: guix/scripts/package.scm:85 +#: guix/scripts/package.scm:97 #, scheme-format msgid "switching from generation ~a to ~a~%" msgstr "chuyển từ thế hệ ~a sang ~a~%" -#: guix/scripts/package.scm:96 guix/scripts/package.scm:852 -#: guix/scripts/package.scm:964 +#: guix/scripts/package.scm:108 guix/scripts/package.scm:866 +#: guix/scripts/package.scm:978 #, scheme-format msgid "profile '~a' does not exist~%" msgstr "hồ sơ `~a' không tồn tại~%" -#: guix/scripts/package.scm:100 +#: guix/scripts/package.scm:112 #, scheme-format msgid "nothing to do: already at the empty profile~%" msgstr "không có gì cần làm: đã là một hồ sơ trống rỗng~%" -#: guix/scripts/package.scm:185 +#: guix/scripts/package.scm:197 #, scheme-format msgid "The following package would be removed:~%~{~a~%~}~%" msgstr "Gói sau đây sẽ bị gỡ bỏ:~%~{~a~%~}~%" -#: guix/scripts/package.scm:190 +#: guix/scripts/package.scm:202 #, scheme-format msgid "The following package will be removed:~%~{~a~%~}~%" msgstr "Gói sau đây sẽ bị gỡ bỏ:~%~{~a~%~}~%" -#: guix/scripts/package.scm:202 +#: guix/scripts/package.scm:214 #, scheme-format msgid "The following package would be installed:~%~{~a~%~}~%" msgstr "Gói sau đây sẽ được cài đặt:~%~{~a~%~}~%" -#: guix/scripts/package.scm:207 +#: guix/scripts/package.scm:219 #, scheme-format msgid "The following package will be installed:~%~{~a~%~}~%" msgstr "Gói sau đây sẽ được cài đặt:~%~{~a~%~}~%" -#: guix/scripts/package.scm:327 +#: guix/scripts/package.scm:339 #, scheme-format msgid "package `~a' lacks output `~a'~%" msgstr "gói `~a' thiếu kết xuất `~a'~%" -#: guix/scripts/package.scm:344 +#: guix/scripts/package.scm:356 #, scheme-format msgid "~a: package not found~%" msgstr "~a: không tìm thấy gói~%" -#: guix/scripts/package.scm:379 +#: guix/scripts/package.scm:391 #, scheme-format msgid "looking for the latest release of GNU ~a..." msgstr "tìm bản phát hành mới nhất ~a GNU..." -#: guix/scripts/package.scm:383 +#: guix/scripts/package.scm:395 #, scheme-format msgid "~a: note: using ~a but ~a is available upstream~%" msgstr "~a: ghi chú: dùng ~a nhưng ~a thì sẵn sàng trên thượng nguồn~%" -#: guix/scripts/package.scm:455 +#: guix/scripts/package.scm:467 #, scheme-format msgid "The following environment variable definitions may be needed:~%" msgstr "Những định nghĩa biến môi trường sau đây là cần thiết:~%" -#: guix/scripts/package.scm:471 +#: guix/scripts/package.scm:483 msgid "" "Usage: guix package [OPTION]... PACKAGES...\n" "Install, remove, or upgrade PACKAGES in a single transaction.\n" @@ -358,7 +357,7 @@ msgstr "" "Cách dùng: guix package [TÙY-CHỌN]... GÓI...\n" "Cài đặt, gỡ bỏ hay cập nhật GÓI trong một giao dịch đơn.\n" -#: guix/scripts/package.scm:473 +#: guix/scripts/package.scm:485 msgid "" "\n" " -i, --install=PACKAGE install PACKAGE" @@ -366,7 +365,7 @@ msgstr "" "\n" " -i, --install=GÓI cài đặt GÓI" -#: guix/scripts/package.scm:475 +#: guix/scripts/package.scm:487 msgid "" "\n" " -e, --install-from-expression=EXP\n" @@ -376,7 +375,7 @@ msgstr "" " -e, --install-from-expression=BT\n" " cài đặt gói được BT định giá cho" -#: guix/scripts/package.scm:478 +#: guix/scripts/package.scm:490 msgid "" "\n" " -r, --remove=PACKAGE remove PACKAGE" @@ -384,7 +383,7 @@ msgstr "" "\n" " -r, --remove=GÓI gỡ bỏ GÓI" -#: guix/scripts/package.scm:480 +#: guix/scripts/package.scm:492 msgid "" "\n" " -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP" @@ -392,7 +391,7 @@ msgstr "" "\n" " -u, --upgrade[=BTCQ] cập nhật tất cả các gói khớp với BTCQ" -#: guix/scripts/package.scm:482 +#: guix/scripts/package.scm:494 msgid "" "\n" " --roll-back roll back to the previous generation" @@ -400,7 +399,7 @@ msgstr "" "\n" " --roll-back quay lại thế hệ trước" -#: guix/scripts/package.scm:484 +#: guix/scripts/package.scm:496 msgid "" "\n" " --search-paths display needed environment variable definitions" @@ -408,7 +407,7 @@ msgstr "" "\n" " --search-paths hiển thị các định nghĩa biến môi trường cần thiết" -#: guix/scripts/package.scm:486 +#: guix/scripts/package.scm:498 msgid "" "\n" " -l, --list-generations[=PATTERN]\n" @@ -418,7 +417,7 @@ msgstr "" " -l, --list-generations[=MẪU]\n" " liệt kê các gói khớp MẪU" -#: guix/scripts/package.scm:489 +#: guix/scripts/package.scm:501 msgid "" "\n" " -d, --delete-generations[=PATTERN]\n" @@ -428,7 +427,7 @@ msgstr "" " -d, --delete-generations[=MẪU]\n" " xóa các bộ tạo khớp MẪU" -#: guix/scripts/package.scm:492 +#: guix/scripts/package.scm:504 msgid "" "\n" " -p, --profile=PROFILE use PROFILE instead of the user's default profile" @@ -436,7 +435,7 @@ msgstr "" "\n" " -p, --profile=PROFILE dùng hồ sơ đưa ra thay cho hồ sơ mặc định" -#: guix/scripts/package.scm:495 +#: guix/scripts/package.scm:507 msgid "" "\n" " --bootstrap use the bootstrap Guile to build the profile" @@ -444,7 +443,7 @@ msgstr "" "\n" " --bootstrap dùng chương trình mồi Guile để xây dựng hồ sơ" -#: guix/scripts/package.scm:497 guix/scripts/pull.scm:75 +#: guix/scripts/package.scm:509 guix/scripts/pull.scm:75 msgid "" "\n" " --verbose produce verbose output" @@ -452,7 +451,7 @@ msgstr "" "\n" " --verbose tạo ra kết xuất chi tiết" -#: guix/scripts/package.scm:500 +#: guix/scripts/package.scm:512 msgid "" "\n" " -s, --search=REGEXP search in synopsis and description using REGEXP" @@ -461,7 +460,7 @@ msgstr "" " -s, --search=BTCQ tìm trong tóm lược và mô tả\n" " sử dụng BIỂU THỨC CHÍNH QUY" -#: guix/scripts/package.scm:502 +#: guix/scripts/package.scm:514 msgid "" "\n" " -I, --list-installed[=REGEXP]\n" @@ -471,7 +470,7 @@ msgstr "" " -I, --list-installed[=BIỂU-THỨC-CHÍNH-QUY]\n" " kiệt kê các gói khớp BTCQ đã cài đặt" -#: guix/scripts/package.scm:505 +#: guix/scripts/package.scm:517 msgid "" "\n" " -A, --list-available[=REGEXP]\n" @@ -481,63 +480,62 @@ msgstr "" " -A, --list-available[=BIỂU-THỨC-CHÍNH-QUY]\n" " kiệt kê các gói khớp BTCQ" -#: guix/scripts/package.scm:748 +#: guix/scripts/package.scm:760 #, scheme-format msgid "~A: extraneous argument~%" msgstr "~A: đối số ngoại lai~%" -#: guix/scripts/package.scm:763 +#: guix/scripts/package.scm:775 #, scheme-format msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%" -msgstr "" -"Thử chạy lệnh \"info '(guix) Invoking guix package'\" để có thêm thông tin.~%" +msgstr "Thử chạy lệnh \"info '(guix) Invoking guix package'\" để có thêm thông tin.~%" -#: guix/scripts/package.scm:785 +#: guix/scripts/package.scm:797 #, scheme-format msgid "error: while creating directory `~a': ~a~%" msgstr "lỗi: trong khi tạo thư mục `~a': ~a~%" -#: guix/scripts/package.scm:789 +#: guix/scripts/package.scm:801 #, scheme-format msgid "Please create the `~a' directory, with you as the owner.~%" msgstr "Hãy tạo thư mục `~a', với bạn là chủ sở hữu.~%" -#: guix/scripts/package.scm:796 +#: guix/scripts/package.scm:808 #, scheme-format msgid "error: directory `~a' is not owned by you~%" msgstr "lỗi: thư mục `~a' không được sở hữu bởi bạn~%" -#: guix/scripts/package.scm:799 +#: guix/scripts/package.scm:811 #, scheme-format msgid "Please change the owner of `~a' to user ~s.~%" msgstr "Vui lòng đổi chủ sở hữu của `~a' thành ~s.~%" -#: guix/scripts/package.scm:822 +#: guix/scripts/package.scm:836 #, scheme-format msgid "deleting ~a~%" msgstr "đang xóa ~a~%" -#: guix/scripts/package.scm:875 guix/scripts/package.scm:980 +#: guix/scripts/package.scm:889 guix/scripts/package.scm:994 #, scheme-format msgid "invalid syntax: ~a~%" msgstr "cú pháp không hợp lệ: ~a~%" -#: guix/scripts/package.scm:904 +#: guix/scripts/package.scm:918 #, scheme-format msgid "nothing to be done~%" msgstr "không có gì cần làm~%" -#: guix/scripts/package.scm:927 +#: guix/scripts/package.scm:941 #, scheme-format msgid "~a package in profile~%" msgstr "~a gói trong hồ sơ~%" -#: guix/scripts/package.scm:942 +#: guix/scripts/package.scm:956 #, scheme-format msgid "Generation ~a\t~a" msgstr "Tạo ~a\t~a" -#: guix/scripts/package.scm:949 +#: guix/scripts/package.scm:963 #, scheme-format msgid "~a\t(current)~%" msgstr "~a\t(hiện tại)~%" @@ -547,8 +545,8 @@ msgid "" "Usage: guix gc [OPTION]... PATHS...\n" "Invoke the garbage collector.\n" msgstr "" -"Cách dùng: guix gc [TÙY-CHỌN]... ĐƯỜNG DẪN...\n" -"Gọi bộ sưu tập rác.\n" +"Cách dùng: guix gc [TÙY-CHỌN]... ĐƯỜNG-DẪN...\n" +"Gọi bộ xử lý rác.\n" #: guix/scripts/gc.scm:41 msgid "" @@ -590,7 +588,7 @@ msgid "" " --references list the references of PATHS" msgstr "" "\n" -" --references liệt kê câs tham chiếu của ĐƯỜNG-DẪN" +" --references liệt kê các tham chiếu của ĐƯỜNG-DẪN" #: guix/scripts/gc.scm:53 msgid "" @@ -614,7 +612,6 @@ msgid "invalid amount of storage: ~a~%" msgstr "số lượng kho chứa không hợp lệ: ~a~%" #: guix/scripts/hash.scm:45 -#, fuzzy msgid "" "Usage: guix hash [OPTION] FILE\n" "Return the cryptographic hash of FILE.\n" @@ -633,6 +630,8 @@ msgid "" "\n" " -r, --recursive compute the hash on FILE recursively" msgstr "" +"\n" +" -r, --recursive tính mã băm trên TẬP-TIN một cách đệ quy" #: guix/scripts/hash.scm:103 #, scheme-format @@ -699,12 +698,12 @@ msgstr "Guix đã cập nhật rồi\n" #: guix/scripts/substitute-binary.scm:80 #, scheme-format msgid "authentication and authorization of substitutes disabled!~%" -msgstr "" +msgstr "chứng thực và ủy quyền của cái thay thế bị tắt!~%" #: guix/scripts/substitute-binary.scm:163 -#, fuzzy, scheme-format +#, scheme-format msgid "download from '~a' failed: ~a, ~s~%" -msgstr "~a: tải về gặp lỗi~%" +msgstr "tải về từ `~a' gặp lỗi: ~a, ~s~%" #: guix/scripts/substitute-binary.scm:178 #, scheme-format @@ -717,49 +716,49 @@ msgid "try `--no-substitutes' if the problem persists~%" msgstr "dùng `--no-substitutes' nếu vấn đề vẫn không được giải quyết~%" #: guix/scripts/substitute-binary.scm:244 -#, fuzzy, scheme-format +#, scheme-format msgid "signature version must be a number: ~a~%" -msgstr "việc xác minh chữ ký cho `~a'~% gặp lỗi" +msgstr "phiên bản chữ ký phải là con số: ~a~%" #: guix/scripts/substitute-binary.scm:248 -#, fuzzy, scheme-format +#, scheme-format msgid "unsupported signature version: ~a~%" -msgstr "định dạng băm không được hỗ trợ: ~a~%" +msgstr "phiên bản chữ ký không được hỗ trợ: ~a~%" #: guix/scripts/substitute-binary.scm:256 -#, fuzzy, scheme-format +#, scheme-format msgid "signature is not a valid s-expression: ~s~%" -msgstr "gặp lỗi khi đọc biểu thức ~s: ~s~%" +msgstr "chữ ký không phải là một biểu thức s hợp lệ: ~s~%" #: guix/scripts/substitute-binary.scm:260 -#, fuzzy, scheme-format +#, scheme-format msgid "invalid format of the signature field: ~a~%" -msgstr "số lượng kho chứa không hợp lệ: ~a~%" +msgstr "định dạng trường chữ ký không hợp lệ: ~a~%" #: guix/scripts/substitute-binary.scm:295 -#, fuzzy, scheme-format +#, scheme-format msgid "invalid signature for '~a'~%" -msgstr "số không hợp lệ: ~a~%" +msgstr "chữ ký không hợp lệ cho '~a'~%" #: guix/scripts/substitute-binary.scm:297 #, scheme-format msgid "hash mismatch for '~a'~%" -msgstr "" +msgstr "mã băm không khớp nhau cho '~a'~%" #: guix/scripts/substitute-binary.scm:299 #, scheme-format msgid "'~a' is signed with an unauthorized key~%" -msgstr "" +msgstr "'~a' được ký bằng khóa không được chấp nhận~%" #: guix/scripts/substitute-binary.scm:301 #, scheme-format msgid "signature on '~a' is corrupt~%" -msgstr "" +msgstr "chữ ký trên '~a' bị hỏng~%" #: guix/scripts/substitute-binary.scm:338 #, scheme-format -msgid "narinfo for '~a' lacks a signature~%" -msgstr "" +msgid "substitute at '~a' lacks a signature~%" +msgstr "cái thay thế tại '~a' thiếu chữ ký~%" #: guix/scripts/substitute-binary.scm:526 #, scheme-format @@ -769,8 +768,7 @@ msgstr "Đang tải, vui lòng chờ...~%" #: guix/scripts/substitute-binary.scm:528 #, scheme-format msgid "(Please consider upgrading Guile to get proper progress report.)~%" -msgstr "" -"(Hãy cân nhắc nâng cấp Guile để nhận được báo cáo tiến trình đúng đắn.)~%" +msgstr "(Hãy cân nhắc nâng cấp Guile để nhận được báo cáo tiến trình đúng đắn.)~%" #: guix/scripts/substitute-binary.scm:545 #, scheme-format @@ -793,8 +791,7 @@ msgid "" msgstr "" "\n" " --query báo cáo trên tính sẵn sàng của thay thế cho\n" -" các tên tập-tin lưu trữ được chuyển trên đầu ra " -"tiêu chuẩn" +" các tên tập-tin lưu trữ được chuyển trên đầu ra tiêu chuẩn" #: guix/scripts/substitute-binary.scm:559 msgid "" @@ -808,18 +805,16 @@ msgstr "" " tải về TẬP-TIN-LƯU và lưu nó trong tập tin ĐÍCH\n" " Nar" -#: guix/scripts/substitute-binary.scm:599 -msgid "" -"ACL for archive imports seems to be uninitialized, substitutes may be " -"unavailable\n" -msgstr "" +#: guix/scripts/substitute-binary.scm:604 +msgid "ACL for archive imports seems to be uninitialized, substitutes may be unavailable\n" +msgstr "ACL dành cho nhập kho lưu dường như là chưa được khởi tạo, việc thay thế có lẽ là không sẵn sàng\n" -#: guix/scripts/substitute-binary.scm:619 +#: guix/scripts/substitute-binary.scm:625 #, scheme-format msgid "failed to look up host '~a' (~a), substituter disabled~%" -msgstr "" +msgstr "gặp lỗi khi tìm máy '~a' (~a), bộ thay thế đã bị tắt~%" -#: guix/scripts/substitute-binary.scm:726 +#: guix/scripts/substitute-binary.scm:732 #, scheme-format msgid "~a: unrecognized options~%" msgstr "~a: không chấp nhận các tùy chọn~%" @@ -827,22 +822,22 @@ msgstr "~a: không chấp nhận các tùy chọn~%" #: guix/scripts/authenticate.scm:58 #, scheme-format msgid "cannot find public key for secret key '~a'~%" -msgstr "" +msgstr "không thể tìm thấy khóa công cho khóa bí mật '~a'~%" #: guix/scripts/authenticate.scm:78 -#, fuzzy, scheme-format +#, scheme-format msgid "error: invalid signature: ~a~%" -msgstr "cú pháp không hợp lệ: ~a~%" +msgstr "lỗi: chữ ký không hợp lệ: ~a~%" #: guix/scripts/authenticate.scm:80 #, scheme-format msgid "error: unauthorized public key: ~a~%" -msgstr "" +msgstr "lỗi: khóa công không đúng: ~a~%" #: guix/scripts/authenticate.scm:82 #, scheme-format msgid "error: corrupt signature data: ~a~%" -msgstr "" +msgstr "lỗi: dữ liệu chữ ký bị hỏng: ~a~%" #: guix/scripts/authenticate.scm:126 msgid "" @@ -850,98 +845,125 @@ msgid "" "Sign or verify the signature on the given file. This tool is meant to\n" "be used internally by 'guix-daemon'.\n" msgstr "" +"Cách dùng: guix authenticate TÙY-CHỌN...\n" +"Ký hoặc xác minh chữ ký trên tập tin đã cho. Công cụ này được dùng\n" +"nội bộ bởi 'guix-daemon'.\n" #: guix/scripts/authenticate.scm:132 -#, fuzzy msgid "wrong arguments" -msgstr "số lượng đối số không đúng~%" +msgstr "các đối số sai" -#: guix/scripts/system.scm:67 -#, fuzzy, scheme-format +#: guix/scripts/system.scm:74 +#, scheme-format msgid "failed to open operating system file '~a': ~a~%" -msgstr "gặp lỗi khi kết nối đến `~a': ~a~%" +msgstr "gặp lỗi khi mở tập tin hệ điều hành `~a': ~a~%" -#: guix/scripts/system.scm:70 -#, fuzzy, scheme-format -msgid "failed to load machine file '~a': ~s~%" -msgstr "gặp lỗi khi kết nối đến `~a': ~a~%" +#: guix/scripts/system.scm:78 guix/ui.scm:238 +#, scheme-format +msgid "~a: ~a~%" +msgstr "~a: ~a~%" + +#: guix/scripts/system.scm:81 +#, scheme-format +msgid "failed to load operating system file '~a': ~s~%" +msgstr "gặp lỗi khi tải tập tin hệ điều hành `~a': ~s~%" -#: guix/scripts/system.scm:86 -#, fuzzy, scheme-format +#: guix/scripts/system.scm:111 +#, scheme-format msgid "failed to register '~a' under '~a'~%" -msgstr "gặp lỗi khi tạo gốc GC `~a': ~a~%" +msgstr "gặp lỗi khi đăng ký `~a' dưới ~a~%" -#: guix/scripts/system.scm:102 +#: guix/scripts/system.scm:127 #, scheme-format msgid "initializing the current root file system~%" -msgstr "" +msgstr "đang khởi tạo hệ thống tập tin gốc hiện tại~%" -#: guix/scripts/system.scm:113 -#, fuzzy, scheme-format +#: guix/scripts/system.scm:151 guix/scripts/system.scm:291 +#, scheme-format msgid "failed to install GRUB on device '~a'~%" -msgstr "gặp lỗi khi cài đặt `locale': ~a~%" +msgstr "gặp lỗi khi cài đặt GRUB trên thiết bị `~a'~%" + +#: guix/scripts/system.scm:176 +#, scheme-format +msgid "activating system...~%" +msgstr "đang kích hoạt hệ thống...~%" + +#: guix/scripts/system.scm:211 +#, scheme-format +msgid "unrecognized boot parameters for '~a'~%" +msgstr "tham số khởi động không được thừa nhận cho `~a'~%" + +#: guix/scripts/system.scm:295 +#, scheme-format +msgid "initializing operating system under '~a'...~%" +msgstr "đang khởi tạo hệ điều hành dưới '~a'...~%" -#: guix/scripts/system.scm:121 +#: guix/scripts/system.scm:311 msgid "" "Usage: guix system [OPTION] ACTION FILE\n" "Build the operating system declared in FILE according to ACTION.\n" msgstr "" +"Cách dùng: guix system [TÙY-CHỌN] THAO-TÁC TẬP-TIN\n" +"Xây dựng hệ điều hành khai báo trong TẬP-TIN tuân theo THAO-TÁC.\n" -#: guix/scripts/system.scm:124 +#: guix/scripts/system.scm:314 msgid "The valid values for ACTION are:\n" -msgstr "" +msgstr "Các giá trị hợp lệ cho THAO TÁC là:\n" -#: guix/scripts/system.scm:125 +#: guix/scripts/system.scm:315 +msgid " - 'reconfigure', switch to a new operating system configuration\n" +msgstr " - 'reconfigure', chuyển thành cấu hình hệ điều hành mới\n" + +#: guix/scripts/system.scm:317 msgid " - 'build', build the operating system without installing anything\n" -msgstr "" +msgstr " - 'build', xây dựng hệ điều hành mà không cài gì\n" -#: guix/scripts/system.scm:127 +#: guix/scripts/system.scm:319 msgid " - 'vm', build a virtual machine image that shares the host's store\n" -msgstr "" +msgstr " - 'vm', xây dựng một ảnh máy ảo kiểu mà có thể chia sẻ trên kho máy\n" -#: guix/scripts/system.scm:129 +#: guix/scripts/system.scm:321 msgid " - 'vm-image', build a freestanding virtual machine image\n" -msgstr "" +msgstr " - 'vm-image', xây dựng một ảnh máy ảo đứng tự do\n" -#: guix/scripts/system.scm:131 +#: guix/scripts/system.scm:323 msgid " - 'disk-image', build a disk image, suitable for a USB stick\n" -msgstr "" +msgstr " - 'disk-image', xây dựng ảnh đĩa, phù hợp để dùng cho đĩa USB\n" -#: guix/scripts/system.scm:133 +#: guix/scripts/system.scm:325 msgid " - 'init', initialize a root file system to run GNU.\n" -msgstr "" +msgstr " - 'init', khởi tạo một hệ thống tập tin gốc để chạy GNU.\n" -#: guix/scripts/system.scm:137 +#: guix/scripts/system.scm:329 msgid "" "\n" " --image-size=SIZE for 'vm-image', produce an image of SIZE" msgstr "" +"\n" +" --image-size=CỠ cho 'vm-image', sản sinh ảnh theo CỠ này" -#: guix/scripts/system.scm:139 +#: guix/scripts/system.scm:331 msgid "" "\n" " --no-grub for 'init', do not install GRUB" msgstr "" +"\n" +" --no-grub dành cho 'init', đừng cài GRUB" -#: guix/scripts/system.scm:198 -#, fuzzy, scheme-format +#: guix/scripts/system.scm:394 +#, scheme-format msgid "~a: unknown action~%" -msgstr "~A: không hiểu gói ~%" +msgstr "~a: không hiểu thao tác~%" -#: guix/scripts/system.scm:215 -#, fuzzy, scheme-format +#: guix/scripts/system.scm:411 +#, scheme-format msgid "wrong number of arguments for action '~a'~%" -msgstr "số lượng đối số không đúng~%" +msgstr "sai số lượng đối số cho thao tác '~a'~%" -#: guix/scripts/system.scm:234 +#: guix/scripts/system.scm:431 #, scheme-format msgid "no configuration file specified~%" -msgstr "" - -#: guix/scripts/system.scm:272 -#, fuzzy, scheme-format -msgid "initializing operating system under '~a'...~%" -msgstr "gặp lỗi khi kết nối đến `~a': ~a~%" +msgstr "chưa ghi rõ tập tin nhập cấu hình~%" #: guix/gnu-maintenance.scm:373 #, scheme-format @@ -951,8 +973,7 @@ msgstr "việc xác minh chữ ký cho `~a'~% gặp lỗi" #: guix/gnu-maintenance.scm:375 #, scheme-format msgid "(could be because the public key is not in your keyring)~%" -msgstr "" -"(có thể nguyên nhân là do khóa công không có trong chùm chìa khóa của bạn)~%" +msgstr "(có thể nguyên nhân là do khóa công không có trong chùm chìa khóa của bạn)~%" #: guix/gnu-maintenance.scm:450 #, scheme-format @@ -970,19 +991,16 @@ msgid "failed to install locale: ~a~%" msgstr "gặp lỗi khi cài đặt `locale': ~a~%" #: guix/ui.scm:150 -#, fuzzy msgid "" "Copyright (C) 2014 the Guix authors\n" -"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." -"html>\n" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" -"Bản quyền (C) 2013 thuộc về các tác giả Guix.\n" -"Giấy phép GPL pb3+: Giấy phép Công cộng GNU phiên bản 3 hay sau <http://gnu." -"org/licenses/gpl.html>\n" -"Đây là phần mềm tự do: bạn có quyền sửa đổi và phát hành lại nó.KHÔNG CÓ BẢO " -"HÀNH GÌ CẢ, với điều kiện được pháp luật cho phép.\n" +"Bản quyền (C) 2014 thuộc về các tác giả Guix.\n" +"Giấy phép GPL pb3+: Giấy phép Công cộng GNU phiên bản 3 hay sau <http://gnu.org/licenses/gpl.html>\n" +"Đây là phần mềm tự do: bạn có quyền sửa đổi và phát hành lại nó.\n" +"KHÔNG CÓ BẢO HÀNH GÌ CẢ, với điều kiện được pháp luật cho phép.\n" #: guix/ui.scm:158 #, scheme-format @@ -1045,70 +1063,65 @@ msgstr "gặp lỗi khi kết nối đến `~a': ~a~%" msgid "build failed: ~a~%" msgstr "xây dựng gặp lỗi: ~a~%" -#: guix/ui.scm:238 -#, fuzzy, scheme-format -msgid "~a: ~a~%" -msgstr "~a~%" - -#: guix/ui.scm:255 +#: guix/ui.scm:257 #, scheme-format msgid "failed to read expression ~s: ~s~%" msgstr "gặp lỗi khi đọc biểu thức ~s: ~s~%" -#: guix/ui.scm:261 +#: guix/ui.scm:263 #, scheme-format msgid "failed to evaluate expression `~a': ~s~%" msgstr "gặp lỗi khi định giá biểu thức `~a': ~s~%" -#: guix/ui.scm:270 +#: guix/ui.scm:272 #, scheme-format msgid "expression ~s does not evaluate to a package~%" msgstr "biểu thức `~s' không được định giá cho gói~%" -#: guix/ui.scm:317 +#: guix/ui.scm:319 #, scheme-format msgid "~:[The following derivation would be built:~%~{ ~a~%~}~;~]" msgstr "~:[Nguồn sau đây sẽ được xây dựng:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:322 +#: guix/ui.scm:324 #, scheme-format msgid "~:[The following file would be downloaded:~%~{ ~a~%~}~;~]" msgstr "~:[Tập tin sau đây sẽ được tải về:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:328 +#: guix/ui.scm:330 #, scheme-format msgid "~:[The following derivation will be built:~%~{ ~a~%~}~;~]" msgstr "~:[Nguồn sau đây sẽ được biên dịch:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:333 +#: guix/ui.scm:335 #, scheme-format msgid "~:[The following file will be downloaded:~%~{ ~a~%~}~;~]" msgstr "~:[Những tập tin sau đây sẽ được tải về:~%~{ ~a~%~}~;~]" -#: guix/ui.scm:350 +#: guix/ui.scm:352 msgid "<unknown location>" msgstr "<không hiểu vị trí>" -#: guix/ui.scm:378 +#: guix/ui.scm:380 #, scheme-format msgid "failed to create configuration directory `~a': ~a~%" msgstr "gặp lỗi khi tạo thư mục cấu hình `~a': ~a~%" -#: guix/ui.scm:459 guix/ui.scm:473 +#: guix/ui.scm:461 guix/ui.scm:475 msgid "unknown" msgstr "không hiểu" -#: guix/ui.scm:582 +#: guix/ui.scm:584 #, scheme-format msgid "invalid argument: ~a~%" msgstr "đối số không hợp lệ: ~a~%" -#: guix/ui.scm:587 +#: guix/ui.scm:589 #, scheme-format msgid "Try `guix --help' for more information.~%" msgstr "Chạy lệnh `guix --help' để biết thêm thông tin.~%" -#: guix/ui.scm:617 +#: guix/ui.scm:619 msgid "" "Usage: guix COMMAND ARGS...\n" "Run COMMAND with ARGS.\n" @@ -1116,21 +1129,21 @@ msgstr "" "Cách dùng: guix LỆNH ĐỐI_SỐ...\n" "Chạy LỆNH với các ĐỐI SỐ.\n" -#: guix/ui.scm:620 +#: guix/ui.scm:622 msgid "COMMAND must be one of the sub-commands listed below:\n" msgstr "LỆNH phải là một trong số những câu lệnh con được liệt kê dưới đây:\n" -#: guix/ui.scm:640 +#: guix/ui.scm:642 #, scheme-format msgid "guix: ~a: command not found~%" msgstr "guix: ~a: không tìm thấy lệnh~%" -#: guix/ui.scm:658 +#: guix/ui.scm:660 #, scheme-format msgid "guix: missing command name~%" msgstr "guix: thiếu tên lệnh~%" -#: guix/ui.scm:666 +#: guix/ui.scm:668 #, scheme-format msgid "guix: unrecognized option '~a'~%" msgstr "guix: tùy chọn không được thừa nhận `~a'~%" @@ -1151,85 +1164,180 @@ msgid "following redirection to `~a'...~%" msgstr "đang cho chuyển hướng sang `~a'...~%" #: guix/http-client.scm:241 -#, fuzzy msgid "download failed" -msgstr "~a: tải về gặp lỗi~%" +msgstr "tải về gặp lỗi" #: guix/nar.scm:134 msgid "unexpected executable file marker" -msgstr "" +msgstr "gặp bộ tạo tập tin thi hành không cần" #: guix/nar.scm:141 msgid "unsupported nar file type" -msgstr "" +msgstr "kiểu tập tin nar không được hỗ trợ" #: guix/nar.scm:209 msgid "unsupported file type" -msgstr "" +msgstr "kiểu tập tin không được hỗ trợ" #: guix/nar.scm:219 -#, fuzzy msgid "invalid nar signature" -msgstr "đối số không hợp lệ: ~a~%" +msgstr "chữ ký `nar' không hợp lệ" #: guix/nar.scm:230 msgid "invalid nar end-of-file marker" -msgstr "" +msgstr "bộ tạo cuối-tập-tin nar không hợp lệ" #: guix/nar.scm:244 msgid "invalid symlink tokens" -msgstr "" +msgstr "thẻ bài liên kết mềm không hợp lệ" #: guix/nar.scm:263 msgid "unexpected directory entry termination" -msgstr "" +msgstr "gặp chấm dứt đề mục thư mục bất ngờ" #: guix/nar.scm:272 msgid "unexpected directory inter-entry marker" -msgstr "" +msgstr "gặp bộ tạo mục-tin-kết_thúc thư mục bất ngờ" #: guix/nar.scm:277 msgid "unsupported nar entry type" -msgstr "" +msgstr "kiểu đề mục nar không được hỗ trợ" #: guix/nar.scm:376 msgid "signature is not a valid s-expression" -msgstr "" +msgstr "chữ ký không phải là một biểu thức s hợp lệ" #: guix/nar.scm:385 msgid "invalid signature" -msgstr "" +msgstr "chữ ký sai" #: guix/nar.scm:389 msgid "invalid hash" -msgstr "" +msgstr "giá-trị băm sai" #: guix/nar.scm:397 msgid "unauthorized public key" -msgstr "" +msgstr "khóa công trái phép" #: guix/nar.scm:402 msgid "corrupt signature data" -msgstr "" +msgstr "dữ liệu chữ ký bị hỏng" #: guix/nar.scm:422 msgid "corrupt file set archive" -msgstr "" +msgstr "tập hợp tập tin trong kho lưu bị hỏng" #: guix/nar.scm:432 -#, fuzzy, scheme-format +#, scheme-format msgid "importing file or directory '~a'...~%" -msgstr "đang cho chuyển hướng sang `~a'...~%" +msgstr "đang nhập tập tin hay thư mục `~a'...~%" #: guix/nar.scm:441 -#, fuzzy, scheme-format +#, scheme-format msgid "found valid signature for '~a'~%" -msgstr "không có nhật ký dịch cho '~a'~%" +msgstr "tìm thấy chữ ký cho '~a'~% không hợp lệ" #: guix/nar.scm:448 msgid "imported file lacks a signature" -msgstr "" +msgstr "tập tin đã nhập vào thiết chữ ký" #: guix/nar.scm:487 msgid "invalid inter-file archive mark" -msgstr "" +msgstr "dấu kết-thúc-tập-tin kho lưu không hợp lệ" + +#~ msgid "Hello, GNU world: An example GNU package" +#~ msgstr "Xin chào, gia đình GNU: Một gói GNU ví dụ" + +#~ msgid "Print lines matching a pattern" +#~ msgstr "In ra những dòng khớp với một mẫu" + +#~ msgid "Stream editor" +#~ msgstr "Trình soạn thảo luồng dữ liệu" + +#~ msgid "Managing tar archives" +#~ msgstr "Quản lý kho lưu tar" + +#~ msgid "Apply differences to originals, with optional backups" +#~ msgstr "Áp dụng những khác biệt này vào bản gốc, với các sao lưu tùy chọn" + +#~ msgid "Comparing and merging files" +#~ msgstr "So sánh và hòa trộn các tập tin" + +#~ msgid "Operating on files matching given criteria" +#~ msgstr "Thực hiện trên những tập tin khớp với điều kiện đã cho" + +#~ msgid "Core GNU utilities (file, text, shell)" +#~ msgstr "Tiện ích lõi GNU (file, text, shell)" + +#~ msgid "Remake files automatically" +#~ msgstr "Tạo lại các tập tin một cách tự động" + +#~ msgid "Binary utilities: bfd gas gprof ld" +#~ msgstr "Tiện ích nhị phân: bfd gas gprof ld" + +#~ msgid "The GNU C Library" +#~ msgstr "Thư viện C từ GNU" + +#~ msgid "Database of current and historical time zones" +#~ msgstr "Cơ sở dữ liệu của hiện tại và múi giờ lịch sử" + +#~ msgid "GNU C++ standard library (intermediate)" +#~ msgstr "Thư viện GNU C++ chuẩn (khâu trung gian)" + +#~ msgid "The linker wrapper" +#~ msgstr "Bộ bao liên kết" + +#~ msgid "Scheme implementation intended especially for extensions" +#~ msgstr "Lược đồ thực thi có dụng ý đặc biệt cho phần mở rộng" + +#~ msgid "Framework for building readers for GNU Guile" +#~ msgstr "Một framework để xây dựng bộ đọc dành cho GNU Guile" + +#~ msgid "Guile bindings to ncurses" +#~ msgstr "Guile ràng buộc vào ncurses" + +#~ msgid "Run jobs at scheduled times" +#~ msgstr "Chạy các công việc theo lịch biểu" + +#~ msgid "Collection of useful Guile Scheme modules" +#~ msgstr "Bộ sưu tập của các mô-đun Lược đồ Guile" + +#~ msgid "Guile bindings to libssh" +#~ msgstr "Guile ràng buộc vào libssh" + +#~ msgid "Manipulate plain text files as databases" +#~ msgstr "Thao tác các tập tin văn bản thường như là cơ sở dữ liệu" + +#~ msgid "package `~a' has no source~%" +#~ msgstr "gói `~a' không có nguồn~%" + +#~ msgid "" +#~ "\n" +#~ " -n, --dry-run show what would be done without actually doing it" +#~ msgstr "" +#~ "\n" +#~ " -n, --dry-run hiển thị những gì được làm nhưng không thực hiện thật" + +#~ msgid "Yeah..." +#~ msgstr "Đúng..." + +#~ msgid "" +#~ "The grep command searches one or more input files for lines containing a\n" +#~ "match to a specified pattern. By default, grep prints the matching\n" +#~ "lines." +#~ msgstr "" +#~ "Lệnh grep tìm kiếm trong một hay nhiều tập tin đầu vào những dòng có chứa\n" +#~ "từ khớp mẫu đã cho. Theo mặc định, lệnh grep sẽ in ra các dòng khớp mẫu." + +#~ msgid "" +#~ "GNU recutils is a set of tools and libraries to access human-editable,\n" +#~ "text-based databases called recfiles. The data is stored as a sequence of\n" +#~ "records, each record containing an arbitrary number of named fields." +#~ msgstr "" +#~ "GNU recutils là một tập hợp công cụ và thư viện cho phép truy cập các tập tin\n" +#~ "rec là kiểu cơ sở dữ liệu dựa trên dạng văn bản thường, con người có thể đọc được.\n" +#~ "Dữ liệu được lưu thành các bản ghi kế tiếp nhau, mỗi bản ghi chứa các thuộc tính\n" +#~ "của các trường đã được đặt tên" + +#~ msgid "profile `~a' does not exist~%" +#~ msgstr "hồ sơ `~a' không tồn tại~%" diff --git a/po/packages/eo.po b/po/packages/eo.po index 152ee74385..44212fee62 100644 --- a/po/packages/eo.po +++ b/po/packages/eo.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: guix 0.6-pre1\n" +"Project-Id-Version: guix-packages 0.7-pre1\n" "Report-Msgid-Bugs-To: ludo@gnu.org\n" "POT-Creation-Date: 2014-06-25 22:55+0200\n" -"PO-Revision-Date: 2014-06-03 09:35-0300\n" +"PO-Revision-Date: 2014-07-14 11:28-0300\n" "Last-Translator: Felipe Castro <fefcas@gmail.com>\n" "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n" "Language: eo\n" @@ -50,7 +50,7 @@ msgstr "" "La ŝablono povas esti indikata kiel bazan aŭ etenditan regul-esprimon, aŭ\n" "kiel fiksajn ĉenojn. Apriore, la kongruita teksto estas simple montrata\n" "en la ekrano, tamen la eligo povas esti ege personigita por inkluzivigi,\n" -"ekzemple, lini-numerojn. GNU grep oferaj multajn kromaĵojn kompare al la\n" +"ekzemple, lini-numerojn. GNU grep oferaj multajn aldonojn kompare al la\n" "originala aplikaĵo, inkluzive, ekzemple, rikuran serĉadon en dosierujoj." #: gnu/packages/base.scm:109 @@ -65,6 +65,10 @@ msgid "" "is often used for substituting text patterns in a stream. The GNU\n" "implementation offers several extensions over the standard utility." msgstr "" +"Sed estas ne-interaga, teksta flu-redaktilo. Ĝi ricevas tekstan\n" +"enigon el dosiero aŭ el la ĉefenigujo kaj tiam ĝi aplikas serion da teksto-redaktaj komandoj al la fluo kaj montras sian eligon en la ĉefeligujo. \n" +"Ĝi estas ofte uzata por anstataŭigi teksto-ŝablonojn en fluo. La GNU-a \n" +"realigo oferas plurajn aldonojn kompare al la ordinara aplikaĵo." #: gnu/packages/base.scm:144 msgid "Managing tar archives" @@ -79,6 +83,12 @@ msgid "" "creation/modification dates. GNU tar offers many extensions over the\n" "standard utility." msgstr "" +"Tar aldonas la eblecon krei arĥivojn tar, kaj ankaŭ la eblecon\n" +"eltiri, ĝisdatigi aŭ listigi dosierojn en ekzistanta arĥivo. Ĝi estas\n" +"utila por kombini multajn dosierojn en unu granda dosiero, tenante\n" +"dosierujan strukturon kaj dosierinformojn kiel permesojn kaj\n" +"dato de kreo/modifo. GNU tar oferas multajn aldonojn kompare\n" +"al la ordinara aplikaĵo." #: gnu/packages/base.scm:173 msgid "Apply differences to originals, with optional backups" @@ -108,7 +118,7 @@ msgstr "" #: gnu/packages/base.scm:224 msgid "Operating on files matching given criteria" -msgstr "Operacio sur dosieroj kongruantaj al indikia kriterio" +msgstr "Operacio sur dosieroj kongruantaj al indikita kriterio" #: gnu/packages/base.scm:226 msgid "" @@ -203,7 +213,7 @@ msgstr "" #: gnu/packages/base.scm:1264 msgid "Complete GCC tool chain for C/C++ development" -msgstr "" +msgstr "Kompleta ilaro GCC por kodumado en C/C++" #: gnu/packages/base.scm:1266 msgid "" @@ -256,7 +266,7 @@ msgstr "" #: gnu/packages/guile.scm:289 msgid "Run jobs at scheduled times" -msgstr "Lanĉi taskoj je antaŭplanitaj horoj" +msgstr "Lanĉi taskojn je antaŭplanitaj horoj" #: gnu/packages/guile.scm:291 msgid "" diff --git a/tests/gexp.scm b/tests/gexp.scm index b0ff1019e6..6d4885e44e 100644 --- a/tests/gexp.scm +++ b/tests/gexp.scm @@ -29,6 +29,7 @@ #:use-module (srfi srfi-64) #:use-module (rnrs io ports) #:use-module (ice-9 match) + #:use-module (ice-9 regex) #:use-module (ice-9 popen)) ;; Test the (guix gexp) module. @@ -247,6 +248,23 @@ (return (and (zero? (close-pipe pipe)) (= (expt n 2) (string->number str))))))) +(test-assert "printer" + (string-match "^#<gexp \\(string-append .*#<package coreutils.*\ + \"/bin/uname\"\\) [[:xdigit:]]+>$" + (with-output-to-string + (lambda () + (write + (gexp (string-append (ungexp coreutils) + "/bin/uname"))))))) + +(test-assert "printer vs. ungexp-splicing" + (string-match "^#<gexp .* [[:xdigit:]]+>$" + (with-output-to-string + (lambda () + ;; #~(begin #$@#~()) + (write + (gexp (begin (ungexp-splicing (gexp ()))))))))) + (test-equal "sugar" '(gexp (foo (ungexp bar) (ungexp baz "out") (ungexp (chbouib 42)) diff --git a/tests/records.scm b/tests/records.scm index 15709ac326..e90d33d15d 100644 --- a/tests/records.scm +++ b/tests/records.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -19,8 +19,16 @@ (define-module (test-records) #:use-module (srfi srfi-64) #:use-module (ice-9 match) + #:use-module (ice-9 regex) #:use-module (guix records)) +(define (test-module) + ;; A module in which to evaluate things that are known to fail. + (let ((module (make-fresh-user-module))) + (module-use! module (resolve-interface '(guix records))) + module)) + + (test-begin "records") (test-assert "define-record-type*" @@ -50,7 +58,7 @@ (match (bar (x 7) (z (* x 3))) (($ <bar> 7 42 21))) (match (bar (z 21) (x (/ z 3))) - (($ <bar> 7 42 21)))))) + (($ <bar> 7 42 21) #t))))) (test-assert "define-record-type* & inherit" (begin @@ -131,6 +139,53 @@ (parameterize ((mark (cons 'a 'b))) (eq? (foo-baz y) (mark)))))))) +(test-assert "define-record-type* & missing initializers" + (catch 'syntax-error + (lambda () + (eval '(begin + (define-record-type* <foo> foo make-foo + foo? + (bar foo-bar (default 42)) + (baz foo-baz)) + + (foo)) + (test-module)) + #f) + (lambda (key proc message location form . args) + (and (eq? proc 'foo) + (string-match "missing .*initialize.*baz" message) + (equal? form '(foo)))))) + +(test-assert "define-record-type* & extra initializers" + (catch 'syntax-error + (lambda () + (eval '(begin + (define-record-type* <foo> foo make-foo + foo? + (bar foo-bar (default 42))) + + (foo (baz 'what?))) + (test-module)) + #f) + (lambda (key proc message location form . args) + (and (string-match "extra.*initializer.*baz" message) + (eq? proc 'foo))))) + +(test-assert "define-record-type* & inherit & extra initializers" + (catch 'syntax-error + (lambda () + (eval '(begin + (define-record-type* <foo> foo make-foo + foo? + (bar foo-bar (default 42))) + + (foo (inherit (foo)) (baz 'what?))) + (test-module)) + #f) + (lambda (key proc message location form . args) + (and (string-match "extra.*initializer.*baz" message) + (eq? proc 'foo))))) + (test-equal "recutils->alist" '((("Name" . "foo") ("Version" . "0.1") |