-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathREADME
More file actions
130 lines (90 loc) · 4.81 KB
/
README
File metadata and controls
130 lines (90 loc) · 4.81 KB
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
1. Get the software
git clone https://github.com/rhauser/ayum.git
or
git clone https://gitlab.cern.ch/rhauser/ayum.git
Note:
This should work out of the box on a 64bit Scientific Linux 6 system.
If you need it on another binary platform, got to src/rpmext and
make clean; make
You will need the rpm-devel package installed for that.
2. Configure ayum
Run the 'configure.ayum' script in the top level directory.
Answer the questions about where to put the private RPM database,
where to locate the yum cachen and where to install the software.
The script will update the yum.conf file used by ayum.
Alternatively you can modify the yum.conf file by hand:
You should adapt these variables to reflect
the current location of the package
(these are the standard yum.conf variables):
persistdir=/work/msu-pc7/rhauser/ayum/var/lib/yum
reposdir=/work/msu-pc7/rhauser/ayum/etc/yum.repos.d
pluginpath=/work/msu-pc7/rhauser/ayum/src/yum-plugins
pluginconfpath=/work/msu-pc7/rhauser/ayum/etc/yum/pluginconf.d
cachedir=/work/msu-pc7/rhauser/install/cache
You should modify these non-standard variables to point to the RPM database
and your software installation area:
dbpath=/work/msu-pc7/rhauser/install/db
prefix=/work/msu-pc7/rhauser/install/sw
You can also specify the 'prefix' variable in a yum repository, it will
then take priority over the global value for packages from this repository.
3. Source the setup.sh script inside the package.
It will add an alias 'ayum' and modify your path
to include the ayum/bin directory with wrapper scripts
for additional standard tools that will use the custom
yum and RPM database.
source ./setup.sh
If you just need 'ayum' itself, you can also just define
an alias by hand.
alias ayum=`pwd`/ayum
The additional tools all start with an 'a' before their
normal name. At the moment there are:
ayum/bin/arpm - the RPM command with modified database
ayum/bin/arepoquery - the repoquery command
4. Enjoy
ayum list
ayum list available
ayum shell (quit to exit)
ayum install -y tdaq-04-00-01_DAQRelease_i686-slc5-gcc43-opt
ayum update
ayum list installed
...and so on, all yum commands
ayum remove tdaq-04-00-01-*
5. Licensing
This software uses source code from yum, it comes with the same GPL2 license
(see COPYING).
##########################################################################################
This patched yum version solves the following problems when installing
RPMs to a private area as non-root user:
1. yum does not allow a non-root user to execute install,update,erase
2. yum has no way to specify a different RPM database except
for installroot, which is not what we want.
3. yum has no interface for the --prefix or --relocate option of rpm
Problem 1 is solved by having a private version of the yum-cli/yumcommands.py file that
removes the check for non-root user. In addition a private version of the main yum
command is needed to make sure it refers to the local src/yum-cli area first when
loading files. The actual changes are 1 and 3 lines rsp.
Problem 2 is solved by a yum plugin in src/yum-plugins/dbpath.py that defines two new
options (dbpath and prefix). It defines the _dbpath macro internally to refer to the
new RPM db location.
Problem 3 is the hardest, since the rpm python bindings do not forsee the parameters
needed for the relocation. Furthermore the python bindings define extension types
that are completely private to the rpm package and are not visible in any normal
rpm header file.
It is solved in the following way:
- src/rpmext/install.c defines a new binding to the rpmtsAddInstallElement()
C function and supports a new parameter (a list of 2-tuples of strings).
It passes these parameters as relocation information.
Access to the internal RPM structures is done by replicating the corresponding
structures locally and a couragous reinterpret_cast<...>.
- in src/rpmext/__init__ a new addInstall() function that mimics rpm.TransactionSet.addInstall()
but supports an additional parameter that can be either a single string (interpreted
as 'prefix' option), or a list 2-tuples of strings (interpreted as a list of relocation
options)
- src/yum/depsolve.py contains a patched local copy of the corresponding yum file that
- overrides rpm.TransactionSet.addInstall with our own rpmext.addInstall method.
- checks if the 'prefix' option in yum.conf was set, and if yes,
passes it to ts.addInstall()
The changes to depsolve.py are 6 lines.
- ayum is a simple wrapper that sets PYTHONPATH accordingly and uses the local yum.conf
as the default configuration file.
The changes are against: yum-3.2.29-40