Merge branch 'master' into core-updates

This commit is contained in:
Mark H Weaver 2014-07-27 20:15:50 -04:00
commit 33690ffde5
66 changed files with 3147 additions and 861 deletions

View File

@ -253,6 +253,7 @@ guix_install_go_files = install-nobase_nodist_guilemoduleDATA
$(guix_install_go_files): install-nobase_dist_guilemoduleDATA
SUBDIRS = po/guix po/packages
BUILT_SOURCES =
include doc.am

115
NEWS
View File

@ -10,6 +10,121 @@ Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
Please send Guix bug reports to bug-guix@gnu.org.
* Changes in 0.7 (since 0.6)
** Package management
*** Binaries for mips64el-linux now available from hydra.gnu.org
These come in addition to the x86_64-linux and i686-linux binaries already
provided, thanks to our generous donor and friendly admins. See
“Substitutes” in the manual.
*** guix package has a new --show option
*** guix refresh has a new --list-dependent option
** Programming interfaces
*** New (guix gexp) module, which implements “G-expressions”
G-expressions are a new mechanism to embed build-side code in host-side
code. See “G-Expressions” in the manual.
*** (gnu system) and related modules now use G-expressions
This greatly simplifies code, and guarantees that build code carries
references to the packages or derivations it uses.
*** build-expression->derivation is deprecated in favor of G-expressions
*** The (gnu system) module has been largely augmented and factorized
*** New (guix build vm) module, support for virtual machine images
*** New (guix build activation) module, for “system activation”
*** New (guix build syscalls) module
*** New (guix build install) and module for whole system installation
*** New (gnu system install) module, for the installation system
*** New (gnu system file-systems) module, for file-system declarations
*** New (gnu) module, which aggregates common (gnu …) modules
*** service records now have an optional activate field
This allows services to specify code to run at system activation time.
** GNU distribution
*** An image to install the GNU system from a USB stick is provided
This is the first time an installation image is provided. See “System
Installation” in the manual for details. This is work in progress as noted
in “Limitations”. Your feedback and help are welcome!
*** Support for more parameters in operating-system declarations
Operating system declarations can now provide a list of file systems, a list
of setuid programs, bootloader options, and more. See “System Configuration”
in the manual.
*** guix system supports more actions
Newly supported actions are init, build, reconfigure, and disk-image.
See “Invoking guix system” in the manual.
*** User accounts and groups are created at system activation time
*** Virtual machine support uses para-virtualized devices
*** GCC package now has an additional lib output, for run-time support libs
*** GLib package now has a separate “bin” output (<http://bugs.gnu.org/17853>)
*** 134 new packages
abbaye, aegis, attica, babl, barcode, behave, btar, busybox, ccache, ccrtp,
chess, clucene, cmatrix, commoncpp, conkeror, cook, cssc, datamash, diffstat,
doxygen, dropbear, dtach, duplicity, e2fsck-static, exosip, fftw-openmpi,
fish, gconf, gegl, gimp, gmsh, gnome-mime-data, gnome-vfs, gnumeric, goffice,
gsegrafix, guile-opengl, guile-static-stripped, hdup, hwloc, inotify-tools,
jrnl, kbd, kmod, lftp, libarchive, libart-lgpl, libbonobo, libbonoboui,
libcroco, libdbusmenu-qt, libftdi, libglade, libgnome, libgnomecanvas,
libgnomeprint, libgnomeprintui, libgnomeui, libgsf, libidl, libmcrypt,
libmhash, librsvg, librsync, libsodium, libuv, libvpx, links, lzop, man-pages,
maxima, mcrypt, mosh, mpg123, mplayer, mu, ncmpcpp, node, notmuch, numactl,
offlineimap, openmpi, orbit2, osip, pangox-compat, perl-io-tty, petsc,
petsc-complex, petsc-complex-openmpi, petsc-openmpi, pingus, podofo, protobuf,
pt-scotch, python-enum34, python-keyring, python-lockfile, python-mock,
python-parse, python-parse-type, python-parsedatetime, python-pycrypto,
python-six, python-tzlocal, python2-lockfile, python2-mock, qjson, qrencode,
rasqal, rdiff-backup, rdup, redland, rottlog, scotch, sipwitch, sshfs-fuse,
strigi, sudo, superlu, superlu-dist, talkfilters, talloc, tcpdump, tinyproxy,
transmission, ucommon, udev, vlc, vtk, wakelan, wireless-tools,
wpa-supplicant, xboard, youtube-dl
*** 87 package updates
bitlbee-3.2.2, cursynth-1.5, ddrescue-1.18.1, dfc-3.0.4, dmd-0.2,
docbook-xml-4.3, docbook-xml-4.4, docbook-xsl-1.78.1, dvdisaster-0.72.6,
ffmpeg-2.3, fftw-3.3.4, fftwf-3.3.4, flac-1.3.0, gawk-4.1.1, gcc-4.7.4,
gcc-4.8.3, gcc-4.8.3, gcc-4.9.1, gcc-cross-mips64el-linux-gnuabi64-4.8.3,
gcc-objc++-4.8.3, gcc-objc-4.8.3, gcc-stripped-tarball-4.8.3,
gcc-toolchain-4.8.3, gcc-toolchain-4.9.1, gccgo-4.8.3, gdb-7.7.1,
gettext-0.19.2, gfortran-4.8.3, glib-2.40.0, global-6.3, gmp-6.0.0a,
gnupg-1.4.18, gnupg-2.0.25, gnutls-3.2.15, gp2c-0.0.9pl1, grep-2.20,
gst-plugins-base-1.0.10, gstreamer-0.10.36, gtk+-3.10.1, gtkmm-2.24.2,
guile-2.0.11, guile-2.0.11, guix-0.6, guix-0.6.0ae8c15, htop-1.0.3,
icu4c-53.1, imagemagick-6.8.9-0, json-c-0.12, libdrm-2.4.33, libgc-7.2e,
libgcrypt-1.5.3, libgpg-error-1.13, libjpeg-8d, libmicrohttpd-0.9.37,
libogg-1.3.2, libotr-4.0.0, libtasn1-3.6, libvorbis-1.3.4, lightning-2.0.4,
linux-libre-3.15.6, lua-5.1.5, lua-5.2.3, mcron-1.0.8, moe-1.6, nano-2.3.6,
neon-0.29.6, nettle-3.0, openssl-1.0.1h, parallel-20140722, pari-gp-2.7.1,
pspp-0.8.3, python-2.7.6, python-dateutil-2.2, python2-dateutil-2.2,
qemu-2.0.0, qemu-headless-2.0.0, qt-4.8.6, qt-5.2.1, readline-6.2,
screen-4.2.1, soprano-2.9.4, texinfo-5.2, texlive-2014, tor-0.2.4.22,
wdiff-1.2.2, xorriso-1.3.8, xterm-304
** Native language support
*** New translations: de (German), and hu (Hungarian)
*** Updated translations: eo, pt_BR, sr, vi
*** Package descriptions moved from the guix text domain to guix-packages
** Bugs fixed
*** Downloads are now faster (<http://bugs.gnu.org/15368>)
*** guix authenticate properly writes signatures to stdout
(<http://bugs.gnu.org/17312>)
*** Progress report of downloads is now properly displayed
*** Error reporting of pk-crypto errors has been improved
*** The 'patches' field now works for origins with no extension
*** Synchronization and GC issues fixed in the offload hook
*** (guix ftp-client) emits USER commands suitable for all servers
* Changes in 0.6 (since 0.5)
** Package management
*** Default store directory changed to /gnu/store

1
THANKS
View File

@ -23,6 +23,7 @@ infrastructure help:
Matthew Lien <bluet@bluet.org>
Niels Möller <nisse@lysator.liu.se>
Yutaka Niibe <gniibe@fsij.org>
Adam Pribyl <pribyl@lowlevel.cz>
Cyrill Schenkel <cyrill.schenkel@gmail.com>
Benno Schulenberg <coordinator@translationproject.org>
Jason Self <jself@gnu.org>

View File

@ -44,13 +44,13 @@
(file-systems
;; We provide a dummy file system for /, but that's OK because the VM build
;; code will automatically declare the / file system for us.
(list (file-system
(mount-point "/")
(device "dummy")
(type "dummy"))
;; %fuse-control-file-system ; needs fuse.ko
;; %binary-format-file-system ; needs binfmt.ko
))
(cons* (file-system
(mount-point "/")
(device "dummy")
(type "dummy"))
;; %fuse-control-file-system ; needs fuse.ko
;; %binary-format-file-system ; needs binfmt.ko
%base-file-systems))
(users (list (user-account
(name "guest")

View File

@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.68)
AC_INIT([GNU Guix], [0.7], [bug-guix@gnu.org], [guix],
AC_INIT([GNU Guix], [0.8], [bug-guix@gnu.org], [guix],
[http://www.gnu.org/software/guix/])
AC_CONFIG_AUX_DIR([build-aux])
@ -16,7 +16,7 @@ dnl For the C++ code. This must be used early.
AC_USE_SYSTEM_EXTENSIONS
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION([0.18.3])
AM_GNU_GETTEXT_VERSION([0.18.1])
guilemoduledir="${datarootdir}/guile/site/2.0"
AC_SUBST([guilemoduledir])

View File

@ -20,7 +20,7 @@
# Integration of the `guix-daemon' code taken from upstream Nix.
#
BUILT_SOURCES = nix/libstore/schema.sql.hh
BUILT_SOURCES += nix/libstore/schema.sql.hh
CLEANFILES += $(BUILT_SOURCES)
noinst_LIBRARIES = libformat.a libutil.a libstore.a

11
doc.am
View File

@ -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>
# Copyright © 2013 Andreas Enge <andreas@enge.fr>
#
# This file is part of GNU Guix.
@ -24,6 +24,15 @@ EXTRA_DIST += \
doc/images/bootstrap-graph.eps \
doc/images/bootstrap-graph.pdf
# Bundle this file so that makeinfo finds it in out-of-source-tree builds.
BUILT_SOURCES += doc/os-config.texi
EXTRA_DIST += doc/os-config.texi
MAINTAINERCLEANFILES = doc/os-config.texi
doc/os-config.texi: gnu/system/os-config.tmpl
$(MKDIR_P) "`dirname "$@"`"
cp "$<" "$@"
infoimagedir = $(infodir)/images
dist_infoimage_DATA = doc/images/bootstrap-graph.png

View File

@ -29,6 +29,8 @@ Documentation License''.
Managing packages with Guix.
* guix build: (guix)Invoking guix build
Building packages with Guix.
* guix system: (guix)Invoking guix system
Managing the operating system configuration.
@end direntry
@titlepage
@ -67,7 +69,7 @@ package management tool written for the GNU system.
* Acknowledgments:: Thanks!
* GNU Free Documentation License:: The license of this manual.
* Concept Index:: Concepts.
* Function Index:: Functions.
* Programming Index:: Data types, functions, and variables.
@end menu
@c *********************************************************************
@ -129,7 +131,7 @@ ready to use it.
Note that this section is concerned with the installation of the package
manager, which can be done on top of a running GNU/Linux system. If,
instead, you want to install the complete GNU operating system,
@ref{System Installation}.
@pxref{System Installation}.
The build procedure for Guix is the same as for other GNU software, and
is not covered here. Please see the files @file{README} and
@ -844,6 +846,30 @@ name: gmp
@dots{}
@end example
@item --show=@var{package}
Show details about @var{package}, taken from the list of available packages, in
@code{recutils} format (@pxref{Top, GNU recutils databases,, recutils, GNU
recutils manual}).
@example
$ guix package --show=python | recsel -p name,version
name: python
version: 2.7.6
name: python
version: 3.3.5
@end example
You may also specify the full name of a package to only get details about a
specific version of it:
@example
$ guix package --show=python-3.3.5 | recsel -p name,version
name: python
version: 3.3.5
@end example
@item --list-installed[=@var{regexp}]
@itemx -I [@var{regexp}]
List the currently installed packages in the specified profile, with the
@ -1792,7 +1818,7 @@ As can be guessed, this primitive is cumbersome to use directly. A
better approach is to write build scripts in Scheme, of course! The
best course of action for that is to write the build code as a
``G-expression'', and to pass it to @code{gexp->derivation}. For more
information, @ref{G-Expressions}.
information, @pxref{G-Expressions}.
Once upon a time, @code{gexp->derivation} did not exist and constructing
derivations with build code written in Scheme was achieved with
@ -1988,6 +2014,29 @@ will references @var{coreutils}, @var{grep}, and @var{sed}, thereby
preventing them from being garbage-collected during its lifetime.
@end deffn
@deffn {Monadic Procedure} interned-file @var{file} [@var{name}] @
[#:recursive? #t]
Return the name of @var{file} once interned in the store. Use
@var{name} as its store name, or the basename of @var{file} if
@var{name} is omitted.
When @var{recursive?} is true, the contents of @var{file} are added
recursively; if @var{file} designates a flat file and @var{recursive?}
is true, its contents are added, and its permission bits are kept.
The example below adds a file to the store, under two different names:
@example
(run-with-store (open-connection)
(mlet %store-monad ((a (interned-file "README"))
(b (interned-file "README" "LEGU-MIN")))
(return (list a b))))
@result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
@end example
@end deffn
@deffn {Monadic Procedure} package-file @var{package} [@var{file}] @
[#:system (%current-system)] [#:output "out"] Return as a monadic
value in the absolute file name of @var{file} within the @var{output}
@ -2545,6 +2594,33 @@ The command above specifically updates the @code{emacs} and
@code{idutils} packages. The @code{--select} option would have no
effect in this case.
When considering whether to upgrade a package, it is sometimes
convenient to know which packages would be affected by the upgrade and
should be checked for compatibility. For this the following option may
be used when passing @command{guix refresh} one or more package names:
@table @code
@item --list-dependent
@itemx -l
List top-level dependent packages that would need to be rebuilt as a
result of upgrading one or more packages.
@end table
Be aware that the @code{--list-dependent} option only
@emph{approximates} the rebuilds that would be required as a result of
an upgrade. More rebuilds might be required under some circumstances.
@example
$ guix refresh --list-dependent flex
Building the following 120 packages would ensure 213 dependent packages are rebuilt:
hop-2.4.0 geiser-0.4 notmuch-0.18 mu-0.9.9.5 cflow-1.4 idutils-4.6 @dots{}
@end example
The command above lists a set of packages that could be built to check
for compatibility with an upgraded @code{flex} package.
The following options can be used to customize GnuPG operation:
@table @code
@ -2620,14 +2696,14 @@ to join! @ref{Contributing}, for information about how you can help.
This section explains how to install the complete GNU operating system
on a machine. The Guix package manager can also be installed on top of
a running GNU/Linux system, @ref{Installation}.
a running GNU/Linux system, @pxref{Installation}.
@ifinfo
@c This paragraph is for people reading this from tty2 of the
@c installation image.
You're reading this documentation with an Info reader. For details on
how to use it, hit the @key{RET} key (``return'' or ``enter'') on the
link that follows: @ref{Help,,, info, Info: An Introduction}. Hit
link that follows: @pxref{Help,,, info, Info: An Introduction}. Hit
@kbd{l} afterwards to come back here.
@end ifinfo
@ -2658,7 +2734,7 @@ GNOME and KDE.
@item
Support for encrypted disks, the Logical Volume Manager (LVM), and swap
devices are missing.
devices is missing.
@item
Few system services are currently supported out-of-the-box
@ -2707,7 +2783,7 @@ its device name. Assuming that USB stick is known as @file{/dev/sdX},
copy the image with:
@example
dd if=gnu-usb-install-20140629.x86_64 of=/dev/sdX
dd if=gnu-usb-install-@value{VERSION}.x86_64 of=/dev/sdX
@end example
Access to @file{/dev/sdX} usually requires root privileges.
@ -2744,13 +2820,27 @@ image does not contain all the software and tools that may be needed.
Unless this has already been done, you must partition and format the
target partitions.
Preferably, assign partitions a label so that you can easily and
reliably refer to them in @code{file-system} declarations (@pxref{File
Systems}). This is typically done using the @code{-L} option of
@command{mkfs.ext4} and related commands.
The installation image includes Parted (@pxref{Overview,,, parted, GNU
Parted User Manual}), @command{fdisk}, and e2fsprogs, the suite of tools
to manipulate ext2/ext3/ext4 file systems.
@item
Once that is done, mount the target root partition under @file{/mnt}.
@item
Lastly, run @code{deco start cow-store /mnt}.
This will make @file{/gnu/store} copy-on-write, such that packages added
to it during the installation phase will be written to the target disk
rather than kept in memory.
@end enumerate
Once that is done, mount the target root partition under @file{/mnt}.
@subsection Proceeding with the Installation
@ -2762,28 +2852,16 @@ It is better to store that file on the target root file system, say, as
@file{/mnt/etc/config.scm}.
A minimal operating system configuration, with just the bare minimum and
only a root account would look like this:
only a root account would look like this (on the installation system,
this example is available as @file{/etc/configuration-template.scm}):
@example
(use-modules (gnu))
(operating-system
(host-name "foo")
(timezone "Europe/Paris")
(locale "en_US.UTF-8")
;; Assuming /dev/sdX is the target hard disk, and /dev/sdX1 the
;; target root file system.
(bootloader (grub-configuration (device "/dev/sdX")))
(file-systems (list (file-system
(device "/dev/sdX1")
(mount-point "/")
(type "ext4")))))
@include os-config.texi
@end example
@noindent
For more information on @code{operating-system} declarations,
@xref{Using the Configuration System}.
@pxref{Using the Configuration System}.
Once that is done, the new system must be initialized (remember that the
target root file system is mounted under @file{/mnt}):
@ -2795,7 +2873,7 @@ guix system init /mnt/etc/config.scm /mnt
@noindent
This will copy all the necessary files, and install GRUB on
@file{/dev/sdX}, unless you pass the @option{--no-grub} option. For
more information, @xref{Invoking guix system}. This command may trigger
more information, @pxref{Invoking guix system}. This command may trigger
downloads or builds of missing packages, which can take some time.
Once that command has completed---and hopefully succeeded!---you can
@ -2874,10 +2952,11 @@ kernel, initial RAM disk, and boot loader looks like this:
(locale "fr_FR.UTF-8")
(bootloader (grub-configuration
(device "/dev/sda")))
(file-systems (list (file-system
(file-systems (cons (file-system
(device "/dev/sda1") ; or partition label
(mount-point "/")
(type "ext3"))))
(type "ext3"))
%base-file-systems))
(users (list (user-account
(name "alice")
(password "")
@ -2986,7 +3065,9 @@ partitions without having to hard-code their actual device name.
@item @code{flags} (default: @code{'()})
This is a list of symbols denoting mount flags. Recognized flags
include @code{read-only} and @code{bind-mount}.
include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
access to special files), @code{no-suid} (ignore setuid and setgid
bits), and @code{no-exec} (disallow program execution.)
@item @code{options} (default: @code{#f})
This is either @code{#f}, or a string denoting mount options.
@ -3001,9 +3082,52 @@ instance, for the root file system.
This Boolean indicates whether the file system needs to be checked for
errors before being mounted.
@item @code{create-mount-point?} (default: @code{#f})
When true, the mount point is created if it does not exist yet.
@end table
@end deftp
The @code{(gnu system file-systems)} exports the following useful
variables.
@defvr {Scheme Variable} %base-file-systems
These are essential file systems that are required on normal systems,
such as @var{%devtmpfs-file-system} (see below.) Operating system
declarations should always contain at least these.
@end defvr
@defvr {Scheme Variable} %devtmpfs-file-system
The @code{devtmpfs} file system to be mounted on @file{/dev}. This is a
requirement for udev (@pxref{Base Services, @code{udev-service}}).
@end defvr
@defvr {Scheme Variable} %pseudo-terminal-file-system
This is the file system to be mounted as @file{/dev/pts}. It supports
@dfn{pseudo-terminals} created @i{via} @code{openpty} and similar
functions (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
Manual}). Pseudo-terminals are used by terminal emulators such as
@command{xterm}.
@end defvr
@defvr {Scheme Variable} %shared-memory-file-system
This file system is mounted as @file{/dev/shm} and is used to support
memory sharing across processes (@pxref{Memory-mapped I/O,
@code{shm_open},, libc, The GNU C Library Reference Manual}).
@end defvr
@defvr {Scheme Variable} %binary-format-file-system
The @code{binfmt_misc} file system, which allows handling of arbitrary
executable file types to be delegated to user space. This requires the
@code{binfmt.ko} kernel module to be loaded.
@end defvr
@defvr {Scheme Variable} %fuse-control-file-system
The @code{fusectl} file system, which allows unprivileged users to mount
and unmount user-space FUSE file systems. This requires the
@code{fuse.ko} kernel module to be loaded.
@end defvr
@node User Accounts
@subsection User Accounts
@ -3077,6 +3201,10 @@ The group's name.
The group identifier (a number). If @code{#f}, a new number is
automatically allocated when the group is created.
@item @code{system?} (default: @code{#f})
This Boolean value indicates whether the group is a ``system'' group.
System groups have low numerical IDs.
@item @code{password} (default: @code{#f})
What, user groups can have a password? Well, apparently yes. Unless
@code{#f}, this field specifies the group's password.
@ -3194,6 +3322,7 @@ passed to @command{guix-daemon}.
Run @var{udev}, which populates the @file{/dev} directory dynamically.
@end deffn
@node Networking Services
@subsubsection Networking Services
@ -4040,8 +4169,10 @@ an inspiration for Guix.
@unnumbered Concept Index
@printindex cp
@node Function Index
@unnumbered Function Index
@node Programming Index
@unnumbered Programming Index
@syncodeindex tp fn
@syncodeindex vr fn
@printindex fn
@bye

View File

@ -139,6 +139,7 @@ GNU_SYSTEM_MODULES = \
gnu/packages/libdaemon.scm \
gnu/packages/libevent.scm \
gnu/packages/libffi.scm \
gnu/packages/libftdi.scm \
gnu/packages/libidn.scm \
gnu/packages/libphidget.scm \
gnu/packages/libsigsegv.scm \
@ -267,6 +268,7 @@ GNU_SYSTEM_MODULES = \
gnu/system/file-systems.scm \
gnu/system/grub.scm \
gnu/system/install.scm \
gnu/system/os-config.tmpl \
gnu/system/linux.scm \
gnu/system/linux-initrd.scm \
gnu/system/shadow.scm \

View File

@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -31,10 +32,16 @@
search-bootstrap-binary
%patch-directory
%bootstrap-binaries-path
fold-packages
find-packages-by-name
find-best-packages-by-name
find-newest-available-packages))
find-newest-available-packages
package-direct-dependents
package-transitive-dependents
package-covering-dependents))
;;; Commentary:
;;;
@ -182,3 +189,60 @@ VERSION."
(match (vhash-assoc name (find-newest-available-packages))
((_ version pkgs ...) pkgs)
(#f '()))))
(define* (vhash-refq vhash key #:optional (dflt #f))
"Look up KEY in the vhash VHASH, and return the value (if any) associated
with it. If KEY is not found, return DFLT (or `#f' if no DFLT argument is
supplied). Uses `eq?' for equality testing."
(or (and=> (vhash-assq key vhash) cdr)
dflt))
(define package-dependencies
(memoize
(lambda ()
"Return a vhash keyed by package, and with associated values that are a
list of packages that depend on that package."
(fold-packages
(lambda (package dag)
(fold
(lambda (in d)
;; Insert a graph edge from each of package's inputs to package.
(vhash-consq in
(cons package (vhash-refq d in '()))
(vhash-delq in d)))
dag
(match (package-direct-inputs package)
(((labels packages . _) ...)
packages) )))
vlist-null))))
(define (package-direct-dependents packages)
"Return a list of packages from the distribution that directly depend on the
packages in PACKAGES."
(delete-duplicates
(concatenate
(map (lambda (p)
(vhash-refq (package-dependencies) p '()))
packages))))
(define (package-transitive-dependents packages)
"Return the transitive dependent packages of the distribution packages in
PACKAGES---i.e. the dependents of those packages, plus their dependents,
recursively."
(let ((dependency-dag (package-dependencies)))
(fold-tree
cons '()
(lambda (node) (vhash-refq dependency-dag node))
;; Start with the dependents to avoid including PACKAGES in the result.
(package-direct-dependents packages))))
(define (package-covering-dependents packages)
"Return a minimal list of packages from the distribution whose dependencies
include all of PACKAGES and all packages that depend on PACKAGES."
(let ((dependency-dag (package-dependencies)))
(fold-tree-leaves
cons '()
(lambda (node) (vhash-refq dependency-dag node))
;; Start with the dependents to avoid including PACKAGES in the result.
(package-direct-dependents packages))))

View File

@ -78,16 +78,16 @@ interface and is based on GNU Guile.")
(define-public dfc
(package
(name "dfc")
(version "3.0.3")
(version "3.0.4")
(source
(origin
(method url-fetch)
(uri (string-append
"http://projects.gw-computing.net/attachments/download/78/dfc-"
"http://projects.gw-computing.net/attachments/download/79/dfc-"
version ".tar.gz"))
(sha256
(base32
"1b4hfqv23l87cb37fxwzfk2sgspkyxpr3ig2hsd23hr6mm982j7z"))))
"0zk1ppx93ijimf4sbgqilxxikpsa2gmpbynknyh41xy7jbdjxp0b"))))
(build-system cmake-build-system)
(arguments '(#:tests? #f)) ; There are no tests.
(native-inputs `(("gettext" ,gnu-gettext)))
@ -101,14 +101,14 @@ graphs and can export its output to different formats.")
(define-public htop
(package
(name "htop")
(version "1.0.2")
(version "1.0.3")
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/htop/"
(uri (string-append "http://hisham.hm/htop/releases/"
version "/htop-" version ".tar.gz"))
(sha256
(base32
"18fqrhvnm7h4c3939av8lpiwrwxbyw6hcly0jvq0vkjf0ixnaq7f"))))
"0a8qbpsifzjwc4f45xfwm48jhm59g6q5hlib4bf7z13mgy95fp05"))))
(build-system gnu-build-system)
(inputs
`(("ncurses" ,ncurses)))
@ -617,7 +617,7 @@ system administrator.")
(define-public sudo
(package
(name "sudo")
(version "1.8.10p2")
(version "1.8.10p3")
(source (origin
(method url-fetch)
(uri
@ -627,10 +627,10 @@ system administrator.")
version ".tar.gz")))
(sha256
(base32
"1wbrygz584abmywklq0b4xhqn3s1bjk3rrladslr5nycdpdvhv5s"))))
"002l6h27pnhb77b65frhazbhknsxvrsnkpi43j7i0qw1lrgi7nkf"))))
(build-system gnu-build-system)
(arguments
'(#:configure-flags '("--with-logpath=/var/log/sudo.log")
`(#:configure-flags '("--with-logpath=/var/log/sudo.log")
#:phases (alist-cons-before
'configure 'pre-configure
(lambda _
@ -644,7 +644,18 @@ system administrator.")
"")
(("^install: (.*)install-sudoers(.*)" _ before after)
;; Don't try to create /etc/sudoers.
(string-append "install: " before after "\n"))))
(string-append "install: " before after "\n")))
;; XXX FIXME sudo 1.8.10p3 was bootstrapped with a
;; prerelease libtool, which fails on MIPS in the absence
;; of /usr/bin/file. As a temporary workaround, we patch
;; the configure script to hardcode use of the little
;; endian N32 ABI on MIPS.
,@(if (equal? "mips64el-linux" (or (%current-target-system)
(%current-system)))
'((substitute* "configure"
(("\\$emul") "elf32ltsmipn32")))
'()))
%standard-phases)
;; XXX: The 'testsudoers' test series expects user 'root' to exist, but
@ -668,7 +679,7 @@ commands and their arguments.")
(define-public wpa-supplicant
(package
(name "wpa-supplicant")
(version "2.1")
(version "2.2")
(source (origin
(method url-fetch)
(uri (string-append
@ -677,7 +688,7 @@ commands and their arguments.")
".tar.gz"))
(sha256
(base32
"0xxjw7lslvql1ykfbwmbhdrnjsjljf59fbwf837418s97dz2wqwi"))))
"1vf8jc4yyksbxf86narvsli3vxfbm8nbnim2mdp66nd6d3yvin70"))))
(build-system gnu-build-system)
(arguments
'(#:phases (alist-replace
@ -762,3 +773,33 @@ This package provides the 'wpa_supplicant' daemon and the 'wpa_cli' command.")
"WakeLan broadcasts a properly formatted UDP packet across the local area
network, which causes enabled computers to power on.")
(license gpl2+)))
(define-public dmidecode
(package
(name "dmidecode")
(version "2.12")
(source (origin
(method url-fetch)
(uri (string-append
"mirror://savannah/dmidecode/dmidecode-"
version ".tar.bz2"))
(sha256
(base32
"122hgaw8mpqdfra159lfl6pyk3837giqx6vq42j64fjnbl2z6gwi"))))
(build-system gnu-build-system)
(arguments
'(#:phases (alist-delete 'configure %standard-phases)
#:tests? #f ; no 'check' target
#:make-flags (list (string-append "prefix="
(assoc-ref %outputs "out")))))
(home-page "http://www.nongnu.org/dmidecode/")
(synopsis "Read hardware information from the BIOS")
(description
"Dmidecode reports information about your system's hardware as described
in your system BIOS according to the SMBIOS/DMI standard. This typically
includes system manufacturer, model name, serial number, BIOS version, asset
tag as well as a lot of other details of varying level of interest and
reliability depending on the manufacturer. This will often include usage
status for the CPU sockets, expansion slots (e.g. AGP, PCI, ISA) and memory
module slots, and the list of I/O ports (e.g. serial, parallel, USB).")
(license gpl2+)))

View File

@ -84,14 +84,14 @@ solve the shortest vector problem.")
(define-public pari-gp
(package
(name "pari-gp")
(version "2.7.0")
(version "2.7.1")
(source (origin
(method url-fetch)
(uri (string-append
"http://pari.math.u-bordeaux.fr/pub/pari/unix/pari-"
version ".tar.gz"))
(sha256 (base32
"1hk7lmq09crr9jvia8nxzhvbwf8mw62xk456i96jg8dljh0r9sgz"))))
"1gj1rddi22hinzwy7r6hljgbi252wwwyd6gapg4hvcn0ycc7jqyc"))))
(build-system gnu-build-system)
(inputs `(("gmp" ,gmp)
("perl" ,perl)

View File

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014 John Darrington <jmd@gnu.org>
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -46,39 +47,48 @@
("python" ,python-2)
("tcsh" ,tcsh)))
(arguments
`(#:phases
(alist-replace
'configure
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(substitute* '("libs/config/configure"
"libs/spirit/classic/phoenix/test/runtest.sh"
"tools/build/v2/doc/bjam.qbk"
"tools/build/v2/engine/execunix.c"
"tools/build/v2/engine/Jambase"
"tools/build/v2/engine/jambase.c")
(("/bin/sh") (which "sh")))
(setenv "SHELL" (which "sh"))
(setenv "CONFIG_SHELL" (which "sh"))
(zero? (system* "./bootstrap.sh"
(string-append "--prefix=" out)
"--with-toolset=gcc"))))
(alist-replace
'build
(lambda _
(zero? (system* "./b2" "threading=multi" "link=shared")))
(let ((build-flags
`("threading=multi" "link=shared"
;; Boost's 'context' library is not yet supported on mips64, so
;; we disable it. The 'coroutine' library depends on 'context',
;; so we disable that too.
,@(if (equal? "mips64el-linux" (or (%current-target-system)
(%current-system)))
'("--without-context" "--without-coroutine")
'()))))
`(#:phases
(alist-replace
'check
(lambda _ #t)
'configure
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(substitute* '("libs/config/configure"
"libs/spirit/classic/phoenix/test/runtest.sh"
"tools/build/v2/doc/bjam.qbk"
"tools/build/v2/engine/execunix.c"
"tools/build/v2/engine/Jambase"
"tools/build/v2/engine/jambase.c")
(("/bin/sh") (which "sh")))
(setenv "SHELL" (which "sh"))
(setenv "CONFIG_SHELL" (which "sh"))
(zero? (system* "./bootstrap.sh"
(string-append "--prefix=" out)
"--with-toolset=gcc"))))
(alist-replace
'install
'build
(lambda _
(zero? (system* "./b2" "install" "threading=multi" "link=shared")))
%standard-phases))))))
(zero? (system* "./b2" ,@build-flags)))
(alist-replace
'check
(lambda _ #t)
(alist-replace
'install
(lambda _
(zero? (system* "./b2" "install" ,@build-flags)))
%standard-phases)))))))
(home-page "http://boost.org")
(synopsis "Peer-reviewed portable C++ source libraries")

View File

@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
;;;
;;; This file is part of GNU Guix.
;;;
@ -98,14 +98,14 @@ extraction from CDs.")
(define-public xorriso
(package
(name "xorriso")
(version "1.3.6.pl01")
(version "1.3.8")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/xorriso/xorriso-"
version ".tar.gz"))
(sha256
(base32
"07bm20kb4f6q5pbkxhy7w8ggw2gxkrq45cda2kbh6wgphs5z2h7q"))))
"0zhhj9lr9z7hnb2alac54mc28w1l0mbanphhpmy3ylsi8rih84lh"))))
(build-system gnu-build-system)
(inputs
`(("acl" ,acl)
@ -173,14 +173,14 @@ reconstruction capability.")
(define-public dvdisaster
(package
(name "dvdisaster")
(version "0.72.4")
(version "0.72.6")
(source (origin
(method url-fetch)
(uri (string-append "http://dvdisaster.net/downloads/dvdisaster-"
version ".tar.bz2"))
(sha256
(base32
"0pm039a78h7m9vvjmmjfkl05ii6qdmfhvbypxjbc7j5w82y66is4"))))
"0sqrprc5rh3shnfli25m2wy0i5f83db54iv04s5s7bxf77m7sy79"))))
(build-system gnu-build-system)
(inputs
`(("gtk+" ,gtk+-2)))
@ -192,7 +192,14 @@ reconstruction capability.")
`(;; Parallel builds appear to be unsafe, see
;; <http://hydra.gnu.org/build/49331/nixlog/1/raw>.
#:parallel-build? #f
#:tests? #f)) ; no check target
#:tests? #f ; no check target
#:phases
(alist-cons-before
'patch-source-shebangs 'sanitise
(lambda _
;; delete dangling symlink
(delete-file ".#GNUmakefile"))
%standard-phases)))
(home-page "http://dvdisaster.net/en/index.html")
(synopsis "error correcting codes for optical media images")
(description "Optical media (CD,DVD,BD) keep their data only for a

View File

@ -272,14 +272,14 @@ Go. It also includes runtime support libraries for these languages.")
(define-public gcc-4.9
(package (inherit gcc-4.7)
(version "4.9.0")
(version "4.9.1")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/gcc/gcc-"
version "/gcc-" version ".tar.bz2"))
(sha256
(base32
"0mqjxpw2klskls00lwx1k24pnyzm3whqxg3hk74c3sddgfllgc5r"))))))
"0zki3ngi0gsidnmsp88mjl2868cc7cm5wm1vwqw6znja28d7hd6k"))))))
(define (custom-gcc gcc name languages)
"Return a custom version of GCC that supports LANGUAGES."

View File

@ -101,6 +101,7 @@ provided as well as the framework to add new color models and data types.")
("libjpeg" ,libjpeg-8)))
(native-inputs
`(("pkg-config" ,pkg-config)
("glib" ,glib "bin") ; for gtester
("intltool" ,intltool)))
(home-page "http://gegl.org")
(synopsis "Graph based image processing framework")

View File

@ -449,6 +449,7 @@ some form of information without getting in the user's way.")
("pango" ,pango)))
(native-inputs
`(("pkg-config" ,pkg-config)
("glib:bin" ,glib "bin")
("gobject-introspection" ,gobject-introspection)
("intltool" ,intltool)))
(home-page "https://wiki.gnome.org/Libpeas")
@ -1138,6 +1139,7 @@ controls using the Bonobo component framework.")
("libxml2" ,libxml2)))
(native-inputs
`(("intltool" ,intltool)
("glib" ,glib "bin")
("pkg-config" ,pkg-config)))
(home-page "https://developer.gnome.org/goffice/")
(synopsis "Document-centric objects and utilities")
@ -1187,6 +1189,7 @@ controls using the Bonobo component framework.")
("zlib" ,zlib)))
(native-inputs
`(("intltool" ,intltool)
("glib:bin" ,glib "bin")
("pkg-config" ,pkg-config)))
(home-page "http://www.gnumeric.org")
(synopsis "Spreadsheet application")

48
gnu/packages/libftdi.scm Normal file
View File

@ -0,0 +1,48 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages libftdi)
#:use-module (guix licenses)
#:use-module (guix download)
#:use-module (guix packages)
#:use-module (gnu packages)
#:use-module (gnu packages libusb)
#:use-module (guix build-system cmake))
(define-public libftdi
(package
(name "libftdi")
(version "1.1")
(source (origin
(method url-fetch)
(uri (string-append
"http://www.intra2net.com/en/developer/libftdi/download/libftdi1-"
version ".tar.bz2"))
(sha256
(base32
"088yh8pxd6q53ssqndydcw1dkq51cjqyahc03lm6iip22cdazcf0"))))
(build-system cmake-build-system)
(native-inputs
`(("libusb" ,libusb)))
(home-page "http://www.intra2net.com")
(synopsis "FTDI USB driver with bitbang mode")
(description
"libFTDI is a library to talk to FTDI chips: FT232BM,
FT245BM, FT2232C, FT2232D, FT245R and FT232H including the popular
bitbangmode.")
(license lgpl2.1+)))

View File

@ -1273,7 +1273,18 @@ to use Linux' inotify mechanism, which allows file accesses to be monitored.")
("zlib" ,guix:zlib)))
(arguments
`(#:tests? #f ; FIXME: Investigate test failures
#:configure-flags '("--with-xz" "--with-zlib")))
#:configure-flags '("--with-xz" "--with-zlib")
#:phases (alist-cons-after
'install 'install-modprobe&co
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin")))
(for-each (lambda (tool)
(symlink "kmod"
(string-append bin "/" tool)))
'("insmod" "rmmod" "lsmod" "modprobe"
"modinfo" "depmod"))))
%standard-phases)))
(home-page "https://www.kernel.org/")
(synopsis "Kernel module tools")
(description "kmod is a set of tools to handle common tasks with Linux

View File

@ -301,6 +301,7 @@ repository and Maildir/IMAP as LOCAL repository.")
(build-system gnu-build-system)
(native-inputs
`(("pkg-config" ,pkg-config)
("glib" ,glib "bin") ; for gtester
("texinfo" ,texinfo)))
;; TODO: Add webkit and gtk to build the mug GUI.
(inputs

View File

@ -27,7 +27,7 @@
(define-public nano
(package
(name "nano")
(version "2.3.4")
(version "2.3.6")
(source
(origin
(method url-fetch)
@ -35,7 +35,7 @@
version ".tar.gz"))
(sha256
(base32
"1hcqv5yam4pkqx1sviigikzvd7n1pz6lwp7lzpdzagck9fgi4x0p"))))
"0d4ml0v9yi37pjs211xs38w9whsj6530wz3kmrvwgh8jigqz6jx7"))))
(build-system gnu-build-system)
(inputs
`(("gettext" ,gnu-gettext)

View File

@ -34,17 +34,17 @@
#:use-module (gnu packages gettext)
#:use-module (gnu packages texinfo))
(define-public guix-0.6
(define guix-0.7
(package
(name "guix")
(version "0.6")
(version "0.7")
(source (origin
(method url-fetch)
(uri (string-append "ftp://alpha.gnu.org/gnu/guix/guix-"
version ".tar.gz"))
(sha256
(base32
"01xw51wizhsk827w4xp79k2b6dxjaviw04r6rbrb85qdxnwg6k9n"))))
"05r7bsjgc0a4m7yy433n3c1dlv2yqlf3qpwlhayn9djhpp2q1ssb"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags (list
@ -109,10 +109,12 @@ upgrades and roll-backs, per-user profiles, and much more. It is based on the
Nix package manager.")
(license gpl3+)))
(define-public guix
(define-public guix guix-0.7)
(define-public guix-devel
;; Development version of Guix.
(let ((commit "0ae8c15"))
(package (inherit guix-0.6)
(package (inherit guix-0.7)
(version (string-append "0.6." commit))
(source (origin
(method git-fetch)
@ -124,7 +126,7 @@ Nix package manager.")
(base32
"1y6mwzwsjdxbfibqypb55dix371rifhfz0bygfr8k868lcdsawic"))))
(arguments
(substitute-keyword-arguments (package-arguments guix-0.6)
(substitute-keyword-arguments (package-arguments guix-0.7)
((#:phases phases)
`(alist-cons-before
'configure 'bootstrap
@ -160,4 +162,4 @@ Nix package manager.")
("gettext" ,gnu-gettext)
("texinfo" ,texinfo)
("graphviz" ,graphviz)
,@(package-native-inputs guix-0.6))))))
,@(package-native-inputs guix-0.7))))))

View File

@ -27,7 +27,7 @@
(define-public parallel
(package
(name "parallel")
(version "20140622")
(version "20140722")
(source
(origin
(method url-fetch)
@ -35,7 +35,7 @@
version ".tar.bz2"))
(sha256
(base32
"0frlp645yghnwq8x7dk8pdm6id1mqkkh7w48mcbpd04pw225gljq"))))
"165vf8hpl47z38aswsll1284l8xa9a8jwx3a3d2rzshm9yzbiq5n"))))
(build-system gnu-build-system)
(inputs `(("perl" ,perl)))
(home-page "http://www.gnu.org/software/parallel/")

View File

@ -2,17 +2,11 @@ This patch changes 'modprobe' & co. so they honor the 'LINUX_MODULE_DIRECTORY'
environment variable, rather than looking for modules exclusively in
/lib/modules.
Patch by David Guibert, from Nixpkgs; adjusted to use 'LINUX_MODULE_DIRECTORY'
rather than 'MODULE_DIR' as the variable name.
commit cf2c95edb7918bc658f6cae93793c1949fc9cb6e
Author: David Guibert <david.guibert@gmail.com>
Date: Fri Aug 5 14:20:12 2011 +0200
introduce module-dir
Original patch by David Guibert, from Nixpkgs; adjusted to use
'LINUX_MODULE_DIRECTORY' rather than 'MODULE_DIR' as the variable name.
diff --git a/depmod.c b/depmod.c
index a1d2f8c..9362a35 100644
index a1d2f8c..ff579c7 100644
--- a/depmod.c
+++ b/depmod.c
@@ -48,9 +48,6 @@
@ -38,26 +32,30 @@ index a1d2f8c..9362a35 100644
}
+ if((module_dir = getenv("LINUX_MODULE_DIRECTORY")) == NULL) {
+ module_dir = "/lib/modules/";
+ module_dir = "/lib/modules";
+ }
+
while ((line = getline_wrapped(cfile, &linenum)) != NULL) {
char *ptr = line;
char *cmd, *modname;
@@ -1550,7 +1552,7 @@ static int parse_config_file(const char *filename,
@@ -1549,8 +1551,8 @@ static int parse_config_file(const char *filename,
0, *search);
continue;
}
nofail_asprintf(&dirname, "%s%s%s/%s", basedir,
- nofail_asprintf(&dirname, "%s%s%s/%s", basedir,
- MODULE_DIR, kernelversion, search_path);
+ nofail_asprintf(&dirname, "%s%s/%s/%s", basedir,
+ module_dir, kernelversion, search_path);
len = strlen(dirname);
*search = add_search(dirname, len, *search);
free(dirname);
@@ -1565,7 +1567,7 @@ static int parse_config_file(const char *filename,
@@ -1564,8 +1566,8 @@ static int parse_config_file(const char *filename,
if (!regex_match(kernelversion, (const char *)version))
continue;
nofail_asprintf(&pathname, "%s%s%s/%s/%s.ko", basedir,
- nofail_asprintf(&pathname, "%s%s%s/%s/%s.ko", basedir,
- MODULE_DIR, kernelversion, subdir, modname);
+ nofail_asprintf(&pathname, "%s%s/%s/%s/%s.ko", basedir,
+ module_dir, kernelversion, subdir, modname);
*overrides = add_override(pathname, *overrides);
@ -76,24 +74,26 @@ index a1d2f8c..9362a35 100644
- nofail_asprintf(&dirname, "%s%s%s", basedir, MODULE_DIR, version);
+ if((module_dir = getenv("LINUX_MODULE_DIRECTORY")) == NULL) {
+ module_dir = "/lib/modules/";
+ module_dir = "/lib/modules";
+ }
+
+ nofail_asprintf(&dirname, "%s%s%s", basedir, module_dir, version);
+ nofail_asprintf(&dirname, "%s%s/%s", basedir, module_dir, version);
if (maybe_all) {
if (!doing_stdout && !depfile_out_of_date(dirname))
@@ -1850,7 +1857,7 @@ int main(int argc, char *argv[])
@@ -1849,8 +1856,8 @@ int main(int argc, char *argv[])
char *dirname;
size_t len;
nofail_asprintf(&dirname, "%s%s%s/updates", basedir,
- nofail_asprintf(&dirname, "%s%s%s/updates", basedir,
- MODULE_DIR, version);
+ nofail_asprintf(&dirname, "%s%s/%s/updates", basedir,
+ module_dir, version);
len = strlen(dirname);
search = add_search(dirname, len, search);
}
diff --git a/modinfo.c b/modinfo.c
index 1dd8469..67b1041 100644
index 1dd8469..6a1865b 100644
--- a/modinfo.c
+++ b/modinfo.c
@@ -19,9 +19,6 @@
@ -113,7 +113,7 @@ index 1dd8469..67b1041 100644
+ char *module_dir;
+
+ if((module_dir = getenv("LINUX_MODULE_DIRECTORY")) == NULL) {
+ module_dir = "/lib/modules/";
+ module_dir = "/lib/modules";
+ }
if (strchr(name, '.') || strchr(name, '/')) {
@ -131,7 +131,7 @@ index 1dd8469..67b1041 100644
/* Search for it in modules.dep. */
nofail_asprintf(&depname, "%s/%s", moddir, "modules.dep");
diff --git a/modprobe.c b/modprobe.c
index 5464f45..d9fbf9d 100644
index 5464f45..cb57917 100644
--- a/modprobe.c
+++ b/modprobe.c
@@ -86,10 +86,6 @@ typedef enum

View File

@ -115,6 +115,11 @@
"--with-system-xpdf"
"--with-system-zlib"
"--with-system-zziplib")
;; Disable tests on mips64 to cope with a failure of luajiterr.test.
;; XXX FIXME fix luajit properly on mips64.
#:tests? ,(not (equal? "mips64el-linux" (or (%current-target-system)
(%current-system))))
#:phases
(alist-cons-after
'install 'postinst

View File

@ -193,7 +193,6 @@
"--disable-armv6t2"
"--disable-vfp"
"--disable-neon"
"--disable-vis"
"--disable-mips32r2"
"--disable-mipsdspr1"
"--disable-mipsdspr2"

View File

@ -96,7 +96,8 @@ sockets."
(mkdir-p "/var/run/avahi-daemon")))
(user-groups (list (user-group
(name "avahi"))))
(name "avahi")
(system? #t))))
(user-accounts (list (user-account
(name "avahi")
(group "avahi")

View File

@ -25,10 +25,12 @@
#:use-module (gnu system linux) ; 'pam-service', etc.
#:use-module (gnu packages admin)
#:use-module ((gnu packages linux)
#:select (udev kbd))
#:select (udev kbd e2fsprogs))
#:use-module ((gnu packages base)
#:select (glibc-final))
#:use-module (gnu packages package-management)
#:use-module ((guix build linux-initrd)
#:select (mount-flags->bit-mask))
#:use-module (guix gexp)
#:use-module (guix monads)
#:use-module (srfi srfi-1)
@ -96,11 +98,14 @@ This service must be the root of the service dependency graph so that its
(respawn? #f)))))
(define* (file-system-service device target type
#:key (check? #t) options (title 'any))
#:key (flags '()) (check? #t)
create-mount-point? options (title 'any))
"Return a service that mounts DEVICE on TARGET as a file system TYPE with
OPTIONS. TITLE is a symbol specifying what kind of name DEVICE is: 'label for
a partition label, 'device for a device file name, or 'any. When CHECK? is
true, check the file system before mounting it."
true, check the file system before mounting it. When CREATE-MOUNT-POINT? is
true, create TARGET if it does not exist yet. FLAGS is a list of symbols,
such as 'read-only' etc."
(with-monad %store-monad
(return
(service
@ -109,10 +114,22 @@ true, check the file system before mounting it."
(documentation "Check, mount, and unmount the given file system.")
(start #~(lambda args
(let ((device (canonicalize-device-spec #$device '#$title)))
#$(if check?
#~(check-file-system device #$type)
#$(if create-mount-point?
#~(mkdir-p #$target)
#~#t)
(mount device #$target #$type 0 #$options))
#$(if check?
#~(begin
;; Make sure fsck.ext2 & co. can be found.
(setenv "PATH"
(string-append
#$e2fsprogs "/sbin:"
"/run/current-system/profile/sbin:"
(getenv "PATH")))
(check-file-system device #$type))
#~#t)
(mount device #$target #$type
#$(mount-flags->bit-mask flags)
#$options))
#t))
(stop #~(lambda args
;; Normally there are no processes left at this point, so
@ -455,6 +472,7 @@ passed to @command{guix-daemon}."
(user-accounts accounts)
(user-groups (list (user-group
(name builder-group)
(system? #t)
;; Use a fixed GID so that we can create the
;; store with the right owner.
@ -466,8 +484,13 @@ passed to @command{guix-daemon}."
(with-monad %store-monad
(return (service
(provision '(udev))
;; Udev needs /dev to be a 'devtmpfs' mount so that new device
;; nodes can be added: see
;; <http://www.linuxfromscratch.org/lfs/view/development/chapter07/udev.html>.
(requirement '(root-file-system))
(documentation "Populate the /dev directory.")
(documentation "Populate the /dev directory, dynamically.")
(start #~(lambda ()
(define udevd
(string-append #$udev "/libexec/udev/udevd"))

View File

@ -86,7 +86,8 @@ and policy files. For example, to allow avahi-daemon to use the system bus,
(string-append "--config-file=" #$conf "/system.conf"))))
(stop #~(make-kill-destructor))
(user-groups (list (user-group
(name "messagebus"))))
(name "messagebus")
(system? #t))))
(user-accounts (list (user-account
(name "messagebus")
(group "messagebus")

View File

@ -49,6 +49,7 @@
(use-modules (ice-9 ftw)
(guix build syscalls)
(guix build utils)
((guix build linux-initrd)
#:select (check-file-system canonicalize-device-spec)))

View File

@ -107,7 +107,8 @@ policy) as the @code{tor} unprivileged user."
(stop #~(make-kill-destructor))
(user-groups (list (user-group
(name "tor"))))
(name "tor")
(system? #t))))
(user-accounts (list (user-account
(name "tor")
(group "tor")

View File

@ -97,7 +97,12 @@ EndSection
#~(begin
(use-modules (ice-9 match))
;; TODO: Check for ~/.xsession.
;; First, try to run ~/.xsession.
(let* ((home (getenv "HOME"))
(file (string-append home "/.xsession")))
(false-if-exception (execl file file)))
;; Then try a pre-configured session type.
(match (command-line)
((_ "ratpoison")
(execl (string-append #$ratpoison "/bin/ratpoison")))
@ -146,10 +151,15 @@ reboot_cmd " dmd "/sbin/reboot
(provision '(xorg-server))
(requirement '(user-processes host-name udev))
(start
#~(make-forkexec-constructor
(list (string-append #$slim "/bin/slim") "-nodaemon")
#:environment-variables
(list (string-append "SLIM_CFGFILE=" #$slim.cfg))))
#~(lambda ()
;; A stale lock file can prevent SLiM from starting, so remove it
;; to be on the safe side.
(false-if-exception (delete-file "/var/run/slim.lock"))
(fork+exec-command
(list (string-append #$slim "/bin/slim") "-nodaemon")
#:environment-variables
(list (string-append "SLIM_CFGFILE=" #$slim.cfg)))))
(stop #~(make-kill-destructor))
(respawn? #t)
(pam-services

View File

@ -181,11 +181,13 @@ as 'needed-for-boot'."
(sequence %store-monad
(map (match-lambda
(($ <file-system> device title target type flags opts
#f check?)
#f check? create?)
(file-system-service device target type
#:title title
#:check? check?
#:options opts)))
#:create-mount-point? create?
#:options opts
#:flags flags)))
file-systems)))
(define (essential-services os)
@ -361,7 +363,8 @@ alias ll='ls -l'
'active-groups'."
#~(list #$(user-group-name group)
#$(user-group-password group)
#$(user-group-id group)))
#$(user-group-id group)
#$(user-group-system? group)))
(define (user-account->gexp account)
"Turn ACCOUNT, a <user-account> object, into a list-valued gexp suitable for

View File

@ -28,9 +28,16 @@
file-system-needed-for-boot?
file-system-flags
file-system-options
file-system-check?
file-system-create-mount-point?
%fuse-control-file-system
%binary-format-file-system))
%binary-format-file-system
%shared-memory-file-system
%pseudo-terminal-file-system
%devtmpfs-file-system
%base-file-systems))
;;; Commentary:
;;;
@ -54,7 +61,9 @@
(needed-for-boot? file-system-needed-for-boot? ; Boolean
(default #f))
(check? file-system-check? ; Boolean
(default #t)))
(default #t))
(create-mount-point? file-system-create-mount-point? ; Boolean
(default #f)))
(define %fuse-control-file-system
;; Control file system for Linux' file systems in user-space (FUSE).
@ -72,4 +81,51 @@
(type "binfmt_misc")
(check? #f)))
(define %devtmpfs-file-system
;; /dev as a 'devtmpfs' file system, needed for udev.
(file-system
(device "none")
(mount-point "/dev")
(type "devtmpfs")
(check? #f)
;; Mount it from the initrd so /dev/pts & co. can then be mounted over it.
(needed-for-boot? #t)))
(define %tty-gid
;; ID of the 'tty' group. Allocate it statically to make it easy to refer
;; to it from here and from the 'tty' group definitions.
996)
(define %pseudo-terminal-file-system
;; The pseudo-terminal file system. It needs to be mounted so that
;; statfs(2) returns DEVPTS_SUPER_MAGIC like libc's getpt(3) expects (and
;; thus openpty(3) and its users, such as xterm.)
(file-system
(device "none")
(mount-point "/dev/pts")
(type "devpts")
(check? #f)
(needed-for-boot? #f)
(create-mount-point? #t)
(options (string-append "gid=" (number->string %tty-gid) ",mode=620"))))
(define %shared-memory-file-system
;; Shared memory.
(file-system
(device "tmpfs")
(mount-point "/dev/shm")
(type "tmpfs")
(check? #f)
(flags '(no-suid no-dev))
(options "size=50%") ;TODO: make size configurable
(create-mount-point? #t)))
(define %base-file-systems
;; List of basic file systems to be mounted. Note that /proc and /sys are
;; currently mounted by the initrd.
(list %devtmpfs-file-system
%pseudo-terminal-file-system
%shared-memory-file-system))
;;; file-systems.scm ends here

View File

@ -20,6 +20,7 @@
#:use-module (gnu)
#:use-module (guix gexp)
#:use-module (guix monads)
#:use-module ((guix store) #:select (%store-prefix))
#:use-module (gnu packages linux)
#:use-module (gnu packages package-management)
#:use-module (gnu packages disk)
@ -42,6 +43,99 @@ manual."
"-f" (string-append #$guix "/share/info/guix.info")
"-n" "System Installation")))
(define %backing-directory
;; Sub-directory used as the backing store for copy-on-write.
"/tmp/guix-inst")
(define (make-cow-store target)
"Return a gexp that makes the store copy-on-write, using TARGET as the
backing store. This is useful when TARGET is on a hard disk, whereas the
current store is on a RAM disk."
(define (unionfs read-only read-write mount-point)
;; Make MOUNT-POINT the union of READ-ONLY and READ-WRITE.
;; Note: in the command below, READ-WRITE appears before READ-ONLY so that
;; it is considered a "higher-level branch", as per unionfs-fuse(8),
;; thereby allowing files existing on READ-ONLY to be copied over to
;; READ-WRITE.
#~(fork+exec-command
(list (string-append #$unionfs-fuse "/bin/unionfs")
"-o"
"cow,allow_other,use_ino,max_files=65536,nonempty"
(string-append #$read-write "=RW:" #$read-only "=RO")
#$mount-point)))
(define (set-store-permissions directory)
;; Set the right perms on DIRECTORY to use it as the store.
#~(begin
(chown #$directory 0 30000) ;use the fixed 'guixbuild' GID
(chmod #$directory #o1775)))
#~(begin
(unless (file-exists? "/.ro-store")
(mkdir "/.ro-store")
(mount #$(%store-prefix) "/.ro-store" "none"
(logior MS_BIND MS_RDONLY)))
(let ((rw-dir (string-append target #$%backing-directory)))
(mkdir-p rw-dir)
(mkdir-p "/.rw-store")
#$(set-store-permissions #~rw-dir)
#$(set-store-permissions "/.rw-store")
;; Mount the union, then atomically make it the store.
(and #$(unionfs "/.ro-store" #~rw-dir "/.rw-store")
(begin
(sleep 1) ;XXX: wait for unionfs to be ready
(mount "/.rw-store" #$(%store-prefix) "" MS_MOVE)
(rmdir "/.rw-store"))))))
(define (cow-store-service)
"Return a service that makes the store copy-on-write, such that writes go to
the user's target storage device rather than on the RAM disk."
;; See <http://bugs.gnu.org/18061> for the initial report.
(with-monad %store-monad
(return (service
(requirement '(root-file-system user-processes))
(provision '(cow-store))
(documentation
"Make the store copy-on-write, with writes going to \
the given target.")
(start #~(case-lambda
((target)
#$(make-cow-store #~target)
target)
(else
;; Do nothing, and mark the service as stopped.
#f)))
(stop #~(lambda (target)
;; Delete the temporary directory, but leave everything
;; mounted as there may still be processes using it
;; since 'user-processes' doesn't depend on us.
(delete-file-recursively
(string-append target #$%backing-directory))))))))
(define (configuration-template-service)
"Return a dummy service whose purpose is to install an operating system
configuration template file in the installation system."
(define local-template
"/etc/configuration-template.scm")
(define template
(search-path %load-path "gnu/system/os-config.tmpl"))
(mlet %store-monad ((template (interned-file template)))
(return (service
(requirement '(root-file-system))
(provision '(os-config-template))
(documentation
"This dummy service installs an OS configuration template.")
(start #~(const #t))
(stop #~(const #f))
(activate
#~(unless (file-exists? #$local-template)
(copy-file #$template #$local-template)))))))
(define (installation-services)
"Return the list services for the installation image."
(let ((motd (text-file "motd" "
@ -71,6 +165,9 @@ You have been warned. Thanks for being so brave.
#:auto-login "guest"
#:login-program (log-to-info))
;; Documentation add-on.
(configuration-template-service)
;; A bunch of 'root' ttys.
(normal-tty "tty3")
(normal-tty "tty4")
@ -88,6 +185,10 @@ You have been warned. Thanks for being so brave.
;; Start udev so that useful device nodes are available.
(udev-service)
;; Add the 'cow-store' service, which users have to start manually
;; since it takes the installation directory as an argument.
(cow-store-service)
;; Install Unicode support and a suitable font.
(console-font-service "tty1")
(console-font-service "tty2")
@ -117,10 +218,11 @@ Use Alt-F2 for documentation.
(file-systems
;; Note: the disk image build code overrides this root file system with
;; the appropriate one.
(list (file-system
(cons (file-system
(mount-point "/")
(device "gnu-disk-image")
(type "ext4"))))
(type "ext4"))
%base-file-systems))
(users (list (user-account
(name "guest")

31
gnu/system/os-config.tmpl Normal file
View File

@ -0,0 +1,31 @@
;; This is an operating system configuration template.
(use-modules (gnu))
(operating-system
(host-name "antelope")
(timezone "Europe/Paris")
(locale "en_US.UTF-8")
;; Assuming /dev/sdX is the target hard disk, and "root" is
;; the label of the target root file system.
(bootloader (grub-configuration (device "/dev/sdX")))
(file-systems (cons (file-system
(device "root")
(title 'label)
(mount-point "/")
(type "ext4"))
%base-file-systems))
;; This is where user accounts are specified. The "root"
;; account is implicit, and is initially created with the
;; empty password.
(users (list (user-account
(name "alice")
(comment "Bob's sister")
(group "users")
;; Adding the account to the "wheel" group
;; makes it a sudoer.
(supplementary-groups '("wheel"))
(home-directory "/home/alice")))))

View File

@ -20,6 +20,8 @@
#:use-module (guix records)
#:use-module (guix gexp)
#:use-module (guix monads)
#:use-module ((gnu system file-systems)
#:select (%tty-gid))
#:use-module ((gnu packages admin)
#:select (shadow))
#:use-module (gnu packages bash)
@ -41,6 +43,7 @@
user-group-name
user-group-password
user-group-id
user-group-system?
default-skeletons
skeleton-directory
@ -73,28 +76,33 @@
user-group?
(name user-group-name)
(password user-group-password (default #f))
(id user-group-id (default #f)))
(id user-group-id (default #f))
(system? user-group-system? ; Boolean
(default #f)))
(define %base-groups
;; Default set of groups.
(list (user-group (name "root") (id 0))
(user-group (name "wheel")) ; root-like users
(user-group (name "users")) ; normal users
(user-group (name "nogroup")) ; for daemons etc.
(let-syntax ((system-group (syntax-rules ()
((_ args ...)
(user-group (system? #t) args ...)))))
(list (system-group (name "root") (id 0))
(system-group (name "wheel")) ; root-like users
(system-group (name "users")) ; normal users
(system-group (name "nogroup")) ; for daemons etc.
;; The following groups are conventionally used by things like udev to
;; control access to hardware devices.
(user-group (name "tty"))
(user-group (name "dialout"))
(user-group (name "kmem"))
(user-group (name "video"))
(user-group (name "audio"))
(user-group (name "netdev")) ; used in avahi-dbus.conf
(user-group (name "lp"))
(user-group (name "disk"))
(user-group (name "floppy"))
(user-group (name "cdrom"))
(user-group (name "tape"))))
;; The following groups are conventionally used by things like udev to
;; control access to hardware devices.
(system-group (name "tty") (id %tty-gid))
(system-group (name "dialout"))
(system-group (name "kmem"))
(system-group (name "video"))
(system-group (name "audio"))
(system-group (name "netdev")) ; used in avahi-dbus.conf
(system-group (name "lp"))
(system-group (name "disk"))
(system-group (name "floppy"))
(system-group (name "cdrom"))
(system-group (name "tape")))))
(define (default-skeletons)
"Return the default skeleton files for /etc/skel. These files are copied by

View File

@ -250,6 +250,9 @@ derivations for SYSTEM. Include propagated inputs in the result."
inputs))))
(define standard-inputs
;; FIXME: Memoization should be associated with the open store (as for
;; 'add-text-to-store'), otherwise we get .drv that may not be valid when
;; switching to another store.
(memoize
(lambda (system)
"Return the list of implicit standard inputs used with the GNU Build

View File

@ -36,13 +36,14 @@
;;;
;;; Code:
(define* (add-group name #:key gid password
(define* (add-group name #:key gid password system?
(log-port (current-error-port)))
"Add NAME as a user group, with the given numeric GID if specified."
;; Use 'groupadd' from the Shadow package.
(format log-port "adding group '~a'...~%" name)
(let ((args `(,@(if gid `("-g" ,(number->string gid)) '())
,@(if password `("-p" ,password) '())
,@(if system? `("--system") '())
,name)))
(zero? (apply system* "groupadd" args))))
@ -128,9 +129,11 @@ numeric gid or #f."
;; Then create the groups.
(for-each (match-lambda
((name password gid)
((name password gid system?)
(unless (false-if-exception (getgrnam name))
(add-group name #:gid gid #:password password))))
(add-group name
#:gid gid #:password password
#:system? system?))))
groups)
;; Finally create the other user accounts.

View File

@ -40,6 +40,7 @@
find-partition-by-label
canonicalize-device-spec
mount-flags->bit-mask
check-file-system
mount-file-system
bind-mount
@ -393,6 +394,9 @@ networking values.) Return #t if INTERFACE is up, #f otherwise."
;; Linux mount flags, from libc's <sys/mount.h>.
(define MS_RDONLY 1)
(define MS_NOSUID 2)
(define MS_NODEV 4)
(define MS_NOEXEC 8)
(define MS_BIND 4096)
(define MS_MOVE 8192)
@ -494,6 +498,24 @@ UNIONFS."
fsck code device)
(start-repl)))))
(define (mount-flags->bit-mask flags)
"Return the number suitable for the 'flags' argument of 'mount' that
corresponds to the symbols listed in FLAGS."
(let loop ((flags flags))
(match flags
(('read-only rest ...)
(logior MS_RDONLY (loop rest)))
(('bind-mount rest ...)
(logior MS_BIND (loop rest)))
(('no-suid rest ...)
(logior MS_NOSUID (loop rest)))
(('no-dev rest ...)
(logior MS_NODEV (loop rest)))
(('no-exec rest ...)
(logior MS_NOEXEC (loop rest)))
(()
0))))
(define* (mount-file-system spec #:key (root "/root"))
"Mount the file system described by SPEC under ROOT. SPEC must have the
form:
@ -503,15 +525,6 @@ form:
DEVICE, MOUNT-POINT, and TYPE must be strings; OPTIONS can be a string or #f;
FLAGS must be a list of symbols. CHECK? is a Boolean indicating whether to
run a file system check."
(define flags->bit-mask
(match-lambda
(('read-only rest ...)
(or MS_RDONLY (flags->bit-mask rest)))
(('bind-mount rest ...)
(or MS_BIND (flags->bit-mask rest)))
(()
0)))
(match spec
((source title mount-point type (flags ...) options check?)
(let ((source (canonicalize-device-spec source title))
@ -519,7 +532,7 @@ run a file system check."
(when check?
(check-file-system source type))
(mkdir-p mount-point)
(mount source mount-point type (flags->bit-mask flags)
(mount source mount-point type (mount-flags->bit-mask flags)
(if options
(string->pointer options)
%null-pointer))
@ -528,7 +541,7 @@ run a file system check."
(mkdir-p (string-append root "/etc"))
(let ((port (open-file (string-append root "/etc/mtab") "a")))
(format port "~a ~a ~a ~a 0 0~%"
source mount-point type options)
source mount-point type (or options ""))
(close-port port))))))
(define (switch-root root)
@ -670,11 +683,6 @@ to it are lost."
(switch-root "/root")
(format #t "loading '~a'...\n" to-load)
;; Obviously this has to be done each time we boot. Do it from here
;; so that statfs(2) returns DEVPTS_SUPER_MAGIC like libc's getpt(3)
;; expects (and thus openpty(3) and its users, such as xterm.)
(mount "none" "/dev/pts" "devpts")
;; TODO: Remove /lib, /share, and /loader.go.
(primitive-load to-load)

View File

@ -55,6 +55,7 @@
run-with-store
text-file
text-file*
interned-file
package-file
origin->derivation
package->derivation
@ -362,6 +363,18 @@ and store file names; the resulting store file holds references to all these."
(derivation-expression name (builder inputs)
#:inputs inputs)))
(define* (interned-file file #:optional name
#:key (recursive? #t))
"Return the name of FILE once interned in the store. Use NAME as its store
name, or the basename of FILE if NAME is omitted.
When RECURSIVE? is true, the contents of FILE are added recursively; if FILE
designates a flat file and RECURSIVE? is true, its contents are added, and its
permission bits are kept."
(lambda (store)
(add-to-store store (or name (basename file))
recursive? "sha256" file)))
(define* (package-file package
#:optional file
#:key (system (%current-system)) (output "out"))

View File

@ -75,6 +75,7 @@
package-location
package-field-location
package-direct-inputs
package-transitive-inputs
package-transitive-target-inputs
package-transitive-native-inputs
@ -484,12 +485,17 @@ IMPORTED-MODULES specify modules to use/import for use by SNIPPET."
((input rest ...)
(loop rest (cons input result))))))
(define (package-direct-inputs package)
"Return all the direct inputs of PACKAGE---i.e, its direct inputs along
with their propagated inputs."
(append (package-native-inputs package)
(package-inputs package)
(package-propagated-inputs package)))
(define (package-transitive-inputs package)
"Return the transitive inputs of PACKAGE---i.e., its direct inputs along
with their propagated inputs, recursively."
(transitive-inputs (append (package-native-inputs package)
(package-inputs package)
(package-propagated-inputs package))))
(transitive-inputs (package-direct-inputs package)))
(define (package-transitive-target-inputs package)
"Return the transitive target inputs of PACKAGE---i.e., its direct inputs
@ -521,6 +527,8 @@ recursively."
(define (cache package system thunk)
"Memoize the return values of THUNK as the derivation of PACKAGE on
SYSTEM."
;; FIXME: This memoization should be associated with the open store, because
;; otherwise it breaks when switching to a different store.
(let ((vals (call-with-values thunk list)))
;; Use `hashq-set!' instead of `hash-set!' because `hash' returns the
;; same value for all structs (as of Guile 2.0.6), and because pointer

View File

@ -22,6 +22,7 @@
#:use-module (guix records)
#:use-module (guix derivations)
#:use-module (guix packages)
#:use-module (guix gexp)
#:use-module (ice-9 match)
#:use-module (ice-9 regex)
#:use-module (ice-9 ftw)
@ -39,21 +40,18 @@
manifest-entry-name
manifest-entry-version
manifest-entry-output
manifest-entry-path
manifest-entry-item
manifest-entry-dependencies
manifest-pattern
manifest-pattern?
read-manifest
write-manifest
manifest-remove
manifest-installed?
manifest-matching-entries
manifest=?
profile-manifest
package->manifest-entry
profile-derivation
generation-number
generation-numbers
@ -88,11 +86,9 @@
(version manifest-entry-version) ; string
(output manifest-entry-output ; string
(default "out"))
(path manifest-entry-path) ; store path
(dependencies manifest-entry-dependencies ; list of store paths
(default '()))
(inputs manifest-entry-inputs ; list of inputs to build
(default '()))) ; this entry
(item manifest-entry-item) ; package | store path
(dependencies manifest-entry-dependencies ; (store path | package)*
(default '())))
(define-record-type* <manifest-pattern> manifest-pattern
make-manifest-pattern
@ -110,17 +106,36 @@
(call-with-input-file file read-manifest)
(manifest '()))))
(define (manifest->sexp manifest)
"Return a representation of MANIFEST as an sexp."
(define (entry->sexp entry)
(define* (package->manifest-entry package #:optional output)
"Return a manifest entry for the OUTPUT of package PACKAGE. When OUTPUT is
omitted or #f, use the first output of PACKAGE."
(let ((deps (map (match-lambda
((label package)
`(,package "out"))
((label package output)
`(,package ,output)))
(package-transitive-propagated-inputs package))))
(manifest-entry
(name (package-name package))
(version (package-version package))
(output (or output (car (package-outputs package))))
(item package)
(dependencies (delete-duplicates deps)))))
(define (manifest->gexp manifest)
"Return a representation of MANIFEST as a gexp."
(define (entry->gexp entry)
(match entry
(($ <manifest-entry> name version path output (deps ...))
(list name version path output deps))))
(($ <manifest-entry> name version output (? string? path) (deps ...))
#~(#$name #$version #$output #$path #$deps))
(($ <manifest-entry> name version output (? package? package) (deps ...))
#~(#$name #$version #$output
(ungexp package (or output "out")) #$deps))))
(match manifest
(($ <manifest> (entries ...))
`(manifest (version 1)
(packages ,(map entry->sexp entries))))))
#~(manifest (version 1)
(packages #$(map entry->gexp entries))))))
(define (sexp->manifest sexp)
"Parse SEXP as a manifest."
@ -133,7 +148,7 @@
(name name)
(version version)
(output output)
(path path)))
(item path)))
name version output path)))
;; Version 1 adds a list of propagated inputs to the
@ -146,7 +161,7 @@
(name name)
(version version)
(output output)
(path path)
(item path)
(dependencies deps)))
name version output path deps)))
@ -157,10 +172,6 @@
"Return the packages listed in MANIFEST."
(sexp->manifest (read port)))
(define (write-manifest manifest port)
"Write MANIFEST to PORT."
(write (manifest->sexp manifest) port))
(define (entry-predicate pattern)
"Return a procedure that returns #t when passed a manifest entry that
matches NAME/OUTPUT/VERSION. OUTPUT and VERSION may be #f, in which case they
@ -203,62 +214,41 @@ must be a manifest-pattern."
(filter matches? (manifest-entries manifest)))
(define (manifest=? m1 m2)
"Return #t if manifests M1 and M2 are equal. This differs from 'equal?' in
that the 'inputs' field is ignored for the comparison, since it is know to
have no effect on the manifest contents."
(equal? (manifest->sexp m1)
(manifest->sexp m2)))
;;;
;;; Profiles.
;;;
(define* (lower-input store input #:optional (system (%current-system)))
"Lower INPUT so that it contains derivations instead of packages."
(match input
((name (? package? package))
`(,name ,(package-derivation store package system)))
((name (? package? package) output)
`(,name ,(package-derivation store package system)
,output))
(_ input)))
(define (profile-derivation store manifest)
(define (profile-derivation manifest)
"Return a derivation that builds a profile (aka. 'user environment') with
the given MANIFEST."
(define inputs
(append-map (match-lambda
(($ <manifest-entry> name version
output (? package? package) deps)
`((,package ,output) ,@deps))
(($ <manifest-entry> name version output path deps)
;; Assume PATH and DEPS are already valid.
`(,path ,@deps)))
(manifest-entries manifest)))
(define builder
`(begin
(use-modules (ice-9 pretty-print)
(guix build union))
#~(begin
(use-modules (ice-9 pretty-print)
(guix build union))
(setvbuf (current-output-port) _IOLBF)
(setvbuf (current-error-port) _IOLBF)
(setvbuf (current-output-port) _IOLBF)
(setvbuf (current-error-port) _IOLBF)
(let ((output (assoc-ref %outputs "out"))
(inputs (map cdr %build-inputs)))
(union-build output inputs
#:log-port (%make-void-port "w"))
(call-with-output-file (string-append output "/manifest")
(lambda (p)
(pretty-print ',(manifest->sexp manifest) p))))))
(union-build #$output '#$inputs
#:log-port (%make-void-port "w"))
(call-with-output-file (string-append #$output "/manifest")
(lambda (p)
(pretty-print '#$(manifest->gexp manifest) p)))))
(build-expression->derivation store "profile" builder
#:inputs
(append-map (match-lambda
(($ <manifest-entry> name version
output path deps (inputs ..1))
(map (cute lower-input store <>)
inputs))
(($ <manifest-entry> name version
output path deps)
;; Assume PATH and DEPS are
;; already valid.
`((,name ,path) ,@deps)))
(manifest-entries manifest))
#:modules '((guix build union))
#:local-build? #t))
(gexp->derivation "profile" builder
#:modules '((guix build union))
#:local-build? #t))
(define (profile-regexp profile)
"Return a regular expression that matches PROFILE's name and number."

View File

@ -24,6 +24,7 @@
#:use-module (guix derivations)
#:use-module (guix packages)
#:use-module (guix profiles)
#:use-module (guix monads)
#:use-module (guix utils)
#:use-module (guix config)
#:use-module (guix scripts build)
@ -82,7 +83,8 @@ return PROFILE unchanged. The goal is to treat '-p ~/.guix-profile' as if
(define (link-to-empty-profile generation)
"Link GENERATION, a string, to the empty profile."
(let* ((drv (profile-derivation (%store) (manifest '())))
(let* ((drv (run-with-store (%store)
(profile-derivation (manifest '()))))
(prof (derivation->output-path drv "out")))
(when (not (build-derivations (%store) (list drv)))
(leave (_ "failed to build the empty profile~%")))
@ -205,10 +207,14 @@ packages that will/would be installed and removed."
remove))))
(_ #f))
(match install
((($ <manifest-entry> name version output path _) ..1)
((($ <manifest-entry> name version output item _) ..1)
(let ((len (length name))
(install (map (cut format #f " ~a-~a\t~a\t~a" <> <> <> <>)
name version output path)))
(install (map (lambda (name version output item)
(format #f " ~a-~a\t~a\t~a" name version output
(if (package? item)
(package-output (%store) item output)
item)))
name version output item)))
(if dry-run?
(format (current-error-port)
(N_ "The following package would be installed:~%~{~a~%~}~%"
@ -253,17 +259,6 @@ RX."
(package-name p2))))
same-location?))
(define (input->name+path input)
"Convert the name/package/sub-drv tuple INPUT to a name/store-path tuple."
(let loop ((input input))
(match input
((name (? package? package))
(loop `(,name ,package "out")))
((name (? package? package) sub-drv)
`(,name ,(package-output (%store) package sub-drv)))
(_
input))))
(define %sigint-prompt
;; The prompt to jump to upon SIGINT.
(make-prompt-tag "interruptible"))
@ -517,6 +512,8 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
(display (_ "
-A, --list-available[=REGEXP]
list available packages matching REGEXP"))
(display (_ "
--show=PACKAGE show details about PACKAGE"))
(newline)
(show-build-options-help)
(newline)
@ -615,6 +612,11 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
(values (cons `(query list-available ,(or arg ""))
result)
#f)))
(option '("show") #t #t
(lambda (opt name arg result arg-handler)
(values (cons `(query show ,arg)
result)
#f)))
%standard-build-options))
@ -639,22 +641,11 @@ return the new list of manifest entries."
(delete-duplicates deps same?))
(define (package->manifest-entry p output)
;; Return a manifest entry for the OUTPUT of package P.
(check-package-freshness p)
(define (package->manifest-entry* package output)
(check-package-freshness package)
;; When given a package via `-e', install the first of its
;; outputs (XXX).
(let* ((output (or output (car (package-outputs p))))
(path (package-output (%store) p output))
(deps (deduplicate (package-transitive-propagated-inputs p))))
(manifest-entry
(name (package-name p))
(version (package-version p))
(output output)
(path path)
(dependencies (map input->name+path deps))
(inputs (cons (list (package-name p) p output)
deps)))))
(package->manifest-entry package output))
(define upgrade-regexps
(filter-map (match-lambda
@ -685,7 +676,7 @@ return the new list of manifest entries."
(define to-upgrade
(map (match-lambda
((package output)
(package->manifest-entry package output)))
(package->manifest-entry* package output)))
packages-to-upgrade))
(define packages-to-install
@ -703,7 +694,7 @@ return the new list of manifest entries."
(define to-install
(append (map (match-lambda
((package output)
(package->manifest-entry package output)))
(package->manifest-entry* package output)))
packages-to-install)
(filter-map (match-lambda
(('install . (? package?))
@ -716,7 +707,7 @@ return the new list of manifest entries."
(name name)
(version version)
(output #f)
(path path))))
(item path))))
(_ #f))
opts)))
@ -743,6 +734,16 @@ removed from MANIFEST."
(unless (string=? profile %current-profile)
(add-indirect-root store (canonicalize-path profile))))
(define (readlink* file)
"Call 'readlink' until the result is not a symlink."
(catch 'system-error
(lambda ()
(readlink* (readlink file)))
(lambda args
(if (= EINVAL (system-error-errno args))
file
(apply throw args)))))
;;;
;;; Entry point.
@ -914,36 +915,41 @@ more information.~%"))
(when (equal? profile %current-profile)
(ensure-default-profile))
(if (manifest=? new manifest)
(format (current-error-port) (_ "nothing to be done~%"))
(let ((prof-drv (profile-derivation (%store) new))
(remove (manifest-matching-entries manifest remove)))
(show-what-to-remove/install remove install dry-run?)
(show-what-to-build (%store) (list prof-drv)
#:use-substitutes?
(assoc-ref opts 'substitutes?)
#:dry-run? dry-run?)
(unless (and (null? install) (null? remove))
(let* ((prof-drv (run-with-store (%store)
(profile-derivation new)))
(prof (derivation->output-path prof-drv))
(remove (manifest-matching-entries manifest remove)))
(show-what-to-remove/install remove install dry-run?)
(show-what-to-build (%store) (list prof-drv)
#:use-substitutes?
(assoc-ref opts 'substitutes?)
#:dry-run? dry-run?)
(or dry-run?
(let* ((prof (derivation->output-path prof-drv))
(number (generation-number profile))
(cond
(dry-run? #t)
((and (file-exists? profile)
(and=> (readlink* profile) (cut string=? prof <>)))
(format (current-error-port) (_ "nothing to be done~%")))
(else
(let* ((number (generation-number profile))
;; Always use NUMBER + 1 for the new profile,
;; possibly overwriting a "previous future
;; generation".
(name (generation-file-name profile
(+ 1 number))))
(and (build-derivations (%store) (list prof-drv))
(let ((count (length entries)))
(switch-symlinks name prof)
(switch-symlinks profile name)
(maybe-register-gc-root (%store) profile)
(format #t (N_ "~a package in profile~%"
"~a packages in profile~%"
count)
count)
(display-search-paths entries
profile)))))))))))
;; Always use NUMBER + 1 for the new profile,
;; possibly overwriting a "previous future
;; generation".
(name (generation-file-name profile
(+ 1 number))))
(and (build-derivations (%store) (list prof-drv))
(let ((count (length entries)))
(switch-symlinks name prof)
(switch-symlinks profile name)
(maybe-register-gc-root (%store) profile)
(format #t (N_ "~a package in profile~%"
"~a packages in profile~%"
count)
count)
(display-search-paths entries
profile))))))))))))
(define (process-query opts)
;; Process any query specified by OPTS. Return #t when a query was
@ -1042,6 +1048,14 @@ more information.~%"))
(find-packages-by-description regexp)))
#t))
(('show requested-name)
(let-values (((name version)
(package-name->name+version requested-name)))
(leave-on-EPIPE
(for-each (cute package->recutils <> (current-output-port))
(find-packages-by-name name version)))
#t))
(('search-paths)
(let* ((manifest (profile-manifest profile))
(entries (manifest-entries manifest))

View File

@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -29,6 +30,8 @@
#:use-module ((gnu packages base) #:select (%final-inputs))
#:use-module (ice-9 match)
#:use-module (ice-9 regex)
#:use-module (ice-9 vlist)
#:use-module (ice-9 format)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-11)
#:use-module (srfi srfi-26)
@ -59,6 +62,9 @@
(x
(leave (_ "~a: invalid selection; expected `core' or `non-core'")
arg)))))
(option '(#\l "list-dependent") #f #f
(lambda (opt name arg result)
(alist-cons 'list-dependent? #t result)))
(option '("key-server") #t #f
(lambda (opt name arg result)
@ -96,6 +102,9 @@ specified with `--select'.\n"))
(display (_ "
-s, --select=SUBSET select all the packages in SUBSET, one of
`core' or `non-core'"))
(display (_ "
-l, --list-dependent list top-level dependent packages that would need to
be rebuilt as a result of upgrading PACKAGE..."))
(newline)
(display (_ "
--key-server=HOST use HOST as the OpenPGP key server"))
@ -193,9 +202,10 @@ update would trigger a complete rebuild."
;; XXX: Fails to catch MPFR/MPC, whose *source* is used as input.
(member (package-name package) names))))
(let* ((opts (parse-options))
(update? (assoc-ref opts 'update?))
(key-download (assoc-ref opts 'key-download))
(let* ((opts (parse-options))
(update? (assoc-ref opts 'update?))
(list-dependent? (assoc-ref opts 'list-dependent?))
(key-download (assoc-ref opts 'key-download))
(packages
(match (concatenate
(filter-map (match-lambda
@ -220,26 +230,48 @@ update would trigger a complete rebuild."
(some ; user-specified packages
some))))
(with-error-handling
(if update?
(let ((store (open-connection)))
(parameterize ((%openpgp-key-server
(or (assoc-ref opts 'key-server)
(%openpgp-key-server)))
(%gpg-command
(or (assoc-ref opts 'gpg-command)
(%gpg-command))))
(for-each
(cut update-package store <> #:key-download key-download)
packages)))
(for-each (lambda (package)
(match (false-if-exception (package-update-path package))
((new-version . directory)
(let ((loc (or (package-field-location package 'version)
(package-location package))))
(format (current-error-port)
(_ "~a: ~a would be upgraded from ~a to ~a~%")
(location->string loc)
(package-name package) (package-version package)
new-version)))
(_ #f)))
packages)))))
(cond
(list-dependent?
(let* ((rebuilds (map package-full-name
(package-covering-dependents packages)))
(total-dependents
(length (package-transitive-dependents packages))))
(if (= total-dependents 0)
(format (current-output-port)
(N_ "No dependents other than itself: ~{~a~}~%"
"No dependents other than themselves: ~{~a~^ ~}~%"
(length packages))
(map package-full-name packages))
(format (current-output-port)
(N_ (N_ "A single dependent package: ~2*~{~a~}~%"
"Building the following package would ensure ~d \
dependent packages are rebuilt; ~*~{~a~^ ~}~%"
total-dependents)
"Building the following ~d packages would ensure ~d \
dependent packages are rebuilt: ~{~a~^ ~}~%"
(length rebuilds))
(length rebuilds) total-dependents rebuilds))))
(update?
(let ((store (open-connection)))
(parameterize ((%openpgp-key-server
(or (assoc-ref opts 'key-server)
(%openpgp-key-server)))
(%gpg-command
(or (assoc-ref opts 'gpg-command)
(%gpg-command))))
(for-each
(cut update-package store <> #:key-download key-download)
packages))))
(else
(for-each (lambda (package)
(match (false-if-exception (package-update-path package))
((new-version . directory)
(let ((loc (or (package-field-location package 'version)
(package-location package))))
(format (current-error-port)
(_ "~a: ~a would be upgraded from ~a to ~a~%")
(location->string loc)
(package-name package) (package-version package)
new-version)))
(_ #f)))
packages))))))

View File

@ -95,8 +95,8 @@
(store-lift show-what-to-build))
(define* (copy-closure item target
#:key (log-port (current-error-port)))
(define* (copy-item item target
#:key (log-port (current-error-port)))
"Copy ITEM to the store under root directory TARGET and register it."
(mlet* %store-monad ((refs (references* item)))
(let ((dest (string-append target item))
@ -118,6 +118,18 @@
(return #t))))
(define* (copy-closure item target
#:key (log-port (current-error-port)))
"Copy ITEM and all its dependencies to the store under root directory
TARGET, and register them."
(mlet* %store-monad ((refs (references* item))
(to-copy (topologically-sorted*
(delete-duplicates (cons item refs)
string=?))))
(sequence %store-monad
(map (cut copy-item <> target #:log-port log-port)
to-copy))))
(define* (install os-drv target
#:key (log-port (current-output-port))
grub? grub.cfg device)
@ -136,16 +148,10 @@ When GRUB? is true, install GRUB on DEVICE, using GRUB.CFG."
(mkdir-p (string-append target (%store-prefix)))
;; Copy items to the new store.
(sequence %store-monad
(map (cut copy-closure <> target #:log-port log-port)
to-copy))))))
(copy-closure to-copy target #:log-port log-port)))))
(mlet* %store-monad ((os-dir -> (derivation->output-path os-drv))
(refs (references* os-dir))
(lst -> (delete-duplicates (cons os-dir refs)
string=?))
(to-copy (topologically-sorted* lst))
(% (maybe-copy to-copy)))
(% (maybe-copy os-dir)))
;; Create a bunch of additional files.
(format log-port "populating '~a'...~%" target)
@ -166,6 +172,16 @@ When GRUB? is true, install GRUB on DEVICE, using GRUB.CFG."
;; The system profile.
(string-append %state-directory "/profiles/system"))
(define-syntax-rule (save-environment-excursion body ...)
"Save the current environment variables, run BODY..., and restore them."
(let ((env (environ)))
(dynamic-wind
(const #t)
(lambda ()
body ...)
(lambda ()
(environ env)))))
(define* (switch-to-system os
#:optional (profile %system-profile))
"Make a new generation of PROFILE pointing to the directory of OS, switch to
@ -179,7 +195,11 @@ it atomically, and then run OS's activation script."
(switch-symlinks profile generation)
(format #t (_ "activating system...~%"))
(return (primitive-load (derivation->output-path script)))
;; The activation script may change $PATH, among others, so protect
;; against that.
(return (save-environment-excursion
(primitive-load (derivation->output-path script))))
;; TODO: Run 'deco reload ...'.
)))
@ -293,7 +313,8 @@ actions."
(mlet %store-monad ((% (switch-to-system os)))
(when grub?
(unless (false-if-exception
(install-grub grub.cfg device "/"))
(install-grub (derivation->output-path grub.cfg)
device "/"))
(leave (_ "failed to install GRUB on device '~a'~%")
device)))
(return #t)))

View File

@ -453,9 +453,23 @@ WIDTH columns."
(fill-paragraph str width
(string-length "description: ")))))
(define (dependencies->recutils packages)
(let ((list (string-join (map package-full-name
(sort packages package<?)) " ")))
(string->recutils
(fill-paragraph list width
(string-length "dependencies: ")))))
(define (package<? p1 p2)
(string<? (package-full-name p1) (package-full-name p2)))
;; Note: Don't i18n field names so that people can post-process it.
(format port "name: ~a~%" (package-name p))
(format port "version: ~a~%" (package-version p))
(format port "dependencies: ~a~%"
(match (package-direct-inputs p)
(((labels inputs . _) ...)
(dependencies->recutils (filter package? inputs)))))
(format port "location: ~a~%"
(or (and=> (package-location p) location->string)
(_ "unknown")))

View File

@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -72,6 +73,8 @@
call-with-temporary-output-file
with-atomic-file-output
fold2
fold-tree
fold-tree-leaves
filtered-port
compressed-port
@ -649,6 +652,36 @@ output port, and PROC's result is returned."
(lambda (result1 result2)
(fold2 proc result1 result2 (cdr lst1) (cdr lst2)))))))))
(define (fold-tree proc init children roots)
"Call (PROC NODE RESULT) for each node in the tree that is reachable from
ROOTS, using INIT as the initial value of RESULT. The order in which nodes
are traversed is not specified, however, each node is visited only once, based
on an eq? check. Children of a node to be visited are generated by
calling (CHILDREN NODE), the result of which should be a list of nodes that
are connected to NODE in the tree, or '() or #f if NODE is a leaf node."
(let loop ((result init)
(seen vlist-null)
(lst roots))
(match lst
(() result)
((head . tail)
(if (not (vhash-assq head seen))
(loop (proc head result)
(vhash-consq head #t seen)
(match (children head)
((or () #f) tail)
(children (append tail children))))
(loop result seen tail))))))
(define (fold-tree-leaves proc init children roots)
"Like fold-tree, but call (PROC NODE RESULT) only for leaf nodes."
(fold-tree
(lambda (node result)
(match (children node)
((or () #f) (proc node result))
(else result)))
init children roots))
;;;
;;; Source location.

View File

@ -4,6 +4,7 @@ de
en@boldquot
en@quot
eo
hu
pt_BR
sr
vi

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: guix 0.7-pre1\n"
"Report-Msgid-Bugs-To: ludo@gnu.org\n"
"POT-Creation-Date: 2014-07-13 17:06+0200\n"
"POT-Creation-Date: 2014-07-25 00:55+0200\n"
"PO-Revision-Date: 2014-07-13 20:38+0100\n"
"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@ -18,7 +18,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.5.4\n"
#: gnu/packages.scm:95
#: gnu/packages.scm:102
#, scheme-format
msgid "cannot access `~a': ~a~%"
msgstr "Zugriff auf »~a« nicht möglich: ~a~%"
@ -165,9 +165,9 @@ msgid ""
msgstr ""
#: guix/scripts/build.scm:246 guix/scripts/download.scm:53
#: guix/scripts/package.scm:523 guix/scripts/gc.scm:58
#: guix/scripts/package.scm:525 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:334
#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:362
msgid ""
"\n"
" -h, --help display this help and exit"
@ -176,9 +176,9 @@ msgstr ""
" -h, --help diese Hilfe anzeigen und beenden"
#: guix/scripts/build.scm:248 guix/scripts/download.scm:55
#: guix/scripts/package.scm:525 guix/scripts/gc.scm:60
#: guix/scripts/package.scm:527 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:336
#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:364
msgid ""
"\n"
" -V, --version display version information and exit"
@ -192,8 +192,8 @@ msgid "sources do not match any package:~{ ~a~}~%"
msgstr ""
#: guix/scripts/build.scm:397 guix/scripts/download.scm:96
#: guix/scripts/package.scm:756 guix/scripts/gc.scm:122
#: guix/scripts/pull.scm:115 guix/scripts/system.scm:386
#: guix/scripts/package.scm:763 guix/scripts/gc.scm:122
#: guix/scripts/pull.scm:115 guix/scripts/system.scm:414
#, scheme-format
msgid "~A: unrecognized option~%"
msgstr "~A: nicht erkannte Option~%"
@ -244,8 +244,8 @@ msgstr "Leeres Profil konnte nicht erstellt werden~%"
msgid "switching from generation ~a to ~a~%"
msgstr ""
#: guix/scripts/package.scm:108 guix/scripts/package.scm:866
#: guix/scripts/package.scm:978
#: guix/scripts/package.scm:108 guix/scripts/package.scm:873
#: guix/scripts/package.scm:985
#, scheme-format
msgid "profile '~a' does not exist~%"
msgstr "Profil »~a« existiert nicht~%"
@ -399,62 +399,71 @@ msgid ""
" list available packages matching REGEXP"
msgstr ""
#: guix/scripts/package.scm:760
#: guix/scripts/package.scm:520
#, fuzzy
msgid ""
"\n"
" --show=PACKAGE show details about PACKAGE"
msgstr ""
"\n"
" -i, --install=PAKET PAKET installieren"
#: guix/scripts/package.scm:767
#, scheme-format
msgid "~A: extraneous argument~%"
msgstr ""
#: guix/scripts/package.scm:775
#: guix/scripts/package.scm:782
#, scheme-format
msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%"
msgstr ""
#: guix/scripts/package.scm:797
#: guix/scripts/package.scm:804
#, scheme-format
msgid "error: while creating directory `~a': ~a~%"
msgstr ""
#: guix/scripts/package.scm:801
#: guix/scripts/package.scm:808
#, scheme-format
msgid "Please create the `~a' directory, with you as the owner.~%"
msgstr ""
#: guix/scripts/package.scm:808
#: guix/scripts/package.scm:815
#, scheme-format
msgid "error: directory `~a' is not owned by you~%"
msgstr ""
#: guix/scripts/package.scm:811
#: guix/scripts/package.scm:818
#, scheme-format
msgid "Please change the owner of `~a' to user ~s.~%"
msgstr ""
#: guix/scripts/package.scm:836
#: guix/scripts/package.scm:843
#, scheme-format
msgid "deleting ~a~%"
msgstr ""
#: guix/scripts/package.scm:889 guix/scripts/package.scm:994
#: guix/scripts/package.scm:896 guix/scripts/package.scm:1001
#, scheme-format
msgid "invalid syntax: ~a~%"
msgstr "Unzulässige Syntax: ~a~%"
#: guix/scripts/package.scm:918
#: guix/scripts/package.scm:925
#, scheme-format
msgid "nothing to be done~%"
msgstr "Nichts zu tun~%"
#: guix/scripts/package.scm:941
#: guix/scripts/package.scm:948
#, scheme-format
msgid "~a package in profile~%"
msgstr "~a-Paket im Profil~%"
#: guix/scripts/package.scm:956
#: guix/scripts/package.scm:963
#, scheme-format
msgid "Generation ~a\t~a"
msgstr ""
#: guix/scripts/package.scm:963
#: guix/scripts/package.scm:970
#, scheme-format
msgid "~a\t(current)~%"
msgstr "~a\t(aktuell)~%"
@ -747,93 +756,93 @@ msgstr "~a: ~a~%"
msgid "failed to load operating system file '~a': ~s~%"
msgstr ""
#: guix/scripts/system.scm:111
#: guix/scripts/system.scm:116
#, scheme-format
msgid "failed to register '~a' under '~a'~%"
msgstr ""
#: guix/scripts/system.scm:127
#: guix/scripts/system.scm:144
#, scheme-format
msgid "initializing the current root file system~%"
msgstr ""
#: guix/scripts/system.scm:151 guix/scripts/system.scm:291
#: guix/scripts/system.scm:162 guix/scripts/system.scm:318
#, scheme-format
msgid "failed to install GRUB on device '~a'~%"
msgstr ""
#: guix/scripts/system.scm:176
#: guix/scripts/system.scm:197
#, scheme-format
msgid "activating system...~%"
msgstr "System wird aktiviert …~%"
#: guix/scripts/system.scm:211
#: guix/scripts/system.scm:236
#, scheme-format
msgid "unrecognized boot parameters for '~a'~%"
msgstr "Nicht erkannte Startparameter für »~a«~%"
#: guix/scripts/system.scm:295
#: guix/scripts/system.scm:323
#, scheme-format
msgid "initializing operating system under '~a'...~%"
msgstr ""
#: guix/scripts/system.scm:311
#: guix/scripts/system.scm:339
msgid ""
"Usage: guix system [OPTION] ACTION FILE\n"
"Build the operating system declared in FILE according to ACTION.\n"
msgstr ""
#: guix/scripts/system.scm:314
#: guix/scripts/system.scm:342
msgid "The valid values for ACTION are:\n"
msgstr "Die gültigen Werte für AKTION sind:\n"
#: guix/scripts/system.scm:315
#: guix/scripts/system.scm:343
msgid " - 'reconfigure', switch to a new operating system configuration\n"
msgstr ""
#: guix/scripts/system.scm:317
#: guix/scripts/system.scm:345
msgid " - 'build', build the operating system without installing anything\n"
msgstr ""
#: guix/scripts/system.scm:319
#: guix/scripts/system.scm:347
msgid " - 'vm', build a virtual machine image that shares the host's store\n"
msgstr ""
#: guix/scripts/system.scm:321
#: guix/scripts/system.scm:349
msgid " - 'vm-image', build a freestanding virtual machine image\n"
msgstr ""
#: guix/scripts/system.scm:323
#: guix/scripts/system.scm:351
msgid " - 'disk-image', build a disk image, suitable for a USB stick\n"
msgstr ""
#: guix/scripts/system.scm:325
#: guix/scripts/system.scm:353
msgid " - 'init', initialize a root file system to run GNU.\n"
msgstr ""
#: guix/scripts/system.scm:329
#: guix/scripts/system.scm:357
msgid ""
"\n"
" --image-size=SIZE for 'vm-image', produce an image of SIZE"
msgstr ""
#: guix/scripts/system.scm:331
#: guix/scripts/system.scm:359
msgid ""
"\n"
" --no-grub for 'init', do not install GRUB"
msgstr ""
#: guix/scripts/system.scm:394
#: guix/scripts/system.scm:422
#, scheme-format
msgid "~a: unknown action~%"
msgstr "~a: unbekannte Aktion~%"
#: guix/scripts/system.scm:411
#: guix/scripts/system.scm:439
#, scheme-format
msgid "wrong number of arguments for action '~a'~%"
msgstr "Falsche Anzahl an Argumenten für Aktion »~a«~%"
#: guix/scripts/system.scm:431
#: guix/scripts/system.scm:459
#, scheme-format
msgid "no configuration file specified~%"
msgstr "Keine Konfigurationsdatei angegeben~%"
@ -976,21 +985,21 @@ msgstr "<unbekannter Ort>"
msgid "failed to create configuration directory `~a': ~a~%"
msgstr "Konfigurationsverzeichnis »~a« konnte nicht angelegt werden: ~a~%"
#: guix/ui.scm:461 guix/ui.scm:475
#: guix/ui.scm:475 guix/ui.scm:489
msgid "unknown"
msgstr "unbekannt"
#: guix/ui.scm:584
#: guix/ui.scm:598
#, scheme-format
msgid "invalid argument: ~a~%"
msgstr "Ungültiges Argument: ~a~%"
#: guix/ui.scm:589
#: guix/ui.scm:603
#, scheme-format
msgid "Try `guix --help' for more information.~%"
msgstr "Rufen Sie »guix --help« auf, um weitere Informationen zu erhalten.~%"
#: guix/ui.scm:619
#: guix/ui.scm:633
msgid ""
"Usage: guix COMMAND ARGS...\n"
"Run COMMAND with ARGS.\n"
@ -998,21 +1007,21 @@ msgstr ""
"Aufruf: guix BEFEHL ARGUMENTE …\n"
"BEFEHL mit ARGUMENTEN ausführen.\n"
#: guix/ui.scm:622
#: guix/ui.scm:636
msgid "COMMAND must be one of the sub-commands listed below:\n"
msgstr "BEFEHL muss einer der unten aufgelisteten Unterbefehle sein:\n"
#: guix/ui.scm:642
#: guix/ui.scm:656
#, scheme-format
msgid "guix: ~a: command not found~%"
msgstr "guix: ~a: Befehl nicht gefunden~%"
#: guix/ui.scm:660
#: guix/ui.scm:674
#, scheme-format
msgid "guix: missing command name~%"
msgstr "guix: Befehlsname fehlt~%"
#: guix/ui.scm:668
#: guix/ui.scm:682
#, scheme-format
msgid "guix: unrecognized option '~a'~%"
msgstr "guix: nicht erkannte Option »~a«~%"

View File

@ -7,17 +7,17 @@ msgid ""
msgstr ""
"Project-Id-Version: guix 0.7-pre1\n"
"Report-Msgid-Bugs-To: ludo@gnu.org\n"
"POT-Creation-Date: 2014-07-13 17:06+0200\n"
"POT-Creation-Date: 2014-07-25 00:55+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: Esperanto\n"
"Language: eo\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.4\n"
#: gnu/packages.scm:95
#: gnu/packages.scm:102
#, scheme-format
msgid "cannot access `~a': ~a~%"
msgstr "ne eblas atingi '~a': ~a~%"
@ -203,9 +203,9 @@ msgstr ""
" --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:523 guix/scripts/gc.scm:58
#: guix/scripts/package.scm:525 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:334
#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:362
msgid ""
"\n"
" -h, --help display this help and exit"
@ -214,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:525 guix/scripts/gc.scm:60
#: guix/scripts/package.scm:527 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:336
#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:364
msgid ""
"\n"
" -V, --version display version information and exit"
@ -230,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:756 guix/scripts/gc.scm:122
#: guix/scripts/pull.scm:115 guix/scripts/system.scm:386
#: guix/scripts/package.scm:763 guix/scripts/gc.scm:122
#: guix/scripts/pull.scm:115 guix/scripts/system.scm:414
#, scheme-format
msgid "~A: unrecognized option~%"
msgstr "~A: nerekonata modifilo~%"
@ -290,8 +290,8 @@ msgstr "fiasko dum konstruo de malplena profilo~%"
msgid "switching from generation ~a to ~a~%"
msgstr "alterno el generacio ~a al ~a~%"
#: guix/scripts/package.scm:108 guix/scripts/package.scm:866
#: guix/scripts/package.scm:978
#: guix/scripts/package.scm:108 guix/scripts/package.scm:873
#: guix/scripts/package.scm:985
#, scheme-format
msgid "profile '~a' does not exist~%"
msgstr "profilo '~a' ne ekzistas~%"
@ -476,62 +476,71 @@ msgstr ""
" -A, --list-available[=REGESP]\n"
" listigi disponeblajn pakojn kongruantajn al REGESP"
#: guix/scripts/package.scm:760
#: guix/scripts/package.scm:520
#, fuzzy
msgid ""
"\n"
" --show=PACKAGE show details about PACKAGE"
msgstr ""
"\n"
" -i, --install=PAKO instali PAKOn"
#: guix/scripts/package.scm:767
#, scheme-format
msgid "~A: extraneous argument~%"
msgstr "~A: fremda argumento~%"
#: guix/scripts/package.scm:775
#: guix/scripts/package.scm:782
#, 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:797
#: guix/scripts/package.scm:804
#, scheme-format
msgid "error: while creating directory `~a': ~a~%"
msgstr "eraro: dum kreo de dosierujo '~a': ~a~%"
#: guix/scripts/package.scm:801
#: guix/scripts/package.scm:808
#, 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:808
#: guix/scripts/package.scm:815
#, scheme-format
msgid "error: directory `~a' is not owned by you~%"
msgstr "eraro: dosierujo '~a' ne estas posedata de vi~%"
#: guix/scripts/package.scm:811
#: guix/scripts/package.scm:818
#, 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:836
#: guix/scripts/package.scm:843
#, scheme-format
msgid "deleting ~a~%"
msgstr "ni forigas ~a~%"
#: guix/scripts/package.scm:889 guix/scripts/package.scm:994
#: guix/scripts/package.scm:896 guix/scripts/package.scm:1001
#, scheme-format
msgid "invalid syntax: ~a~%"
msgstr "malvalida sintakso: ~a~%"
#: guix/scripts/package.scm:918
#: guix/scripts/package.scm:925
#, scheme-format
msgid "nothing to be done~%"
msgstr "nenio por fari~%"
#: guix/scripts/package.scm:941
#: guix/scripts/package.scm:948
#, scheme-format
msgid "~a package in profile~%"
msgstr "pako ~a en profilo~%"
#: guix/scripts/package.scm:956
#: guix/scripts/package.scm:963
#, scheme-format
msgid "Generation ~a\t~a"
msgstr "Generacio ~a\t~a"
#: guix/scripts/package.scm:963
#: guix/scripts/package.scm:970
#, scheme-format
msgid "~a\t(current)~%"
msgstr "~a\t(nuna)~%"
@ -864,37 +873,37 @@ msgstr "~a: ~a~%"
msgid "failed to load operating system file '~a': ~s~%"
msgstr "fiasko dum ŝargo je operaci-sistema dosiero '~a': ~s~%"
#: guix/scripts/system.scm:111
#: guix/scripts/system.scm:116
#, scheme-format
msgid "failed to register '~a' under '~a'~%"
msgstr "fiasko dum registro de '~a' sub '~a'~%"
#: guix/scripts/system.scm:127
#: guix/scripts/system.scm:144
#, scheme-format
msgid "initializing the current root file system~%"
msgstr "ekigado de la nuna radika dosiersistemo~%"
#: guix/scripts/system.scm:151 guix/scripts/system.scm:291
#: guix/scripts/system.scm:162 guix/scripts/system.scm:318
#, scheme-format
msgid "failed to install GRUB on device '~a'~%"
msgstr "fiasko dum instalo de GRUB en la aparato '~a'~%"
#: guix/scripts/system.scm:176
#: guix/scripts/system.scm:197
#, scheme-format
msgid "activating system...~%"
msgstr "ni aktivas la sistemon...~%"
#: guix/scripts/system.scm:211
#: guix/scripts/system.scm:236
#, scheme-format
msgid "unrecognized boot parameters for '~a'~%"
msgstr "nerekonataj ekŝargaj parametroj por '~a'~%"
#: guix/scripts/system.scm:295
#: guix/scripts/system.scm:323
#, scheme-format
msgid "initializing operating system under '~a'...~%"
msgstr "ni ekigas la operaci-sistemon sub '~a'...~%"
#: guix/scripts/system.scm:311
#: guix/scripts/system.scm:339
msgid ""
"Usage: guix system [OPTION] ACTION FILE\n"
"Build the operating system declared in FILE according to ACTION.\n"
@ -902,35 +911,35 @@ msgstr ""
"Uzmaniero: guix system [MODIFILO] AGO DOSIERO\n"
"Konstrui la operaci-sistemon deklarita en DOSIERO akorde al AGO.\n"
#: guix/scripts/system.scm:314
#: guix/scripts/system.scm:342
msgid "The valid values for ACTION are:\n"
msgstr "La validaj valoroj por AGO estas:\n"
#: guix/scripts/system.scm:315
#: guix/scripts/system.scm:343
msgid " - 'reconfigure', switch to a new operating system configuration\n"
msgstr " - 'reconfigure', alterni al nova operaci-sistema agordaro\n"
#: guix/scripts/system.scm:317
#: guix/scripts/system.scm:345
msgid " - 'build', build the operating system without installing anything\n"
msgstr " - 'build', konstrui la operaci-sistemon sen instali ion ajn\n"
#: guix/scripts/system.scm:319
#: guix/scripts/system.scm:347
msgid " - 'vm', build a virtual machine image that shares the host's store\n"
msgstr " - 'vm', konstrui virtual-maŝinan bildon kiu kundividas la gastigantan memoron\n"
#: guix/scripts/system.scm:321
#: guix/scripts/system.scm:349
msgid " - 'vm-image', build a freestanding virtual machine image\n"
msgstr " - 'vm-image', konstrui memstaran virtual-maŝinan bildon\n"
#: guix/scripts/system.scm:323
#: guix/scripts/system.scm:351
msgid " - 'disk-image', build a disk image, suitable for a USB stick\n"
msgstr " - 'disk-image', konstrui disk-bildon, taŭga por USB-memoro\n"
#: guix/scripts/system.scm:325
#: guix/scripts/system.scm:353
msgid " - 'init', initialize a root file system to run GNU.\n"
msgstr " - 'init', ekigi radikan dosiersistemon por lanĉi GNU-on.\n"
#: guix/scripts/system.scm:329
#: guix/scripts/system.scm:357
msgid ""
"\n"
" --image-size=SIZE for 'vm-image', produce an image of SIZE"
@ -938,7 +947,7 @@ msgstr ""
"\n"
" --image-size=GRANDO por 'vm-image', produkti bildon je GRANDO"
#: guix/scripts/system.scm:331
#: guix/scripts/system.scm:359
msgid ""
"\n"
" --no-grub for 'init', do not install GRUB"
@ -946,17 +955,17 @@ msgstr ""
"\n"
" --no-grub por 'init', ne instali GRUB"
#: guix/scripts/system.scm:394
#: guix/scripts/system.scm:422
#, scheme-format
msgid "~a: unknown action~%"
msgstr "~a: nekonata pako~%"
#: guix/scripts/system.scm:411
#: guix/scripts/system.scm:439
#, scheme-format
msgid "wrong number of arguments for action '~a'~%"
msgstr "malĝusta nombro da argumentoj por la ago '~a'~%"
#: guix/scripts/system.scm:431
#: guix/scripts/system.scm:459
#, scheme-format
msgid "no configuration file specified~%"
msgstr "neniu agorda dosiero estis indikata~%"
@ -1103,21 +1112,21 @@ msgstr "<nekonata loko>"
msgid "failed to create configuration directory `~a': ~a~%"
msgstr "fiasko dum kreo de agorda dosierujo '~a': ~a~%"
#: guix/ui.scm:461 guix/ui.scm:475
#: guix/ui.scm:475 guix/ui.scm:489
msgid "unknown"
msgstr "nekonata"
#: guix/ui.scm:584
#: guix/ui.scm:598
#, scheme-format
msgid "invalid argument: ~a~%"
msgstr "malvalida argumento: ~a~%"
#: guix/ui.scm:589
#: guix/ui.scm:603
#, scheme-format
msgid "Try `guix --help' for more information.~%"
msgstr "Provu 'guix --help' por pli da informo.~%"
#: guix/ui.scm:619
#: guix/ui.scm:633
msgid ""
"Usage: guix COMMAND ARGS...\n"
"Run COMMAND with ARGS.\n"
@ -1125,21 +1134,21 @@ msgstr ""
"Uzmaniero: guix KOMANDO ARGj...\n"
"Lanĉas KOMANDOn kun ARGj.\n"
#: guix/ui.scm:622
#: guix/ui.scm:636
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:642
#: guix/ui.scm:656
#, scheme-format
msgid "guix: ~a: command not found~%"
msgstr "guix: ~a: komando ne trovita~%"
#: guix/ui.scm:660
#: guix/ui.scm:674
#, scheme-format
msgid "guix: missing command name~%"
msgstr "guix: mankas komanda nomo~%"
#: guix/ui.scm:668
#: guix/ui.scm:682
#, scheme-format
msgid "guix: unrecognized option '~a'~%"
msgstr "guix: nerekonata modifilo: '~a'~%"

1277
po/guix/hu.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -8,11 +8,10 @@ msgid ""
msgstr ""
"Project-Id-Version: guix 0.4-pre2\n"
"Report-Msgid-Bugs-To: ludo@gnu.org\n"
"POT-Creation-Date: 2014-06-14 22:38+0200\n"
"POT-Creation-Date: 2014-07-25 00:55+0200\n"
"PO-Revision-Date: 2013-09-28 21:29-0300\n"
"Last-Translator: Rafael Ferreira <rafael.f.f1@gmail.com>\n"
"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
"net>\n"
"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -20,17 +19,17 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Poedit 1.5.7\n"
#: gnu/packages.scm:95
#: gnu/packages.scm:102
#, scheme-format
msgid "cannot access `~a': ~a~%"
msgstr "não foi possível acessar \"~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 "especificação ambígua de pacote \"~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 "escolhendo ~a de ~a~%"
@ -97,8 +96,7 @@ msgid ""
msgstr ""
"\n"
" --max-silent-time=SEGUNDOS\n"
" marca compilação como falha após SEGUNDOS de "
"silêncio"
" marca compilação como falha após SEGUNDOS de silêncio"
#: guix/scripts/build.scm:136
#, fuzzy
@ -108,8 +106,7 @@ msgid ""
msgstr ""
"\n"
" --max-silent-time=SEGUNDOS\n"
" marca compilação como falha após SEGUNDOS de "
"silêncio"
" marca compilação como falha após SEGUNDOS de silêncio"
#: guix/scripts/build.scm:138
msgid ""
@ -125,8 +122,7 @@ msgid ""
" -c, --cores=N allow the use of up to N CPU cores for the build"
msgstr ""
"\n"
" -c, --cores=N permite o uso de até N núcleos de CPU para "
"compilação"
" -c, --cores=N permite o uso de até N núcleos de CPU para compilação"
#: guix/scripts/build.scm:206
#, scheme-format
@ -172,8 +168,7 @@ msgid ""
" --target=TRIPLET cross-build for TRIPLET--e.g., \"armel-linux-gnu\""
msgstr ""
"\n"
" --target=TRIO compilação cruzada para TRIO. ex.: \"armel-linux-gnu"
"\""
" --target=TRIO compilação cruzada para TRIO. ex.: \"armel-linux-gnu\""
#: guix/scripts/build.scm:233
msgid ""
@ -197,8 +192,7 @@ msgid ""
" as a garbage collector root"
msgstr ""
"\n"
" -r, --root=ARQUIVO faz do ARQUIVO um link simbólico para o resultado "
"e\n"
" -r, --root=ARQUIVO faz do ARQUIVO um link simbólico para o resultado e\n"
" registra-o, como um coletor de lixo"
#: guix/scripts/build.scm:241
@ -208,9 +202,9 @@ msgid ""
msgstr ""
#: guix/scripts/build.scm:246 guix/scripts/download.scm:53
#: guix/scripts/package.scm:511 guix/scripts/gc.scm:58
#: guix/scripts/package.scm:525 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:362
msgid ""
"\n"
" -h, --help display this help and exit"
@ -219,9 +213,9 @@ msgstr ""
" -h, --help exibe esta ajuda e sai"
#: guix/scripts/build.scm:248 guix/scripts/download.scm:55
#: guix/scripts/package.scm:513 guix/scripts/gc.scm:60
#: guix/scripts/package.scm:527 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:364
msgid ""
"\n"
" -V, --version display version information and exit"
@ -235,8 +229,8 @@ msgid "sources do not match any package:~{ ~a~}~%"
msgstr ""
#: 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:763 guix/scripts/gc.scm:122
#: guix/scripts/pull.scm:115 guix/scripts/system.scm:414
#, scheme-format
msgid "~A: unrecognized option~%"
msgstr "~A: opção desconhecida~%"
@ -285,75 +279,74 @@ msgstr "~a: falha ao analisar URI~%"
msgid "~a: download failed~%"
msgstr "~a: falha no download~%"
#: guix/scripts/package.scm:76
#: guix/scripts/package.scm:88
#, scheme-format
msgid "failed to build the empty profile~%"
msgstr "falha ao compilar o perfil vazio~%"
# geração, criação?
#: guix/scripts/package.scm:85
#: guix/scripts/package.scm:97
#, scheme-format
msgid "switching from generation ~a to ~a~%"
msgstr "trocando para geração de ~a para ~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:873
#: guix/scripts/package.scm:985
#, scheme-format
msgid "profile '~a' does not exist~%"
msgstr "perfil \"~a\" não existe~%"
#: guix/scripts/package.scm:100
#: guix/scripts/package.scm:112
#, scheme-format
msgid "nothing to do: already at the empty profile~%"
msgstr "nada a ser feito: já está no perfil vazio~%"
#: guix/scripts/package.scm:185
#: guix/scripts/package.scm:197
#, fuzzy, scheme-format
msgid "The following package would be removed:~%~{~a~%~}~%"
msgstr "O seguinte pacote seria removido:~% ~{~a~%~}~%"
#: guix/scripts/package.scm:190
#: guix/scripts/package.scm:202
#, fuzzy, scheme-format
msgid "The following package will be removed:~%~{~a~%~}~%"
msgstr "O seguinte pacote será removido:~% ~{~a~%~}~%"
#: guix/scripts/package.scm:202
#: guix/scripts/package.scm:214
#, scheme-format
msgid "The following package would be installed:~%~{~a~%~}~%"
msgstr "O seguinte pacote seria instalado:~%~{~a~%~}~%"
#: guix/scripts/package.scm:207
#: guix/scripts/package.scm:219
#, scheme-format
msgid "The following package will be installed:~%~{~a~%~}~%"
msgstr "O seguinte pacote será instalado:~%~{~a~%~}~%"
#: guix/scripts/package.scm:327
#: guix/scripts/package.scm:339
#, scheme-format
msgid "package `~a' lacks output `~a'~%"
msgstr "pacote \"~a\" carece de mensagem de saída \"~a\"~%"
#: guix/scripts/package.scm:344
#: guix/scripts/package.scm:356
#, scheme-format
msgid "~a: package not found~%"
msgstr "~a: pacote não encontrado~%"
#: guix/scripts/package.scm:379
#: guix/scripts/package.scm:391
#, scheme-format
msgid "looking for the latest release of GNU ~a..."
msgstr "procurando pelo último lançamento do 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: nota: usando ~a, mas ~a está disponível no upstream~%"
#: guix/scripts/package.scm:455
#: guix/scripts/package.scm:467
#, scheme-format
msgid "The following environment variable definitions may be needed:~%"
msgstr ""
"As seguintes definições de variável de ambiente podem ser necessárias:~%"
msgstr "As seguintes definições de variável de ambiente podem ser necessárias:~%"
#: 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"
@ -361,7 +354,7 @@ msgstr ""
"Uso: guix package [OPÇÃO]... PACOTES...\n"
"Instala, remove ou atualiza PACOTES em uma única transação.\n"
#: guix/scripts/package.scm:473
#: guix/scripts/package.scm:485
msgid ""
"\n"
" -i, --install=PACKAGE install PACKAGE"
@ -369,7 +362,7 @@ msgstr ""
"\n"
" -i, --install=PACOTE instala PACOTE"
#: guix/scripts/package.scm:475
#: guix/scripts/package.scm:487
msgid ""
"\n"
" -e, --install-from-expression=EXP\n"
@ -379,7 +372,7 @@ msgstr ""
" -e, --install-from-expression=EXP\n"
" instala o pacote que EXPR corresponder"
#: guix/scripts/package.scm:478
#: guix/scripts/package.scm:490
msgid ""
"\n"
" -r, --remove=PACKAGE remove PACKAGE"
@ -387,17 +380,16 @@ msgstr ""
"\n"
" -r, --remove=PACOTE remove PACOTE"
#: 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[=REGEXP] atualiza todos os pacotes instalados "
"correspondendo\n"
" -u, --upgrade[=REGEXP] atualiza todos os pacotes instalados correspondendo\n"
" à REGEXP"
#: guix/scripts/package.scm:482
#: guix/scripts/package.scm:494
msgid ""
"\n"
" --roll-back roll back to the previous generation"
@ -405,7 +397,7 @@ msgstr ""
"\n"
" --roll-back Reverte para a geração anterior"
#: guix/scripts/package.scm:484
#: guix/scripts/package.scm:496
msgid ""
"\n"
" --search-paths display needed environment variable definitions"
@ -413,7 +405,7 @@ msgstr ""
"\n"
" --search-paths exibe definições necessárias de variável de ambiente"
#: guix/scripts/package.scm:486
#: guix/scripts/package.scm:498
msgid ""
"\n"
" -l, --list-generations[=PATTERN]\n"
@ -423,7 +415,7 @@ msgstr ""
" -I, --list-generations[=PADRÃO]\n"
" lista criações correspondendo ao PADRÃO"
#: guix/scripts/package.scm:489
#: guix/scripts/package.scm:501
#, fuzzy
msgid ""
"\n"
@ -434,7 +426,7 @@ msgstr ""
" -I, --list-generations[=PADRÃO]\n"
" lista criações correspondendo ao PADRÃO"
#: guix/scripts/package.scm:492
#: guix/scripts/package.scm:504
msgid ""
"\n"
" -p, --profile=PROFILE use PROFILE instead of the user's default profile"
@ -442,7 +434,7 @@ msgstr ""
"\n"
" -p, --profile=PERFIL usa PERFIL em vez do perfil padrão do usuário"
#: guix/scripts/package.scm:495
#: guix/scripts/package.scm:507
msgid ""
"\n"
" --bootstrap use the bootstrap Guile to build the profile"
@ -450,7 +442,7 @@ msgstr ""
"\n"
" --bootstrap usa a inicialização do Guile para compilar o perfil"
#: 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"
@ -458,7 +450,7 @@ msgstr ""
"\n"
" --verbose produz uma saída mais detalhada"
#: guix/scripts/package.scm:500
#: guix/scripts/package.scm:512
msgid ""
"\n"
" -s, --search=REGEXP search in synopsis and description using REGEXP"
@ -466,7 +458,7 @@ msgstr ""
"\n"
" -s, --search=REGEXP pesquisa na sinopse e descrição usando REGEXP"
#: guix/scripts/package.scm:502
#: guix/scripts/package.scm:514
msgid ""
"\n"
" -I, --list-installed[=REGEXP]\n"
@ -476,7 +468,7 @@ msgstr ""
" -I, --list-installed[=REGEXP]\n"
" lista pacotes instalados correspondentes a REGEXP"
#: guix/scripts/package.scm:505
#: guix/scripts/package.scm:517
msgid ""
"\n"
" -A, --list-available[=REGEXP]\n"
@ -486,62 +478,71 @@ msgstr ""
" -A, --list-available[=REGEXP]\n"
" lista pacotes disponíveis correspondentes a REGEXP"
#: guix/scripts/package.scm:748
#: guix/scripts/package.scm:520
#, fuzzy
msgid ""
"\n"
" --show=PACKAGE show details about PACKAGE"
msgstr ""
"\n"
" -i, --install=PACOTE instala PACOTE"
#: guix/scripts/package.scm:767
#, scheme-format
msgid "~A: extraneous argument~%"
msgstr "~A: argumento estranho~%"
#: guix/scripts/package.scm:763
#: guix/scripts/package.scm:782
#, scheme-format
msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%"
msgstr "Tente \"info '(guix) Invoking guix package'\" para mais informações.~%"
#: guix/scripts/package.scm:785
#: guix/scripts/package.scm:804
#, scheme-format
msgid "error: while creating directory `~a': ~a~%"
msgstr "erro: ao criar diretório \"~a\": ~a~%"
#: guix/scripts/package.scm:789
#: guix/scripts/package.scm:808
#, scheme-format
msgid "Please create the `~a' directory, with you as the owner.~%"
msgstr "Por favor, crie o diretório \"~a\", com você sendo o proprietário.~%"
#: guix/scripts/package.scm:796
#: guix/scripts/package.scm:815
#, scheme-format
msgid "error: directory `~a' is not owned by you~%"
msgstr "erro: diretório \"~a\" não tem você como proprietário~%"
#: guix/scripts/package.scm:799
#: guix/scripts/package.scm:818
#, scheme-format
msgid "Please change the owner of `~a' to user ~s.~%"
msgstr "Por favor, altere o proprietário d \"~a\" para o usuário ~s.~%"
#: guix/scripts/package.scm:822
#: guix/scripts/package.scm:843
#, fuzzy, scheme-format
msgid "deleting ~a~%"
msgstr "Criação ~a\t~a~%"
#: guix/scripts/package.scm:875 guix/scripts/package.scm:980
#: guix/scripts/package.scm:896 guix/scripts/package.scm:1001
#, scheme-format
msgid "invalid syntax: ~a~%"
msgstr "sintaxe inválida: ~a~%"
#: guix/scripts/package.scm:904
#: guix/scripts/package.scm:925
#, scheme-format
msgid "nothing to be done~%"
msgstr "nada para ser feito~%"
#: guix/scripts/package.scm:927
#: guix/scripts/package.scm:948
#, scheme-format
msgid "~a package in profile~%"
msgstr "pacote ~a no perfil~%"
#: guix/scripts/package.scm:942
#: guix/scripts/package.scm:963
#, fuzzy, scheme-format
msgid "Generation ~a\t~a"
msgstr "Criação ~a\t~a~%"
#: guix/scripts/package.scm:949
#: guix/scripts/package.scm:970
#, scheme-format
msgid "~a\t(current)~%"
msgstr ""
@ -675,8 +676,7 @@ msgid ""
" --bootstrap use the bootstrap Guile to build the new Guix"
msgstr ""
"\n"
" --bootstrap usa a inicialização do Guile para compilar o novo "
"Guix"
" --bootstrap usa a inicialização do Guile para compilar o novo Guix"
#: guix/scripts/pull.scm:117
#, scheme-format
@ -763,7 +763,7 @@ msgstr ""
#: guix/scripts/substitute-binary.scm:338
#, scheme-format
msgid "narinfo for '~a' lacks a signature~%"
msgid "substitute at '~a' lacks a signature~%"
msgstr ""
#: guix/scripts/substitute-binary.scm:526
@ -774,9 +774,7 @@ msgstr "Baixando, por favor aguarde...~%"
#: guix/scripts/substitute-binary.scm:528
#, scheme-format
msgid "(Please consider upgrading Guile to get proper progress report.)~%"
msgstr ""
"(Por favor, considere atualizar o Guile para obter o relatório adequado do "
"progresso.)~%"
msgstr "(Por favor, considere atualizar o Guile para obter o relatório adequado do progresso.)~%"
#: guix/scripts/substitute-binary.scm:545
#, scheme-format
@ -789,8 +787,7 @@ msgid ""
"Internal tool to substitute a pre-built binary to a local build.\n"
msgstr ""
"Uso: guix substitute-binary [OPÇÃO]...\n"
"Ferramenta interna para substituir um binário pré-compilado para uma "
"compilação local.\n"
"Ferramenta interna para substituir um binário pré-compilado para uma compilação local.\n"
#: guix/scripts/substitute-binary.scm:556
msgid ""
@ -799,8 +796,7 @@ msgid ""
" store file names passed on the standard input"
msgstr ""
"\n"
" --query relata a disponibilidade de substitutos para os "
"nomes\n"
" --query relata a disponibilidade de substitutos para os nomes\n"
" de arquivos de armazenamento passados na entrada\n"
" padrão"
@ -813,22 +809,19 @@ msgid ""
msgstr ""
"\n"
" --substitute ARQUIVO-ARMAZENAMENTO DESTINO\n"
" baixa ARQUIVO-ARMAZENAMENTO e armazena-o como um "
"Nar\n"
" baixa ARQUIVO-ARMAZENAMENTO e armazena-o como um Nar\n"
" no arquivo DESTINO"
#: guix/scripts/substitute-binary.scm:599
msgid ""
"ACL for archive imports seems to be uninitialized, substitutes may be "
"unavailable\n"
#: guix/scripts/substitute-binary.scm:604
msgid "ACL for archive imports seems to be uninitialized, substitutes may be unavailable\n"
msgstr ""
#: 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 ""
#: guix/scripts/substitute-binary.scm:726
#: guix/scripts/substitute-binary.scm:732
#, scheme-format
msgid "~a: unrecognized options~%"
msgstr "~a: opções desconhecidas~%"
@ -865,93 +858,112 @@ msgstr ""
msgid "wrong arguments"
msgstr "número errado de argumentos~%"
#: guix/scripts/system.scm:67
#: guix/scripts/system.scm:74
#, fuzzy, scheme-format
msgid "failed to open operating system file '~a': ~a~%"
msgstr "falha ao conectar em \"~a\": ~a~%"
#: guix/scripts/system.scm:70
#: guix/scripts/system.scm:78 guix/ui.scm:238
#, fuzzy, scheme-format
msgid "failed to load machine file '~a': ~s~%"
msgid "~a: ~a~%"
msgstr "~a~%"
#: guix/scripts/system.scm:81
#, fuzzy, scheme-format
msgid "failed to load operating system file '~a': ~s~%"
msgstr "falha ao conectar em \"~a\": ~a~%"
#: guix/scripts/system.scm:86
#: guix/scripts/system.scm:116
#, fuzzy, scheme-format
msgid "failed to register '~a' under '~a'~%"
msgstr "falha ao criar raiz de GC \"~a\": ~a~%"
#: guix/scripts/system.scm:102
#: guix/scripts/system.scm:144
#, scheme-format
msgid "initializing the current root file system~%"
msgstr ""
#: guix/scripts/system.scm:113
#: guix/scripts/system.scm:162 guix/scripts/system.scm:318
#, fuzzy, scheme-format
msgid "failed to install GRUB on device '~a'~%"
msgstr "falha ao instalar local: ~a~%"
#: guix/scripts/system.scm:121
#: guix/scripts/system.scm:197
#, scheme-format
msgid "activating system...~%"
msgstr ""
#: guix/scripts/system.scm:236
#, fuzzy, scheme-format
msgid "unrecognized boot parameters for '~a'~%"
msgstr "opção desconhecida: ~a~%"
#: guix/scripts/system.scm:323
#, fuzzy, scheme-format
msgid "initializing operating system under '~a'...~%"
msgstr "falha ao conectar em \"~a\": ~a~%"
#: guix/scripts/system.scm:339
msgid ""
"Usage: guix system [OPTION] ACTION FILE\n"
"Build the operating system declared in FILE according to ACTION.\n"
msgstr ""
#: guix/scripts/system.scm:124
#: guix/scripts/system.scm:342
msgid "The valid values for ACTION are:\n"
msgstr ""
#: guix/scripts/system.scm:125
#: guix/scripts/system.scm:343
msgid " - 'reconfigure', switch to a new operating system configuration\n"
msgstr ""
#: guix/scripts/system.scm:345
msgid " - 'build', build the operating system without installing anything\n"
msgstr ""
#: guix/scripts/system.scm:127
#: guix/scripts/system.scm:347
msgid " - 'vm', build a virtual machine image that shares the host's store\n"
msgstr ""
#: guix/scripts/system.scm:129
#: guix/scripts/system.scm:349
msgid " - 'vm-image', build a freestanding virtual machine image\n"
msgstr ""
#: guix/scripts/system.scm:131
#: guix/scripts/system.scm:351
msgid " - 'disk-image', build a disk image, suitable for a USB stick\n"
msgstr ""
#: guix/scripts/system.scm:133
#: guix/scripts/system.scm:353
msgid " - 'init', initialize a root file system to run GNU.\n"
msgstr ""
#: guix/scripts/system.scm:137
#: guix/scripts/system.scm:357
msgid ""
"\n"
" --image-size=SIZE for 'vm-image', produce an image of SIZE"
msgstr ""
#: guix/scripts/system.scm:139
#: guix/scripts/system.scm:359
msgid ""
"\n"
" --no-grub for 'init', do not install GRUB"
msgstr ""
#: guix/scripts/system.scm:198
#: guix/scripts/system.scm:422
#, fuzzy, scheme-format
msgid "~a: unknown action~%"
msgstr "~A: pacote desconhecido~%"
#: guix/scripts/system.scm:215
#: guix/scripts/system.scm:439
#, fuzzy, scheme-format
msgid "wrong number of arguments for action '~a'~%"
msgstr "número errado de argumentos~%"
#: guix/scripts/system.scm:234
#: guix/scripts/system.scm:459
#, scheme-format
msgid "no configuration file specified~%"
msgstr ""
#: guix/scripts/system.scm:272
#, fuzzy, scheme-format
msgid "initializing operating system under '~a'...~%"
msgstr "falha ao conectar em \"~a\": ~a~%"
#: guix/gnu-maintenance.scm:373
#, scheme-format
msgid "signature verification failed for `~a'~%"
@ -980,8 +992,7 @@ msgstr "falha ao instalar local: ~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 ""
@ -1035,9 +1046,7 @@ msgstr "~a:~a:~a: pacote \"~a\" tem uma entrada inválida: ~s~%"
#: guix/ui.scm:219
#, scheme-format
msgid "~a: ~a: build system `~a' does not support cross builds~%"
msgstr ""
"~a: ~a: sistema de compilação de \"~a\" não tem suporte a compilações "
"cruzadas~%"
msgstr "~a: ~a: sistema de compilação de \"~a\" não tem suporte a compilações cruzadas~%"
#: guix/ui.scm:224
#, scheme-format
@ -1049,70 +1058,65 @@ msgstr "falha ao conectar em \"~a\": ~a~%"
msgid "build failed: ~a~%"
msgstr "compilação falhou: ~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 "falha ao ler a expressão ~s: ~s~%"
#: guix/ui.scm:261
#: guix/ui.scm:263
#, scheme-format
msgid "failed to evaluate expression `~a': ~s~%"
msgstr "falha ao avaliar a expressão \"~a\": ~s~%"
#: guix/ui.scm:270
#: guix/ui.scm:272
#, fuzzy, scheme-format
msgid "expression ~s does not evaluate to a package~%"
msgstr "expressão \"~s\" não corresponde a um pacote~%"
#: guix/ui.scm:317
#: guix/ui.scm:319
#, scheme-format
msgid "~:[The following derivation would be built:~%~{ ~a~%~}~;~]"
msgstr "~:[A seguinte derivação será compilada:~%~{ ~a~%~}~;~]"
#: guix/ui.scm:322
#: guix/ui.scm:324
#, scheme-format
msgid "~:[The following file would be downloaded:~%~{ ~a~%~}~;~]"
msgstr "~:[O seguinte arquivo será baixado:~%~{ ~a~%~}~;~]"
#: guix/ui.scm:328
#: guix/ui.scm:330
#, scheme-format
msgid "~:[The following derivation will be built:~%~{ ~a~%~}~;~]"
msgstr "~:[A seguinte derivação será compilada:~%~{ ~a~%~}~;~]"
#: guix/ui.scm:333
#: guix/ui.scm:335
#, scheme-format
msgid "~:[The following file will be downloaded:~%~{ ~a~%~}~;~]"
msgstr "~:[O seguinte arquivo será baixado:~%~{ ~a~%~}~;~]"
#: guix/ui.scm:350
#: guix/ui.scm:352
msgid "<unknown location>"
msgstr "<local desconhecido>"
#: guix/ui.scm:378
#: guix/ui.scm:380
#, scheme-format
msgid "failed to create configuration directory `~a': ~a~%"
msgstr "falha ao criar o diretório de compilação \"~a\": ~a~%"
#: guix/ui.scm:459 guix/ui.scm:473
#: guix/ui.scm:475 guix/ui.scm:489
msgid "unknown"
msgstr "desconhecido"
#: guix/ui.scm:582
#: guix/ui.scm:598
#, scheme-format
msgid "invalid argument: ~a~%"
msgstr "argumento inválido: ~a~%"
#: guix/ui.scm:587
#: guix/ui.scm:603
#, scheme-format
msgid "Try `guix --help' for more information.~%"
msgstr "Tente \"guix --help\" para mais informações.~%"
#: guix/ui.scm:617
#: guix/ui.scm:633
msgid ""
"Usage: guix COMMAND ARGS...\n"
"Run COMMAND with ARGS.\n"
@ -1120,21 +1124,21 @@ msgstr ""
"Uso: guix COMANDO ARGUMENTOS...\n"
"Executa COMANDO com ARGUMENTOS.\n"
#: guix/ui.scm:620
#: guix/ui.scm:636
msgid "COMMAND must be one of the sub-commands listed below:\n"
msgstr "COMANDO deve ser um dos subcomandos listados abaixo:\n"
#: guix/ui.scm:640
#: guix/ui.scm:656
#, scheme-format
msgid "guix: ~a: command not found~%"
msgstr "guix: ~a: comando não encontrado~%"
#: guix/ui.scm:658
#: guix/ui.scm:674
#, scheme-format
msgid "guix: missing command name~%"
msgstr "guix: faltando um nome de comando~%"
#: guix/ui.scm:666
#: guix/ui.scm:682
#, scheme-format
msgid "guix: unrecognized option '~a'~%"
msgstr "guix: opção \"~a\" desconhecida~%"
@ -1237,3 +1241,7 @@ msgstr ""
#: guix/nar.scm:487
msgid "invalid inter-file archive mark"
msgstr ""
#, fuzzy
#~ msgid "failed to load machine file '~a': ~s~%"
#~ msgstr "falha ao conectar em \"~a\": ~a~%"

File diff suppressed because it is too large Load Diff

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: guix 0.7-pre1\n"
"Report-Msgid-Bugs-To: ludo@gnu.org\n"
"POT-Creation-Date: 2014-07-13 17:06+0200\n"
"POT-Creation-Date: 2014-07-25 00:55+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"
@ -20,7 +20,7 @@ msgstr ""
"X-Poedit-SourceCharset: UTF-8\n"
"X-Generator: Poedit 1.5.5\n"
#: gnu/packages.scm:95
#: gnu/packages.scm:102
#, scheme-format
msgid "cannot access `~a': ~a~%"
msgstr "không thể truy cập `~a': ~a~%"
@ -206,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:523 guix/scripts/gc.scm:58
#: guix/scripts/package.scm:525 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:334
#: guix/scripts/substitute-binary.scm:564 guix/scripts/system.scm:362
msgid ""
"\n"
" -h, --help display this help and exit"
@ -217,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:525 guix/scripts/gc.scm:60
#: guix/scripts/package.scm:527 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:336
#: guix/scripts/substitute-binary.scm:566 guix/scripts/system.scm:364
msgid ""
"\n"
" -V, --version display version information and exit"
@ -233,8 +233,8 @@ msgid "sources do not match any package:~{ ~a~}~%"
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:756 guix/scripts/gc.scm:122
#: guix/scripts/pull.scm:115 guix/scripts/system.scm:386
#: guix/scripts/package.scm:763 guix/scripts/gc.scm:122
#: guix/scripts/pull.scm:115 guix/scripts/system.scm:414
#, scheme-format
msgid "~A: unrecognized option~%"
msgstr "~A: tùy chọn không được chấp nhận~%"
@ -293,8 +293,8 @@ msgstr "gặp lỗi khi xây dựng hồ sơ trống rỗng~%"
msgid "switching from generation ~a to ~a~%"
msgstr "chuyển từ thế hệ ~a sang ~a~%"
#: guix/scripts/package.scm:108 guix/scripts/package.scm:866
#: guix/scripts/package.scm:978
#: guix/scripts/package.scm:108 guix/scripts/package.scm:873
#: guix/scripts/package.scm:985
#, scheme-format
msgid "profile '~a' does not exist~%"
msgstr "hồ sơ `~a' không tồn tại~%"
@ -480,62 +480,71 @@ 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:760
#: guix/scripts/package.scm:520
#, fuzzy
msgid ""
"\n"
" --show=PACKAGE show details about PACKAGE"
msgstr ""
"\n"
" -i, --install=GÓI cài đặt GÓI"
#: guix/scripts/package.scm:767
#, scheme-format
msgid "~A: extraneous argument~%"
msgstr "~A: đối số ngoại lai~%"
#: guix/scripts/package.scm:775
#: guix/scripts/package.scm:782
#, 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.~%"
#: guix/scripts/package.scm:797
#: guix/scripts/package.scm:804
#, 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:801
#: guix/scripts/package.scm:808
#, 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:808
#: guix/scripts/package.scm:815
#, 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:811
#: guix/scripts/package.scm:818
#, 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:836
#: guix/scripts/package.scm:843
#, scheme-format
msgid "deleting ~a~%"
msgstr "đang xóa ~a~%"
#: guix/scripts/package.scm:889 guix/scripts/package.scm:994
#: guix/scripts/package.scm:896 guix/scripts/package.scm:1001
#, scheme-format
msgid "invalid syntax: ~a~%"
msgstr "cú pháp không hợp lệ: ~a~%"
#: guix/scripts/package.scm:918
#: guix/scripts/package.scm:925
#, scheme-format
msgid "nothing to be done~%"
msgstr "không có gì cần làm~%"
#: guix/scripts/package.scm:941
#: guix/scripts/package.scm:948
#, scheme-format
msgid "~a package in profile~%"
msgstr "~a gói trong hồ sơ~%"
#: guix/scripts/package.scm:956
#: guix/scripts/package.scm:963
#, scheme-format
msgid "Generation ~a\t~a"
msgstr "Tạo ~a\t~a"
#: guix/scripts/package.scm:963
#: guix/scripts/package.scm:970
#, scheme-format
msgid "~a\t(current)~%"
msgstr "~a\t(hiện tại)~%"
@ -868,37 +877,37 @@ msgstr "~a: ~a~%"
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:111
#: guix/scripts/system.scm:116
#, scheme-format
msgid "failed to register '~a' under '~a'~%"
msgstr "gặp lỗi khi đăng ký `~a' dưới ~a~%"
#: guix/scripts/system.scm:127
#: guix/scripts/system.scm:144
#, scheme-format
msgid "initializing the current root file system~%"
msgstr "đang khởi tạo hệ thống tập tin gốc hiện tại~%"
#: guix/scripts/system.scm:151 guix/scripts/system.scm:291
#: guix/scripts/system.scm:162 guix/scripts/system.scm:318
#, scheme-format
msgid "failed to install GRUB on device '~a'~%"
msgstr "gặp lỗi khi cài đặt GRUB trên thiết bị `~a'~%"
#: guix/scripts/system.scm:176
#: guix/scripts/system.scm:197
#, scheme-format
msgid "activating system...~%"
msgstr "đang kích hoạt hệ thống...~%"
#: guix/scripts/system.scm:211
#: guix/scripts/system.scm:236
#, 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
#: guix/scripts/system.scm:323
#, 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:311
#: guix/scripts/system.scm:339
msgid ""
"Usage: guix system [OPTION] ACTION FILE\n"
"Build the operating system declared in FILE according to ACTION.\n"
@ -906,35 +915,35 @@ 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:314
#: guix/scripts/system.scm:342
msgid "The valid values for ACTION are:\n"
msgstr "Các giá trị hợp lệ cho THAO TÁC là:\n"
#: guix/scripts/system.scm:315
#: guix/scripts/system.scm:343
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
#: guix/scripts/system.scm:345
msgid " - 'build', build the operating system without installing anything\n"
msgstr " - 'build', xây dựng hệ điều hành mà không cài gì\n"
#: guix/scripts/system.scm:319
#: guix/scripts/system.scm:347
msgid " - 'vm', build a virtual machine image that shares the host's store\n"
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:321
#: guix/scripts/system.scm:349
msgid " - 'vm-image', build a freestanding virtual machine image\n"
msgstr " - 'vm-image', xây dựng một ảnh máy ảo đứng tự do\n"
#: guix/scripts/system.scm:323
#: guix/scripts/system.scm:351
msgid " - 'disk-image', build a disk image, suitable for a USB stick\n"
msgstr " - 'disk-image', xây dựng ảnh đĩa, phù hợp để dùng cho đĩa USB\n"
#: guix/scripts/system.scm:325
#: guix/scripts/system.scm:353
msgid " - 'init', initialize a root file system to run GNU.\n"
msgstr " - 'init', khởi tạo một hệ thống tập tin gốc để chạy GNU.\n"
#: guix/scripts/system.scm:329
#: guix/scripts/system.scm:357
msgid ""
"\n"
" --image-size=SIZE for 'vm-image', produce an image of SIZE"
@ -942,7 +951,7 @@ msgstr ""
"\n"
" --image-size=CỠ cho 'vm-image', sản sinh ảnh theo CỠ này"
#: guix/scripts/system.scm:331
#: guix/scripts/system.scm:359
msgid ""
"\n"
" --no-grub for 'init', do not install GRUB"
@ -950,17 +959,17 @@ msgstr ""
"\n"
" --no-grub dành cho 'init', đừng cài GRUB"
#: guix/scripts/system.scm:394
#: guix/scripts/system.scm:422
#, scheme-format
msgid "~a: unknown action~%"
msgstr "~a: không hiểu thao tác~%"
#: guix/scripts/system.scm:411
#: guix/scripts/system.scm:439
#, scheme-format
msgid "wrong number of arguments for action '~a'~%"
msgstr "sai số lượng đối số cho thao tác '~a'~%"
#: guix/scripts/system.scm:431
#: guix/scripts/system.scm:459
#, scheme-format
msgid "no configuration file specified~%"
msgstr "chưa ghi rõ tập tin nhập cấu hình~%"
@ -1107,21 +1116,21 @@ msgstr "<không hiểu vị trí>"
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:461 guix/ui.scm:475
#: guix/ui.scm:475 guix/ui.scm:489
msgid "unknown"
msgstr "không hiểu"
#: guix/ui.scm:584
#: guix/ui.scm:598
#, scheme-format
msgid "invalid argument: ~a~%"
msgstr "đối số không hợp lệ: ~a~%"
#: guix/ui.scm:589
#: guix/ui.scm:603
#, 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:619
#: guix/ui.scm:633
msgid ""
"Usage: guix COMMAND ARGS...\n"
"Run COMMAND with ARGS.\n"
@ -1129,21 +1138,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:622
#: guix/ui.scm:636
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:642
#: guix/ui.scm:656
#, scheme-format
msgid "guix: ~a: command not found~%"
msgstr "guix: ~a: không tìm thấy lệnh~%"
#: guix/ui.scm:660
#: guix/ui.scm:674
#, scheme-format
msgid "guix: missing command name~%"
msgstr "guix: thiếu tên lệnh~%"
#: guix/ui.scm:668
#: guix/ui.scm:682
#, scheme-format
msgid "guix: unrecognized option '~a'~%"
msgstr "guix: tùy chọn không được thừa nhận `~a'~%"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"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"
"POT-Creation-Date: 2014-07-14 11:59+0200\n"
"PO-Revision-Date: 2014-07-13 20:23+0100\n"
"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"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"
"POT-Creation-Date: 2014-07-14 11:59+0200\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"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: guix 0.4-pre2\n"
"Report-Msgid-Bugs-To: ludo@gnu.org\n"
"POT-Creation-Date: 2014-06-25 22:55+0200\n"
"POT-Creation-Date: 2014-07-14 11:59+0200\n"
"PO-Revision-Date: 2013-09-28 21:29-0300\n"
"Last-Translator: Rafael Ferreira <rafael.f.f1@gmail.com>\n"
"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n"

View File

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: guix-0.6-pre1\n"
"Report-Msgid-Bugs-To: ludo@gnu.org\n"
"POT-Creation-Date: 2014-06-25 22:55+0200\n"
"POT-Creation-Date: 2014-07-14 11:59+0200\n"
"PO-Revision-Date: 2014-06-19 08:51+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: guix 0.5-pre2\n"
"Report-Msgid-Bugs-To: ludo@gnu.org\n"
"POT-Creation-Date: 2014-06-25 22:55+0200\n"
"POT-Creation-Date: 2014-07-14 11:59+0200\n"
"PO-Revision-Date: 2013-12-04 07:48+0700\n"
"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"

View File

@ -224,7 +224,7 @@
(return (string=? system (derivation-system drv))))))
(define shebang
(string-append (derivation->output-path guile-for-build)
(string-append "#!" (derivation->output-path guile-for-build)
"/bin/guile --no-auto-compile"))
;; If we're going to hit the silly shebang limit (128 chars on Linux-based

View File

@ -79,13 +79,6 @@ then
test "`guix package -p "$profile" -I 'g.*e' | cut -f1`" = "guile-bootstrap"
# Search.
LC_MESSAGES=C
export LC_MESSAGES
test "`guix package -s "An example GNU package" | grep ^name:`" = \
"name: hello"
test -z "`guix package -s "n0t4r341p4ck4g3"`"
# List generations.
test "`guix package -p "$profile" -l | cut -f1 | grep guile | head -n1`" \
= " guile-bootstrap"
@ -176,6 +169,22 @@ then false; else true; fi
# Check whether `--list-available' returns something sensible.
guix package -p "$profile" -A 'gui.*e' | grep guile
# Check whether `--show' returns something sensible.
guix package --show=guile | grep "^name: guile"
# Ensure `--show' doesn't fail for packages with non-package inputs.
guix package --show=texlive
# Search.
LC_MESSAGES=C
export LC_MESSAGES
test "`guix package -s "An example GNU package" | grep ^name:`" = \
"name: hello"
test -z "`guix package -s "n0t4r341p4ck4g3"`"
# Make sure `--search' can display all the packages.
guix package --search="" > /dev/null
# There's no generation older than 12 months, so the following command should
# have no effect.
generation="`readlink_base "$profile"`"

View File

@ -86,7 +86,7 @@ guix-register -p "$new_store" \
# Now make sure this is recognized as valid.
ls -R "$new_store"
for state_dir in "$new_store$localstatedir/guix" "$new_store/chbouib"
for state_dir in "$localstatedir/guix" "/chbouib"
do
NIX_STORE_DIR="$new_store_dir"
NIX_STATE_DIR="$new_store$state_dir"

View File

@ -108,6 +108,16 @@
guile)))
#:guile-for-build (package-derivation %store %bootstrap-guile)))
(test-assert "interned-file"
(run-with-store %store
(mlet* %store-monad ((file -> (search-path %load-path "guix.scm"))
(a (interned-file file))
(b (interned-file file "b")))
(return (equal? (call-with-input-file file get-string-all)
(call-with-input-file a get-string-all)
(call-with-input-file b get-string-all))))
#:guile-for-build (package-derivation %store %bootstrap-guile)))
(define derivation-expression
(@@ (guix monads) derivation-expression))

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -18,11 +18,25 @@
(define-module (test-profiles)
#:use-module (guix profiles)
#:use-module (guix store)
#:use-module (guix monads)
#:use-module (guix packages)
#:use-module (guix derivations)
#:use-module (gnu packages bootstrap)
#:use-module (ice-9 match)
#:use-module (srfi srfi-64))
;; Test the (guix profile) module.
(define %store
(open-connection))
(define guile-for-build
(package-derivation %store %bootstrap-guile))
;; Make it the default.
(%guile-for-build guile-for-build)
;; Example manifest entries.
@ -30,7 +44,7 @@
(manifest-entry
(name "guile")
(version "2.0.9")
(path "/gnu/store/...")
(item "/gnu/store/...")
(output "out")))
(define guile-2.0.9:debug
@ -87,6 +101,19 @@
(null? (manifest-entries m3))
(null? (manifest-entries m4)))))))
(test-assert "profile-derivation"
(run-with-store %store
(mlet* %store-monad
((entry -> (package->manifest-entry %bootstrap-guile))
(guile (package->derivation %bootstrap-guile))
(drv (profile-derivation (manifest (list entry))))
(profile -> (derivation->output-path drv))
(bindir -> (string-append profile "/bin"))
(_ (built-derivations (list drv))))
(return (and (file-exists? (string-append bindir "/guile"))
(string=? (dirname (readlink bindir))
(derivation->output-path guile)))))))
(test-end "profiles")

View File

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -25,7 +26,8 @@
#:use-module (srfi srfi-64)
#:use-module (rnrs bytevectors)
#:use-module (rnrs io ports)
#:use-module (ice-9 match))
#:use-module (ice-9 match)
#:use-module (ice-9 vlist))
(define temp-file
(string-append "t-utils-" (number->string (getpid))))
@ -118,6 +120,37 @@
'(0 1 2 3)))
list))
(let* ((tree (alist->vhash
'((0 2 3) (1 3 4) (2) (3 5 6) (4 6) (5) (6))
hashq))
(add-one (lambda (_ r) (1+ r)))
(tree-lookup (lambda (n) (cdr (vhash-assq n tree)))))
(test-equal "fold-tree, single root"
5 (fold-tree add-one 0 tree-lookup '(0)))
(test-equal "fold-tree, two roots"
7 (fold-tree add-one 0 tree-lookup '(0 1)))
(test-equal "fold-tree, sum"
16 (fold-tree + 0 tree-lookup '(0)))
(test-equal "fold-tree, internal"
18 (fold-tree + 0 tree-lookup '(3 4)))
(test-equal "fold-tree, cons"
'(1 3 4 5 6)
(sort (fold-tree cons '() tree-lookup '(1)) <))
(test-equal "fold-tree, overlapping paths"
'(1 3 4 5 6)
(sort (fold-tree cons '() tree-lookup '(1 4)) <))
(test-equal "fold-tree, cons, two roots"
'(0 2 3 4 5 6)
(sort (fold-tree cons '() tree-lookup '(0 4)) <))
(test-equal "fold-tree-leaves, single root"
2 (fold-tree-leaves add-one 0 tree-lookup '(1)))
(test-equal "fold-tree-leaves, single root, sum"
11 (fold-tree-leaves + 0 tree-lookup '(1)))
(test-equal "fold-tree-leaves, two roots"
3 (fold-tree-leaves add-one 0 tree-lookup '(0 1)))
(test-equal "fold-tree-leaves, two roots, sum"
13 (fold-tree-leaves + 0 tree-lookup '(0 1))))
(test-assert "filtered-port, file"
(let* ((file (search-path %load-path "guix.scm"))
(input (open-file file "r0b")))