Merge branch 'master' into core-updates
This commit is contained in:
commit
33690ffde5
|
@ -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
115
NEWS
|
@ -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
1
THANKS
|
@ -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>
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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])
|
||||
|
|
|
@ -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
11
doc.am
|
@ -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
|
||||
|
||||
|
|
191
doc/guix.texi
191
doc/guix.texi
|
@ -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
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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))))
|
||||
|
|
|
@ -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+)))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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+)))
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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))))))
|
||||
|
|
|
@ -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/")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -193,7 +193,6 @@
|
|||
"--disable-armv6t2"
|
||||
"--disable-vfp"
|
||||
"--disable-neon"
|
||||
"--disable-vis"
|
||||
"--disable-mips32r2"
|
||||
"--disable-mipsdspr1"
|
||||
"--disable-mipsdspr2"
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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"))
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)))
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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")))))
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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"))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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))))))
|
||||
|
|
|
@ -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)))
|
||||
|
|
14
guix/ui.scm
14
guix/ui.scm
|
@ -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")))
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -4,6 +4,7 @@ de
|
|||
en@boldquot
|
||||
en@quot
|
||||
eo
|
||||
hu
|
||||
pt_BR
|
||||
sr
|
||||
vi
|
||||
|
|
107
po/guix/de.po
107
po/guix/de.po
|
@ -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«~%"
|
||||
|
|
109
po/guix/eo.po
109
po/guix/eo.po
|
@ -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'~%"
|
||||
|
|
File diff suppressed because it is too large
Load Diff
278
po/guix/pt_BR.po
278
po/guix/pt_BR.po
|
@ -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~%"
|
||||
|
|
477
po/guix/sr.po
477
po/guix/sr.po
File diff suppressed because it is too large
Load Diff
107
po/guix/vi.po
107
po/guix/vi.po
|
@ -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'~%"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"`"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
||||
|
||||
|
|
|
@ -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")))
|
||||
|
|
Loading…
Reference in New Issue