forked from kororaproject/kp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
209 lines (149 loc) · 7.52 KB
/
README
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
Korora Package (KP)
A Korora package can be considered a high level package that often (but not
always) manages all Korora specific modifications to upstream packages. Some
packages are entirely new projects which Korora has baked itself but they are
treated much the same.
The Korora packages are stored completely within git and are best managed with
the Korora packaging utility called “kp”. The kp utility allows you to reproduce
the entire Korora ecosystem, as well as contribute easier to the project through
submission of patches and pull requests.
In order to allow for the various use cases involved in the endeavour, the tool
uses a number of options and flags that are controlled via a global config file,
with the option to override these flags using local package options. This gives
us the freedom as well as flexibility to set up and use the kp tool, to build
korora from scratch.
To begin with, here's an annotated global config file (usually stored in the
same dir as the kp tool) to specify the options needed by git and kp.
##### BEGIN -----------8< ---- kp.conf --- >8---------- ##########
# A heavily annotated kp.conf file for illustration purposes Name as 'kp.conf'
# and store this file in the same dir as "kp" tool. Who to build packages as
# (defaults to anonymous). Substitute with username to use developer account
KP_DEV_ACCOUNT="" # if using for first time, leave blank
KP_DEV_EMAIL="" # ======"======DITTO======"========
# Protocol for git (can be 'git' or 'https' or 'ssh')
GIT_PROTOCOL="http" # again, first timers, use this
# https or ssh can be used, if you aready have GH experience
# but first time user doing anonymous fetches is better off with http
# URLs for git
GIT_URL_GIT="git://github.com/kororaproject"
GIT_URL_HTTP="https://github.com/kororaproject"
GIT_URL_SSH="[email protected]:kororaproject"
# location of git repo holding packages
GIT_URL=git://github.com/kororaproject
[email protected]:kororaproject
# Temporary location for building packages
TMP_DIR=/var/lib/kp
# Enable debug
#DEBUG=1
# N.B: Keep the dir containing the kp tool separate from the dir containing all
# the korora packages. See above. Both dirs are actually different locations
# within the "korora" dir tree.
# /home/jackychan
# |--- projects
# |--- kpchan #<== here be all fedora/korora packages
# |--- kp.git #<== and the "kp" tool, cloned from git
# keep reading below to get the idea behind the above dir structure
## working dirs
_CODE="/home/jackychan/projects/kpchan"
WORKING_DIR="${_CODE}/kp"
# ^^ these dirs contain all packages needed for building korora
#CONFIG_DIR="${_CODE}/kp/conf/"
# dir below refers to a dir containing kp tool checked out from repos
LIB_DIR="${_CODE}/kp.git/lib/"
LOG_DIR=/tmp
# Set the key to use for a release version, e.g. 18 and 19
KEY_ID[18]=30B55DCA
KEY_ID[19]=DCBE2AC3
### -----8<------- EOF kp.conf ------>8--------- EOF ##########
As a first step, copy the contents above into the kp.conf file that is present
in the kp tool dir. Keep a copy of the original, if you wish. Initially get
comfortable with the tool by typing
./kp --help, followed by
./kp [command] --help
respectively, where [command] is the list of available options that the tool can
handle for building korora packages.
The next step is to do some tool "housekeeping". This sets up the dir structure
and other config files needed for the tool to pull the upstream repos for the
korora build. To do this type
./kp init {or} ./kp --init
and you are ready to do business...
Now, get a feel for the various packages needed for kororification of your
system by typing
./kp list {or} ./kp --list
lists all the packages/kickstarts that are relevant for the process. Initially
the packages will come with a '-' next to them. This means, the package in
question is available, but not checked out. As you start working with packages,
the '-' will be replaced by other symbols. The help command will provide you
with details on the various symbols and their meanings. (Hint: ./kp list --help)
Once you can see the list of korora packages, you can issue a bulk checkout
which will pull all the upstream repos to your local machine. For example, in
the above example (from kp. conf above), when you issue a checkout, the
individual packages checked out from the repositories will reside in the
following directory:
"/home/jackychan/projects/kpchan/packages/"
To checkout all or a specific [package], issue
./kp checkout [package] {or} ./kp --checkout [package]
Examples:
./kp checkout handbrake # pulls handbrake tool from repos
./kp checkout jockey # drivers support from ubuntu's stable
./kp checkout # get the full kaboodle
Note that the build operation fetches information from online repositories and
therefore requires a working internet connection. If all this went smoothly,
congratulations. The only thing left is to build korora on your machine.The next
few steps show you how.
The first thing you do is to turn off selinux to "permissive" mode,
from its default mode of "enforcing". A discussion on this is beyond
the scope of this document; however you are referred to many
excellent resources available on the internet. For example:
http://wiki.centos.org/HowTos/SELinux
http://en.wikipedia.org/wiki/Security-Enhanced_Linux
On the terminal, type
getenforce # You *should* get "Enforcing" as response
sudo setenforce 0 # set mode to permissive
./kp build [package] {or} ./kp --build [package]
# like checkout, omitting a package builds everything, and
# specifying a package name builds only that package
sudo setenforce 1 # set mode to enforcing again
Copy any errors that you may encounter, as it will assist in troubleshooting
issues.
If you are satisfied with all the actions so far, and wish to deploy a korora
ISO of your own, type this (as sudo) in your terminal.
sudo ./kp release [gnome/kde] # self-explanatory
Now to briefly look at local(ised) configuration files that provide
package-level granularity in controlling the kp tool. As always, here's an
annotated file for the jockey proprietary driver support tool, shown below:
---8<--- jockey.conf --->8---
KP_NAME=jockey
KP_VERSION=0.9.1
# indicate what the upstream source is wrapped in, and where to get it
KP_UPSTREAM_SRC_TYPE=git,svn,rpm,tarball
KP_UPSTREAM_SRC_URL=
# GIT specific - what branch/commit should all package builds be built relative
# to
KP_UPSTREAM_SRC_GIT_COMMIT=
KP_UPSTREAM_SRC_GIT_BRANCH=
# SVN specific - what revision number should all package builds be built
# relative to
KP_UPSTREAM_SRC_SVN_REVISION
# RPM specific - what’s the reference upstream spec
KP_UPSTREAM_SPEC=%upstream%/spec
# if undefined uses upstream spec (if defined) otherwise errors if missing
KP_BUILD_SPEC=
# the build spec will be dynamically built via the build spec template. Patch,
# source and build numbers will be dynamically updated based on the template.
KP_BUILD_SPEC_TEMPLATE=
KP_BUILD_ARCH=i686,x86_64
# defines the commit of the latest stable release from the korora package tree
KP_RELEASE_GIT_COMMIT=
---8<--- end jockey.conf --->8---
File Tree
./upstream
Contains the primary source relating to the package, could be a GIT, SVN url or
the extracted source from an RPM (ie akin to extracted files from
rpmbuild/SOURCES)
./build
Contains the necessary files to build the release RPM. If the upstream is GIT it
will contain the necessary patches (based on appropriate git diff). SVN would be
similar. The package spec file would be dynamically updated based on the
./release
Contains built RPMs