.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
-.TH LIVE\-BOOT 7 2012\-02\-06 3.0~a25\-1 "Debian Live Projekt"
+.TH LIVE\-BOOT 7 2012\-04\-05 3.0~a26\-1 "Debian Live Project"
.SH NAME
-\fBlive\-boot\fP \- System Boot Skripte
+\fBlive\-boot\fP \- System Boot Scripts
-.SH BESCHREIBUNG
-\fBlive\-config\fP enthaelt die Skripte welche ein Debian Live System waehrend
-des Startvorganes (early userspace) konfigurieren.
+.SH DESCRIPTION
+\fBlive\-boot\fP contains the scripts that configure a Debian Live system during
+the boot process (early userspace).
.PP
.\" FIXME
live\-boot is a hook for the initramfs\-tools, used to generate a initramfs
squashfs) is stored. If found, it will create a writable environment, using
aufs, for Debian like systems to boot from.
-.SH KONFIGURATION
-\fBlive\-boot\fP kann durch Boot Parameter oder durch Konfigurationsdateien
-konfiguriert werden.
+.SH CONFIGURATION
+\fBlive\-boot\fP can be configured through a boot parameter or a configuration
+file.
.PP
To configure the live\-boot parameters used by default in a live image, see
the \-\-bootappend\-live option in the \fIlb_config\fP(1) manual page.
-.SS "Kernel Parameter"
-\fBlive\-boot\fP ist nur dann aktiv, wenn 'boot=live' als Kernel Parameter
-benutzt wird.
+.SS "Kernel Parameters"
+\fBlive\-boot\fP is only activated if 'boot=live' was used as a kernel
+parameter.
.PP
In addition, there are some more boot parameters to influence the behaviour,
see below.
-.SS Konfigurationsdateien
+.SS "Configuration Files"
\fBlive\-boot\fP can be configured (but not activated) through configuration
files. Those files can be placed either in the root filesystem itself
(/etc/live/boot.conf, /etc/live/boot.d/), or on the live media
(live/boot.conf, live/boot.d/).
-.SH OPTIONEN
+.SH OPTIONS
.\" FIXME
\fBlive\-boot\fP currently features the following parameters.
.IP \fBaccess\fP=\fIACCESS\fP 4
.IP \fBswapon\fP 4
This parameter enables usage of local swap partitions.
.IP \fBpersistent\fP 4
-live\-boot will probe filesystems for persistent media. These can either be
-the filesystems themselves, if labeled correctly, or image/archive files, if
-named correctly. Overlays are labeled/named either "live\-rw" or "home\-rw"
-and will be mounted on / or /home, respectively; snapshots are labeled/named
+live\-boot will probe devices for persistent media. These can be partitions
+(with the correct GPT name), filesystems (with the correct label) or
+image/archive files (with the correct file name). Overlays are labeled/named
+either "full\-ov", which will be mounted on /, or "custom\-ov", which can be
+completely customized (see \fIlive.persist\fP(5)); snapshots are labeled/named
either "live\-sn" or "home\-sn" and will be extracted into / or /home,
-respectively (see live\-snapshot(1) for more information). Overlays are
-mounted before snapshots are extracted, and for both overlays and snapshots,
-"live\-*" are handled before "home\-*". Overlay image files and snapshot
-archive files have extensions which determines their filesystem or archive
-type, e.g. "live\-rw.ext3" and "\home\-sn.squashfs".
+respectively (see \fIlive\-snapshot\fP(1) for more information). The order these
+are handled are: full\-ov, custom\-ov, live\-sn, home\-sn. Overlay image files
+and snapshot archive files have extensions which determines their filesystem
+or archive type, e.g. "custom\-ov.ext3" and "\home\-sn.squashfs".
.IP "\fBpersistent\-encryption\fP=\fITYPE1\fP,\fITYPE2\fP ... \fITYPEn\fP" 4
This option determines which types of encryption that we allow to be used
when probing devices for persistent media. If "none" is in the list, we
regenerated each time. This is achieved by bind mounting each listed
directory with a tmpfs on the original path.
-.SH DATEIEN
+.SH FILES
.IP \fB/etc/live/boot.conf\fP 4
.IP \fB/etc/live/boot.d/\fP 4
.IP \fBlive/boot.conf\fP 4
.IP \fBlive/boot.d/\fP 4
+.IP \fBlive.persist\fP 4
-.SH "SIEHE AUCH"
+.SH "SEE ALSO"
\fIlive\-snapshot\fP(1)
.PP
+\fIlive.persist\fP(5)
+.PP
\fIlive\-build\fP(7)
.PP
\fIlive\-config\fP(7)
\fIlive\-tools\fP(7)
.SH HOMEPAGE
-Weitere Informationen ueber live\-boot und das Debian Live Projekt koennen
-auf der Homepage unter <\fIhttp://live.debian.net/\fP> und im Handbuch
-unter <\fIhttp://live.debian.net/manual/\fP> gefunden werden.
+More information about live\-boot and the Debian Live project can be found on
+the homepage at <\fIhttp://live.debian.net/\fP> and in the manual at
+<\fIhttp://live.debian.net/manual/\fP>.
-.SH FEHLER
-Fehler koennen durch Einreichen eines Fehlerberichtes fuer das live\-boot
-Paket im Debian Bug Tracking System unter
-<\fIhttp://bugs.debian.org/\fP> oder durch Senden einer E\-Mail an die
-Debian Live Mailing Liste unter <\fIdebian\-live@lists.debian.org\fP>
-(englischsprachig) mitgeteilt werden.
+.SH BUGS
+Bugs can be reported by submitting a bugreport for the live\-boot package in
+the Debian Bug Tracking System at <\fIhttp://bugs.debian.org/\fP> or by
+writing a mail to the Debian Live mailing list at
+<\fIdebian\-live@lists.debian.org\fP>.
-.SH AUTOR
-live\-boot wurde von Daniel Baumann <\fIdaniel@debian.org\fP> fuer das
-Debian Projekt geschrieben.
+.SH AUTHOR
+live\-boot was written by Daniel Baumann <\fIdaniel@debian.org\fP> for
+the Debian project.
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
-.TH LIVE\-BOOT 1 2012\-02\-06 3.0~a25\-1 "Debian Live Projekt"
+.TH LIVE\-BOOT 1 2012\-04\-05 3.0~a26\-1 "Debian Live Project"
.SH NAME
\fBlive\-snapshot\fP \- simple script to ease persistence usage
-.SH SYNTAX
+.SH SYNOPSIS
\fBlive\-snapshot\fP [\-c|\-\-cow \fIDIRECTORY] [\-d|\-\-device DEVICE\fP]
[\-e|\-\-exclude\-list \fIFILE\fP] [\-o|\-\-output \fIFILE\fP] [\-t|\-\-type \fITYPE\fP]
.br
.br
\fBlive\-snapshot\fP [\-v|\-\-version]
-.SH BESCHREIBUNG
+.SH DESCRIPTION
live\-snapshot is a script which can be used to build the right types of
persistent image files supported by \fIlive\-boot\fP(7). It is also used on exit
by the live\-boot init script to resync the boot\-found snapshots devices.
-.SH OPTIONEN
+.SH OPTIONS
.IP "\-c, \-\-cow \fIDIRECTORY\fP" 4
specifies the input directory to be cloned in the image file. Its default
value "/live/cow" should be right for most uses. However it could be handy
.IP "\-v, \-\-version" 4
output version information and exit.
-.SH DATEIEN
+.SH FILES
.IP \fB/etc/live.conf\fP 4
Some variables can be configured via this config file (inside the live
system).
snapshot. Beware, it is an experimental feature that only works for cpio
targets now.
-.SH "SIEHE AUCH"
+.SH "SEE ALSO"
\fIlive\-boot\fP(1)
.PP
\fIlive\-build\fP(7)
\fIlive\-tools\fP(7)
.SH HOMEPAGE
-Weitere Informationen ueber live\-boot und das Debian Live Projekt koennen
-auf der Homepage unter <\fIhttp://live.debian.net/\fP> und im Handbuch
-unter <\fIhttp://live.debian.net/manual/\fP> gefunden werden.
+More information about live\-boot and the Debian Live project can be found on
+the homepage at <\fIhttp://live.debian.net/\fP> and in the manual at
+<\fIhttp://live.debian.net/manual/\fP>.
-.SH FEHLER
-Fehler koennen durch Einreichen eines Fehlerberichtes fuer das live\-boot
-Paket im Debian Bug Tracking System unter
-<\fIhttp://bugs.debian.org/\fP> oder durch Senden einer E\-Mail an die
-Debian Live Mailing Liste unter <\fIdebian\-live@lists.debian.org\fP>
-(englischsprachig) mitgeteilt werden.
+.SH BUGS
+Bugs can be reported by submitting a bugreport for the live\-boot package in
+the Debian Bug Tracking System at <\fIhttp://bugs.debian.org/\fP> or by
+writing a mail to the Debian Live mailing list at
+<\fIdebian\-live@lists.debian.org\fP>.
-.SH AUTOR
-live\-boot wurde von Daniel Baumann <\fIdaniel@debian.org\fP> fuer das
-Debian Projekt geschrieben.
+.SH AUTHOR
+live\-boot was written by Daniel Baumann <\fIdaniel@debian.org\fP> for
+the Debian project.
--- /dev/null
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH LIVE\-BOOT persist 2012\-04\-05 3.0~a26\-1 "Debian Live Project"
+
+.SH NAME
+\fBlive.persist\fP \- Configuration file for persistent media in live\-boot
+
+.SH DESCRIPTION
+If live\-boot probes a persistent volume with the label (or GPT name, or file
+name, but from now on we will just say "label") "custom\-ov", that volume's
+persistence is fully customizable through the \fBlive.persist\fP file stored on
+the root of its file system. Any such labeled volume must have such a file,
+or it will be ignored.
+.PP
+The format of \fBlive.persist\fP allow empty lines and lines starting with a
+"#" (used for comments), both which will be ignored. A so called "custom
+mount" has the format:
+.PP
+.RS
+\fIDIR\fP [\fIOPTION\fP]...
+.RE
+.PP
+which roughly translates to "make \fIDIR\fP persistent in the way described by
+the list of \fIOPTION\fPs".
+.PP
+For each custom mount \fIDIR\fP must be an absolute path that cannot contain
+white spaces or the special . and .. path components, and cannot be /live
+(or any of its sub\-directories), or / (for the latter, use "full\-ov"
+persistence instead). Once activated all changes (file deletion, creation
+and modification) to \fIDIR\fP on the live file system are stored persistently
+into a path equivalent to \fIDIR\fP on the persistent media, called the source
+directory. The default way to achieve persistence is to simply bind\-mount
+the corresponding source directory to \fIDIR\fP, but this can be changed
+through the use of \fIOPTION\fPs.
+.PP
+All custom mounts will be done in an order so that no two custom mounts can
+"hide" each other. For instance, if we have the two \fIDIR\fP:s /a and /a/b it
+would always be the case that /a is mounted first, then /a/b. This remains
+true no matter how the lines in \fBlive.persist\fP are ordered, or if several
+\fBlive.persist\fP files on different persistent media are used at the same
+time. However, it is forbidden for custom mounts to have their source
+directory inside the source directory of another custom mount, so the source
+directories that are auto\-created by live\-boot does not support "nested"
+mounts like /a and /a/b on the same media. In this case you must use the
+\fBsource\fP option (see below) to make sure that they are stored in different
+source directories.
+.PP
+When a source directory doesn't exist on the persistent media for a certain
+custom mount, it will be created automatically, and permissions and
+ownership will be optimistically set according to \fIDIR\fP. It will also be
+bootstrapped by copying the contents of the \fIDIR\fP into its source directory
+on the persistent media. The bootstrapping will not happen when the
+\fBlinkfiles\fP or \fBunion\fP options are used (see below).
+
+.SH OPTIONS
+Custom mounts defined in \fBlive.persist\fP accept the following options in a
+coma\-separated list:
+.IP \fBsource\fP=\fIPATH\fP 4
+When given, store the persistent changes into \fIPATH\fP on the persistent
+media. \fIPATH\fP must be a relative path (w.r.t. the persistent media root)
+that cannot contain white spaces or the special . or .. path components,
+with the exception that it can be just . which means the persistent media
+root. This option is mostly relevant if you want to nest custom mounts,
+which otherwise would cause errors, or if you want to make the whole media
+root available (similar to the now deprecated \fBhome\-rw\fP type of
+persistence).
+.PP
+The following options are mutually exclusive (only the last given one will
+be in effect):
+.IP \fBbind\fP 4
+Bind\-mount the source directory to \fIDIR\fP. This is the default.
+.IP \fBlinkfiles\fP 4
+Create the directory structure of the source directory on the persistent
+media in \fIDIR\fP and create symbolic links from the corresponding place in
+\fIDIR\fP to each file in the source directory. Existing files or directories
+with the same name as any link will be overwritten. Note that deleting the
+links in \fIDIR\fP will only remove the link, not the corresponding file in the
+source; removed links will reappear after a reboot. To permanently add or
+delete a file one must do so directly in the source directory.
+.IP
+Effectively \fBlinkfiles\fP will make only files already in the source
+directory persistent, not any other files in \fIDIR\fP. These files must be
+manually added to the source directory to make use of this option, and they
+will appear in \fIDIR\fP in addition to files already there. This option is
+useful when only certain files need to be persistent, not the whole
+directory they're in, e.g. some configuration files in a user's home
+directory.
+.IP \fBunion\fP 4
+Save the rw branch of a union on the persistent media, so only the changes
+are stored persistently. This can potentially reduce disk usage compared to
+bind\-mounts, and will not hide files added to the read\-only media. One
+caveat is that the union will use \fIDIR\fP from the image's read\-only file
+system, not the real file system root, so files created after boot (e.g. by
+live\-config) will not appear in the union. This option will use the union
+file system specified by live\-boot's \fBunion\fP boot parameter, but is not
+supported with \fBunion=unionmount\fP.
+
+.SH DIRECTORIES
+.IP \fB/live/persistent\fP 4
+All persistent volumes will be mounted here (in a directory corresponding to
+the device name). The \fBlive.persist\fP file can easily be edited through this
+mount, as well as any source directories (which is especially practical for
+custom mounts using the \fBlinkfiles\fP option).
+
+.SH EXAMPLES
+
+Let's say we have a persistent volume \fIVOL\fP with the a \fBlive.persist\fP file
+containing the following four lines (numbered for ease of reference):
+.TP 7
+1.
+/home/user1 linkfiles,source=config\-files/user1
+.TP
+2.
+/home/user2 linkfiles,source=config\-files/user2
+.TP
+3.
+/home
+.TP
+4.
+/usr union
+.PP
+The corresponding source directories are:
+.TP 7
+1.
+\fIVOL\fP/config\-files/user1 (but it would be \fIVOL\fP/home/user1 without the
+\fBsource\fP option)
+.TP
+2.
+\fIVOL\fP/config\-files/user2 (but it would be \fIVOL\fP/home/user2 without the
+\fBsource\fP option)
+.TP
+3.
+\fIVOL\fP/home
+.TP
+4.
+\fIVOL\fP/usr
+.PP
+It was necessary to set the \fBsource\fP options for 1 and 2, since they
+otherwise would become nested with 3's source, which is illegal.
+.PP
+Line 3 will be taken care of before line 1 and 2 in order to prevent custom
+mounts 1 and 2 from being hidden by 3. When line 3 is handled, \fIVOL\fP/home
+is simply bind\-mounted on /home. To illustrate what happens for lines 1 and
+2, let's say that the following files exist:
+.TP 7
+a.
+\fIVOL\fP/config\-files/user1/.emacs
+.TP
+b.
+\fIVOL\fP/config\-files/user2/.bashrc
+.TP
+c.
+\fIVOL\fP/config\-files/user2/.ssh/config
+.PP
+Then the following links and directories will be created:
+.TP 7
+Link:
+/home/user1/.emacs \-> \fIVOL\fP/config\-files/user1/.emacs (from a)
+.TP
+Link:
+/home/user2/.bashrc \-> \fIVOL\fP/config\-files/user2/.bashrc (from b)
+.TP
+Dir:
+/homea/user2/.ssh (from c)
+.TP
+Link:
+/home/user2/.ssh/config \-> \fIVOL\fP/config\-files/user2/.ssh/config (from
+c)
+.PP
+One could argue, though, that lines 1 and 2 in the example \fBlive.persist\fP
+file above are unnecessary since line 3 already would make all of /home
+persistent. The \fBlinkfiles\fP option is intended for situations where you
+don't want a complete directory to be persistent, only certain files in it
+or its sub\-directories.
+.PP
+Line 4 can be mounted at any time since its \fIDIR\fP (and source directory) is
+completely disjoint from all the other custom mounts. When mounted,
+\fIVOL\fP/usr will be the rw branch due to the \fBunion\fP option, and will only
+contain the difference compared to the underlying read\-only file
+system. Hence packages could be installed into /usr with great space\-wise
+efficiency compared to bind\-mounts, since in the latter case all of /usr
+would have to be copied into \fIVOL\fP/usr during the initial bootstrap.
+
+.SH "SEE ALSO"
+\fIlive\-boot\fP(7)
+.PP
+\fIlive\-build\fP(7)
+.PP
+\fIlive\-config\fP(7)
+.PP
+\fIlive\-tools\fP(7)
+
+.SH HOMEPAGE
+More information about live\-boot and the Debian Live project can be found on
+the homepage at <\fIhttp://live.debian.net/\fP> and in the manual at
+<\fIhttp://live.debian.net/manual/\fP>.
+
+.SH BUGS
+Bugs can be reported by submitting a bugreport for the live\-boot package in
+the Debian Bug Tracking System at <\fIhttp://bugs.debian.org/\fP> or by
+writing a mail to the Debian Live mailing list at
+<\fIdebian\-live@lists.debian.org\fP>.
+
+.SH AUTHOR
+live.persist was written by anonym <\fIanonym@lavabit.com\fP> for the
+Debian project.
-.TH LIVE\-BOOT 7 2012\-02\-06 3.0~a25-1 "Debian Live Project"
+.TH LIVE\-BOOT 7 2012\-04\-05 3.0~a26-1 "Debian Live Project"
.SH NAME
\fBlive\-boot\fR \- System Boot Scripts
.IP "\fBswapon\fR" 4
This parameter enables usage of local swap partitions.
.IP "\fBpersistent\fR" 4
-live\-boot will probe filesystems for persistent media. These can either be the filesystems themselves, if labeled correctly, or image/archive files, if named correctly. Overlays are labeled/named either "live\-rw" or "home\-rw" and will be mounted on / or /home, respectively; snapshots are labeled/named either "live\-sn" or "home\-sn" and will be extracted into / or /home, respectively (see live\-snapshot(1) for more information). Overlays are mounted before snapshots are extracted, and for both overlays and snapshots, "live\-*" are handled before "home\-*". Overlay image files and snapshot archive files have extensions which determines their filesystem or archive type, e.g. "live\-rw.ext3" and "\home\-sn.squashfs".
+live\-boot will probe devices for persistent media. These can be partitions (with the correct GPT name), filesystems (with the correct label) or image/archive files (with the correct file name). Overlays are labeled/named either "full\-ov", which will be mounted on /, or "custom\-ov", which can be completely customized (see \fIlive.persist\fR(5)); snapshots are labeled/named either "live\-sn" or "home\-sn" and will be extracted into / or /home, respectively (see \fIlive\-snapshot\fR(1) for more information). The order these are handled are: full\-ov, custom\-ov, live-sn, home-sn. Overlay image files and snapshot archive files have extensions which determines their filesystem or archive type, e.g. "custom\-ov.ext3" and "\home\-sn.squashfs".
.IP "\fBpersistent\-encryption\fR=\fITYPE1\fR,\fITYPE2\fR ... \fITYPEn\fR" 4
This option determines which types of encryption that we allow to be used when probing devices for persistent media. If "none" is in the list, we allow unencrypted media; if "luks" is in the list, we allow LUKS\-encrypted media. Whenever a device containing encrypted media is probed the user will be prompted for the passphrase. The default value is "none".
.IP "\fBpersistent\-media\fR={\fIremovable\fR|\fIremovable\-usb\fR}" 4
.IP "\fB/etc/live/boot.d/\fR" 4
.IP "\fBlive/boot.conf\fR" 4
.IP "\fBlive/boot.d/\fR" 4
+.IP "\fBlive.persist\fR" 4
.SH SEE ALSO
\fIlive\-snapshot\fR(1)
.PP
+\fIlive.persist\fR(5)
+.PP
\fIlive\-build\fR(7)
.PP
\fIlive\-config\fR(7)
-.TH LIVE\-BOOT 1 2012\-02\-06 3.0~a25-1 "Debian Live Project"
+.TH LIVE\-BOOT 1 2012\-04\-05 3.0~a26-1 "Debian Live Project"
.SH NAME
\fBlive\-snapshot\fR \- simple script to ease persistence usage
--- /dev/null
+.TH LIVE\-BOOT persist 2012\-04\-05 3.0~a26-1 "Debian Live Project"
+
+.SH NAME
+\fBlive.persist\fR \- Configuration file for persistent media in
+live\-boot
+
+.SH DESCRIPTION
+If live-boot probes a persistent volume with the label (or GPT name,
+or file name, but from now on we will just say "label") "custom\-ov",
+that volume's persistence is fully customizable through the
+\fBlive.persist\fR file stored on the root of its file system. Any such
+labeled volume must have such a file, or it will be ignored.
+.PP
+The format of \fBlive.persist\fR allow empty lines and lines starting
+with a "#" (used for comments), both which will be ignored. A so
+called "custom mount" has the format:
+.PP
+.RS
+\fIDIR\fR [\fIOPTION\fR]...
+.RE
+.PP
+which roughly translates to "make \fIDIR\fR persistent in the way
+described by the list of \fIOPTION\fRs".
+.PP
+For each custom mount \fIDIR\fR must be an absolute path that cannot
+contain white spaces or the special . and .. path components, and
+cannot be /live (or any of its sub-directories), or / (for the latter,
+use "full-ov" persistence instead). Once activated all changes (file
+deletion, creation and modification) to \fIDIR\fR on the live file
+system are stored persistently into a path equivalent to \fIDIR\fR on
+the persistent media, called the source directory. The default way to
+achieve persistence is to simply bind-mount the corresponding source
+directory to \fIDIR\fR, but this can be changed through the use of
+\fIOPTION\fRs.
+.PP
+All custom mounts will be done in an order so that no two custom
+mounts can "hide" each other. For instance, if we have the two
+\fIDIR\fR:s /a and /a/b it would always be the case that /a is mounted
+first, then /a/b. This remains true no matter how the lines in
+\fBlive.persist\fR are ordered, or if several \fBlive.persist\fR files
+on different persistent media are used at the same time. However, it
+is forbidden for custom mounts to have their source directory inside
+the source directory of another custom mount, so the source
+directories that are auto-created by live-boot does not support
+"nested" mounts like /a and /a/b on the same media. In this case you
+must use the \fBsource\fR option (see below) to make sure that they
+are stored in different source directories.
+.PP
+When a source directory doesn't exist on the persistent media for a
+certain custom mount, it will be created automatically, and
+permissions and ownership will be optimistically set according to
+\fIDIR\fR. It will also be bootstrapped by copying the contents of the
+\fIDIR\fR into its source directory on the persistent media. The
+bootstrapping will not happen when the \fBlinkfiles\fR or \fBunion\fR
+options are used (see below).
+
+.SH OPTIONS
+Custom mounts defined in \fBlive.persist\fR accept the following
+options in a coma-separated list:
+.IP "\fBsource\fR=\fIPATH\fR" 4
+When given, store the persistent changes into \fIPATH\fR on the
+persistent media. \fIPATH\fR must be a relative path (w.r.t. the
+persistent media root) that cannot contain white spaces or the
+special . or .. path components, with the exception that it can be
+just . which means the persistent media root. This option is mostly
+relevant if you want to nest custom mounts, which otherwise would
+cause errors, or if you want to make the whole media root available
+(similar to the now deprecated \fBhome-rw\fR type of persistence).
+.PP
+The following options are mutually exclusive (only the last given one
+will be in effect):
+.IP "\fBbind\fR" 4
+Bind-mount the source directory to \fIDIR\fR. This is the default.
+.IP "\fBlinkfiles\fR" 4
+Create the directory structure of the source directory on the
+persistent media in \fIDIR\fR and create symbolic links from the
+corresponding place in \fIDIR\fR to each file in the source directory.
+Existing files or directories with the same name as any link will be
+overwritten. Note that deleting the links in \fIDIR\fR will only
+remove the link, not the corresponding file in the source; removed
+links will reappear after a reboot. To permanently add or delete a
+file one must do so directly in the source directory.
+.IP
+Effectively \fBlinkfiles\fR will make only files already in the source
+directory persistent, not any other files in \fIDIR\fR. These files
+must be manually added to the source directory to make use of this
+option, and they will appear in \fIDIR\fR in addition to files already
+there. This option is useful when only certain files need to be
+persistent, not the whole directory they're in, e.g. some
+configuration files in a user's home directory.
+.IP "\fBunion\fR" 4
+Save the rw branch of a union on the persistent media, so only the
+changes are stored persistently. This can potentially reduce disk
+usage compared to bind-mounts, and will not hide files added to the
+read-only media. One caveat is that the union will use \fIDIR\fR from
+the image's read-only file system, not the real file system root, so
+files created after boot (e.g. by live-config) will not appear in the
+union. This option will use the union file system specified by
+live-boot's \fBunion\fR boot parameter, but is not supported with
+\fBunion=unionmount\fR.
+
+.SH DIRECTORIES
+.IP "\fB/live/persistent\fR" 4
+All persistent volumes will be mounted here (in a directory
+corresponding to the device name). The \fBlive.persist\fR file can
+easily be edited through this mount, as well as any source directories
+(which is especially practical for custom mounts using the
+\fBlinkfiles\fR option).
+
+.SH EXAMPLES
+
+Let's say we have a persistent volume \fIVOL\fR with the a
+\fBlive.persist\fR file containing the following four lines (numbered
+for ease of reference):
+.TP 7
+1.
+/home/user1 linkfiles,source=config-files/user1
+.TP
+2.
+/home/user2 linkfiles,source=config-files/user2
+.TP
+3.
+/home
+.TP
+4.
+/usr union
+.PP
+The corresponding source directories are:
+.TP 7
+1.
+\fIVOL\fR/config-files/user1 (but it would be \fIVOL\fR/home/user1
+without the \fBsource\fR option)
+.TP
+2.
+\fIVOL\fR/config-files/user2 (but it would be \fIVOL\fR/home/user2
+without the \fBsource\fR option)
+.TP
+3.
+\fIVOL\fR/home
+.TP
+4.
+\fIVOL\fR/usr
+.PP
+It was necessary to set the \fBsource\fR options for 1 and 2, since
+they otherwise would become nested with 3's source, which is illegal.
+.PP
+Line 3 will be taken care of before line 1 and 2 in order to prevent
+custom mounts 1 and 2 from being hidden by 3. When line 3 is handled,
+\fIVOL\fR/home is simply bind-mounted on /home. To illustrate what
+happens for lines 1 and 2, let's say that the following files exist:
+.TP 7
+a.
+\fIVOL\fR/config-files/user1/.emacs
+.TP
+b.
+\fIVOL\fR/config-files/user2/.bashrc
+.TP
+c.
+\fIVOL\fR/config-files/user2/.ssh/config
+.PP
+Then the following links and directories will be created:
+.TP 7
+Link:
+/home/user1/.emacs -> \fIVOL\fR/config-files/user1/.emacs (from a)
+.TP
+Link:
+/home/user2/.bashrc -> \fIVOL\fR/config-files/user2/.bashrc (from b)
+.TP
+Dir:
+/homea/user2/.ssh (from c)
+.TP
+Link:
+/home/user2/.ssh/config -> \fIVOL\fR/config-files/user2/.ssh/config
+(from c)
+.PP
+One could argue, though, that lines 1 and 2 in the example
+\fBlive.persist\fR file above are unnecessary since line 3 already
+would make all of /home persistent. The \fBlinkfiles\fR option is
+intended for situations where you don't want a complete directory to
+be persistent, only certain files in it or its sub-directories.
+.PP
+Line 4 can be mounted at any time since its \fIDIR\fR (and source
+directory) is completely disjoint from all the other custom
+mounts. When mounted, \fIVOL\fR/usr will be the rw branch due to the
+\fBunion\fR option, and will only contain the difference compared to
+the underlying read-only file system. Hence packages could be
+installed into /usr with great space-wise efficiency compared to
+bind-mounts, since in the latter case all of /usr would have to be
+copied into \fIVOL\fR/usr during the initial bootstrap.
+
+.SH SEE ALSO
+\fIlive\-boot\fR(7)
+.PP
+\fIlive\-build\fR(7)
+.PP
+\fIlive\-config\fR(7)
+.PP
+\fIlive\-tools\fR(7)
+
+.SH HOMEPAGE
+More information about live\-boot and the Debian Live project can be
+found on the homepage at <\fIhttp://live.debian.net/\fR> and in the
+manual at <\fIhttp://live.debian.net/manual/\fR>.
+
+.SH BUGS
+Bugs can be reported by submitting a bugreport for the live\-boot
+package in the Debian Bug Tracking System at
+<\fIhttp://bugs.debian.org/\fR> or by writing a mail to the Debian
+Live mailing list at <\fIdebian-live@lists.debian.org\fR>.
+
+.SH AUTHOR
+live\.persist was written by anonym <\fIanonym@lavabit.com\fR> for the
+Debian project.
# German translations for live-boot package
-# Copyright (C) 2006-2010 Daniel Baumann <daniel@debian.org>
+# 2010-2012 Daniel Baumann <daniel@debian.org>
# This file is distributed under the same license as the live-boot package.
#
msgid ""
msgstr ""
-"Project-Id-Version: live-boot 3.0~a22-1\n"
-"POT-Creation-Date: 2012-02-06 23:27+0100\n"
-"PO-Revision-Date: 2010-05-24 12:34+0300\n"
-"Last-Translator: Daniel Baumann <daniel@debian.org>\n"
+"Project-Id-Version: live-boot 3.0~a26\n"
+"POT-Creation-Date: 2012-04-05 08:11+0300\n"
+"PO-Revision-Date: 2012-04-05 08:11+0300\n"
+"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. type: TH
-#: en/live-boot.7:1 en/live-snapshot.1:1
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
#, no-wrap
msgid "LIVE-BOOT"
-msgstr "LIVE-BOOT"
+msgstr ""
#. type: TH
-#: en/live-boot.7:1 en/live-snapshot.1:1
-#, fuzzy, no-wrap
-#| msgid "2011-12-04"
-msgid "2012-02-06"
-msgstr "04.12.2011"
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
+#, no-wrap
+msgid "2012-04-05"
+msgstr ""
#. type: TH
-#: en/live-boot.7:1 en/live-snapshot.1:1
-#, fuzzy, no-wrap
-#| msgid "3.0~a24-1"
-msgid "3.0~a25-1"
-msgstr "3.0~a24-1"
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
+#, no-wrap
+msgid "3.0~a26-1"
+msgstr ""
#. type: TH
-#: en/live-boot.7:1 en/live-snapshot.1:1
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
#, no-wrap
msgid "Debian Live Project"
-msgstr "Debian Live Projekt"
+msgstr ""
#. type: SH
-#: en/live-boot.7:3 en/live-snapshot.1:3
+#: en/live-boot.7:3 en/live-snapshot.1:3 en/live.persist.5:3
#, no-wrap
msgid "NAME"
-msgstr "NAME"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:5
msgid "B<live-boot> - System Boot Scripts"
-msgstr "B<live-boot> - System Boot Skripte"
+msgstr ""
#. type: SH
-#: en/live-boot.7:6 en/live-snapshot.1:17
+#: en/live-boot.7:6 en/live-snapshot.1:17 en/live.persist.5:7
#, no-wrap
msgid "DESCRIPTION"
-msgstr "BESCHREIBUNG"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:8
"B<live-boot> contains the scripts that configure a Debian Live system during "
"the boot process (early userspace)."
msgstr ""
-"B<live-config> enthaelt die Skripte welche ein Debian Live System waehrend "
-"des Startvorganes (early userspace) konfigurieren."
#. FIXME
#. type: Plain text
#: en/live-boot.7:15
#, no-wrap
msgid "CONFIGURATION"
-msgstr "KONFIGURATION"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:17
"B<live-boot> can be configured through a boot parameter or a configuration "
"file."
msgstr ""
-"B<live-boot> kann durch Boot Parameter oder durch Konfigurationsdateien "
-"konfiguriert werden."
#. type: Plain text
#: en/live-boot.7:19
#: en/live-boot.7:20
#, no-wrap
msgid "Kernel Parameters"
-msgstr "Kernel Parameter"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:22
msgid ""
"B<live-boot> is only activated if 'boot=live' was used as a kernel parameter."
msgstr ""
-"B<live-boot> ist nur dann aktiv, wenn 'boot=live' als Kernel Parameter "
-"benutzt wird."
#. type: Plain text
#: en/live-boot.7:24
#: en/live-boot.7:25
#, no-wrap
msgid "Configuration Files"
-msgstr "Konfigurationsdateien"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:27
msgstr ""
#. type: SH
-#: en/live-boot.7:28 en/live-snapshot.1:20
+#: en/live-boot.7:28 en/live-snapshot.1:20 en/live.persist.5:57
#, no-wrap
msgid "OPTIONS"
-msgstr "OPTIONEN"
+msgstr ""
#. FIXME
#. type: Plain text
#: en/live-boot.7:31
#, no-wrap
msgid "B<access>=I<ACCESS>"
-msgstr "B<access>=I<ACCESS>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:33
#: en/live-boot.7:33
#, no-wrap
msgid "B<console>=I<TTY,SPEED>"
-msgstr "B<console>=I<TTY,SPEED>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:35
#: en/live-boot.7:35
#, no-wrap
msgid "B<debug>"
-msgstr "B<debug>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:37
#: en/live-boot.7:41
#, no-wrap
msgid "B<fetch>=I<URL>"
-msgstr "B<fetch>=I<URL>"
+msgstr ""
#. type: IP
#: en/live-boot.7:42
#, no-wrap
msgid "B<httpfs>=I<URL>"
-msgstr "B<httpfs>=I<URL>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:50
#: en/live-boot.7:71
#, no-wrap
msgid "B<ignore_uuid>"
-msgstr "B<ignore_uuid>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:73
#: en/live-boot.7:73
#, no-wrap
msgid "B<integrity-check>"
-msgstr "B<integrity-check>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:75
#: en/live-boot.7:77
#, no-wrap
msgid "B<ip>=[I<frommedia>]"
-msgstr "B<ip>=[I<frommedia>]"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:79
#: en/live-boot.7:79
#, no-wrap
msgid "{B<live-media>|B<bootfrom>}=I<DEVICE>"
-msgstr "{B<live-media>|B<bootfrom>}=I<DEVICE>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:81
#: en/live-boot.7:83
#, no-wrap
msgid "{B<live-media-encryption>|B<encryption>}=I<TYPE>"
-msgstr "{B<live-media-encryption>|B<encryption>}=I<TYPE>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:85
#: en/live-boot.7:85
#, no-wrap
msgid "B<live-media-offset>=I<BYTES>"
-msgstr "B<live-media-offset>=I<BYTES>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:87
#: en/live-boot.7:87
#, no-wrap
msgid "B<live-media-path>=I<PATH>"
-msgstr "B<live-media-path>=I<PATH>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:89
#: en/live-boot.7:89
#, no-wrap
msgid "B<live-media-timeout>=I<SECONDS>"
-msgstr "B<live-media-timeout>=I<SECONDS>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:91
#: en/live-boot.7:91
#, no-wrap
msgid "B<module>=I<NAME>"
-msgstr "B<module>=I<NAME>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:93
#: en/live-boot.7:93
#, no-wrap
msgid "B<netboot>[=nfs|cifs]"
-msgstr "B<netboot>[=nfs|cifs]"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:95
#: en/live-boot.7:95
#, no-wrap
msgid "B<nfsopts>="
-msgstr "B<nfsopts>="
+msgstr ""
#. type: Plain text
#: en/live-boot.7:97
#: en/live-boot.7:97
#, no-wrap
msgid "B<nofastboot>"
-msgstr "B<nofastboot>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:99
#: en/live-boot.7:99
#, no-wrap
msgid "B<nopersistent>"
-msgstr "B<nopersistent>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:101
#: en/live-boot.7:101
#, no-wrap
msgid "B<noprompt>"
-msgstr "B<noprompt>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:103
#: en/live-boot.7:103
#, no-wrap
msgid "B<noprompt>=I<TYPE>"
-msgstr "B<noprompt>=I<TYPE>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:105
#: en/live-boot.7:107
#, no-wrap
msgid "B<swapon>"
-msgstr "B<swapon>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:109
#: en/live-boot.7:109
#, no-wrap
msgid "B<persistent>"
-msgstr "B<persistent>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:111
msgid ""
-"live-boot will probe filesystems for persistent media. These can either be "
-"the filesystems themselves, if labeled correctly, or image/archive files, if "
-"named correctly. Overlays are labeled/named either \"live-rw\" or \"home-rw"
-"\" and will be mounted on / or /home, respectively; snapshots are labeled/"
+"live-boot will probe devices for persistent media. These can be partitions "
+"(with the correct GPT name), filesystems (with the correct label) or image/"
+"archive files (with the correct file name). Overlays are labeled/named "
+"either \"full-ov\", which will be mounted on /, or \"custom-ov\", which can "
+"be completely customized (see I<live.persist>(5)); snapshots are labeled/"
"named either \"live-sn\" or \"home-sn\" and will be extracted into / or /"
-"home, respectively (see live-snapshot(1) for more information). Overlays are "
-"mounted before snapshots are extracted, and for both overlays and snapshots, "
-"\"live-*\" are handled before \"home-*\". Overlay image files and snapshot "
-"archive files have extensions which determines their filesystem or archive "
-"type, e.g. \"live-rw.ext3\" and \"\\home-sn.squashfs\"."
+"home, respectively (see I<live-snapshot>(1) for more information). The order "
+"these are handled are: full-ov, custom-ov, live-sn, home-sn. Overlay image "
+"files and snapshot archive files have extensions which determines their "
+"filesystem or archive type, e.g. \"custom-ov.ext3\" and \"\\home-sn.squashfs"
+"\"."
msgstr ""
#. type: IP
#: en/live-boot.7:117
#, no-wrap
msgid "B<persistent-path>=I<PATH>"
-msgstr "B<persistent-path>=I<PATH>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:119
#: en/live-boot.7:119
#, no-wrap
msgid "B<persistent-read-only>"
-msgstr "B<persistent-read-only>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:121
#: en/live-boot.7:123
#, no-wrap
msgid "B<persistent-subtext>=I<SUFFIX>"
-msgstr "B<persistent-subtext>=I<SUFFIX>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:125
#: en/live-boot.7:125
#, no-wrap
msgid "{B<preseed/file>|B<file>}=I<FILE>"
-msgstr "{B<preseed/file>|B<file>}=I<FILE>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:127
#: en/live-boot.7:127
#, no-wrap
msgid "B<package/question>=I<VALUE>"
-msgstr "B<package/question>=I<VALUE>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:129
#: en/live-boot.7:129
#, no-wrap
msgid "B<quickreboot>"
-msgstr "B<quickreboot>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:131
#: en/live-boot.7:131
#, no-wrap
msgid "B<showmounts>"
-msgstr "B<showmounts>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:133
#: en/live-boot.7:133
#, no-wrap
msgid "B<silent>"
-msgstr "B<silent>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:135
#: en/live-boot.7:135
#, no-wrap
msgid "B<todisk>=I<DEVICE>"
-msgstr "B<todisk>=I<DEVICE>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:137
#: en/live-boot.7:137
#, no-wrap
msgid "B<toram>"
-msgstr "B<toram>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:139
#: en/live-boot.7:139
#, no-wrap
msgid "B<union>=aufs|unionfs"
-msgstr "B<union>=aufs|unionfs"
+msgstr ""
#. FIXME
#. type: Plain text
#: en/live-boot.7:145 en/live-snapshot.1:43
#, no-wrap
msgid "B</etc/live.conf>"
-msgstr "B</etc/live.conf>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:147 en/live-snapshot.1:45
#: en/live-boot.7:147 en/live-snapshot.1:45
#, no-wrap
msgid "B<live/filesystem.module>"
-msgstr "B<live/filesystem.module>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:149 en/live-snapshot.1:47
#: en/live-boot.7:149 en/live-snapshot.1:47
#, no-wrap
msgid "B</etc/live-persistence.binds>"
-msgstr "B</etc/live-persistence.binds>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:151 en/live-snapshot.1:49
#: en/live-boot.7:155 en/live-snapshot.1:42
#, no-wrap
msgid "FILES"
-msgstr "DATEIEN"
+msgstr ""
#. type: IP
#: en/live-boot.7:156
#, no-wrap
msgid "B</etc/live/boot.conf>"
-msgstr "B</etc/live/boot.conf>"
+msgstr ""
#. type: IP
#: en/live-boot.7:157
#, no-wrap
msgid "B</etc/live/boot.d/>"
-msgstr "B</etc/live/boot.d/>"
+msgstr ""
#. type: IP
#: en/live-boot.7:158
#, no-wrap
msgid "B<live/boot.conf>"
-msgstr "B<live/boot.conf>"
+msgstr ""
#. type: IP
#: en/live-boot.7:159
#, no-wrap
msgid "B<live/boot.d/>"
-msgstr "B<live/boot.d/>"
+msgstr ""
+
+#. type: IP
+#: en/live-boot.7:160
+#, no-wrap
+msgid "B<live.persist>"
+msgstr ""
#. type: SH
-#: en/live-boot.7:161 en/live-snapshot.1:54
+#: en/live-boot.7:162 en/live-snapshot.1:54 en/live.persist.5:191
#, no-wrap
msgid "SEE ALSO"
-msgstr "SIEHE AUCH"
+msgstr ""
#. type: Plain text
-#: en/live-boot.7:163
+#: en/live-boot.7:164
msgid "I<live-snapshot>(1)"
-msgstr "I<live-snapshot>(1)"
+msgstr ""
#. type: Plain text
-#: en/live-boot.7:165 en/live-snapshot.1:58
+#: en/live-boot.7:166
+msgid "I<live.persist>(5)"
+msgstr ""
+
+#. type: Plain text
+#: en/live-boot.7:168 en/live-snapshot.1:58 en/live.persist.5:195
msgid "I<live-build>(7)"
-msgstr "I<live-build>(7)"
+msgstr ""
#. type: Plain text
-#: en/live-boot.7:167 en/live-snapshot.1:60
+#: en/live-boot.7:170 en/live-snapshot.1:60 en/live.persist.5:197
msgid "I<live-config>(7)"
-msgstr "I<live-config>(7)"
+msgstr ""
#. type: Plain text
-#: en/live-boot.7:169 en/live-snapshot.1:62
+#: en/live-boot.7:172 en/live-snapshot.1:62 en/live.persist.5:199
msgid "I<live-tools>(7)"
-msgstr "I<live-tools>(7)"
+msgstr ""
#. type: SH
-#: en/live-boot.7:170 en/live-snapshot.1:63
+#: en/live-boot.7:173 en/live-snapshot.1:63 en/live.persist.5:200
#, no-wrap
msgid "HOMEPAGE"
-msgstr "HOMEPAGE"
+msgstr ""
#. type: Plain text
-#: en/live-boot.7:172 en/live-snapshot.1:65
+#: en/live-boot.7:175 en/live-snapshot.1:65 en/live.persist.5:204
msgid ""
"More information about live-boot and the Debian Live project can be found on "
"the homepage at E<lt>I<http://live.debian.net/>E<gt> and in the manual at "
"E<lt>I<http://live.debian.net/manual/>E<gt>."
msgstr ""
-"Weitere Informationen ueber live-boot und das Debian Live Projekt koennen "
-"auf der Homepage unter E<lt>I<http://live.debian.net/>E<gt> und im Handbuch "
-"unter E<lt>I<http://live.debian.net/manual/>E<gt> gefunden werden."
#. type: SH
-#: en/live-boot.7:173 en/live-snapshot.1:66
+#: en/live-boot.7:176 en/live-snapshot.1:66 en/live.persist.5:205
#, no-wrap
msgid "BUGS"
-msgstr "FEHLER"
+msgstr ""
#. type: Plain text
-#: en/live-boot.7:175 en/live-snapshot.1:68
+#: en/live-boot.7:178 en/live-snapshot.1:68 en/live.persist.5:210
msgid ""
"Bugs can be reported by submitting a bugreport for the live-boot package in "
"the Debian Bug Tracking System at E<lt>I<http://bugs.debian.org/>E<gt> or by "
"writing a mail to the Debian Live mailing list at E<lt>I<debian-live@lists."
"debian.org>E<gt>."
msgstr ""
-"Fehler koennen durch Einreichen eines Fehlerberichtes fuer das live-boot "
-"Paket im Debian Bug Tracking System unter E<lt>I<http://bugs.debian.org/"
-">E<gt> oder durch Senden einer E-Mail an die Debian Live Mailing Liste unter "
-"E<lt>I<debian-live@lists.debian.org>E<gt> (englischsprachig) mitgeteilt "
-"werden."
#. type: SH
-#: en/live-boot.7:176 en/live-snapshot.1:69
+#: en/live-boot.7:179 en/live-snapshot.1:69 en/live.persist.5:211
#, no-wrap
msgid "AUTHOR"
-msgstr "AUTOR"
+msgstr ""
#. type: Plain text
-#: en/live-boot.7:177 en/live-snapshot.1:70
+#: en/live-boot.7:180 en/live-snapshot.1:70
msgid ""
"live-boot was written by Daniel Baumann E<lt>I<daniel@debian.org>E<gt> for "
"the Debian project."
msgstr ""
-"live-boot wurde von Daniel Baumann E<lt>I<daniel@debian.org>E<gt> fuer das "
-"Debian Projekt geschrieben."
# German translations for live-boot package
-# Copyright (C) 2006-2010 Daniel Baumann <daniel@debian.org>
+# 2010-2012 Daniel Baumann <daniel@debian.org>
# This file is distributed under the same license as the live-boot package.
#
msgid ""
msgstr ""
-"Project-Id-Version: live-boot 3.0~a22-1\n"
-"POT-Creation-Date: 2012-02-06 23:27+0100\n"
-"PO-Revision-Date: 2010-05-24 12:34+0300\n"
-"Last-Translator: Daniel Baumann <daniel@debian.org>\n"
+"Project-Id-Version: live-boot 3.0~a26-1\n"
+"POT-Creation-Date: 2012-04-05 08:11+0300\n"
+"PO-Revision-Date: 2012-04-05 08:11+0300\n"
+"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. type: TH
-#: en/live-boot.7:1 en/live-snapshot.1:1
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
#, no-wrap
msgid "LIVE-BOOT"
-msgstr "LIVE-BOOT"
+msgstr ""
#. type: TH
-#: en/live-boot.7:1 en/live-snapshot.1:1
-#, fuzzy, no-wrap
-#| msgid "2011-12-04"
-msgid "2012-02-06"
-msgstr "04.12.2011"
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
+#, no-wrap
+msgid "2012-04-05"
+msgstr ""
#. type: TH
-#: en/live-boot.7:1 en/live-snapshot.1:1
-#, fuzzy, no-wrap
-#| msgid "3.0~a24-1"
-msgid "3.0~a25-1"
-msgstr "3.0~a24-1"
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
+#, no-wrap
+msgid "3.0~a26-1"
+msgstr ""
#. type: TH
-#: en/live-boot.7:1 en/live-snapshot.1:1
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
#, no-wrap
msgid "Debian Live Project"
-msgstr "Debian Live Projekt"
+msgstr ""
#. type: SH
-#: en/live-boot.7:3 en/live-snapshot.1:3
+#: en/live-boot.7:3 en/live-snapshot.1:3 en/live.persist.5:3
#, no-wrap
msgid "NAME"
-msgstr "NAME"
+msgstr ""
#. type: SH
-#: en/live-boot.7:6 en/live-snapshot.1:17
+#: en/live-boot.7:6 en/live-snapshot.1:17 en/live.persist.5:7
#, no-wrap
msgid "DESCRIPTION"
-msgstr "BESCHREIBUNG"
+msgstr ""
#. type: SH
-#: en/live-boot.7:28 en/live-snapshot.1:20
+#: en/live-boot.7:28 en/live-snapshot.1:20 en/live.persist.5:57
#, no-wrap
msgid "OPTIONS"
-msgstr "OPTIONEN"
+msgstr ""
#. type: IP
#: en/live-boot.7:145 en/live-snapshot.1:43
#, no-wrap
msgid "B</etc/live.conf>"
-msgstr "B</etc/live.conf>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:147 en/live-snapshot.1:45
#: en/live-boot.7:147 en/live-snapshot.1:45
#, no-wrap
msgid "B<live/filesystem.module>"
-msgstr "B<live/filesystem.module>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:149 en/live-snapshot.1:47
#: en/live-boot.7:149 en/live-snapshot.1:47
#, no-wrap
msgid "B</etc/live-persistence.binds>"
-msgstr "B</etc/live-persistence.binds>"
+msgstr ""
#. type: Plain text
#: en/live-boot.7:151 en/live-snapshot.1:49
#: en/live-boot.7:155 en/live-snapshot.1:42
#, no-wrap
msgid "FILES"
-msgstr "DATEIEN"
+msgstr ""
#. type: SH
-#: en/live-boot.7:161 en/live-snapshot.1:54
+#: en/live-boot.7:162 en/live-snapshot.1:54 en/live.persist.5:191
#, no-wrap
msgid "SEE ALSO"
-msgstr "SIEHE AUCH"
+msgstr ""
#. type: Plain text
-#: en/live-boot.7:165 en/live-snapshot.1:58
+#: en/live-boot.7:168 en/live-snapshot.1:58 en/live.persist.5:195
msgid "I<live-build>(7)"
-msgstr "I<live-build>(7)"
+msgstr ""
#. type: Plain text
-#: en/live-boot.7:167 en/live-snapshot.1:60
+#: en/live-boot.7:170 en/live-snapshot.1:60 en/live.persist.5:197
msgid "I<live-config>(7)"
-msgstr "I<live-config>(7)"
+msgstr ""
#. type: Plain text
-#: en/live-boot.7:169 en/live-snapshot.1:62
+#: en/live-boot.7:172 en/live-snapshot.1:62 en/live.persist.5:199
msgid "I<live-tools>(7)"
-msgstr "I<live-tools>(7)"
+msgstr ""
#. type: SH
-#: en/live-boot.7:170 en/live-snapshot.1:63
+#: en/live-boot.7:173 en/live-snapshot.1:63 en/live.persist.5:200
#, no-wrap
msgid "HOMEPAGE"
-msgstr "HOMEPAGE"
+msgstr ""
#. type: Plain text
-#: en/live-boot.7:172 en/live-snapshot.1:65
+#: en/live-boot.7:175 en/live-snapshot.1:65 en/live.persist.5:204
msgid ""
"More information about live-boot and the Debian Live project can be found on "
"the homepage at E<lt>I<http://live.debian.net/>E<gt> and in the manual at "
"E<lt>I<http://live.debian.net/manual/>E<gt>."
msgstr ""
-"Weitere Informationen ueber live-boot und das Debian Live Projekt koennen "
-"auf der Homepage unter E<lt>I<http://live.debian.net/>E<gt> und im Handbuch "
-"unter E<lt>I<http://live.debian.net/manual/>E<gt> gefunden werden."
#. type: SH
-#: en/live-boot.7:173 en/live-snapshot.1:66
+#: en/live-boot.7:176 en/live-snapshot.1:66 en/live.persist.5:205
#, no-wrap
msgid "BUGS"
-msgstr "FEHLER"
+msgstr ""
#. type: Plain text
-#: en/live-boot.7:175 en/live-snapshot.1:68
+#: en/live-boot.7:178 en/live-snapshot.1:68 en/live.persist.5:210
msgid ""
"Bugs can be reported by submitting a bugreport for the live-boot package in "
"the Debian Bug Tracking System at E<lt>I<http://bugs.debian.org/>E<gt> or by "
"writing a mail to the Debian Live mailing list at E<lt>I<debian-live@lists."
"debian.org>E<gt>."
msgstr ""
-"Fehler koennen durch Einreichen eines Fehlerberichtes fuer das live-boot "
-"Paket im Debian Bug Tracking System unter E<lt>I<http://bugs.debian.org/"
-">E<gt> oder durch Senden einer E-Mail an die Debian Live Mailing Liste unter "
-"E<lt>I<debian-live@lists.debian.org>E<gt> (englischsprachig) mitgeteilt "
-"werden."
#. type: SH
-#: en/live-boot.7:176 en/live-snapshot.1:69
+#: en/live-boot.7:179 en/live-snapshot.1:69 en/live.persist.5:211
#, no-wrap
msgid "AUTHOR"
-msgstr "AUTOR"
+msgstr ""
#. type: Plain text
-#: en/live-boot.7:177 en/live-snapshot.1:70
+#: en/live-boot.7:180 en/live-snapshot.1:70
msgid ""
"live-boot was written by Daniel Baumann E<lt>I<daniel@debian.org>E<gt> for "
"the Debian project."
msgstr ""
-"live-boot wurde von Daniel Baumann E<lt>I<daniel@debian.org>E<gt> fuer das "
-"Debian Projekt geschrieben."
#. type: Plain text
#: en/live-snapshot.1:5
#: en/live-snapshot.1:6
#, no-wrap
msgid "SYNOPSIS"
-msgstr "SYNTAX"
+msgstr ""
#. type: Plain text
#: en/live-snapshot.1:8
"B<live-snapshot> [-c|--cow I<DIRECTORY] [-d|--device DEVICE>] [-e|--exclude-"
"list I<FILE>] [-o|--output I<FILE>] [-t|--type I<TYPE>]"
msgstr ""
-"B<live-snapshot> [-c|--cow I<DIRECTORY] [-d|--device DEVICE>] [-e|--exclude-"
-"list I<FILE>] [-o|--output I<FILE>] [-t|--type I<TYPE>]"
#. type: Plain text
#: en/live-snapshot.1:10
msgid "B<live-snapshot> [-r|--resync-string STRING]"
-msgstr "B<live-snapshot> [-r|--resync-string STRING]"
+msgstr ""
#. type: Plain text
#: en/live-snapshot.1:12
msgid "B<live-snapshot> [-h|--help]"
-msgstr "B<live-snapshot> [-h|--help]"
+msgstr ""
#. type: Plain text
#: en/live-snapshot.1:14
msgid "B<live-snapshot> [-u|--usage]"
-msgstr "B<live-snapshot> [-u|--usage]"
+msgstr ""
#. type: Plain text
#: en/live-snapshot.1:16
msgid "B<live-snapshot> [-v|--version]"
-msgstr "B<live-snapshot> [-v|--version]"
+msgstr ""
#. type: Plain text
#: en/live-snapshot.1:19
#: en/live-snapshot.1:21
#, no-wrap
msgid "-c, --cow I<DIRECTORY>"
-msgstr "-c, --cow I<DIRECTORY>"
+msgstr ""
#. type: Plain text
#: en/live-snapshot.1:23
#: en/live-snapshot.1:23
#, no-wrap
msgid "-d, --device I<DEVICE>"
-msgstr "-d, --device I<DEVICE>"
+msgstr ""
#. type: Plain text
#: en/live-snapshot.1:25
#: en/live-snapshot.1:25
#, no-wrap
msgid "-e, --exclude-list I<FILE>"
-msgstr "-e, --exclude-list I<FILE>"
+msgstr ""
#. type: Plain text
#: en/live-snapshot.1:27
#: en/live-snapshot.1:27
#, no-wrap
msgid "-o, --output I<FILE>"
-msgstr "-o, --output I<FILE>"
+msgstr ""
#. type: Plain text
#: en/live-snapshot.1:29
#: en/live-snapshot.1:29
#, no-wrap
msgid "-r, --resync-string I<STRING>"
-msgstr "-r, --resync-string I<STRING>"
+msgstr ""
#. type: Plain text
#: en/live-snapshot.1:31
#: en/live-snapshot.1:31
#, no-wrap
msgid "-f, --refresh"
-msgstr "-f, --refresh"
+msgstr ""
#. type: Plain text
#: en/live-snapshot.1:33
#: en/live-snapshot.1:33
#, no-wrap
msgid "-t, --type I<TYPE>"
-msgstr "-t, --type I<TYPE>"
+msgstr ""
#. type: Plain text
#: en/live-snapshot.1:35
#: en/live-snapshot.1:35
#, no-wrap
msgid "-h, --help"
-msgstr "-h, --help"
+msgstr ""
#. type: Plain text
#: en/live-snapshot.1:37
#: en/live-snapshot.1:37
#, no-wrap
msgid "-u, --usage"
-msgstr "-u, --usage"
+msgstr ""
#. type: Plain text
#: en/live-snapshot.1:39
#: en/live-snapshot.1:39
#, no-wrap
msgid "-v, --version"
-msgstr "-v, --version"
+msgstr ""
#. type: Plain text
#: en/live-snapshot.1:41
#: en/live-snapshot.1:51
#, no-wrap
msgid "B</etc/live-snapshot.list>"
-msgstr "B</etc/live-snapshot.list>"
+msgstr ""
#. type: Plain text
#: en/live-snapshot.1:53
#. type: Plain text
#: en/live-snapshot.1:56
msgid "I<live-boot>(1)"
-msgstr "I<live-boot>(1)"
+msgstr ""
--- /dev/null
+# German translations for live-boot package
+# 2010-2012 Daniel Baumann <daniel@debian.org>
+# This file is distributed under the same license as the live-boot package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: live-boot 3.0~a26-1\n"
+"POT-Creation-Date: 2012-04-05 08:11+0300\n"
+"PO-Revision-Date: 2012-04-05 08:11+0300\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ASCII\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. type: TH
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
+#, no-wrap
+msgid "LIVE-BOOT"
+msgstr ""
+
+#. type: TH
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
+#, no-wrap
+msgid "2012-04-05"
+msgstr ""
+
+#. type: TH
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
+#, no-wrap
+msgid "3.0~a26-1"
+msgstr ""
+
+#. type: TH
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
+#, no-wrap
+msgid "Debian Live Project"
+msgstr ""
+
+#. type: SH
+#: en/live-boot.7:3 en/live-snapshot.1:3 en/live.persist.5:3
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: SH
+#: en/live-boot.7:6 en/live-snapshot.1:17 en/live.persist.5:7
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr ""
+
+#. type: SH
+#: en/live-boot.7:28 en/live-snapshot.1:20 en/live.persist.5:57
+#, no-wrap
+msgid "OPTIONS"
+msgstr ""
+
+#. type: SH
+#: en/live-boot.7:162 en/live-snapshot.1:54 en/live.persist.5:191
+#, no-wrap
+msgid "SEE ALSO"
+msgstr ""
+
+#. type: Plain text
+#: en/live-boot.7:168 en/live-snapshot.1:58 en/live.persist.5:195
+msgid "I<live-build>(7)"
+msgstr ""
+
+#. type: Plain text
+#: en/live-boot.7:170 en/live-snapshot.1:60 en/live.persist.5:197
+msgid "I<live-config>(7)"
+msgstr ""
+
+#. type: Plain text
+#: en/live-boot.7:172 en/live-snapshot.1:62 en/live.persist.5:199
+msgid "I<live-tools>(7)"
+msgstr ""
+
+#. type: SH
+#: en/live-boot.7:173 en/live-snapshot.1:63 en/live.persist.5:200
+#, no-wrap
+msgid "HOMEPAGE"
+msgstr ""
+
+#. type: Plain text
+#: en/live-boot.7:175 en/live-snapshot.1:65 en/live.persist.5:204
+msgid ""
+"More information about live-boot and the Debian Live project can be found on "
+"the homepage at E<lt>I<http://live.debian.net/>E<gt> and in the manual at "
+"E<lt>I<http://live.debian.net/manual/>E<gt>."
+msgstr ""
+
+#. type: SH
+#: en/live-boot.7:176 en/live-snapshot.1:66 en/live.persist.5:205
+#, no-wrap
+msgid "BUGS"
+msgstr ""
+
+#. type: Plain text
+#: en/live-boot.7:178 en/live-snapshot.1:68 en/live.persist.5:210
+msgid ""
+"Bugs can be reported by submitting a bugreport for the live-boot package in "
+"the Debian Bug Tracking System at E<lt>I<http://bugs.debian.org/>E<gt> or by "
+"writing a mail to the Debian Live mailing list at E<lt>I<debian-live@lists."
+"debian.org>E<gt>."
+msgstr ""
+
+#. type: SH
+#: en/live-boot.7:179 en/live-snapshot.1:69 en/live.persist.5:211
+#, no-wrap
+msgid "AUTHOR"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:6
+msgid "B<live.persist> - Configuration file for persistent media in live-boot"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:13
+msgid ""
+"If live-boot probes a persistent volume with the label (or GPT name, or file "
+"name, but from now on we will just say \"label\") \"custom-ov\", that "
+"volume's persistence is fully customizable through the B<live.persist> file "
+"stored on the root of its file system. Any such labeled volume must have "
+"such a file, or it will be ignored."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:17
+msgid ""
+"The format of B<live.persist> allow empty lines and lines starting with a \"#"
+"\" (used for comments), both which will be ignored. A so called \"custom "
+"mount\" has the format:"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:20
+msgid "I<DIR> [I<OPTION>]..."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:24
+msgid ""
+"which roughly translates to \"make I<DIR> persistent in the way described by "
+"the list of I<OPTION>s\"."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:35
+msgid ""
+"For each custom mount I<DIR> must be an absolute path that cannot contain "
+"white spaces or the special . and .. path components, and cannot be /live "
+"(or any of its sub-directories), or / (for the latter, use \"full-ov\" "
+"persistence instead). Once activated all changes (file deletion, creation "
+"and modification) to I<DIR> on the live file system are stored persistently "
+"into a path equivalent to I<DIR> on the persistent media, called the source "
+"directory. The default way to achieve persistence is to simply bind-mount "
+"the corresponding source directory to I<DIR>, but this can be changed "
+"through the use of I<OPTION>s."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:48
+msgid ""
+"All custom mounts will be done in an order so that no two custom mounts can "
+"\"hide\" each other. For instance, if we have the two I<DIR>:s /a and /a/b "
+"it would always be the case that /a is mounted first, then /a/b. This "
+"remains true no matter how the lines in B<live.persist> are ordered, or if "
+"several B<live.persist> files on different persistent media are used at the "
+"same time. However, it is forbidden for custom mounts to have their source "
+"directory inside the source directory of another custom mount, so the source "
+"directories that are auto-created by live-boot does not support \"nested\" "
+"mounts like /a and /a/b on the same media. In this case you must use the "
+"B<source> option (see below) to make sure that they are stored in different "
+"source directories."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:56
+msgid ""
+"When a source directory doesn't exist on the persistent media for a certain "
+"custom mount, it will be created automatically, and permissions and "
+"ownership will be optimistically set according to I<DIR>. It will also be "
+"bootstrapped by copying the contents of the I<DIR> into its source directory "
+"on the persistent media. The bootstrapping will not happen when the "
+"B<linkfiles> or B<union> options are used (see below)."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:60
+msgid ""
+"Custom mounts defined in B<live.persist> accept the following options in a "
+"coma-separated list:"
+msgstr ""
+
+#. type: IP
+#: en/live.persist.5:60
+#, no-wrap
+msgid "B<source>=I<PATH>"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:69
+msgid ""
+"When given, store the persistent changes into I<PATH> on the persistent "
+"media. I<PATH> must be a relative path (w.r.t. the persistent media root) "
+"that cannot contain white spaces or the special . or .. path components, "
+"with the exception that it can be just . which means the persistent media "
+"root. This option is mostly relevant if you want to nest custom mounts, "
+"which otherwise would cause errors, or if you want to make the whole media "
+"root available (similar to the now deprecated B<home-rw> type of "
+"persistence)."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:72
+msgid ""
+"The following options are mutually exclusive (only the last given one will "
+"be in effect):"
+msgstr ""
+
+#. type: IP
+#: en/live.persist.5:72
+#, no-wrap
+msgid "B<bind>"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:74
+msgid "Bind-mount the source directory to I<DIR>. This is the default."
+msgstr ""
+
+#. type: IP
+#: en/live.persist.5:74
+#, no-wrap
+msgid "B<linkfiles>"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:83
+msgid ""
+"Create the directory structure of the source directory on the persistent "
+"media in I<DIR> and create symbolic links from the corresponding place in "
+"I<DIR> to each file in the source directory. Existing files or directories "
+"with the same name as any link will be overwritten. Note that deleting the "
+"links in I<DIR> will only remove the link, not the corresponding file in the "
+"source; removed links will reappear after a reboot. To permanently add or "
+"delete a file one must do so directly in the source directory."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:91
+msgid ""
+"Effectively B<linkfiles> will make only files already in the source "
+"directory persistent, not any other files in I<DIR>. These files must be "
+"manually added to the source directory to make use of this option, and they "
+"will appear in I<DIR> in addition to files already there. This option is "
+"useful when only certain files need to be persistent, not the whole "
+"directory they're in, e.g. some configuration files in a user's home "
+"directory."
+msgstr ""
+
+#. type: IP
+#: en/live.persist.5:91
+#, no-wrap
+msgid "B<union>"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:101
+msgid ""
+"Save the rw branch of a union on the persistent media, so only the changes "
+"are stored persistently. This can potentially reduce disk usage compared to "
+"bind-mounts, and will not hide files added to the read-only media. One "
+"caveat is that the union will use I<DIR> from the image's read-only file "
+"system, not the real file system root, so files created after boot (e.g. by "
+"live-config) will not appear in the union. This option will use the union "
+"file system specified by live-boot's B<union> boot parameter, but is not "
+"supported with B<union=unionmount>."
+msgstr ""
+
+#. type: SH
+#: en/live.persist.5:102
+#, no-wrap
+msgid "DIRECTORIES"
+msgstr ""
+
+#. type: IP
+#: en/live.persist.5:103
+#, no-wrap
+msgid "B</live/persistent>"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:109
+msgid ""
+"All persistent volumes will be mounted here (in a directory corresponding to "
+"the device name). The B<live.persist> file can easily be edited through this "
+"mount, as well as any source directories (which is especially practical for "
+"custom mounts using the B<linkfiles> option)."
+msgstr ""
+
+#. type: SH
+#: en/live.persist.5:110
+#, no-wrap
+msgid "EXAMPLES"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:115
+msgid ""
+"Let's say we have a persistent volume I<VOL> with the a B<live.persist> file "
+"containing the following four lines (numbered for ease of reference):"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:115 en/live.persist.5:129
+#, no-wrap
+msgid "1."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:118
+msgid "/home/user1 linkfiles,source=config-files/user1"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:118 en/live.persist.5:133
+#, no-wrap
+msgid "2."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:121
+msgid "/home/user2 linkfiles,source=config-files/user2"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:121 en/live.persist.5:137
+#, no-wrap
+msgid "3."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:124
+msgid "/home"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:124 en/live.persist.5:140
+#, no-wrap
+msgid "4."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:127
+msgid "/usr union"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:129
+msgid "The corresponding source directories are:"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:133
+msgid ""
+"I<VOL>/config-files/user1 (but it would be I<VOL>/home/user1 without the "
+"B<source> option)"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:137
+msgid ""
+"I<VOL>/config-files/user2 (but it would be I<VOL>/home/user2 without the "
+"B<source> option)"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:140
+msgid "I<VOL>/home"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:143
+msgid "I<VOL>/usr"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:146
+msgid ""
+"It was necessary to set the B<source> options for 1 and 2, since they "
+"otherwise would become nested with 3's source, which is illegal."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:151
+msgid ""
+"Line 3 will be taken care of before line 1 and 2 in order to prevent custom "
+"mounts 1 and 2 from being hidden by 3. When line 3 is handled, I<VOL>/home "
+"is simply bind-mounted on /home. To illustrate what happens for lines 1 and "
+"2, let's say that the following files exist:"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:151
+#, no-wrap
+msgid "a."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:154
+msgid "I<VOL>/config-files/user1/.emacs"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:154
+#, no-wrap
+msgid "b."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:157
+msgid "I<VOL>/config-files/user2/.bashrc"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:157
+#, no-wrap
+msgid "c."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:160
+msgid "I<VOL>/config-files/user2/.ssh/config"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:162
+msgid "Then the following links and directories will be created:"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:162 en/live.persist.5:165 en/live.persist.5:171
+#, no-wrap
+msgid "Link:"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:165
+msgid "/home/user1/.emacs -E<gt> I<VOL>/config-files/user1/.emacs (from a)"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:168
+msgid "/home/user2/.bashrc -E<gt> I<VOL>/config-files/user2/.bashrc (from b)"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:168
+#, no-wrap
+msgid "Dir:"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:171
+msgid "/homea/user2/.ssh (from c)"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:175
+msgid ""
+"/home/user2/.ssh/config -E<gt> I<VOL>/config-files/user2/.ssh/config (from c)"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:181
+msgid ""
+"One could argue, though, that lines 1 and 2 in the example B<live.persist> "
+"file above are unnecessary since line 3 already would make all of /home "
+"persistent. The B<linkfiles> option is intended for situations where you "
+"don't want a complete directory to be persistent, only certain files in it "
+"or its sub-directories."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:190
+msgid ""
+"Line 4 can be mounted at any time since its I<DIR> (and source directory) is "
+"completely disjoint from all the other custom mounts. When mounted, I<VOL>/"
+"usr will be the rw branch due to the B<union> option, and will only contain "
+"the difference compared to the underlying read-only file system. Hence "
+"packages could be installed into /usr with great space-wise efficiency "
+"compared to bind-mounts, since in the latter case all of /usr would have to "
+"be copied into I<VOL>/usr during the initial bootstrap."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:193
+msgid "I<live-boot>(7)"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:213
+msgid ""
+"live.persist was written by anonym E<lt>I<anonym@lavabit.com>E<gt> for the "
+"Debian project."
+msgstr ""
[po4a_paths] pot/$master.pot $lang:po/$lang/$master.po
[type: man] en/live-boot.7 $lang:$lang/live-boot.$lang.7
[type: man] en/live-snapshot.1 $lang:$lang/live-snapshot.$lang.1
+[type: man] en/live.persist.5 $lang:$lang/live.persist.5.$lang.persist
msgid ""
msgstr ""
"Project-Id-Version: live-boot VERSION\n"
-"POT-Creation-Date: 2012-02-06 23:27+0100\n"
+"POT-Creation-Date: 2012-04-05 08:11+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Content-Transfer-Encoding: 8bit\n"
#. type: TH
-#: en/live-boot.7:1 en/live-snapshot.1:1
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
#, no-wrap
msgid "LIVE-BOOT"
msgstr ""
#. type: TH
-#: en/live-boot.7:1 en/live-snapshot.1:1
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
#, no-wrap
-msgid "2012-02-06"
+msgid "2012-04-05"
msgstr ""
#. type: TH
-#: en/live-boot.7:1 en/live-snapshot.1:1
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
#, no-wrap
-msgid "3.0~a25-1"
+msgid "3.0~a26-1"
msgstr ""
#. type: TH
-#: en/live-boot.7:1 en/live-snapshot.1:1
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
#, no-wrap
msgid "Debian Live Project"
msgstr ""
#. type: SH
-#: en/live-boot.7:3 en/live-snapshot.1:3
+#: en/live-boot.7:3 en/live-snapshot.1:3 en/live.persist.5:3
#, no-wrap
msgid "NAME"
msgstr ""
msgstr ""
#. type: SH
-#: en/live-boot.7:6 en/live-snapshot.1:17
+#: en/live-boot.7:6 en/live-snapshot.1:17 en/live.persist.5:7
#, no-wrap
msgid "DESCRIPTION"
msgstr ""
msgstr ""
#. type: SH
-#: en/live-boot.7:28 en/live-snapshot.1:20
+#: en/live-boot.7:28 en/live-snapshot.1:20 en/live.persist.5:57
#, no-wrap
msgid "OPTIONS"
msgstr ""
#. type: Plain text
#: en/live-boot.7:111
msgid ""
-"live-boot will probe filesystems for persistent media. These can either be "
-"the filesystems themselves, if labeled correctly, or image/archive files, if "
-"named correctly. Overlays are labeled/named either \"live-rw\" or \"home-rw"
-"\" and will be mounted on / or /home, respectively; snapshots are labeled/"
+"live-boot will probe devices for persistent media. These can be partitions "
+"(with the correct GPT name), filesystems (with the correct label) or image/"
+"archive files (with the correct file name). Overlays are labeled/named "
+"either \"full-ov\", which will be mounted on /, or \"custom-ov\", which can "
+"be completely customized (see I<live.persist>(5)); snapshots are labeled/"
"named either \"live-sn\" or \"home-sn\" and will be extracted into / or /"
-"home, respectively (see live-snapshot(1) for more information). Overlays are "
-"mounted before snapshots are extracted, and for both overlays and snapshots, "
-"\"live-*\" are handled before \"home-*\". Overlay image files and snapshot "
-"archive files have extensions which determines their filesystem or archive "
-"type, e.g. \"live-rw.ext3\" and \"\\home-sn.squashfs\"."
+"home, respectively (see I<live-snapshot>(1) for more information). The order "
+"these are handled are: full-ov, custom-ov, live-sn, home-sn. Overlay image "
+"files and snapshot archive files have extensions which determines their "
+"filesystem or archive type, e.g. \"custom-ov.ext3\" and \"\\home-sn.squashfs"
+"\"."
msgstr ""
#. type: IP
msgid "B<live/boot.d/>"
msgstr ""
+#. type: IP
+#: en/live-boot.7:160
+#, no-wrap
+msgid "B<live.persist>"
+msgstr ""
+
#. type: SH
-#: en/live-boot.7:161 en/live-snapshot.1:54
+#: en/live-boot.7:162 en/live-snapshot.1:54 en/live.persist.5:191
#, no-wrap
msgid "SEE ALSO"
msgstr ""
#. type: Plain text
-#: en/live-boot.7:163
+#: en/live-boot.7:164
msgid "I<live-snapshot>(1)"
msgstr ""
#. type: Plain text
-#: en/live-boot.7:165 en/live-snapshot.1:58
+#: en/live-boot.7:166
+msgid "I<live.persist>(5)"
+msgstr ""
+
+#. type: Plain text
+#: en/live-boot.7:168 en/live-snapshot.1:58 en/live.persist.5:195
msgid "I<live-build>(7)"
msgstr ""
#. type: Plain text
-#: en/live-boot.7:167 en/live-snapshot.1:60
+#: en/live-boot.7:170 en/live-snapshot.1:60 en/live.persist.5:197
msgid "I<live-config>(7)"
msgstr ""
#. type: Plain text
-#: en/live-boot.7:169 en/live-snapshot.1:62
+#: en/live-boot.7:172 en/live-snapshot.1:62 en/live.persist.5:199
msgid "I<live-tools>(7)"
msgstr ""
#. type: SH
-#: en/live-boot.7:170 en/live-snapshot.1:63
+#: en/live-boot.7:173 en/live-snapshot.1:63 en/live.persist.5:200
#, no-wrap
msgid "HOMEPAGE"
msgstr ""
#. type: Plain text
-#: en/live-boot.7:172 en/live-snapshot.1:65
+#: en/live-boot.7:175 en/live-snapshot.1:65 en/live.persist.5:204
msgid ""
"More information about live-boot and the Debian Live project can be found on "
"the homepage at E<lt>I<http://live.debian.net/>E<gt> and in the manual at "
msgstr ""
#. type: SH
-#: en/live-boot.7:173 en/live-snapshot.1:66
+#: en/live-boot.7:176 en/live-snapshot.1:66 en/live.persist.5:205
#, no-wrap
msgid "BUGS"
msgstr ""
#. type: Plain text
-#: en/live-boot.7:175 en/live-snapshot.1:68
+#: en/live-boot.7:178 en/live-snapshot.1:68 en/live.persist.5:210
msgid ""
"Bugs can be reported by submitting a bugreport for the live-boot package in "
"the Debian Bug Tracking System at E<lt>I<http://bugs.debian.org/>E<gt> or by "
msgstr ""
#. type: SH
-#: en/live-boot.7:176 en/live-snapshot.1:69
+#: en/live-boot.7:179 en/live-snapshot.1:69 en/live.persist.5:211
#, no-wrap
msgid "AUTHOR"
msgstr ""
#. type: Plain text
-#: en/live-boot.7:177 en/live-snapshot.1:70
+#: en/live-boot.7:180 en/live-snapshot.1:70
msgid ""
"live-boot was written by Daniel Baumann E<lt>I<daniel@debian.org>E<gt> for "
"the Debian project."
msgid ""
msgstr ""
"Project-Id-Version: live-boot VERSION\n"
-"POT-Creation-Date: 2012-02-06 23:27+0100\n"
+"POT-Creation-Date: 2012-04-05 08:11+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Content-Transfer-Encoding: 8bit\n"
#. type: TH
-#: en/live-boot.7:1 en/live-snapshot.1:1
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
#, no-wrap
msgid "LIVE-BOOT"
msgstr ""
#. type: TH
-#: en/live-boot.7:1 en/live-snapshot.1:1
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
#, no-wrap
-msgid "2012-02-06"
+msgid "2012-04-05"
msgstr ""
#. type: TH
-#: en/live-boot.7:1 en/live-snapshot.1:1
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
#, no-wrap
-msgid "3.0~a25-1"
+msgid "3.0~a26-1"
msgstr ""
#. type: TH
-#: en/live-boot.7:1 en/live-snapshot.1:1
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
#, no-wrap
msgid "Debian Live Project"
msgstr ""
#. type: SH
-#: en/live-boot.7:3 en/live-snapshot.1:3
+#: en/live-boot.7:3 en/live-snapshot.1:3 en/live.persist.5:3
#, no-wrap
msgid "NAME"
msgstr ""
#. type: SH
-#: en/live-boot.7:6 en/live-snapshot.1:17
+#: en/live-boot.7:6 en/live-snapshot.1:17 en/live.persist.5:7
#, no-wrap
msgid "DESCRIPTION"
msgstr ""
#. type: SH
-#: en/live-boot.7:28 en/live-snapshot.1:20
+#: en/live-boot.7:28 en/live-snapshot.1:20 en/live.persist.5:57
#, no-wrap
msgid "OPTIONS"
msgstr ""
msgstr ""
#. type: SH
-#: en/live-boot.7:161 en/live-snapshot.1:54
+#: en/live-boot.7:162 en/live-snapshot.1:54 en/live.persist.5:191
#, no-wrap
msgid "SEE ALSO"
msgstr ""
#. type: Plain text
-#: en/live-boot.7:165 en/live-snapshot.1:58
+#: en/live-boot.7:168 en/live-snapshot.1:58 en/live.persist.5:195
msgid "I<live-build>(7)"
msgstr ""
#. type: Plain text
-#: en/live-boot.7:167 en/live-snapshot.1:60
+#: en/live-boot.7:170 en/live-snapshot.1:60 en/live.persist.5:197
msgid "I<live-config>(7)"
msgstr ""
#. type: Plain text
-#: en/live-boot.7:169 en/live-snapshot.1:62
+#: en/live-boot.7:172 en/live-snapshot.1:62 en/live.persist.5:199
msgid "I<live-tools>(7)"
msgstr ""
#. type: SH
-#: en/live-boot.7:170 en/live-snapshot.1:63
+#: en/live-boot.7:173 en/live-snapshot.1:63 en/live.persist.5:200
#, no-wrap
msgid "HOMEPAGE"
msgstr ""
#. type: Plain text
-#: en/live-boot.7:172 en/live-snapshot.1:65
+#: en/live-boot.7:175 en/live-snapshot.1:65 en/live.persist.5:204
msgid ""
"More information about live-boot and the Debian Live project can be found on "
"the homepage at E<lt>I<http://live.debian.net/>E<gt> and in the manual at "
msgstr ""
#. type: SH
-#: en/live-boot.7:173 en/live-snapshot.1:66
+#: en/live-boot.7:176 en/live-snapshot.1:66 en/live.persist.5:205
#, no-wrap
msgid "BUGS"
msgstr ""
#. type: Plain text
-#: en/live-boot.7:175 en/live-snapshot.1:68
+#: en/live-boot.7:178 en/live-snapshot.1:68 en/live.persist.5:210
msgid ""
"Bugs can be reported by submitting a bugreport for the live-boot package in "
"the Debian Bug Tracking System at E<lt>I<http://bugs.debian.org/>E<gt> or by "
msgstr ""
#. type: SH
-#: en/live-boot.7:176 en/live-snapshot.1:69
+#: en/live-boot.7:179 en/live-snapshot.1:69 en/live.persist.5:211
#, no-wrap
msgid "AUTHOR"
msgstr ""
#. type: Plain text
-#: en/live-boot.7:177 en/live-snapshot.1:70
+#: en/live-boot.7:180 en/live-snapshot.1:70
msgid ""
"live-boot was written by Daniel Baumann E<lt>I<daniel@debian.org>E<gt> for "
"the Debian project."
--- /dev/null
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the live-boot package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: live-boot VERSION\n"
+"POT-Creation-Date: 2012-04-05 08:11+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
+#, no-wrap
+msgid "LIVE-BOOT"
+msgstr ""
+
+#. type: TH
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
+#, no-wrap
+msgid "2012-04-05"
+msgstr ""
+
+#. type: TH
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
+#, no-wrap
+msgid "3.0~a26-1"
+msgstr ""
+
+#. type: TH
+#: en/live-boot.7:1 en/live-snapshot.1:1 en/live.persist.5:1
+#, no-wrap
+msgid "Debian Live Project"
+msgstr ""
+
+#. type: SH
+#: en/live-boot.7:3 en/live-snapshot.1:3 en/live.persist.5:3
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: SH
+#: en/live-boot.7:6 en/live-snapshot.1:17 en/live.persist.5:7
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr ""
+
+#. type: SH
+#: en/live-boot.7:28 en/live-snapshot.1:20 en/live.persist.5:57
+#, no-wrap
+msgid "OPTIONS"
+msgstr ""
+
+#. type: SH
+#: en/live-boot.7:162 en/live-snapshot.1:54 en/live.persist.5:191
+#, no-wrap
+msgid "SEE ALSO"
+msgstr ""
+
+#. type: Plain text
+#: en/live-boot.7:168 en/live-snapshot.1:58 en/live.persist.5:195
+msgid "I<live-build>(7)"
+msgstr ""
+
+#. type: Plain text
+#: en/live-boot.7:170 en/live-snapshot.1:60 en/live.persist.5:197
+msgid "I<live-config>(7)"
+msgstr ""
+
+#. type: Plain text
+#: en/live-boot.7:172 en/live-snapshot.1:62 en/live.persist.5:199
+msgid "I<live-tools>(7)"
+msgstr ""
+
+#. type: SH
+#: en/live-boot.7:173 en/live-snapshot.1:63 en/live.persist.5:200
+#, no-wrap
+msgid "HOMEPAGE"
+msgstr ""
+
+#. type: Plain text
+#: en/live-boot.7:175 en/live-snapshot.1:65 en/live.persist.5:204
+msgid ""
+"More information about live-boot and the Debian Live project can be found on "
+"the homepage at E<lt>I<http://live.debian.net/>E<gt> and in the manual at "
+"E<lt>I<http://live.debian.net/manual/>E<gt>."
+msgstr ""
+
+#. type: SH
+#: en/live-boot.7:176 en/live-snapshot.1:66 en/live.persist.5:205
+#, no-wrap
+msgid "BUGS"
+msgstr ""
+
+#. type: Plain text
+#: en/live-boot.7:178 en/live-snapshot.1:68 en/live.persist.5:210
+msgid ""
+"Bugs can be reported by submitting a bugreport for the live-boot package in "
+"the Debian Bug Tracking System at E<lt>I<http://bugs.debian.org/>E<gt> or by "
+"writing a mail to the Debian Live mailing list at E<lt>I<debian-live@lists."
+"debian.org>E<gt>."
+msgstr ""
+
+#. type: SH
+#: en/live-boot.7:179 en/live-snapshot.1:69 en/live.persist.5:211
+#, no-wrap
+msgid "AUTHOR"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:6
+msgid "B<live.persist> - Configuration file for persistent media in live-boot"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:13
+msgid ""
+"If live-boot probes a persistent volume with the label (or GPT name, or file "
+"name, but from now on we will just say \"label\") \"custom-ov\", that "
+"volume's persistence is fully customizable through the B<live.persist> file "
+"stored on the root of its file system. Any such labeled volume must have "
+"such a file, or it will be ignored."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:17
+msgid ""
+"The format of B<live.persist> allow empty lines and lines starting with a \"#"
+"\" (used for comments), both which will be ignored. A so called \"custom "
+"mount\" has the format:"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:20
+msgid "I<DIR> [I<OPTION>]..."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:24
+msgid ""
+"which roughly translates to \"make I<DIR> persistent in the way described by "
+"the list of I<OPTION>s\"."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:35
+msgid ""
+"For each custom mount I<DIR> must be an absolute path that cannot contain "
+"white spaces or the special . and .. path components, and cannot be /live "
+"(or any of its sub-directories), or / (for the latter, use \"full-ov\" "
+"persistence instead). Once activated all changes (file deletion, creation "
+"and modification) to I<DIR> on the live file system are stored persistently "
+"into a path equivalent to I<DIR> on the persistent media, called the source "
+"directory. The default way to achieve persistence is to simply bind-mount "
+"the corresponding source directory to I<DIR>, but this can be changed "
+"through the use of I<OPTION>s."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:48
+msgid ""
+"All custom mounts will be done in an order so that no two custom mounts can "
+"\"hide\" each other. For instance, if we have the two I<DIR>:s /a and /a/b "
+"it would always be the case that /a is mounted first, then /a/b. This "
+"remains true no matter how the lines in B<live.persist> are ordered, or if "
+"several B<live.persist> files on different persistent media are used at the "
+"same time. However, it is forbidden for custom mounts to have their source "
+"directory inside the source directory of another custom mount, so the source "
+"directories that are auto-created by live-boot does not support \"nested\" "
+"mounts like /a and /a/b on the same media. In this case you must use the "
+"B<source> option (see below) to make sure that they are stored in different "
+"source directories."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:56
+msgid ""
+"When a source directory doesn't exist on the persistent media for a certain "
+"custom mount, it will be created automatically, and permissions and "
+"ownership will be optimistically set according to I<DIR>. It will also be "
+"bootstrapped by copying the contents of the I<DIR> into its source directory "
+"on the persistent media. The bootstrapping will not happen when the "
+"B<linkfiles> or B<union> options are used (see below)."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:60
+msgid ""
+"Custom mounts defined in B<live.persist> accept the following options in a "
+"coma-separated list:"
+msgstr ""
+
+#. type: IP
+#: en/live.persist.5:60
+#, no-wrap
+msgid "B<source>=I<PATH>"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:69
+msgid ""
+"When given, store the persistent changes into I<PATH> on the persistent "
+"media. I<PATH> must be a relative path (w.r.t. the persistent media root) "
+"that cannot contain white spaces or the special . or .. path components, "
+"with the exception that it can be just . which means the persistent media "
+"root. This option is mostly relevant if you want to nest custom mounts, "
+"which otherwise would cause errors, or if you want to make the whole media "
+"root available (similar to the now deprecated B<home-rw> type of "
+"persistence)."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:72
+msgid ""
+"The following options are mutually exclusive (only the last given one will "
+"be in effect):"
+msgstr ""
+
+#. type: IP
+#: en/live.persist.5:72
+#, no-wrap
+msgid "B<bind>"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:74
+msgid "Bind-mount the source directory to I<DIR>. This is the default."
+msgstr ""
+
+#. type: IP
+#: en/live.persist.5:74
+#, no-wrap
+msgid "B<linkfiles>"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:83
+msgid ""
+"Create the directory structure of the source directory on the persistent "
+"media in I<DIR> and create symbolic links from the corresponding place in "
+"I<DIR> to each file in the source directory. Existing files or directories "
+"with the same name as any link will be overwritten. Note that deleting the "
+"links in I<DIR> will only remove the link, not the corresponding file in the "
+"source; removed links will reappear after a reboot. To permanently add or "
+"delete a file one must do so directly in the source directory."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:91
+msgid ""
+"Effectively B<linkfiles> will make only files already in the source "
+"directory persistent, not any other files in I<DIR>. These files must be "
+"manually added to the source directory to make use of this option, and they "
+"will appear in I<DIR> in addition to files already there. This option is "
+"useful when only certain files need to be persistent, not the whole "
+"directory they're in, e.g. some configuration files in a user's home "
+"directory."
+msgstr ""
+
+#. type: IP
+#: en/live.persist.5:91
+#, no-wrap
+msgid "B<union>"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:101
+msgid ""
+"Save the rw branch of a union on the persistent media, so only the changes "
+"are stored persistently. This can potentially reduce disk usage compared to "
+"bind-mounts, and will not hide files added to the read-only media. One "
+"caveat is that the union will use I<DIR> from the image's read-only file "
+"system, not the real file system root, so files created after boot (e.g. by "
+"live-config) will not appear in the union. This option will use the union "
+"file system specified by live-boot's B<union> boot parameter, but is not "
+"supported with B<union=unionmount>."
+msgstr ""
+
+#. type: SH
+#: en/live.persist.5:102
+#, no-wrap
+msgid "DIRECTORIES"
+msgstr ""
+
+#. type: IP
+#: en/live.persist.5:103
+#, no-wrap
+msgid "B</live/persistent>"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:109
+msgid ""
+"All persistent volumes will be mounted here (in a directory corresponding to "
+"the device name). The B<live.persist> file can easily be edited through this "
+"mount, as well as any source directories (which is especially practical for "
+"custom mounts using the B<linkfiles> option)."
+msgstr ""
+
+#. type: SH
+#: en/live.persist.5:110
+#, no-wrap
+msgid "EXAMPLES"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:115
+msgid ""
+"Let's say we have a persistent volume I<VOL> with the a B<live.persist> file "
+"containing the following four lines (numbered for ease of reference):"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:115 en/live.persist.5:129
+#, no-wrap
+msgid "1."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:118
+msgid "/home/user1 linkfiles,source=config-files/user1"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:118 en/live.persist.5:133
+#, no-wrap
+msgid "2."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:121
+msgid "/home/user2 linkfiles,source=config-files/user2"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:121 en/live.persist.5:137
+#, no-wrap
+msgid "3."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:124
+msgid "/home"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:124 en/live.persist.5:140
+#, no-wrap
+msgid "4."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:127
+msgid "/usr union"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:129
+msgid "The corresponding source directories are:"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:133
+msgid ""
+"I<VOL>/config-files/user1 (but it would be I<VOL>/home/user1 without the "
+"B<source> option)"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:137
+msgid ""
+"I<VOL>/config-files/user2 (but it would be I<VOL>/home/user2 without the "
+"B<source> option)"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:140
+msgid "I<VOL>/home"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:143
+msgid "I<VOL>/usr"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:146
+msgid ""
+"It was necessary to set the B<source> options for 1 and 2, since they "
+"otherwise would become nested with 3's source, which is illegal."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:151
+msgid ""
+"Line 3 will be taken care of before line 1 and 2 in order to prevent custom "
+"mounts 1 and 2 from being hidden by 3. When line 3 is handled, I<VOL>/home "
+"is simply bind-mounted on /home. To illustrate what happens for lines 1 and "
+"2, let's say that the following files exist:"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:151
+#, no-wrap
+msgid "a."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:154
+msgid "I<VOL>/config-files/user1/.emacs"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:154
+#, no-wrap
+msgid "b."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:157
+msgid "I<VOL>/config-files/user2/.bashrc"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:157
+#, no-wrap
+msgid "c."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:160
+msgid "I<VOL>/config-files/user2/.ssh/config"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:162
+msgid "Then the following links and directories will be created:"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:162 en/live.persist.5:165 en/live.persist.5:171
+#, no-wrap
+msgid "Link:"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:165
+msgid "/home/user1/.emacs -E<gt> I<VOL>/config-files/user1/.emacs (from a)"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:168
+msgid "/home/user2/.bashrc -E<gt> I<VOL>/config-files/user2/.bashrc (from b)"
+msgstr ""
+
+#. type: TP
+#: en/live.persist.5:168
+#, no-wrap
+msgid "Dir:"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:171
+msgid "/homea/user2/.ssh (from c)"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:175
+msgid ""
+"/home/user2/.ssh/config -E<gt> I<VOL>/config-files/user2/.ssh/config (from c)"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:181
+msgid ""
+"One could argue, though, that lines 1 and 2 in the example B<live.persist> "
+"file above are unnecessary since line 3 already would make all of /home "
+"persistent. The B<linkfiles> option is intended for situations where you "
+"don't want a complete directory to be persistent, only certain files in it "
+"or its sub-directories."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:190
+msgid ""
+"Line 4 can be mounted at any time since its I<DIR> (and source directory) is "
+"completely disjoint from all the other custom mounts. When mounted, I<VOL>/"
+"usr will be the rw branch due to the B<union> option, and will only contain "
+"the difference compared to the underlying read-only file system. Hence "
+"packages could be installed into /usr with great space-wise efficiency "
+"compared to bind-mounts, since in the latter case all of /usr would have to "
+"be copied into I<VOL>/usr during the initial bootstrap."
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:193
+msgid "I<live-boot>(7)"
+msgstr ""
+
+#. type: Plain text
+#: en/live.persist.5:213
+msgid ""
+"live.persist was written by anonym E<lt>I<anonym@lavabit.com>E<gt> for the "
+"Debian project."
+msgstr ""
alt_mountpoint="/media"
LIVE_MEDIA_PATH="live"
-root_persistence="live-rw"
-home_persistence="home-rw"
-root_snapshot_label="live-sn"
-home_snapshot_label="home-sn"
-
USERNAME="user"
USERFULLNAME="Live user"
HOSTNAME="host"
touch /live.vars
fi
-Arguments ()
-{
- PRESEEDS=""
- LOCATIONS=""
-
- for ARGUMENT in $(cat /proc/cmdline)
- do
- case "${ARGUMENT}" in
- skipconfig)
- NOACCESSIBILITY="Yes"
- NOFASTBOOT="Yes"
- NOFSTAB="Yes"
- NONETWORKING="Yes"
-
- export NOACCESSIBILITY NOFASTBOOT NOFSTAB NONETWORKING
- ;;
-
- access=*)
- ACCESS="${ARGUMENT#access=}"
- export ACCESS
- ;;
-
- console=*)
- DEFCONSOLE="${ARGUMENT#*=}"
- export DEFCONSOLE
- ;;
-
- BOOTIF=*)
- BOOTIF="${x#BOOTIF=}"
- ;;
-
- debug)
- DEBUG="Yes"
- export DEBUG
-
- set -x
- ;;
-
- dhcp)
- # Force dhcp even while netbooting
- # Use for debugging in case somebody works on fixing dhclient
- DHCP="Force";
- export DHCP
- ;;
-
- nodhcp)
- unset DHCP
- ;;
-
- ethdevice=*)
- DEVICE="${ARGUMENT#ethdevice=}"
- ETHDEVICE="${DEVICE}"
- export DEVICE ETHDEVICE
- ;;
-
- ethdevice-timeout=*)
- ETHDEV_TIMEOUT="${ARGUMENT#ethdevice-timeout=}"
- export ETHDEV_TIMEOUT
- ;;
-
- fetch=*)
- FETCH="${ARGUMENT#fetch=}"
- export FETCH
- ;;
-
- forcepersistentfsck)
- FORCEPERSISTENTFSCK="Yes"
- export FORCEPERSISTENTFSCK
- ;;
-
- ftpfs=*)
- FTPFS="${ARGUMENT#ftpfs=}"
- export FTPFS
- ;;
-
- httpfs=*)
- HTTPFS="${ARGUMENT#httpfs=}"
- export HTTPFS
- ;;
-
- iscsi=*)
- ISCSI="${ARGUMENT#iscsi=}"
- #ip:port - separated by ;
- ISCSI_PORTAL="${ISCSI%;*}"
- if echo "${ISCSI_PORTAL}" | grep -q , ; then
- ISCSI_SERVER="${ISCSI_PORTAL%,*}"
- ISCSI_PORT="${ISCSI_PORTAL#*,}"
- fi
- #target name
- ISCSI_TARGET="${ISCSI#*;}"
- export ISCSI ISCSI_PORTAL ISCSI_TARGET ISCSI_SERVER ISCSI_PORT
- ;;
-
- isofrom=*|fromiso=*)
- FROMISO="${ARGUMENT#*=}"
- export FROMISO
- ;;
-
- ignore_uuid)
- IGNORE_UUID="Yes"
- export IGNORE_UUID
- ;;
-
- integrity-check)
- INTEGRITY_CHECK="Yes"
- export INTEGRITY_CHECK
- ;;
-
- ip=*)
- STATICIP="${ARGUMENT#ip=}"
-
- if [ -z "${STATICIP}" ]
- then
- STATICIP="frommedia"
- fi
-
- export STATICIP
- ;;
-
- live-getty)
- LIVE_GETTY="1"
- export LIVE_GETTY
- ;;
-
- live-media=*|bootfrom=*)
- LIVE_MEDIA="${ARGUMENT#*=}"
- export LIVE_MEDIA
- ;;
-
- live-media-encryption=*|encryption=*)
- LIVE_MEDIA_ENCRYPTION="${ARGUMENT#*=}"
- export LIVE_MEDIA_ENCRYPTION
- ;;
-
- live-media-offset=*)
- LIVE_MEDIA_OFFSET="${ARGUMENT#live-media-offset=}"
- export LIVE_MEDIA_OFFSET
- ;;
-
- live-media-path=*)
- LIVE_MEDIA_PATH="${ARGUMENT#live-media-path=}"
- export LIVE_MEDIA_PATH
- ;;
-
- live-media-timeout=*)
- LIVE_MEDIA_TIMEOUT="${ARGUMENT#live-media-timeout=}"
- export LIVE_MEDIA_TIMEOUT
- ;;
-
- module=*)
- MODULE="${ARGUMENT#module=}"
- export MODULE
- ;;
-
- netboot=*)
- NETBOOT="${ARGUMENT#netboot=}"
- export NETBOOT
- ;;
-
- nfsopts=*)
- NFSOPTS="${ARGUMENT#nfsopts=}"
- export NFSOPTS
- ;;
-
- nfscow=*)
- NFS_COW="${ARGUMENT#nfscow=}"
- export NFS_COW
- ;;
-
- noaccessibility)
- NOACCESSIBILITY="Yes"
- export NOACCESSIBILITY
- ;;
-
- nofastboot)
- NOFASTBOOT="Yes"
- export NOFASTBOOT
- ;;
-
- nofstab)
- NOFSTAB="Yes"
- export NOFSTAB
- ;;
-
- nonetworking)
- NONETWORKING="Yes"
- export NONETWORKING
- ;;
-
- ramdisk-size=*)
- ramdisk_size="${ARGUMENT#ramdisk-size=}"
- ;;
-
- swapon)
- SWAPON="Yes"
- export SWAPON
- ;;
-
- persistent)
- PERSISTENT="Yes"
- export PERSISTENT
- ;;
-
- persistent-encryption=*)
- PERSISTENT_ENCRYPTION="${ARGUMENT#*=}"
- export PERSISTENT_ENCRYPTION
- ;;
-
- persistent-media=*)
- PERSISTENT_MEDIA="${ARGUMENT#*=}"
- export PERSISTENT_MEDIA
- ;;
- persistent-method=*)
- PERSISTENT_METHOD="${ARGUMENT#*=}"
- export PERSISTENT_METHOD
- ;;
-
- persistent-path=*)
- PERSISTENT_PATH="${ARGUMENT#persistent-path=}"
- export PERSISTENT_PATH
- ;;
- persistent-read-only)
- PERSISTENT_READONLY="Yes"
- export PERSISTENT_READONLY
- ;;
-
- persistent-storage=*)
- PERSISTENT_STORAGE="${ARGUMENT#persistent-storage=}"
- export PERSISTENT_STORAGE
- ;;
-
- persistent-subtext=*)
- root_persistence="${root_persistence}-${ARGUMENT#persistent-subtext=}"
- home_persistence="${home_persistence}-${ARGUMENT#persistent-subtext=}"
- root_snapshot_label="${root_snapshot_label}-${ARGUMENT#persistent-subtext=}"
- home_snapshot_label="${home_snapshot_label}-${ARGUMENT#persistent-subtext=}"
- ;;
-
- nopersistent)
- NOPERSISTENT="Yes"
- export NOPERSISTENT
- ;;
-
- noprompt)
- NOPROMPT="Yes"
- export NOPROMPT
- ;;
-
- noprompt=*)
- NOPROMPT="${ARGUMENT#noprompt=}"
- export NOPROMPT
- ;;
-
- quickusbmodules)
- QUICKUSBMODULES="Yes"
- export QUICKUSBMODULES
- ;;
-
- preseed/file=*|file=*)
- LOCATIONS="${ARGUMENT#*=} ${LOCATIONS}"
- export LOCATIONS
- ;;
-
- nopreseed)
- NOPRESEED="Yes"
- export NOPRESEED
- ;;
-
- */*=*)
- question="${ARGUMENT%%=*}"
- value="${ARGUMENT#*=}"
- PRESEEDS="${PRESEEDS}\"${question}=${value}\" "
- export PRESEEDS
- ;;
-
- showmounts)
- SHOWMOUNTS="Yes"
- export SHOWMOUNTS
- ;;
-
- silent)
- SILENT="Yes"
- export SILENT
- ;;
-
- todisk=*)
- TODISK="${ARGUMENT#todisk=}"
- export TODISK
- ;;
-
- toram)
- TORAM="Yes"
- export TORAM
- ;;
-
- toram=*)
- TORAM="Yes"
- MODULETORAM="${ARGUMENT#toram=}"
- export TORAM MODULETORAM
- ;;
-
- exposedroot)
- EXPOSED_ROOT="Yes"
- export EXPOSED_ROOT
- ;;
-
- plainroot)
- PLAIN_ROOT="Yes"
- export PLAIN_ROOT
- ;;
-
- skipunion)
- SKIP_UNION_MOUNTS="Yes"
- export SKIP_UNION_MOUNTS
- ;;
-
- root=*)
- ROOT="${ARGUMENT#root=}"
- export ROOT
- ;;
-
- union=*)
- UNIONTYPE="${ARGUMENT#union=}"
- export UNIONTYPE
- ;;
- esac
- done
-
- # sort of compatibility with netboot.h from linux docs
- if [ -z "${NETBOOT}" ]
- then
- if [ "${ROOT}" = "/dev/nfs" ]
- then
- NETBOOT="nfs"
- export NETBOOT
- elif [ "${ROOT}" = "/dev/cifs" ]
- then
- NETBOOT="cifs"
- export NETBOOT
- fi
- fi
-
- if [ -z "${MODULE}" ]
- then
- MODULE="filesystem"
- export MODULE
- fi
-
- if [ -z "${UNIONTYPE}" ]
- then
- UNIONTYPE="aufs"
- export UNIONTYPE
- fi
-
- if [ -z "${PERSISTENT_ENCRYPTION}" ]
- then
- PERSISTENT_ENCRYPTION="none"
- export PERSISTENT_ENCRYPTION
- elif echo ${PERSISTENT_ENCRYPTION} | grep -qe "\<luks\>"
- then
- if ! modprobe dm-crypt
- then
- log_warning_msg "Unable to load module dm-crypt"
- PERSISTENT_ENCRYPTION=$(echo ${PERSISTENT_ENCRYPTION} | sed -e 's/\<luks,\|,\?luks$//g')
- export PERSISTENT_ENCRYPTION
- fi
-
- if [ ! -x /lib/cryptsetup/askpass ] || [ ! -x /sbin/cryptsetup ]
- then
- log_warning_msg "cryptsetup in unavailable"
- PERSISTENT_ENCRYPTION=$(echo ${PERSISTENT_ENCRYPTION} | sed -e 's/\<luks,\|,\?luks$//g')
- export PERSISTENT_ENCRYPTION
- fi
- fi
-
- if [ -n "${PERSISTENT}" ] && [ -z "${PERSISTENT_METHOD}" ]
- then
- PERSISTENT_METHOD="snapshot,overlay"
- export PERSISTENT_METHOD
- fi
-
- if [ -n "${PERSISTENT}" ] && [ -z "${PERSISTENT_STORAGE}" ]
- then
- PERSISTENT_STORAGE="filesystem,file"
- export PERSISTENT_STORAGE
- fi
-}
-
is_live_path ()
{
DIRECTORY="${1}"
#modprobe ib_iser
modprobe iscsi_tcp
local debugopt=""
- [ "${DEBUG}" == "Yes" ] && debugopt="-d 8"
+ [ "${DEBUG}" = "Yes" ] && debugopt="-d 8"
#FIXME this name is supposed to be unique - some date + ifconfig hash?
ISCSI_INITIATORNAME="iqn.1993-08.org.debian.live:01:$(echo "${HWADDR}" | sed -e s/://g)"
export ISCSI_INITIATORNAME
modprobe -q nfs
- if [ -z "${NFSOPTS}" ]
+ if [ -n "${NFSOPTS}" ]
then
- NFSOPTS=""
+ NFSOPTS="-o ${NFSOPTS}"
fi
log_begin_msg "Trying nfsmount -o nolock -o ro ${NFSOPTS} ${NFSROOT} ${mountpoint}"
then
CIFSOPTS="-ouser=root,password="
else
- CIFSOPTS="${NFSOPTS}"
+ CIFSOPTS="-o ${NFSOPTS}"
fi
log_begin_msg "Trying mount.cifs ${NFSROOT} ${mountpoint} ${CIFSOPTS}"
# Let's just mount the read-only file systems first
rofslist=""
- if [ "${UNIONTYPE}" = "aufs" ]
- then
- roopt="rr+wh"
- noxino_opt="noxino,"
- elif [ "${UNIONTYPE}" = "unionfs-fuse" ]
- then
- roopt="RO"
- else
- roopt="ro"
- fi
-
if [ -z "${PLAIN_ROOT}" ]
then
# Read image names from ${MODULE}.module if it exists
mkdir -p /cow
- # Looking for "${root_persistence}" device or file
+ # Looking for persistent devices or files
if [ -n "${PERSISTENT}" ] && [ -z "${NOPERSISTENT}" ]
then
if echo ${PERSISTENT_METHOD} | grep -qe "\<overlay\>"
then
- overlays="${root_persistence} ${home_persistence}"
+ overlays="${root_overlay_label} ${old_root_overlay_label} ${old_home_overlay_label} ${custom_overlay_label}"
fi
if echo ${PERSISTENT_METHOD} | grep -qe "\<snapshot\>"
snapshots="${root_snapshot_label} ${home_snapshot_label}"
fi
-
- for media in $(find_persistent_media "${overlays}" "${snapshots}" "${blacklistdev}" "${whitelistdev}")
+ local root_snapdata=""
+ local home_snapshot_label=""
+ local root_overlay_label=""
+ local overlay_devices=""
+ for media in $(find_persistent_media "${overlays}" "${snapshots}" "${whitelistdev}")
do
media="$(echo ${media} | tr ":" " ")"
case ${media} in
- ${root_persistence}=*)
- cowprobe="${media#*=}"
- ;;
- ${home_persistence}=*)
- homecow="${media#*=}"
- ;;
- ${root_snapshot_label}=*)
- root_snapdata="${media#*=}"
+ ${root_snapshot_label}=*|${old_root_snapshot_label}=*)
+ if [ -z "${root_snapdata}" ]
+ then
+ root_snapdata="${media#*=}"
+ fi
;;
${home_snapshot_label}=*)
# This second type should be removed when snapshot will get smarter,
# hence when "/etc/live-snapshot*list" will be supported also by
# ext2|ext3|ext4|jffs2 snapshot types.
- home_snapdata="${media#*=}"
+ if [ -z "${home_snapdata}" ]
+ then
+ home_snapdata="${media#*=}"
+ fi
;;
- *)
+ ${root_overlay_label}=*|${old_root_overlay_label}=*)
+ if [ -z "${root_overlay_device}" ]
+ then
+ device="${media#*=}"
+ root_overlay_device="${device}"
+ fi
+ ;;
+ ${old_home_overlay_label}=*)
+ device="${media#*=}"
+ fix_home_rw_compatibility ${device}
+ overlay_devices="${overlay_devices} ${device}"
+ ;;
+ ${custom_overlay_label}=*)
+ device="${media#*=}"
+ overlay_devices="${overlay_devices} ${device}"
;;
esac
done
- if [ -b "${cowprobe}" ] || [ -b "${homecow}" ]
+ if [ -b "${root_overlay_device}" ]
then
PERSISTENCE_IS_ON="1"
export PERSISTENCE_IS_ON
- fi
- if [ -b "${cowprobe}" ]
- then
- cowdevice=${cowprobe}
- cow_fstype=$(get_fstype "${cowprobe}")
+ cowdevice=${root_overlay_device}
+ cow_fstype=$(get_fstype "${root_overlay_device}")
if [ -z "${PERSISTENT_READONLY}" ]
then
cow_mountopt="rw,noatime"
then
if [ -n "${PERSISTENT_READONLY}" ]
then
- persistent_root="/$(basename ${cowdevice})-backing"
- mkdir -p ${persistent_root}
+ mount -t tmpfs -o rw,noatime,mode=755 tmpfs "/cow"
+ root_backing="${rootmnt}/live/persistent/$(basename ${cowdevice})-root"
+ mkdir -p ${root_backing}
else
- persistent_root="/cow"
+ root_backing="/cow"
fi
if [ "${cow_fstype}" = "nfs" ]
then
log_begin_msg \
- "Trying nfsmount ${nfs_cow_opts} ${cowdevice} ${persistent_root}"
- nfsmount ${nfs_cow_opts} ${cowdevice} ${persistent_root} || \
- panic "Can not mount ${cowdevice} (n: ${cow_fstype}) on ${persistent_root}"
+ "Trying nfsmount ${nfs_cow_opts} ${cowdevice} ${root_backing}"
+ nfsmount ${nfs_cow_opts} ${cowdevice} ${root_backing} || \
+ panic "Can not mount ${cowdevice} (n: ${cow_fstype}) on ${root_backing}"
else
- mount -t ${cow_fstype} -o ${cow_mountopt} ${cowdevice} ${persistent_root} || \
- panic "Can not mount ${cowdevice} (o: ${cow_fstype}) on ${persistent_root}"
+ mount -t ${cow_fstype} -o ${cow_mountopt} ${cowdevice} ${root_backing} || \
+ panic "Can not mount ${cowdevice} (o: ${cow_fstype}) on ${root_backing}"
fi
fi
rofscount=$(echo ${rofslist} |wc -w)
+ # XXX: we now ensure that there can only be one read-only filesystem. Should this be inside the EXPOSED_ROOT if?
if [ ${rofscount} -ne 1 ]
then
panic "only one RO file system supported with exposedroot: ${rofslist}"
#panic "unionmount does not support subunions (${cow_dirs})."
fi
- unionmountopts=""
- unionmountpoint=""
-
for dir in ${cow_dirs}; do
- mkdir -p /cow${dir}
-
unionmountpoint="${rootmnt}${dir}"
- unionrw="/cow${dir}"
- unionro="${rofs}${dir}"
- # We don't handle spaces and other junk gracefully here, hopefully not needed.
- case "${UNIONTYPE}" in
- unionfs-fuse)
- unionmountopts="-o cow -o noinitgroups -o default_permissions -o allow_other -o use_ino -o suid"
- unionmountopts="${unionmountopts} ${unionrw}=RW:${unionro}=RO"
- ( sysctl -w fs.file-max=391524 ; ulimit -HSn 16384
- unionfs-fuse ${unionmountopts} "${unionmountpoint}" ) && \
- ( mkdir -p /run/sendsigs.omit.d
- pidof unionfs-fuse >> /run/sendsigs.omit.d/unionfs-fuse || true )
- ;;
-
- unionmount)
- unionmountopts="-t ${cow_fstype} -o noatime,union,${cow_mountopt} ${cowdevice}"
- mount_full $unionmountopts "${unionmountpoint}"
- ;;
-
- overlayfs)
- unionmountopts="-o noatime,${noxino_opt},lowerdir=${unionro},upperdir=${unionrw}"
- mount -t ${UNIONTYPE} ${unionmountopts} ${UNIONTYPE} "${unionmountpoint}"
- ;;
-
- *)
- if [ -n "${PERSISTENT_READONLY}" ]
- then
- mount -t tmpfs -o rw,noatime,mode=755 tmpfs "${unionrw}"
- unionmountopts="-o noatime,${noxino_opt}dirs=${unionrw}=rw:${persistent_root}=${roopt}:${unionro}=${roopt}"
- else
- unionmountopts="-o noatime,${noxino_opt}dirs=${unionrw}=rw:${unionro}=${roopt}"
- fi
- mount -t ${UNIONTYPE} ${unionmountopts} ${UNIONTYPE} "${unionmountpoint}"
- ;;
- esac || \
- panic "mount ${UNIONTYPE} on ${unionmountpoint} failed with option ${unionmountopts}"
+ mkdir -p ${unionmountpoint}
+ if [ "${UNIONTYPE}" = "unionmount" ]
+ then
+ # FIXME: handle PERSISTENT_READONLY
+ unionmountopts="-t ${cow_fstype} -o noatime,union,${cow_mountopt} ${cowdevice}"
+ mount_full $unionmountopts "${unionmountpoint}"
+ else
+ cow_dir="/cow${dir}"
+ rofs_dir="${rofs}${dir}"
+ mkdir -p ${cow_dir}
+ if [ -n "${PERSISTENT_READONLY}" ] && [ "${cowdevice}" != "tmpfs" ]
+ then
+ #mount -t tmpfs -o rw,noatime,mode=755 tmpfs "${cow_dir}"
+ do_union ${unionmountpoint} ${cow_dir} ${root_backing} ${rofs_dir}
+ else
+ do_union ${unionmountpoint} ${cow_dir} ${rofs_dir}
+ fi
+ fi || panic "mount ${UNIONTYPE} on ${unionmountpoint} failed with option ${unionmountopts}"
done
# Correct the permissions of /:
mkdir -p "${rootmnt}/live"
mount -t tmpfs tmpfs ${rootmnt}/live
- # Adding other custom mounts
- if [ -n "${PERSISTENT}" ] && [ -z "${NOPERSISTENT}" ]
- then
- # directly mount /home
- # FIXME: add a custom mounts configurable system
-
- if [ -b "${homecow}" ]
- then
- if [ -z "${PERSISTENT_READONLY}" ]
- then
- mount -t $(get_fstype "${homecow}") -o rw,noatime "${homecow}" "${rootmnt}/home"
- else
- homerw="/cow/home"
- homero="/$(basename ${homecow})-backing"
- homemountpoint="${rootmnt}/home"
- mkdir -p ${homerw} ${homero} ${homemountpoint}
- mount -t $(get_fstype "${homecow}") -o ro "${homecow}" "${homero}"
- mount -t "${UNIONTYPE}" -o "noatime,${noxino_opt}dirs=${homerw}=rw:${homero}=${roopt}" "${UNIONTYPE}" "${homemountpoint}"
- fi
- export HOMEMOUNTED=1 # used to proper calculate free space in do_snap_copy()
- else
- log_warning_msg "Unable to find the persistent home medium"
- fi
-
- # Look for other snapshots to copy in
- try_snap "${root_snapdata}" "${rootmnt}" "ROOT"
- # This second type should be removed when snapshot grow smarter
- try_snap "${home_snapdata}" "${rootmnt}" "HOME" "/home"
- fi
-
- if [ -n "${SHOWMOUNTS}" ]
+ live_rofs_list=""
+ # SHOWMOUNTS is necessary for custom mounts with the union option
+ # Since we may want to do custom mounts in user-space it's best to always enable SHOWMOUNTS
+ if true #[ -n "${SHOWMOUNTS}" ] || ( [ -n "${PERSISTENT}" ] && [ -z "${NOPERSISTENT}" ] 1)
then
+ # XXX: is the for loop really necessary? rofslist can only contain one item (see above XXX about EXPOSEDROOT) and this is also assumed elsewhere above (see use of $rofs above).
for d in ${rofslist}
do
- mkdir -p "${rootmnt}/live/${d##*/}"
-
+ live_rofs="${rootmnt}/live/rofs/${d##*/}"
+ live_rofs_list="${live_rofs_list} ${live_rofs}"
+ mkdir -p "${live_rofs}"
case d in
*.dir)
- # do nothing # mount -o bind "${d}" "${rootmnt}/live/${d##*/}"
+ # do nothing # mount -o bind "${d}" "${live_rofs}"
;;
-
*)
case "${UNIONTYPE}" in
unionfs-fuse)
- mount -o bind "${d}" "${rootmnt}/live/${d##*/}"
+ mount -o bind "${d}" "${live_rofs}"
;;
-
*)
- mount -o move "${d}" "${rootmnt}/live/${d##*/}"
+ mount -o move "${d}" "${live_rofs}"
;;
esac
;;
done
fi
+ # Adding custom persistent
+ if [ -n "${PERSISTENT}" ] && [ -z "${NOPERSISTENT}" ]
+ then
+ local custom_mounts="/tmp/custom_mounts.list"
+ rm -rf ${custom_mounts} 2> /dev/null
+
+ # Gather information about custom mounts from devies detected as overlays
+ get_custom_mounts ${custom_mounts} ${overlay_devices}
+
+ [ -n "${DEBUG}" ] && cp ${custom_mounts} "${rootmnt}/live/persistent"
+
+ # Now we do the actual mounting (and symlinking)
+ local used_overlays=""
+ used_overlays=$(activate_custom_mounts ${custom_mounts})
+ rm ${custom_mounts}
+
+ # Close unused overlays (e.g. due to missing $persistence_list)
+ for overlay in ${overlay_devices}
+ do
+ if echo ${used_overlays} | grep -qve "^\(.* \)\?${device}\( .*\)\?$"
+ then
+ close_persistent_media ${overlay}
+ fi
+ done
+
+ # Look for other snapshots to copy in
+ try_snap "${root_snapdata}" "${rootmnt}" "ROOT"
+ # This second type should be removed when snapshot grow smarter
+ try_snap "${home_snapdata}" "${rootmnt}" "HOME" "/home"
+ fi
+
# shows cow fs on /cow for use by live-snapshot
mkdir -p "${rootmnt}/live/cow"
mount -o move /cow "${rootmnt}/live/cow" >/dev/null 2>&1 || mount -o bind /cow "${rootmnt}/live/cow" || log_warning_msg "Unable to move or bind /cow to ${rootmnt}/live/cow"
udevinfo='udevinfo'
fi
+root_overlay_label="full-ov"
+old_root_overlay_label="live-rw"
+old_home_overlay_label="home-rw"
+custom_overlay_label="custom-ov"
+root_snapshot_label="live-sn"
+old_root_snapshot_label="live-sn"
+home_snapshot_label="home-sn"
+persistence_list="live.persist"
+
+Arguments ()
+{
+ PRESEEDS=""
+ LOCATIONS=""
+
+ for ARGUMENT in $(cat /proc/cmdline)
+ do
+ case "${ARGUMENT}" in
+ skipconfig)
+ NOACCESSIBILITY="Yes"
+ NOFASTBOOT="Yes"
+ NOFSTAB="Yes"
+ NONETWORKING="Yes"
+
+ export NOACCESSIBILITY NOFASTBOOT NOFSTAB NONETWORKING
+ ;;
+
+ access=*)
+ ACCESS="${ARGUMENT#access=}"
+ export ACCESS
+ ;;
+
+ console=*)
+ DEFCONSOLE="${ARGUMENT#*=}"
+ export DEFCONSOLE
+ ;;
+
+ BOOTIF=*)
+ BOOTIF="${x#BOOTIF=}"
+ ;;
+
+ debug)
+ DEBUG="Yes"
+ export DEBUG
+
+ set -x
+ ;;
+
+ dhcp)
+ # Force dhcp even while netbooting
+ # Use for debugging in case somebody works on fixing dhclient
+ DHCP="Force";
+ export DHCP
+ ;;
+
+ nodhcp)
+ unset DHCP
+ ;;
+
+ ethdevice=*)
+ DEVICE="${ARGUMENT#ethdevice=}"
+ ETHDEVICE="${DEVICE}"
+ export DEVICE ETHDEVICE
+ ;;
+
+ ethdevice-timeout=*)
+ ETHDEV_TIMEOUT="${ARGUMENT#ethdevice-timeout=}"
+ export ETHDEV_TIMEOUT
+ ;;
+
+ fetch=*)
+ FETCH="${ARGUMENT#fetch=}"
+ export FETCH
+ ;;
+
+ forcepersistentfsck)
+ FORCEPERSISTENTFSCK="Yes"
+ export FORCEPERSISTENTFSCK
+ ;;
+
+ ftpfs=*)
+ FTPFS="${ARGUMENT#ftpfs=}"
+ export FTPFS
+ ;;
+
+ httpfs=*)
+ HTTPFS="${ARGUMENT#httpfs=}"
+ export HTTPFS
+ ;;
+
+ iscsi=*)
+ ISCSI="${ARGUMENT#iscsi=}"
+ #ip:port - separated by ;
+ ISCSI_PORTAL="${ISCSI%;*}"
+ if echo "${ISCSI_PORTAL}" | grep -q , ; then
+ ISCSI_SERVER="${ISCSI_PORTAL%,*}"
+ ISCSI_PORT="${ISCSI_PORTAL#*,}"
+ fi
+ #target name
+ ISCSI_TARGET="${ISCSI#*;}"
+ export ISCSI ISCSI_PORTAL ISCSI_TARGET ISCSI_SERVER ISCSI_PORT
+ ;;
+
+ isofrom=*|fromiso=*)
+ FROMISO="${ARGUMENT#*=}"
+ export FROMISO
+ ;;
+
+ ignore_uuid)
+ IGNORE_UUID="Yes"
+ export IGNORE_UUID
+ ;;
+
+ integrity-check)
+ INTEGRITY_CHECK="Yes"
+ export INTEGRITY_CHECK
+ ;;
+
+ ip=*)
+ STATICIP="${ARGUMENT#ip=}"
+
+ if [ -z "${STATICIP}" ]
+ then
+ STATICIP="frommedia"
+ fi
+
+ export STATICIP
+ ;;
+
+ live-getty)
+ LIVE_GETTY="1"
+ export LIVE_GETTY
+ ;;
+
+ live-media=*|bootfrom=*)
+ LIVE_MEDIA="${ARGUMENT#*=}"
+ export LIVE_MEDIA
+ ;;
+
+ live-media-encryption=*|encryption=*)
+ LIVE_MEDIA_ENCRYPTION="${ARGUMENT#*=}"
+ export LIVE_MEDIA_ENCRYPTION
+ ;;
+
+ live-media-offset=*)
+ LIVE_MEDIA_OFFSET="${ARGUMENT#live-media-offset=}"
+ export LIVE_MEDIA_OFFSET
+ ;;
+
+ live-media-path=*)
+ LIVE_MEDIA_PATH="${ARGUMENT#live-media-path=}"
+ export LIVE_MEDIA_PATH
+ ;;
+
+ live-media-timeout=*)
+ LIVE_MEDIA_TIMEOUT="${ARGUMENT#live-media-timeout=}"
+ export LIVE_MEDIA_TIMEOUT
+ ;;
+
+ module=*)
+ MODULE="${ARGUMENT#module=}"
+ export MODULE
+ ;;
+
+ netboot=*)
+ NETBOOT="${ARGUMENT#netboot=}"
+ export NETBOOT
+ ;;
+
+ nfsopts=*)
+ NFSOPTS="${ARGUMENT#nfsopts=}"
+ export NFSOPTS
+ ;;
+
+ nfscow=*)
+ NFS_COW="${ARGUMENT#nfscow=}"
+ export NFS_COW
+ ;;
+
+ noaccessibility)
+ NOACCESSIBILITY="Yes"
+ export NOACCESSIBILITY
+ ;;
+
+ nofastboot)
+ NOFASTBOOT="Yes"
+ export NOFASTBOOT
+ ;;
+
+ nofstab)
+ NOFSTAB="Yes"
+ export NOFSTAB
+ ;;
+
+ nonetworking)
+ NONETWORKING="Yes"
+ export NONETWORKING
+ ;;
+
+ ramdisk-size=*)
+ ramdisk_size="${ARGUMENT#ramdisk-size=}"
+ ;;
+
+ swapon)
+ SWAPON="Yes"
+ export SWAPON
+ ;;
+
+ persistent)
+ PERSISTENT="Yes"
+ export PERSISTENT
+ ;;
+
+ persistent-encryption=*)
+ PERSISTENT_ENCRYPTION="${ARGUMENT#*=}"
+ export PERSISTENT_ENCRYPTION
+ ;;
+
+ persistent-media=*)
+ PERSISTENT_MEDIA="${ARGUMENT#*=}"
+ export PERSISTENT_MEDIA
+ ;;
+ persistent-method=*)
+ PERSISTENT_METHOD="${ARGUMENT#*=}"
+ export PERSISTENT_METHOD
+ ;;
+
+ persistent-path=*)
+ PERSISTENT_PATH="${ARGUMENT#persistent-path=}"
+ export PERSISTENT_PATH
+ ;;
+ persistent-read-only)
+ PERSISTENT_READONLY="Yes"
+ export PERSISTENT_READONLY
+ ;;
+
+ persistent-storage=*)
+ PERSISTENT_STORAGE="${ARGUMENT#persistent-storage=}"
+ export PERSISTENT_STORAGE
+ ;;
+
+ persistent-subtext=*)
+ root_overlay_label="${root_overlay_label}-${ARGUMENT#persistent-subtext=}"
+ old_root_overlay_label="${old_root_overlay_label}-${ARGUMENT#persistent-subtext=}"
+ old_home_overlay_label="${old_home_overlay_label}-${ARGUMENT#persistent-subtext=}"
+ custom_overlay_label="${custom_overlay_label}-${ARGUMENT#persistent-subtext=}"
+ root_snapshot_label="${root_snapshot_label}-${ARGUMENT#persistent-subtext=}"
+ old_root_snapshot_label="${root_snapshot_label}-${ARGUMENT#persistent-subtext=}"
+ home_snapshot_label="${home_snapshot_label}-${ARGUMENT#persistent-subtext=}"
+ ;;
+
+ nopersistent)
+ NOPERSISTENT="Yes"
+ export NOPERSISTENT
+ ;;
+
+ noprompt)
+ NOPROMPT="Yes"
+ export NOPROMPT
+ ;;
+
+ noprompt=*)
+ NOPROMPT="${ARGUMENT#noprompt=}"
+ export NOPROMPT
+ ;;
+
+ quickusbmodules)
+ QUICKUSBMODULES="Yes"
+ export QUICKUSBMODULES
+ ;;
+
+ preseed/file=*|file=*)
+ LOCATIONS="${ARGUMENT#*=} ${LOCATIONS}"
+ export LOCATIONS
+ ;;
+
+ nopreseed)
+ NOPRESEED="Yes"
+ export NOPRESEED
+ ;;
+
+ */*=*)
+ question="${ARGUMENT%%=*}"
+ value="${ARGUMENT#*=}"
+ PRESEEDS="${PRESEEDS}\"${question}=${value}\" "
+ export PRESEEDS
+ ;;
+
+ showmounts)
+ SHOWMOUNTS="Yes"
+ export SHOWMOUNTS
+ ;;
+
+ silent)
+ SILENT="Yes"
+ export SILENT
+ ;;
+
+ todisk=*)
+ TODISK="${ARGUMENT#todisk=}"
+ export TODISK
+ ;;
+
+ toram)
+ TORAM="Yes"
+ export TORAM
+ ;;
+
+ toram=*)
+ TORAM="Yes"
+ MODULETORAM="${ARGUMENT#toram=}"
+ export TORAM MODULETORAM
+ ;;
+
+ exposedroot)
+ EXPOSED_ROOT="Yes"
+ export EXPOSED_ROOT
+ ;;
+
+ plainroot)
+ PLAIN_ROOT="Yes"
+ export PLAIN_ROOT
+ ;;
+
+ skipunion)
+ SKIP_UNION_MOUNTS="Yes"
+ export SKIP_UNION_MOUNTS
+ ;;
+
+ root=*)
+ ROOT="${ARGUMENT#root=}"
+ export ROOT
+ ;;
+
+ union=*)
+ UNIONTYPE="${ARGUMENT#union=}"
+ export UNIONTYPE
+ ;;
+ esac
+ done
+
+ # sort of compatibility with netboot.h from linux docs
+ if [ -z "${NETBOOT}" ]
+ then
+ if [ "${ROOT}" = "/dev/nfs" ]
+ then
+ NETBOOT="nfs"
+ export NETBOOT
+ elif [ "${ROOT}" = "/dev/cifs" ]
+ then
+ NETBOOT="cifs"
+ export NETBOOT
+ fi
+ fi
+
+ if [ -z "${MODULE}" ]
+ then
+ MODULE="filesystem"
+ export MODULE
+ fi
+
+ if [ -z "${UNIONTYPE}" ]
+ then
+ UNIONTYPE="aufs"
+ export UNIONTYPE
+ fi
+
+ if [ -z "${PERSISTENT_ENCRYPTION}" ]
+ then
+ PERSISTENT_ENCRYPTION="none"
+ export PERSISTENT_ENCRYPTION
+ elif echo ${PERSISTENT_ENCRYPTION} | grep -qe "\<luks\>"
+ then
+ if ! modprobe dm-crypt
+ then
+ log_warning_msg "Unable to load module dm-crypt"
+ PERSISTENT_ENCRYPTION=$(echo ${PERSISTENT_ENCRYPTION} | sed -e 's/\<luks,\|,\?luks$//g')
+ export PERSISTENT_ENCRYPTION
+ fi
+
+ if [ ! -x /lib/cryptsetup/askpass ] || [ ! -x /sbin/cryptsetup ]
+ then
+ log_warning_msg "cryptsetup in unavailable"
+ PERSISTENT_ENCRYPTION=$(echo ${PERSISTENT_ENCRYPTION} | sed -e 's/\<luks,\|,\?luks$//g')
+ export PERSISTENT_ENCRYPTION
+ fi
+ fi
+
+ if [ -z "${PERSISTENT_METHOD}" ]
+ then
+ PERSISTENT_METHOD="snapshot,overlay"
+ export PERSISTENT_METHOD
+ fi
+
+ if [ -z "${PERSISTENT_STORAGE}" ]
+ then
+ PERSISTENT_STORAGE="filesystem,file"
+ export PERSISTENT_STORAGE
+ fi
+}
+
sys2dev ()
{
sysdev=${1#/sys}
where_is_mounted ()
{
device=${1}
+ # return first found
+ grep -m1 "^${device} " /proc/mounts | cut -f2 -d ' '
+}
- if grep -q "^${device} " /proc/mounts
- then
- # return the first found
- grep -m1 "^${device} " /proc/mounts | cut -f2 -d ' '
- fi
+trim_path () {
+ # remove all unnecessary /:s in the path, including last one (except
+ # if path is just "/")
+ echo ${1} | sed 's|//\+|/|g' | sed 's|^\(.*[^/]\)/$|\1|'
+}
+
+what_is_mounted_on ()
+{
+ local dir="$(trim_path ${1})"
+ grep -m1 "^[^ ]\+ ${dir} " /proc/mounts | cut -d' ' -f1
+}
+
+chown_ref ()
+{
+ local reference="${1}"
+ shift
+ local targets=${@}
+ local owner=$(stat -c %u:%g "${reference}")
+ chown -h ${owner} ${targets}
+}
+
+chmod_ref ()
+{
+ local reference="${1}"
+ shift
+ local targets=${@}
+ local rights=$(stat -c %a "${reference}")
+ chmod ${rights} ${targets}
}
lastline ()
fi
}
+mount_persistent_media ()
+{
+ local device=${1}
+ local backing=""
+
+ # We can't mount into ${rootmnt}/live before ${rootmnt} has been
+ # mounted since that would cover our mountpoint.
+ if [ -n "${rootmnt}" ] && [ -z "$(what_is_mounted_on ${rootmnt})" ]
+ then
+ backing="/$(basename ${device})-backing"
+ else
+ backing="${rootmnt}/live/persistent/$(basename ${device})"
+ fi
+
+ mkdir -p "${backing}"
+ local old_backing="$(where_is_mounted ${device})"
+ if [ -z "${old_backing}" ]
+ then
+ local fstype="$(get_fstype ${device})"
+ local mount_opts="rw,noatime"
+ if [ -n "${PERSISTENT_READONLY}" ]
+ then
+ mount_opts="ro,noatime"
+ fi
+ if mount -t "${fstype}" -o "${mount_opts}" "${device}" "${backing}" >/dev/null
+ then
+ echo ${backing}
+ return 0
+ else
+ log_warning_msg "Failed to mount persistent media ${device}"
+ return 1
+ fi
+ elif [ "${backing}" != "${old_backing}" ]
+ then
+ if mount --move ${old_backing} ${backing} >/dev/null
+ then
+ echo ${backing}
+ return 0
+ else
+ log_warning_msg "Failed to move persistent media ${device}"
+ return 1
+ fi
+ fi
+ return 0
+}
+
+close_persistent_media () {
+ local device=${1}
+ local backing="$(where_is_mounted ${device})"
+
+ if [ -d "${backing}" ]
+ then
+ umount "${backing}" >/dev/null 2>&1
+ rmdir "${backing}" >/dev/null 2>&1
+ fi
+
+ if is_active_luks_mapping ${device}
+ then
+ /sbin/cryptsetup luksClose ${device}
+ fi
+}
+
open_luks_device ()
{
dev="${1}"
opts="${opts} --readonly"
fi
+ if /sbin/cryptsetup status "${name}" >/dev/null 2>&1
+ then
+ re="^[[:space:]]*device:[[:space:]]*\([^[:space:]]*\)$"
+ opened_dev=$(cryptsetup status ${name} 2>/dev/null | grep "${re}" | sed "s|${re}|\1|")
+ if [ "${opened_dev}" = "${dev}" ]
+ then
+ luks_device="/dev/mapper/${name}"
+ echo ${luks_device}
+ return 0
+ else
+ log_warning_msg "Cannot open luks device ${dev} since ${opened_dev} already is opened with its name"
+ return 1
+ fi
+ fi
+
load_keymap
while true
done
}
+get_gpt_name ()
+{
+ local dev="${1}"
+ /sbin/blkid -s PART_ENTRY_NAME -p -o value ${dev} 2>/dev/null
+}
+
+is_gpt_device ()
+{
+ local dev="${1}"
+ [ "$(/sbin/blkid -s PART_ENTRY_SCHEME -p -o value ${dev} 2>/dev/null)" = "gpt" ]
+}
+
+probe_for_gpt_name ()
+{
+ local overlays="${1}"
+ local snapshots="${2}"
+ local dev="${3}"
+
+ local gpt_dev="${dev}"
+ if is_active_luks_mapping ${dev}
+ then
+ # if $dev is an opened luks device, we need to check
+ # GPT stuff on the backing device
+ gpt_dev=$(get_luks_backing_device "${dev}")
+ fi
+
+ if ! is_gpt_device ${gpt_dev}
+ then
+ return
+ fi
+
+ local gpt_name=$(get_gpt_name ${gpt_dev})
+ for label in ${overlays} ${snapshots}
+ do
+ if [ "${gpt_name}" = "${label}" ]
+ then
+ echo "${label}=${dev}"
+ fi
+ done
+}
+
+probe_for_fs_label ()
+{
+ local overlays="${1}"
+ local snapshots="${2}"
+ local dev="${3}"
+
+ for label in ${overlays} ${snapshots}
+ do
+ if [ "$(/sbin/blkid -s LABEL -o value $dev 2>/dev/null)" = "${label}" ]
+ then
+ echo "${label}=${dev}"
+ fi
+ done
+}
+
+probe_for_file_name ()
+{
+ local overlays="${1}"
+ local snapshots="${2}"
+ local dev="${3}"
+
+ local ret=""
+ local backing="$(mount_persistent_media ${dev})"
+ if [ -z "${backing}" ]
+ then
+ return
+ fi
+
+ for label in ${overlays}
+ do
+ path=${backing}/${PERSISTENT_PATH}${label}
+ if [ -f "${path}" ]
+ then
+ local loopdev=$(setup_loop "${path}" "loop" "/sys/block/loop*")
+ ret="${ret} ${label}=${loopdev}"
+ fi
+ done
+ for label in ${snapshots}
+ do
+ for ext in squashfs cpio.gz ext2 ext3 ext4 jffs2
+ do
+ path="${PERSISTENT_PATH}${label}.${ext}"
+ if [ -f "${backing}/${path}" ]
+ then
+ ret="${ret} ${label}=${dev}:${backing}:${path}"
+ fi
+ done
+ done
+
+ if [ -n "${ret}" ]
+ then
+ echo ${ret}
+ else
+ umount ${backing} > /dev/null 2>&1 || true
+ fi
+}
+
find_persistent_media ()
{
# Scans devices for overlays and snapshots, and returns a whitespace
# ${white_list_devices} is non-empty, only devices in it will be
# scanned.
- overlays="${1}"
- snapshots="${2}"
- black_listed_devices="${3}"
- white_listed_devices="${4}"
+ local overlays="${1}"
+ local snapshots="${2}"
+ local white_listed_devices="${3}"
+ local ret=""
- for dev in $(storage_devices "${black_listed_devices}" "${white_listed_devices}")
+ for dev in $(storage_devices "" "${white_listed_devices}")
do
- luks_device=""
+ local result=""
- # Checking for a luks device
+ local luks_device=""
+ # Check if it's a luks device; we'll have to open the device
+ # in order to probe any filesystem it contains, like we do
+ # below. activate_custom_mounts() also depends on that any luks
+ # device already has been opened.
if echo ${PERSISTENT_ENCRYPTION} | grep -qe "\<luks\>" && \
- /sbin/cryptsetup isLuks ${dev}
+ is_luks_partition ${dev}
then
if luks_device=$(open_luks_device "${dev}")
then
continue
fi
+ # Probe for matching GPT partition names or filesystem labels
if echo ${PERSISTENT_STORAGE} | grep -qe "\<filesystem\>"
then
- for label in ${overlays} ${snapshots}
- do
- if [ "$(/sbin/blkid -s LABEL -o value $dev 2>/dev/null)" = "${label}" ]
- then
- overlays=$(echo ${overlays} | sed -e "s|\<${label}\>||")
- snapshots=$(echo ${snapshots} | sed -e "s|\<${label}\>||")
- echo "${label}=${dev}"
- # skip to the next device
- continue 2
- fi
- done
+ result=$(probe_for_gpt_name "${overlays}" "${snapshots}" ${dev})
+ if [ -n "${result}" ]
+ then
+ ret="${ret} ${result}"
+ continue
+ fi
+
+ result=$(probe_for_fs_label "${overlays}" "${snapshots}" ${dev})
+ if [ -n "${result}" ]
+ then
+ ret="${ret} ${result}"
+ continue
+ fi
fi
+ # Probe for files with matching name on mounted partition
if echo ${PERSISTENT_STORAGE} | grep -qe "\<file\>"
then
- devfstype="$(get_fstype ${dev})"
- overlay_on_dev=""
- snapshot_on_dev=""
- backing="/$(basename ${dev})-backing"
- mkdir -p "${backing}"
- if is_supported_fs ${devfstype} && try_mount "${dev}" "${backing}" "rw" "${devfstype}"
- then
- for label in ${overlays}
- do
- path=${backing}/${PERSISTENT_PATH}${label}
- if [ -f "${path}" ]
- then
- overlays=$(echo ${overlays} | sed -e "s|\<${label}\>||")
- overlay_on_dev="yes"
- echo "${label}=$(setup_loop "${path}" "loop" "/sys/block/loop*")"
- fi
- done
-
- for label in ${snapshots}
- do
- for ext in squashfs cpio.gz ext2 ext3 ext4 jffs2
- do
- path="${PERSISTENT_PATH}${label}.${ext}"
- if [ -f "${backing}/${path}" ]
- then
- snapshots=$(echo ${snapshots} | sed -e "s|\<${label}\>||")
- snapshot_on_dev="yes"
- echo "${label}=${dev}:${backing}:${path}"
- fi
- done
- done
- fi
- if [ -z "${overlay_on_dev}" ]
+ result=$(probe_for_file_name "${overlays}" "${snapshots}" ${dev})
+ if [ -n "${result}" ]
then
- umount ${backing} > /dev/null 2>&1 || true
- if [ -z "${snapshot_on_dev}" ] && [ -n "${luks_device}" ] && /sbin/cryptsetup status "${luks_device}" 1> /dev/null
- then
- /sbin/cryptsetup luksClose "${luks_device}"
- fi
+ ret="${ret} ${result}"
+ continue
fi
fi
+
+ # Close luks device if it isn't used
+ if [ -z "${result}" ] && [ -n "${luks_device}" ] && \
+ is_active_luks_mapping "${luks_device}"
+ then
+ /sbin/cryptsetup luksClose "${luks_device}"
+ fi
done
+
+ if [ -n "${ret}" ]
+ then
+ echo ${ret}
+ fi
}
get_mac ()
echo ${mac}
}
-is_luks()
+is_luks_partition ()
{
- devname="${1}"
- if [ -x /sbin/cryptsetup ]
- then
- /sbin/cryptsetup isLuks "${devname}" 2>/dev/null || ret=${?}
- return ${ret}
- else
- return 1
- fi
+ device="${1}"
+ /sbin/cryptsetup isLuks "${device}" 1>/dev/null 2>&1
+}
+
+is_active_luks_mapping ()
+{
+ device="${1}"
+ /sbin/cryptsetup status "${device}" 1>/dev/null 2>&1
+}
+get_luks_backing_device () {
+ device=${1}
+ cryptsetup status ${device} 2> /dev/null | \
+ awk '{if ($1 == "device:") print $2}'
}
removable_dev ()
echo "${ret}"
}
+
+link_files ()
+{
+ # create source's directory structure in dest, and recursively
+ # create symlinks in dest to to all files in source. if mask
+ # is non-empty, remove mask from all source paths when
+ # creating links (will be necessary if we change root, which
+ # live-boot normally does (into $rootmnt)).
+
+ # remove multiple /:s and ensure ending on /
+ local src_dir="$(trim_path ${1})/"
+ local dest_dir="$(trim_path ${2})/"
+ local src_mask="${3}"
+
+ # This check can only trigger on the inital, non-recursive call since
+ # we create the destination before recursive calls
+ if [ ! -d "${dest_dir}" ]
+ then
+ log_warning_msg "Must link_files into a directory"
+ return
+ fi
+
+ find "${src_dir}" -mindepth 1 -maxdepth 1 | while read src; do
+ local dest="${dest_dir}$(basename "${src}")"
+ if [ -d "${src}" ]
+ then
+ if [ -z "$(ls -A "${src}")" ]
+ then
+ continue
+ fi
+ if [ ! -d "${dest}" ]
+ then
+ mkdir -p "${dest}"
+ chown_ref "${src}" "${dest}"
+ chmod_ref "${src}" "${dest}"
+ fi
+ link_files "${src}" "${dest}" "${src_mask}"
+ else
+ local final_src=${src}
+ if [ -n "${src_mask}" ]
+ then
+ final_src="$(echo ${final_src} | sed "s|^${src_mask}||")"
+ fi
+ rm -rf "${dest}" 2> /dev/null
+ ln -s "${final_src}" "${dest}"
+ chown_ref "${src}" "${dest}"
+ fi
+ done
+}
+
+do_union ()
+{
+ local unionmountpoint="${1}" # directory where the union is mounted
+ local unionrw="${2}" # branch where the union changes are stored
+ local unionro1="${3}" # first underlying read-only branch (optional)
+ local unionro2="${4}" # second underlying read-only branch (optional)
+
+ if [ "${UNIONTYPE}" = "aufs" ]
+ then
+ rw_opt="rw"
+ ro_opt="rr+wh"
+ noxino_opt="noxino"
+ elif [ "${UNIONTYPE}" = "unionfs-fuse" ]
+ then
+ rw_opt="RW"
+ ro_opt="RO"
+ else
+ rw_opt="rw"
+ ro_opt="ro"
+ fi
+
+ case "${UNIONTYPE}" in
+ unionfs-fuse)
+ unionmountopts="-o cow -o noinitgroups -o default_permissions -o allow_other -o use_ino -o suid"
+ unionmountopts="${unionmountopts} ${unionrw}=${rw_opt}"
+ if [ -n "${unionro1}" ]
+ then
+ unionmountopts="${unionmountopts}:${unionro1}=${ro_opt}"
+ fi
+ if [ -n "${unionro2}" ]
+ then
+ unionmountopts="${unionmountopts}:${unionro2}=${ro_opt}"
+ fi
+ ( sysctl -w fs.file-max=391524 ; ulimit -HSn 16384
+ unionfs-fuse ${unionmountopts} "${unionmountpoint}" ) && \
+ ( mkdir -p /run/sendsigs.omit.d
+ pidof unionfs-fuse >> /run/sendsigs.omit.d/unionfs-fuse || true )
+ ;;
+
+ overlayfs)
+ # XXX: can unionro2 be used? (overlayfs only handles two dirs, but perhaps they can be chained?)
+ # XXX: and can unionro1 be optional? i.e. can overlayfs skip lowerdir?
+ unionmountopts="-o noatime,lowerdir=${unionro1},upperdir=${unionrw}"
+ mount -t ${UNIONTYPE} ${unionmountopts} ${UNIONTYPE} "${unionmountpoint}"
+ ;;
+
+ *)
+ unionmountopts="-o noatime,${noxino_opt},dirs=${unionrw}=${rw_opt}"
+ if [ -n "${unionro1}" ]
+ then
+ unionmountopts="${unionmountopts}:${unionro1}=${ro_opt}"
+ fi
+ if [ -n "${unionro2}" ]
+ then
+ unionmountopts="${unionmountopts}:${unionro2}=${ro_opt}"
+ fi
+ mount -t ${UNIONTYPE} ${unionmountopts} ${UNIONTYPE} "${unionmountpoint}"
+ ;;
+ esac
+}
+
+get_custom_mounts ()
+{
+ # Side-effect: leaves $devices with live.persist mounted in ${rootmnt}/live/persistent
+ # Side-effect: prints info to file $custom_mounts
+
+ local custom_mounts=${1}
+ shift
+ local devices=${@}
+
+ local bindings="/tmp/bindings.list"
+ local links="/tmp/links.list"
+ rm -rf ${bindings} ${links} 2> /dev/null
+
+ for device in ${devices}
+ do
+ if [ ! -b "${device}" ]
+ then
+ continue
+ fi
+
+ local device_name="$(basename ${device})"
+ local backing=$(mount_persistent_media ${device})
+ if [ -z "${backing}" ]
+ then
+ continue
+ fi
+
+ local include_list="${backing}/${persistence_list}"
+ if [ ! -r "${include_list}" ]
+ then
+ continue
+ fi
+
+ if [ -n "${DEBUG}" ] && [ -e "${include_list}" ]
+ then
+ cp ${include_list} ${rootmnt}/live/persistent/${persistence_list}.${device_name}
+ fi
+
+ while read dir options # < ${include_list}
+ do
+ if echo ${dir} | grep -qe "^[[:space:]]*\(#.*\)\?$"
+ then
+ # skipping empty or commented lines
+ continue
+ fi
+
+ if trim_path ${dir} | grep -q -e "^[^/]" -e "^/$" -e "^/live\(/.*\)\?$" -e "^/\(.*/\)\?\.\.\?\(/.*\)\?$"
+ then
+ log_warning_msg "Skipping unsafe custom mount ${dir}: must be an absolute path containing neither the \".\" nor \"..\" special dirs, and cannot be \"/live\" (or any sub-directory therein) or \"/\" (for the latter, use ${root_overlay_label}-type persistence)"
+ continue
+ fi
+
+ local opt_source=""
+ local opt_linkfiles=""
+ for opt in $(echo ${options} | tr ',' ' ');
+ do
+ case "${opt}" in
+ source=*)
+ opt_source=${opt#source=}
+ ;;
+ linkfiles)
+ opt_linkfiles="yes"
+ ;;
+ union|bind)
+ ;;
+ *)
+ log_warning_msg "Skipping custom mount with unkown option: ${opt}"
+ continue 2
+ ;;
+ esac
+ done
+
+ local source="${dir}"
+ if [ -n "${opt_source}" ]
+ then
+ if echo ${opt_source} | grep -q -e "^/" -e "^\(.*/\)\?\.\.\?\(/.*\)\?$" && [ "${source}" != "." ]
+ then
+ log_warning_msg "Skipping unsafe custom mount with option source=${opt_source}: must be either \".\" (the media root) or a relative path w.r.t. the media root that contains neither comas, nor the special \".\" and \"..\" path components"
+ continue
+ else
+ source="${opt_source}"
+ fi
+ fi
+
+ local full_source="$(trim_path ${backing}/${source})"
+ local full_dest="$(trim_path ${rootmnt}/${dir})"
+ if [ -n "${opt_linkfiles}" ]
+ then
+ echo "${device} ${full_source} ${full_dest} ${options}" >> ${links}
+ else
+ echo "${device} ${full_source} ${full_dest} ${options}" >> ${bindings}
+ fi
+ done < ${include_list}
+ done
+
+ # We sort the list according to destination so we're sure that
+ # we won't hide a previous mount. We also ignore duplicate
+ # destinations in a more or less arbitrary way.
+ [ -e "${bindings}" ] && sort -k3 -sbu ${bindings} >> ${custom_mounts} && rm ${bindings}
+
+ # After all mounts are considered we add symlinks so they
+ # won't be hidden by some mount.
+ [ -e "${links}" ] && cat ${links} >> ${custom_mounts} && rm ${links}
+
+ # We need to make sure that no two custom mounts have the same sources
+ # or are nested; if that is the case, too much weird stuff can happen.
+ local prev_source="impossible source" # first iteration must not match
+ local prev_dest=""
+ # This sort will ensure that a source /a comes right before a source
+ # /a/b so we only need to look at the previous source
+ sort -k2 -b ${custom_mounts} |
+ while read device source dest options
+ do
+ if echo ${source} | grep -qe "^${prev_source}\(/.*\)\?$"
+ then
+ panic "Two persistent mounts have the same or nested sources: ${source} on ${dest}, and ${prev_source} on ${prev_dest}"
+ fi
+ prev_source=${source}
+ prev_dest=${dest}
+ done
+}
+
+activate_custom_mounts ()
+{
+ local custom_mounts="${1}" # the ouput from get_custom_mounts()
+ local used_devices=""
+
+ while read device source dest options # < ${custom_mounts}
+ do
+ local opt_bind="yes"
+ local opt_linkfiles=""
+ local opt_union=""
+ for opt in $(echo ${options} | tr ',' ' ');
+ do
+ case "${opt}" in
+ bind)
+ opt_bind="yes"
+ unset opt_linkfiles opt_union
+ ;;
+ linkfiles)
+ opt_linkfiles="yes"
+ unset opt_bind opt_union
+ ;;
+ union)
+ opt_union="yes"
+ unset opt_bind opt_linkfiles
+ ;;
+ esac
+ done
+
+ if [ -n "$(what_is_mounted_on "${dest}")" ]
+ then
+ log_warning_msg "Skipping custom mount ${dest}: $(what_is_mounted_on "${dest}") is already mounted there"
+ continue
+ fi
+
+ if [ ! -d "${dest}" ]
+ then
+ # create the destination and delete existing files in
+ # its path that are in the way
+ path="/"
+ for dir in $(echo ${dest} | sed -e 's|/\+| |g')
+ do
+ path=$(trim_path ${path}/${dir})
+ if [ -f ${path} ]
+ then
+ rm -f ${path}
+ fi
+ if [ ! -e ${path} ]
+ then
+ mkdir -p ${path}
+ if echo ${path} | grep -qe "^${rootmnt}/*home/[^/]\+"
+ then
+ # if ${dest} is in /home try fixing proper ownership by assuming that the intended user is the first, which is usually the case
+ # FIXME: this should really be handled by live-config since we don't know for sure which uid a certain user has until then
+ chown 1000:1000 ${path}
+ fi
+ fi
+ done
+ fi
+
+ # if ${source} doesn't exist on our persistent media
+ # we bootstrap it with $dest from the live filesystem.
+ # this both makes sense and is critical if we're
+ # dealing with /etc or other system dir.
+ if [ ! -d "${source}" ]
+ then
+ if [ -n "${PERSISTENT_READONLY}" ]
+ then
+ continue
+ elif [ -n "${opt_union}" ] || [ -n "${opt_linkfiles}" ]
+ then
+ # unions and don't need to be bootstrapped
+ # linkfiles dirs can't be bootstrapped in a sensible way
+ mkdir -p "${source}"
+ chown_ref "${dest}" "${source}"
+ chmod_ref "${dest}" "${source}"
+ elif [ -n "${opt_bind}" ]
+ then
+ # ensure that $dest is not copied *into* $source
+ mkdir -p "$(dirname ${source})"
+ cp -a "${dest}" "${source}"
+ fi
+ fi
+
+ # XXX: If CONFIG_AUFS_ROBR is added to the Debian kernel we can
+ # ignore the loop below and set rofs_dest_backing=$dest
+ local rofs_dest_backing=""
+ if [ -n "${opt_linkfiles}"]
+ then
+ for d in ${rootmnt}/live/rofs/*
+ do
+ if [ -n "${rootmnt}" ]
+ then
+ rofs_dest_backing="${d}/$(echo ${dest} | sed -e "s|${rootmnt}||")"
+ else
+ rofs_dest_backing="${d}/${dest}"
+ fi
+ if [ -d "${rofs_dest_backing}" ]
+ then
+ break
+ else
+ rofs_dest_backing=""
+ fi
+ done
+ fi
+
+ if [ -n "${opt_linkfiles}" ] && [ -z "${PERSISTENT_READONLY}" ]
+ then
+ link_files ${source} ${dest} ${rootmnt}
+ elif [ -n "${opt_linkfiles}" ] && [ -n "${PERSISTENT_READONLY}" ]
+ then
+ mkdir -p ${rootmnt}/live/persistent
+ local links_source=$(mktemp -d ${rootmnt}/live/persistent/links-source-XXXXXX)
+ chown_ref ${source} ${links_source}
+ chmod_ref ${source} ${links_source}
+ # We put the cow dir in the below strange place to
+ # make it absolutely certain that the link source
+ # has its own directory and isn't nested with some
+ # other custom mount (if so that mount's files would
+ # be linked, causing breakage.
+ if [ -n "${rootmnt}" ]
+ then
+ local cow_dir="/cow/live/persistent/$(basename ${links_source})"
+ else
+ # This is happens if persistence is activated
+ # post boot
+ local cow_dir="/live/cow/live/persistent/$(basename ${links_source})"
+ fi
+ mkdir -p ${cow_dir}
+ chown_ref "${source}" "${cow_dir}"
+ chmod_ref "${source}" "${cow_dir}"
+ do_union ${links_source} ${cow_dir} ${source} ${rofs_dest_backing}
+ link_files ${links_source} ${dest} ${rootmnt}
+ elif [ -n "${opt_union}" ] && [ -z "${PERSISTENT_READONLY}" ]
+ then
+ do_union ${dest} ${source} ${rofs_dest_backing}
+ elif [ -n "${opt_bind}" ] && [ -z "${PERSISTENT_READONLY}" ]
+ then
+ mount --bind "${source}" "${dest}"
+ elif [ -n "${opt_bind}" -o -n "${opt_union}" ] && [ -n "${PERSISTENT_READONLY}" ]
+ then
+ # bind-mount and union mount are handled the same
+ # in read-only mode, but note that rofs_dest_backing
+ # is non-empty (and necessary) only for unions
+ if [ -n "${rootmnt}" ]
+ then
+ local cow_dir="$(echo ${dest} | sed -e "s|^${rootmnt}|/cow/|")"
+ else
+ # This is happens if persistence is activated
+ # post boot
+ local cow_dir="/live/cow/${dest}"
+ fi
+ if [ -e "${cow_dir}" ] && [ -z "${opt_linkfiles}" ]
+ then
+ # If an earlier custom mount has files here
+ # it will "block" the current mount's files
+ # which is undesirable
+ rm -rf "${cow_dir}"
+ fi
+ mkdir -p ${cow_dir}
+ chown_ref "${source}" "${cow_dir}"
+ chmod_ref "${source}" "${cow_dir}"
+ do_union ${dest} ${cow_dir} ${source} ${rofs_dest_backing}
+ fi
+
+ PERSISTENCE_IS_ON="1"
+ export PERSISTENCE_IS_ON
+
+ if echo ${used_devices} | grep -qve "^\(.* \)\?${device}\( .*\)\?$"
+ then
+ used_devices="${used_devices} ${device}"
+ fi
+ done < ${custom_mounts}
+
+ echo ${used_devices}
+}
+
+fix_home_rw_compatibility ()
+{
+ local device=${1}
+
+ if [ -n "${PERSISTENT_READONLY}" ]
+ then
+ return
+ fi
+
+ local backing="$(mount_persistent_media ${device})"
+ if [ -z "${backing}" ]
+ then
+ return
+ fi
+
+ local include_list="${backing}/${persistence_list}"
+ if [ ! -r "${include_list}" ]
+ then
+ echo "# home-rw backwards compatibility:
+/home source=." > "${include_list}"
+ fi
+}