| |
@@ -1,240 +0,0 @@
|
| |
- = Preupgrade Assistant contents Packaging guidelines
|
| |
-
|
| |
- == How to package a Preupgrade Assistant contents
|
| |
-
|
| |
- Contents files are packaged as a subpackage of main package (e.g mariadb).
|
| |
-
|
| |
- == Naming guidelines
|
| |
-
|
| |
- Every Preupgrade Assistant content subpackage name must start with _preupgrade-assistant-_ followed by original package name.
|
| |
-
|
| |
- For example Preupgrade Assistant content subpackage for _mariadb_ will be named _preupgrade-assistant-mariadb_.
|
| |
-
|
| |
- == Dependencies
|
| |
-
|
| |
- * All packages must have
|
| |
-
|
| |
- `+ Requires: preupgrade-assistant+` +
|
| |
- `+ BuildRequires: preupgrade-assistant-devel+`
|
| |
-
|
| |
- Devel package contains macros and contents validating check script.
|
| |
-
|
| |
- == Architecture
|
| |
-
|
| |
- * All _preupgrade-assistant-*_ subpackages must be architecture independent, i.e. have `+BuildArch: noarch+`.
|
| |
-
|
| |
- == Macros
|
| |
-
|
| |
- * Macro denoting the parent directory where the package files go is `+%{preupgrade_dir}+`. This currently expands to `+/usr/share/preupgrade+`.
|
| |
- * Macro `+%{preupg_number}+` means source release from which the system is going to be upgraded, e.g. Fedora 22.
|
| |
- * Macro `+%{postupg_number}+` means target release to which the system is going to be upgraded, e.g. Fedora 23.
|
| |
- * Macro `+%{preupg_results}+` means where the contents files are generated
|
| |
- * Macro `+%{preupgrade_name}+` means *Fedora%\{preupg_number}_%\{postupg_number}*, e.g. Fedora22_23
|
| |
- * Macro `+%{preupgrade_dir}+` reference to */usr/share/preupgrade/%\{preupgrade_name}*
|
| |
-
|
| |
- == Prep section
|
| |
-
|
| |
- Copy all contents files to *%\{preupgrade_name}/%\{name}* directory.
|
| |
-
|
| |
- Content files are:
|
| |
-
|
| |
- * INI file
|
| |
- * check_script (python or bash)
|
| |
- * text file with solution description.
|
| |
-
|
| |
- === INI file structure
|
| |
-
|
| |
- INI file is checked by *%\{preupgrade_build}* script. If something is missing user is informed.
|
| |
-
|
| |
- `+[preupgrade]+` +
|
| |
- `+content_title: Short content name+` +
|
| |
- `+author: Your Name <yname@ydomain.com>+` +
|
| |
- `+content_description: 'Enter your description here'+` +
|
| |
- `+config_file: +``+ THIS IS OPTIONAL. IT INFORMS ADMINISTRATOR WHAT FILES ARE AFFECTED+` +
|
| |
- `+check_script: +` +
|
| |
- `+solution: +` +
|
| |
- `+applies_to: <specify_package_needs_to_be_on_system. if_not_installed_then_NOT_APPLICABLE> , comma separated+` +
|
| |
- `+requires: +``+ THIS IS OPTIONAL+`
|
| |
-
|
| |
- The elements description:
|
| |
-
|
| |
- * content_title - Defines a single item to be checked as a part of a group.
|
| |
- * author - Author of the content, will be used in automatically created header of scripts
|
| |
- * content_description - Describes a rule and what the checks are.
|
| |
- * config_file - Defines which configuration files are checked.
|
| |
- * check_script - A script used for checking the system before upgrade. If the script does not exist, the user is notified and the group.xml autogeneration fails.
|
| |
- * solution - Text file which describes how to solve a problem after an upgrade.
|
| |
- * applies_to - Package checked by the script, if not available check will not run. Result is NOT_APPLICABLE.
|
| |
- * requires - If a check script needs awk binary then package gawk should be mentioned here.
|
| |
-
|
| |
- === Bash check script template
|
| |
-
|
| |
- Template for bash check script
|
| |
-
|
| |
- `+#!/bin/bash+` +
|
| |
- +
|
| |
- `+. /usr/share/preupgrade/common.sh+` +
|
| |
- +
|
| |
- `+#END GENERATED SECTION+` +
|
| |
- +
|
| |
- `+# This check can be used if you need root privilegues+` +
|
| |
- +
|
| |
- `+# Copy your config file from RHEL6 (in case of scenario RHEL6_7) +` +
|
| |
- `+# to Temporary Directory+` +
|
| |
- `+CONFIG_FILE="full_path_to_your_config_file"+` +
|
| |
- `+mkdir -p $VALUE_TMP_PREUPGRADE/cleanconf/$(dirname $CONFIG_FILE)+` +
|
| |
- `+cp $CONFIG_FILE $VALUE_TMP_PREUPGRADE/cleanconf/$CONFIG_FILE+` +
|
| |
- +
|
| |
- `+# Now check you configuration file for options+` +
|
| |
- `+# and for other stuff related with configuration+` +
|
| |
- +
|
| |
- `+# If configuration can be used on target system (like RHEL7 in case of RHEL6_7)+` +
|
| |
- `+# the exit should be RESULT_PASS+` +
|
| |
- +
|
| |
- `+# If configuration can not be used on target system (like RHEL 7 in case of RHEL6_7)+` +
|
| |
- `+# scenario then result should be RESULT_FAIL. Correction of+` +
|
| |
- `+# configuration file is provided either by solution script+` +
|
| |
- `+# or by postupgrade script located in $VALUE_TMP_PREUPGRADE/postupgrade.d/+` +
|
| |
- +
|
| |
- `+# if configuration file can be fixed then fix them in temporary directory+` +
|
| |
- `+# $VALUE_TMP_PREUPGRADE/$CONFIG_FILE and result should be RESULT_FIXED+` +
|
| |
- `+# More information about this issues should be described in solution.txt file+` +
|
| |
- `+# as reference to KnowledgeBase article.+` +
|
| |
- +
|
| |
- `+grep "Sometext" $CONFIG_FILE+` +
|
| |
- `+if [ $? -ne 0 ]; then+` +
|
| |
- `+ log_info "Config file $CONFIG_FILE will be fixed by solution script"+` +
|
| |
- `+ # postupgrade.d directory from your content is automatically copied by+` +
|
| |
- `+ # preupgrade assistant into $VALUE_TMP_PREUPGRADE/postupgrade.d/ directory+` +
|
| |
- `+ exit $RESULT_FAIL+` +
|
| |
- `+fi+` +
|
| |
- +
|
| |
- `+exit $RESULT_PASS+`
|
| |
-
|
| |
- === Python check script template
|
| |
-
|
| |
- Template for python check script
|
| |
-
|
| |
- `+#!/usr/bin/python+` +
|
| |
- `+# -*- Mode: Python; python-indent: 8; indent-tabs-mode: t -*- +` +
|
| |
- +
|
| |
- `+import sys, os, errno+` +
|
| |
- `+import datetime+` +
|
| |
- +
|
| |
- `+from preup.script_api import *+` +
|
| |
- +
|
| |
- `+#END GENERATED SECTION+` +
|
| |
- `+component = "Specify component name used for logging"+` +
|
| |
- `+# exit functions are exit_{pass,not_applicable, fixed, fail, etc.}+` +
|
| |
- `+# logging functions are log_{error, warning, info, etc.}+` +
|
| |
- `+# for logging in-place risk use functions log_{extreme, high, medium, slight}_risk+` +
|
| |
- +
|
| |
- `+def main():+` +
|
| |
- `+ if os.geteuid() != 0:+` +
|
| |
- `+ sys.stdout.write("Need to be root.\n")+` +
|
| |
- `+ log_slight_risk("The script needs to be run under root account")+` +
|
| |
- `+ exit_error()+` +
|
| |
- +
|
| |
- +
|
| |
- `+if __name__ == "__main__":+` +
|
| |
- `+ set_component(component) +` +
|
| |
- `+ main()+` +
|
| |
- `+ exit_pass()+`
|
| |
-
|
| |
- == Build section
|
| |
-
|
| |
- Run command:
|
| |
-
|
| |
- `+%{preupgrade_build} %{preupgrade_name}/%{name}/+`
|
| |
-
|
| |
- %\{preupgrade_build} command has to succeed. Warning can be suppressed.
|
| |
-
|
| |
- == Install section
|
| |
-
|
| |
- All files from _preupgrade_ directory should be installed with
|
| |
-
|
| |
- `+%install+` +
|
| |
- `+...+` +
|
| |
- `+mkdir -p ${buildroot}%{preupgrade_dir}/%{name}+` +
|
| |
- `+install -p -m 755 %{SourceY} ${buildroot}%{preupgrade_dir}/%{name}/check.sh+` +
|
| |
- `+install -p -m 644 %{SourceZ} ${buildroot}%{preupgrade_dir}/%{name}/solution.txt+` +
|
| |
- `+install -p -m 644 %{preupgrade_name}-%{preupg_results}/%{name}/group.xml ${buildroot}%{preupgrade_dir}/%{name}/group.xml+`
|
| |
-
|
| |
- == Files section
|
| |
-
|
| |
- * Directory where Preupgrade Assistant installs files and directories must be owned by the subpackage
|
| |
-
|
| |
- `+%files+` +
|
| |
- `+...+` +
|
| |
- `+%files -n preupgrade-assistant-%{name}+` +
|
| |
- `+%dir %{preupgrade_dir}/%{name}+`
|
| |
-
|
| |
- * All files except text files should be listed like
|
| |
-
|
| |
- `+%files+` +
|
| |
- `+...+` +
|
| |
- `+%files -n preupgrade-assistant-%{name}+` +
|
| |
- `+%{preupgrade_dir}/%{name}/*.{sh,py}+` +
|
| |
- `+%{preupgrade_dir}/%{name}/*.xml+`
|
| |
-
|
| |
- * All text files from content should be listed via
|
| |
-
|
| |
- `+%files+` +
|
| |
- `+...+` +
|
| |
- `+%files -n preupgrade-assistant-%{name}+` +
|
| |
- `+%doc %{preupgrade_dir}/%{name}/*.txt+`
|
| |
-
|
| |
- == Directory ownership
|
| |
-
|
| |
- Directories `+/usr/share/preupgrade+` and
|
| |
- `+%{preupgrade_dir}+`
|
| |
- are owned by package _preupgrade-assistant_ itself and should not be owned by your package.
|
| |
-
|
| |
- == Sample SPEC
|
| |
-
|
| |
- ....
|
| |
- Name: foo
|
| |
- Version: 1.0
|
| |
- Release: 1%{?dist}
|
| |
- Summary: An example package
|
| |
- URL: http://example.com
|
| |
- License: MIT
|
| |
-
|
| |
- Source0: http://example.com/foo/foo-%{version}.tgz
|
| |
- Source1: foo.ini
|
| |
- Source2: foo.sh
|
| |
- Source3: foo.txt
|
| |
-
|
| |
- [Bulk of foo packaging elided]
|
| |
-
|
| |
- %package -n preupgrade-assistant-%{name}
|
| |
- BuildRequires: preupgrade-assistant-devel
|
| |
- Requires: preupgrade-assistant
|
| |
-
|
| |
- %description -n preupgrade-assistant-%{name}
|
| |
- Files used by preupgrade to assist with upgrading between
|
| |
- major releases of the foo package via fedup.
|
| |
-
|
| |
- %prep
|
| |
- # Copy all content files to %{preupgrade_dir}
|
| |
- mkdir -p %{preupgrade_name}/%{name}
|
| |
- cp %{SOURCE1} %{preupgrade_name}/%{name}/%{SOURCE1}
|
| |
- cp %{SOURCE2} %{preupgrade_name}/%{name}/%{SOURCE2}
|
| |
- cp %{SOURCE3} %{preupgrade_name}/%{name}/%{SOURCE3}
|
| |
-
|
| |
- %build
|
| |
- %{preupgrade_build} %{preupgrade_name}/%{name}/
|
| |
-
|
| |
- %install
|
| |
- mkdir -p %{buildroot}%{preupgrade_dir}/%{name}
|
| |
- install -p -m 755 %{SOURCE2} %{buildroot}%{preupgrade_dir}/%{name}/%{SOURCE2}
|
| |
- install -p -m 644 %{SOURCE3} %{buildroot}%{preupgrade_dir}/%{name}/%{SOURCE3}
|
| |
- install -p -m 644 %{preupgrade_name}-%{preupg_results}/%{name}/group.xml %{buildroot}%{preupgrade_dir}/%{name}/group.xml
|
| |
-
|
| |
-
|
| |
- %files -n preupgrade-assistant-%{name}
|
| |
- %dir %{preupgrade_dir}/%{name}
|
| |
- %doc %{preupgrade_dir}/%{name}/*.txt
|
| |
- %{preupgrade_dir}/%{name}/*.{py,sh}
|
| |
- %{preupgrade_dir}/%{name}/*.xml
|
| |
- ....
|
| |
According to the upstream project's README, the Preupgrade Assistant is
now a tool specific to RHEL. So these Guidelines are no longer relevant
for fedora (maybe they can be moved to the EPEL Guidelines instead).