anaconda: update to 21.48.21-1

Apply diff anaconda-20.25.16-1..anaconda-21.48.21-1
This commit is contained in:
Marek Marczykowski-Górecki 2015-03-23 12:36:12 +01:00 committed by Jon Griffiths
parent 55337a39dd
commit 3e63d1dd37
480 changed files with 287788 additions and 151840 deletions

View File

@ -1,4 +1,4 @@
[anaconda.f20-branch]
[anaconda.f21-branch]
file_filter = po/<lang>.po
source_file = po/anaconda.pot
source_lang = en

View File

@ -1,12 +1,12 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, USA
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@ -55,8 +55,8 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@ -225,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
Appendix: How to Apply These Terms to Your New Programs
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
@ -291,7 +291,7 @@ convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -303,16 +303,16 @@ the "copyright" line and a pointer to where the full notice is found.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
@ -335,5 +335,5 @@ necessary. Here is a sample; alter the names:
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

View File

@ -19,10 +19,17 @@
ACLOCAL_AMFLAGS = -I m4
AM_DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
SUBDIRS = data docs dracut po pyanaconda scripts tests widgets utils
EXTRA_DIST = config.rpath COPYING
# Files generated for gettext need to be included in the distribution
EXTRA_DIST += $(srcdir)/anaconda.po
$(srcdir)/anaconda.po: $(srcdir)/anaconda
@$(MAKE) -C $(top_builddir)/po $(abs_top_srcdir)/$(subdir)/$$(basename $@)
MAINTAINERCLEANFILES = Makefile.in config.guess config.h.in config.sub \
depcomp install-sh ltmain.sh missing ABOUT-NLS \
INSTALL aclocal.m4 configure *.pyc py-compile \
@ -31,32 +38,37 @@ MAINTAINERCLEANFILES = Makefile.in config.guess config.h.in config.sub \
CLEANFILES = *~
MOSTLYCLEANDIRS = m4
dist_noinst_DATA = $(PACKAGE_NAME).spec
dist_sbin_SCRIPTS = anaconda
ARCHIVE_TAG = $(PACKAGE_NAME)-$(PACKAGE_VERSION)-$(PACKAGE_RELEASE)
TX_PULL_ARGS = -a --disable-overwrite
TX_PULL_ARGS = -a -f
TX_PUSH_ARGS = -s
INSTALLATION_GUIDE_REPO_URL = git://git.fedorahosted.org/git/docs/install-guide.git
tag:
@git tag -s -a -m "Tag as $(ARCHIVE_TAG)" $(ARCHIVE_TAG)
@echo "Tagged as $(ARCHIVE_TAG)"
po-pull:
rm -f $(srcdir)/po/en@boldquot.gmo $(srcdir)/po/en@boldquot.po
rm -f $(srcdir)/po/en@quot.gmo $(srcdir)/po/en@quot.po
rpm -q transifex-client &>/dev/null || ( echo "need to run: yum install transifex-client"; exit 1 )
tx pull $(TX_PULL_ARGS)
scratch: po-pull
po-empty:
for lingua in $$(grep -v '^#' $(srcdir)/po/LINGUAS) ; do \
[ -f $(srcdir)/po/$$lingua.po ] || \
msginit -i $(srcdir)/po/$(PACKAGE_NAME).pot -o $(srcdir)/po/$$lingua.po --no-translator || \
exit 1 ; \
done
scratch: po-empty get-help
$(MAKE) ARCHIVE_TAG=HEAD dist
git checkout -- $(srcdir)/po/$(PACKAGE_NAME).pot
scratch-bumpver: po-pull
scratch-bumpver: po-empty get-help
@opts="-n $(PACKAGE_NAME) -v $(PACKAGE_VERSION) -r $(PACKAGE_RELEASE) -b $(PACKAGE_BUGREPORT)" ; \
if [ ! -z "$(IGNORE)" ]; then \
opts="$${opts} -i $(IGNORE)" ; \
@ -67,10 +79,13 @@ scratch-bumpver: po-pull
if [ ! -z "$(BZDEBUG)" ]; then \
opts="$${opts} -d" ; \
fi ; \
if [ ! -z "$(SKIP_ACKS)" ]; then \
opts="$${opts} -s" ; \
fi ; \
( cd $(srcdir) && scripts/makebumpver $${opts} ) || exit 1 ; \
$(MAKE) -C po $(PACKAGE_NAME).pot-update ;
release:
release: get-help
$(MAKE) dist && $(MAKE) tag && git checkout -- $(srcdir)/po/$(PACKAGE_NAME).pot
api:
@ -87,6 +102,9 @@ bumpver: po-pull
if [ ! -z "$(BZDEBUG)" ]; then \
opts="$${opts} -d" ; \
fi ; \
if [ ! -z "$(SKIP_ACKS)" ]; then \
opts="$${opts} -s" ; \
fi ; \
( cd $(srcdir) && scripts/makebumpver $${opts} ) || exit 1 ; \
$(MAKE) -C po $(PACKAGE_NAME).pot-update && \
tx push $(TX_PUSH_ARGS)
@ -172,3 +190,24 @@ runglade:
GLADE_CATALOG_SEARCH_PATH=$(srcdir)/widgets/glade \
GLADE_MODULE_SEARCH_PATH=$(builddir)/widgets/src/.libs \
glade ${GLADE_FILE}
# Get content for the Anaconda built-in help system by cloning the
# installation guide git repository and running the help processing
# script (it is part of the repository).
# Once the help content has been generated copy it to our help folder,
# so that it can be included in the tarball.
# Skip the git clone if the repository already exists but run git pull
# to make sure it is up to date. We also clone the repository
# without history as it si rather big (>400 MB!), which is quite
# an overkill for <100 kB of help conent. :)
get-help:
if [ ! -d "install-guide" ]; then \
if [ -f "installation_guide_repo_url" ]; then \
git clone --depth=1 `cat installation_guide_repo_url` ; \
else \
git clone --depth=1 $(INSTALLATION_GUIDE_REPO_URL) ; \
fi ; \
fi ; \
( cd install-guide && git pull --rebase && python prepare_anaconda_help_content.py )
cp -r install-guide/anaconda_help_content/* $(srcdir)/data/help

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2488
anaconda/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -20,7 +20,7 @@
m4_define(python_required_version, 2.5)
AC_PREREQ([2.63])
AC_INIT([anaconda], [20.25.16], [anaconda-devel-list@redhat.com])
AC_INIT([anaconda], [21.48.21], [anaconda-devel-list@redhat.com])
AM_INIT_AUTOMAKE([foreign no-dist-gzip dist-bzip2 tar-ustar])
AC_CONFIG_HEADERS([config.h])
@ -37,6 +37,7 @@ AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_LIBTOOL
AC_PROG_MKDIR_P
# Check for the intltool programs
# These checks and subsitutions are adapted IT_PROG_INTLTOOL provided in
@ -64,64 +65,26 @@ INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(
AC_SUBST(INTLTOOL_DESKTOP_RULE)
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION([0.18.1])
# Checks for libraries.
AC_CHECK_LIB([X11], [XGetWindowAttributes],
[AC_SUBST(X11_LIBS, [-lX11])],
[AC_MSG_FAILURE([*** libX11 not usable.])])
AC_CHECK_LIB([audit], [audit_open],
[AC_SUBST(AUDIT_LIBS, [-laudit])],
[AC_MSG_FAILURE([*** libaudit not usable.])])
AC_CHECK_LIB([z], [zlibVersion],
[AC_SUBST(ZLIB_LIBS, [-lz])],
[AC_MSG_FAILURE([*** libz not usable.])])
# Also update in gettextver in anaconda.spec.in
AM_GNU_GETTEXT_VERSION([0.18.3])
# Checks for header files.
AC_PATH_X
AC_FUNC_ALLOCA
AC_HEADER_RESOLV
AC_HEADER_MAJOR
AC_CHECK_HEADERS([argz.h arpa/inet.h fcntl.h inttypes.h libintl.h limits.h \
malloc.h netdb.h netinet/in.h stddef.h stdint.h stdlib.h \
string.h strings.h sys/ioctl.h sys/mount.h sys/param.h \
sys/socket.h sys/time.h sys/vfs.h syslog.h termios.h \
unistd.h utime.h wchar.h],
AC_CHECK_HEADERS([fcntl.h stdlib.h string.h sys/time.h unistd.h],
[],
[AC_MSG_FAILURE([*** Header file $ac_header not found.])],
[])
# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_UID_T
AC_C_INLINE
AC_TYPE_INT32_T
AC_TYPE_MODE_T
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T
AC_CHECK_MEMBERS([struct stat.st_rdev])
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
AC_TYPE_UINT8_T
AC_TYPE_INT64_T
# Checks for library functions.
AC_FUNC_CHOWN
AC_FUNC_ERROR_AT_LINE
AC_FUNC_FORK
AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
AC_FUNC_MALLOC
AC_FUNC_MMAP
AC_FUNC_REALLOC
AC_CHECK_FUNCS([dup2 fdatasync ftruncate getcwd gethostbyname gettimeofday \
lchown memmove memset mkdir mkfifo munmap realpath select \
setenv sethostname socket strcasecmp strchr strcspn strdup \
strerror strncasecmp strndup strrchr strstr strtol strtoul \
strverscmp uname utime wcwidth],
AC_CHECK_FUNCS([getcwd memset mkdir strchr strdup],
[],
[AC_MSG_FAILURE([*** Required function $ac_func not found.])])
@ -142,14 +105,6 @@ PKG_CHECK_MODULES([PYTHON], [python], [
# Check for libraries we need that provide pkg-config scripts
PKG_PROG_PKG_CONFIG([0.23])
PKG_CHECK_MODULES([X11], [x11 >= 1.3])
PKG_CHECK_MODULES([XCOMPOSITE], [xcomposite >= 0.4.1])
PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16.1])
PKG_CHECK_MODULES([GTK_X11], [gtk+-x11-3.0 >= 3.0])
PKG_CHECK_MODULES([GDK], [gdk-3.0])
PKG_CHECK_MODULES([NETWORKMANAGER], [NetworkManager >= 0.7.1])
PKG_CHECK_MODULES([LIBNL], [libnl-1 >= 1.0])
PKG_CHECK_MODULES([LIBNM_GLIB], [libnm-glib >= 0.7.1 libnm-util >= 0.7.1])
PKG_CHECK_MODULES([RPM], [rpm >= 4.10.0])
PKG_CHECK_MODULES([LIBARCHIVE], [libarchive >= 3.0.4])
@ -216,7 +171,7 @@ AC_CANONICAL_BUILD
s_arch="`echo $build_cpu | sed -e s/i.86/i386/ -e s/powerpc.*/ppc/`"
AM_CONDITIONAL(IS_LIVEINST_ARCH,
[test x$s_arch = xppc || test x$s_arch = xi386 || test x$s_arch = xx86_64])
[test x$s_arch = xppc || test x$s_arch = xppc64 || test x$s_arch = xppc64le || test x$s_arch = xi386 || test x$s_arch = xx86_64])
AC_CONFIG_SUBDIRS([widgets])
@ -230,30 +185,18 @@ AC_CONFIG_FILES([Makefile
data/liveinst/console.apps/Makefile
data/liveinst/gnome/Makefile
data/liveinst/pam.d/Makefile
data/pixmaps/Makefile
data/icons/Makefile
data/icons/hicolor/Makefile
data/icons/hicolor/16x16/Makefile
data/icons/hicolor/16x16/apps/Makefile
data/icons/hicolor/22x22/Makefile
data/icons/hicolor/22x22/apps/Makefile
data/icons/hicolor/24x24/Makefile
data/icons/hicolor/24x24/apps/Makefile
data/icons/hicolor/32x32/Makefile
data/icons/hicolor/32x32/apps/Makefile
data/icons/hicolor/48x48/Makefile
data/icons/hicolor/48x48/apps/Makefile
data/icons/hicolor/256x256/Makefile
data/icons/hicolor/256x256/apps/Makefile
data/systemd/Makefile
data/help/Makefile
data/help/en-US/Makefile
po/Makefile.in
scripts/Makefile
pyanaconda/Makefile
pyanaconda/version.py
pyanaconda/isys/Makefile
pyanaconda/packaging/Makefile
pyanaconda/ui/Makefile
pyanaconda/ui/categories/Makefile
pyanaconda/ui/lib/Makefile
pyanaconda/ui/gui/categories/Makefile
pyanaconda/ui/gui/hubs/Makefile
pyanaconda/ui/gui/spokes/Makefile
pyanaconda/ui/gui/spokes/advstorage/Makefile

272
anaconda/configure.ac.orig Normal file
View File

@ -0,0 +1,272 @@
# configure.ac for anaconda
#
# Copyright (C) 2009 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Author: David Cantrell <dcantrell@redhat.com>
m4_define(python_required_version, 2.5)
AC_PREREQ([2.63])
AC_INIT([anaconda], [20.25.16], [anaconda-devel-list@redhat.com])
AM_INIT_AUTOMAKE([foreign no-dist-gzip dist-bzip2 tar-ustar])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
AC_DEFINE_UNQUOTED([BUILD_DATE], ["`date +%m%d%Y`"], [Date of anaconda build])
AM_SILENT_RULES([yes]) # make --enable-silent-rules the default.
# Checks for programs.
AC_PROG_AWK
AC_PROG_GREP
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_LIBTOOL
# Check for the intltool programs
# These checks and subsitutions are adapted IT_PROG_INTLTOOL provided in
# intltool.m4, but without the parts where it breaks gettext.
AC_PATH_PROG([INTLTOOL_EXTRACT], [intltool-extract])
AC_PATH_PROG([INTLTOOL_MERGE], [intltool-merge])
AS_IF([test -z "$INTLTOOL_EXTRACT" -o -z "$INTLTOOL_MERGE"],
[AC_MSG_ERROR([*** intltool not found])])
# Add the bits for Makefile rules
INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))'
INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))'
INTLTOOL__v_MERGE_0='@echo " ITMRG " $@;'
INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))'
intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))'
intltool__v_merge_options_0='-q'
AC_SUBST(INTLTOOL_V_MERGE)
AC_SUBST(INTLTOOL__v_MERGE_)
AC_SUBST(INTLTOOL__v_MERGE_0)
AC_SUBST(INTLTOOL_V_MERGE_OPTIONS)
AC_SUBST(intltool__v_merge_options_)
AC_SUBST(intltool__v_merge_options_0)
INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
AC_SUBST(INTLTOOL_DESKTOP_RULE)
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION([0.18.1])
# Checks for libraries.
AC_CHECK_LIB([X11], [XGetWindowAttributes],
[AC_SUBST(X11_LIBS, [-lX11])],
[AC_MSG_FAILURE([*** libX11 not usable.])])
AC_CHECK_LIB([audit], [audit_open],
[AC_SUBST(AUDIT_LIBS, [-laudit])],
[AC_MSG_FAILURE([*** libaudit not usable.])])
AC_CHECK_LIB([z], [zlibVersion],
[AC_SUBST(ZLIB_LIBS, [-lz])],
[AC_MSG_FAILURE([*** libz not usable.])])
# Checks for header files.
AC_PATH_X
AC_FUNC_ALLOCA
AC_HEADER_RESOLV
AC_HEADER_MAJOR
AC_CHECK_HEADERS([argz.h arpa/inet.h fcntl.h inttypes.h libintl.h limits.h \
malloc.h netdb.h netinet/in.h stddef.h stdint.h stdlib.h \
string.h strings.h sys/ioctl.h sys/mount.h sys/param.h \
sys/socket.h sys/time.h sys/vfs.h syslog.h termios.h \
unistd.h utime.h wchar.h],
[],
[AC_MSG_FAILURE([*** Header file $ac_header not found.])],
[])
# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_UID_T
AC_C_INLINE
AC_TYPE_INT32_T
AC_TYPE_MODE_T
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T
AC_CHECK_MEMBERS([struct stat.st_rdev])
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
AC_TYPE_UINT8_T
AC_TYPE_INT64_T
# Checks for library functions.
AC_FUNC_CHOWN
AC_FUNC_ERROR_AT_LINE
AC_FUNC_FORK
AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
AC_FUNC_MALLOC
AC_FUNC_MMAP
AC_FUNC_REALLOC
AC_CHECK_FUNCS([dup2 fdatasync ftruncate getcwd gethostbyname gettimeofday \
lchown memmove memset mkdir mkfifo munmap realpath select \
setenv sethostname socket strcasecmp strchr strcspn strdup \
strerror strncasecmp strndup strrchr strstr strtol strtoul \
strverscmp uname utime wcwidth],
[],
[AC_MSG_FAILURE([*** Required function $ac_func not found.])])
AM_PATH_PYTHON(python_required_version)
# Check for the python extension paths
PKG_CHECK_MODULES([PYTHON], [python], [
LIBS_save="$LIBS"
LIBS="$LIBS $PYTHON_LIBS"
AC_MSG_CHECKING([Python libraries])
AC_TRY_LINK_FUNC([Py_Initialize],
[AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])
AC_MSG_FAILURE([*** Unable to use python library])])
LIBS="$LIBS_save"
],
[AC_MSG_FAILURE([*** Unable to find python library])])
# Check for libraries we need that provide pkg-config scripts
PKG_PROG_PKG_CONFIG([0.23])
PKG_CHECK_MODULES([X11], [x11 >= 1.3])
PKG_CHECK_MODULES([XCOMPOSITE], [xcomposite >= 0.4.1])
PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16.1])
PKG_CHECK_MODULES([GTK_X11], [gtk+-x11-3.0 >= 3.0])
PKG_CHECK_MODULES([GDK], [gdk-3.0])
PKG_CHECK_MODULES([NETWORKMANAGER], [NetworkManager >= 0.7.1])
PKG_CHECK_MODULES([LIBNL], [libnl-1 >= 1.0])
PKG_CHECK_MODULES([LIBNM_GLIB], [libnm-glib >= 0.7.1 libnm-util >= 0.7.1])
PKG_CHECK_MODULES([RPM], [rpm >= 4.10.0])
PKG_CHECK_MODULES([LIBARCHIVE], [libarchive >= 3.0.4])
# Set $RPM_OPT_FLAGS if we don't have it
if test -z $RPM_OPT_FLAGS ; then
CFLAGS="$CFLAGS -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions"
else
CFLAGS="$CFLAGS $RPM_OPT_FLAGS"
fi
# NFS support can, in theory, be enabled or disabled
AC_ARG_ENABLE(nfs,
AC_HELP_STRING([--enable-nfs],
[enable NFS support (default is yes)]),
[nfs=$enableval],
[nfs=yes])
# IPv6 support can be enabled or disabled
AC_ARG_ENABLE(ipv6,
AC_HELP_STRING([--enable-ipv6],
[enable IPv6 support (default is yes)]),
[ipv6=$enableval],
[ipv6=yes])
if test x$ipv6 = xyes ; then
AC_SUBST(IPV6_CFLAGS, [-DENABLE_IPV6])
fi
# GCC likes to bomb out on some ridiculous warnings. Add your favorites
# here.
SHUT_UP_GCC="-Wno-unused-result"
# Add remaining compiler flags we want to use
CFLAGS="$CFLAGS -Wall -Werror $SHUT_UP_GCC -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE"
# Filter CFLAGS (remove duplicate flags)
cflags_filter() {
have=
first=1
for flag in $* ; do
if test -z "`echo $have | grep -- $flag`" ; then
if test x$first == x1 ; then
first=2
else
echo -n " "
fi
echo -n $flag
have="$have $flag"
fi
done
}
CFLAGS="`cflags_filter $CFLAGS`"
# Unset $(LIBS) because different programs and libraries will have different
# lists of libraries to link with, we don't want everything linking against
# all libraries we checked for.
LIBS=
# Get the release number from the spec file
rel="`awk '/Release:/ { split($2, r, "%"); print r[[1]] }' $srcdir/anaconda.spec`"
AC_SUBST(PACKAGE_RELEASE, [$rel])
# Perform arch related tests
AC_CANONICAL_BUILD
s_arch="`echo $build_cpu | sed -e s/i.86/i386/ -e s/powerpc.*/ppc/`"
AM_CONDITIONAL(IS_LIVEINST_ARCH,
[test x$s_arch = xppc || test x$s_arch = xi386 || test x$s_arch = xx86_64])
AC_CONFIG_SUBDIRS([widgets])
AC_CONFIG_FILES([Makefile
data/Makefile
data/command-stubs/Makefile
docs/Makefile
dracut/Makefile
pyanaconda/installclasses/Makefile
data/liveinst/Makefile
data/liveinst/console.apps/Makefile
data/liveinst/gnome/Makefile
data/liveinst/pam.d/Makefile
data/pixmaps/Makefile
data/icons/Makefile
data/icons/hicolor/Makefile
data/icons/hicolor/16x16/Makefile
data/icons/hicolor/16x16/apps/Makefile
data/icons/hicolor/22x22/Makefile
data/icons/hicolor/22x22/apps/Makefile
data/icons/hicolor/24x24/Makefile
data/icons/hicolor/24x24/apps/Makefile
data/icons/hicolor/32x32/Makefile
data/icons/hicolor/32x32/apps/Makefile
data/icons/hicolor/48x48/Makefile
data/icons/hicolor/48x48/apps/Makefile
data/icons/hicolor/256x256/Makefile
data/icons/hicolor/256x256/apps/Makefile
data/systemd/Makefile
po/Makefile.in
scripts/Makefile
pyanaconda/Makefile
pyanaconda/isys/Makefile
pyanaconda/packaging/Makefile
pyanaconda/ui/Makefile
pyanaconda/ui/lib/Makefile
pyanaconda/ui/gui/categories/Makefile
pyanaconda/ui/gui/hubs/Makefile
pyanaconda/ui/gui/spokes/Makefile
pyanaconda/ui/gui/spokes/advstorage/Makefile
pyanaconda/ui/gui/spokes/lib/Makefile
pyanaconda/ui/gui/tools/Makefile
pyanaconda/ui/gui/Makefile
pyanaconda/ui/tui/hubs/Makefile
pyanaconda/ui/tui/simpleline/Makefile
pyanaconda/ui/tui/spokes/Makefile
pyanaconda/ui/tui/tools/Makefile
pyanaconda/ui/tui/Makefile
data/post-scripts/Makefile
tests/Makefile
utils/Makefile
utils/dd/Makefile])
AC_OUTPUT

View File

@ -17,7 +17,7 @@
#
# Author: Martin Sivak <msivak@redhat.com>
SUBDIRS = command-stubs icons liveinst pixmaps systemd post-scripts
SUBDIRS = command-stubs liveinst systemd post-scripts help
CLEANFILES = *~
@ -25,4 +25,7 @@ dist_pkgdata_DATA = interactive-defaults.ks \
tmux.conf \
anaconda-gtk.css
helpdir = $(datadir)/$(PACKAGE_NAME)
dist_help_DATA = anaconda_options.txt
MAINTAINERCLEANFILES = Makefile.in

View File

@ -109,3 +109,94 @@
.error {
text-shadow: none;
}
/* vendor-specific colors/images */
@define-color redhat #41413e;
@define-color fedora #2f4265;
/* logo and sidebar classes for Fedora */
/* The sidebar consists of three parts: a background, a logo, and a product logo,
* rendered in that order. The product logo is empty by default and is intended
* to be overridden by a stylesheet in product.img.
*/
.logo-sidebar {
background-image: url('/usr/share/anaconda/pixmaps/sidebar-bg.png');
background-color: @fedora;
background-repeat: no-repeat;
}
/* Add a logo to the sidebar */
.logo {
background-image: url('/usr/share/anaconda/pixmaps/sidebar-logo.png');
background-position: 50% 20px;
background-repeat: no-repeat;
background-color: transparent;
}
/* This is a placeholder to be filled by a product-specific logo. */
.product-logo {
background-image: none;
background-color: transparent;
}
AnacondaSpokeWindow #nav-box {
background-color: @fedora;
background-image: url('/usr/share/anaconda/pixmaps/topbar-bg.png');
background-repeat: repeat;
color: white;
}
/* Remove the box-shadow from buttons in the nav-box because it adds a white stripe
* below the buttons and makes them look dumb */
AnacondaSpokeWindow #nav-box GtkButton {
box-shadow: none;
}
AnacondaSpokeWindow #nav-box {
background-color: @fedora;
}
/* These rules were removed when the Adwaita theme moved from
* gnome-themes-standard to gtk. The selectors had been wildcards, but after
* the move they were replaced with more specific selectors, because gtk is
* maintained by garbage people who don't care about how anyone else's
* applications look. We need to apply the old style to anconda's custom
* widgets in order for the selection highlight and insensitive shading to
* appear.
*/
@define-color anaconda_selected_bg_color #4a90d9;
@define-color anaconda_selected_fg_color #ffffff;
AnacondaMountpointSelector:selected,
AnacondaDiskOverview:selected,
AnacondaSpokeSelector:selected,
AnacondaMountpointSelector:selected:focus,
AnacondaDiskOverview:selected:focus,
AnacondaSpokeSelector:selected:focus {
background-color: @anaconda_selected_bg_color;
color: @anaconda_selected_fg_color;
}
@define-color anaconda_insensitive_bg_color #f4f4f2;
@define-color anaconda_insensitive_fg_color #a7aba7;
@define-color anaconda_internal_element_color #888a85;
@define-color anaconda_insensitive_borders shade(@anaconda_internal_element_color, 1.37);
AnacondaMountpointSelector:insensitive,
AnacondaDiskOverview:insensitive,
AnacondaSpokeSelector:insensitive {
background-color: @anaconda_insensitive_bg_color;
color: @anaconda_insensitive_fg_color;
border-color: @anaconda_insensitive_borders;
}
/* When multi-column GtkTreeViews set a row separator, the horizontal-separator
* style property is still applied to the row separator, breaking the row
* separator up for each column. It looks kind of dumb. Provide a way to not do
* that.
*/
GtkTreeView.solid-separator {
-GtkTreeView-horizontal-separator: 0;
}

View File

@ -0,0 +1,233 @@
cmdline
Force command line installation mode. This mode simply prints out text and does not allow any interactivity.
All options must be specified either in a kickstart file or on the command line. If all required options
are not specified, the installation will terminate immediately. If running in PXE, network or media
installation mode Anaconda will also reboot the machine. This can be prevented by passing the "inst.nokill"
boot option.
graphical
Force graphical installation. A graphical installation implies that the installed system will
boot up into graphical.target, using whichever display manager is in use by the default desktop
(gdm for GNOME, kdm for KDE).
text
Force text mode installation. This also implies that the installed system will boot up in text mode
instead of to the graphical login screen.
proxy
Use the given proxy settings when performing an installation from a HTTP/HTTPS/FTP source.
The PROXY_URL can be specified like this: [PROTOCOL://][USERNAME[:PASSWORD]@]HOST[:PORT]
debug
Show debug level messages in the log watching consoles.
This basically a shortcut for for loglevel=debug.
ks
Gives the location of the kickstart file to be used for installation. The KICKSTART_URL
supports fetching kickstarts from HTTP/S, FTP, NFS, from a local file, from a local
harddrive, from an optical disk and from BIOS RAID sets. For details on the KICKSTART_URL
syntax see the Anaconda options wiki page: http://fedoraproject.org/wiki/Anaconda_Boot_Options
kickstart
Gives the local file path to use for kickstart. Normally only used when running anaconda
from the cmdline.
rescue
Start the rescue environment instead of installation.
armplatform
Can be used to specify the ARM platform for the installation by passing the appropriate PLATFORM_ID.
multilib
Enable yum's multlib_policy of "all" instead of the default of "best".
method
This option is deprecated in favor of the repo option. For now, it does the same thing as repo,
but will be removed in the future.
askmethod
Do not automatically configure the Installation Source spoke, but require the user to enter it and
choose an option. If you don't want to wait for the default configuration to be processed before
you can enter the spoke and change it, you can pass this option.
repo
This option tells Anaconda where to find the packages for installation. This option must point to a
valid yum repository (or, for some protocols, a Fedora DVD ISO image). It is analogous to the older
method option, but repo makes it more clear exactly what is meant. This option may appear only once
on the command line. It corresponds to the kickstart command install (whereas kickstart command repo
is used for additional repositories). As of Fedora 16, you can (optionally) add a specific .iso file
to the path. If no inst.root or inst.stage2 parameter is passed, this location will also be used
as the source for the installer runtime image.
For more information about the REPO_URL format check the Anaconda option documentation, available on:
http://fedoraproject.org/wiki/Anaconda_Boot_Options
stage2
The STAGE2_URL specifies a path to a repository containing a stage2 (squashfs.img) file instead of to an
installation source. Follows the same syntax as the repo option. If this parameter is provided,
it takes precedence over all other methods of finding the install.img. Otherwise, Anaconda will attempt
to find the install.img first on any existing CD, and then from the location given by repo.
If only the stage2 option is given without repo, Anaconda will use whatever repos the installed
system would have enabled by default for installation. For instance, an install of a Fedora release
will attempt to use the Fedora mirrorlist given by /etc/yum.repos.d/fedora.repo from that release.
noverifyssl
Prevents Anaconda from verifying the ssl certificate for all HTTPS connections with an exception of the
additional kickstart repos (where --noverifyssl can be set per repo).
liveinst
Run in live installation mode.
resolution
Run GUI installer in the resolution specified, "1024x768" for example.
usefbx
Use the framebuffer X driver instead of attempting to use a hardware-specific one.
vnc
Enable VNC-based installation. You will need to connect to the machine using a VNC client application.
A VNC install implies that the installed system will boot up in runlevel 3 instead of to the graphical
login screen. The VNC session will be shared. Consider setting a VNC password using the vncpassword
option.
vncconnect
Once installation is up and running, connect to the VNC client named HOST, and optionally use port PORT.
vncpassword
Enable a password for the VNC connection. This will prevent someone from inadvertently connecting
to the vnc-based installation. Requires the VNC option to be specified as well. If you have specified
vncconnect the PASSWORD will not be used unless connection to host is not possible. Please note that
the password needs to be 6 to 8 characters long (limitation of the VNC protocol).
xdriver
Use DRIVER as the X driver to use during installation as well as on the installed system.
keymap
Keyboard layout to use during installation and on the installed system. Valid KEYMAP values
are those which can be used for the keyboard kickstart command.
lang
Language to use for the installation. LANG should be a language code which is valid to be used
with the lang kickstart command.
loglevel
Set the minimum level required for messages to be logged on a terminal (log files always
contain messages of all levels). Values for LEVEL are "debug", "info", "warning", "error",
"critical" and "lock" (the "lock" level has been added in F21 and is used for debugging YUM locking).
The default value is "info".
syslog
Once installation is up and running, send log messages to the syslog process on HOST,
and optionally, on TCP port PORT. Requires the remote syslog process to accept incoming
connections.
noselinux
Disable SELinux usage on the installed system.
selinux
Enable SELinux usage in the installed system (default). Note that when used as a boot option,
"selinux" and "inst.selinux" are not the same. The "selinux" option is picked up by both the kernel
and Anaconda, but "inst.selinux" is processed only by Anaconda. So when "selinux=0" is used,
SELinux will be disabled both in the installation environment and in the installed system,
but when "inst.selinux=0" is used SELinux will only be disabled in the installed system.
Also note that while SELinux is running in the installation environment by default, it is
running in permissive mode so disabling it there does not make much sense.
nompath
Disable support for multipath devices. This is for systems on which a false-positive is encountered
which erroneously identifies a normal block device as a multipath device. There is no other reason
to use this option. Warning: Don't use nompath with actual multipath hardware! Using this to attempt
to install to a single path of a multipath is ill-advised, and not supported.
mpath
Enable multipath support during the installation (default)
nodmraid
Disable dmraid usage during the installation.
dmraid
Enable dmraid (Device Mapper software RAID) usage during the installation (default).
noibft
Disable iBFT usage during the installation.
ibft
Enable iBFT (iSCSI Boot Firmware Table) usage during the installation (default).
geoloc
Configure geolocation usage in Anaconda. Geolocation is used to pre-set language and time zone.
The following values for PROVIDER_ID are supported: 0 - disable geolocation, "provider_fedora_geoip"
- use the Fedora GeoIP API (default) and "provider_hostip" - use the Hostip.info GeoIP API.
nomount
Don't automatically mount any installed Linux partitions in rescue mode.
updates
Path to an updates image that is on local filesystem or available over FTP or HTTP.
UPDATES_URL must be either a local filesystem path, a network URL or <disk>:<path> where
<disk> can be one of sdX, /dev/sdX, LABEL=xxx, UUID=xxx and <path> defaults
to /updates.img if missing. See the Anaconda docs for more details about the path specification.
Please note that the updates image only updates the installation environment and is completely
unrelated to package updates.
dirinstall
Use the device mounted at /mnt/sysimage as the installation
destination. The --dirinstall and --image options are mutually
exclusive. The /mnt/sysimage directory can be overridden by
setting the ANACONDA_ROOT_PATH environmental variable before
starting anaconda.
image
Specification of disk image file to be used as installation
destination. IMAGE_SPEC must have format <path>[:<name>] where
<path> specifies the path of an image file and an optional <name>
component is used to identify the disk during installation.
<path> must be a local path but it may be relative or absolute.
If <name> is not specified, a name is synthesized from the
basename of <path>. <name> may not contain a colon or a slash.
This option may be used multiple times to specify multiple disk
images. It is an error to specify the same <path> twice or to use
duplicate names. The --image and --dirinstall options are
mutually exclusive.
memcheck
Check if the system has enough RAM to complete the installation
and abort if it doesn't. Please note that this check is approximate
and that memory usage during installation depends on the package
selection, user interface (graphical vs text) and other parameters.
nomemcheck
Do not check if the system has enough RAM to complete the installation.
Of course, any attempt to install with less than the safe minimum amount
of memory may fail and is unsupported.
leavebootorder
Boot the drives in their existing order, to override the default of booting
into the newly installed drive on Power Systems servers and EFI systems.
This is useful for systems that, for example, should network boot first
before falling back to a local boot.
noeject
Don't eject the installation CD/DVD (if any) once the installation
has been completed. Ignored for image, directory and livecd installs.
extlinux
Use extlinux as the bootloader. Note that there's no attempt to validate
that this will work for your platform or anything; it assumes that if you
ask for it, you want to try.
nombr
If nombr is specified the grub2 bootloader will be installed but the
MBR will not be updated. Therefore, when the system reboot, a previously
installed OS will be booted. /etc/grub.d/40_custom can be used with
manually created menuentrys which can use configfile to point to the
grub.cfg on the newly installed OS.
dnf
Use the experimental DNF package management backend instead of the YUM backend
that is used by default. For more information about the DNF project see:
http://dnf.baseurl.org
mpathfriendlynames
Tell multipathd to use user friendly names when naming devices during the installation.
See the multipathd documentation for more info.

View File

@ -18,15 +18,13 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import os
import sys
import parted
import _ped
def main(argv):
lst = set()
for dev in filter(lambda d: d.type != parted.DEVICE_DM, parted.getAllDevices()):
for dev in filter(lambda d: d.type != parted.DEVICE_DM and not d.path.startswith("/dev/sr"), parted.getAllDevices()):
if dev.path.startswith("/dev/"):
path = dev.path[5:]
else:
@ -37,7 +35,7 @@ def main(argv):
lst = list(lst)
lst.sort()
for dev, size in lst:
print dev, size
print(dev, size)
if __name__ == "__main__":
main(sys.argv)

View File

@ -1,44 +0,0 @@
#!/usr/bin/python
#
# raidstart-stub
#
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import os
import sys
from pyanaconda import anaconda_log, fsset, raid, isys
from sys import argv
if len(argv) != 2 or argv[1][:7] != "/dev/md":
print "usage: raidstart /dev/md[minornum]"
sys.exit(1)
targMinor = int(argv[1][7:])
drives = isys.hardDriveDict().keys()
drives.sort (isys.compareDrives)
raidDevices = raid.scanForRaid(drives)
for (minor, devices, level, totalDisks) in raidDevices:
if targMinor == minor:
devName = "md%d" % (minor,)
isys.raidstart(devName, devices[0])
sys.exit(0)
print "could not find devices associated with raid device md%d" % targMinor
sys.exit(1)

View File

@ -1,31 +0,0 @@
#!/usr/bin/python
#
# raidstop-stub
#
# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import os
import sys
from pyanaconda import anaconda_log, fsset, raid, isys
from sys import argv
if len(argv) != 2 or argv[1][:7] != "/dev/md":
print "usage: raidstop /dev/md[minornum]"
sys.exit(1)
isys.raidstop(argv[1][5:])

View File

@ -1,6 +1,6 @@
# icons/Makefile.am for anaconda
# data/Makefile.am for anaconda
#
# Copyright (C) 2010 Red Hat, Inc.
# Copyright (C) 2014 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
@ -15,8 +15,7 @@
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Author: David Cantrell <dcantrell@redhat.com>
SUBDIRS = hicolor
# Author: Martin Kolman <mkolman@redhat.com>
SUBDIRS = en-US
MAINTAINERCLEANFILES = Makefile.in

View File

@ -0,0 +1,5 @@
<body>
<h1>The Anaconda built-in help</h1>
<p>...is not yet available for this screen.</p>
<p>You can check the Anaconda wiki page, the Fedora Installation Guide or other online help resources instead.</p>
</body>

View File

@ -0,0 +1,13 @@
<body>
<h1>The Anaconda built-in help</h1>
<p>...is not yet available for this screen.</p>
<p>You can check the Anaconda wiki page, the Fedora Installation Guide or other online help resources instead:</p>
<p>
<ul>
<li><a href="http://docs.fedoraproject.org/en-US/Fedora/20/html/Installation_Guide/">Fedora Installation Guide</a></li>
<li><a href="https://fedoraproject.org/wiki/Anaconda">Anaconda Wiki</a></li>
<li><a href="http://fedoraproject.org/wiki/Anaconda_Boot_Options">Anaconda Boot Options</a></li>
<li><a href="http://fedoraproject.org/wiki/Anaconda/Kickstart">Anaconda Kickstart</a></li>
</ul>
</p>
</body>

View File

@ -1,6 +1,6 @@
# icons/hicolor/16x16/apps/Makefile.am for anaconda
# data/Makefile.am for anaconda
#
# Copyright (C) 2010 Red Hat, Inc.
# Copyright (C) 2014 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
@ -15,11 +15,12 @@
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Author: David Cantrell <dcantrell@redhat.com>
# Author: Martin Kolman <mkolman@redhat.com>
if IS_LIVEINST_ARCH
iconsdir = $(datadir)/icons/hicolor/16x16/apps
dist_icons_DATA = liveinst.png
endif
enhelpcontentdir = $(datadir)/anaconda/help/en-US
# The $(srcdir)/*.*ml expression matches both the *.html placeholders and *.xml help
# content files. It also works around the fact that autotools complain if the xml files
# are not present but $(srcdir)/*.xml is used.
dist_enhelpcontent_DATA = $(srcdir)/*.*ml
MAINTAINERCLEANFILES = Makefile.in

View File

@ -0,0 +1,5 @@
<body>
<h1>The Anaconda built-in help</h1>
<p>...is not yet available for this screen.</p>
<p>You can check out the Red Hat Enterprise Linux 7 Installation Guide or other online help resources instead.</p>
</body>

View File

@ -0,0 +1,11 @@
<body>
<h1>The Anaconda built-in help</h1>
<p>...is not yet available for this screen.</p>
<p>You can check the Red Hat Enterprise Linux 7 Installation Guide or Red Hat Customer Portal resources instead:</p>
<p>
<ul>
<li><a href="https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Installation_Guide/index.html">Red Hat Enterprise Linux 7 Installation Guide</a></li>
<li><a href="https://access.redhat.com">Red Hat Customer Portal</a></li>
</ul>
</p>
</body>

View File

@ -1,22 +0,0 @@
# icons/hicolor/16x16/Makefile.am for anaconda
#
# Copyright (C) 2010 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Author: David Cantrell <dcantrell@redhat.com>
SUBDIRS = apps
MAINTAINERCLEANFILES = Makefile.in

Binary file not shown.

Before

Width:  |  Height:  |  Size: 955 B

View File

@ -1,22 +0,0 @@
# icons/hicolor/22x22/Makefile.am for anaconda
#
# Copyright (C) 2010 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Author: David Cantrell <dcantrell@redhat.com>
SUBDIRS = apps
MAINTAINERCLEANFILES = Makefile.in

View File

@ -1,25 +0,0 @@
# icons/hicolor/22x22/apps/Makefile.am for anaconda
#
# Copyright (C) 2010 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Author: David Cantrell <dcantrell@redhat.com>
if IS_LIVEINST_ARCH
iconsdir = $(datadir)/icons/hicolor/22x22/apps
dist_icons_DATA = liveinst.png
endif
MAINTAINERCLEANFILES = Makefile.in

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1,22 +0,0 @@
# icons/hicolor/24x24/Makefile.am for anaconda
#
# Copyright (C) 2010 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Author: David Cantrell <dcantrell@redhat.com>
SUBDIRS = apps
MAINTAINERCLEANFILES = Makefile.in

View File

@ -1,25 +0,0 @@
# icons/hicolor/24x24/apps/Makefile.am for anaconda
#
# Copyright (C) 2010 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Author: David Cantrell <dcantrell@redhat.com>
if IS_LIVEINST_ARCH
iconsdir = $(datadir)/icons/hicolor/24x24/apps
dist_icons_DATA = liveinst.png
endif
MAINTAINERCLEANFILES = Makefile.in

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -1,22 +0,0 @@
# icons/hicolor/256x256/Makefile.am for anaconda
#
# Copyright (C) 2011 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Author: Chris Lumens <clumens@redhat.com>
SUBDIRS = apps
MAINTAINERCLEANFILES = Makefile.in

View File

@ -1,25 +0,0 @@
# icons/hicolor/256x256/apps/Makefile.am for anaconda
#
# Copyright (C) 2011 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Author: Chris Lumens <clumens@redhat.com>
if IS_LIVEINST_ARCH
iconsdir = $(datadir)/icons/hicolor/256x256/apps
dist_icons_DATA = liveinst.png
endif
MAINTAINERCLEANFILES = Makefile.in

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

View File

@ -1,22 +0,0 @@
# icons/hicolor/32x32/Makefile.am for anaconda
#
# Copyright (C) 2010 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Author: David Cantrell <dcantrell@redhat.com>
SUBDIRS = apps
MAINTAINERCLEANFILES = Makefile.in

View File

@ -1,25 +0,0 @@
# icons/hicolor/32x32/apps/Makefile.am for anaconda
#
# Copyright (C) 2010 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Author: David Cantrell <dcantrell@redhat.com>
if IS_LIVEINST_ARCH
iconsdir = $(datadir)/icons/hicolor/32x32/apps
dist_icons_DATA = liveinst.png
endif
MAINTAINERCLEANFILES = Makefile.in

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -1,22 +0,0 @@
# icons/hicolor/48x48/Makefile.am for anaconda
#
# Copyright (C) 2010 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Author: David Cantrell <dcantrell@redhat.com>
SUBDIRS = apps
MAINTAINERCLEANFILES = Makefile.in

View File

@ -1,25 +0,0 @@
# icons/hicolor/48x48/apps/Makefile.am for anaconda
#
# Copyright (C) 2010 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Author: David Cantrell <dcantrell@redhat.com>
if IS_LIVEINST_ARCH
iconsdir = $(datadir)/icons/hicolor/48x48/apps
dist_icons_DATA = liveinst.png
endif
MAINTAINERCLEANFILES = Makefile.in

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -1,22 +0,0 @@
# icons/hicolor/Makefile.am for anaconda
#
# Copyright (C) 2010 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Author: David Cantrell <dcantrell@redhat.com>
SUBDIRS = 16x16 22x22 24x24 32x32 48x48 256x256
MAINTAINERCLEANFILES = Makefile.in

View File

@ -25,8 +25,12 @@ dist_sbin_SCRIPTS = liveinst
desktopdir = $(datadir)/applications
desktop_DATA = liveinst.desktop
xinitdir = /etc/X11/xinit/xinitrc.d
xinitdir = $(sysconfdir)/X11/xinit/xinitrc.d
dist_xinit_SCRIPTS = zz-liveinst.sh
install-exec-local:
$(MKDIR_P) $(DESTDIR)$(bindir)
$(LN_S) consolehelper $(DESTDIR)$(bindir)/liveinst
endif
EXTRA_DIST = README liveinst.desktop.in
@ -37,15 +41,7 @@ MAINTAINERCLEANFILES = Makefile.in
@INTLTOOL_DESKTOP_RULE@
install-exec-local:
mkdir -p $(DESTDIR)$(bindir)
ln -s consolehelper $(DESTDIR)$(bindir)/liveinst
uninstall-local:
rm -f $(DESTDIR)$(bindir)/liveinst
for d in $(DESTDIR)$(bindir) ; do
while [ ! -z "$$d" ]; do \
rmdir $$d 2>/dev/null ; \
d="`dirname $$d`" ; \
done ; \
done
# Files generated for gettext need to be included in the distribution
EXTRA_DIST += $(srcdir)/liveinst.desktop.in.h
$(srcdir)/liveinst.desktop.in.h: $(srcdir)/liveinst.desktop.in
@$(MAKE) -C $(top_builddir)/po $(abs_top_srcdir)/$(subdir)/$$(basename $@)

View File

@ -18,9 +18,14 @@
# Author: David Cantrell <dcantrell@redhat.com>
if IS_LIVEINST_ARCH
consoledir = /etc/security/console.apps
consoledir = $(sysconfdir)/security/console.apps
dist_console_DATA = liveinst
endif
#
# Files generated for gettext need to be included in the distribution
EXTRA_DIST = $(srcdir)/liveinst.h
$(srcdir)/liveinst.h: $(srcdir)/liveinst
@$(MAKE) -C $(top_builddir)/po $(abs_top_srcdir)/$(subdir)/$$(basename $@)
CLEANFILES = *.h
MAINTAINERCLEANFILES = Makefile.in

View File

@ -3,4 +3,7 @@ PROGRAM=/usr/sbin/liveinst
SESSION=true
# has to be here otherwise consolehelper switches off the waiting cursor too early
STARTUP_NOTIFICATION_NAME="Starting Install to Hard Drive"
DOMAIN=anaconda
DOMAIN=anaconda
# DBus session connections fail when running setuid unless we pass DBUS_SESSION_BUS_ADDRESS through
# Keep the Gdk scale settings from the user environment
KEEP_ENV_VARS=DBUS_SESSION_BUS_ADDRESS,LIVECMD,GDK_SCALE

View File

@ -28,3 +28,9 @@ CLEANFILES = fedora-welcome.desktop
MAINTAINERCLEANFILES = Makefile.in
@INTLTOOL_DESKTOP_RULE@
# Files generated for gettext need to be included in the distribution
EXTRA_DIST += $(srcdir)/fedora-welcome.po $(srcdir)/fedora-welcome.desktop.in.h
$(srcdir)/fedora-welcome.po $(srcdir)/fedora-welcome.desktop.in.h: \
$(srcdir)/fedora-welcome $(srcdir)/fedora-welcome.desktop.in
@$(MAKE) -C $(top_builddir)/po $(abs_top_srcdir)/$(subdir)/$$(basename $@)

View File

@ -40,14 +40,14 @@ function makeLabel(label, button) {
let widget = new Gtk.Label();
if (button)
widget.set_markup('<b><span size="x-large" color="white">' + label + '</span></b>');
widget.set_markup('<b><span size="x-large">' + label + '</span></b>');
else {
widget.set_line_wrap(true);
widget.set_justify(Gtk.Justification.CENTER);
widget.set_margin_top(32);
widget.set_margin_bottom(32);
widget.set_markup('<span size="large" color="white">' + label + '</span>');
widget.set_markup('<span size="large">' + label + '</span>');
}
return widget;
@ -61,6 +61,7 @@ const WelcomeWindow = new Lang.Class({
type: Gtk.WindowType.TOPLEVEL,
default_width: 600,
default_height: 550,
skip_taskbar_hint: true,
title: _("Welcome to Fedora"),
window_position: Gtk.WindowPosition.CENTER });
this.window.connect('key-press-event', Lang.bind(this,
@ -88,7 +89,7 @@ const WelcomeWindow = new Lang.Class({
let tryContent = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL,
spacing: 16 });
tryContent.add(new Gtk.Image({ icon_name: 'media-cdrom',
tryContent.add(new Gtk.Image({ icon_name: 'media-optical',
pixel_size: 256 }));
tryContent.add(makeLabel(_("Try Fedora"), true));
@ -99,10 +100,8 @@ const WelcomeWindow = new Lang.Class({
spacing: 16 });
// provided by the 'fedora-logos' package
let pix = GdkPixbuf.Pixbuf.new_from_file_at_size(
'/usr/share/icons/Fedora/scalable/apps/anaconda.svg',
256, 256);
installContent.add(new Gtk.Image({ pixbuf: pix }));
installContent.add(new Gtk.Image({ icon_name: 'anaconda',
pixel_size: 256 }));
installContent.add(makeLabel(anacondaApp.get_name(), true));
let installButton = new Gtk.Button({ child: installContent });

View File

@ -5,8 +5,6 @@ Name[bg]=Добре дошли във Fedora
Name[cs]=Vítejte ve Fedoře
Name[da]=Velkommen til Fedora
Name[de]=Willkommen bei Fedora
Name[en@boldquot]=Welcome to Fedora
Name[en@quot]=Welcome to Fedora
Name[es]=Bienvenido a Fedora
Name[et]=Teretulemast Fedorasse
Name[eu]=Ongi etorri Fedora-ra
@ -33,7 +31,6 @@ Name[uk]=Вітаємо у Fedora
Name[zh_CN]=使 Fedora
Name[zh_TW]=使 Fedora
Exec=/usr/share/anaconda/gnome/fedora-welcome
Icon=/usr/share/icons/Fedora/256x256/places/start-here.png
Terminal=false
Type=Application
StartupNotify=true

View File

@ -1,7 +1,6 @@
[Desktop Entry]
_Name=Welcome to Fedora
Exec=/usr/share/anaconda/gnome/fedora-welcome
Icon=/usr/share/icons/Fedora/256x256/places/start-here.png
Terminal=false
Type=Application
StartupNotify=true

View File

@ -47,7 +47,14 @@ if [ -z "$LIVE_BLOCK" ]; then
fi
if [ $LIVE_INSTALL = 1 -a ! -b "$LIVE_BLOCK" ]; then
zenity --error --title="Not a Live image" --text "Can't do live image installation unless running from a live image"
title="Not a Live image"
text="Can't do live image installation unless running from a live image"
if which zenity &> /dev/null; then
zenity --error --title="$title" --text="$text"
else
echo "$title" >&2
echo "$text" >&2
fi
exit 1
fi
@ -59,12 +66,15 @@ ANACONDA=${LIVECMD:=anaconda --liveinst --method=livecd://$LIVE_BLOCK}
# load modules that would get loaded by the initramfs (#230945)
for i in raid0 raid1 raid5 raid6 raid456 raid10 dm-mod dm-zero dm-mirror dm-snapshot dm-multipath dm-round-robin vfat dm-crypt cbc sha256 lrw xts iscsi_tcp iscsi_ibft; do /sbin/modprobe $i 2>/dev/null ; done
export ANACONDA_PRODUCTNAME=$( cat /etc/system-release | sed -r -e 's/ *release.*//' )
if [ $LIVE_INSTALL = 1 ]; then
if [ -f /etc/system-release ]; then
export ANACONDA_PRODUCTNAME=$( cat /etc/system-release | sed -r -e 's/ *release.*//' )
export ANACONDA_PRODUCTVERSION=$( cat /etc/system-release | sed -r -e 's/^.* ([0-9\.]+).*$/\1/' )
elif [ $IMAGE_INSTALL = 1 ]; then
fi
if [ $IMAGE_INSTALL = 1 ]; then
export ANACONDA_PRODUCTVERSION=$(rpmquery -q --qf '%{VERSION}' anaconda | cut -d. -f1)
fi
export ANACONDA_BUGURL=${ANACONDA_BUGURL:="https://bugzilla.redhat.com/bugzilla/"}
RELEASE=$(rpm -q --qf '%{Release}' fedora-release)
@ -103,6 +113,27 @@ for opt in `cat /proc/cmdline` $*; do
--inst.updates=*)
UPDATES="${opt#--inst.updates=}"
;;
--updates)
title="updates error"
text="liveinst requires --updates=<url> instead of --updates <url>"
if which zenity &> /dev/null; then
zenity --error --no-markup --title="$title" --text="$text"
else
echo "$title" >&2
echo "$text" >&2
fi
exit 1
;;
ks=*|kickstart=*|--ks=*|--kickstart=*|inst.ks=*|--inst.ks=*|inst.kickstart=*|--inst-kickstart=*)
title="Configuration not supported"
text="Kickstart is not supported on live installs. This installation will continue interactively."
if which zenity &> /dev/null; then
zenity --warning --title="$title" --text="$text"
else
echo "$title" >&2
echo "$text" >&2
fi
;;
esac
done
@ -112,11 +143,18 @@ anaconda-cleanup $ANACONDA $*
# Set up the updates, if provided.
if [ ! -z "$UPDATES" ]; then
if [ -e /tmp/updates.img -o -e /tmp/updates ]; then
zenity --error --title="Updates already exist" --text "updates= was provided, but an updates image already exists. Please remove /tmp/updates.img and /tmp/updates and try again."
title="Updates already exist"
text="updates= was provided, but an updates image already exists. Please remove /tmp/updates.img and /tmp/updates and try again."
if which zenity &> /dev/null; then
zenity --error --title="$title" --text="$text"
else
echo "$title" >&2
echo "$text" >&2
fi
exit 1
fi
curl -o /tmp/updates.img $UPDATES
curl -L -o /tmp/updates.img $UPDATES
# We officially support two updates.img formats: a filesystem image, and
# a compressed cpio blob.
@ -135,9 +173,6 @@ if [ ! -z "$UPDATES" ]; then
export PATH=/tmp/updates:$PATH
fi
# Prevents breakage if the hostname is changed during the install
xhost +si:localuser:root
if [ -x /usr/bin/udisks ]; then
/usr/bin/udisks --inhibit -- $ANACONDA $*
else

View File

@ -6,7 +6,7 @@ Categories=System;Utility;X-Red-Hat-Base;X-Fedora;GNOME;GTK;
Exec=/usr/bin/liveinst
Terminal=false
Type=Application
Icon=liveinst
Icon=anaconda
Encoding=UTF-8
StartupNotify=true
NoDisplay=true

View File

@ -18,7 +18,7 @@
# Author: David Cantrell <dcantrell@redhat.com>
if IS_LIVEINST_ARCH
pamdir = /etc/pam.d
pamdir = $(sysconfdir)/pam.d
dist_pam_DATA = liveinst
endif

View File

@ -2,6 +2,9 @@
# Set up a launcher on the desktop for the live installer if we're on
# a live CD
# Prevents breakage if the hostname is changed before or during the install
[ -x /usr/bin/xhost ] && xhost +si:localuser:root > /dev/null 2>&1
# don't run on geode (olpc)
if [ `grep -c Geode /proc/cpuinfo` -eq 0 ]; then
if [ -b /dev/mapper/live-osimg-min ]; then

Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 B

View File

@ -4,12 +4,15 @@ restorecon -ir /etc/sysconfig/network-scripts /var/lib /etc/lvm \
/dev /etc/iscsi /var/lib/iscsi /root /var/lock /var/log \
/etc/modprobe.d /etc/sysconfig /var/cache/yum
# Also relabel the OSTree variants of the normal mounts (if they exist)
restorecon -ir /var/roothome /var/home /var/opt /var/srv /var/media /var/mnt
restorecon -i /etc/rpm/macros /etc/dasd.conf /etc/zfcp.conf /lib64 /usr/lib64 \
/etc/blkid.tab* /etc/mtab /etc/fstab /etc/resolv.conf \
/etc/modprobe.conf* /var/log/*tmp /etc/crypttab \
/etc/mdadm.conf /etc/sysconfig/network /root/install.log* \
/etc/*shadow* /etc/dhcp/dhclient-*.conf /etc/localtime \
/root/install.log*
/etc/hostname /root/install.log*
if [ -e /etc/zipl.conf ]; then
restorecon -i /etc/zipl.conf

View File

@ -1,17 +1,12 @@
# Note, this script log will not be copied to the installed system.
%post --nochroot
mkdir -p /mnt/sysimage/var/log/anaconda
[ -e /tmp/anaconda.log ] && cp /tmp/anaconda.log $ANA_INSTALL_PATH/var/log/anaconda/anaconda.log
[ -e /tmp/syslog ] && cp /tmp/syslog $ANA_INSTALL_PATH/var/log/anaconda/syslog
[ -e /tmp/X.log ] && cp /tmp/X.log $ANA_INSTALL_PATH/var/log/anaconda/anaconda.xlog
[ -e /tmp/program.log ] && cp /tmp/program.log $ANA_INSTALL_PATH/var/log/anaconda/anaconda.program.log
[ -e /tmp/packaging.log ] && cp /tmp/packaging.log $ANA_INSTALL_PATH/var/log/anaconda/anaconda.packaging.log
[ -e /tmp/storage.log ] && cp /tmp/storage.log $ANA_INSTALL_PATH/var/log/anaconda/anaconda.storage.log
[ -e /tmp/ifcfg.log ] && cp /tmp/ifcfg.log $ANA_INSTALL_PATH/var/log/anaconda/anaconda.ifcfg.log
[ -e /tmp/yum.log ] && cp /tmp/yum.log $ANA_INSTALL_PATH/var/log/anaconda/anaconda.yum.log
mkdir -p $ANA_INSTALL_PATH/var/log/anaconda
for log in anaconda.log syslog X.log program.log packaging.log storage.log ifcfg.log yum.log dnf.log dnf.rpm.log; do
[ -e /tmp/$log ] && cp /tmp/$log $ANA_INSTALL_PATH/var/log/anaconda/
done
cp /tmp/ks-script*.log $ANA_INSTALL_PATH/var/log/anaconda/
journalctl -b > $ANA_INSTALL_PATH/var/log/anaconda/anaconda.journal.log
chmod 0600 /mnt/sysimage/var/log/anaconda/*
journalctl -b > $ANA_INSTALL_PATH/var/log/anaconda/journal.log
chmod 0600 $ANA_INSTALL_PATH/var/log/anaconda/*
%end

View File

@ -21,12 +21,14 @@ systemddir = $(prefix)/lib/systemd/system
generatordir = $(prefix)/lib/systemd/system-generators
dist_systemd_DATA = anaconda.service \
anaconda-noshell.service \
anaconda-direct.service \
anaconda.target \
anaconda-tmux@.service \
anaconda-shell@.service \
instperf.service \
anaconda-sshd.service
anaconda-sshd.service \
zram.service
dist_generator_SCRIPTS = anaconda-generator

View File

@ -1,18 +1,17 @@
[Install]
WantedBy=anaconda.target
[Unit]
Description=the anaconda installation program
Wants=instperf.service rsyslog.service systemd-udev-settle.service NetworkManager.service
After=instperf.service rsyslog.service systemd-udev-settle.service NetworkManager.service anaconda-sshd.service
Requires=anaconda.service
# TODO: use ConditionArchitecture in systemd v210 or later
ConditionPathIsDirectory=|/sys/hypervisor/s390
[Service]
Environment=HOME=/root MALLOC_CHECK_=2 MALLOC_PERTURB_=204 PATH=/usr/bin:/bin:/sbin:/usr
Environment=HOME=/root MALLOC_CHECK_=2 MALLOC_PERTURB_=204 PATH=/usr/bin:/bin:/sbin:/usr GDK_BACKEND=x11 XDG_RUNTIME_DIR=/tmp
Type=oneshot
WorkingDirectory=/root
ExecStart=/usr/sbin/anaconda
StandardInput=
StandardInput=null
StandardOutput=journal+console
StandardError=journal+console
TimeoutSec=0

View File

@ -1,9 +1,6 @@
#!/bin/bash
# anaconda-generator: generate services needed for anaconda operation
# Source in the dracut lib so we can parse cmd line arguments
. /usr/lib/dracut/modules.d/99base/dracut-lib.sh
# set up dirs
systemd_dir=/lib/systemd/system
target_dir=$systemd_dir/anaconda.target.wants
@ -24,27 +21,13 @@ while [ -f /sys/class/tty/$tty/active ]; do
done
consoletty="$tty"
# put anaconda on the real console if not s390x, otherwise put anaconda direct
if [ $(uname -m) = "s390x" ]; then
ln -sf $systemd_dir/anaconda-direct.service $target_dir/
else
service_on_tty anaconda-tmux@.service $consoletty
fi
# put anaconda's tmux session on the console
service_on_tty anaconda-tmux@.service $consoletty
# put a shell on tty2 and the first virtualization console we find
for tty in tty2 hvc0 hvc1 xvc0 hvsi0 hvsi1 hvsi2; do
# put a shell on the first virtualization console we find
for tty in hvc0 hvc1 xvc0 hvsi0 hvsi1 hvsi2; do
[ "$tty" = "$consoletty" ] && continue
if [ -d /sys/class/tty/$tty ]; then
service_on_tty anaconda-shell@.service $tty
[ "$tty" != "tty2" ] && break
fi
done
# enable the ssh service
# NOTE: We have a match for s390x here because the console sucks on that
# platform. Really any platform with a crappy console that can't do curses
# or have multiple VTs should get sshd spawned automatically, but we don't
# yet have a good way of detecting these platforms.
if getargbool 0 inst.sshd || [ $(uname -m) = "s390x" ]; then
ln -sf $systemd_dir/anaconda-sshd.service $target_dir/anaconda-sshd.service
fi

View File

@ -0,0 +1,18 @@
[Unit]
Description=Restrict Anaconda Text Console
After=anaconda.service
Before=anaconda-tmux@.service
ConditionKernelCommandLine=|inst.noshell
ConditionKernelCommandLine=|noshell
[Service]
Type=oneshot
WorkingDirectory=/root
ExecStart=/usr/bin/tmux unbind-key -a; \
kill-window -t anaconda:shell; \
bind-key 1 select-window -t :1; \
bind-key 2 select-window -t :2; \
bind-key 3 select-window -t :3; \
bind-key 4 select-window -t :4; \
bind-key 5 select-window -t :5; \
bind-key ? list-keys

View File

@ -3,10 +3,13 @@
[Unit]
Description=Shell on %I
After=systemd-user-sessions.service plymouth-quit-wait.service
ConditionKernelCommandLine=!noshell
ConditionKernelCommandLine=!inst.noshell
[Service]
WorkingDirectory=/
ExecStart=-/sbin/agetty -n -l /bin/bash -o '--login' %I 38400
ExecStart=-/sbin/agetty --noclear -n -l /bin/bash -o '--login' %I 38400
Type=idle
Restart=always
RestartSec=0
TTYPath=/dev/%I
@ -15,3 +18,4 @@ TTYVHangup=yes
TTYVTDisallocate=yes
KillMode=process
KillSignal=SIGHUP
IgnoreSIGPIPE=no

View File

@ -2,6 +2,10 @@
Description=OpenSSH server daemon
Before=anaconda.target
After=syslog.target network.target
ConditionKernelCommandLine=|sshd
ConditionKernelCommandLine=|inst.sshd
# TODO: use ConditionArchitecture in systemd v210 or later
ConditionPathIsDirectory=|/sys/hypervisor/s390
[Service]
EnvironmentFile=/etc/sysconfig/sshd

View File

@ -2,14 +2,20 @@
Description=Anaconda Text Console
Requires=anaconda.service
After=anaconda.target anaconda.service
# TODO: use ConditionArchitecture in systemd v210 or later
ConditionPathIsDirectory=!/sys/hypervisor/s390
[Service]
Type=simple
Type=idle
WorkingDirectory=/root
Environment=LANG=en_US.UTF-8
ExecStartPre=/usr/bin/echo -e \033%G
ExecStart=/usr/bin/tmux -u attach -t anaconda
StandardInput=tty-force
StandardInput=tty
StandardOutput=tty
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
Restart=always
RestartSec=0

View File

@ -1,9 +1,10 @@
[Unit]
Description=Anaconda
After=anaconda.target
Wants=anaconda-noshell.service
[Service]
Type=forking
Environment=HOME=/root MALLOC_CHECK_=2 MALLOC_PERTURB_=204 PATH=/usr/bin:/bin:/sbin:/usr/sbin:/mnt/sysimage/bin:/mnt/sysimage/usr/bin:/mnt/sysimage/usr/sbin:/mnt/sysimage/sbin LANG=en_US.UTF-8
Environment=HOME=/root MALLOC_CHECK_=2 MALLOC_PERTURB_=204 PATH=/usr/bin:/bin:/sbin:/usr/sbin:/mnt/sysimage/bin:/mnt/sysimage/usr/bin:/mnt/sysimage/usr/sbin:/mnt/sysimage/sbin LANG=en_US.UTF-8 GDK_BACKEND=x11 XDG_RUNTIME_DIR=/tmp GIO_USE_VFS=local
WorkingDirectory=/root
ExecStart=/usr/bin/tmux -u -f /usr/share/anaconda/tmux.conf start

View File

@ -8,3 +8,6 @@ Wants=rsyslog.service
Wants=systemd-udev-settle.service
Wants=NetworkManager.service
Wants=plymouth-quit.service plymouth-quit-wait.service
Wants=anaconda-direct.service anaconda.service
Wants=anaconda-sshd.service
Wants=zram.service

View File

@ -0,0 +1,11 @@
[Unit]
Description=Service enabling compressing RAM with zRam
ConditionKernelCommandLine=!inst.zram=off
ConditionKernelCommandLine=!inst.zram=0
[Service]
Type=oneshot
ExecStart=/usr/libexec/anaconda/zramswapon
ExecStop=/usr/libexec/anaconda/zramswapoff
RemainAfterExit=yes

View File

@ -17,9 +17,7 @@
#
# Author: David Cantrell <dcantrell@redhat.com>
EXTRA_DIST = boot-options.txt mediacheck.txt \
lvm_sanity_checks.txt rescue-mode api.cfg making-screenshots \
threads.txt gettext.txt transifex.txt
EXTRA_DIST = *.rst *.txt
CLEANFILES = api *.xml

View File

@ -88,6 +88,14 @@ the space character (' ').
This specifies the location to fetch only the installer runtime image;
packages will be ignored. Otherwise the same as <<inst.repo,`inst.repo`>>.
=== inst.dd ===
This specifies the location for driver rpms. May be specified multiple times.
Locations may be specified using any of the formats allowed for
<<inst.repo,`inst.repo`>>.
=== inst.multilib ===
This sets yum's multilib_policy to "all" (as opposed to "best").
[[kickstart]]
Kickstart
---------
@ -99,12 +107,14 @@ Locations may be specified using any of the formats allowed for
For any format the `<path>` component defaults to `/ks.cfg` if it is omitted.
For NFS kickstarts, if the `<path>` ends in `/`, `<ip>-kickstart` is added.
If `inst.ks` is used without a value, the installer will look for
`nfs:<next_server>:/<filename>`:
* `<next_server>` is the DHCP "next-server" option, or the IP of the DHCP server itself,
* `<filename>` is the DHCP "filename" option, or `/kickstart/`, and
* if the filename given ends in `/`, `<ip>-kickstart` is added
* if the filename given ends in `/`, `<ip>-kickstart` is added (as above)
* example:
** DHCP server: `192.168.122.1`
** client address: `192.168.122.100`
@ -230,6 +240,11 @@ Run the installer in graphical mode. This is the default.
Run the installer using a limited text-based UI. Unless you're using a
kickstart file this probably isn't a good idea; you should use VNC instead.
=== inst.resolution ===
Specify screen size for the installer. Use format nxm, where n is the
number of horizontal pixels, m the number of vertical pixels. The lowest
supported resolution is 800x600.
[[inst.vnc]]
=== inst.vnc ===
Run the installer GUI in a VNC session. You will need a VNC client application
@ -271,9 +286,6 @@ the `sshpw` kickstart command.
Debugging and Troubleshooting
-----------------------------
=== inst.mediacheck ===
Verify the installer media before starting the install.
=== inst.rescue ===
Run the rescue environment. This is useful for trying to diagnose and fix
broken systems.
@ -303,6 +315,8 @@ Forward logs through the named virtio port (a character device at
`/dev/virtio-ports/<name>`). A port named `org.fedoraproject.anaconda.log.0`
will be used by default, if found.
=== inst.zram ===
Forces/disables (on/off) usage of zRAM swap for the installation process.
Deprecated Options
------------------
@ -376,6 +390,9 @@ Who needs to force half-duplex 10-base-T anymore?
This was used to debug `loader`, so it has been removed. There are plenty of
options for debugging dracut-based initramfs - see the {dracutdebug}.
=== inst.mediacheck ===
Use the dracut option rd.live.check instead.
=== ks=floppy ===
We no longer support floppy drives. Try `inst.ks=hd:<device>` instead.
@ -387,8 +404,10 @@ All this option actually did was set `TERM=vt100`. The default `TERM` setting
works fine these days, so this was no longer necessary.
=== noipv6 ===
ipv6 is built into the kernel and can't be removed. You should be able to
disable it with `ipv6.disable`, though.
ipv6 is built into the kernel and can't be removed by anaconda.
You can disable ipv6 with `ipv6.disable=1`. This setting will be carried onto
the installed system.
=== upgradeany ===
Anaconda doesn't handle upgrades anymore.

View File

@ -1,6 +1,7 @@
gettext, i18n, and the po/ subdirectory
05-Jun-2009
26-Nov-2013
David Cantrell <dcantrell@redhat.com>
David Shea <dshea@redhat.com>
---------------------------------------
I have attempted to clean up our po/ subdirectory and bring it in to
@ -12,15 +13,15 @@ From time to time, we may have to update our gettext template files and or
expand or reduce the information in the files. How do you know what files
do what? Here's an explanation:
ABOUT-NLS
config.rpath
m4/gettext.m4
m4/iconv.m4
m4/lib-ld.m4
m4/lib-link.m4
m4/lib-prefix.m4
m4/nls.m4
m4/po.m4
m4/progtest.m4
m4/...
po/Makefile.in.in
po/Makevars.template
po/Rules-quot
po/boldquot.sed
po/en@boldquot.header
@ -29,16 +30,21 @@ po/insert-header.sin
po/quot.sed
po/remove-potcdate.sin
These files are copied in when 'gettextize' is run on the source
project. When we need to update to a newer minimum version of
gettext, these files will be replaced. In general, we should never
These files are copied in when 'autopoint' is run on the source
project, which happens as part of autogen.sh. In general, we should never
need to touch these files.
The autopoint tool depends on two macros in configure.ac: AM_GNU_GETTEXT,
and AM_GNU_GETTEXT_VERSION([<version>]). From time to time we may need to
update the set of gettext files that we use. To do so, update the gettext
version number in AM_GNU_GETTEXT_VERSION and run autogen.sh. Be sure to
also update the required gettext version in the spec file.
po/Makevars
Should be updated when we update gettext files with a new gettextize
run. A file called po/Makevars.template will appear and we can move
over our values to the new file and commit it. We do not need to
Should be updated when we update gettext files from autopoint with a new
gettext version. A file called po/Makevars.template will appear and we
can move over our values to the new file and commit it. We do not need to
change this file on a regular basis.
po/POTFILES.in
@ -46,11 +52,40 @@ po/POTFILES.in
This file contains a listing of all source files in the project that
have translatable strings.
Some files can't be handled by gettext directly, such as the GNOME desktop
files and anything without a clear filename extension. For these types of
files, add a rule to po/Rules-extract to create a file that gettext can
handle, and add the name of the generated file to po/POTFILES.in.
po/LINGUAS
Space-delimited list of languages available. If a new language is
added, it should be added to this file.
po/Rules-extract
Extra Makefile rules to process files that gettext can't handle on its
own.
Currently there are two types of files handled in Rules-extract: files in
a language that gettext doesn't know, and files in a language that gettext
can't figure out from the filename. For the first type of file (.desktop
files, consolehelper files), we use intltool-extract to create a C-style
header file containing the translatable strings, and for the second we
manually run xgettext, forcing a --language setting, and generate an
intermediate .po file.
In both cases, the name of the generated file is what goes in
po/POTFILES.in.
po/anaconda.pot
This is the template file built by xgettext containing all of the
translatable strings. The file is updated and committed to git as part of
building a release.
po/*.po
Actual translated strings, as maintained by the translation team(s).
Actual translated strings, as maintained by the translation team(s). These
files are not stored in git. The po-pull target will pull the latest
translations from Transifex.

View File

@ -17,7 +17,7 @@
#
# Author: Will Woods <wwoods@redhat.com>
dracutdir = /usr/lib/dracut/modules.d/80$(PACKAGE_NAME)
dracutdir = $(prefix)/lib/dracut/modules.d/80$(PACKAGE_NAME)
dist_dracut_SCRIPTS = module-setup.sh \
python-deps \
anaconda-lib.sh \
@ -33,6 +33,7 @@ dist_dracut_SCRIPTS = module-setup.sh \
anaconda-diskroot \
anaconda-copy-ks.sh \
anaconda-copy-cmdline.sh \
anaconda-ifcfg.sh \
fetch-kickstart-net.sh \
fetch-kickstart-disk \
fetch-updates-disk \
@ -43,7 +44,6 @@ dist_dracut_SCRIPTS = module-setup.sh \
parse-anaconda-dd.sh \
fetch-driver-net.sh \
driver-updates@.service \
driver-updates-net@.service \
driver-updates.sh \
driver-updates-net.sh \
anaconda-depmod.sh \

View File

@ -6,8 +6,7 @@ modules before the rest of the installer is executed.
cmdline hook
parse-anaconda-dd.sh
parses the inst.dd/dd arguments for URIs and saves all of them into $dd_args
and calls set_neednet if network is needed to retrieve a driver rpm
Calls set_neednet if network is needed to retrieve a driver rpm
The files will be downloaded when the network device online hook is executed.
initqueue/online
@ -28,14 +27,11 @@ pre-pivot hook
anaconda-depmod.sh
If any drivers were installed or downloaded run depmod on the $NEWROOT
Systemd Services
driver-updates@.service and driver-updates-net@.service
These services launch the driver update UI (/bin/driver-updates). The -net
version passes the path to the rpm's that have been downloaded from the
network. They handle connecting the tty so that the user can select drivers
if inst.dd has been passed on the cmdline.
driver-updates@.service
This service launch the driver update UI (/bin/driver-updates). It handles
connecting the tty so that the user can select drivers if inst.dd has
been passed on the cmdline.
driver-updates
This searches disks labeled OEMDRV for driver update repositories and
@ -45,7 +41,17 @@ driver-updates
Pass it the path to a directory of rpms (eg. downloaded from the
network) and it will install them before checking for additional OEMDRV
labeled devices.
labeled devices. It will also do this if /tmp/DD-net/ is present.
If /tmp/dd_args_ks is present when it runs it will ignore existing
OEMDRV devices and process the devices in the file first, then process
any new OEMDRV devices that appear.
Pass inst.dd with no parameters and it will prompt the user for specific
drivers to load using a simple text user interface.
parse-kickstart
If the driverdisk command is present in the kickstart it will write
out partitions to /tmp/dd_args_ks and network sources to the cmdline
for normal network handling. The dd_args_ks devices are handled in
run_kickstart using the driver-updates@.service

View File

@ -0,0 +1,8 @@
#!/bin/bash
command -v getarg >/dev/null || . /lib/dracut-lib.sh
# initqueue/online hook passes interface name as $1
netif="$1"
# make sure we get ifcfg for every interface that comes up
save_netinfo $netif

View File

@ -22,11 +22,16 @@ config_get() {
}
find_iso() {
local f="" iso="" isodir="$1" tmpmnt=$(mkuniqdir /run/install tmpmnt)
local f="" p="" iso="" isodir="$1" tmpmnt=$(mkuniqdir /run/install tmpmnt)
for f in $isodir/*.iso; do
[ -e $f ] || continue
mount -o loop,ro $f $tmpmnt || continue
[ -e $tmpmnt/.discinfo ] && iso=$f
# Valid ISOs either have stage2 in one of the supported paths
# or have a .treeinfo that might tell use where to find the stage2 image.
# If it does not have any of those, it is not valid and will not be used.
for p in $tmpmnt/LiveOS/squashfs.img $tmpmnt/images/install.img $tmpmnt/.treeinfo; do
if [ -e $p ]; then iso=$f; break; fi
done
umount $tmpmnt
if [ "$iso" ]; then echo "$iso"; return 0; fi
done
@ -154,6 +159,12 @@ when_diskdev_appears() {
} >> $rulesfile
}
when_any_cdrom_appears() {
local cmd="/sbin/initqueue --settled --onetime --name autocd $*"
printf 'SUBSYSTEM=="block", ENV{ID_CDROM_MEDIA}=="1", RUN+="%s"\n' "$cmd" \
>> $rulesfile
}
# dracut doesn't bring up the network unless:
# a) $netroot is set (i.e. you have a network root device), or
# b) /tmp/net.ifaces exists.
@ -194,13 +205,37 @@ run_kickstart() {
# re-parse new cmdline stuff from the kickstart
. $hookdir/cmdline/*parse-anaconda-repo.sh
# TODO: parse for other stuff ks might set (updates, dd, etc.)
. $hookdir/cmdline/*parse-livenet.sh
# TODO: parse for other stuff ks might set (dd? other stuff?)
case "$repotype" in
http*|ftp|nfs*) do_net=1 ;;
cdrom|hd|bd) do_disk=1 ;;
esac
[ "$root" = "anaconda-auto-cd" ] && do_disk=1
# kickstart Driver Disk Handling
# parse-kickstart may have added network inst.dd entries to the cmdline
# Or it may have written devices to /tmp/dd_ks
# Does network need to be rerun?
dd_args="$(getargs dd= inst.dd=)"
for dd in $dd_args; do
case "${dd%%:*}" in
http|https|ftp|nfs|nfs4)
do_net=1
rm /tmp/dd_net.done
break
;;
esac
done
# Run the driver update UI for disks
if [ -e "/tmp/dd_args_ks" ]; then
# TODO: Seems like this should be a function, a mostly same version is used in 3 places
start_driver_update "Kickstart Driver Update Disk"
rm /tmp/dd_args_ks
fi
# replay udev events to trigger actions
if [ "$do_disk" ]; then
. $hookdir/pre-trigger/*repo-genrules.sh
@ -222,3 +257,17 @@ wait_for_kickstart() {
wait_for_updates() {
echo "[ -e /tmp/liveupdates.done ]" > $hookdir/initqueue/finished/updates.sh
}
start_driver_update() {
local title="$1"
tty=$(find_tty)
# save module state
cat /proc/modules > /tmp/dd_modules
info "Starting $title Service on $tty"
systemctl start driver-updates@$tty.service
status=$(systemctl -p ExecMainStatus show driver-updates@$tty.service)
info "DD status=$status"
}

View File

@ -23,6 +23,7 @@ Driver Update Disk UI
/tmp/dd_modules is a copy of /proc/modules at startup time
/tmp/dd_args is a parsed list of the inst.dd= cmdline args, and may include
'dd' or 'inst.dd' if it was specified without arguments
/tmp/dd_args_ks is the same format, but skips processing existing OEMDRV devices.
Pass a path and it will install the driver rpms from the path before checking
for new OEMDRV devices.
@ -41,6 +42,7 @@ import sys
import os
import subprocess
import time
import glob
log = logging.getLogger("DD")
@ -71,10 +73,10 @@ def run_cmd(cmd):
for line in out.splitlines():
log.debug(line)
except OSError as e:
log.error("Error running %s: %s" % (cmd[0], e.strerror))
log.error("Error running %s: %s", cmd[0], e.strerror)
raise
if proc.returncode:
log.debug("%s returned %s" % (cmd[0], proc.returncode))
log.debug("%s returned %s", cmd[0], proc.returncode)
raise RunCmdError()
return (proc.returncode, out)
@ -94,33 +96,25 @@ def oemdrv_list():
return outlines.splitlines()
def is_dd(dd_path):
""" Determine if a path is a valid DD for the current arch
:param dd_path: Path to the DD directory to test
:type dd_path: string
:returns: True if it is a valid DD
:rtype: bool
"""
arch = os.uname()[4]
return os.path.exists(dd_path+"/rhdd3") and \
not os.path.isdir(dd_path+"/rpms/%s" % arch)
def get_dd_args():
""" Get the dd arguments from /tmp/dd_args
""" Get the dd arguments from /tmp/dd_args or /tmp/dd_args_ks
:returns: List of arguments
:rtype: list of strings
"""
try:
dd_args = open("/tmp/dd_args", "r").readline().split()
except IOError:
return []
# skip dd args that need networking
net_protocols = ["http", "https", "ftp", "nfs", "nfs4"]
return filter(lambda x: x.split(":")[0].lower() not in net_protocols, dd_args)
args = []
for dd_args_file in ["/tmp/dd_args", "/tmp/dd_args_ks"]:
if not os.path.exists(dd_args_file):
continue
try:
dd_args = open(dd_args_file, "r").readline().split()
except IOError:
return []
# skip dd args that need networking
args.extend(filter(lambda x: x.split(":")[0].lower() not in net_protocols, dd_args))
return args
def is_interactive():
@ -139,10 +133,13 @@ def is_interactive():
def umount(device):
""" Unmount the device
:param device: Device to unmount
:param device: Device or mountpoint to unmount
:type device: string
:returns: None
"""
if not device:
return
try:
run_cmd(["umount", device])
except (OSError, RunCmdError):
@ -235,7 +232,7 @@ def find_dd(mnt="/media/DD"):
if "rhdd3" in files and "rpms" in dirs and \
os.path.exists(root+"/rpms/"+arch):
dd_repos.append(root+"/rpms/"+arch)
log.debug("Found repos - %s" % " ".join(dd_repos))
log.debug("Found repos - %s", " ".join(dd_repos))
return dd_repos
@ -255,8 +252,10 @@ def get_module_set(fname):
modules.update([mod_args[0]])
return modules
def to_modname(modfile):
return os.path.basename(modfile)[:-3].replace('-','_')
def reload_modules():
def reload_modules(newfiles):
""" Reload new module versions from /lib/modules/<kernel>/updates/
"""
try:
@ -266,10 +265,15 @@ def reload_modules():
# Make a list of modules added since startup
startup_modules = get_module_set("/tmp/dd_modules")
startup_modules.update(["virtio_blk", "virtio_net"])
current_modules = get_module_set("/proc/modules")
new_modules = current_modules.difference(startup_modules)
log.debug("new_modules = %s" % " ".join(new_modules))
log.debug("new_modules = %s", " ".join(new_modules))
# And a list of modules contained in the disk we just extracted
dd_modules = set(to_modname(f) for f in newfiles if f.endswith(".ko"))
# TODO: what modules do we unload when there's new firmware?
log.debug("dd_modules = %s", " ".join(dd_modules))
new_modules.update(dd_modules)
# I think we can just iterate once using modprobe -r to remove unused deps
for module in new_modules:
@ -373,7 +377,7 @@ def dd_extract(driver, dest_path="/updates/", kernel_ver=None):
:type driver: Driver object
:param dest_path: Top directory of the destination path
:type dest_path: string
:returns: None
:returns: list of paths to extracted firmware and modules
This extracts the driver's files into 'dest_path' (which defaults
to /updates/ so that the normal live updates handling will overlay
@ -385,11 +389,16 @@ def dd_extract(driver, dest_path="/updates/", kernel_ver=None):
cmd = ["dd_extract", "-k", kernel_ver]
cmd += driver.args
cmd += ["--rpm", driver.rpm, "--directory", dest_path]
log.info("Extracting files from %s" % driver.rpm)
log.info("Extracting files from %s", driver.rpm)
# make sure the to be used directory exists
if not os.path.isdir(dest_path):
os.makedirs(dest_path)
try:
run_cmd(cmd)
except (OSError, RunCmdError):
log.error("dd_extract failed, skipped %s" % driver.rpm)
log.error("dd_extract failed, skipped %s", driver.rpm)
return
# Create the destination directories
@ -401,56 +410,104 @@ def dd_extract(driver, dest_path="/updates/", kernel_ver=None):
if not os.path.exists(d):
os.makedirs(d)
filelist = []
# Copy *.ko files over to /updates/lib/modules/<kernel>/updates/
for root, dirs, files in os.walk(dest_path+"/lib/modules/"):
for root, _dirs, files in os.walk(dest_path+"/lib/modules/"):
if root.endswith("/updates") and os.path.isdir(root):
continue
for f in (f for f in files if f.endswith(".ko")):
src = root+"/"+f
filelist.append(src)
copy_file(src, ko_updates)
move_file(src, initrd_updates)
# Copy the firmware updates
for root, dirs, files in os.walk(dest_path+"/lib/firmware/"):
for root, _dirs, files in os.walk(dest_path+"/lib/firmware/"):
if root.endswith("/updates") and os.path.isdir(root):
continue
for f in (f for f in files):
src = root+"/"+f
filelist.append(src)
copy_file(src, firmware_updates)
move_file(src, initrd_firmware)
# Tell our caller about the newly-extracted stuff
return filelist
def select_drivers(drivers):
""" Display pages of drivers to be loaded.
:param drivers: Drivers to be selected by the user
:type drivers: list of Driver objects
:returns: None
# an arbitrary value to signal refreshing the menu contents
DoRefresh = True
def selection_menu(items, title, info_func, multi_choice=True, refresh=False):
""" Display menu and let user select one or more choices.
:param items: list of items
:type items: list of objects (with the 'selected' property/attribute if
multi_choice=True is used)
:param title: title for the menu
:type title: str
:param info_func: function providing info about items
:type info_func: item -> str
:param multi_choice: whether it is a multiple choice menu or not
:type multi_choice: bool
:returns: the selected item in case of multi_choice=False and user did
selection, None otherwise
"""
page_length = 20
page = 1
while True:
# show a page of drivers
print("\nPage %d of %d" % (page, 1 + (len(drivers) / page_length)))
print("Select drivers to install")
for i in xrange(0, min(len(drivers), page_length)):
driver_idx = ((page-1) * page_length) + i
if drivers[driver_idx].selected:
selected = "x"
else:
selected = " "
print("%3d) [%s] %s" % (i+1, selected, drivers[driver_idx].source))
num_pages = len(items) / page_length
if len(items) % page_length > 0:
num_pages += 1
# Select driver to toggle, continue or change pages
idx = raw_input("\n# to toggle selection, 'n'-next page, 'p'-previous page or 'c'-continue: ")
if idx.isdigit():
if int(idx) < 1 or int(idx) > min(len(drivers), page_length):
print("Invalid selection")
continue
driver_idx = ((page-1) * page_length) + int(idx) - 1
drivers[driver_idx].selected = not drivers[driver_idx].selected
if multi_choice:
choice_format = "[%s]"
else:
choice_format = ""
format_str = "%3d) " + choice_format + " %s"
while True:
# show a page of items
print("\nPage %d of %d" % (page, num_pages))
print(title)
if page * page_length <= len(items):
num_items = page_length
else:
num_items = len(items) % page_length
for i in xrange(0, num_items):
item_idx = ((page-1) * page_length) + i
if multi_choice:
if items[item_idx].selected:
selected = "x"
else:
selected = " "
args = (i+1, selected, info_func(items[item_idx]))
else:
args = (i+1, info_func(items[item_idx]))
print(format_str % args)
# Select an item to toggle, continue or change pages
opts = ["# to select",
"'n'-next page",
"'p'-previous page",
"'c'-continue"]
if multi_choice:
opts[0] = "# to toggle selection"
if refresh:
opts.insert(1,"'r'-refresh")
idx = raw_input(''.join(['\n',
", ".join(opts[:-1]),
" or ", opts[-1], ": "]))
if idx.isdigit() and not (int(idx) < 1 or int(idx) > num_items):
item_idx = ((page-1) * page_length) + int(idx) - 1
if multi_choice:
items[item_idx].selected = not items[item_idx].selected
else:
# single choice only, we can return now
return items[item_idx]
elif idx.lower() == 'n':
if page < 1 + (len(drivers) / page_length):
if page < num_pages:
page += 1
else:
print("Last page")
@ -459,9 +516,25 @@ def select_drivers(drivers):
page -= 1
else:
print("First page")
elif idx.lower() == 'r' and refresh:
return DoRefresh
elif idx.lower() == 'c':
return
else:
print("Invalid selection")
def select_drivers(drivers):
""" Display pages of drivers to be loaded.
:param drivers: Drivers to be selected by the user
:type drivers: list of Driver objects
:returns: None
"""
if not drivers:
return
selection_menu(drivers, "Select drivers to install",
lambda driver: driver.source)
def process_dd(dd_path):
""" Handle installing modules, firmware, enhancements from the dd repo
@ -471,7 +544,7 @@ def process_dd(dd_path):
:returns: None
"""
drivers = dd_list(dd_path)
log.debug("drivers = %s" % " ".join([d.rpm for d in drivers]))
log.debug("drivers = %s", " ".join([d.rpm for d in drivers]))
# If interactive mode or rhdd3.rules pass flag to deselect by default?
if os.path.exists(dd_path+"/rhdd3.rules") or is_interactive():
@ -482,19 +555,19 @@ def process_dd(dd_path):
map(lambda d: setattr(d, "selected", True), drivers)
# Copy the repository for Anaconda to use during install
if os.path.isdir(dd_path+"/repodata"):
copy_repo(dd_path, "/updates/run/install/DD-")
copy_repo(dd_path, "/updates/run/install/DD-")
extracted = []
for driver in filter(lambda d: d.selected, drivers):
dd_extract(driver, "/updates/")
extracted += dd_extract(driver, "/updates/")
# Write the package names for all modules and firmware for Anaconda
if os.path.isdir(dd_path+"/repodata") \
and ("modules" in driver.flags or "firmwares" in driver.flags):
if "modules" in driver.flags or "firmwares" in driver.flags:
with open("/run/install/dd_packages", "a") as f:
f.write("%s\n" % driver.name)
reload_modules()
reload_modules(extracted)
def select_dd(device):
@ -512,7 +585,7 @@ def select_dd(device):
dd_repos = find_dd(mnt)
for repo in dd_repos:
log.info("Processing DD repo %s on %s" % (repo, device))
log.info("Processing DD repo %s on %s", repo, device)
process_dd(repo)
# TODO - does this need to be done before module reload?
@ -528,48 +601,204 @@ def network_driver(dd_path):
"""
skip_dds = set(oemdrv_list())
log.info("Processing Network Drivers from %s" % dd_path)
log.info("Processing Network Drivers from %s", dd_path)
isos = glob.glob(os.path.join(dd_path, "*.iso"))
for iso in isos:
select_dd(iso)
process_dd(dd_path)
# TODO: May need to add new drivers to /tmp/dd_modules to prevent them from being unloaded
# Scan for new OEMDRV devices
dd_scan(skip_dds)
# Scan for new OEMDRV devices and ignore dd_args
dd_scan(skip_dds, scan_dd_args=False, skip_device_menu=True)
class DeviceInfo(object):
def __init__(self, **kwargs):
self.device = kwargs.get("device", None)
self.label = kwargs.get("label", None)
self.uuid = kwargs.get("uuid", None)
self.fs_type = kwargs.get("fs_type", None)
def dd_scan(skip_dds=None):
def __str__(self):
return "%-10s %-20s %-15s %s" % (self.device or "", self.fs_type or "",
self.label or "", self.uuid or "")
def parse_blkid(line):
""" Parse a line of output from blkid
:param line: line of output from blkid
:param type: string
:returns: {} or dict of NAME=VALUE pairs including "device"
:rtype: dict
blkid output cannot be trusted. labels may be missing or in a different
order so we parse what we get and return a dict with their values.
"""
import shlex
device = {"device":None, "label":None, "uuid":None, "fs_type":None}
fields = shlex.split(line)
if len(fields) < 2 or not fields[0].startswith("/dev/"):
return {}
# device is in [0] and the remainder are NAME=VALUE with possible spaces
# Use the sda1 part of device "/dev/sda1:"
device['device'] = fields[0][5:-1]
for f in fields[1:]:
if "=" in f:
(key, val) = f.split("=", 1)
if key == "TYPE":
key = "fs_type"
device[key.lower()] = val
return device
def select_iso():
""" Let user select device and DD ISO on it.
:returns: path to the selected ISO file and mountpoint to be unmounted
or (None, None) if no ISO file is selected
:rtype: (str, str)
"""
header = " %-10s %-20s %-15s %s" % ("DEVICE", "TYPE", "LABEL", "UUID")
iso_dev = DoRefresh
while iso_dev is DoRefresh:
try:
_ret, out = run_cmd(["blkid"])
except (OSError, RunCmdError):
return (None, None)
devices = []
for line in out.splitlines():
dev = parse_blkid(line)
if dev:
devices.append(DeviceInfo(**dev))
iso_dev = selection_menu(devices,
"Driver disk device selection\n" + header,
str, multi_choice=False, refresh=True)
if not iso_dev:
return (None, None)
mnt = "/media/DD-search"
if not os.path.isdir(mnt):
os.makedirs(mnt)
if not mount_device("/dev/" + iso_dev.device, mnt):
print("===Cannot mount the chosen device!===\n")
return select_iso()
# is this device a Driver Update Disc?
if find_dd(mnt):
umount(mnt) # BLUH. unmount it first so select_dd can mount it OK
return ("/dev/" + iso_dev.device, None)
# maybe it's a device containing multiple DUDs - let the user pick one
isos = list()
for dir_path, _dirs, files in os.walk(mnt):
# trim the mount point path
rel_dir = dir_path[len(mnt):]
# and the starting "/" (if any)
if rel_dir.startswith("/"):
rel_dir = rel_dir[1:]
isos += (os.path.join(rel_dir, iso_file)
for iso_file in files if iso_file.endswith(".iso"))
if not isos:
print("===No ISO files found on %s!===\n" % iso_dev.device)
umount(mnt)
return select_iso()
else:
# mount writes out some mounting information, add blank line
print
# let user choose the ISO file
dd_iso = selection_menu(isos, "Choose driver disk ISO file",
lambda iso_file: iso_file,
multi_choice=False)
if not dd_iso:
return (None, None)
return (os.path.join(mnt, dd_iso), "/media/DD-search")
def dd_scan(skip_dds=None, scan_dd_args=True, skip_device_menu=False):
""" Scan the system for OEMDRV devices and and specified by dd=/dev/<device>
:param skip_dds: devices to skip when checking for OEMDRV label
:type skip_dds: set()
:returns: None
:param skip_dds: devices to skip when checking for OEMDRV label
:type skip_dds: set()
:param scan_dd_args: Scan devices passed in /tmp/dd_args or dd_args_ks
:type scan_dd_args: bool
:returns: None
"""
if skip_dds:
dd_finished = skip_dds
dd_todo = set(oemdrv_list()).difference(dd_finished)
if dd_todo:
log.info("Found new OEMDRV device(s) - %s" % ", ".join(dd_todo))
else:
dd_finished = set()
dd_todo = set(oemdrv_list())
dd_todo = set(oemdrv_list())
if skip_dds is None:
skip_dds = set()
if skip_dds:
dd_todo.difference_update(skip_dds)
if dd_todo:
log.info("Found new OEMDRV device(s) - %s", ", ".join(dd_todo))
if scan_dd_args:
# Add the user specified devices
dd_devs = get_dd_args()
dd_devs = [dev for dev in dd_devs if dev not in ("dd", "inst.dd")]
dd_todo.update(dd_devs)
log.info("Checking devices %s" % ", ".join(dd_todo))
log.info("Checking devices %s", ", ".join(dd_todo))
# Process each Driver Disk, checking for new disks after each one
dd_finished = dd_load(dd_todo, skip_dds=skip_dds)
skip_dds.update(dd_finished)
# Skip interactive selection of an iso if OEMDRV was found
if skip_dds or skip_device_menu or not is_interactive():
return
# Handle interactive driver selection
mount_point = None
while True:
iso, mount_point = select_iso()
if iso:
if iso in skip_dds:
skip_dds.remove(iso)
dd_load(set([iso]), skip_dds=skip_dds)
# NOTE: we intentionally do not add the newly-loaded device to
# skip_dds - the user might (e.g.) swap DVDs and use /dev/sr0 twice
umount(mount_point)
else:
break
def dd_load(dd_todo, skip_dds=None):
""" Process each Driver Disk, checking for new disks after each one.
Return the set of devices that loaded stuff from.
:param dd_todo: devices to load drivers from
:type dd_todo: set
:param skip_dds: devices to skip when checking for OEMDRV label
:type skip_dds: set
:returns: set of devices that have been loaded
"""
if skip_dds is None:
skip_dds = set()
dd_finished = set()
while dd_todo:
device = dd_todo.pop()
log.info("Checking device %s" % device)
if device in skip_dds:
continue
log.info("Checking device %s", device)
select_dd(device)
dd_finished.update([device])
dd_finished.add(device)
new_oemdrv = set(oemdrv_list()).difference(dd_finished, dd_todo)
if new_oemdrv:
log.info("Found new OEMDRV device(s) - %s" % ", ".join(new_oemdrv))
log.info("Found new OEMDRV device(s) - %s", ", ".join(new_oemdrv))
dd_todo.update(new_oemdrv)
return dd_finished
if __name__ == '__main__':
log.setLevel(logging.DEBUG)
@ -582,7 +811,20 @@ if __name__ == '__main__':
log.addHandler(handler)
if len(sys.argv) > 1:
# Network driver source
network_driver(sys.argv[1])
elif os.path.exists("/tmp/DD-net/"):
network_driver("/tmp/DD-net/")
elif os.path.exists("/tmp/dd_args_ks"):
# Kickstart driverdisk command, skip existing OEMDRV devices and
# process cmdline dd entries. This will process any OEMDRV that
# appear after loading the other drivers.
skip_devices = set(oemdrv_list())
dd_scan(skip_devices, skip_device_menu=True)
else:
# Process /tmp/dd_args and OEMDRV devices
# Show device selection menu when inst.dd passed and no OEMDRV devices
dd_scan()
sys.exit(0)

View File

@ -5,15 +5,6 @@ command -v getarg >/dev/null || . /lib/dracut-lib.sh
. /lib/anaconda-lib.sh
if [ -n "$(ls /tmp/DD-net)" ]; then
# Run the systemd service for network drivers
tty=$(find_tty)
# Update module list so we don't unload the network driver
cat /proc/modules > /tmp/dd_modules
info "Starting Network Driver Update Disk Service on $tty"
systemctl start driver-updates-net@$tty.service
status=$(systemctl -p ExecMainStatus show driver-updates-net@$tty.service)
info "Network DD status=$status"
start_driver_update "Network Driver Update Disk"
rm -rf /tmp/DD-net
fi

View File

@ -1,17 +0,0 @@
[Unit]
Description=Network Driver Update Disk UI on %I
DefaultDependencies=no
Before=shutdown.target
[Service]
Type=oneshot
RemainAfterExit=no
WorkingDirectory=/tmp
Environment=LANG=en_US.UTF-8
ExecStart=/bin/driver-updates /tmp/DD-net/
StandardInput=tty-force
StandardOutput=inherit
StandardError=inherit
TTYPath=/dev/%I
TTYReset=yes
TimeoutSec=0

View File

@ -2,9 +2,6 @@
# Determine if a Driver Update Disk is present, or inst.dd passed on the cmdline
# and launch the driver update systemd service
# save module state
cat /proc/modules > /tmp/dd_modules
# load all modules
udevadm trigger
udevadm settle
@ -13,19 +10,14 @@ udevadm settle
blkid -t LABEL=OEMDRV > /dev/null
blkid_rc=$?
# dd_args will have been set by parse-anaconda-dd.sh cmdline hook
command -v getarg >/dev/null || . /lib/dracut-lib.sh
dd_args="$(getargs dd= inst.dd=)"
if [ -n "$dd_args" -o $blkid_rc -eq 0 ]; then
command -v getarg >/dev/null || . /lib/dracut-lib.sh
. /lib/anaconda-lib.sh
tty=$(find_tty)
# kludge to let kernel spit out some extra info w/o stomping on our UI
sleep 5
echo "$dd_args" > /tmp/dd_args
info "Starting Driver Update Disk Service on $tty"
systemctl start driver-updates@$tty.service
status=$(systemctl -p ExecMainStatus show driver-updates@$tty.service)
info "DD status=$status"
start_driver_update "Driver Update Disk"
fi

View File

@ -8,6 +8,7 @@ Type=oneshot
RemainAfterExit=no
WorkingDirectory=/tmp
Environment=LANG=en_US.UTF-8
ExecStartPre=-/bin/plymouth quit
ExecStart=/bin/driver-updates
StandardInput=tty-force
StandardOutput=inherit

View File

@ -6,14 +6,13 @@
netif="$1"
# We already processed the dd_args - exit
[ -e /tmp/dd-net.done ] && return 0
# no dd requested - exit
[ -n "$dd_args" ] || return 0
[ -e /tmp/dd_net.done ] && return 0
command -v getarg >/dev/null || . /lib/dracut-lib.sh
. /lib/url-lib.sh
dd_args="$(getargs dd= inst.dd=)"
[ -n "$dd_args" ] || return 0
. /lib/url-lib.sh
dd_repo=/tmp/DD-net/
for dd in $dd_args; do
case "${dd%%:*}" in
@ -28,4 +27,4 @@ for dd in $dd_args; do
;;
esac
done
echo > /tmp/dd-net.done
echo > /tmp/dd_net.done

View File

@ -14,9 +14,6 @@ netif="$1"
# user requested a specific device, but this isn't it - exit
[ -n "$ksdevice" ] && [ "$ksdevice" != "$netif" ] && return 0
# no ksdevice was requested, so the first device online wins!
[ -z "$ksdevice" ] && ksdevice="$netif"
command -v getarg >/dev/null || . /lib/dracut-lib.sh
. /lib/url-lib.sh
. /lib/anaconda-lib.sh
@ -25,7 +22,7 @@ if [ "$kickstart" = "nfs:auto" ]; then
# construct kickstart URL from dhcp info
# server is next_server, or the dhcp server itself if missing
. /tmp/net.$netif.dhcpopts
server="${new_dhcp_next_server:-$new_dhcp_server_identifier}"
server="${new_next_server:-$new_dhcp_server_identifier}"
# filename is dhcp 'filename' option, or '/kickstart/' if missing
filename="/kickstart/"
# read the dhcp lease file and see if we can find 'filename'
@ -39,10 +36,10 @@ if [ "$kickstart" = "nfs:auto" ]; then
kickstart="nfs:$server:$filename"
fi
# kickstart is appended with '$IP_ADDR-kickstart' if ending in '/'
if [ "${kickstart%/}" != "$kickstart" ]; then
kickstart="${kickstart}${new_ip_address}-kickstart"
fi
# NFS kickstart URLs that end in '/' get '$IP_ADDR-kickstart' appended
case "$kickstart" in
nfs*/) kickstart="${kickstart}${new_ip_address}-kickstart" ;;
esac
info "anaconda fetching kickstart from $kickstart"
if fetch_url "$kickstart" /tmp/ks.cfg; then

View File

@ -8,18 +8,20 @@ case "${kickstart%%:*}" in
# handled by fetch-kickstart-net in the online hook
wait_for_kickstart
;;
cdrom|hd|bd) # cdrom, cdrom:<dev>:<path>, hd:<dev>:<path>, bd:<dev>:<path>
cdrom|hd) # cdrom, cdrom:<path>, hd:<dev>:<path>
splitsep ":" "$kickstart" kstype ksdev kspath
[ "$kstype" = "cdrom" ] && [ -z "$ksdev" ] && ksdev="/dev/cdrom"
ksdev=$(disk_to_dev_path $ksdev)
if [ "$kstype" = "bd" ]; then # TODO FIXME: no biospart support yet
warn "inst.ks='$kickstart'"
warn "can't get kickstart: biospart isn't supported yet"
ksdev=""
if [ "$kstype" = "cdrom" ] && [ -z "$kspath" ]; then
kspath="$ksdev"
when_any_cdrom_appears \
fetch-kickstart-disk \$env{DEVNAME} "$kspath"
else
ksdev=$(disk_to_dev_path $ksdev)
when_diskdev_appears "$ksdev" \
fetch-kickstart-disk \$env{DEVNAME} "$kspath"
wait_for_kickstart
fi
wait_for_kickstart
;;
bd) # bd:<dev>:<path> - biospart (TODO... if anyone uses this anymore)
warn "inst.ks: can't get kickstart - biospart (bd:) isn't supported yet"
;;
esac

View File

@ -32,6 +32,7 @@ install() {
inst_hook pre-trigger 50 "$moddir/kickstart-genrules.sh"
inst_hook pre-trigger 50 "$moddir/updates-genrules.sh"
inst_hook initqueue/settled 00 "$moddir/anaconda-ks-sendheaders.sh"
inst_hook initqueue/online 00 "$moddir/anaconda-ifcfg.sh"
inst_hook initqueue/online 80 "$moddir/anaconda-netroot.sh"
inst "$moddir/anaconda-diskroot" "/sbin/anaconda-diskroot"
inst_hook pre-pivot 50 "$moddir/anaconda-copy-ks.sh"
@ -45,13 +46,14 @@ install() {
inst "$moddir/parse-kickstart" "/sbin/parse-kickstart"
# Driver Update Disks
inst_hook cmdline 29 "$moddir/parse-anaconda-dd.sh"
inst_hook initqueue/online 10 "$moddir/fetch-driver-net.sh"
inst_hook initqueue/online 20 "$moddir/fetch-driver-net.sh"
inst_hook pre-trigger 40 "$moddir/driver-updates.sh"
inst_hook pre-pivot 10 "$moddir/driver-updates-net.sh"
inst_hook pre-pivot 50 "$moddir/anaconda-depmod.sh"
inst "$moddir/driver-updates" "/bin/driver-updates"
inst_simple "$moddir/driver-updates@.service" "/etc/systemd/system/driver-updates@.service"
inst_simple "$moddir/driver-updates-net@.service" "/etc/systemd/system/driver-updates-net@.service"
# rpm configuration file (needed by dd_extract)
inst "/usr/lib/rpm/rpmrc"
# python deps for parse-kickstart. DOUBLE WOOOO
$moddir/python-deps $moddir/parse-kickstart $moddir/driver-updates | while read dep; do
case "$dep" in

View File

@ -2,7 +2,7 @@
# parse-anaconda-dd.sh: handle driver update disk settings
# no need to do this twice
[ -f /tmp/dd-net.done ] && return
[ -f /tmp/dd_net.done ] && return
command -v getarg >/dev/null || . /lib/dracut-lib.sh
@ -16,4 +16,3 @@ for dd in $dd_args; do
;;
esac
done
export dd_args

View File

@ -108,7 +108,7 @@ warn_renamed_arg "kssendsn" "inst.ks.sendsn"
# Ignore self-signed SSL certs
warn_renamed_arg "noverifyssl" "inst.noverifyssl"
if $(getargbool 0 noverifyssl inst.noverifyssl); then
if getargbool 0 noverifyssl inst.noverifyssl; then
# Tell dracut to use curl --insecure
echo "rd.noverifyssl" >> /etc/cmdline.d/75-anaconda-options.conf
fi
@ -131,9 +131,6 @@ fi
# for vnc bring network up in initramfs so that cmdline configuration is used
getargbool 0 vnc inst.vnc && warn "anaconda requiring network for vnc" && set_neednet
# make sure we get ifcfg for every interface that comes up
echo 'save_netinfo $netif' > $hookdir/initqueue/online/anaconda-ifcfg.sh
# Driver Update Disk
warn_renamed_arg "dd" "inst.dd"

View File

@ -1,13 +1,27 @@
#!/usr/bin/python
#vim: set fileencoding=utf8
# parse-kickstart - read a kickstart file and emit equivalent dracut boot args.
#
# Copyright © 2012 Red Hat, Inc.
# BLAH BLAH GPL BLAH.
# parse-kickstart - read a kickstart file and emit equivalent dracut boot args
#
# Designed to run inside the dracut initramfs environment.
# Requires python 2.7 or later.
#
#
# Copyright © 2012-2014 Red Hat, Inc.
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions of
# the GNU General Public License v.2, or (at your option) any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY expressed or implied, including the implied warranties of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details. You should have received a copy of the
# GNU General Public License along with this program; if not, write to the
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the
# source code or documentation are not subject to the GNU General Public
# License and may only be used or replicated with the express permission of
# Red Hat, Inc.
#
# Authors:
# Will Woods <wwoods@redhat.com>
@ -15,9 +29,12 @@ import sys, os
import logging
import shutil
import uuid
import glob
from pykickstart.parser import KickstartParser, preprocessKickstart
from pykickstart.sections import NullSection
from pykickstart.version import returnClassForVersion
from pykickstart.errors import KickstartError
# pylint: disable=wildcard-import
from pykickstart.constants import *
from pykickstart import commands
from collections import OrderedDict
@ -42,9 +59,10 @@ def read_cmdline(f):
lines = open(f).readlines()
except IOError:
lines = []
# pylint: disable=redefined-outer-name
for line in lines:
for arg in line.split():
k,e,v = arg.partition("=")
k,_e,v = arg.partition("=")
args[k] = v
return args
@ -65,9 +83,10 @@ class HardDrive(commands.harddrive.FC3_HardDrive):
class NFS(commands.nfs.FC6_NFS):
def dracut_args(self, args, lineno, obj):
method="nfs:%s:%s" % (self.server, self.dir)
if self.opts:
method += ":%s" % self.opts
method = "nfs:%s:%s:%s" % (self.opts, self.server, self.dir)
else:
method="nfs:%s:%s" % (self.server, self.dir)
return "inst.repo=%s" % method
@ -90,15 +109,25 @@ class MediaCheck(commands.mediacheck.FC4_MediaCheck):
class DriverDisk(commands.driverdisk.F14_DriverDisk):
def dracut_args(self, args, lineno, obj):
dd = self.driverdiskList[-1]
if dd.biospart:
location = "bd:%s" % dd.biospart
else:
location = dd.partition or dd.source
if location:
return "inst.driverdisk=%s" % location
dd_net = []
dd_disk = []
for dd in self.driverdiskList:
if dd.partition:
dd_disk.append(dd.partition)
elif dd.source:
dd_net.append("inst.dd=%s" % dd.source)
class Network(commands.network.F20_Network):
# disk sources cannot be added to cmdline because the initial
# driver-update run has already finished.
if dd_disk:
with open("/tmp/dd_args_ks", "w") as f:
f.write(" ".join(dd_disk))
# network sources can be added to the existing cmdline, they
# are processed later.
return "\n".join(dd_net)
class Network(commands.network.F21_Network):
def dracut_args(self, args, lineno, net):
'''
NOTE: The first 'network' line get special treatment:
@ -110,21 +139,17 @@ class Network(commands.network.F20_Network):
# first 'network' line
if len(self.network) == 1:
# Setting only hostname in kickstart
if not net.device and net.hostname and not self.handler.ksdevice:
return None
net.activate = True
if net.device == "link" or not net.device:
# NOTE: this might still be empty (e.g. 'ks=file:...')
# XXX FIXME: handle "link" properly?
log.debug("Using ksdevice %s for missing --device in first kickstart network command", self.handler.ksdevice)
net.device = self.handler.ksdevice
# tell dracut to bring this device up
netline = ksnet_to_dracut(args, lineno, net, bootdev=True)
# HACK: current dracut dies if you have BOOTIF= and ip= together.
# Until that gets fixed upstream, we have to defer to dracut.
# XXX FIXME: remove this when dracut can handle BOOTIF+ip!
if 'BOOTIF' in proc_cmdline:
# let dracut use BOOTIF to bring up the network
netline = None
else:
# all subsequent 'network' lines require '--device'
if not net.device or net.device == "link":
@ -145,7 +170,7 @@ class DisplayMode(commands.displaymode.FC3_DisplayMode):
elif self.displayMode == DISPLAY_MODE_GRAPHICAL:
return "inst.graphical"
class Bootloader(commands.bootloader.F19_Bootloader):
class Bootloader(commands.bootloader.F21_Bootloader):
def dracut_args(self, args, lineno, obj):
if self.extlinux:
return "extlinux"
@ -176,6 +201,9 @@ class DracutHandler(handlerclass):
obj = handlerclass.dispatcher(self, args, lineno)
# and execute any specified dracut_args
cmd = args[0]
# the commands member is implemented by the class returned
# by returnClassForVersion
# pylint: disable=no-member
command = self.commands[cmd]
if hasattr(command, "dracut_args"):
log.debug("kickstart line %u: handling %s", lineno, cmd)
@ -199,8 +227,40 @@ def find_devname(mac):
if thismac.lower() == mac.lower():
return netif
def s390_settings(device):
cfg = {
'SUBCHANNELS': '',
'NETTYPE': '',
'OPTIONS': ''
}
subchannels = []
for symlink in sorted(glob.glob("/sys/class/net/%s/device/cdev[0-9]*" % device)):
subchannels.append(os.path.basename(os.readlink(symlink)))
if not subchannels:
return cfg
cfg['SUBCHANNELS'] = ','.join(subchannels)
## cat /etc/ccw.conf
#qeth,0.0.0900,0.0.0901,0.0.0902,layer2=0,portname=FOOBAR,portno=0
#
#SUBCHANNELS="0.0.0900,0.0.0901,0.0.0902"
#NETTYPE="qeth"
#OPTIONS="layer2=1 portname=FOOBAR portno=0"
with open('/etc/ccw.conf') as f:
# pylint: disable=redefined-outer-name
for line in f:
if cfg['SUBCHANNELS'] in line:
items = line.strip().split(',')
cfg['NETTYPE'] = items[0]
cfg['OPTIONS'] = " ".join(i for i in items[1:] if '=' in i)
break
return cfg
def ksnet_to_dracut(args, lineno, net, bootdev=False):
'''Translate the kickstart network data into dracut network data.'''
# pylint: disable=redefined-outer-name
line = []
ip=""
autoconf=""
@ -248,13 +308,6 @@ def ksnet_to_dracut(args, lineno, net, bootdev=False):
if ns:
line.append("nameserver=%s" % ns)
if net.mtu:
# XXX FIXME: dracut doesn't support mtu= (yet)
if net.device:
line.append("mtu=%s:%s" % (net.device, net.mtu))
else:
line.append("mtu=%s" % net.mtu)
if bootdev:
if net.device:
line.append("bootdev=%s" % net.device)
@ -291,6 +344,15 @@ def ksnet_to_ifcfg(net, filename=None):
# we use it to activate devcies by NM on start
ifcfg['ONBOOT'] = "yes" if net.activate else "no"
s390cfg = s390_settings(dev)
if s390cfg['SUBCHANNELS']:
ifcfg.pop('HWADDR')
ifcfg['SUBCHANNELS'] = s390cfg['SUBCHANNELS']
if s390cfg['NETTYPE']:
ifcfg['NETTYPE'] = s390cfg['NETTYPE']
if s390cfg['OPTIONS']:
ifcfg['OPTIONS'] = s390cfg['OPTIONS']
# dhcp etc.
ifcfg['BOOTPROTO'] = net.bootProto
if net.bootProto == 'static':
@ -339,7 +401,7 @@ def ksnet_to_ifcfg(net, filename=None):
shutil.copyfile(srcpath, dstpath)
if net.bondslaves:
ifcfg.pop('HWADDR')
ifcfg.pop('HWADDR', None)
ifcfg['TYPE'] = "Bond"
ifcfg['BONDING_MASTER'] = "yes"
ifcfg['NAME'] = "Bond connection %s" % dev
@ -358,17 +420,13 @@ def ksnet_to_ifcfg(net, filename=None):
'MASTER' : dev,
'HWADDR' : readsysfile("/sys/class/net/%s/address" % slave),
}
# not using NM naming conventions, following dracut so that it does not
# override kickstart config by generating its own ifcfg files for slaves
#slave_filename = "/tmp/ifcfg/ifcfg-%s" % "_".join(slave_ifcfg['NAME'].split(" "))
# FIXME - change in dracut?
slave_filename = "/tmp/ifcfg/ifcfg-%s" % slave
slave_filename = "/tmp/ifcfg/ifcfg-%s" % "_".join(slave_ifcfg['NAME'].split(" "))
log.info("writing ifcfg %s for slave %s of bond %s" % (slave_filename, slave, dev))
write_ifcfg(slave_filename, slave_ifcfg)
if net.teamslaves:
ifcfg.pop('HWADDR')
ifcfg.pop('HWADDR', None)
ifcfg['TYPE'] = "Team"
ifcfg['NAME'] = "Team connection %s" % dev
ifcfg['TEAM_CONFIG'] = "'" + net.teamconfig + "'"
@ -386,17 +444,13 @@ def ksnet_to_ifcfg(net, filename=None):
if cfg:
slave_ifcfg['TEAM_PORT_CONFIG'] = "'" + cfg + "'"
# not using NM naming conventions, following dracut so that it does not
# override kickstart config by generating its own ifcfg files for slaves
#slave_filename = "/tmp/ifcfg/ifcfg-%s" % "_".join(slave_ifcfg['NAME'].split(" "))
# FIXME - change in dracut?
slave_filename = "/tmp/ifcfg/ifcfg-%s" % slave
slave_filename = "/tmp/ifcfg/ifcfg-%s" % "_".join(slave_ifcfg['NAME'].split(" "))
log.info("writing ifcfg %s for slave %s of team %s" % (slave_filename, slave, dev))
write_ifcfg(slave_filename, slave_ifcfg)
if net.vlanid:
interface_name = "%s.%s" % (dev, net.vlanid)
ifcfg.pop('HWADDR')
interface_name = net.interfacename or "%s.%s" % (dev, net.vlanid)
ifcfg.pop('HWADDR', None)
ifcfg['TYPE'] = "Vlan"
ifcfg['VLAN'] = "yes"
ifcfg['VLAN_ID'] = net.vlanid
@ -424,6 +478,7 @@ def process_kickstart(ksfile):
handler = DracutHandler()
handler.ksdevice = os.environ.get('ksdevice')
parser = KickstartParser(handler, missingIncludeIsFatal=False, errorsAreFatal=False)
parser.registerSection(NullSection(handler, sectionOpen="%addon"))
log.info("processing kickstart file %s", ksfile)
processed_file = preprocessKickstart(ksfile)
try:
@ -440,4 +495,4 @@ if __name__ == '__main__':
for path in sys.argv[1:]:
outfile, output = process_kickstart(path)
for line in filter(None, output):
print line
print(line)

View File

@ -3,6 +3,7 @@
import os, sys
from modulefinder import ModuleFinder
# pylint: disable=wildcard-import
from distutils.sysconfig import *
sitedir = get_python_lib()
@ -18,9 +19,10 @@ def moduledir(pyfile):
if modname not in ('..', 'site-packages'):
return os.path.join(topdir, modname)
# pylint: disable=redefined-outer-name
def pyfiles(moddir):
'''basically, "find $moddir -type f -name "*.py"'''
for curdir, dirs, files in os.walk(moddir):
for curdir, _dirs, files in os.walk(moddir):
for f in files:
if f.endswith(".py"):
yield os.path.join(curdir, f)
@ -44,11 +46,11 @@ for script in sys.argv[1:]:
mods.append(moddir)
# Include some bits that the python install itself needs
print get_makefile_filename()
print get_config_h_filename()
print os.path.join(libdir,'site.py')
print os.path.join(libdir,'sysconfig.py')
print(get_makefile_filename())
print(get_config_h_filename())
print(os.path.join(libdir,'site.py'))
print(os.path.join(libdir,'sysconfig.py'))
# And print the list of deps.
for d in deps:
print d
print(d)

View File

@ -16,7 +16,7 @@ if [ -z "$initramfs" ]; then
gzip=$(type -P pigz || type -P gzip)
# Prune out things we don't need - modules & firmware, python, overlay file
find / -xdev | \
grep -Ev 'lib/modules|lib/firmware|python|overlay|etc/ssl|fsck' | \
grep -Ev 'tmp/|lib/modules|lib/firmware|python|overlay|etc/ssl|fsck' | \
cpio -co 2>/dev/null | $gzip -c1 > $initramfs
fi

View File

@ -1,2 +1,2 @@
# Set of available languages.
af am ar as ast bal be bg bn bn_IN bs ca cs cy da de de_CH el en@quot en@boldquot en_GB es et eu eu_ES fa fi fr gl gu he hi hr hu hy id ilo is it ja ka kk kn ko lt lv mai mk ml mr ms nb nds ne nl nn nso or pa pl pt pt_BR ro ru si sk sl sq sr sr@latin sv ta te tg th tr uk ur vi zh_CN zh_TW zu
af am ar as ast be bg bn bn_IN bs ca cs cy da de de_CH el en_GB es et eu fa fi fr gl gu hi hr hu id ilo is it ja ka kk kn ko lt lv mai mk ml mr ms nb ne nl nso or pa pl pt pt_BR ro ru si sk sl sq sr sr@latin sv ta te tg th tr uk ur vi zh_CN zh_TW zu

View File

@ -8,7 +8,7 @@ subdir = po
top_builddir = ..
# These options get passed to xgettext.
XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --keyword=P_:1,2 --from-code=UTF-8
XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --keyword=P_:1,2 --keyword=C_:1c,2 --keyword=CN_:1c,2 --keyword=CP_:1c,2,3 --from-code=UTF-8
# This is the copyright holder that gets inserted into the header of the
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
@ -44,7 +44,7 @@ EXTRA_LOCALE_CATEGORIES =
# context. Possible values are "yes" and "no". Set this to yes if the
# package uses functions taking also a message context, like pgettext(), or
# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
USE_MSGCTXT = no
USE_MSGCTXT = yes
# These options get passed to msgmerge.
# Useful options are in particular:

View File

@ -1,9 +1,13 @@
# List of source files which contain translatable strings.
# Copyright (C) 2009 Red Hat, Inc.
# Copyright (C) 2009-2014 Red Hat, Inc.
# Main anaconda source files
pyanaconda/addons.py
pyanaconda/bootloader.py
pyanaconda/constants.py
pyanaconda/constants_text.py
pyanaconda/errors.py
pyanaconda/exception.py
pyanaconda/image.py
pyanaconda/install.py
pyanaconda/installclass.py
@ -14,6 +18,9 @@ pyanaconda/network.py
pyanaconda/product.py
pyanaconda/regexes.py
pyanaconda/rescue.py
pyanaconda/storage_utils.py
pyanaconda/text.py
pyanaconda/users.py
pyanaconda/vnc.py
# Install class definitions
@ -25,13 +32,23 @@ pyanaconda/packaging/__init__.py
pyanaconda/packaging/livepayload.py
pyanaconda/packaging/tarpayload.py
pyanaconda/packaging/yumpayload.py
pyanaconda/packaging/dnfpayload.py
pyanaconda/packaging/rpmostreepayload.py
# Interfaces
pyanaconda/ui/common.py
pyanaconda/ui/helpers.py
pyanaconda/ui/__init__.py
pyanaconda/ui/categories/__init__.py
pyanaconda/ui/categories/customization.py
pyanaconda/ui/categories/localization.py
pyanaconda/ui/categories/software.py
pyanaconda/ui/categories/system.py
pyanaconda/ui/categories/user_settings.py
# Common stuff
pyanaconda/ui/lib/space.py
pyanaconda/ui/lib/entropy.py
# Text interface
pyanaconda/ui/tui/hubs/summary.py
@ -41,12 +58,15 @@ pyanaconda/ui/tui/simpleline/widgets.py
pyanaconda/ui/tui/simpleline/base.py
pyanaconda/ui/tui/simpleline/__init__.py
pyanaconda/ui/tui/spokes/askvnc.py
pyanaconda/ui/tui/spokes/langsupport.py
pyanaconda/ui/tui/spokes/network.py
pyanaconda/ui/tui/spokes/password.py
pyanaconda/ui/tui/spokes/storage.py
pyanaconda/ui/tui/spokes/time_spoke.py
pyanaconda/ui/tui/spokes/shell_spoke.py
pyanaconda/ui/tui/spokes/source.py
pyanaconda/ui/tui/spokes/software.py
pyanaconda/ui/tui/spokes/user.py
pyanaconda/ui/tui/spokes/warnings.py
pyanaconda/ui/tui/spokes/progress.py
pyanaconda/ui/tui/spokes/__init__.py
@ -54,12 +74,6 @@ pyanaconda/ui/tui/__init__.py
# Graphical interface
pyanaconda/ui/gui/__init__.py
pyanaconda/ui/gui/categories/__init__.py
pyanaconda/ui/gui/categories/customization.py
pyanaconda/ui/gui/categories/localization.py
pyanaconda/ui/gui/categories/software.py
pyanaconda/ui/gui/categories/system.py
pyanaconda/ui/gui/categories/user_settings.py
pyanaconda/ui/gui/hubs/__init__.py
pyanaconda/ui/gui/hubs/progress.py
pyanaconda/ui/gui/spokes/custom.py
@ -74,57 +88,65 @@ pyanaconda/ui/gui/spokes/source.py
pyanaconda/ui/gui/spokes/storage.py
pyanaconda/ui/gui/spokes/user.py
pyanaconda/ui/gui/spokes/welcome.py
pyanaconda/ui/gui/spokes/advstorage/iscsi.py
pyanaconda/ui/gui/spokes/advstorage/dasd.py
pyanaconda/ui/gui/spokes/lib/accordion.py
pyanaconda/ui/gui/spokes/lib/cart.py
pyanaconda/ui/gui/spokes/lib/custom_storage_helpers.py
pyanaconda/ui/gui/spokes/lib/dasdfmt.py
pyanaconda/ui/gui/spokes/lib/detailederror.py
pyanaconda/ui/gui/spokes/lib/passphrase.py
pyanaconda/ui/gui/spokes/lib/refresh.py
pyanaconda/ui/gui/spokes/lib/resize.py
pyanaconda/ui/gui/spokes/lib/summary.py
pyanaconda/ui/gui/spokes/lib/entropy_dialog.py
# Custom widgets.
widgets/src/BaseWindow.c
widgets/src/BaseStandalone.c
widgets/src/DiskOverview.c
widgets/src/HubWindow.c
widgets/src/MountpointSelector.c
widgets/src/SpokeSelector.c
widgets/src/SpokeWindow.c
widgets/src/StandaloneWindow.c
widgets/src/TimezoneMap.c
widgets/src/LayoutIndicator.c
widgets/src/Lightbox.c
widgets/src/glade-adaptor.c
widgets/src/tz.c
widgets/src/widgets-common.c
# Interface files.
pyanaconda/ui/gui/spokes/advanced_user.glade
pyanaconda/ui/gui/spokes/datetime_spoke.glade
pyanaconda/ui/gui/spokes/filter.glade
pyanaconda/ui/gui/spokes/network.glade
pyanaconda/ui/gui/spokes/software.glade
pyanaconda/ui/gui/spokes/storage.glade
pyanaconda/ui/gui/spokes/keyboard.glade
pyanaconda/ui/gui/spokes/langsupport.glade
pyanaconda/ui/gui/spokes/password.glade
pyanaconda/ui/gui/spokes/source.glade
pyanaconda/ui/gui/spokes/welcome.glade
pyanaconda/ui/gui/spokes/user.glade
pyanaconda/ui/gui/spokes/custom.glade
pyanaconda/ui/gui/spokes/advstorage/fcoe.glade
pyanaconda/ui/gui/spokes/advstorage/iscsi.glade
pyanaconda/ui/gui/spokes/advstorage/dasd.glade
pyanaconda/ui/gui/spokes/lib/cart.glade
pyanaconda/ui/gui/spokes/lib/custom_storage_helpers.glade
pyanaconda/ui/gui/spokes/lib/dasdfmt.glade
pyanaconda/ui/gui/spokes/lib/detailederror.glade
pyanaconda/ui/gui/spokes/lib/passphrase.glade
pyanaconda/ui/gui/spokes/lib/refresh.glade
pyanaconda/ui/gui/spokes/lib/resize.glade
pyanaconda/ui/gui/spokes/lib/summary.glade
pyanaconda/ui/gui/spokes/lib/entropy_dialog.glade
pyanaconda/ui/gui/main.glade
pyanaconda/ui/gui/hubs/summary.glade
pyanaconda/ui/gui/hubs/progress.glade
# For file types that gettext doesn't understand, list <filename>.h and
# use Rules-extract to extract the strings into a C-style header.
# Interface files.
# gettext doesn't fully support glade3
pyanaconda/ui/gui/spokes/advanced_user.glade.h
pyanaconda/ui/gui/spokes/datetime_spoke.glade.h
pyanaconda/ui/gui/spokes/filter.glade.h
pyanaconda/ui/gui/spokes/network.glade.h
pyanaconda/ui/gui/spokes/software.glade.h
pyanaconda/ui/gui/spokes/storage.glade.h
pyanaconda/ui/gui/spokes/keyboard.glade.h
pyanaconda/ui/gui/spokes/langsupport.glade.h
pyanaconda/ui/gui/spokes/password.glade.h
pyanaconda/ui/gui/spokes/source.glade.h
pyanaconda/ui/gui/spokes/welcome.glade.h
pyanaconda/ui/gui/spokes/user.glade.h
pyanaconda/ui/gui/spokes/custom.glade.h
pyanaconda/ui/gui/spokes/advstorage/fcoe.glade.h
pyanaconda/ui/gui/spokes/advstorage/iscsi.glade.h
pyanaconda/ui/gui/spokes/lib/cart.glade.h
pyanaconda/ui/gui/spokes/lib/detailederror.glade.h
pyanaconda/ui/gui/spokes/lib/passphrase.glade.h
pyanaconda/ui/gui/spokes/lib/refresh.glade.h
pyanaconda/ui/gui/spokes/lib/resize.glade.h
pyanaconda/ui/gui/spokes/lib/summary.glade.h
pyanaconda/ui/gui/main.glade.h
pyanaconda/ui/gui/hubs/summary.glade.h
pyanaconda/ui/gui/hubs/progress.glade.h
# liveinst source files
data/liveinst/liveinst.desktop.in.h
data/liveinst/console.apps/liveinst.h

View File

@ -7,45 +7,40 @@
# input file. --local will output files in a tmp/ directory relative to the
# current working directory.
#
# intltool-extract adds "no-c-format" to any lines it finds containing format
# specifiers, which disables the xgettext warnings on format errors. Assume
# instead that anything in a glade file is going to be used as a python format
# string so that our gettext tests work.
#
# All output files need to be in $srcdir for gettext to be able to find them.
%.glade.h: %.glade
@intltool-extract -q --type=gettext/glade -l $< && \
sed 's/no-c-format/python-format/' < tmp/$$(basename $@) > $@ && \
rm -f tmp/$$(basename $@)
DISTFILES.common.extra2 = Rules-extract
%.desktop.in.h: %.desktop.in
@intltool-extract -q --type=gettext/keys -l $< && \
@intltool-extract -q --type=gettext/keys -l --srcdir / $(realpath $<) && \
sed 's/no-c-format/python-format/' < tmp/$$(basename $@) > $@ && \
rm -f tmp/$$(basename $@)
%liveinst.h: %liveinst
@intltool-extract -q --type=gettext/quoted -l $< && \
@intltool-extract -q --type=gettext/quoted -l --srcdir / $(realpath $<) && \
sed 's/no-c-format/python-format/' < tmp/$$(basename $@) > $@ && \
rm -f tmp/$$(basename $@)
# Remove the $top_srcdir prefix from files so that xgettext can search for the file
# relative to $top_srcdir and get the path name right in the .po
%anaconda.po: %anaconda
@input_file="$<" && \
@input_file="$(realpath $<)" && \
$(XGETTEXT) $(XGETTEXT_OPTIONS) --omit-header --directory=$(top_srcdir) \
--language=Python -o $@ $${input_file##$(top_srcdir)/}
--language=Python -o $@ $${input_file##$(realpath $(top_srcdir))/}
# This file is actually JavaScript, but C is close enough
%fedora-welcome.po: %fedora-welcome
@input_file="$<" && \
@input_file="$(realpath $<)" && \
$(XGETTEXT) $(XGETTEXT_OPTIONS) --omit-header --directory=$(top_srcdir) \
--language=C -o $@ $${input_file##$(top_srcdir)/}
--language=JavaScript -o $@ $${input_file##$(realpath $(top_srcdir))/}
mostlyclean: mostlyclean-extract
mostlyclean-extract:
maintainer-clean: maintainer-clean-extract
maintainer-clean-extract:
rm -f \
$(top_srcdir)/anaconda.po $(top_srcdir)/data/liveinst/gnome/fedora-welcome.po \
$(top_srcdir)/data/liveinst/console.apps/liveinst.h
find $(top_srcdir) \( -name '*.glade.h' -o -name '*.desktop.in.h' \) \
find $(top_srcdir) \( -name '*.desktop.in.h' \) \
-exec rm -f {} \;
mostlyclean: mostlyclean-extract
mostlyclean-extract:
rm -rf .intltool-merge-cache

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More