forked from OpenMandrivaAssociation/omdv-build-iso
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Developer_Info
67 lines (58 loc) · 6.26 KB
/
Developer_Info
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
UPGRADE May 2016 Developer Overview
MAJOR FIXES 2017
Some parts of omdv-build-iso-shell have been completely re-written to allow the introdution of a true user mode where packages may be conveniently
added and removed to pair of package lists (my.add and my.remove)
In order to do this it was necessary to generate two separate package lists. Although not strictly necessary the package lists
are generated as a two stage process. Two Function are involved getIncFiles() and creatPkgList() both of these functions can return
their data in a pre-named variable. For example calling getIncFiles with omdv-kde4.list ADDRPMINC will return a variable named
$ADDRPMINC containing all the (recursive) includes for the top level package file. This make it much easier to identify and manipulate
the data required from the lists. This has the advantage that packages can be assembled from various sources and conveniently named
for identifications purposes. Note that these functions require a change in shell options to work properly.
The build process is managed by three additional functions. These functions all have a similar structure their purpose being to
first assemble the build lists into two major variables the $INSTALL_LIST and the $REMOVE_LIST. The content of these lists vary
with the primary function invoked. The OmSpin function for example generates just an INSTALL_LIST for building a release iso
whereas the mkUserSpin function generates the $INSTALL_LIST AND $REMOVE_LIST from the chosen top level file say omdv-kde4.list
and the users my.add file while the $REMOVE_LIST will derive its data from my.rmv file.
Ultimately these function deliver data to the mkUpdateChroot function. This function takes the $INSTALL_LIST and REMOVE_LIST as its
input variables (These data are position sensitive) dependent on the contents of the two variable and the external $REBUILD flag
the appropriate command will be selected to add (re-create or remove) packages from the chroot. Note that removal of packages
is a special case requiring two commands. urpme will not allow the removal of some important base packages so "rpm -e --nodeps" is
first used to remove the primary files and then urpme --auto-orphans is used to remove the dependencies.
It's possible that this could be improved there some minor issues around removing old config files which some packages leave around
these may well be due to package issues rather than the uninstall process itself but some investigation is needed to
improve the result.
When the script was used in earnest it was discovered that xargs would immediately exit if a package listed in one of the package lists
did not exist. This is ideal behaviour for building isos on ABF but not so ideal for a user struggling to find the right packages for a personal spin.
To get around this issue the paralles program was used instead of xargs to process the rpmlists. Parallels has a very flexible failure mode
such that one can set the number of errors before the program exits. Currently the number of failures is set to 10 (probably excessive)
a future development could make this number a variable set from the command line.
Do not be tempted to set the -P option of parallels to a number greater than 1 for greater speed it will not produce a useful iso.
A future development would be to use a solvdb to generate the full package list and then present this list to parallels using the
urpmi equivalent of --nodeps this will allow much faster generation of the iso chroot.
Two additional functions are provided. The are related to iso list management and build control and are only intended for local use.
The largest function localMd5Change() Offers a means of controlling the build and the quality of the build files.
When first run this function generates some reference checksums using the reference data loaded from the
/usr/share/omdv-build-iso/iso-package-lists when the $WORKDIR is created. This reference data is used as the baseline for all
subsequent operations for the life of the chroot. Two checksums are generated an overall sum and a sum for each of the package lists.
This data is used for two purposes; the overall sum is used to generate a global change flag $CHGFLAG. When set this flag indicates
to the rest of the build system that the files in the chroot require updating. Once the update is complete the second set of
checksums will be used to determine and create a list of the files that have changed.
A second function takes these file names and presents and generates a diff to serve as a permanent record (if required) of the chroots
life. This can be extremely useful when trying to create new spins in an on the fly manner as new file lists can be contructed
from the diffs.
Would be developers should be aware of the very useful errorCatch function which can be called at various points to limit how far
execution proceeds. Use this instead of exit when debugging otherwise you will be forever unmounting /proc /sys and friends.
July 2017
The latest set of changes bring a restored function to fetch the standard set of iso build package lists from the GitHub repository.
This makes the script version independent. Currently the function follows the release version when used with abf.
The function and control logic are all enclosed in a mail function which is invoked from the nd of the file thus all functions are read
prior to executing the script this simplifies the control login snd makes understanding the execution of the program easier to grasp.
The diff recording function now operates correctly. Urpmi debugging has been seperated from normal debugging
It is now possible to run in ABF mode for testing and if necessary fixing to do this requires the --debug option to be passed to the ecript.
2018
Code revised to support the dnf package manager. urpmi retired.
March 2019
Massive revision of the code used that generated the session records in user mode. Git is now used to store and record the changes to the package files
during a dynamic session. This removed some hefty and opaque functions from the code.
The --keep funtionality (retention of pkg list data and downloaded rpms) over multiple sessions was fixed the --rebuild function now operates correctly
The build id was fixed so that isos are now uniquely named Some dodgy logic was also fixed.