anaconda: update to 21.48.21-1
Apply diff anaconda-20.25.16-1..anaconda-21.48.21-1
@ -1,4 +1,4 @@
|
||||
[anaconda.f20-branch]
|
||||
[anaconda.f21-branch]
|
||||
file_filter = po/<lang>.po
|
||||
source_file = po/anaconda.pot
|
||||
source_lang = en
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
2488
anaconda/configure
vendored
@ -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
@ -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
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
233
anaconda/data/anaconda_options.txt
Normal 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.
|
@ -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)
|
||||
|
@ -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)
|
@ -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:])
|
@ -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
|
5
anaconda/data/help/en-US/FedoraPlaceholder.html
Normal 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>
|
13
anaconda/data/help/en-US/FedoraPlaceholderWithLinks.html
Normal 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>
|
@ -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
|
5
anaconda/data/help/en-US/RHEL7Placeholder.html
Normal 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>
|
11
anaconda/data/help/en-US/RHEL7PlaceholderWithLinks.html
Normal 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>
|
@ -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
|
Before Width: | Height: | Size: 955 B |
@ -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
|
@ -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
|
Before Width: | Height: | Size: 1.5 KiB |
@ -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
|
@ -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
|
Before Width: | Height: | Size: 1.6 KiB |
@ -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
|
@ -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
|
Before Width: | Height: | Size: 36 KiB |
@ -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
|
@ -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
|
Before Width: | Height: | Size: 2.2 KiB |
@ -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
|
@ -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
|
Before Width: | Height: | Size: 3.5 KiB |
@ -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
|
@ -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 $@)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 $@)
|
||||
|
@ -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 });
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
Before Width: | Height: | Size: 185 B |
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
18
anaconda/data/systemd/anaconda-noshell.service
Normal 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
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
11
anaconda/data/systemd/zram.service
Normal 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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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 \
|
||||
|
@ -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
|
||||
|
8
anaconda/dracut/anaconda-ifcfg.sh
Normal 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
|
@ -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"
|
||||
}
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|