Compare commits
836 Commits
master
...
rhel7-extr
Author | SHA1 | Date | |
---|---|---|---|
|
e04523f3ba | ||
|
278b5523e8 | ||
|
9984fe605f | ||
|
ce4b4cef4f | ||
|
eece1686c5 | ||
|
9ce764521b | ||
|
ba9d3249ca | ||
|
5400d3e9b6 | ||
|
d72a2b0c7b | ||
|
d4b40da130 | ||
|
f1e5c9fb05 | ||
|
3ac5810d35 | ||
|
486374eee8 | ||
|
dc18200b6f | ||
|
7a3916d09e | ||
|
3e985d60ca | ||
|
828a516cb3 | ||
|
14a8e81dda | ||
|
13608077ae | ||
|
f467a3aba7 | ||
|
4d28da3818 | ||
|
06f09b2335 | ||
|
772e841a7f | ||
|
c56d57ef7e | ||
|
9291f3f3ea | ||
|
e0da9b987b | ||
|
9c44f5213b | ||
|
7fcd0aa979 | ||
|
626dfbd4ea | ||
|
a432c71c95 | ||
|
a25fcf4369 | ||
|
64998d853d | ||
|
60806ab596 | ||
|
e51b00edca | ||
|
915fc24fee | ||
|
bc0dd4c92c | ||
|
b81e260c4d | ||
|
50aa59cec1 | ||
|
553498d543 | ||
|
c020cec968 | ||
|
bb82857ab3 | ||
|
0d344e6cae | ||
|
64a593a376 | ||
|
b0dc59534c | ||
|
d11f5079f4 | ||
|
dee3f4ed2b | ||
|
a0cee0b543 | ||
|
60ef7231fe | ||
|
92535addc8 | ||
|
3d3c32819c | ||
|
ac1bcd9d1d | ||
|
33b9b46fb6 | ||
|
bb57558603 | ||
|
ad472685c9 | ||
|
742a245719 | ||
|
5cdd01be36 | ||
|
c1609d7ffe | ||
|
8b8f5355bf | ||
|
a8d7841bc1 | ||
|
78fbb7c49e | ||
|
8e650d1d07 | ||
|
406dddafef | ||
|
39f464d46b | ||
|
f0efcd9b0f | ||
|
e2262e57e3 | ||
|
b4a95b8d2b | ||
|
4d7e3bb4bc | ||
|
f2209932a6 | ||
|
780f00d81a | ||
|
a9c5581aa9 | ||
|
5d307a475d | ||
|
956ebfc77c | ||
|
e72debe1d1 | ||
|
e34201c0bd | ||
|
96091d3295 | ||
|
b899a67bee | ||
|
ecd2d8c463 | ||
|
22acf067cd | ||
|
2795969126 | ||
|
64f00d94b8 | ||
|
c2c6bfa458 | ||
|
9d7fcc8642 | ||
|
80c69f0621 | ||
|
258d01647a | ||
|
22de8ed603 | ||
|
b38a358ea3 | ||
|
77649cbf76 | ||
|
89e56aa3b4 | ||
|
2136d88cd6 | ||
|
a728011196 | ||
|
3d27053605 | ||
|
29531d373e | ||
|
e7035b8f78 | ||
|
d97ff118d9 | ||
|
0777e91d52 | ||
|
9bce583fc2 | ||
|
b0b603dc2e | ||
|
8734f662e9 | ||
|
3951363660 | ||
|
fd2e1738ab | ||
|
cdfdb651f7 | ||
|
7c8e6e75ca | ||
|
9e52529025 | ||
|
16a00db1f0 | ||
|
47cce303d5 | ||
|
63c50c08eb | ||
|
7c0d2577a8 | ||
|
9b5554aa1e | ||
|
94892e56dd | ||
|
481f33b898 | ||
|
0980ddfc54 | ||
|
59793f9889 | ||
|
e7c910d4fa | ||
|
1bf7708830 | ||
|
83707bfa06 | ||
|
ff7d7c2d49 | ||
|
b7b17391de | ||
|
41d822f754 | ||
|
5b2d894269 | ||
|
8ca8702fbc | ||
|
e988b8e7d6 | ||
|
0b8a5ac87c | ||
|
9cebd1ddaf | ||
|
72d1094fb6 | ||
|
5b45593f3c | ||
|
a81964a603 | ||
|
2eb4437159 | ||
|
73de195334 | ||
|
fabf428f00 | ||
|
2ebf60f28d | ||
|
6fb94326e7 | ||
|
277d391f01 | ||
|
5d6446a7bd | ||
|
c6e8befe21 | ||
|
48a28e0950 | ||
|
86718c517d | ||
|
64baf7c147 | ||
|
e96a5917bb | ||
|
4fb3e42a70 | ||
|
561302a30a | ||
|
c24ad2fed7 | ||
|
41e3f8fecb | ||
|
44a79a8a6b | ||
|
2f51fcfb8b | ||
|
5adde2671e | ||
|
9c0f34c0ab | ||
|
cd1f26d4e7 | ||
|
619daa1307 | ||
|
f9c1dad0ba | ||
|
0baa524d8d | ||
|
48c8ae6819 | ||
|
ade25f34b3 | ||
|
3e5e8b9f1d | ||
|
252c9f6226 | ||
|
56d0e704c0 | ||
|
47fd6e85b2 | ||
|
2ac027c78b | ||
|
177e62a896 | ||
|
7143456043 | ||
|
d63de76cb3 | ||
|
5dc19500ad | ||
|
808454b561 | ||
|
74792f6b6e | ||
|
aebc3bf280 | ||
|
dccd283dd2 | ||
|
f8137b94db | ||
|
63306c1f64 | ||
|
7291c8f8c3 | ||
|
f426a357b1 | ||
|
ab17674f75 | ||
|
5797099552 | ||
|
b449d1cd81 | ||
|
0e54983be8 | ||
|
72bd52e061 | ||
|
e1d2e168ed | ||
|
5e64051665 | ||
|
4f28d87a6d | ||
|
4862eccd88 | ||
|
202814ae9d | ||
|
61d4353bc7 | ||
|
1ca0393771 | ||
|
60c7ab3e91 | ||
|
6b17850739 | ||
|
482d6277e0 | ||
|
a40fc22047 | ||
|
bc79b636bb | ||
|
e167e5d09f | ||
|
250e68840b | ||
|
b2f94675ce | ||
|
b8da0a8c8e | ||
|
a7ab87832b | ||
|
0f130dd91c | ||
|
c9582a0468 | ||
|
6fd0e71530 | ||
|
f8f49159ad | ||
|
956b29eb64 | ||
|
6e92d52c14 | ||
|
f113766f22 | ||
|
2876211b14 | ||
|
2a85694c9b | ||
|
9685fdd7aa | ||
|
b9afb2eb6b | ||
|
fd54205a5f | ||
|
d17cb66195 | ||
|
2e6f5fdf71 | ||
|
e2c6ae906d | ||
|
8dd6096f5e | ||
|
3a3f358f9b | ||
|
c51000ce60 | ||
|
a00b009f77 | ||
|
d0c4524253 | ||
|
773613bc80 | ||
|
a980309744 | ||
|
3ea2946e08 | ||
|
c0c135426e | ||
|
a81000529d | ||
|
5dddef6f49 | ||
|
587f05e551 | ||
|
c71c196157 | ||
|
1b6e6254fe | ||
|
fb85c841be | ||
|
acc7b811b6 | ||
|
4cb15e0a0f | ||
|
bf0318eab6 | ||
|
bc96f75992 | ||
|
fd901c5e3f | ||
|
b3bb438254 | ||
|
e43adfc7af | ||
|
2adcfc9563 | ||
|
07528a431e | ||
|
a925cc7ddb | ||
|
6497b4fb65 | ||
|
d76e24053a | ||
|
9677b012da | ||
|
4c3f93e329 | ||
|
d0e2c2308a | ||
|
5d9aa457f4 | ||
|
97ca285cf2 | ||
|
eda5c9bde1 | ||
|
df7409f83d | ||
|
80b5a37036 | ||
|
86d79cd8a6 | ||
|
74f5def3d4 | ||
|
5daf2d416a | ||
|
8e948e4a4d | ||
|
6193a7c9d8 | ||
|
fdf4d63f3b | ||
|
3ba9d53b8b | ||
|
17c40ef271 | ||
|
b59d59b124 | ||
|
01a3d365ef | ||
|
3fd5e50c80 | ||
|
26df083bd4 | ||
|
7700ae3135 | ||
|
eeae331ba0 | ||
|
2edd7a995b | ||
|
638fdb49cb | ||
|
642f117d54 | ||
|
3205e47a13 | ||
|
77767cd93a | ||
|
b55b86d0b3 | ||
|
760aeb61a7 | ||
|
c1c5536ec8 | ||
|
35fa067219 | ||
|
e974ec2477 | ||
|
a3572c9fdd | ||
|
7bcb61849d | ||
|
eb0939d967 | ||
|
9eafc60fa0 | ||
|
38675dbe0f | ||
|
b7e4524ac0 | ||
|
052828047c | ||
|
e37eae55b8 | ||
|
8080abda67 | ||
|
f916e41d00 | ||
|
b20aa4609c | ||
|
7e8245abcc | ||
|
6444e16df9 | ||
|
c8d2045f89 | ||
|
ab0655d5a9 | ||
|
5fe4b47072 | ||
|
0f69d2084c | ||
|
d692a7dddd | ||
|
f1814ce35f | ||
|
2c81a4c1db | ||
|
954f330ace | ||
|
70e4211ad1 | ||
|
3743d6d208 | ||
|
db2ce9b073 | ||
|
5a7b30699b | ||
|
c01e1e0486 | ||
|
4c466d4620 | ||
|
adc91a4ce0 | ||
|
80a2267283 | ||
|
e56e55bb3b | ||
|
cc4ae5d19b | ||
|
9fff793dff | ||
|
c4417470da | ||
|
bb8c7851d2 | ||
|
2ddad4dd82 | ||
|
9eb7c0d206 | ||
|
ba76efba14 | ||
|
4bfcd8fcd2 | ||
|
3cfb895054 | ||
|
957def1264 | ||
|
a5eaebeefc | ||
|
2e95b56508 | ||
|
3f7997d7ae | ||
|
f1000b448d | ||
|
25bae61520 | ||
|
33c84331fe | ||
|
82c8c3a491 | ||
|
b99d8d7f6b | ||
|
9e06f6e113 | ||
|
ce715ad15f | ||
|
7745a019c0 | ||
|
3c60f07d98 | ||
|
f26a6212d6 | ||
|
9978503a69 | ||
|
3a38a57ae1 | ||
|
050f87168a | ||
|
5b7b37860a | ||
|
ccafa76019 | ||
|
ffc3195d77 | ||
|
8eccb5d6bd | ||
|
85f365bd73 | ||
|
1fc7cff52b | ||
|
f40f7cc0fd | ||
|
d44957aa95 | ||
|
520439a7c4 | ||
|
0d7e1dacfd | ||
|
d030209d40 | ||
|
0887bd3d95 | ||
|
5efeb05aa7 | ||
|
f0d29be521 | ||
|
651e111d1f | ||
|
8c65257a5a | ||
|
c22d05032e | ||
|
540f36eee4 | ||
|
2939feadec | ||
|
fcf47904aa | ||
|
2697bb2bc7 | ||
|
020d9de4b3 | ||
|
211f1bf764 | ||
|
78c02dd7e7 | ||
|
b2f5fe2f60 | ||
|
47a3980b12 | ||
|
c15f3c89fa | ||
|
423e8cba88 | ||
|
2481c486a5 | ||
|
c58e1994e9 | ||
|
97eb262d1e | ||
|
258cecf75d | ||
|
af68a98abe | ||
|
c5a07ff80f | ||
|
5d4c550df4 | ||
|
5446cad1b0 | ||
|
6560cc6f27 | ||
|
9e16e1c0c5 | ||
|
73011c6bb0 | ||
|
114f7f348e | ||
|
579e6840f8 | ||
|
5c878a695f | ||
|
1a4a4defcc | ||
|
597c19466e | ||
|
d4b99b5ee9 | ||
|
d0676dbf7c | ||
|
aa076ee53b | ||
|
de604b37a6 | ||
|
7ad9939fac | ||
|
e425b7ccca | ||
|
2e61bc8bf9 | ||
|
60874d0197 | ||
|
37c982b66e | ||
|
dbe9c15ee1 | ||
|
56766e794f | ||
|
9ba24f305d | ||
|
d2f784e5da | ||
|
79fa1c957e | ||
|
0ea4eb5206 | ||
|
413964b92f | ||
|
b0d91204a4 | ||
|
6796861773 | ||
|
41fd9ab19c | ||
|
4ae5944567 | ||
|
59fd3934f3 | ||
|
85ee784efc | ||
|
0e3b87a1da | ||
|
74326ba7a3 | ||
|
06648d415a | ||
|
4144c3937c | ||
|
91cebe7b67 | ||
|
af8c193b52 | ||
|
5500ec8c06 | ||
|
98f3b7e7eb | ||
|
1f90455ee6 | ||
|
7f7295e3b0 | ||
|
3dd5612732 | ||
|
64ce465285 | ||
|
c399447b81 | ||
|
a1427b1a31 | ||
|
442dc43206 | ||
|
43fe00c1c2 | ||
|
4ae2e1450d | ||
|
5e075f6102 | ||
|
fdecf13299 | ||
|
daa5ed2aaf | ||
|
eb2a7208c8 | ||
|
63a7897457 | ||
|
8da6214e10 | ||
|
2e1e8c20c7 | ||
|
9603c866af | ||
|
166350fcb6 | ||
|
ff7d36bcbc | ||
|
caee8e7cdf | ||
|
072aa720ff | ||
|
8f0bca00c0 | ||
|
f1d8b10867 | ||
|
dfe8774616 | ||
|
d3d92d13b1 | ||
|
1c977b79ef | ||
|
32db249538 | ||
|
a954cde36a | ||
|
e830d9766b | ||
|
395c4a4b7f | ||
|
6a95a314e9 | ||
|
ed03ac7524 | ||
|
d3a9ec3002 | ||
|
22c03ceba7 | ||
|
b99a7756de | ||
|
3fdf3a9819 | ||
|
fdcf839753 | ||
|
91c6d1525d | ||
|
fd2aa7c79b | ||
|
520177afca | ||
|
47f21af7fb | ||
|
0065cadf2d | ||
|
9fc973366f | ||
|
67da4d6971 | ||
|
de9f5b0456 | ||
|
7372faa969 | ||
|
c92373ecd6 | ||
|
e2f4674fb3 | ||
|
0ce4197a1e | ||
|
ea4f9ed615 | ||
|
57d9d40c29 | ||
|
377f5e4124 | ||
|
916a001d73 | ||
|
0af072c77e | ||
|
7809da61e6 | ||
|
c90ea64e59 | ||
|
176b12dd8c | ||
|
da3616db72 | ||
|
53cd264ece | ||
|
e1af0c67bd | ||
|
3e5c0707bb | ||
|
a44e499eee | ||
|
cf42e1a480 | ||
|
efd15aaad7 | ||
|
d6f41fbfa1 | ||
|
c1bd07635a | ||
|
27a3f4e38c | ||
|
bae551b7ab | ||
|
6b4bf92e7f | ||
|
b8212358bc | ||
|
a85d0ced8b | ||
|
164232ba4d | ||
|
f26af06739 | ||
|
ad5ab71551 | ||
|
8fee86a5db | ||
|
a1e7e4831d | ||
|
23d90ec066 | ||
|
8635a59ac7 | ||
|
c3d495fe53 | ||
|
99140b98b9 | ||
|
0819e97646 | ||
|
105679d79d | ||
|
569ce1d3dc | ||
|
4f99c208aa | ||
|
5d6c236af6 | ||
|
8db5cdd512 | ||
|
9ec571ab23 | ||
|
1d53d00532 | ||
|
2cd4fcfd88 | ||
|
9ca9bfe46f | ||
|
950d9df217 | ||
|
9f9d227600 | ||
|
3bbbeb347a | ||
|
453082ab9f | ||
|
d701120d90 | ||
|
052a8ba991 | ||
|
a76e95dcb5 | ||
|
7f1adf120c | ||
|
3f4140d5d3 | ||
|
639d325a0c | ||
|
ab6decec0b | ||
|
c294b7747d | ||
|
c937e69d3b | ||
|
6e453e70dc | ||
|
83e13c4ca8 | ||
|
72b4c4fe28 | ||
|
711cdf53b3 | ||
|
7b5115d19c | ||
|
3c75711b30 | ||
|
02db2afb2b | ||
|
1e7335a506 | ||
|
b7f651a631 | ||
|
b6fb22133c | ||
|
90a8798f4c | ||
|
5b0d662007 | ||
|
596f06d5c0 | ||
|
afdb320266 | ||
|
bfc9c6913f | ||
|
d71290153e | ||
|
2cd4f73177 | ||
|
e9e6e5701e | ||
|
bf9ed50d51 | ||
|
a0766b1d70 | ||
|
4d8e2b5356 | ||
|
663b0f8378 | ||
|
18528b4f47 | ||
|
b15df5a0af | ||
|
7f5b492198 | ||
|
15de3e1687 | ||
|
54cdb5dbf5 | ||
|
f405aedf6e | ||
|
2008a413b6 | ||
|
798023b199 | ||
|
bf8be43c90 | ||
|
47aa2fb215 | ||
|
c5dfe8e940 | ||
|
c746e8b0c3 | ||
|
f116ee8f05 | ||
|
4788d4eb4d | ||
|
c8cee96b1c | ||
|
22392b64fc | ||
|
6f2494f9d5 | ||
|
88664f03a1 | ||
|
99254492e3 | ||
|
5479fab3e4 | ||
|
730badfebc | ||
|
8361d021a5 | ||
|
2c5ba00dc0 | ||
|
ea72c3e035 | ||
|
9429d392d6 | ||
|
db8892bef3 | ||
|
9c6575689a | ||
|
1745c4f15b | ||
|
7a0b4f2070 | ||
|
58309c2018 | ||
|
54d973e059 | ||
|
1639df6862 | ||
|
b1aa852b58 | ||
|
df35857c9b | ||
|
4f55facece | ||
|
641bbc21af | ||
|
a909182aad | ||
|
3cfd532382 | ||
|
d30143d146 | ||
|
e5c6f9e8bc | ||
|
6007b35096 | ||
|
5238b9cd18 | ||
|
1b29041089 | ||
|
7aa71188b9 | ||
|
a883412ccc | ||
|
79917e7e88 | ||
|
487618314c | ||
|
81d534670b | ||
|
694a630a89 | ||
|
aaf1cc3894 | ||
|
bbfc50b185 | ||
|
e0d9e309ae | ||
|
db32eb7295 | ||
|
1d2639cd92 | ||
|
fd7199d3b4 | ||
|
31fec67150 | ||
|
16594715cc | ||
|
5970d38a1a | ||
|
8d1e55a765 | ||
|
351b4a0ce4 | ||
|
c049f01c46 | ||
|
6d5dc9cfa3 | ||
|
985a2f1c3d | ||
|
cac3e38bcb | ||
|
77618d27b9 | ||
|
c271124e84 | ||
|
8dbdd4abd4 | ||
|
460bcd8f68 | ||
|
8c19af511e | ||
|
d7ae7a9e1f | ||
|
49321eef6f | ||
|
5d204bd21e | ||
|
e9e30a2516 | ||
|
d4437ce5ee | ||
|
8ef5f48a3e | ||
|
2ee0b0a2ae | ||
|
975c46b35f | ||
|
371286180a | ||
|
3fa988aa17 | ||
|
2543a1ee19 | ||
|
766cad3ad3 | ||
|
02dda2c00b | ||
|
05d271d0d9 | ||
|
b5d0b1fd79 | ||
|
5dbb282289 | ||
|
6268aaff6e | ||
|
c2be4bdfc8 | ||
|
8110952abb | ||
|
492d39933d | ||
|
c63963c99f | ||
|
3093ff7bac | ||
|
1f9af67806 | ||
|
6a8663c270 | ||
|
a1ef3b009b | ||
|
b7f74cdb01 | ||
|
9455d47c10 | ||
|
9a64d851f1 | ||
|
abfbd76af2 | ||
|
4bdfa33958 | ||
|
ba52b0f952 | ||
|
73b368de28 | ||
|
4ec05dd1c9 | ||
|
e2285683c4 | ||
|
1f078e5e03 | ||
|
51eac47775 | ||
|
391f1a7b57 | ||
|
424fdd5cda | ||
|
0d28b9e09c | ||
|
69daa095bf | ||
|
5be2a9c57a | ||
|
cc374548e8 | ||
|
fec7b8d7b8 | ||
|
de835d687a | ||
|
0252c5a7f1 | ||
|
a17cecdee2 | ||
|
420d006ab6 | ||
|
2795b08b1c | ||
|
cc715caaf9 | ||
|
b8bcb063cc | ||
|
7c4d7b0c42 | ||
|
5da9f5c179 | ||
|
f9dfc02fbf | ||
|
7949b7dc52 | ||
|
8a9fe5f8e2 | ||
|
3f5047dd4f | ||
|
243a29b495 | ||
|
62cfefd718 | ||
|
c5e842b58a | ||
|
94d4bc7c4a | ||
|
41715eb194 | ||
|
411fb2407c | ||
|
d93ace517e | ||
|
aab6998a49 | ||
|
f9b36c0f5f | ||
|
7db0c5834b | ||
|
c124d8277d | ||
|
4cd75072c2 | ||
|
6e86552714 | ||
|
ee9f35dc74 | ||
|
b2f6a9f129 | ||
|
84514e18ce | ||
|
4fcabd4f00 | ||
|
9c09f2a75a | ||
|
d48d0edd9c | ||
|
b3a4b56733 | ||
|
b51ff60875 | ||
|
f15503d2cc | ||
|
6b7407599b | ||
|
96371548d3 | ||
|
5688d58dcc | ||
|
50f9f48cc1 | ||
|
b3dabdd2e0 | ||
|
5e1a7e4e3c | ||
|
b7ce8b4b0f | ||
|
13ea2c5253 | ||
|
ba017a8d71 | ||
|
58929b550b | ||
|
80fcdb4f91 | ||
|
cbcfb27335 | ||
|
a37a59b3eb | ||
|
b79ad68a50 | ||
|
115d6d4c7d | ||
|
29ae3b0293 | ||
|
9b57050fc6 | ||
|
bf8d25fc91 | ||
|
680037372e | ||
|
155750a4c8 | ||
|
aff2a05f1c | ||
|
931a3bc87d | ||
|
ed3bec702e | ||
|
9d8aabded6 | ||
|
219ede2ae5 | ||
|
52cd17be3f | ||
|
28801d8d42 | ||
|
e087f5a33c | ||
|
14c3324cac | ||
|
e95d34d13c | ||
|
a0f4a50291 | ||
|
e9848670e5 | ||
|
db5e36b2b6 | ||
|
6688b96b38 | ||
|
fa2655f7d4 | ||
|
30d7c14e29 | ||
|
e1655d7c3a | ||
|
16b052e99b | ||
|
6db00b977e | ||
|
5a283bb5f7 | ||
|
8fa43fc607 | ||
|
1ef49fca1e | ||
|
923ec7f682 | ||
|
c79b291923 | ||
|
e425ee14c6 | ||
|
e543fecde0 | ||
|
253e953962 | ||
|
f259ff0e29 | ||
|
b0638ca2cd | ||
|
d646ddb5d6 | ||
|
073d5de464 | ||
|
1f56b27082 | ||
|
880a56d1c0 | ||
|
26cfe3ebc8 | ||
|
16d06ac7c9 | ||
|
771ff40c4e | ||
|
b343637745 | ||
|
036d7d1a79 | ||
|
8bd3d8d232 | ||
|
bc0976b8d6 | ||
|
5b841e69a4 | ||
|
790adbe143 | ||
|
da68471b33 | ||
|
55299e3944 | ||
|
0e6ea6be85 | ||
|
a8681aca4e | ||
|
526988651d | ||
|
8f2283cf1c | ||
|
0a9992267c | ||
|
4a05a02fe6 | ||
|
6a40fe1bfa | ||
|
74b1877f1b | ||
|
46d67de350 | ||
|
44b6948d1e | ||
|
02177d916f | ||
|
f6cc7ed16a | ||
|
84af4b08f5 | ||
|
0828f63bc9 | ||
|
d1ec67c8d2 | ||
|
ca4b3d35dd | ||
|
4589a155e4 | ||
|
da8326fd58 | ||
|
b6c4d51c65 | ||
|
7d6e8c65f3 | ||
|
af4cf82071 | ||
|
fbfc6e34f6 | ||
|
1e4af4e304 | ||
|
6f27e0bd09 | ||
|
1c9a7b3621 | ||
|
cb1c6f1c6f | ||
|
55cd4d207f | ||
|
cd8e565f78 | ||
|
1c936ee984 | ||
|
1686a1a159 | ||
|
bbec9e21bd | ||
|
ac6f0b04c5 | ||
|
39e4da7ce8 | ||
|
ee71bc9b11 | ||
|
ccb43c2a62 | ||
|
59f256e989 | ||
|
033dfac48d | ||
|
e6c12f63f4 | ||
|
ce23e3e097 | ||
|
5c468bdb7f | ||
|
c4ea32367d | ||
|
436a5aed0d | ||
|
cee25952d4 | ||
|
d2de389cba | ||
|
84528efad6 | ||
|
e6015f93c5 | ||
|
6700d862c4 | ||
|
f2c4d4a43c | ||
|
6510f5819b | ||
|
fceb957ad2 | ||
|
d30390aa9e | ||
|
b18e0f88c3 | ||
|
28bf37089b | ||
|
5b9c8c7ab5 | ||
|
9b73faef1b | ||
|
9da051cd78 | ||
|
e108883247 | ||
|
32cf10b3b8 | ||
|
d08d8081b6 | ||
|
ad4d53515a | ||
|
1cf54d3611 | ||
|
9ceff1c965 | ||
|
b506a0cf48 | ||
|
88863a63d7 | ||
|
16fe80f6b1 | ||
|
61401e2640 | ||
|
aaef9fc2e4 | ||
|
b01abcaf64 | ||
|
d65ca8d789 | ||
|
1562dbe6ef | ||
|
3a5e515d4f | ||
|
0d74373fd0 | ||
|
7f090e3311 | ||
|
ee6802a0fa | ||
|
ca3d374a64 | ||
|
7871eb592a | ||
|
0a9bdb2157 | ||
|
760b56dd9d | ||
|
26d8c14796 | ||
|
14a191009d | ||
|
123728393d | ||
|
8daa0d36d4 | ||
|
09490877a0 | ||
|
71002d3753 | ||
|
12e03abfa9 | ||
|
4d8f6d904d | ||
|
5dd01b4aef | ||
|
fa0fb57e4b | ||
|
dccaa0eeb0 | ||
|
ad19c8a2d9 | ||
|
eae915f34f | ||
|
ed5803bae8 | ||
|
ac202ee4ed | ||
|
6eb04c63cb | ||
|
e8f114b4cb | ||
|
f44d2f874d | ||
|
7d83abb8d0 | ||
|
2025a6a1df | ||
|
5228b31661 | ||
|
186999b5da | ||
|
0bf78e7acf | ||
|
22a36d3a81 | ||
|
2ea99b1810 | ||
|
70b6b8d675 | ||
|
96991655b4 |
12
.coveragerc
Normal file
12
.coveragerc
Normal file
@ -0,0 +1,12 @@
|
||||
# http://nedbatchelder.com/code/coverage/config.html
|
||||
[run]
|
||||
concurrency = multiprocessing
|
||||
parallel = True
|
||||
branch = True
|
||||
|
||||
[report]
|
||||
include = src/*
|
||||
|
||||
[paths]
|
||||
source = .
|
||||
/lorax/
|
2
.dockerignore
Normal file
2
.dockerignore
Normal file
@ -0,0 +1,2 @@
|
||||
.git/
|
||||
.coverage
|
9
.gitignore
vendored
9
.gitignore
vendored
@ -1,2 +1,11 @@
|
||||
*.pyc
|
||||
src/pylorax/version.py*
|
||||
src/pylorax/api/version.py*
|
||||
src/composer/version.py*
|
||||
*.swp
|
||||
.pylint.d/
|
||||
_build/
|
||||
tests/pylint/.pylint.d/
|
||||
__pycache__/
|
||||
.coverage
|
||||
pylint-log
|
||||
|
23
.travis.yml
Normal file
23
.travis.yml
Normal file
@ -0,0 +1,23 @@
|
||||
sudo: required
|
||||
language: python
|
||||
services:
|
||||
- docker
|
||||
|
||||
script:
|
||||
- make test-in-docker
|
||||
|
||||
after_success:
|
||||
- |
|
||||
|
||||
sudo docker create --name results-cont welder/lorax-composer
|
||||
sudo docker cp results-cont:/lorax/.coverage .coverage.docker
|
||||
sudo docker rm results-cont
|
||||
|
||||
pip install coverage==3.6 coveralls
|
||||
coverage combine
|
||||
coveralls
|
||||
|
||||
notifications:
|
||||
email:
|
||||
on_failure: change
|
||||
on_success: never
|
42
Dockerfile.test
Normal file
42
Dockerfile.test
Normal file
@ -0,0 +1,42 @@
|
||||
FROM centos:7
|
||||
|
||||
COPY epel.repo /etc/yum.repos.d/
|
||||
RUN yum -y install --nogpgcheck epel-release && \
|
||||
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-* && \
|
||||
yum -y install \
|
||||
anaconda-tui \
|
||||
libgit2-glib \
|
||||
libselinux-python \
|
||||
make \
|
||||
pykickstart \
|
||||
python-coverage \
|
||||
python-coveralls \
|
||||
python-flask \
|
||||
python-gevent \
|
||||
python-magic \
|
||||
python-mako \
|
||||
python2-mock \
|
||||
python-nose \
|
||||
python-pocketlint \
|
||||
python-pylint \
|
||||
pyparted \
|
||||
python2-pytoml \
|
||||
python-semantic_version \
|
||||
python-sphinx \
|
||||
python-rpmfluff \
|
||||
python-librepo \
|
||||
beakerlib \
|
||||
sudo \
|
||||
tito \
|
||||
rsync \
|
||||
e2fsprogs \
|
||||
xz-lzma-compat \
|
||||
pbzip2 \
|
||||
squashfs-tools \
|
||||
qemu-img \
|
||||
which && \
|
||||
touch /.in-container
|
||||
RUN useradd weldr
|
||||
VOLUME /lorax-ro
|
||||
VOLUME /test-results
|
||||
WORKDIR /lorax-ro
|
134
Makefile
134
Makefile
@ -1,37 +1,92 @@
|
||||
PYTHON ?= /usr/bin/python
|
||||
DESTDIR ?= /
|
||||
DOCKER ?= docker
|
||||
|
||||
PKGNAME = lorax
|
||||
PKGNAME = lorax-composer
|
||||
VERSION = $(shell awk '/Version:/ { print $$2 }' $(PKGNAME).spec)
|
||||
RELEASE = $(shell awk '/Release:/ { print $$2 }' $(PKGNAME).spec | sed -e 's|%.*$$||g')
|
||||
TAG = lorax-$(VERSION)-$(RELEASE)
|
||||
|
||||
IMAGE_RELEASE = $(shell awk -F: '/FROM/ { print $$2}' Dockerfile.test)
|
||||
|
||||
ifeq ($(TEST_OS),)
|
||||
OS_ID = $(shell awk -F= '/^ID=/ {print $$2}' /etc/os-release)
|
||||
OS_VERSION = $(shell awk -F= '/^VERSION_ID/ {print $$2}' /etc/os-release | tr '.' '-')
|
||||
TEST_OS = $(OS_ID)-$(OS_VERSION)
|
||||
endif
|
||||
export TEST_OS
|
||||
VM_IMAGE=$(CURDIR)/test/images/$(TEST_OS)
|
||||
|
||||
default: all
|
||||
|
||||
src/pylorax/version.py: lorax.spec
|
||||
src/composer/version.py:
|
||||
echo "num = '$(VERSION)-$(RELEASE)'" > src/composer/version.py
|
||||
|
||||
src/pylorax/version.py:
|
||||
echo "num = '$(VERSION)-$(RELEASE)'" > src/pylorax/version.py
|
||||
|
||||
all: src/pylorax/version.py
|
||||
src/pylorax/api/version.py:
|
||||
echo "num = '$(VERSION)-$(RELEASE)'" > src/pylorax/api/version.py
|
||||
|
||||
all: src/pylorax/version.py src/pylorax/api/version.py src/composer/version.py
|
||||
$(PYTHON) setup.py build
|
||||
|
||||
install: all
|
||||
$(PYTHON) setup.py install --root=$(DESTDIR)
|
||||
mkdir -p $(DESTDIR)/$(mandir)/man1
|
||||
install -m 644 docs/lorax.1 $(DESTDIR)/$(mandir)/man1
|
||||
install -m 644 docs/livemedia-creator.1 $(DESTDIR)/$(mandir)/man1
|
||||
install -m 644 docs/man/lorax.1 $(DESTDIR)/$(mandir)/man1
|
||||
install -m 644 docs/man/livemedia-creator.1 $(DESTDIR)/$(mandir)/man1
|
||||
mkdir -p $(DESTDIR)/etc/bash_completion.d
|
||||
install -m 644 etc/bash_completion.d/composer-cli $(DESTDIR)/etc/bash_completion.d
|
||||
|
||||
check:
|
||||
@echo "*** Running pylint ***"
|
||||
PYTHONPATH=$(PYTHONPATH):./src/ ./tests/pylint/runpylint.py
|
||||
|
||||
test: docs
|
||||
@echo "*** Running tests ***"
|
||||
PYTHONPATH=$(PYTHONPATH):./src/ $(PYTHON) -m nose -v --with-coverage --cover-erase --cover-branches \
|
||||
--cover-package=pylorax --cover-inclusive \
|
||||
./tests/pylorax/ ./tests/composer/
|
||||
|
||||
coverage report -m
|
||||
[ -f "/usr/bin/coveralls" ] && [ -n "$(COVERALLS_REPO_TOKEN)" ] && coveralls || echo
|
||||
|
||||
# need `losetup`, which needs Docker to be in privileged mode (--privileged)
|
||||
# but even so fails in Travis CI
|
||||
test_images:
|
||||
sudo -E ./tests/test_cli.sh tests/cli/test_compose_ext4-filesystem.sh \
|
||||
tests/cli/test_compose_partitioned-disk.sh \
|
||||
tests/cli/test_compose_tar.sh \
|
||||
tests/cli/test_compose_tar_kickstart.sh \
|
||||
tests/cli/test_compose_qcow2.sh \
|
||||
tests/cli/test_compose_live-iso.sh
|
||||
|
||||
test_cli:
|
||||
sudo -E ./tests/test_cli.sh
|
||||
|
||||
clean:
|
||||
-rm -rf build src/pylorax/version.py
|
||||
-rm -rf build src/pylorax/api/version.py
|
||||
-rm -rf build src/composer/version.py
|
||||
|
||||
tag:
|
||||
git tag -f $(TAG)
|
||||
|
||||
archive: tag
|
||||
docs:
|
||||
$(MAKE) -C docs apidoc html
|
||||
|
||||
archive:
|
||||
@git archive --format=tar --prefix=$(PKGNAME)-$(VERSION)/ $(TAG) > $(PKGNAME)-$(VERSION).tar
|
||||
@gzip $(PKGNAME)-$(VERSION).tar
|
||||
@gzip -f $(PKGNAME)-$(VERSION).tar
|
||||
@echo "The archive is in $(PKGNAME)-$(VERSION).tar.gz"
|
||||
|
||||
srpm: archive $(PKGNAME).spec
|
||||
rpmbuild -bs \
|
||||
--define "_sourcedir $(CURDIR)" \
|
||||
--define "_srcrpmdir $(CURDIR)" \
|
||||
lorax-composer.spec
|
||||
|
||||
local:
|
||||
@rm -rf $(PKGNAME)-$(VERSION).tar.gz
|
||||
@rm -rf /var/tmp/$(PKGNAME)-$(VERSION)
|
||||
@ -40,3 +95,68 @@ local:
|
||||
@dir=$$PWD; cd /var/tmp; tar --gzip -cSpf $$dir/$(PKGNAME)-$(VERSION).tar.gz $(PKGNAME)-$(VERSION)
|
||||
@rm -rf /var/tmp/$(PKGNAME)-$(VERSION)
|
||||
@echo "The archive is in $(PKGNAME)-$(VERSION).tar.gz"
|
||||
|
||||
test-in-copy:
|
||||
rsync -aP --exclude=.git /lorax-ro/ /lorax/
|
||||
make -C /lorax/ ci
|
||||
cp /lorax/.coverage /test-results/
|
||||
|
||||
test-in-docker:
|
||||
sudo $(DOCKER) build -t welder/lorax-tests:$(IMAGE_RELEASE) -f Dockerfile.test .
|
||||
sudo $(DOCKER) run --rm -it -v `pwd`/.test-results/:/test-results -v `pwd`:/lorax-ro:ro --security-opt label=disable welder/lorax-tests:$(IMAGE_RELEASE) make test-in-copy
|
||||
|
||||
docs-in-docker:
|
||||
sudo $(DOCKER) run -it --rm -v `pwd`/docs/html/:/lorax/docs/html/ --security-opt label=disable welder/lorax-tests:$(IMAGE_RELEASE) make docs
|
||||
|
||||
ci: check test
|
||||
|
||||
$(VM_IMAGE): TAG=HEAD
|
||||
$(VM_IMAGE): srpm bots
|
||||
rm -f $(VM_IMAGE) $(VM_IMAGE).qcow2
|
||||
srpm=$(shell rpm --qf '%{Name}-%{Version}-%{Release}.src.rpm\n' -q --specfile lorax-composer.spec | head -n1) ; \
|
||||
bots/image-customize -v \
|
||||
--resize 20G \
|
||||
--upload $$srpm:/var/tmp \
|
||||
--upload $(CURDIR)/test/vm.install:/var/tmp/vm.install \
|
||||
--upload $(realpath tests):/ \
|
||||
--run-command "chmod +x /var/tmp/vm.install" \
|
||||
--run-command "cd /var/tmp; /var/tmp/vm.install $$srpm" \
|
||||
$(TEST_OS)
|
||||
[ -f ~/.config/lorax-test-env ] && bots/image-customize \
|
||||
--upload ~/.config/lorax-test-env:/var/tmp/lorax-test-env \
|
||||
$(TEST_OS) || echo
|
||||
|
||||
# convenience target for the above
|
||||
vm: $(VM_IMAGE)
|
||||
echo $(VM_IMAGE)
|
||||
|
||||
vm-releng:
|
||||
rm -f $(VM_IMAGE) $(VM_IMAGE).qcow2
|
||||
bots/image-customize -v \
|
||||
--resize 20G \
|
||||
--upload $(CURDIR)/test/vm.install:/var/tmp/vm.install \
|
||||
--upload $(realpath tests):/ \
|
||||
--run-command "chmod +x /var/tmp/vm.install" \
|
||||
--run-command "cd /var/tmp; BUILD_SRPM=0 /var/tmp/vm.install" \
|
||||
$(TEST_OS)
|
||||
[ -f ~/.config/lorax-test-env ] && bots/image-customize \
|
||||
--upload ~/.config/lorax-test-env:/var/tmp/lorax-test-env \
|
||||
$(TEST_OS) || echo
|
||||
|
||||
|
||||
vm-reset:
|
||||
rm -f $(VM_IMAGE) $(VM_IMAGE).qcow2
|
||||
|
||||
# checkout Cockpit's bots for standard test VM images and API to launch them
|
||||
# must be from master, as only that has current and existing images; but testvm.py API is stable
|
||||
# support CI testing against a bots change
|
||||
bots:
|
||||
git clone --quiet --reference-if-able $${XDG_CACHE_HOME:-$$HOME/.cache}/cockpit-project/bots https://github.com/cockpit-project/bots.git
|
||||
if [ -n "$$COCKPIT_BOTS_REF" ]; then git -C bots fetch --quiet --depth=1 origin "$$COCKPIT_BOTS_REF"; git -C bots checkout --quiet FETCH_HEAD; fi
|
||||
@echo "checked out bots/ ref $$(git -C bots rev-parse HEAD)"
|
||||
|
||||
.PHONY: all install check test clean tag docs archive local
|
||||
|
||||
.PHONY: ci_after_success
|
||||
ci_after_success:
|
||||
# nothing to do here, but Jenkins expects this to be present, otherwise fails
|
||||
|
@ -16,6 +16,14 @@ minimum you need:
|
||||
--iso to specify the Anaconda install media to use with virt-install
|
||||
--ks is the kickstart to use to install the system
|
||||
|
||||
To use livemedia-creator with virt-install you will need to install the
|
||||
following packages, as well as have libvirtd setup correctly.
|
||||
virt-install
|
||||
libvirt-python
|
||||
|
||||
If you are going to be using Anaconda directly, with --no-virt mode, make sure
|
||||
you have the anaconda package installed.
|
||||
|
||||
|
||||
QUICKSTART
|
||||
----------
|
||||
@ -74,13 +82,27 @@ written using the Mako template system which is very flexible.
|
||||
|
||||
KICKSTARTS
|
||||
----------
|
||||
Existing spin kickstarts can be used to create live media with a few changes.
|
||||
Here are the steps I used to convert the XFCE spin.
|
||||
The docs/ directory includes two example kickstarts, one to create a live desktop
|
||||
iso using GNOME, and the other to create a minimal disk image. When creating your
|
||||
own kickstarts you should start with the minimal example, it includes several
|
||||
needed packages that are not always included by dependencies.
|
||||
|
||||
livemedia-creator parses the 'part /' entry to determine how big a disk image
|
||||
needs to be created. This means that the common kickstart technique of using
|
||||
%pre to generate a partition scheme for use with %include will not work. There
|
||||
needs to be a 'part /' entry in the main part of the kickstart.
|
||||
|
||||
Only one kickstart file is supported, so if your kickstart is built from a
|
||||
number of %include commands it needs to be flattened into a single file with
|
||||
ksflatten first.
|
||||
|
||||
Or you can use existing spin kickstarts to create live media with a few
|
||||
changes. Here are the steps I used to convert the Fedora XFCE spin.
|
||||
|
||||
1. Flatten the xfce kickstart using ksflatten
|
||||
2. Add zerombr so you don't get the disk init dialog
|
||||
3. Add clearpart --all
|
||||
4. Add swap and biosboot partitions
|
||||
4. Add swap partition
|
||||
5. bootloader target
|
||||
6. Add shutdown to the kickstart
|
||||
7. Add network --bootproto=dhcp --activate to activate the network
|
||||
@ -96,7 +118,6 @@ network --bootproto=dhcp --activate
|
||||
zerombr
|
||||
clearpart --all
|
||||
bootloader --location=mbr
|
||||
part biosboot --size=1
|
||||
part swap --size=512
|
||||
shutdown
|
||||
|
||||
@ -110,8 +131,12 @@ passwd -d root > /dev/null
|
||||
|
||||
cat /dev/null > /dev/fstab
|
||||
|
||||
Do this only for live iso's, the filesystem will be mounted read only if
|
||||
there is no /etc/fstab
|
||||
|
||||
11. Don't delete initramfs files from /boot in %post
|
||||
12. Have dracut-norescue, grub-efi, memtest86+ and syslinux in the package list
|
||||
12. Have dracut-config-generic, grub2-efi, shim, memtest86+, isomd5sum and syslinux in the package list
|
||||
13. Omit dracut-config-rescue from the package list "-dracut-config-rescue"
|
||||
|
||||
One drawback to using virt-install is that it pulls the packages from
|
||||
the repo each time you run it. To speed things up you either need a local
|
||||
@ -129,6 +154,16 @@ You can also add an update repo, but don't name it updates. Add --proxy to
|
||||
it as well.
|
||||
|
||||
|
||||
UEFI Disk Image Creation
|
||||
------------------------
|
||||
When making a live iso the bootloader is added after Anaconda has run. As long as
|
||||
anaconda-tools and grub2-efi-*-cdboot are included in the kickstart the iso will
|
||||
be bootable on UEFI systems.
|
||||
|
||||
To create a disk image, eg. using rhel7-minimal.ks, livemedia-creator needs to be
|
||||
run from a UEFI system or virt running UEFI firmware.
|
||||
|
||||
|
||||
ANACONDA IMAGE INSTALL
|
||||
----------------------
|
||||
You can create images without using virt-install by passing --no-virt on the
|
||||
@ -178,7 +213,7 @@ switch. This will create the partitioned disk image and an XML file that can be
|
||||
used with virt-image to setup a virtual system.
|
||||
|
||||
The XML is generated using the Mako template from
|
||||
/usr/share/lorax/appliance/virt-image.xml You can use a different template by
|
||||
/usr/share/lorax/appliance/libvirt.xml You can use a different template by
|
||||
passing --app-template <template path>
|
||||
|
||||
Documentation on the Mako template system can be found here:
|
||||
@ -203,6 +238,41 @@ title from --title
|
||||
project from --project
|
||||
releasever from --releasever
|
||||
|
||||
The created image can be imported into libvirt using:
|
||||
|
||||
virt-image appliance.xml
|
||||
|
||||
|
||||
TAR FILE CREATION
|
||||
-----------------
|
||||
The --make-tar command can be used to create a tar of the root filesystem. By
|
||||
default it is compressed using xz, but this can be changed using the
|
||||
--compression and --compress-arg options. This option works with both virt and
|
||||
--no-virt install methods.
|
||||
|
||||
As with --make-fsimage the kickstart should be limited to a single / partition.
|
||||
|
||||
eg.
|
||||
|
||||
livemedia-creator --make-tar --iso=/path/to/boot.iso --ks=./docs/fedora-minimal.ks \
|
||||
--image-name=fedora-root.tar.xz
|
||||
|
||||
LIVE IMAGE FOR PXE BOOT
|
||||
-----------------------
|
||||
|
||||
The --make-pxe-live command will produce squashfs image containing live root
|
||||
filesystem that can be used for pxe boot. Directory with results will contain
|
||||
the live image, kernel image, initrd image and template of pxe configuration
|
||||
for the images.
|
||||
|
||||
ATOMIC LIVE IMAGE FOR PXE BOOT
|
||||
------------------------------
|
||||
|
||||
The --make-ostree-live command will produce the same result as --make-pxe-live
|
||||
for installations of Atomic Host. Example kickstart for such an installation
|
||||
using Atomic installer iso with local repo included in the image can be found
|
||||
in docs/rhel-atomic-pxe-live.ks.
|
||||
|
||||
|
||||
DEBUGGING PROBLEMS
|
||||
------------------
|
||||
|
21
README.product
Normal file
21
README.product
Normal file
@ -0,0 +1,21 @@
|
||||
Lorax now supports creation of product.img and updates.img as part of the build
|
||||
process. This is implemented using the installimg template command which will
|
||||
take the contents of a directory and create a compressed archive from it. The
|
||||
directory must be created by one of the packages installed by
|
||||
runtime-install.tmpl or by passing ``--installpkgs <pkgname>`` to lorax at
|
||||
runtime. The x86, ppc, ppc64le and aarch64 templates all look for
|
||||
/usr/share/lorax/product/ and /usr/share/lorax/updates/ directories in the
|
||||
install chroot while creating the final install tree. If there are files in
|
||||
those directories lorax will create images/product.img and/or
|
||||
images/updates.img
|
||||
|
||||
These archives are just like an anaconda updates image -- they are copied over
|
||||
the top of the filesystem at boot time so that you can drop in files to add to
|
||||
or replace anything on the filesystem.
|
||||
|
||||
Anaconda has several places that it looks for updates, the one for product.img
|
||||
is in /run/install/product. For example, to add an installclass to Anaconda
|
||||
you would put your custom class here:
|
||||
|
||||
/usr/share/lorax/product/run/install/product/pyanaconda/installclasses/custom.py
|
||||
|
183
docs/Makefile
Normal file
183
docs/Makefile
Normal file
@ -0,0 +1,183 @@
|
||||
# Makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS =
|
||||
SPHINXBUILD = sphinx-build
|
||||
SPHINXAPIDOC = sphinx-apidoc
|
||||
PAPER =
|
||||
BUILDDIR = .
|
||||
SOURCEDIR = ../src
|
||||
MODULE_NAMES = pylorax.rst pylorax.api.rst modules.rst composer.rst composer.cli.rst
|
||||
|
||||
# User-friendly check for sphinx-build
|
||||
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
|
||||
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
|
||||
endif
|
||||
|
||||
# Internal variables.
|
||||
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||
PAPEROPT_letter = -D latex_paper_size=letter
|
||||
ALLSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
# the i18n builder cannot share the environment and doctrees with the others
|
||||
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
|
||||
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
|
||||
|
||||
help:
|
||||
@echo "Please use \`make <target>' where <target> is one of"
|
||||
@echo " html to make standalone HTML files"
|
||||
@echo " dirhtml to make HTML files named index.html in directories"
|
||||
@echo " singlehtml to make a single large HTML file"
|
||||
@echo " pickle to make pickle files"
|
||||
@echo " json to make JSON files"
|
||||
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||
@echo " qthelp to make HTML files and a qthelp project"
|
||||
@echo " devhelp to make HTML files and a Devhelp project"
|
||||
@echo " epub to make an epub"
|
||||
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
|
||||
@echo " text to make text files"
|
||||
@echo " man to make manual pages"
|
||||
@echo " texinfo to make Texinfo files"
|
||||
@echo " info to make Texinfo files and run them through makeinfo"
|
||||
@echo " gettext to make PO message catalogs"
|
||||
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||
@echo " xml to make Docutils-native XML files"
|
||||
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
|
||||
@echo " linkcheck to check all external links for integrity"
|
||||
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||
|
||||
apidoc:
|
||||
if [ -f /usr/bin/$(SPHINXAPIDOC) ]; then \
|
||||
rm $(addprefix ./, $(MODULE_NAMES)) ; \
|
||||
$(SPHINXAPIDOC) -o . $(SOURCEDIR) ; \
|
||||
fi
|
||||
|
||||
html: apidoc
|
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||
|
||||
dirhtml: apidoc
|
||||
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||
|
||||
singlehtml: apidoc
|
||||
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||
|
||||
pickle: apidoc
|
||||
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||
@echo
|
||||
@echo "Build finished; now you can process the pickle files."
|
||||
|
||||
json: apidoc
|
||||
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||
@echo
|
||||
@echo "Build finished; now you can process the JSON files."
|
||||
|
||||
htmlhelp: apidoc
|
||||
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||
|
||||
qthelp: apidoc
|
||||
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/src.qhcp"
|
||||
@echo "To view the help file:"
|
||||
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/src.qhc"
|
||||
|
||||
devhelp: apidoc
|
||||
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||
@echo
|
||||
@echo "Build finished."
|
||||
@echo "To view the help file:"
|
||||
@echo "# mkdir -p $$HOME/.local/share/devhelp/src"
|
||||
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/src"
|
||||
@echo "# devhelp"
|
||||
|
||||
epub: apidoc
|
||||
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||
@echo
|
||||
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||
|
||||
latex: apidoc
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo
|
||||
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||
"(use \`make latexpdf' here to do that automatically)."
|
||||
|
||||
latexpdf: apidoc
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through pdflatex..."
|
||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
latexpdfja: apidoc
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through platex and dvipdfmx..."
|
||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
text: apidoc
|
||||
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||
@echo
|
||||
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||
|
||||
man: apidoc
|
||||
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||
@echo
|
||||
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||
|
||||
texinfo: apidoc
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo
|
||||
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
||||
@echo "Run \`make' in that directory to run these through makeinfo" \
|
||||
"(use \`make info' here to do that automatically)."
|
||||
|
||||
info: apidoc
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo "Running Texinfo files through makeinfo..."
|
||||
make -C $(BUILDDIR)/texinfo info
|
||||
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
||||
|
||||
gettext: apidoc
|
||||
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
||||
@echo
|
||||
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
||||
|
||||
changes: apidoc
|
||||
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||
@echo
|
||||
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||
|
||||
linkcheck: apidoc
|
||||
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||
@echo
|
||||
@echo "Link check complete; look for any errors in the above output " \
|
||||
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||
|
||||
doctest: apidoc
|
||||
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||
@echo "Testing of doctests in the sources finished, look at the " \
|
||||
"results in $(BUILDDIR)/doctest/output.txt."
|
||||
|
||||
xml: apidoc
|
||||
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
|
||||
@echo
|
||||
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
|
||||
|
||||
pseudoxml: apidoc
|
||||
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
|
||||
@echo
|
||||
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
|
62
docs/composer-cli.rst
Normal file
62
docs/composer-cli.rst
Normal file
@ -0,0 +1,62 @@
|
||||
composer-cli
|
||||
============
|
||||
|
||||
:Authors:
|
||||
Brian C. Lane <bcl@redhat.com>
|
||||
|
||||
``composer-cli`` is used to interact with the ``lorax-composer`` API server, managing blueprints, exploring available packages, and building new images.
|
||||
|
||||
It requires `lorax-composer <lorax-composer.html>`_ to be installed on the
|
||||
local system, and the user running it needs to be a member of the ``weldr``
|
||||
group. They do not need to be root, but all of the `security precautions
|
||||
<lorax-composer.html#security>`_ apply.
|
||||
|
||||
composer-cli cmdline arguments
|
||||
------------------------------
|
||||
|
||||
.. argparse::
|
||||
:ref: composer.cli.cmdline.composer_cli_parser
|
||||
:prog: composer-cli
|
||||
|
||||
Edit a Blueprint
|
||||
----------------
|
||||
|
||||
Start out by listing the available blueprints using ``composer-cli blueprints
|
||||
list``, pick one and save it to the local directory by running ``composer-cli
|
||||
blueprints save http-server``. If there are no blueprints available you can
|
||||
copy one of the examples `from the test suite
|
||||
<https://github.com/weldr/lorax/tree/master/tests/pylorax/blueprints/>`_.
|
||||
|
||||
Edit the file (it will be saved with a .toml extension) and change the
|
||||
description, add a package or module to it. Send it back to the server by
|
||||
running ``composer-cli blueprints push http-server.toml``. You can verify that it was
|
||||
saved by viewing the changelog - ``composer-cli blueprints changes http-server``.
|
||||
|
||||
Build an image
|
||||
----------------
|
||||
|
||||
Build a ``qcow2`` disk image from this blueprint by running ``composer-cli
|
||||
compose start http-server qcow2``. It will print a UUID that you can use to
|
||||
keep track of the build. You can also cancel the build if needed.
|
||||
|
||||
The available types of images is displayed by ``composer-cli compose types``.
|
||||
Currently this consists of: ami, ext4-filesystem, live-iso, openstack,
|
||||
partitioned-disk, qcow2, tar, vhd, vmdk
|
||||
|
||||
Monitor the build status
|
||||
------------------------
|
||||
|
||||
Monitor it using ``composer-cli compose status``, which will show the status of
|
||||
all the builds on the system. You can view the end of the anaconda build logs
|
||||
once it is in the ``RUNNING`` state using ``composer-cli compose log UUID``
|
||||
where UUID is the UUID returned by the start command.
|
||||
|
||||
Once the build is in the ``FINISHED`` state you can download the image.
|
||||
|
||||
Download the image
|
||||
------------------
|
||||
|
||||
Downloading the final image is done with ``composer-cli compose image UUID`` and it will
|
||||
save the qcow2 image as ``UUID-disk.qcow2`` which you can then use to boot a VM like this::
|
||||
|
||||
qemu-kvm --name test-image -m 1024 -hda ./UUID-disk.qcow2
|
398
docs/conf.py
Normal file
398
docs/conf.py
Normal file
@ -0,0 +1,398 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# src documentation build configuration file, created by
|
||||
# sphinx-quickstart on Wed Apr 8 13:46:00 2015.
|
||||
#
|
||||
# This file is execfile()d with the current directory set to its
|
||||
# containing dir.
|
||||
#
|
||||
# Note that not all possible configuration values are present in this
|
||||
# autogenerated file.
|
||||
#
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
sys.path.insert(0, os.path.abspath('../src/'))
|
||||
|
||||
# -- General configuration ------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
#needs_sphinx = '1.0'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
extensions = [
|
||||
'sphinx.ext.autodoc',
|
||||
'sphinx.ext.viewcode',
|
||||
'sphinx.ext.intersphinx',
|
||||
'sphinx.ext.todo',
|
||||
'sphinx.ext.coverage',
|
||||
]
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# The suffix of source filenames.
|
||||
source_suffix = '.rst'
|
||||
|
||||
# The encoding of source files.
|
||||
#source_encoding = 'utf-8-sig'
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = u'Lorax'
|
||||
copyright = u'2018, Red Hat, Inc.' # pylint: disable=redefined-builtin
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
def read_version():
|
||||
""" Read version from ../lorax.spec or lorax-composer.spec"""
|
||||
import re
|
||||
version_re = re.compile(r"Version:\s+(.*)")
|
||||
if os.path.exists("../lorax.spec"):
|
||||
f = open("../lorax.spec", "rt")
|
||||
elif os.path.exists("../lorax-composer.spec"):
|
||||
f = open("../lorax-composer.spec", "rt")
|
||||
else:
|
||||
raise RuntimeError("Sphinx read_version() Cannot find lorax.spec or lorax-composer.spec")
|
||||
|
||||
for line in f:
|
||||
m = version_re.match(line)
|
||||
if m:
|
||||
return m.group(1)
|
||||
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = read_version()
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = version
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#language = None
|
||||
|
||||
# There are two options for replacing |today|: either, you set today to some
|
||||
# non-false value, then it is used:
|
||||
#today = ''
|
||||
# Else, today_fmt is used as the format for a strftime call.
|
||||
#today_fmt = '%B %d, %Y'
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
exclude_patterns = ['_build', 'html']
|
||||
|
||||
# The reST default role (used for this markup: `text`) to use for all
|
||||
# documents.
|
||||
#default_role = None
|
||||
|
||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||
#add_function_parentheses = True
|
||||
|
||||
# If true, the current module name will be prepended to all description
|
||||
# unit titles (such as .. function::).
|
||||
#add_module_names = True
|
||||
|
||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||
# output. They are ignored by default.
|
||||
#show_authors = False
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# A list of ignored prefixes for module index sorting.
|
||||
#modindex_common_prefix = []
|
||||
|
||||
# If true, keep warnings as "system message" paragraphs in the built documents.
|
||||
#keep_warnings = False
|
||||
|
||||
|
||||
# -- Options for HTML output ----------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
html_theme = 'default'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
#html_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
#html_theme_path = []
|
||||
|
||||
# The name for this set of Sphinx documents. If None, it defaults to
|
||||
# "<project> v<release> documentation".
|
||||
#html_title = None
|
||||
|
||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||
#html_short_title = None
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
#html_logo = None
|
||||
|
||||
# The name of an image file (within the static path) to use as favicon of the
|
||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||
# pixels large.
|
||||
#html_favicon = None
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path = ['_static']
|
||||
|
||||
# Add any extra paths that contain custom files (such as robots.txt or
|
||||
# .htaccess) here, relative to this directory. These files are copied
|
||||
# directly to the root of the documentation.
|
||||
#html_extra_path = []
|
||||
|
||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||
# using the given strftime format.
|
||||
#html_last_updated_fmt = '%b %d, %Y'
|
||||
|
||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||
# typographically correct entities.
|
||||
#html_use_smartypants = True
|
||||
|
||||
# Custom sidebar templates, maps document names to template names.
|
||||
#html_sidebars = {}
|
||||
|
||||
# Additional templates that should be rendered to pages, maps page names to
|
||||
# template names.
|
||||
#html_additional_pages = {}
|
||||
|
||||
# If false, no module index is generated.
|
||||
#html_domain_indices = True
|
||||
|
||||
# If false, no index is generated.
|
||||
#html_use_index = True
|
||||
|
||||
# If true, the index is split into individual pages for each letter.
|
||||
#html_split_index = False
|
||||
|
||||
# If true, links to the reST sources are added to the pages.
|
||||
#html_show_sourcelink = True
|
||||
|
||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||
#html_show_sphinx = True
|
||||
|
||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||
#html_show_copyright = True
|
||||
|
||||
# If true, an OpenSearch description file will be output, and all pages will
|
||||
# contain a <link> tag referring to it. The value of this option must be the
|
||||
# base URL from which the finished HTML is served.
|
||||
#html_use_opensearch = ''
|
||||
|
||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||
#html_file_suffix = None
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'Loraxdoc'
|
||||
|
||||
|
||||
# -- Options for LaTeX output ---------------------------------------------
|
||||
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#'pointsize': '10pt',
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#'preamble': '',
|
||||
}
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
('index', 'Lorax.tex', u'Lorax Documentation',
|
||||
u'Anaconda Team', 'manual'),
|
||||
]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
# the title page.
|
||||
#latex_logo = None
|
||||
|
||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||
# not chapters.
|
||||
#latex_use_parts = False
|
||||
|
||||
# If true, show page references after internal links.
|
||||
#latex_show_pagerefs = False
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#latex_show_urls = False
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#latex_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#latex_domain_indices = True
|
||||
|
||||
|
||||
# -- Options for manual page output ---------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
('lorax', 'lorax', u'Lorax Documentation', [u'Anaconda Team'], 1),
|
||||
('livemedia-creator', 'livemedia-creator', u'Live Media Creator Documentation', [u'Anaconda Team'], 1)
|
||||
]
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#man_show_urls = False
|
||||
|
||||
|
||||
# -- Options for Texinfo output -------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
('index', 'Lorax', u'Lorax Documentation',
|
||||
u'Anaconda Team', 'Lorax', 'One line description of project.',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#texinfo_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#texinfo_domain_indices = True
|
||||
|
||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||
#texinfo_show_urls = 'footnote'
|
||||
|
||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
||||
#texinfo_no_detailmenu = False
|
||||
|
||||
|
||||
# -- Options for Epub output ----------------------------------------------
|
||||
|
||||
# Bibliographic Dublin Core info.
|
||||
epub_title = u'Lorax'
|
||||
epub_author = u'Anaconda Team'
|
||||
epub_publisher = u'Anaconda Team'
|
||||
epub_copyright = u'2018, Red Hat, Inc.'
|
||||
|
||||
# The basename for the epub file. It defaults to the project name.
|
||||
#epub_basename = u'src'
|
||||
|
||||
# The HTML theme for the epub output. Since the default themes are not optimized
|
||||
# for small screen space, using the same theme for HTML and epub output is
|
||||
# usually not wise. This defaults to 'epub', a theme designed to save visual
|
||||
# space.
|
||||
#epub_theme = 'epub'
|
||||
|
||||
# The language of the text. It defaults to the language option
|
||||
# or en if the language is not set.
|
||||
#epub_language = ''
|
||||
|
||||
# The scheme of the identifier. Typical schemes are ISBN or URL.
|
||||
#epub_scheme = ''
|
||||
|
||||
# The unique identifier of the text. This can be a ISBN number
|
||||
# or the project homepage.
|
||||
#epub_identifier = ''
|
||||
|
||||
# A unique identification for the text.
|
||||
#epub_uid = ''
|
||||
|
||||
# A tuple containing the cover image and cover page html template filenames.
|
||||
#epub_cover = ()
|
||||
|
||||
# A sequence of (type, uri, title) tuples for the guide element of content.opf.
|
||||
#epub_guide = ()
|
||||
|
||||
# HTML files that should be inserted before the pages created by sphinx.
|
||||
# The format is a list of tuples containing the path and title.
|
||||
#epub_pre_files = []
|
||||
|
||||
# HTML files shat should be inserted after the pages created by sphinx.
|
||||
# The format is a list of tuples containing the path and title.
|
||||
#epub_post_files = []
|
||||
|
||||
# A list of files that should not be packed into the epub file.
|
||||
epub_exclude_files = ['search.html']
|
||||
|
||||
# The depth of the table of contents in toc.ncx.
|
||||
#epub_tocdepth = 3
|
||||
|
||||
# Allow duplicate toc entries.
|
||||
#epub_tocdup = True
|
||||
|
||||
# Choose between 'default' and 'includehidden'.
|
||||
#epub_tocscope = 'default'
|
||||
|
||||
# Fix unsupported image types using the PIL.
|
||||
#epub_fix_images = False
|
||||
|
||||
# Scale large images.
|
||||
#epub_max_image_width = 0
|
||||
|
||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||
#epub_show_urls = 'inline'
|
||||
|
||||
# If false, no index is generated.
|
||||
#epub_use_index = True
|
||||
|
||||
# Example configuration for intersphinx: refer to the Python standard library.
|
||||
intersphinx_mapping = {'https://docs.python.org/2': None}
|
||||
|
||||
# on_rtd is whether we are on readthedocs.org
|
||||
on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
|
||||
|
||||
#if not on_rtd: # only import and set the theme if we're building docs locally
|
||||
# import sphinx_rtd_theme
|
||||
# html_theme = 'sphinx_rtd_theme'
|
||||
# html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
|
||||
|
||||
# otherwise, readthedocs.org uses their theme by default, so no need to specify it
|
||||
|
||||
# This was taken directly from here:
|
||||
# http://read-the-docs.readthedocs.org/en/latest/faq.html#i-get-import-errors-on-libraries-that-depend-on-c-modules
|
||||
# I only added the __getitem__ method.
|
||||
# NOTE: this can be removed whenever we move to sphinx-1.3, at which point we'll
|
||||
# be able to use autodoc_mock_imports (value is a list of modules to be
|
||||
# mocked).
|
||||
class Mock(object):
|
||||
|
||||
__all__ = []
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def __call__(self, *args, **kwargs):
|
||||
return Mock()
|
||||
|
||||
@classmethod
|
||||
def __getattr__(cls, name):
|
||||
if name in ('__file__', '__path__'):
|
||||
return '/dev/null'
|
||||
elif name[0] == name[0].upper():
|
||||
mockType = type(name, (), {})
|
||||
mockType.__module__ = __name__
|
||||
return mockType
|
||||
else:
|
||||
return Mock()
|
||||
|
||||
@classmethod
|
||||
def __getitem__(cls, key):
|
||||
return cls.__getattr__(key)
|
||||
|
||||
MOCK_MODULES = ["selinux", "dnf", "rpmUtils", "rpmUtils.arch", "rpmUtils.transaction", "rpmUtils.miscutils", "rpmUtils.updates"]
|
||||
for mod_name in MOCK_MODULES:
|
||||
sys.modules[mod_name] = Mock()
|
@ -1,120 +0,0 @@
|
||||
# Build a basic Fedora AMI using livemedia-creator
|
||||
lang en_US.UTF-8
|
||||
keyboard us
|
||||
timezone --utc America/New_York
|
||||
auth --useshadow --enablemd5
|
||||
selinux --enforcing
|
||||
firewall --service=ssh
|
||||
bootloader --location=none
|
||||
network --bootproto=dhcp --device=eth0 --onboot=on --activate
|
||||
services --enabled=network,sshd,rsyslog
|
||||
shutdown
|
||||
|
||||
# By default the root password is emptied
|
||||
rootpw --plaintext removethispw
|
||||
|
||||
#
|
||||
# Define how large you want your rootfs to be
|
||||
# NOTE: S3-backed AMIs have a limit of 10G
|
||||
#
|
||||
zerombr
|
||||
clearpart --all
|
||||
part / --size 10000 --fstype ext4 --ondisk sda
|
||||
part biosboot --size=1
|
||||
part swap --size=512
|
||||
|
||||
#
|
||||
# Repositories
|
||||
url --url="http://dl.fedoraproject.org/pub/fedora/linux/development/19/x86_64/os/"
|
||||
|
||||
#
|
||||
#
|
||||
# Add all the packages after the base packages
|
||||
#
|
||||
%packages --nobase
|
||||
@core
|
||||
system-config-securitylevel-tui
|
||||
audit
|
||||
pciutils
|
||||
bash
|
||||
coreutils
|
||||
kernel
|
||||
|
||||
e2fsprogs
|
||||
passwd
|
||||
policycoreutils
|
||||
chkconfig
|
||||
rootfiles
|
||||
yum
|
||||
vim-minimal
|
||||
acpid
|
||||
openssh-clients
|
||||
openssh-server
|
||||
curl
|
||||
sudo
|
||||
|
||||
#Allow for dhcp access
|
||||
dhclient
|
||||
iputils
|
||||
|
||||
-firstboot
|
||||
-biosdevname
|
||||
|
||||
# package to setup cloudy bits for us
|
||||
cloud-init
|
||||
|
||||
grub
|
||||
dracut-norescue
|
||||
%end
|
||||
|
||||
# more ec2-ify
|
||||
%post --erroronfail
|
||||
|
||||
# create ec2-user
|
||||
/usr/sbin/useradd ec2-user
|
||||
/bin/echo -e 'ec2-user\tALL=(ALL)\tNOPASSWD: ALL' >> /etc/sudoers
|
||||
|
||||
# fstab mounting is different for x86_64 and i386
|
||||
cat <<EOL > /etc/fstab
|
||||
/dev/xvda1 / ext4 defaults 1 1
|
||||
/dev/xvda2 /mnt ext3 defaults 0 0
|
||||
/dev/xvda3 swap swap defaults 0 0
|
||||
EOL
|
||||
|
||||
if [ ! -d /lib64 ] ; then
|
||||
# workaround xen performance issue (bz 651861)
|
||||
echo "hwcap 1 nosegneg" > /etc/ld.so.conf.d/libc6-xen.conf
|
||||
fi
|
||||
|
||||
# Install grub.conf
|
||||
# idle=nomwait is to allow xen images to boot and not try use cpu features that are not supported
|
||||
INITRD=`ls /boot/initramfs-* | head -n1`
|
||||
KERNEL=`ls /boot/vmlinuz-* | head -n1`
|
||||
mkdir /boot/grub
|
||||
pushd /boot/grub
|
||||
cat <<EOL > grub.conf
|
||||
default 0
|
||||
timeout 0
|
||||
|
||||
title Fedora Linux
|
||||
root (hd0)
|
||||
kernel $KERNEL root=/dev/xvda1 idle=halt
|
||||
initrd $INITRD
|
||||
EOL
|
||||
# symlink grub.conf to menu.lst for use by EC2 pv-grub
|
||||
ln -s grub.conf menu.lst
|
||||
popd
|
||||
|
||||
# the firewall rules get saved as .old without this we end up not being able
|
||||
# ssh in as iptables blocks access
|
||||
rename -v .old "" /etc/sysconfig/*old
|
||||
|
||||
# setup systemd to boot to the right runlevel
|
||||
rm /etc/systemd/system/default.target
|
||||
ln -s /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
|
||||
|
||||
# remove the root password
|
||||
passwd -d root > /dev/null
|
||||
|
||||
%end
|
||||
|
107
docs/fedora-minimized.ks
Normal file
107
docs/fedora-minimized.ks
Normal file
@ -0,0 +1,107 @@
|
||||
# Minimal Disk Image -- Example of image-minimizer usage in %post
|
||||
#
|
||||
sshpw --username=root --plaintext randOmStrinGhERE
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Use network installation
|
||||
url --url="http://dl.fedoraproject.org/pub/fedora/linux/development/20/x86_64/os/"
|
||||
|
||||
# Root password
|
||||
rootpw --plaintext removethispw
|
||||
# Network information
|
||||
network --bootproto=dhcp --onboot=on --activate
|
||||
# System authorization information
|
||||
auth --useshadow --enablemd5
|
||||
# System keyboard
|
||||
keyboard --xlayouts=us --vckeymap=us
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# Installation logging level
|
||||
logging --level=info
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
# System timezone
|
||||
timezone US/Eastern
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all
|
||||
# Disk partitioning information
|
||||
part / --fstype="ext4" --size=4000
|
||||
part swap --size=1000
|
||||
|
||||
%post
|
||||
# Remove root password
|
||||
passwd -d root > /dev/null
|
||||
|
||||
# Remove random-seed
|
||||
rm /var/lib/systemd/random-seed
|
||||
%end
|
||||
|
||||
%packages
|
||||
@core
|
||||
kernel
|
||||
memtest86+
|
||||
grub2-efi
|
||||
grub2
|
||||
shim
|
||||
syslinux
|
||||
-dracut-config-rescue
|
||||
%end
|
||||
|
||||
#
|
||||
# Use the image-minimizer to remove some packages and dirs
|
||||
#
|
||||
%post --interpreter=image-minimizer --nochroot
|
||||
|
||||
|
||||
# Kernel modules minimization
|
||||
# Drop many filesystems
|
||||
drop /lib/modules/*/kernel/fs
|
||||
keep /lib/modules/*/kernel/fs/ext*
|
||||
keep /lib/modules/*/kernel/fs/mbcache*
|
||||
keep /lib/modules/*/kernel/fs/squashfs
|
||||
keep /lib/modules/*/kernel/fs/jbd*
|
||||
keep /lib/modules/*/kernel/fs/btrfs
|
||||
keep /lib/modules/*/kernel/fs/cifs*
|
||||
keep /lib/modules/*/kernel/fs/fat
|
||||
keep /lib/modules/*/kernel/fs/nfs
|
||||
keep /lib/modules/*/kernel/fs/nfs_common
|
||||
keep /lib/modules/*/kernel/fs/fscache
|
||||
keep /lib/modules/*/kernel/fs/lockd
|
||||
keep /lib/modules/*/kernel/fs/nls/nls_utf8.ko
|
||||
keep /lib/modules/*/kernel/fs/configfs/configfs.ko
|
||||
keep /lib/modules/*/kernel/fs/fuse
|
||||
keep /lib/modules/*/kernel/fs/isofs
|
||||
# No sound
|
||||
drop /lib/modules/*/kernel/sound
|
||||
|
||||
|
||||
# Drop some unused rpms, without dropping dependencies
|
||||
droprpm checkpolicy
|
||||
droprpm dmraid-events
|
||||
droprpm gamin
|
||||
droprpm gnupg2
|
||||
droprpm linux-atm-libs
|
||||
droprpm make
|
||||
droprpm mtools
|
||||
droprpm mysql-libs
|
||||
droprpm perl
|
||||
droprpm perl-Module-Pluggable
|
||||
droprpm perl-Net-Telnet
|
||||
droprpm perl-PathTools
|
||||
droprpm perl-Pod-Escapes
|
||||
droprpm perl-Pod-Simple
|
||||
droprpm perl-Scalar-List-Utils
|
||||
droprpm perl-hivex
|
||||
droprpm perl-macros
|
||||
droprpm sgpio
|
||||
droprpm syslinux
|
||||
droprpm system-config-firewall-base
|
||||
droprpm usermode
|
||||
|
||||
%end
|
29
docs/index.rst
Normal file
29
docs/index.rst
Normal file
@ -0,0 +1,29 @@
|
||||
.. Lorax documentation master file, created by
|
||||
sphinx-quickstart on Wed Apr 8 13:46:00 2015.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Welcome to Lorax's documentation!
|
||||
=================================
|
||||
|
||||
Contents:
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
intro
|
||||
lorax
|
||||
livemedia-creator
|
||||
lorax-composer
|
||||
composer-cli
|
||||
product-images
|
||||
modules
|
||||
|
||||
|
||||
Indices and tables
|
||||
==================
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`modindex`
|
||||
* :ref:`search`
|
||||
|
67
docs/intro.rst
Normal file
67
docs/intro.rst
Normal file
@ -0,0 +1,67 @@
|
||||
Introduction to Lorax
|
||||
=====================
|
||||
|
||||
I am the Lorax. I speak for the trees [and images].
|
||||
|
||||
Lorax is used to build the Anaconda Installer boot.iso, it consists of a
|
||||
library, pylorax, a set of templates, and the lorax script. Its operation
|
||||
is driven by a customized set of Mako templates that lists the packages
|
||||
to be installed, steps to execute to remove unneeded files, and creation
|
||||
of the iso for all of the supported architectures.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Before Lorax
|
||||
============
|
||||
|
||||
Tree building tools such as pungi and revisor rely on 'buildinstall' in
|
||||
anaconda/scripts/ to produce the boot images and other such control files
|
||||
in the final tree. The existing buildinstall scripts written in a mix of
|
||||
bash and Python are unmaintainable. Lorax is an attempt to replace them
|
||||
with something more flexible.
|
||||
|
||||
|
||||
EXISTING WORKFLOW:
|
||||
|
||||
pungi and other tools call scripts/buildinstall, which in turn call other
|
||||
scripts to do the image building and data generation. Here's how it
|
||||
currently looks:
|
||||
|
||||
-> buildinstall
|
||||
* process command line options
|
||||
* write temporary yum.conf to point to correct repo
|
||||
* find anaconda release RPM
|
||||
* unpack RPM, pull in those versions of upd-instroot, mk-images,
|
||||
maketreeinfo.py, makestamp.py, and buildinstall
|
||||
|
||||
-> call upd-instroot
|
||||
|
||||
-> call maketreeinfo.py
|
||||
|
||||
-> call mk-images (which figures out which mk-images.ARCH to call)
|
||||
|
||||
-> call makestamp.py
|
||||
|
||||
* clean up
|
||||
|
||||
|
||||
PROBLEMS:
|
||||
|
||||
The existing workflow presents some problems with maintaining the scripts.
|
||||
First, almost all knowledge of what goes in to the stage 1 and stage 2
|
||||
images lives in upd-instroot. The mk-images* scripts copy things from the
|
||||
root created by upd-instroot in order to build the stage 1 image, though
|
||||
it's not completely clear from reading the scripts.
|
||||
|
||||
|
||||
NEW IDEAS:
|
||||
|
||||
Create a new central driver with all information living in Python modules.
|
||||
Configuration files will provide the knowledge previously contained in the
|
||||
upd-instroot and mk-images* scripts.
|
||||
|
||||
|
||||
|
391
docs/livemedia-creator.rst
Normal file
391
docs/livemedia-creator.rst
Normal file
@ -0,0 +1,391 @@
|
||||
livemedia-creator
|
||||
=================
|
||||
|
||||
:Authors:
|
||||
Brian C. Lane <bcl@redhat.com>
|
||||
|
||||
livemedia-creator uses `Anaconda <https://github.com/rhinstaller/anaconda>`_,
|
||||
`kickstart <https://github.com/rhinstaller/pykickstart>`_ and `Lorax
|
||||
<https://github.com/rhinstaller/lorax>`_ to create bootable media that use the
|
||||
same install path as a normal system installation. It can be used to make live
|
||||
isos, bootable (partitioned) disk images, tarfiles, and filesystem images for
|
||||
use with virtualization and container solutions like libvirt, docker, and
|
||||
OpenStack.
|
||||
|
||||
The general idea is to use virt-install with kickstart and an Anaconda boot.iso to
|
||||
install into a disk image and then use the disk image to create the bootable
|
||||
media.
|
||||
|
||||
livemedia-creator --help will describe all of the options available. At the
|
||||
minimum you need:
|
||||
|
||||
``--make-iso`` to create a final bootable .iso or one of the other ``--make-*`` options.
|
||||
|
||||
``--iso`` to specify the Anaconda install media to use with virt-install.
|
||||
|
||||
``--ks`` to select the kickstart file describing what to install.
|
||||
|
||||
To use livemedia-creator with virtualization you will need to have virt-install installed.
|
||||
|
||||
If you are going to be using Anaconda directly, with ``--no-virt`` mode, make sure
|
||||
you have the anaconda-tui package installed.
|
||||
|
||||
Conventions used in this document:
|
||||
|
||||
``lmc`` is an abbreviation for livemedia-creator.
|
||||
|
||||
``builder`` is the system where livemedia-creator is being run
|
||||
|
||||
``image`` is the disk image being created by running livemedia-creator
|
||||
|
||||
|
||||
livemedia-creator cmdline arguments
|
||||
-----------------------------------
|
||||
|
||||
See the output from ``livemedia-creator --help`` for the commandline arguments.
|
||||
|
||||
Quickstart
|
||||
----------
|
||||
|
||||
Run this to create a bootable live iso::
|
||||
|
||||
sudo livemedia-creator --make-iso \
|
||||
--iso=/extra/iso/boot.iso --ks=./docs/rhel7-livemedia.ks
|
||||
|
||||
You can run it directly from the lorax git repo like this::
|
||||
|
||||
sudo PATH=./src/sbin/:$PATH PYTHONPATH=./src/ ./src/sbin/livemedia-creator \
|
||||
--make-iso --iso=/extra/iso/boot.iso \
|
||||
--ks=./docs/rhel7-livemedia.ks --lorax-templates=./share/
|
||||
|
||||
You can observe the installation using vnc. The logs will show what port was
|
||||
chosen, or you can use a specific port by passing it. eg. ``--vnc vnc:127.0.0.1:5``
|
||||
|
||||
This is usually a good idea when testing changes to the kickstart. lmc tries
|
||||
to monitor the logs for fatal errors, but may not catch everything.
|
||||
|
||||
|
||||
How ISO creation works
|
||||
----------------------
|
||||
|
||||
There are 2 stages, the install stage which produces a disk or filesystem image
|
||||
as its output, and the boot media creation which uses the image as its input.
|
||||
Normally you would run both stages, but it is possible to stop after the
|
||||
install stage, by using ``--image-only``, or to skip the install stage and use
|
||||
a previously created disk image by passing ``--disk-image`` or ``--fs-image``
|
||||
|
||||
When creating an iso virt-install boots using the passed Anaconda installer iso
|
||||
and installs the system based on the kickstart. The ``%post`` section of the
|
||||
kickstart is used to customize the installed system in the same way that
|
||||
current spin-kickstarts do.
|
||||
|
||||
livemedia-creator monitors the install process for problems by watching the
|
||||
install logs. They are written to the current directory or to the base
|
||||
directory specified by the --logfile command. You can also monitor the install
|
||||
by using a vnc client. This is recommended when first modifying a kickstart,
|
||||
since there are still places where Anaconda may get stuck without the log
|
||||
monitor catching it.
|
||||
|
||||
The output from this process is a partitioned disk image. kpartx can be used
|
||||
to mount and examine it when there is a problem with the install. It can also
|
||||
be booted using kvm.
|
||||
|
||||
When creating an iso the disk image's / partition is copied into a formatted
|
||||
filesystem image which is then used as the input to lorax for creation of the
|
||||
final media.
|
||||
|
||||
The final image is created by lorax, using the templates in /usr/share/lorax/live/
|
||||
or the live directory below the directory specified by ``--lorax-templates``. The
|
||||
templates are written using the Mako template system with some extra commands
|
||||
added by lorax.
|
||||
|
||||
|
||||
Kickstarts
|
||||
----------
|
||||
|
||||
The docs/ directory includes several example kickstarts, one to create a live
|
||||
desktop iso using GNOME, and another to create a minimal disk image. When
|
||||
creating your own kickstarts you should start with the minimal example, it
|
||||
includes several needed packages that are not always included by dependencies.
|
||||
|
||||
Or you can use existing spin kickstarts to create live media with a few
|
||||
changes. Here are the steps I used to convert the Fedora XFCE spin.
|
||||
|
||||
1. Flatten the xfce kickstart using ksflatten
|
||||
2. Add zerombr so you don't get the disk init dialog
|
||||
3. Add clearpart --all
|
||||
4. Add swap partition
|
||||
5. bootloader target
|
||||
6. Add shutdown to the kickstart
|
||||
7. Add network --bootproto=dhcp --activate to activate the network
|
||||
This works for F16 builds but for F15 and before you need to pass
|
||||
something on the cmdline that activate the network, like sshd:
|
||||
|
||||
``livemedia-creator --kernel-args="sshd"``
|
||||
|
||||
8. Add a root password::
|
||||
|
||||
rootpw rootme
|
||||
network --bootproto=dhcp --activate
|
||||
zerombr
|
||||
clearpart --all
|
||||
bootloader --location=mbr
|
||||
part swap --size=512
|
||||
shutdown
|
||||
|
||||
9. In the livesys script section of the %post remove the root password. This
|
||||
really depends on how the spin wants to work. You could add the live user
|
||||
that you create to the %wheel group so that sudo works if you wanted to.
|
||||
|
||||
``passwd -d root > /dev/null``
|
||||
|
||||
10. Remove /etc/fstab in %post, dracut handles mounting the rootfs
|
||||
|
||||
``cat /dev/null > /dev/fstab``
|
||||
|
||||
Do this only for live iso's, the filesystem will be mounted read only if
|
||||
there is no /etc/fstab
|
||||
|
||||
11. Don't delete initramfs files from /boot in %post
|
||||
12. When creating live iso's you need to have, at least, these packages in the %package section::
|
||||
dracut-config-generic
|
||||
dracut-live
|
||||
-dracut-config-rescue
|
||||
grub-efi
|
||||
memtest86+
|
||||
syslinux
|
||||
|
||||
One drawback to using virt-install is that it pulls the packages from the repo
|
||||
each time you run it. To speed things up you either need a local mirror of the
|
||||
packages, or you can use a caching proxy. When using a proxy you pass it to
|
||||
livemedia-creator like this:
|
||||
|
||||
``--proxy=http://proxy.yourdomain.com:3128``
|
||||
|
||||
You also need to use a specific mirror instead of mirrormanager so that the
|
||||
packages will get cached, so your kickstart url would look like:
|
||||
|
||||
``url --url="http://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/x86_64/os/"``
|
||||
|
||||
You can also add an update repo, but don't name it updates. Add --proxy to it
|
||||
as well.
|
||||
|
||||
|
||||
Anaconda image install (no-virt)
|
||||
--------------------------------
|
||||
|
||||
You can create images without using virt-install by passing ``--no-virt`` on
|
||||
the cmdline. This will use Anaconda's directory install feature to handle the
|
||||
install. There are a couple of things to keep in mind when doing this:
|
||||
|
||||
1. It will be most reliable when building images for the same release that the
|
||||
host is running. Because Anaconda has expectations about the system it is
|
||||
running under you may encounter strange bugs if you try to build newer or
|
||||
older releases.
|
||||
|
||||
2. Make sure selinux is set to permissive or disabled. It won't install
|
||||
correctly with selinux set to enforcing yet.
|
||||
|
||||
3. It may totally trash your host. So far I haven't had this happen, but the
|
||||
possibility exists that a bug in Anaconda could result in it operating on
|
||||
real devices. I recommend running it in a virt or on a system that you can
|
||||
afford to lose all data from.
|
||||
|
||||
The logs from anaconda will be placed in an ./anaconda/ directory in either
|
||||
the current directory or in the directory used for --logfile
|
||||
|
||||
Example cmdline:
|
||||
|
||||
``sudo livemedia-creator --make-iso --no-virt --ks=./rhel7-livemedia.ks``
|
||||
|
||||
.. note::
|
||||
Using no-virt to create a partitioned disk image (eg. --make-disk or
|
||||
--make-vagrant) will only create disks usable on the host platform (BIOS
|
||||
or UEFI). You can create BIOS partitioned disk images on UEFI by using
|
||||
virt.
|
||||
|
||||
|
||||
AMI Images
|
||||
----------
|
||||
|
||||
Amazon EC2 images can be created by using the --make-ami switch and an appropriate
|
||||
kickstart file. All of the work to customize the image is handled by the kickstart.
|
||||
The example currently included was modified from the cloud-kickstarts version so
|
||||
that it would work with livemedia-creator.
|
||||
|
||||
Example cmdline:
|
||||
|
||||
``sudo livemedia-creator --make-ami --iso=/path/to/boot.iso --ks=./docs/rhel7-livemedia-ec2.ks``
|
||||
|
||||
This will produce an ami-root.img file in the working directory.
|
||||
|
||||
At this time I have not tested the image with EC2. Feedback would be welcome.
|
||||
|
||||
|
||||
Appliance Creation
|
||||
------------------
|
||||
|
||||
livemedia-creator can now replace appliance-tools by using the --make-appliance
|
||||
switch. This will create the partitioned disk image and an XML file that can be
|
||||
used with virt-image to setup a virtual system.
|
||||
|
||||
The XML is generated using the Mako template from
|
||||
/usr/share/lorax/appliance/libvirt.xml You can use a different template by
|
||||
passing ``--app-template <template path>``
|
||||
|
||||
Documentation on the Mako template system can be found at the `Mako site
|
||||
<http://docs.makotemplates.org/en/latest/index.html>`_
|
||||
|
||||
The name of the final output XML is appliance.xml, this can be changed with
|
||||
``--app-file <file path>``
|
||||
|
||||
The following variables are passed to the template:
|
||||
|
||||
``disks``
|
||||
A list of disk_info about each disk.
|
||||
Each entry has the following attributes:
|
||||
|
||||
``name``
|
||||
base name of the disk image file
|
||||
|
||||
``format``
|
||||
"raw"
|
||||
|
||||
``checksum_type``
|
||||
"sha256"
|
||||
|
||||
``checksum``
|
||||
sha256 checksum of the disk image
|
||||
|
||||
``name``
|
||||
Name of appliance, from --app-name argument
|
||||
|
||||
``arch``
|
||||
Architecture
|
||||
|
||||
``memory``
|
||||
Memory in KB (from ``--ram``)
|
||||
|
||||
``vcpus``
|
||||
from ``--vcpus``
|
||||
|
||||
``networks``
|
||||
list of networks from the kickstart or []
|
||||
|
||||
``title``
|
||||
from ``--title``
|
||||
|
||||
``project``
|
||||
from ``--project``
|
||||
|
||||
``releasever``
|
||||
from ``--releasever``
|
||||
|
||||
The created image can be imported into libvirt using:
|
||||
|
||||
``virt-image appliance.xml``
|
||||
|
||||
You can also create qcow2 appliance images using ``--image-type=qcow2``, for example::
|
||||
|
||||
sudo livemedia-creator --make-appliance --iso=/path/to/boot.iso --ks=./docs/rhel7-minimal.ks \
|
||||
--image-type=qcow2 --app-file=minimal-test.xml --image-name=minimal-test.img
|
||||
|
||||
|
||||
Filesystem Image Creation
|
||||
-------------------------
|
||||
|
||||
livemedia-creator can be used to create un-partitined filesystem images using
|
||||
the ``--make-fsimage`` option. As of version 21.8 this works with both virt and
|
||||
no-virt modes of operation. Previously it was only available with no-virt.
|
||||
|
||||
Kickstarts should have a single / partition with no extra mountpoints.
|
||||
|
||||
``livemedia-creator --make-fsimage --iso=/path/to/boot.iso --ks=./docs/rhel7-minimal.ks``
|
||||
|
||||
You can name the output image with ``--image-name`` and set a label on the filesystem with ``--fs-label``
|
||||
|
||||
|
||||
TAR File Creation
|
||||
-----------------
|
||||
|
||||
The ``--make-tar`` command can be used to create a tar of the root filesystem. By
|
||||
default it is compressed using xz, but this can be changed using the
|
||||
``--compression`` and ``--compress-arg`` options. This option works with both virt and
|
||||
no-virt install methods.
|
||||
|
||||
As with ``--make-fsimage`` the kickstart should be limited to a single / partition.
|
||||
|
||||
For example::
|
||||
|
||||
livemedia-creator --make-tar --iso=/path/to/boot.iso --ks=./docs/rhel7-minimal.ks \
|
||||
--image-name=rhel7-root.tar.xz
|
||||
|
||||
|
||||
Live Image for PXE Boot
|
||||
-----------------------
|
||||
|
||||
The ``--make-pxe-live`` command will produce squashfs image containing live root
|
||||
filesystem that can be used for pxe boot. Directory with results will contain
|
||||
the live image, kernel image, initrd image and template of pxe configuration
|
||||
for the images.
|
||||
|
||||
|
||||
Atomic Live Image for PXE Boot
|
||||
------------------------------
|
||||
|
||||
The ``--make-ostree-live`` command will produce the same result as ``--make-pxe-live``
|
||||
for installations of Atomic Host. Example kickstart for such an installation
|
||||
using Atomic installer iso with local repo included in the image can be found
|
||||
in docs/rhel-atomic-pxe-live.ks.
|
||||
|
||||
The PXE images can also be created with ``--no-virt`` by using the example
|
||||
kickstart in docs/rhel-atomic-pxe-live-novirt.ks. This also works inside the
|
||||
mock environment.
|
||||
|
||||
|
||||
Debugging problems
|
||||
------------------
|
||||
|
||||
Sometimes an installation will get stuck. When using virt-install the logs will
|
||||
be written to ./virt-install.log and most of the time any problems that happen
|
||||
will be near the end of the file. lmc tries to detect common errors and will
|
||||
cancel the installation when they happen. But not everything can be caught.
|
||||
When creating a new kickstart it is helpful to use vnc so that you can monitor
|
||||
the installation as it happens, and if it gets stuck without lmc detecting the
|
||||
problem you can switch to tty1 and examine the system directly.
|
||||
|
||||
If it does get stuck the best way to cancel is to use kill -9 on the virt-install pid,
|
||||
lmc will detect that the process died and cleanup.
|
||||
|
||||
If lmc didn't handle the cleanup for some reason you can do this:
|
||||
1. ``sudo umount /tmp/lmc-XXXX`` to unmount the iso from its mountpoint.
|
||||
2. ``sudo rm -rf /tmp/lmc-XXXX``
|
||||
3. ``sudo rm /var/tmp/lmc-disk-XXXXX`` to remove the disk image.
|
||||
|
||||
Note that lmc uses the lmc- prefix for all of its temporary files and
|
||||
directories to make it easier to find and clean up leftovers.
|
||||
|
||||
The logs from the virt-install run are stored in virt-install.log, logs from
|
||||
livemedia-creator are in livemedia.log and program.log
|
||||
|
||||
You can add ``--image-only`` to skip the .iso creation and examine the resulting
|
||||
disk image. Or you can pass ``--keep-image`` to keep it around after the iso has
|
||||
been created.
|
||||
|
||||
Cleaning up aborted ``--no-virt`` installs can sometimes be accomplished by
|
||||
running the ``anaconda-cleanup`` script. As of Fedora 18 anaconda is
|
||||
multi-threaded and it can sometimes become stuck and refuse to exit. When this
|
||||
happens you can usually clean up by first killing the anaconda process then
|
||||
running ``anaconda-cleanup``.
|
||||
|
||||
|
||||
Hacking
|
||||
-------
|
||||
|
||||
Development on this will take place as part of the lorax project, and on the
|
||||
anaconda-devel-list mailing list, and `on github <https://github.com/rhinstaller/lorax>`_
|
||||
|
||||
Feedback, enhancements and bugs are welcome. You can use `bugzilla
|
||||
<https://bugzilla.redhat.com/enter_bug.cgi?product=Fedora&component=lorax>`_ to
|
||||
report bugs against the lorax component.
|
||||
|
457
docs/lorax-composer.rst
Normal file
457
docs/lorax-composer.rst
Normal file
@ -0,0 +1,457 @@
|
||||
lorax-composer
|
||||
==============
|
||||
|
||||
:Authors:
|
||||
Brian C. Lane <bcl@redhat.com>
|
||||
|
||||
``lorax-composer`` is an API server that allows you to build disk images using
|
||||
`Blueprints`_ to describe the package versions to be installed into the image.
|
||||
It is compatible with the Weldr project's bdcs-api REST protocol. More
|
||||
information on Weldr can be found `on the Weldr blog <http://www.weldr.io>`_.
|
||||
|
||||
Behind the scenes it uses `livemedia-creator <livemedia-creator.html>`_ and
|
||||
`Anaconda <https://anaconda-installer.readthedocs.io/en/latest/>`_ to handle the
|
||||
installation and configuration of the images.
|
||||
|
||||
Important Things To Note
|
||||
------------------------
|
||||
|
||||
* SELinux must be in Permissive mode. Anaconda requires SELinux be in permissive mode
|
||||
for image creation to work correctly. You can either edit the setting in the
|
||||
``/etc/sysconfig/selinux`` file, or run ``setenforce 0`` before starting lorax-composer.
|
||||
|
||||
* Some output types require packages from the RHEL 7 Optional repository. See the
|
||||
`Red Hat Enterprise Linux 7 documentation <https://access.redhat.com/solutions/392003>`_
|
||||
for information on how to enable it. Otherwise you will see image creation fail to
|
||||
depsolve even if the blueprint itself is correct.
|
||||
|
||||
* All image types lock the root account, except for live-iso. You will need to either
|
||||
use one of the `Customizations`_ methods for setting a ssh key/password, install a
|
||||
package that creates a user, or use something like `cloud-init` to setup access at
|
||||
boot time.
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
The best way to install ``lorax-composer`` is to use ``sudo dnf install
|
||||
lorax-composer composer-cli``, this will setup the weldr user and install the
|
||||
systemd socket activation service. You will then need to enable it with ``sudo
|
||||
systemctl enable lorax-composer.socket && sudo systemctl start
|
||||
lorax-composer.socket``. This will leave the server off until the first request
|
||||
is made. Systemd will then launch the server and it will remain running until
|
||||
the system is rebooted. This will cause some delay in responding to the first
|
||||
request from the UI or `composer-cli`.
|
||||
|
||||
.. note::
|
||||
|
||||
If you want lorax-composer to respond immediately to the first request you can
|
||||
start and enable `lorax-composer.service` instead of `lorax-composer.socket`
|
||||
|
||||
Quickstart
|
||||
----------
|
||||
|
||||
1. Create a ``weldr`` user and group by running ``useradd weldr``
|
||||
2. Remove any pre-existing socket directory with ``rm -rf /run/weldr/``
|
||||
A new directory with correct permissions will be created the first time the server runs.
|
||||
3. Enable the socket activation with ``systemctl enable lorax-composer.socket
|
||||
&& sudo systemctl start lorax-composer.socket``.
|
||||
|
||||
NOTE: You can also run it directly with ``lorax-composer /path/to/blueprints``. However,
|
||||
``lorax-composer`` does not react well to being started both on the command line and via
|
||||
socket activation at the same time. It is therefore recommended that you run it directly
|
||||
on the command line only for testing or development purposes. For real use or development
|
||||
of other projects that simply use the API, you should stick to socket activation only.
|
||||
|
||||
The ``/path/to/blueprints/`` directory is where the blueprints' git repo will
|
||||
be created, and all the blueprints created with the ``/api/v0/blueprints/new``
|
||||
route will be stored. If there are blueprint ``.toml`` files in the top level
|
||||
of the directory they will be imported into the blueprint git storage when
|
||||
``lorax-composer`` starts.
|
||||
|
||||
Logs
|
||||
----
|
||||
|
||||
Logs are stored under ``/var/log/lorax-composer/`` and include all console
|
||||
messages as well as extra debugging info and API requests.
|
||||
|
||||
Security
|
||||
--------
|
||||
|
||||
Some security related issues that you should be aware of before running ``lorax-composer``:
|
||||
|
||||
* One of the API server threads needs to retain root privileges in order to run Anaconda.
|
||||
* SELinux must be set to Permissive or disabled to allow ``livemedia-creator`` to run Anaconda.
|
||||
* Only allow authorized users access to the ``weldr`` group and socket.
|
||||
|
||||
Since Anaconda kickstarts are used there is the possibility that a user could
|
||||
inject commands into a blueprint that would result in the kickstart executing
|
||||
arbitrary code on the host. Only authorized users should be allowed to build
|
||||
images using ``lorax-composer``.
|
||||
|
||||
How it Works
|
||||
------------
|
||||
|
||||
The server runs as root, and as ``weldr``. Communication with it is via a unix
|
||||
domain socket (``/run/weldr/api.socket`` by default). The directory and socket
|
||||
are owned by ``root:weldr`` so that any user in the ``weldr`` group can use the API
|
||||
to control ``lorax-composer``.
|
||||
|
||||
At startup the server will check for the correct permissions and
|
||||
ownership of a pre-existing directory, or it will create a new one if it
|
||||
doesn't exist. The socket path and group owner's name can be changed from the
|
||||
cmdline by passing it the ``--socket`` and ``--group`` arguments.
|
||||
|
||||
It will then drop root privileges for the API thread and run as the ``weldr``
|
||||
user. The queue and compose thread still runs as root because it needs to be
|
||||
able to mount/umount files and run Anaconda.
|
||||
|
||||
Composing Images
|
||||
----------------
|
||||
|
||||
The `welder-web <https://github.com/weldr/welder-web/>`_ GUI project can be used to construct
|
||||
blueprints and create composes using a web browser.
|
||||
|
||||
Or use the command line with `composer-cli <composer-cli.html>`_.
|
||||
|
||||
Blueprints
|
||||
----------
|
||||
|
||||
Blueprints are simple text files in `TOML <https://github.com/toml-lang/toml>`_ format that describe
|
||||
which packages, and what versions, to install into the image. They can also define a limited set
|
||||
of customizations to make to the final image.
|
||||
|
||||
Example blueprints can be found in the ``lorax-composer`` `test suite
|
||||
<https://github.com/weldr/lorax/tree/master/tests/pylorax/blueprints/>`_, with a simple one
|
||||
looking like this::
|
||||
|
||||
name = "base"
|
||||
description = "A base system with bash"
|
||||
version = "0.0.1"
|
||||
|
||||
[[packages]]
|
||||
name = "bash"
|
||||
version = "4.4.*"
|
||||
|
||||
The ``name`` field is the name of the blueprint. It can contain spaces, but they will be converted to ``-``
|
||||
when it is written to disk. It should be short and descriptive.
|
||||
|
||||
``description`` can be a longer description of the blueprint, it is only used for display purposes.
|
||||
|
||||
``version`` is a `semver compatible <https://semver.org/>`_ version number. If
|
||||
a new blueprint is uploaded with the same ``version`` the server will
|
||||
automatically bump the PATCH level of the ``version``. If the ``version``
|
||||
doesn't match it will be used as is. eg. Uploading a blueprint with ``version``
|
||||
set to ``0.1.0`` when the existing blueprint ``version`` is ``0.0.1`` will
|
||||
result in the new blueprint being stored as ``version 0.1.0``.
|
||||
|
||||
[[packages]] and [[modules]]
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
These entries describe the package names and matching version glob to be installed into the image.
|
||||
|
||||
The names must match the names exactly, and the versions can be an exact match
|
||||
or a filesystem-like glob of the version using ``*`` wildcards and ``?``
|
||||
character matching.
|
||||
|
||||
NOTE: As of lorax-composer-29.2-1 the versions are not used for depsolving,
|
||||
that is planned for a future release. And currently there are no differences
|
||||
between ``packages`` and ``modules`` in ``lorax-composer``.
|
||||
|
||||
[[groups]]
|
||||
~~~~~~~~~~
|
||||
|
||||
These entries describe a group of packages to be installed into the image. Package groups are
|
||||
defined in the repository metadata. Each group has a descriptive name used primarily for display
|
||||
in user interfaces and an ID more commonly used in kickstart files. Here, the ID is the expected
|
||||
way of listing a group.
|
||||
|
||||
Groups have three different ways of categorizing their packages: mandatory, default, and optional.
|
||||
For purposes of blueprints, mandatory and default packages will be installed. There is no mechanism
|
||||
for selecting optional packages.
|
||||
|
||||
Customizations
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
The ``[customizations]`` section can be used to configure the hostname of the final image. eg.::
|
||||
|
||||
[customizations]
|
||||
hostname = "baseimage"
|
||||
|
||||
This is optional and may be left out to use the defaults.
|
||||
|
||||
|
||||
[customizations.kernel]
|
||||
***********************
|
||||
|
||||
This allows you to append arguments to the bootloader's kernel commandline. This will not have any
|
||||
effect on ``tar`` or ``ext4-filesystem`` images since they do not include a bootloader.
|
||||
|
||||
For example::
|
||||
|
||||
[customizations.kernel]
|
||||
append = "nosmt=force"
|
||||
|
||||
|
||||
[[customizations.sshkey]]
|
||||
*************************
|
||||
|
||||
Set an existing user's ssh key in the final image::
|
||||
|
||||
[[customizations.sshkey]]
|
||||
user = "root"
|
||||
key = "PUBLIC SSH KEY"
|
||||
|
||||
The key will be added to the user's authorized_keys file.
|
||||
|
||||
|
||||
[[customizations.user]]
|
||||
***********************
|
||||
|
||||
Add a user to the image, and/or set their ssh key.
|
||||
All fields for this section are optional except for the ``name``, here is a complete example::
|
||||
|
||||
[[customizations.user]]
|
||||
name = "admin"
|
||||
description = "Administrator account"
|
||||
password = "$6$CHO2$3rN8eviE2t50lmVyBYihTgVRHcaecmeCk31L..."
|
||||
key = "PUBLIC SSH KEY"
|
||||
home = "/srv/widget/"
|
||||
shell = "/usr/bin/bash"
|
||||
groups = ["widget", "users", "wheel"]
|
||||
uid = 1200
|
||||
gid = 1200
|
||||
|
||||
If the password starts with ``$6$``, ``$5$``, or ``$2b$`` it will be stored as
|
||||
an encrypted password. Otherwise it will be treated as a plain text password.
|
||||
|
||||
|
||||
[[customizations.group]]
|
||||
************************
|
||||
|
||||
Add a group to the image. ``name`` is required and ``gid`` is optional::
|
||||
|
||||
[[customizations.group]]
|
||||
name = "widget"
|
||||
gid = 1130
|
||||
|
||||
|
||||
[customizations.timezone]
|
||||
*************************
|
||||
|
||||
Customizing the timezone and the NTP servers to use for the system::
|
||||
|
||||
[customizations.timezone]
|
||||
timezone = "US/Eastern"
|
||||
ntpservers = ["0.north-america.pool.ntp.org", "1.north-america.pool.ntp.org"]
|
||||
|
||||
The values supported by ``timezone`` can be listed by running ``timedatectl list-timezones``.
|
||||
|
||||
If no timezone is setup the system will default to using `UTC`. The ntp servers are also
|
||||
optional and will default to using the distribution defaults which are fine for most uses.
|
||||
|
||||
In some image types there are already NTP servers setup, eg. Google cloud image, and they
|
||||
cannot be overridden because they are required to boot in the selected environment. But the
|
||||
timezone will be updated to the one selected in the blueprint.
|
||||
|
||||
|
||||
[customizations.locale]
|
||||
***********************
|
||||
|
||||
Customize the locale settings for the system::
|
||||
|
||||
[customizations.locale]
|
||||
languages = ["en_US.UTF-8"]
|
||||
keyboard = "us"
|
||||
|
||||
The values supported by ``languages`` can be listed by running ``localectl list-locales`` from
|
||||
the command line.
|
||||
|
||||
The values supported by ``keyboard`` can be listed by running ``localectl list-keymaps`` from
|
||||
the command line.
|
||||
|
||||
Multiple languages can be added. The first one becomes the
|
||||
primary, and the others are added as secondary. One or the other of ``languages``
|
||||
or ``keyboard`` must be included (or both) in the section.
|
||||
|
||||
|
||||
[customizations.firewall]
|
||||
*************************
|
||||
|
||||
By default the firewall blocks all access except for services that enable their ports explicitly,
|
||||
like ``sshd``. This command can be used to open other ports or services. Ports are configured using
|
||||
the port:protocol format::
|
||||
|
||||
[customizations.firewall]
|
||||
ports = ["22:tcp", "80:tcp", "imap:tcp", "53:tcp", "53:udp"]
|
||||
|
||||
Numeric ports, or their names from ``/etc/services`` can be used in the ``ports`` enabled/disabled lists.
|
||||
|
||||
The blueprint settings extend any existing settings in the image templates, so if ``sshd`` is
|
||||
already enabled it will extend the list of ports with the ones listed by the blueprint.
|
||||
|
||||
If the distribution uses ``firewalld`` you can specify services listed by ``firewall-cmd --get-services``
|
||||
in a ``customizations.firewall.services`` section::
|
||||
|
||||
[customizations.firewall.services]
|
||||
enabled = ["ftp", "ntp", "dhcp"]
|
||||
disabled = ["telnet"]
|
||||
|
||||
Remember that the ``firewall.services`` are different from the names in ``/etc/services``.
|
||||
|
||||
Both are optional, if they are not used leave them out or set them to an empty list ``[]``. If you
|
||||
only want the default firewall setup this section can be omitted from the blueprint.
|
||||
|
||||
NOTE: The ``Google`` and ``OpenStack`` templates explicitly disable the firewall for their environment.
|
||||
This cannot be overridden by the blueprint.
|
||||
|
||||
[customizations.services]
|
||||
*************************
|
||||
|
||||
This section can be used to control which services are enabled at boot time.
|
||||
Some image types already have services enabled or disabled in order for the
|
||||
image to work correctly, and cannot be overridden. eg. ``ami`` requires
|
||||
``sshd``, ``chronyd``, and ``cloud-init``. Without them the image will not
|
||||
boot. Blueprint services are added to, not replacing, the list already in the
|
||||
templates, if any.
|
||||
|
||||
[customizations.services]
|
||||
enabled = ["sshd", "cockpit", "httpd.service"]
|
||||
disabled = ["postfix", "telnetd"]
|
||||
|
||||
.. note::
|
||||
|
||||
The service names are systemd service units. You can only specify the unit
|
||||
name, eg. ``httpd``, or the full service name, eg. ``httpd.service`` -- but
|
||||
not other systemd unit files. Note that this is different from newer
|
||||
releases where you can specify any systemd unit file.
|
||||
|
||||
Adding Output Types
|
||||
-------------------
|
||||
|
||||
``livemedia-creator`` supports a large number of output types, and only some of
|
||||
these are currently available via ``lorax-composer``. To add a new output type to
|
||||
lorax-composer a kickstart file needs to be added to ``./share/composer/``. The
|
||||
name of the kickstart is what will be used by the ``/compose/types`` route, and the
|
||||
``compose_type`` field of the POST to start a compose. It also needs to have
|
||||
code added to the :py:func:`pylorax.api.compose.compose_args` function. The
|
||||
``_MAP`` entry in this function defines what lorax-composer will pass to
|
||||
:py:func:`pylorax.installer.novirt_install` when it runs the compose. When the
|
||||
compose is finished the output files need to be copied out of the build
|
||||
directory (``/var/lib/lorax/composer/results/<UUID>/compose/``),
|
||||
:py:func:`pylorax.api.compose.move_compose_results` handles this for each type.
|
||||
You should move them instead of copying to save space.
|
||||
|
||||
If the new output type does not have support in livemedia-creator it should be
|
||||
added there first. This will make the output available to the widest number of
|
||||
users.
|
||||
|
||||
Example: Add partitioned disk support
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Partitioned disk support is something that livemedia-creator already supports
|
||||
via the ``--make-disk`` cmdline argument. To add this to lorax-composer it
|
||||
needs 3 things:
|
||||
|
||||
* A ``partitioned-disk.ks`` file in ``./share/composer/``
|
||||
* A new entry in the _MAP in :py:func:`pylorax.api.compose.compose_args`
|
||||
* Add a bit of code to :py:func:`pylorax.api.compose.move_compose_results` to move the disk image from
|
||||
the compose directory to the results directory.
|
||||
|
||||
The ``partitioned-disk.ks`` is pretty similar to the example minimal kickstart
|
||||
in ``./docs/rhel7-minimal.ks``. You should remove the ``url`` and ``repo``
|
||||
commands, they will be added by the compose process. Make sure the bootloader
|
||||
packages are included in the ``%packages`` section at the end of the kickstart,
|
||||
and you will want to leave off the ``%end`` so that the compose can append the
|
||||
list of packages from the blueprint.
|
||||
|
||||
The new ``_MAP`` entry should be a copy of one of the existing entries, but with ``make_disk`` set
|
||||
to ``True``. Make sure that none of the other ``make_*`` options are ``True``. The ``image_name`` is
|
||||
what the name of the final image will be.
|
||||
|
||||
``move_compose_results()`` can be as simple as moving the output file into
|
||||
the results directory, or it could do some post-processing on it. The end of
|
||||
the function should always clean up the ``./compose/`` directory, removing any
|
||||
unneeded extra files. This is especially true for the ``live-iso`` since it produces
|
||||
the contents of the iso as well as the boot.iso itself.
|
||||
|
||||
Package Sources
|
||||
---------------
|
||||
|
||||
By default lorax-composer uses the host's configured repositories. It copies
|
||||
the ``*.repo`` files from ``/etc/yum.repos.d/`` into
|
||||
``/var/lib/lorax/composer/repos.d/`` at startup, these are immutable system
|
||||
repositories and cannot be deleted or changed. If you want to add additional
|
||||
repos you can put them into ``/var/lib/lorax/composer/repos.d/`` or use the
|
||||
``/api/v0/projects/source/*`` API routes to create them.
|
||||
|
||||
The new source can be added by doing a POST to the ``/api/v0/projects/source/new``
|
||||
route using JSON (with `Content-Type` header set to `application/json`) or TOML
|
||||
(with it set to `text/x-toml`). The format of the source looks like this (in
|
||||
TOML)::
|
||||
|
||||
name = "custom-source-1"
|
||||
url = "https://url/path/to/repository/"
|
||||
type = "yum-baseurl"
|
||||
proxy = "https://proxy-url/"
|
||||
check_ssl = true
|
||||
check_gpg = true
|
||||
gpgkey_urls = ["https://url/path/to/gpg-key"]
|
||||
|
||||
The ``proxy`` and ``gpgkey_urls`` entries are optional. All of the others are required. The supported
|
||||
types for the urls are:
|
||||
|
||||
* ``yum-baseurl`` is a URL to a yum repository.
|
||||
* ``yum-mirrorlist`` is a URL for a mirrorlist.
|
||||
* ``yum-metalink`` is a URL for a metalink.
|
||||
|
||||
If ``check_ssl`` is true the https certificates must be valid. If they are self-signed you can either set
|
||||
this to false, or add your Certificate Authority to the host system.
|
||||
|
||||
If ``check_gpg`` is true the GPG key must either be installed on the host system, or ``gpgkey_urls``
|
||||
should point to it.
|
||||
|
||||
You can edit an existing source (other than system sources), by doing a POST to the ``new`` route
|
||||
with the new version of the source. It will overwrite the previous one.
|
||||
|
||||
A list of existing sources is available from ``/api/v0/projects/source/list``, and detailed info
|
||||
on a source can be retrieved with the ``/api/v0/projects/source/info/<source-name>`` route. By default
|
||||
it returns JSON but it can also return TOML if ``?format=toml`` is added to the request.
|
||||
|
||||
Non-system sources can be deleted by doing a ``DELETE`` request to the
|
||||
``/api/v0/projects/source/delete/<source-name>`` route.
|
||||
|
||||
The documentation for the source API routes can be `found here <pylorax.api.html#api-v0-projects-source-list>`_
|
||||
|
||||
The configured sources are used for all blueprint depsolve operations, and for composing images.
|
||||
When adding additional sources you must make sure that the packages in the source do not
|
||||
conflict with any other package sources, otherwise depsolving will fail.
|
||||
|
||||
DVD ISO Package Source
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In some situations the system may want to *only* use a DVD iso as the package
|
||||
source, not the repos from the network. ``lorax-composer`` and ``anaconda``
|
||||
understand ``file://`` URLs so you can mount an iso on the host, and replace the
|
||||
system repo files with a configuration file pointing to the DVD.
|
||||
|
||||
* Stop the ``lorax-composer.service`` if it is running
|
||||
* Move the repo files in ``/etc/yum.repos.d/`` someplace safe
|
||||
* Create a new ``iso.repo`` file in ``/etc/yum.repos.d/``::
|
||||
|
||||
[iso]
|
||||
name=iso
|
||||
baseurl=file:///mnt/iso/
|
||||
enabled=1
|
||||
gpgcheck=1
|
||||
gpgkey=file:///mnt/iso/RPM-GPG-KEY-redhat-release
|
||||
|
||||
* Remove all the cached repo files from ``/var/lib/lorax/composer/repos/``
|
||||
* Restart the ``lorax-composer.service``
|
||||
* Check the output of ``composer-cli status show`` for any output specific depsolve errors.
|
||||
For example, the DVD usually does not include ``grub2-efi-*-cdboot-*`` so the live-iso image
|
||||
type will not be available.
|
||||
|
||||
If you want to *add* the DVD source to the existing sources you can do that by
|
||||
mounting the iso and creating a source file to point to it as described in the
|
||||
`Package Sources`_ documentation. In that case there is no need to remove the other
|
||||
sources from ``/etc/yum.repos.d/`` or clear the cached repos.
|
148
docs/lorax.rst
Normal file
148
docs/lorax.rst
Normal file
@ -0,0 +1,148 @@
|
||||
Lorax
|
||||
=====
|
||||
|
||||
:Authors:
|
||||
Brian C. Lane <bcl@redhat.com>
|
||||
|
||||
"I am the Lorax. I speak for the trees [and images]."
|
||||
|
||||
The `lorax <https://github.com/rhinstaller/lorax>`_ tool is used to create the
|
||||
`Anaconda <https://github.com/rhinstaller/anaconda>`_ installer boot.iso as
|
||||
well as the basic release tree, and .treeinfo metadata file. Its dependencies
|
||||
are fairly light-weight because it needs to be able to run in a mock chroot
|
||||
environment. It is best to run lorax from the same release as is being targeted
|
||||
because the templates may have release specific logic in them. eg. Use the
|
||||
rawhide version to build the boot.iso for rawhide, along with the rawhide
|
||||
repositories.
|
||||
|
||||
|
||||
lorax cmdline arguments
|
||||
-----------------------
|
||||
|
||||
See the output from ``lorax --help`` for the commandline arguments.
|
||||
|
||||
Quickstart
|
||||
----------
|
||||
|
||||
Run this as root to create a boot.iso in ``./results/``::
|
||||
|
||||
yum install lorax
|
||||
setenforce 0
|
||||
lorax -p RHEL -v 7 -r 7 \
|
||||
-s http://mirror.centos.org/centos-7/7/os/x86_64/ \
|
||||
-s http://mirror.centos.org/centos-7/7/updates/x86_64/ \
|
||||
./results/
|
||||
setenforce 1
|
||||
|
||||
You can add your own repos with ``-s`` and packages with higher NVRs will
|
||||
override the ones in the distribution repositories.
|
||||
|
||||
Under ``./results/`` will be the release tree files: .discinfo, .treeinfo, everything that
|
||||
goes onto the boot.iso, the pxeboot directory, and the boot.iso under ``./images/``.
|
||||
|
||||
|
||||
Running inside of mock
|
||||
----------------------
|
||||
|
||||
If you are using lorax with mock v1.3.4 or later you will need to pass
|
||||
``--old-chroot`` to mock. Mock now defaults to using systemd-nspawn which cannot
|
||||
create the needed loop device nodes. Passing ``--old-chroot`` will use the old
|
||||
system where ``/dev/loop*`` is setup for you.
|
||||
|
||||
|
||||
How it works
|
||||
------------
|
||||
|
||||
Lorax uses `yum <https://github.com/rpm-software-management/yum>`_ to install
|
||||
packages into a temporary directory, sets up configuration files, it then
|
||||
removes unneeded files to save space, and creates a squashfs filesystem of the
|
||||
files. The iso is then built using a generic initramfs and the kernel from the
|
||||
selected repositories.
|
||||
|
||||
To drive these processes Lorax uses a custom template system, based on `Mako
|
||||
templates <http://www.makotemplates.org/>`_ with the addition of custom
|
||||
commands (documented in :class:`pylorax.ltmpl.LoraxTemplateRunner`). Mako
|
||||
supports ``%if/%endif`` blocks as well as free-form python code inside ``<%
|
||||
%>`` tags and variable substitution with ``${}``. The default templates are
|
||||
shipped with lorax in ``/usr/share/lorax/`` and use the
|
||||
``.tmpl`` extension.
|
||||
|
||||
|
||||
runtime-install.tmpl
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The ``runtime-install.tmpl`` template lists packages to be installed using the
|
||||
``installpkg`` command. This template is fairly simple, installing common packages and
|
||||
architecture specific packages. It must end with the ``run_pkg_transaction``
|
||||
command which tells dnf to download and install the packages.
|
||||
|
||||
|
||||
runtime-postinstall.tmpl
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The ``runtime-postinstall.tmpl`` template is where the system configuration
|
||||
happens. The installer environment is similar to a normal running system, but
|
||||
needs some special handling. Configuration files are setup, systemd is told to
|
||||
start the anaconda.target instead of a default system target, and a number of
|
||||
unneeded services are disabled, some of which can interfere with the
|
||||
installation. A number of template commands are used here:
|
||||
|
||||
* :func:`append <pylorax.ltmpl.LoraxTemplateRunner.append>` to add text to a file.
|
||||
* :func:`chmod <pylorax.ltmpl.LoraxTemplateRunner.chmod>` changes the file's mode.
|
||||
* :func:`gconfset <pylorax.ltmpl.LoraxTemplateRunner.gconfset>` runs gconfset.
|
||||
* :func:`install <pylorax.ltmpl.LoraxTemplateRunner.install>` to install a file into the installroot.
|
||||
* :func:`mkdir <pylorax.ltmpl.LoraxTemplateRunner.mkdir>` makes a new directory.
|
||||
* :func:`move <pylorax.ltmpl.LoraxTemplateRunner.move>` to move a file into the installroot
|
||||
* :func:`replace <pylorax.ltmpl.LoraxTemplateRunner.replace>` does text substitution in a file
|
||||
* :func:`remove <pylorax.ltmpl.LoraxTemplateRunner.remove>` deletes a file
|
||||
* :func:`runcmd <pylorax.ltmpl.LoraxTemplateRunner.runcmd>` run arbitrary commands.
|
||||
* :func:`symlink <pylorax.ltmpl.LoraxTemplateRunner.symlink>` creates a symlink
|
||||
* :func:`systemctl <pylorax.ltmpl.LoraxTemplateRunner.systemctl>` runs systemctl in the installroot
|
||||
|
||||
|
||||
runtime-cleanup.tmpl
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The ``runtime-cleanup.tmpl`` template is used to remove files that aren't strictly needed
|
||||
by the installation environment. In addition to the ``remove`` template command it uses:
|
||||
|
||||
* :func:`removepkg <pylorax.ltmpl.LoraxTemplateRunner.removepkg>`
|
||||
remove all of a specific package's contents. A package may be pulled in as a dependency, but
|
||||
not really used. eg. sound support.
|
||||
* :func:`removefrom <pylorax.ltmpl.LoraxTemplateRunner.removefrom>`
|
||||
Removes some files from a package. A file glob can be used, or the --allbut option to
|
||||
remove everything except a select few.
|
||||
* :func:`removekmod <pylorax.ltmpl.LoraxTemplateRunner.removekmod>`
|
||||
Removes kernel modules
|
||||
|
||||
|
||||
The squashfs filesystem
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
After ``runtime-*.tmpl`` templates have finished their work lorax creates an
|
||||
empty ext4 filesystem, copies the remaining files to it, and makes a squashfs
|
||||
filesystem of it. This file is the / of the boot.iso's installer environment
|
||||
and is what is in the LiveOS/squashfs.img file on the iso.
|
||||
|
||||
|
||||
iso creation
|
||||
~~~~~~~~~~~~
|
||||
|
||||
The iso creation is handled by another set of templates. The one used depends
|
||||
on the architecture that the iso is being created for. They are also stored in
|
||||
``/usr/share/lorax/`` and are named after the arch, like
|
||||
``x86.tmpl`` and ``aarch64.tmpl``. They handle creation of the tree, copying
|
||||
configuration template files, configuration variable substitution, treeinfo
|
||||
metadata (via the :func:`treeinfo <pylorax.ltmpl.LoraxTemplateRunner.treeinfo>`
|
||||
template command). Kernel and initrd are copied from the installroot to their
|
||||
final locations and then mkisofs is run to create the boot.iso
|
||||
|
||||
|
||||
Custom Templates
|
||||
----------------
|
||||
|
||||
The default set of templates and configuration files are shipped in the
|
||||
``/usr/share/lorax/`` directory. You can make a copy of them and place them
|
||||
into another directory and then select the new template directory by passing
|
||||
``--sharedir`` to lorax.
|
||||
|
@ -4,10 +4,14 @@ livemedia-creator \- Create live install media
|
||||
|
||||
.SH SYNOPSIS
|
||||
livemedia-creator [-h]
|
||||
(--make-iso | --make-disk | --make-fsimage | --make-appliance | --make-ami)
|
||||
(--make-iso | --make-disk | --make-fsimage | --make-appliance | --make-ami | --make-tar | --make-pxe-live | --make-ostree-live)
|
||||
[--iso ISO] [--disk-image DISK_IMAGE]
|
||||
[--fs-image FS_IMAGE] [--ks KS]
|
||||
[--image-name IMAGE_NAME] [--image-only]
|
||||
[--fs-label FS_LABEL]
|
||||
[--compression] [--compress-arg]
|
||||
[--live-rootfs-size LIVE_ROOTFS_SIZE]
|
||||
[--live-rootfs-keep-size LIVE_ROOTFS_KEEP_SIZE]
|
||||
[--keep-image] [--no-virt] [--proxy PROXY]
|
||||
[--anaconda-arg ANACONDA_ARGS]
|
||||
[--armplatform ARMPLATFORM] [--location LOCATION]
|
||||
@ -20,6 +24,7 @@ livemedia-creator [-h]
|
||||
[--dracut-arg DRACUT_ARGS] [--title TITLE]
|
||||
[--project PROJECT] [--releasever RELEASEVER]
|
||||
[--volid VOLID] [--squashfs_args SQUASHFS_ARGS]
|
||||
[--virt-uefi] [--ovmf-path OVMF_PATH]
|
||||
|
||||
.SH DESCRIPTION
|
||||
livemedia-creator uses Anaconda, kickstart and Lorax to create bootable media
|
||||
@ -63,6 +68,18 @@ Build an appliance image and XML description
|
||||
\fB\-\-make\-ami\fR
|
||||
Build an ami image
|
||||
|
||||
.TP
|
||||
\fB\-\-make\-tar\fR
|
||||
Build a tar of the root filesystem. Defaults to root.tar.xz
|
||||
|
||||
.TP
|
||||
\fB\-\-make\-pxe\-live\fR
|
||||
Build a live pxe boot squashfs image
|
||||
|
||||
.TP
|
||||
\fB\-\-make\-ostree\-live\fR
|
||||
Build a live pxe boot squashfs image of Atomic Host
|
||||
|
||||
.TP
|
||||
\fB\-\-iso ISO\fR
|
||||
Anaconda installation .iso path to use for virt-install
|
||||
@ -73,7 +90,24 @@ Path to disk image to use for creating final image
|
||||
|
||||
.TP
|
||||
\fB\-\-fs\-image FS_IMAGE\fR
|
||||
Path to filesystem image to use for creating final image
|
||||
Path to existing filesystem image to use for creating final image.
|
||||
|
||||
.TP
|
||||
\fB\-\-qcow2\fR
|
||||
Create qcow2 image instead of raw sparse image when making disk images.
|
||||
|
||||
.TP
|
||||
\fB\-\-qcow2\-arg\fR
|
||||
Arguments to pass to qemu-img. Pass once for each argument
|
||||
>>>>>>> d04a99e... livemedia-creator: Add support for making tarfiles
|
||||
|
||||
.TP
|
||||
\fB\-\-compression\fR
|
||||
Compression binary for make-tar. xz, lzma, gzip, and bzip2 are supported. xz is the default.
|
||||
|
||||
.TP
|
||||
\fB\-\-compress\-arg\fR
|
||||
Arguments to pass to compression. Pass once for each argument
|
||||
|
||||
.TP
|
||||
\fB\-\-ks KS\fR
|
||||
@ -160,6 +194,15 @@ Path to template to use for appliance data.
|
||||
\fB\-\-app\-file APP_FILE\fR
|
||||
Appliance template results file.
|
||||
|
||||
.SH PXE\-LIVE ARGUMENTS:
|
||||
.TP
|
||||
\fB\-\-live\-rootfs\-size\fR
|
||||
Size of root filesystem of live image in GiB. By default approximate size of space used in root filesystem is used.
|
||||
|
||||
.TP
|
||||
\fB\-\-live\-rootfs\-keep\-size\fR
|
||||
Keep the size of original root filesystem (rounded down to GiB) in live image
|
||||
|
||||
.SH VIRT\-INSTALL ARGUMENTS:
|
||||
.TP
|
||||
\fB\-\-ram MEMORY\fR
|
||||
@ -181,6 +224,15 @@ Passed to --arch command
|
||||
\fB\-\-kernel\-args KERNEL_ARGS\fR
|
||||
Additional argument to pass to the installation kernel
|
||||
|
||||
.TP
|
||||
\fB\-\-virt\-uefi\fR
|
||||
Boot the virtual machine in UEFI mode. Requires OVMF_CODE.fd and OVMF_VARS.fd
|
||||
|
||||
.TP
|
||||
\fB\-\-ovmf\-path\fR
|
||||
Path to OVMF_CODE.fd and OVMF_VARS.fd. Defaults to /usr/share/OVMF/, the UEFI
|
||||
firmware files need to be installed manually, they are not shipped with RHEL.
|
||||
|
||||
.SH DRACUT ARGUMENTS:
|
||||
.TP
|
||||
\fB\-\-dracut\-arg DRACUT_ARGS\fR
|
@ -3,7 +3,7 @@
|
||||
lorax \- Create installer boot iso
|
||||
|
||||
.SH SYNOPSIS
|
||||
lorax -p PRODUCT -v VERSION -r RELEASE -s REPOSITORY OUTPUTDIR
|
||||
lorax -p PRODUCT -v VERSION -r RELEASE [-s REPOSITORY|--repo CONFIG] OUTPUTDIR
|
||||
|
||||
.SH DESCRIPTION
|
||||
|
||||
@ -37,6 +37,10 @@ release information
|
||||
\fB\-s REPOSITORY, \-\-source=REPOSITORY\fR
|
||||
source repository (may be listed multiple times)
|
||||
|
||||
.TP
|
||||
\fB\--repo CONFIG\fR
|
||||
repository configuration file (may be listed multiple times)
|
||||
|
||||
.SH
|
||||
OPTIONAL ARGUMENTS:
|
||||
|
||||
@ -89,6 +93,10 @@ Path to logfile
|
||||
\fB\-\-tmp=TMP\fR
|
||||
Top level temporary directory
|
||||
|
||||
.TP
|
||||
\fB\-\-noverifyssl\fR
|
||||
This disables SSL certificate checking. eg. to allow using https: sources with self-signed certificates.
|
||||
|
||||
.SH AUTHORS
|
||||
.nf
|
||||
Martin Gracik
|
27
docs/product-images.rst
Normal file
27
docs/product-images.rst
Normal file
@ -0,0 +1,27 @@
|
||||
Product and Updates Images
|
||||
==========================
|
||||
|
||||
Lorax now supports creation of product.img and updates.img as part of the build
|
||||
process. This is implemented using the installimg template command which will
|
||||
take the contents of a directory and create a compressed archive from it. The
|
||||
directory must be created by one of the packages installed by
|
||||
runtime-install.tmpl or by passing ``--installpkgs <pkgname>`` to lorax at
|
||||
runtime. The x86, ppc, ppc64le and aarch64 templates all look for
|
||||
/usr/share/lorax/product/ and /usr/share/lorax/updates/ directories in the
|
||||
install chroot while creating the final install tree. If there are files in
|
||||
those directories lorax will create images/product.img and/or
|
||||
images/updates.img
|
||||
|
||||
These archives are just like an anaconda updates image -- their contents are
|
||||
copied over the top of the filesystem at boot time so that you can drop in
|
||||
files to add to or replace anything on the filesystem.
|
||||
|
||||
Anaconda has several places that it looks for updates, the one for product.img
|
||||
is in /run/install/product. So for example, to add an installclass to Anaconda
|
||||
you would put your custom class here:
|
||||
|
||||
``/usr/share/lorax/product/run/install/product/pyanaconda/installclasses/custom.py``
|
||||
|
||||
If the packages containing the product/updates files are not included as part
|
||||
of normal dependencies you can add specific packages with the ``--installpkgs``
|
||||
command or the installpkgs paramater of :class:`pylorax.treebuilder.RuntimeBuilder`
|
26
docs/rhel-atomic-pxe-live.ks
Normal file
26
docs/rhel-atomic-pxe-live.ks
Normal file
@ -0,0 +1,26 @@
|
||||
# Settings for unattended installation:
|
||||
lang en_US.UTF-8
|
||||
keyboard us
|
||||
timezone America/New_York
|
||||
zerombr
|
||||
clearpart --all --initlabel
|
||||
rootpw --plaintext atomic
|
||||
network --bootproto=dhcp --device=link --activate
|
||||
|
||||
# We are only able to install atomic with separate /boot partition currently
|
||||
part / --fstype="ext4" --size=6000
|
||||
part /boot --size=500 --fstype="ext4"
|
||||
|
||||
shutdown
|
||||
|
||||
# Using ostree repo included in installation iso. Respective ostreesetup command is included here.
|
||||
# The included kickstart file with the command is created during installation iso compose.
|
||||
%include /usr/share/anaconda/interactive-defaults.ks
|
||||
|
||||
services --disabled=cloud-init,cloud-init-local,cloud-final,cloud-config,docker-storage-setup
|
||||
|
||||
# We copy content of separate /boot partition to root part when building live squashfs image,
|
||||
# and we don't want systemd to try to mount it when pxe booting
|
||||
%post
|
||||
cat /dev/null > /etc/fstab
|
||||
%end
|
@ -3,18 +3,19 @@ sshpw --username=root --plaintext randOmStrinGhERE
|
||||
# Firewall configuration
|
||||
firewall --enabled --service=mdns
|
||||
# Use network installation
|
||||
url --url="http://dl.fedoraproject.org/pub/fedora/linux/development/19/x86_64/os/"
|
||||
url --url=http://repo/rhel7.4/Server/os
|
||||
repo --name=optional --baseurl=http://repo/rhel7.4/Server/optional/os
|
||||
|
||||
# X Window System configuration information
|
||||
xconfig --startxonboot
|
||||
# Root password
|
||||
rootpw --plaintext removethispw
|
||||
# Network information
|
||||
network --bootproto=dhcp --device=eth0 --onboot=on --activate
|
||||
network --bootproto=dhcp --onboot=on --activate
|
||||
# System authorization information
|
||||
auth --useshadow --enablemd5
|
||||
# System keyboard
|
||||
keyboard us
|
||||
keyboard --xlayouts=us --vckeymap=us
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# SELinux configuration
|
||||
@ -34,8 +35,9 @@ zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all
|
||||
# Disk partitioning information
|
||||
reqpart
|
||||
part biosboot --size=1
|
||||
part / --fstype="ext4" --size=4000
|
||||
part / --fstype="ext4" --size=5000
|
||||
part swap --size=1000
|
||||
|
||||
%post
|
||||
@ -307,16 +309,8 @@ rm -f /core*
|
||||
rm -f /.readahead_collect
|
||||
touch /var/lib/readahead/early.sorted
|
||||
|
||||
%end
|
||||
|
||||
%post --nochroot
|
||||
cp $INSTALL_ROOT/usr/share/doc/*-release-*/GPL $LIVE_ROOT/GPL
|
||||
|
||||
# only works on x86, x86_64
|
||||
if [ "$(uname -i)" = "i386" -o "$(uname -i)" = "x86_64" ]; then
|
||||
if [ ! -d $LIVE_ROOT/LiveOS ]; then mkdir -p $LIVE_ROOT/LiveOS ; fi
|
||||
cp /usr/bin/livecd-iso-to-disk $LIVE_ROOT/LiveOS
|
||||
fi
|
||||
# Remove random-seed
|
||||
rm /var/lib/systemd/random-seed
|
||||
%end
|
||||
|
||||
%post
|
||||
@ -346,9 +340,6 @@ gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults
|
||||
# Turn off PackageKit-command-not-found while uninstalled
|
||||
sed -i -e 's/^SoftwareSourceSearch=true/SoftwareSourceSearch=false/' /etc/PackageKit/CommandNotFound.conf
|
||||
|
||||
# Use the animated laughlin background by default
|
||||
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -t str -s /desktop/gnome/background/picture_filename /usr/share/backgrounds/laughlin/default-tod/laughlin.xml
|
||||
|
||||
EOF
|
||||
|
||||
# Remove root password
|
||||
@ -361,30 +352,23 @@ cat /dev/null > /etc/fstab
|
||||
%end
|
||||
|
||||
%packages
|
||||
@admin-tools
|
||||
@standard
|
||||
@base-x
|
||||
# Packages needed by anaconda, but not directly required.
|
||||
# Includes all of the grub2 and shim packages needed, except
|
||||
# for the grub2-efi-*-cdboot package
|
||||
@anaconda-tools --optional
|
||||
@core
|
||||
@dial-up
|
||||
@fonts
|
||||
@x11
|
||||
@gnome-desktop
|
||||
@graphical-internet
|
||||
@hardware-support
|
||||
@input-methods
|
||||
#@office
|
||||
#@printing
|
||||
#@sound-and-video
|
||||
anaconda
|
||||
isomd5sum
|
||||
kernel
|
||||
laughlin-backgrounds-animated-gnome
|
||||
memtest86+
|
||||
nss-mdns
|
||||
-ibus-pinyin-db-open-phrase
|
||||
-smartmontools
|
||||
grub2-efi
|
||||
grub2
|
||||
shim
|
||||
syslinux
|
||||
dracut-norescue
|
||||
-dracut-config-rescue
|
||||
|
||||
# This package is needed to boot the iso on UEFI
|
||||
grub2-efi-*-cdboot
|
||||
grub2-efi-ia32
|
||||
%end
|
64
docs/rhel7-minimal.ks
Normal file
64
docs/rhel7-minimal.ks
Normal file
@ -0,0 +1,64 @@
|
||||
# Minimal Disk Image
|
||||
#
|
||||
sshpw --username=root --plaintext randOmStrinGhERE
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
# Use network installation
|
||||
url --url=http://repo/rhel7.4/Server/os
|
||||
repo --name=optional --baseurl=http://repo/rhel7.4/Server/optional/os
|
||||
|
||||
# Root password
|
||||
rootpw --plaintext removethispw
|
||||
# Network information
|
||||
network --bootproto=dhcp --onboot=on --activate
|
||||
# System authorization information
|
||||
auth --useshadow --enablemd5
|
||||
# System keyboard
|
||||
keyboard --xlayouts=us --vckeymap=us
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# Installation logging level
|
||||
logging --level=info
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
# System timezone
|
||||
timezone US/Eastern
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
# Partition clearing information
|
||||
clearpart --all
|
||||
# Disk partitioning information
|
||||
reqpart
|
||||
part / --fstype="ext4" --size=4000
|
||||
part swap --size=1000
|
||||
|
||||
%post
|
||||
# Remove root password
|
||||
passwd -d root > /dev/null
|
||||
|
||||
# Remove random-seed
|
||||
rm /var/lib/systemd/random-seed
|
||||
%end
|
||||
|
||||
%packages
|
||||
@core
|
||||
kernel
|
||||
memtest86+
|
||||
efibootmgr
|
||||
grub2-efi
|
||||
grub2
|
||||
shim
|
||||
syslinux
|
||||
-dracut-config-rescue
|
||||
|
||||
# Boot on 32bit UEFI
|
||||
shim-ia32
|
||||
grub2-efi-ia32
|
||||
|
||||
# NOTE: To build a bootable UEFI disk image livemedia-creator needs to be
|
||||
# run on a UEFI system or virt.
|
||||
%end
|
8
epel.repo
Normal file
8
epel.repo
Normal file
@ -0,0 +1,8 @@
|
||||
[epel]
|
||||
name=Extra Packages for Enterprise Linux 7 - $basearch
|
||||
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
|
||||
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
|
||||
failovermethod=priority
|
||||
enabled=1
|
||||
gpgcheck=1
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
|
143
etc/bash_completion.d/composer-cli
Normal file
143
etc/bash_completion.d/composer-cli
Normal file
@ -0,0 +1,143 @@
|
||||
# bash completion for composer-cli
|
||||
|
||||
__composer_cli_flags="-h --help -j --json -s --socket --log -a --api --test -V"
|
||||
|
||||
declare -A __composer_cli_cmds=(
|
||||
[compose]="list start types status log cancel delete info metadata logs results image"
|
||||
[blueprints]="list show changes diff save delete depsolve push freeze tag undo workspace"
|
||||
[modules]="list"
|
||||
[projects]="list info"
|
||||
[sources]="list info add change delete"
|
||||
[help]=""
|
||||
)
|
||||
|
||||
__composer_socket_ok() {
|
||||
[ -w "${COMPOSER_SOCKET:-/run/weldr/api.socket}" ]
|
||||
}
|
||||
|
||||
__composer_blueprints() {
|
||||
__composer_socket_ok && composer-cli blueprints list
|
||||
}
|
||||
|
||||
__composer_sources() {
|
||||
__composer_socket_ok && composer-cli sources list
|
||||
}
|
||||
|
||||
__composer_compose_types() {
|
||||
__composer_socket_ok && composer-cli compose types
|
||||
}
|
||||
|
||||
__composer_composes() {
|
||||
__composer_socket_ok && composer-cli compose list $@ | while read id rest; do echo $id; done
|
||||
}
|
||||
|
||||
__word_in_list() {
|
||||
local w word=$1; shift
|
||||
for w in "$@"; do
|
||||
[ "$w" == "$word" ] && return 0
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
_composer_cli() {
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
local w="" wi=0 cmd="__NONE__" subcmd="__NONE__" cmd_cword=0
|
||||
|
||||
# find the command and its subcommand
|
||||
for (( wi=0; wi < ${#COMP_WORDS[*]}; wi++ )); do
|
||||
if __word_in_list "${COMP_WORDS[wi]}" "${!__composer_cli_cmds[@]}"; then
|
||||
cmd="${COMP_WORDS[wi]}"
|
||||
subcmd="${COMP_WORDS[wi+1]}"
|
||||
cmd_cword=$((COMP_CWORD-wi))
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
COMPREPLY=()
|
||||
|
||||
if [ "$cmd_cword" -le 0 ]; then
|
||||
# No command yet, complete flags or commands
|
||||
case "$prev" in
|
||||
-s|--socket|--log)
|
||||
# If it's a flag that takes a filename, suggest filenames
|
||||
compopt -o filenames
|
||||
COMPREPLY=($(compgen -f -- "${cur}"))
|
||||
;;
|
||||
-a|--api|--test)
|
||||
# If it's a flag that takes an arg we can't guess, don't suggest anything
|
||||
COMPREPLY=()
|
||||
;;
|
||||
*)
|
||||
if [ "${cur:0:1}" == "-" ]; then
|
||||
# Suggest flags if cur starts with '-'
|
||||
COMPREPLY=($(compgen -W "${__composer_cli_flags}" -- "${cur}"))
|
||||
else
|
||||
# Suggest commands if there isn't one already
|
||||
COMPREPLY=($(compgen -W "${!__composer_cli_cmds[*]}" -- "${cur}"))
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
elif [ $cmd_cword == 1 ]; then
|
||||
# Complete the word after the command
|
||||
COMPREPLY=($(compgen -W "${__composer_cli_cmds[$cmd]} help" -- "${cur}"))
|
||||
elif [ $cmd_cword == 2 ]; then
|
||||
# Complete word(s) after subcommand
|
||||
case "$cmd:$subcmd" in
|
||||
compose:list)
|
||||
COMPREPLY=($(compgen -W "waiting running finish failed" -- "${cur}"))
|
||||
;;
|
||||
*:list|*:help|compose:types)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
sources:info|sources:delete)
|
||||
COMPREPLY=($(compgen -W "$(__composer_sources)" -- "${cur}"))
|
||||
;;
|
||||
sources:add|sources:change|blueprints:workspace|blueprints:push)
|
||||
compopt -o filenames
|
||||
COMPREPLY=($(compgen -f -- "${cur}"))
|
||||
;;
|
||||
blueprints:freeze)
|
||||
COMPREPLY=($(compgen -W "$(__composer_blueprints) show save" -- "${cur}"))
|
||||
;;
|
||||
compose:start|blueprints:*)
|
||||
COMPREPLY=($(compgen -W "$(__composer_blueprints)" -- "${cur}"))
|
||||
;;
|
||||
compose:cancel)
|
||||
COMPREPLY=($(compgen -W "$(__composer_composes running waiting)" -- "${cur}"))
|
||||
;;
|
||||
compose:delete|compose:results|compose:metadata)
|
||||
COMPREPLY=($(compgen -W "$(__composer_composes finished failed)" -- "${cur}"))
|
||||
;;
|
||||
compose:log*)
|
||||
COMPREPLY=($(compgen -W "$(__composer_composes running finished failed)" -- "${cur}"))
|
||||
;;
|
||||
compose:image)
|
||||
COMPREPLY=($(compgen -W "$(__composer_composes finished)" -- "${cur}"))
|
||||
;;
|
||||
compose:*)
|
||||
COMPREPLY=($(compgen -W "$(__composer_composes)" -- "${cur}"))
|
||||
;;
|
||||
esac
|
||||
else
|
||||
# Complete words past the subcommand's argument (if appropriate)
|
||||
case "$cmd:$subcmd" in
|
||||
compose:delete)
|
||||
COMPREPLY=($(compgen -W "$(__composer_composes finished failed)" -- "${cur}"))
|
||||
;;
|
||||
compose:start)
|
||||
if [ "$cmd_cword" == 3 ]; then
|
||||
COMPREPLY=($(compgen -W "$(__composer_compose_types)" -- "${cur}"))
|
||||
fi
|
||||
;;
|
||||
# TODO: blueprints:diff and blueprints:undo want commits
|
||||
blueprints:freeze|blueprints:save|blueprints:depsolve|blueprints:changes|blueprints:show)
|
||||
COMPREPLY=($(compgen -W "$(__composer_blueprints)" -- "${cur}"))
|
||||
;;
|
||||
sources:info)
|
||||
COMPREPLY=($(compgen -W "$(__composer_sources)" -- "${cur}"))
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
complete -F _composer_cli composer-cli
|
1
etc/composer.conf
Normal file
1
etc/composer.conf
Normal file
@ -0,0 +1 @@
|
||||
# lorax-composer configuration file
|
610
lorax-composer.spec
Normal file
610
lorax-composer.spec
Normal file
@ -0,0 +1,610 @@
|
||||
%define debug_package %{nil}
|
||||
|
||||
Name: lorax-composer
|
||||
Version: 19.7.43
|
||||
Release: 1%{?dist}
|
||||
Summary: Lorax Image Composer API Server
|
||||
|
||||
Group: Applications/System
|
||||
License: GPLv2+
|
||||
URL: https://github.com/weldr/lorax
|
||||
# To generate Source0 do:
|
||||
# git clone https://github.com/weldr/lorax
|
||||
# git checkout -b archive-branch lorax-%%{version}-%%{release}
|
||||
# tito build --tgz
|
||||
Source0: %{name}-%{version}.tar.gz
|
||||
|
||||
BuildRequires: python2-devel
|
||||
# For Sphinx documentation build
|
||||
BuildRequires: python-sphinx yum python-mako pykickstart
|
||||
BuildRequires: python-flask python-gobject libgit2-glib python2-pytoml python-semantic_version
|
||||
|
||||
Requires: lorax >= 19.7.22
|
||||
Requires(pre): /usr/bin/getent
|
||||
Requires(pre): /usr/sbin/groupadd
|
||||
Requires(pre): /usr/sbin/useradd
|
||||
|
||||
Requires: python2-pytoml
|
||||
Requires: python-semantic_version
|
||||
Requires: libgit2
|
||||
Requires: libgit2-glib
|
||||
Requires: python-flask
|
||||
Requires: python-gevent
|
||||
Requires: anaconda-tui
|
||||
Requires: qemu-img
|
||||
Requires: tar
|
||||
Requires: pykickstart >= 1.99.66.20
|
||||
|
||||
%{?systemd_requires}
|
||||
BuildRequires: systemd
|
||||
|
||||
%description
|
||||
lorax-composer provides a REST API for building images using lorax.
|
||||
|
||||
%package -n composer-cli
|
||||
Summary: A command line tool for use with the lorax-composer API server
|
||||
|
||||
Requires: python-urllib3
|
||||
|
||||
%description -n composer-cli
|
||||
A command line tool for use with the lorax-composer API server. Examine recipes,
|
||||
build images, etc. from the command line.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%build
|
||||
make docs
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
make DESTDIR=$RPM_BUILD_ROOT mandir=%{_mandir} install
|
||||
|
||||
# Install example blueprints from the test suite.
|
||||
# This path MUST match the lorax-composer.service blueprint path.
|
||||
mkdir -p $RPM_BUILD_ROOT/var/lib/lorax/composer/blueprints/
|
||||
for bp in example-http-server.toml example-development.toml example-atlas.toml; do
|
||||
cp ./tests/pylorax/blueprints/$bp $RPM_BUILD_ROOT/var/lib/lorax/composer/blueprints/
|
||||
done
|
||||
|
||||
# Do Not Package the lorax files
|
||||
rm -f $RPM_BUILD_ROOT/%{python_sitelib}/lorax-*.egg-info
|
||||
rm -rf $RPM_BUILD_ROOT/%{python_sitelib}/pylorax/*py
|
||||
rm -rf $RPM_BUILD_ROOT/%{python_sitelib}/pylorax/*py?
|
||||
rm -rf $RPM_BUILD_ROOT/%{_datadir}/lorax/appliance
|
||||
rm -rf $RPM_BUILD_ROOT/%{_datadir}/lorax/config_files
|
||||
rm -rf $RPM_BUILD_ROOT/%{_datadir}/lorax/live
|
||||
rm -rf $RPM_BUILD_ROOT/%{_datadir}/lorax/pxe-live
|
||||
rm -rf $RPM_BUILD_ROOT/%{_mandir}/man1/*
|
||||
rm -f $RPM_BUILD_ROOT/%{_datadir}/lorax/*tmpl
|
||||
rm -f $RPM_BUILD_ROOT/%{_sbindir}/lorax
|
||||
rm -f $RPM_BUILD_ROOT/%{_sbindir}/livemedia-creator
|
||||
rm -f $RPM_BUILD_ROOT/%{_sbindir}/mkefiboot
|
||||
rm -f $RPM_BUILD_ROOT/%{_bindir}/image-minimizer
|
||||
rm -f $RPM_BUILD_ROOT/%{_bindir}/mk-s390-cdboot
|
||||
rm -f $RPM_BUILD_ROOT/%{_sysconfdir}/lorax/lorax.conf
|
||||
|
||||
%pre
|
||||
getent group weldr >/dev/null 2>&1 || groupadd -r weldr >/dev/null 2>&1 || :
|
||||
getent passwd weldr >/dev/null 2>&1 || useradd -r -g weldr -d / -s /sbin/nologin -c "User for lorax-composer" weldr >/dev/null 2>&1 || :
|
||||
|
||||
%post
|
||||
%systemd_post lorax-composer.service
|
||||
%systemd_post lorax-composer.socket
|
||||
|
||||
%preun
|
||||
%systemd_preun lorax-composer.service
|
||||
%systemd_preun lorax-composer.socket
|
||||
|
||||
%postun
|
||||
%systemd_postun_with_restart lorax-composer.service
|
||||
%systemd_postun_with_restart lorax-composer.socket
|
||||
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%doc COPYING AUTHORS
|
||||
%doc docs/html
|
||||
%dir %{_sysconfdir}/lorax/
|
||||
%config(noreplace) %{_sysconfdir}/lorax/composer.conf
|
||||
%{python_sitelib}/pylorax/api/*
|
||||
%dir %{_datadir}/lorax/composer
|
||||
%{_datadir}/lorax/composer/*
|
||||
%{_sbindir}/lorax-composer
|
||||
%{_unitdir}/lorax-composer.service
|
||||
%{_unitdir}/lorax-composer.socket
|
||||
%{_tmpfilesdir}/lorax-composer.conf
|
||||
%dir %attr(0771, root, weldr) %{_sharedstatedir}/lorax/composer/
|
||||
%dir %attr(0771, root, weldr) %{_sharedstatedir}/lorax/composer/blueprints/
|
||||
%attr(0771, weldr, weldr) %{_sharedstatedir}/lorax/composer/blueprints/*
|
||||
|
||||
%files -n composer-cli
|
||||
%{_bindir}/composer-cli
|
||||
%{python_sitelib}/composer/*
|
||||
%{_sysconfdir}/bash_completion.d/composer-cli
|
||||
|
||||
%changelog
|
||||
* Thu Jun 18 2020 Brian C. Lane <bcl@redhat.com> 19.7.43-1
|
||||
- composer-cli: Change timeout to 5 minutes (bcl)
|
||||
Related: rhbz#1847490
|
||||
- composer-cli: Disable retry counter on connection timeout (bcl)
|
||||
Resolves: rhbz#1847490
|
||||
- test: Put VM image overlay into /var/tmp (martin) (martin)
|
||||
Related: rhbz#1825190
|
||||
* Mon May 18 2020 Brian C. Lane <bcl@redhat.com> 19.7.42-1
|
||||
- [tests] Remove vm-local-repos Makefile target (jikortus)
|
||||
Related: rhbz#1810711
|
||||
- [tests] Enable handling of rel-eng images (jikortus)
|
||||
Related: rhbz#1810711
|
||||
- tests: Unskip AWS test scenario (atodorov)
|
||||
Related: rhbz#1785159
|
||||
|
||||
* Mon May 11 2020 Brian C. Lane <bcl@redhat.com> 19.7.41-1
|
||||
- [tests] Fix repos files handling in test_repos_sanity.sh (jikortus)
|
||||
Related: rhbz#1828808
|
||||
- [tests] update glusterfs version to 6 (jikortus)
|
||||
Related: rhbz#1828808
|
||||
- [tests] Use rel-eng/nightly repo in test_repos_sanity.sh and vm.install (jikortus)
|
||||
Related: rhbz#1828808
|
||||
- [tests] Update download server URLs in tests (jikortus)
|
||||
Related: rhbz#1828808
|
||||
- Add test for running composer with --no-system-repos option (jikortus)
|
||||
Related: rhbz#1785159
|
||||
- [tests] don't add only rel-eng optional repo for live-iso (jikortus)
|
||||
Resolves: rhbz#rhbz#1826029
|
||||
* Mon Apr 20 2020 Brian C. Lane <bcl@redhat.com> 19.7.40-1
|
||||
- Add --no-system-repos to lorax-composer (bcl)
|
||||
Resolves: rhbz#1785388
|
||||
- tests: update skip message for TestApi (atodorov)
|
||||
Related: rhbz#1785159
|
||||
- tests: remove --test=2 from compose_sanity (jrusz)
|
||||
Related: rhbz#1789451
|
||||
- Add test for canceling a running compose (jrusz)
|
||||
Related: rhbz#1789451
|
||||
- Update datastore for VMware testing (chrobert)
|
||||
Related: rhbz#1785159
|
||||
- tests: pip install future (atodorov)
|
||||
Related: rhbz#1785159
|
||||
- lorax-composer: Estimate metadata size required by Anaconda (bcl)
|
||||
Resolves: rhbz#1761337
|
||||
- composer: Add the yum cache archive size to the size estimate (bcl)
|
||||
Related: rhbz#1761337
|
||||
|
||||
* Fri Dec 13 2019 Brian C. Lane <bcl@redhat.com> 19.7.39-1
|
||||
- test: Turn TestLiveIso back on (bcl)
|
||||
Related: rhbz#1770193
|
||||
- Makefile: archive should not run git tag (bcl)
|
||||
Related: rhbz#1770193
|
||||
- lorax-composer: Add liveuser on live-iso to wheel group (bcl)
|
||||
Related: rhbz#1770193
|
||||
- tests: Boot the test images with graphics=True (bcl)
|
||||
Related: rhbz#1770193
|
||||
- tests: Add serial console to images we boot in CI (bcl)
|
||||
Related: rhbz#1770193
|
||||
|
||||
* Mon Dec 09 2019 Brian C. Lane <bcl@redhat.com> 19.7.38-1
|
||||
- lorax-composer: Change cockpit.socket examples to cockpit (bcl)
|
||||
Related: rhbz#1718473
|
||||
|
||||
* Mon Dec 02 2019 Brian C. Lane <bcl@redhat.com> 19.7.37-1
|
||||
- tests: If TEST_OS isn't specified then match the host OS (atodorov)
|
||||
Related: rhbz#1770193
|
||||
- Remove all repo files & install composer-cli from host repos (atodorov)
|
||||
Related: rhbz#1770193
|
||||
- Always remove lorax-composer & composer-cli RPMs before installing them (atodorov)
|
||||
Related: rhbz#1770193
|
||||
- Always remove existing VM image before building new one (atodorov)
|
||||
Related: rhbz#1770193
|
||||
- tests: enable compose_ext4 test to use CDN repos (atodorov)
|
||||
Related: rhbz#1698366
|
||||
|
||||
* Tue Nov 19 2019 Brian C. Lane <bcl@redhat.com> 19.7.36-1
|
||||
- tests: restart composer after adding optional reporsitory (atodorov)
|
||||
Related: rhbz#1770193
|
||||
- tests: Keep beakerlib repo on the VM for tests which need it (atodorov)
|
||||
Related: rhbz#1770193
|
||||
- tests: unskip Qcow2 scenario (atodorov)
|
||||
Related: rhbz#1770193
|
||||
- tests: Ensure failure if beakerlib results file not found (atodorov)
|
||||
Related: rhbz#1770193
|
||||
- tests: Documentation updates (atodorov)
|
||||
Related: rhbz#1770193
|
||||
- tests: Use host repositories for make vm (atodorov)
|
||||
Related: rhbz#1770193
|
||||
Remove unused make targets (atodorov)
|
||||
Related: rhbz#1770193
|
||||
- DRY when setting up, running & parsing results for beakerlib tests (atodorov)
|
||||
Related: rhbz#1770193
|
||||
- tests: Fix check_root_account when used with tar liveimg test (bcl)
|
||||
Related: rhbz#1770193
|
||||
- tests: Use the same asserts as before (atodorov)
|
||||
Related: rhbz#1770193
|
||||
- tests: switch to using podman instead of docker (atodorov)
|
||||
Related: rhbz#1770193
|
||||
- tests: Remove nested vm from tar liveimg kickstart test (bcl)
|
||||
Related: rhbz#1770193
|
||||
- tests: Use --http0.9 for curl ssh test (bcl)
|
||||
Related: rhbz#1770193
|
||||
- test: Boot the live-iso faster, and login using ssh key (bcl)
|
||||
Related: rhbz#1770193
|
||||
- tests: Split testing the image into a separate script (bcl)
|
||||
Related: rhbz#1770193
|
||||
- test: Split up the test class to allow booting other images (bcl)
|
||||
Related: rhbz#1770193
|
||||
- [tests] Collect compose logs after each build (atodorov)
|
||||
Related: rhbz#1770193
|
||||
- [tests] Use a function to wait for compose to finish (jikortus)
|
||||
Related: rhbz#1770193
|
||||
- [tests] Use functions for starting and stopping lorax-composer (atodorov)
|
||||
Related: rhbz#1770193
|
||||
- Update for differences from py3 in the backported code (bcl)
|
||||
Related: rhbz#1718473
|
||||
- Remove repos.git related tests (bcl)
|
||||
Related: rhbz#1718473
|
||||
- composer-cli: Update diff support for customizations and repos.git (bcl)
|
||||
Related: rhbz#1718473
|
||||
- Add support for customizations and repos.git to /blueprints/diff/ (bcl)
|
||||
Related: rhbz#1718473
|
||||
- tests: Update custom-base with customizations (bcl)
|
||||
Related: rhbz#1718473
|
||||
- Change customizations.firewall to append items instead of replace (bcl)
|
||||
Related: rhbz#1718473
|
||||
- Update customizations.services documentation (bcl)
|
||||
Related: rhbz#1718473
|
||||
- lorax-composer: Add services support to blueprints (bcl)
|
||||
Related: rhbz#1718473
|
||||
- lorax-composer: Add firewall support to blueprints (bcl)
|
||||
Related: rhbz#1718473
|
||||
- lorax-composer: Add locale support to blueprints (bcl)
|
||||
Related: rhbz#1718473
|
||||
- Update docs for new timezone section (bcl)
|
||||
Related: rhbz#1718473
|
||||
- lorax-composer: Add timezone support to blueprint (bcl)
|
||||
Related: rhbz#1718473
|
||||
- Proposal for adding to the blueprint customizations (bcl)
|
||||
Related: rhbz#1718473
|
||||
- tests: Document Azure setup (atodorov)
|
||||
- tests: unskip Azure scenario (atodorov)
|
||||
- Support CI testing against a bots project PR (martin)
|
||||
- Makefile: Update bots target for moved GitHub project (sanne.raymaekers)
|
||||
- tests: Add kickstart tar installation test (jikortus)
|
||||
Related: rhbz#1733504
|
||||
- tests: Increase test VM memory to 3 GB (jikortus)
|
||||
Related: rhbz#1733504
|
||||
- tests: add option to disable kernel command line parameters check (jikortus)
|
||||
Related: rhbz#1733504
|
||||
- tests: Use a loop to wait for VM and sshd to start (bcl)
|
||||
Related: rhbz#1733504
|
||||
- tests: Drop sort from compose types test (bcl)
|
||||
Related: rhbz#1749802
|
||||
- New test: assert toml files in git workspace (atodorov)
|
||||
Related: rhbz#1749802
|
||||
- Change paths for '/api/status' calls and skip this test (atodorov)
|
||||
Related: rhbz#1698366
|
||||
- Ignore Cockpit CI files when linting (atodorov)
|
||||
Related: rhbz#1698366
|
||||
- Use optional repository in Live ISO test (atodorov)
|
||||
Related: rhbz#1698366
|
||||
- Install test dependencies inside virtualenv (atodorov)
|
||||
Related: rhbz#1698366
|
||||
- Install python2-pip in the test VM and disable EPEL repo (atodorov)
|
||||
Related: rhbz#1698366
|
||||
- Use qemu-kvm in tests instead of qemu-system (atodorov)
|
||||
Related: rhbz#1698366
|
||||
- Skip AWS, Azure, qcow2 and live-iso tests (atodorov)
|
||||
Related: rhbz#1698366
|
||||
- Don't hard-code the path to toml-compare (atodorov)
|
||||
Related: rhbz#1698366
|
||||
- Install or remove packages in the test environment (atodorov)
|
||||
Related: rhbz#1698366
|
||||
- Install additional repositories for testing (atodorov)
|
||||
Related: rhbz#1698366
|
||||
- Prevent ssh asking for password when testing on interactive terminal (atodorov)
|
||||
Related: rhbz#1704209
|
||||
- Fail if number of excuted tests != number of dicovered tests (atodorov)
|
||||
Related: rhbz#1698366
|
||||
- Fix typo from test backport (atodorov)
|
||||
Related: rhbz#1698366
|
||||
- Use passwd --status for locked root account check (jikortus)
|
||||
Related: rhbz#1687595
|
||||
- Backport changes for Cockpit CI (atodorov)
|
||||
Related: rhbz#1698366
|
||||
* Mon Jun 24 2019 Brian C. Lane <bcl@redhat.com> 19.7.35-1
|
||||
- test_compose_tar: Fix docker test (lars)
|
||||
Related: rhbz#1720224
|
||||
- tests: kill the qemu process name used to start it (bcl)
|
||||
Related: rhbz#1710877
|
||||
- Update local copy of lorax to current rhel7-branch (bcl)
|
||||
Related: rhbz#1668520
|
||||
Related: rhbz#1715116
|
||||
Related: rhbz#1689314
|
||||
- Update the lorax templates to match what lorax provides (bcl)
|
||||
Related: rhbz#1689314
|
||||
- Enable networking in lorax-composer templates (bcl)
|
||||
Resolves: rhbz#1710877
|
||||
|
||||
* Thu Jun 13 2019 Brian C. Lane <bcl@redhat.com> 19.7.34-1
|
||||
- [tests] Handle blueprints in setup_tests/teardown_tests correctly (atodorov)
|
||||
Related: rhbz#1698366
|
||||
- tests: Set BLUEPRINTS_DIR in all cases (lars)
|
||||
Related: rhbz#1698366
|
||||
- tests: Change the way how we remove pyOpenSSL (atodorov)
|
||||
Related: rhbz#1715003
|
||||
- Use a less strict regex for disabled root account check (jikortus)
|
||||
Related: rhbz#1687595
|
||||
- Add test for passing custom option on kernel command line (jikortus)
|
||||
Related: rhbz#1688335
|
||||
- Use verify_image function as a helper for generic tests (jikortus)
|
||||
Related: rhbz#1704209
|
||||
|
||||
* Tue May 07 2019 Brian C. Lane <bcl@redhat.com> 19.7.33-1
|
||||
- Pass ssl certificate options to anaconda (lars)
|
||||
Resolves: rhbz#1701033
|
||||
- Change [[modules]] to [[packages]] in tests (atodorov)
|
||||
Related: rhbz#1698366
|
||||
- Add new test to verify compose paths exist (atodorov)
|
||||
Related: rhbz#1698366
|
||||
- Add new sanity tests for blueprints (atodorov)
|
||||
Related: rhbz#1698366
|
||||
|
||||
* Mon Apr 29 2019 Brian C. Lane <bcl@redhat.com> 19.7.32-1
|
||||
- tests: Add a test for using [[customizations]] with [customizations.kernel] (bcl)
|
||||
Related: rhbz#1688335
|
||||
- lorax-composer: Fix customizations when creating a recipe (bcl)
|
||||
Related: rhbz#1688335
|
||||
|
||||
* Mon Apr 29 2019 Brian C. Lane <bcl@redhat.com> 19.7.31-1
|
||||
- Fixup print function usage with StringIO (bcl)
|
||||
Related: rhbz#1688335
|
||||
- lorax-composer: pass customization.kernel append to extra_boot_args (bcl)
|
||||
Resolves: rhbz#1688335
|
||||
- lorax-composer: Add the ability to append to the kernel command-line (bcl)
|
||||
Related: rhbz#1688335
|
||||
|
||||
* Wed Apr 24 2019 Brian C. Lane <bcl@redhat.com> 19.7.30-1
|
||||
- Add test for starting compose with deleted blueprint (jikortus)
|
||||
Related: rhbz#1683442
|
||||
- lorax-composer: Return UnknownBlueprint errors when using deleted blueprints (bcl)
|
||||
Resolves: rhbz#1683442
|
||||
- lorax-composer: Delete workspace copy when deleting blueprint (bcl)
|
||||
Related: rhbz#1683442
|
||||
- Use existing storage account (jstodola)
|
||||
Related: rhbz#1673012
|
||||
- Record date/time of VM creation (jstodola)
|
||||
Related: rhbz#1673012
|
||||
- Update datastore for VMware testing (chrobert)
|
||||
Related: rhbz#1656105
|
||||
- Fixes for locked root account test (jikortus)
|
||||
Related: rhbz#1687595
|
||||
- Add checks for disabled root account (jikortus)
|
||||
Related: rhbz#1687595
|
||||
- 'compose info' is 'compose details' on RHEL-7 (jikortus)
|
||||
Related: rhbz#1687595
|
||||
- Update some grammer issues in the test Bash scripts (chrobert)
|
||||
Related: rhbz#1656105
|
||||
- Update datastore for VMware testing (chrobert)
|
||||
Related: rhbz#1656105
|
||||
|
||||
* Tue Mar 19 2019 Brian C. Lane <bcl@redhat.com> 19.7.29-1
|
||||
- Allow overriding $CLI outside test scripts (atodorov)
|
||||
Related: rhbz#1687595
|
||||
- Use make ci inside test-in-copy target (atodorov)
|
||||
Related: rhbz#1687595
|
||||
- New test: Build live-iso and boot with KVM (atodorov)
|
||||
Related: rhbz#1656105
|
||||
- New test: Build qcow2 compose and test it with QEMU-KVM (atodorov)
|
||||
Related: rhbz#1656105
|
||||
- New test: Verify tar images with Docker and systemd-nspawn (atodorov)
|
||||
Related: rhbz#1656105
|
||||
- Update OpenStack flavor and network settings in tests (atodorov)
|
||||
Related: rhbz#1656105
|
||||
- Install ansible and openstacksdk inside virtualenv (atodorov)
|
||||
Related: rhbz#1656105
|
||||
- Remove python-requests, python-dateutil and pyOpenSSL (atodorov)
|
||||
Related: rhbz#1656105
|
||||
- Add /usr/local/bin to PATH for tests (atodorov) (atodorov)
|
||||
- Do not generate journal.xml from beakerlib (atodorov)
|
||||
Related: rhbz#1656105
|
||||
- Expand parameters as separate words (jstodola) (jstodola)
|
||||
|
||||
* Mon Feb 25 2019 Brian C. Lane <bcl@redhat.com> 19.7.28-1
|
||||
- lorax-composer: Check for STATUS before deleting (bcl)
|
||||
Related: rhbz#1659129
|
||||
- Check for existing CANCEL request, and exit on FINISHED (bcl)
|
||||
Related: rhbz#1659129
|
||||
- Add cancel_func to virt and novirt_install functions (bcl)
|
||||
Resolves: rhbz#1659129
|
||||
- Remove duplicate repositories from the sources list (bcl)
|
||||
Resolves: rhbz#1664128
|
||||
- Remove unneeded else from for/else loop. It confuses pylint (bcl)
|
||||
Related: rhbz#1666517
|
||||
- Allow customizations to be specified as a toml list (dshea)
|
||||
Resolves: rhbz#1666517
|
||||
- Make sure compose build tests run with SELinux in enforcing mode (jikortus)
|
||||
Related: rhbz#1654795
|
||||
- Add tests for metapackages and package name globs (bcl)
|
||||
Related: rhbz#1641601
|
||||
- Upgrade pip & setuptools b/c they are rather old (atodorov) (atodorov)
|
||||
- Workaround openstacksdk dependency issue (atodorov) (atodorov)
|
||||
- On Python 2 Azure needs the futures module (atodorov) (atodorov)
|
||||
- On RHEL 7 we have Python 2, not Python 3 (atodorov) (atodorov)
|
||||
- On RHEL 7 we have yum instead of dnf (atodorov) (atodorov)
|
||||
- On RHEL 7 `compose info` is `compose details` (atodorov) (atodorov)
|
||||
- Report an error if the blueprint doesn't exist (bcl) (bcl)
|
||||
- Build the HTML docs before running tests (atodorov) (atodorov)
|
||||
- Disable pylint errors with Flask and gevent (bcl) (bcl)
|
||||
- Backport cloud image tests from master (atodorov) (atodorov)
|
||||
- Fix compose_args for openstack image (bcl)
|
||||
Related: rhbz#1656105
|
||||
- Fix compose_args for vmdk image (bcl)
|
||||
Related: rhbz#1656105
|
||||
- Fix compose_args for vhd image (bcl)
|
||||
Related: rhbz#1656105
|
||||
- Fix compose_args for ami image (bcl)
|
||||
Related: rhbz#1656105
|
||||
- Update projects list to return only the unique projects (bcl)
|
||||
Related: rhbz#1657055
|
||||
- Change yaps_to_module to proj_to_module (bcl)
|
||||
Related: rhbz#1657055
|
||||
- lorax-composer: Handle packages with multiple builds (bcl)
|
||||
Resolves: rhbz#1657055
|
||||
- lorax-composer: Check the queue and results at startup (bcl)
|
||||
Resolves: rhbz#1657054
|
||||
- Add an openstack image type (bcl)
|
||||
Resolves: rhbz#1656105
|
||||
- Replace /etc/machine-id with an empty file (dshea)
|
||||
Related: rhbz#1656105
|
||||
- Add virt guest agents to the qcow2 compose (dshea)
|
||||
Resolves: rhbz#1656105
|
||||
- Add a vmdk compose type. (dshea)
|
||||
Resolves: rhbz#1656105
|
||||
- Add a vhd compose type for Azure images (dshea)
|
||||
Resolves: rhbz#1656105
|
||||
- Add an ami compose type for AWS images (dshea)
|
||||
Resolves: rhbz#1656105
|
||||
- Remove --fstype from the generated part line (dshea)
|
||||
Related: rhbz#1656105
|
||||
- lorax-composer: Install selinux-policy-targeted in images (bcl)
|
||||
Resolves: rhbz#1654795
|
||||
- Remove setfiles from mkrootfsimage (bcl)
|
||||
Resolves: rhbz#1654795
|
||||
- Remove SELinux Permissive checks (bcl)
|
||||
Resolves: rhbz#1654795
|
||||
|
||||
* Mon Oct 22 2018 Brian C. Lane <bcl@redhat.com> 19.7.27-1
|
||||
- Use matchPackageNames instead of searchNames (bcl)
|
||||
Resolves: rhbz#1641601
|
||||
|
||||
* Mon Oct 08 2018 Brian C. Lane <bcl@redhat.com> 19.7.26-1
|
||||
- Revert "Rename composer-cli to composer" (bcl)
|
||||
Related: rhbz#1635760
|
||||
|
||||
* Fri Oct 05 2018 Brian C. Lane <bcl@redhat.com> 19.7.25-1
|
||||
- Rename composer-cli to composer (lars)
|
||||
Resolves: rhbz#1635760
|
||||
|
||||
* Mon Oct 01 2018 Brian C. Lane <bcl@redhat.com> 19.7.24-1
|
||||
- Add a test for repo metadata expiration (bcl)
|
||||
Related: rhbz#1632962
|
||||
- Create a new YumBase object when repodata changes (bcl)
|
||||
Resolves: rhbz#1632962
|
||||
- Fix projects_depsolve_with_size version globbing (bcl)
|
||||
Resolves: rhbz#1628114
|
||||
- Add a version glob test forprojects_depsolve_with_size (bcl)
|
||||
Resolves: rhbz#1628114
|
||||
- Add tests for setting root password and ssh key with blueprints (bcl)
|
||||
Related: rhbz#1626120
|
||||
- Use rootpw for setting the root password instead of user (bcl)
|
||||
Related: rhbz#1626120
|
||||
- Lock the root account, except on live-iso (bcl)
|
||||
Resolves: rhbz#1626120
|
||||
|
||||
* Wed Sep 19 2018 Brian C. Lane <bcl@redhat.com> 19.7.23-1
|
||||
- Fix depsolve version globbing (bcl)
|
||||
Resolves: rhbz#1628114
|
||||
- Fix /compose/cancel API documentation (bcl)
|
||||
|
||||
* Mon Aug 27 2018 Brian C. Lane <bcl@redhat.com> 19.7.22-1
|
||||
- Fix composer-cli blueprints changes to get correct total (bcl)
|
||||
- Fix blueprints/list and blueprints/changes to return the correct total (bcl)
|
||||
- Add tests for limit=0 routes (bcl)
|
||||
- Add a function to get_url_json_unlimited to retrieve the total (bcl)
|
||||
- Fix tests related to blueprint name changes (bcl)
|
||||
- Add 'example' to the example blueprint names (bcl)
|
||||
- Don't include glusterfs.toml as an example blueprint (bcl)
|
||||
- Add a pylorax.api.version number (bcl)
|
||||
- composer-cli should not log to a file by default (bcl)
|
||||
- Add documentation for using a DVD as the package source (bcl)
|
||||
- Set TCP listen backlog for API socket to SOMAXCONN (lars)
|
||||
- Add a note about using lorax-composer.service (bcl)
|
||||
- In composer-cli, request all results (dshea)
|
||||
- Fix bash_completion.d typo (bcl)
|
||||
- Fix a little bug in running "modules list". (clumens)
|
||||
- Add tests for /compose/status filter arguments (dshea)
|
||||
- Allow '*' as a uuid in /compose/status/<uuid> (dshea)
|
||||
- Add filter arguments to /compose/status (dshea)
|
||||
|
||||
* Thu Aug 09 2018 Brian C. Lane <bcl@redhat.com> 19.7.21-1
|
||||
- Move disklabel and UEFI support to compose.py (bcl)
|
||||
- Fix more tests. (clumens)
|
||||
- Change INVALID_NAME to INVALID_CHARS. (clumens)
|
||||
- Update composer-cli for the new error return types. (clumens)
|
||||
- Add default error IDs everywhere else. (clumens)
|
||||
- Add error IDs to things that can go wrong when running a compose. (clumens)
|
||||
- Add error IDs for common source-related errors. (clumens)
|
||||
- Add error IDs for unknown modules and unknown projects. (clumens)
|
||||
- Add error IDs for when an unknown commit is requested. (clumens)
|
||||
- Add error IDs for when an unknown blueprint is requested. (clumens)
|
||||
- Add error IDs for when an unknown build UUID is requested. (clumens)
|
||||
- Add error IDs for bad state conditions. (clumens)
|
||||
- Change the error return type for bad limit= and offset=. (clumens)
|
||||
- Don't sort error messages. (clumens)
|
||||
- Fix bash completion of compose info (bcl)
|
||||
- Add + to the allowed API string character set (bcl)
|
||||
- Add job_* timestamp support to compose status (bcl)
|
||||
- Add a test for the pylorax.api.timestamp functions (bcl)
|
||||
- Add etc/bash_completion.d/composer-cli (wwoods)
|
||||
- composer-cli: clean up "list" commands (wwoods)
|
||||
- Add input string checks to the branch and format arguments (bcl)
|
||||
- Add a test for invalid characters in the API route (bcl)
|
||||
- Return a JSON error instead of a 404 on certain malformed URLs. (clumens)
|
||||
- Return an error if /modules/info doesn't return anything. (clumens)
|
||||
- Update documentation (clumens).
|
||||
Resolves: rhbz#409
|
||||
- Use constants instead of strings (clumens).
|
||||
Resolves: rhbz#409
|
||||
- Write timestamps when important events happen during the compose (clumens).
|
||||
Resolves: rhbz#409
|
||||
- Return multiple timestamps in API results (clumens).
|
||||
Resolves: rhbz#409
|
||||
- Add a new timestamp.py file to the API directory (clumens).
|
||||
Resolves: rhbz#409
|
||||
- Run as root/weldr by default. (clumens)
|
||||
- Use the first enabled system repo for the test (bcl)
|
||||
- Show more details when the system repo delete test fails (bcl)
|
||||
- Add composer-cli function tests (bcl)
|
||||
- Add a test library (bcl)
|
||||
- composer-cli: Add support for Group to blueprints diff (bcl)
|
||||
- Adjust the tests so they will pass on CentOS7 and RHEL7 (bcl)
|
||||
- Update status.py to use new handle_api_result (bcl)
|
||||
- Update sources.py to use new handle_api_result (bcl)
|
||||
- Update projects.py to use new handle_api_result (bcl)
|
||||
- Update modules.py to use new handle_api_result (bcl)
|
||||
- Update compose.py to use new handle_api_result (bcl)
|
||||
- Update blueprints.py to use new handle_api_result (bcl)
|
||||
- Modify handle_api_result so it can be used in more places (bcl)
|
||||
- composer-cli: Fix non-zero epoch in projets info (bcl)
|
||||
- Fix help output on the compose subcommand. (clumens)
|
||||
- Add timestamps to "compose-cli compose status" output. (clumens)
|
||||
- And then add real output to the status command. (clumens)
|
||||
- Add the beginnings of a new status subcommand. (clumens)
|
||||
|
||||
* Fri Jul 20 2018 Brian C. Lane <bcl@redhat.com> 19.7.20-1
|
||||
- Document that you shouldn't run lorax-composer twice. (clumens)
|
||||
- Add PIDFile to the .service file. (clumens)
|
||||
- Log and exit on metadata update errors at startup (bcl)
|
||||
- Check /projects responses for null values. (bcl)
|
||||
- Clarify error message from /source/new (bcl)
|
||||
- Download metadata when updating or adding new repos (bcl)
|
||||
|
||||
* Fri Jul 13 2018 Brian C. Lane <bcl@redhat.com> 19.7.19-1
|
||||
- Support loading groups from the kickstart template files. (clumens)
|
||||
- Add group-based tests. (clumens)
|
||||
- Include groups in depsolving. (clumens)
|
||||
- Add support for groups to blueprints. (clumens)
|
||||
- Check the compose templates at startup (bcl)
|
||||
- List individual package install failures (bcl)
|
||||
- lorax-composer: Update documentation (bcl)
|
||||
- Add help output to each subcommand. (clumens)
|
||||
- Split the help output into its own module. (clumens)
|
||||
- If the help subcommand is given, print the help output. (clumens)
|
||||
|
||||
* Wed Jun 27 2018 Brian C. Lane <bcl@redhat.com> 19.7.18-1
|
||||
- Only include some of the test blueprints (bcl)
|
||||
- Include example blueprints in the rpm (bcl)
|
||||
- Make sure /run/weldr has correct ownership and permissions (bcl)
|
||||
|
||||
* Wed Jun 20 2018 Brian C. Lane <bcl@redhat.com> 19.7.17-1
|
||||
- new lorax-composer package built with tito
|
||||
|
||||
* Tue Jun 19 2018 Brian C. Lane <bcl@redhat.com> - 19.7.16-2
|
||||
- New lorax-composer only package
|
576
lorax.spec
576
lorax.spec
@ -1,576 +0,0 @@
|
||||
%define debug_package %{nil}
|
||||
|
||||
Name: lorax
|
||||
Version: 19.6
|
||||
Release: 1%{?dist}
|
||||
Summary: Tool for creating the anaconda install images
|
||||
|
||||
Group: Applications/System
|
||||
License: GPLv2+
|
||||
URL: http://git.fedorahosted.org/git/?p=lorax.git
|
||||
Source0: https://fedorahosted.org/releases/l/o/%{name}/%{name}-%{version}.tar.gz
|
||||
|
||||
BuildRequires: python2-devel
|
||||
|
||||
Requires: GConf2
|
||||
Requires: cpio
|
||||
Requires: device-mapper
|
||||
Requires: dosfstools
|
||||
Requires: e2fsprogs
|
||||
Requires: findutils
|
||||
Requires: gawk
|
||||
Requires: genisoimage
|
||||
Requires: glib2
|
||||
Requires: glibc
|
||||
Requires: glibc-common
|
||||
Requires: gzip
|
||||
Requires: isomd5sum
|
||||
Requires: libselinux-python
|
||||
Requires: module-init-tools
|
||||
Requires: parted
|
||||
Requires: python-mako
|
||||
Requires: squashfs-tools >= 4.2
|
||||
Requires: util-linux
|
||||
Requires: xz
|
||||
Requires: yum
|
||||
Requires: pykickstart
|
||||
|
||||
%if 0%{?fedora}
|
||||
# Fedora specific deps
|
||||
Requires: fedup-dracut
|
||||
Requires: fedup-dracut-plymouth
|
||||
%endif
|
||||
|
||||
%ifarch %{ix86} x86_64
|
||||
Requires: syslinux >= 4.02-5
|
||||
%endif
|
||||
|
||||
%ifarch ppc ppc64
|
||||
Requires: kernel-bootwrapper
|
||||
%endif
|
||||
|
||||
%ifarch s390 s390x
|
||||
Requires: openssh
|
||||
%endif
|
||||
|
||||
%description
|
||||
Lorax is a tool for creating the anaconda install images.
|
||||
|
||||
It also includes livemedia-creator which is used to create bootable livemedia,
|
||||
including live isos and disk images. It can use libvirtd for the install, or
|
||||
Anaconda's image install feature.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%build
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
make DESTDIR=$RPM_BUILD_ROOT mandir=%{_mandir} install
|
||||
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%doc COPYING AUTHORS README.livemedia-creator
|
||||
%{python_sitelib}/pylorax
|
||||
%{python_sitelib}/*.egg-info
|
||||
%{_sbindir}/lorax
|
||||
%{_sbindir}/mkefiboot
|
||||
%{_sbindir}/livemedia-creator
|
||||
%dir %{_sysconfdir}/lorax
|
||||
%config(noreplace) %{_sysconfdir}/lorax/lorax.conf
|
||||
%dir %{_datadir}/lorax
|
||||
%{_datadir}/lorax/*
|
||||
%{_mandir}/man1/*.1*
|
||||
|
||||
%changelog
|
||||
* Fri Jul 26 2013 Brian C. Lane <bcl@redhat.com> 19.6-1
|
||||
- Add manpage for lorax (bcl@redhat.com)
|
||||
- Add manpage for livemedia-creator (bcl@redhat.com)
|
||||
- livemedia-creator: pass inst.cmdline for headless installs (#985487)
|
||||
(bcl@redhat.com)
|
||||
- Stop using /usr/bin/env (#987028) (bcl@redhat.com)
|
||||
- livemedia-creator: clarify required package errors (#985340) (bcl@redhat.com)
|
||||
- Include device-mapper-persistent-data in images for thinp support.
|
||||
(dlehman@redhat.com)
|
||||
|
||||
* Thu Jun 13 2013 Brian C. Lane <bcl@redhat.com> 19.5-1
|
||||
- Let sshd decide which keys to create (#971856) (bcl@redhat.com)
|
||||
- Don't remove thbrk.tri (#886250) (bcl@redhat.com)
|
||||
- Switch from xorg-x11-fonts-ethiopic to sil-abyssinica-fonts (#875664)
|
||||
(bcl@redhat.com)
|
||||
- Make ignoring yum_lock messages in anaconda easier. (clumens@redhat.com)
|
||||
- Bump image size up to 2G (#967556) (bcl@redhat.com)
|
||||
- livemedia-creator: Fix logic for anaconda test (#958036) (bcl@redhat.com)
|
||||
|
||||
* Tue May 21 2013 Brian C. Lane <bcl@redhat.com> 19.4-1
|
||||
- Add command for opening anaconda log file to history (mkolman@gmail.com)
|
||||
- Do not install chrony and rdate explicitly (vpodzime@redhat.com)
|
||||
|
||||
* Mon Apr 29 2013 Brian C. Lane <bcl@redhat.com> 19.3-1
|
||||
- Remove /var/log/journal so journald won't write to overlay
|
||||
(wwoods@redhat.com)
|
||||
- Leave /etc/os-release in the initrd (#956241) (bcl@redhat.com)
|
||||
- no standalone modutils package (dan@danny.cz)
|
||||
- remove no longer supported arm kernel variants add the new lpae one
|
||||
(dennis@ausil.us)
|
||||
- livemedia-creator: Update example kickstarts (bcl@redhat.com)
|
||||
- livemedia-creator: Ignore rescue kernels (bcl@redhat.com)
|
||||
|
||||
* Mon Apr 15 2013 Brian C. Lane <bcl@redhat.com> 19.2-1
|
||||
- Let devices get detected and started automatically. (dlehman@redhat.com)
|
||||
- Fix import of version (bcl@redhat.com)
|
||||
- fix version query and add one to the log file (hamzy@us.ibm.com)
|
||||
- Do not remove files required by tools from the s390utils-base package.
|
||||
(jstodola@redhat.com)
|
||||
|
||||
* Tue Mar 19 2013 Brian C. Lane <bcl@redhat.com> 19.1-1
|
||||
- Print & log messages on scriptlet/transaction errors (wwoods@redhat.com)
|
||||
- sysutils: add -x to cp in linktree (wwoods@redhat.com)
|
||||
- treebuilder: fix "Can't stat exclude path "/selinux"..." message
|
||||
(wwoods@redhat.com)
|
||||
- runtime: install dracut-{nohostonly,norescue} (wwoods@redhat.com)
|
||||
- runtime-install: install shim-unsigned (wwoods@redhat.com)
|
||||
- Add explicit install of net-tools (#921619) (bcl@redhat.com)
|
||||
- Don't remove hmac files for ssh and sshd (#882153) (bcl@redhat.com)
|
||||
- Raise an error when there are no initrds (bcl@redhat.com)
|
||||
- Add yum logging to yum.log (bcl@redhat.com)
|
||||
- remove sparc support (dennis@ausil.us)
|
||||
- Change Makefile to produce .tgz (bcl@redhat.com)
|
||||
|
||||
* Thu Feb 28 2013 Brian C. Lane <bcl@redhat.com> 19.0-1
|
||||
- New Version 19.0
|
||||
- Remove some env variables (#907692) (bcl@redhat.com)
|
||||
- Make sure tmpfs is enabled (#908253) (bcl@redhat.com)
|
||||
|
||||
* Tue Feb 12 2013 Brian C. Lane <bcl@redhat.com> 18.31-1
|
||||
- add syslinux and ssm (bcl@redhat.com)
|
||||
- Add filesystem image install support (bcl@redhat.com)
|
||||
|
||||
* Thu Jan 31 2013 Brian C. Lane <bcl@redhat.com> 18.30-1
|
||||
- yum changed the callback info (bcl@redhat.com)
|
||||
- tigervnc-server-module depends on Xorg, which doesn't exist on s390x
|
||||
(dan@danny.cz)
|
||||
- tools not existing on s390x (dan@danny.cz)
|
||||
- specspo is dead for a long time (dan@danny.cz)
|
||||
- no Xorg on s390x (dan@danny.cz)
|
||||
- Make boot configs consistent. (dmach@redhat.com)
|
||||
- Dynamically generate the list of installed platforms for .treeinfo
|
||||
(dmarlin@redhat.com)
|
||||
- Add a U-Boot wrapped image of 'upgrade.img'. (dmarlin@redhat.com)
|
||||
- Add trigger for Anaconda's exception handling to bash_history
|
||||
(vpodzime@redhat.com)
|
||||
- livemedia-creator: update example kickstarts (bcl@redhat.com)
|
||||
- livemedia-creator: don't pass console=ttyS0 (bcl@redhat.com)
|
||||
- Fix gcdx64.efi path to work for other distros than Fedora. (dmach@redhat.com)
|
||||
|
||||
* Thu Dec 20 2012 Martin Gracik <mgracik@redhat.com> 18.29-1
|
||||
- Do not remove gtk3 share files (mgracik@redhat.com)
|
||||
|
||||
* Wed Dec 19 2012 Martin Gracik <mgracik@redhat.com> 18.28-1
|
||||
- Fix rexists (mgracik@redhat.com)
|
||||
- Several 'doupgrade' fixes in the x86 template. (dmach@redhat.com)
|
||||
- Missing semicolon (mgracik@redhat.com)
|
||||
|
||||
* Tue Dec 18 2012 Martin Gracik <mgracik@redhat.com> 18.27-1
|
||||
- Only run installupgradeinitrd if upgrade on s390x (mgracik@redhat.com)
|
||||
|
||||
* Tue Dec 18 2012 Martin Gracik <mgracik@redhat.com> 18.26-1
|
||||
- Only run installupgradeinitrd if upgrade (mgracik@redhat.com)
|
||||
|
||||
* Tue Dec 18 2012 Martin Gracik <mgracik@redhat.com> 18.25-1
|
||||
- Add --noupgrade option (mgracik@redhat.com)
|
||||
- Require fedup-dracut* only on Fedora. (dmach@redhat.com)
|
||||
|
||||
* Fri Dec 14 2012 Brian C. Lane <bcl@redhat.com> 18.24-1
|
||||
- imgutils: use -s for kpartx, wait for device creation (bcl@redhat.com)
|
||||
- livemedia-creator: Use SELinux Permissive mode (bcl@redhat.com)
|
||||
- livemedia-creator: use cmdline mode (bcl@redhat.com)
|
||||
- use correct variable for upgrade image on s390 (dan@danny.cz)
|
||||
- only ix86/x86_64 and ppc/ppc64 need grub2 (dan@danny.cz)
|
||||
- no mount (sub-)package since RHEL-2 (dan@danny.cz)
|
||||
- Correct argument to installupgradeinitrd. (dmarlin@redhat.com)
|
||||
- Added fedup requires to spec (bcl@redhat.com)
|
||||
|
||||
* Wed Dec 05 2012 Brian C. Lane <bcl@redhat.com> 18.23-1
|
||||
- remove multipath rules (#880263) (bcl@redhat.com)
|
||||
- add installupgradeinitrd function and use it to install the upgrade initrds
|
||||
(dennis@ausil.us)
|
||||
- use installinitrd to install the upgrade.img initramfs so that we get correct
|
||||
permissions (dennis@ausil.us)
|
||||
- ppc and arm need to use kernel.upgrade not kernel.upgrader (dennis@ausil.us)
|
||||
- remove upgrade from the sparc and sysylinux config templates
|
||||
(dennis@ausil.us)
|
||||
- Add the 'fedup' plymouth theme if available (wwoods@redhat.com)
|
||||
- make templates install upgrade.img (wwoods@redhat.com)
|
||||
- build fedup upgrade.img (wwoods@redhat.com)
|
||||
- treebuilder: improve findkernels() initrd search (wwoods@redhat.com)
|
||||
- treebuilder: add 'prefix' to rebuild_initrds() (wwoods@redhat.com)
|
||||
- Add thai-scalable-waree-fonts (#872468) (mgracik@redhat.com)
|
||||
- Do not remove the fipscheck package (#882153) (mgracik@redhat.com)
|
||||
- Add MokManager.efi to EFI/BOOT (#882101) (mgracik@redhat.com)
|
||||
|
||||
* Tue Nov 06 2012 Brian C. Lane <bcl@redhat.com> 18.22-1
|
||||
- Install the yum-langpacks plugin (#868869) (jkeating@redhat.com)
|
||||
- perl is required by some low-level tools on s390x (#868824) (dan@danny.cz)
|
||||
|
||||
* Thu Oct 11 2012 Brian C. Lane <bcl@redhat.com> 18.21-1
|
||||
- Change the install user's shell for tmux (jkeating@redhat.com)
|
||||
- Set permissions on the initrd (#863018) (mgracik@redhat.com)
|
||||
- Remove the default word from boot menu (#848676) (mgracik@redhat.com)
|
||||
- Disable a whole bunch more keyboard shortcuts (#863823). (clumens@redhat.com)
|
||||
- use /var/tmp instead of /tmp (bcl@redhat.com)
|
||||
- remove rv from unmount error log (bcl@redhat.com)
|
||||
|
||||
* Wed Sep 19 2012 Brian C. Lane <bcl@redhat.com> 18.20-1
|
||||
- Remove grub 0.97 splash (bcl@redhat.com)
|
||||
- livemedia-creator: use rd.live.image instead of liveimg (bcl@redhat.com)
|
||||
|
||||
* Mon Sep 17 2012 Brian C. Lane <bcl@redhat.com> 18.19-1
|
||||
- There's no lang-table in anaconda anymore (#857925) (mgracik@redhat.com)
|
||||
- add convienience functions for running commands (bcl@redhat.com)
|
||||
- restore CalledProcessError handling (bcl@redhat.com)
|
||||
- add CalledProcessError to execWith* functions (bcl@redhat.com)
|
||||
- live uses root not inst.stage2 (bcl@redhat.com)
|
||||
- Revert "X needs the DRI drivers" (#855289) (bcl@redhat.com)
|
||||
|
||||
* Fri Sep 07 2012 Brian C. Lane <bcl@redhat.com> 18.18-1
|
||||
- Keep the dracut-lib.sh around for runtime (#851362) (jkeating@redhat.com)
|
||||
- X needs the DRI drivers (#855289) (bcl@redhat.com)
|
||||
|
||||
* Fri Aug 31 2012 Brian C. Lane <bcl@redhat.com> 18.17-1
|
||||
- use inst.stage2=hd:LABEL (#848641) (bcl@redhat.com)
|
||||
- Disable the maximize/unmaximize key bindings (#853410). (clumens@redhat.com)
|
||||
|
||||
* Thu Aug 30 2012 Brian C. Lane <bcl@redhat.com> 18.16-1
|
||||
- Revert "Mask the tmp.mount service to avoid tmpfs" (jkeating@redhat.com)
|
||||
|
||||
* Thu Aug 23 2012 Brian C. Lane <bcl@redhat.com> 18.15-1
|
||||
- change grub-cd.efi to gcdx64.efi (#851326) (bcl@redhat.com)
|
||||
- use wildcard for product path to efi binaries (#851196) (bcl@redhat.com)
|
||||
- Add yum-plugin-fastestmirror (#849797) (bcl@redhat.com)
|
||||
- livemedia-creator: update templates for grub2-efi support (bcl@redhat.com)
|
||||
- imgutils: fix umount retry handling (bcl@redhat.com)
|
||||
- livemedia-creator: use stage2 instead of root (bcl@redhat.com)
|
||||
- livemedia-creator: add location option (bcl@redhat.com)
|
||||
- nm-connection-editor was moved to separate package (#849056)
|
||||
(rvykydal@redhat.com)
|
||||
|
||||
* Thu Aug 16 2012 Brian C. Lane <bcl@redhat.com> 18.14-1
|
||||
- remove cleanup of some essential libraries (bcl@redhat.com)
|
||||
- Mask the tmp.mount service to avoid tmpfs (jkeating@redhat.com)
|
||||
|
||||
* Wed Aug 15 2012 Brian C. Lane <bcl@redhat.com> 18.13-1
|
||||
- Add a command line option to override the ARM platform. (dmarlin@redhat.com)
|
||||
- Don't remove krb5-libs (#848227) (mgracik@redhat.com)
|
||||
- Add grub2-efi support and Secure Boot shim support. (pjones@redhat.com)
|
||||
- Fix GPT code to allocate space for /2/ tables. (pjones@redhat.com)
|
||||
- Add platforms to the treeinfo for Beaker support. (dmarlin@redhat.com)
|
||||
- add logging to lorax (bcl@redhat.com)
|
||||
- move live templates into their own subdir of share (bcl@redhat.com)
|
||||
- clean up command execution (bcl@redhat.com)
|
||||
- livemedia-creator: cleanup logging a bit (bcl@redhat.com)
|
||||
|
||||
* Wed Jul 25 2012 Martin Gracik <mgracik@redhat.com> 18.12-1
|
||||
- Add 'mvebu' to list of recognized ARM kernels. (dmarlin@redhat.com)
|
||||
- Cleanup boot menus (#809663) (mgracik@redhat.com)
|
||||
- Don't remove chvt from the install image (#838554) (mgracik@redhat.com)
|
||||
- Add llvm-libs (#826351) (mgracik@redhat.com)
|
||||
|
||||
* Fri Jul 20 2012 Brian C. Lane <bcl@redhat.com> 18.11-1
|
||||
- livemedia-creator: add some error checking (bcl@redhat.com)
|
||||
|
||||
* Tue Jul 10 2012 Martin Gracik <mgracik@redhat.com> 18.10-1
|
||||
- Don't set a root= argument (wwoods@redhat.com)
|
||||
Resolves: rhbz#837208
|
||||
- Don't remove the id tool (mgracik@redhat.com)
|
||||
Resolves: rhbz#836493
|
||||
- Xauth is in bin (mgracik@redhat.com)
|
||||
Resolves: rhbz#837317
|
||||
- Actually add plymouth to the initramfs (wwoods@redhat.com)
|
||||
- don't use --prefix with dracut anymore (wwoods@redhat.com)
|
||||
- newui requires checkisomd5 to run media check. (clumens@redhat.com)
|
||||
|
||||
* Thu Jun 21 2012 Martin Gracik <mgracik@redhat.com> 18.9-1
|
||||
- Add initial support for ARM based systems (dmarlin) (mgracik@redhat.com)
|
||||
- Add plymouth to the installer runtime (wwoods@redhat.com)
|
||||
- add 'systemctl' command and use it in postinstall (wwoods@redhat.com)
|
||||
- add dracut-shutdown.service (and its dependencies) (wwoods@redhat.com)
|
||||
- leave pregenerated locale files (save RAM) (wwoods@redhat.com)
|
||||
- runtime-cleanup: log broken symlinks being removed (wwoods@redhat.com)
|
||||
- Add some documentation to LoraxTemplateRunner (wwoods@redhat.com)
|
||||
- fix '-runcmd' and improve logging (wwoods@redhat.com)
|
||||
- mkefiboot: add --debug (wwoods@redhat.com)
|
||||
- pylorax.imgutils: add retry loop and "lazy" to umount() (wwoods@redhat.com)
|
||||
- pylorax.imgutils: add debug logging (wwoods@redhat.com)
|
||||
- pylorax: set up logging as recommended by logging module (wwoods@redhat.com)
|
||||
- remove dmidecode (wwoods@redhat.com)
|
||||
- clean up net-tools properly (wwoods@redhat.com)
|
||||
- runtime-cleanup: correctly clean up kbd (wwoods@redhat.com)
|
||||
- runtime-cleanup: correctly clean up iproute (wwoods@redhat.com)
|
||||
- runtime-cleanup: drop a bunch of do-nothing removals (wwoods@redhat.com)
|
||||
- Create missing /etc/fstab (wwoods@redhat.com)
|
||||
- Fix systemd unit cleanup in runtime-postinstall (wwoods@redhat.com)
|
||||
- Disable Alt+Tab in metacity (mgracik@redhat.com)
|
||||
- Add pollcdrom module to dracut (bcl@redhat.com)
|
||||
|
||||
* Wed Jun 06 2012 Martin Gracik <mgracik@redhat.com> 18.8-1
|
||||
- Check if selinux is enabled before getting the mode (mgracik@redhat.com)
|
||||
- Add grub2 so that rescue is more useful (bcl@redhat.com)
|
||||
|
||||
* Mon Jun 04 2012 Martin Gracik <mgracik@redhat.com> 18.7-1
|
||||
- Comment on why selinux needs to be in permissive or disabled
|
||||
(mgracik@redhat.com)
|
||||
- Verify the yum transaction (mgracik@redhat.com)
|
||||
- Do not remove shared-mime-info (#825960) (mgracik@redhat.com)
|
||||
- Add a --required switch to installpkg (mgracik@redhat.com)
|
||||
- livemedia-creator: Hook up arch option (bcl@redhat.com)
|
||||
- livemedia-creator: Add appliance creation (bcl@redhat.com)
|
||||
- livemedia-creator: handle failed mount for ami (bcl@redhat.com)
|
||||
|
||||
* Fri Jun 01 2012 Martin Gracik <mgracik@redhat.com> 18.6-1
|
||||
- Fix the rpm call (mgracik@redhat.com)
|
||||
- Use selinux python module to get enforcing mode (mgracik@redhat.com)
|
||||
|
||||
* Thu May 31 2012 Martin Gracik <mgracik@redhat.com> 18.5-1
|
||||
- Don't remove sha256sum from the install image (mgracik@redhat.com)
|
||||
- Check if selinux is not in Enforcing mode (#824835) (mgracik@redhat.com)
|
||||
- Install rpcbind (#824835) (mgracik@redhat.com)
|
||||
- Remove hfsplus-tools dependency (#818913) (mgracik@redhat.com)
|
||||
- Copy mapping and magic to BOOTDIR on ppc (#815550) (mgracik@redhat.com)
|
||||
- Automatic commit of package [lorax] release [18.4-1]. (mgracik@redhat.com)
|
||||
|
||||
* Fri May 25 2012 Martin Gracik <mgracik@redhat.com> 18.4-1
|
||||
- Initialized to use tito.
|
||||
- Use gz not bz2 for source
|
||||
- remove 'loadkeys' stub (#804306)
|
||||
- add name field to .treeinfo its a concatination of family and version
|
||||
- Fix typo in help (#819476)
|
||||
- include the new cmsfs-fuse interface
|
||||
- linuxrc.s390 is dead in anaconda
|
||||
- Add the ppc magic file
|
||||
- Install proper branding packages from repo (#813969)
|
||||
- Use --mac for isohybrid only if doing macboot images
|
||||
- Add --nomacboot option
|
||||
- Add packages needed for NTP functionality in the installer
|
||||
- livemedia-creator: check kickstart for display modes (#819660)
|
||||
- livemedia-creator: Removed unused ImageMount class
|
||||
- livemedia-creator: cleanup after a crash
|
||||
- livemedia-creator: start using /var/tmp instead of /tmp
|
||||
- livemedia-creator: make libvirt module optional
|
||||
- stop moving /run (#818918)
|
||||
|
||||
* Thu May 03 2012 Brian C. Lane <bcl@redhat.com> 18.3-1
|
||||
- Added BCM4331 firmware (#817151) (mgracik)
|
||||
- mkefiboot: Add support for disk label files (mjg)
|
||||
- Add 'tmux' to runtime image (wwoods)
|
||||
- Add /etc/sysctl.d/anaconda.conf, set kernel.printk=1 (#816022) (wwoods)
|
||||
- reduce image size from 2GB to 1GB (wwoods)
|
||||
- keep all filesystem tools (wwoods)
|
||||
- Leave some of the grub2 utilities in the install image (#749323) (mgracik)
|
||||
- add media check menu option (bcl)
|
||||
- remove unneeded dracut bootargs (bcl)
|
||||
- mkefiboot: Copy Mac bootloader, rather than linking it (mjg)
|
||||
- Remove workdir if it was created by lorax (#807964) (mgracik)
|
||||
- add gdisk to install image (#811083) (bcl)
|
||||
- Don't use --allbut for xfsprogs cleanup (#804779) (mgracik)
|
||||
- Log all removed files (mgracik)
|
||||
- Add spice-vdagent to initrd (#804739) (mgracik)
|
||||
- Add ntfs-3g to initrd (#804302) (mgracik)
|
||||
- ntfs-3g now uses /usr/lib (#810039) (bcl)
|
||||
|
||||
* Fri Mar 30 2012 Brian C. Lane <bcl@redhat.com> 18.2-1
|
||||
- Merge noloader commits from f17-branch (bcl)
|
||||
- mkefiboot: Make Apple boot images appear in the startup preferences (mjg)
|
||||
- add symlink from /mnt/install -> /run/install (wwoods)
|
||||
- Don't trash all the initscripts 'fedora*' services (wwoods)
|
||||
- remove anaconda-copy-ks.sh (wwoods)
|
||||
- add anaconda dracut module (wwoods)
|
||||
- runtime-postinstall: remove references to loader (wwoods)
|
||||
- runtime-postinstall: remove keymap stuff (wwoods)
|
||||
- Add the icfg package (#771733) (mgracik)
|
||||
- Log the output of mkfs (#769928) (mgracik)
|
||||
- Fix product name replacing in templates (#799919) (mgracik)
|
||||
- Fix requires (mgracik)
|
||||
- use cache outside the installtree (bcl)
|
||||
- add iscsi-initiator-utils (#804522) (bcl)
|
||||
- livemedia-creator: update TreeBuilder use for isolabel (bcl)
|
||||
|
||||
* Tue Mar 06 2012 Brian C. Lane <bcl@redhat.com> 18.1-1
|
||||
- livemedia-creator: update README (bcl)
|
||||
- example livemedia kickstart for ec2 (bcl)
|
||||
- livemedia-creator: console=ttyS0 not /dev/ttyS0 (bcl)
|
||||
- livemedia-creator: Add support for making ami images (bcl)
|
||||
- Don't remove btrfs utils (#796511) (mgracik)
|
||||
- Remove root and ip parameters from generic.prm (#796572) (mgracik)
|
||||
- Check if the volume id is not longer than 32 chars (#786832) (mgracik)
|
||||
- Add option to specify volume id on command line (#786834) (mgracik)
|
||||
- Install nhn-nanum-gothic-fonts (#790266) (mgracik)
|
||||
- Change the locale to C (#786833) (mgracik)
|
||||
- iputils is small and required by dhclient-script (bcl)
|
||||
- util-linux-ng is now util-linux (bcl)
|
||||
|
||||
* Mon Feb 20 2012 Brian C. Lane <bcl@redhat.com> 18.0-1
|
||||
- use --prefix=/run/initramfs when building initramfs (wwoods)
|
||||
- dhclient-script needs cut and arping (bcl)
|
||||
- Fix missing CalledProcessError import (bcl)
|
||||
- metacity now depends on gsettings-desktop-schemas (bcl)
|
||||
- Add findiso to grub config (mjg)
|
||||
- add memtest to the boot.iso for x86 (#787234) (bcl)
|
||||
- Don't use mk-s390-cdboot (dhorak) (mgracik)
|
||||
- Add dracut args to grub.conf (bcl)
|
||||
- Change the squashfs image section in .treeinfo (mgracik)
|
||||
- Add path to squashfs image to the treeinfo (mgracik)
|
||||
- Add runtime basename variable to the template (mgracik)
|
||||
- use internal implementation of the addrsize utility (dan)
|
||||
- Make sure var/run is not a symlink on s390x (#787217) (mgracik)
|
||||
- Create var/run/dbus directory on s390x (#787217) (mgracik)
|
||||
|
||||
* Wed Feb 08 2012 Brian C. Lane <bcl@redhat.com> 17.3-1
|
||||
- keep convertfs.sh script in image (#787893) (bcl)
|
||||
- Add dracut convertfs module (#787893) (bcl)
|
||||
- fix templates to work with F17 usrmove (tflink)
|
||||
- changing hfs to hfsplus so that the correct mkfs binary is called (tflink)
|
||||
- Add luks, md and dm dracut args to bootloaders (bcl)
|
||||
- update lorax and livemedia_creator to use isfinal (bcl)
|
||||
- lorax: copy kickstarts into sysroot (#743135) (bcl)
|
||||
- livemedia-creator: Mount iso if rootfs is LiveOS (bcl)
|
||||
- Log output of failed command (mgracik)
|
||||
- Add packages required for gtk3 and the new anaconda UI. (clumens)
|
||||
|
||||
* Thu Jan 12 2012 Martin Gracik <mgracik@redhat.com> 17.2-1
|
||||
- Allow specifying buildarch on the command line (#771382) (mgracik)
|
||||
- lorax: Don't touch /etc/mtab in cleanup (bcl)
|
||||
- Update TODO and POLICY to reflect the current state of things (wwoods)
|
||||
- consider %ghost files part of the filelists in templates (wwoods)
|
||||
- lorax: Add option to exclude packages (bcl)
|
||||
- dracut needs kbd directories (#769932) (bcl)
|
||||
- better debug, handle relative output paths (bcl)
|
||||
|
||||
* Wed Dec 21 2011 Brian C. Lane <bcl@redhat.com> 17.1-1
|
||||
- lorax: check for output directory early and quit (bcl)
|
||||
- lorax: Add --proxy command (bcl)
|
||||
- lorax: add --config option (bcl)
|
||||
- Modify spec file for livemedia-creator (bcl)
|
||||
- Add no-virt mode to livemedia-creator (bcl)
|
||||
- Add livemedia-creator README and example ks (bcl)
|
||||
- Add config files for live media (bcl)
|
||||
- Add livemedia-creator (bcl)
|
||||
- Allow a None to be passed as size to create_runtime (bcl)
|
||||
- Add execWith utils from anaconda (bcl)
|
||||
- Changes needed for livecd creation (bcl)
|
||||
- dracut has moved to /usr/bin (bcl)
|
||||
|
||||
* Mon Oct 21 2011 Will Woods <wwoods@redhat.com> 17.0-1
|
||||
- Merges the 'treebuilder' branch of lorax
|
||||
- images are split into two parts again (initrd.img, LiveOS/squashfs.img)
|
||||
- base memory use reduced to ~200M (was ~550M in F15, ~320MB in F16)
|
||||
- initrd.img is now built by dracut
|
||||
- booting now requires correct "root=live:..." argument
|
||||
- boot.iso is EFI hybrid capable (copy iso to USB stick, boot from EFI)
|
||||
- Better support for Apple EFI (now with custom boot icon!)
|
||||
- new syslinux config (#734170)
|
||||
- add fpaste to installer environment (#727842)
|
||||
- rsyslog.conf: hardcode hostname for virtio forwarding (#744544)
|
||||
- Use a predictable ISO Volume Label (#732298)
|
||||
- syslinux-vesa-splash changed filename (#739345)
|
||||
- don't create /etc/sysconfig/network (#733425)
|
||||
- xauth and libXmu are needed for ssh -X (#731046)
|
||||
- add libreport plugins (#729537), clean up libreport
|
||||
- keep nss certs for libreport (#730438)
|
||||
- keep ModemManager (#727946)
|
||||
- keep vmmouse binaries (#723831)
|
||||
- change isbeta to isfinal, default to isFinal=False (#723901)
|
||||
- use pungi's installroot rather than making our own (#722481)
|
||||
- keep ntfsresize around (#722711)
|
||||
- replace cjkuni-uming-fonts with wqy-microhei-fonts (#709962)
|
||||
- install all firmware packages (#703291, #705392)
|
||||
- keep libmodman and libproxy (#701622)
|
||||
- write the lorax verion in the .buildstamp (#689697)
|
||||
- disable rsyslogd rate limiting on imuxsock (#696943)
|
||||
- disable debuginfo package
|
||||
|
||||
* Wed Apr 13 2011 Martin Gracik <mgracik@redhat.com> 0.5-1
|
||||
- Remove pungi patch
|
||||
- Remove pseudo code
|
||||
- Add a /bin/login shim for use only in the installation environment.
|
||||
- Set the hostname from a config file, not programmatically.
|
||||
- Add systemd and agetty to the installation environment.
|
||||
- Specify "cpio -H newc" instead of "cpio -c".
|
||||
- Provide shutdown on s390x (#694518)
|
||||
- Fix arch specific requires in spec file
|
||||
- Add s390 modules and do some cleanup of the template
|
||||
- Generate ssh keys on s390
|
||||
- Don't remove tr, needed for s390
|
||||
- Do not check if we have all commands
|
||||
- Change location of addrsize and mk-s390-cdboot
|
||||
- Shutdown is in another location
|
||||
- Do not skip broken packages
|
||||
- Don't install network-manager-netbook
|
||||
- Wait for subprocess to finish
|
||||
- Have to call os.makedirs
|
||||
- images dir already exists, we just need to set it
|
||||
- Do not remove libassuan.
|
||||
- The biarch is a function not an attribute
|
||||
- Create images directory in outputtree
|
||||
- Use gzip on ppc initrd
|
||||
- Create efibootdir if doing efi images
|
||||
- Get rid of create_gconf().
|
||||
- gconf/metacity: have only one workspace.
|
||||
- Add yum-langpacks yum plugin to anaconda environment (notting)
|
||||
- Replace variables in yaboot.conf
|
||||
- Add sparc specific packages
|
||||
- Skip keymap creation on s390
|
||||
- Copy shutdown and linuxrc.s390 on s390
|
||||
- Add packages for s390
|
||||
- Add support for sparc
|
||||
- Use factory to get the image classes
|
||||
- treeinfo has to be addressed as self.treeinfo
|
||||
- Add support for s390
|
||||
- Add the xen section to treeinfo on x86_64
|
||||
- Fix magic and mapping paths
|
||||
- Fix passing of prepboot and macboot arguments
|
||||
- Small ppc fixes
|
||||
- Check if the file we want to remove exists
|
||||
- Install x86 specific packages only on x86
|
||||
- Change the location of zImage.lds
|
||||
- Added ppc specific packages
|
||||
- memtest and efika.forth are in /boot
|
||||
- Add support for ppc
|
||||
- Minor sparc pseudo code changes
|
||||
- Added sparc pseudo code (dgilmore)
|
||||
- Added s390 and x86 pseudo code
|
||||
- Added ppc pseudo code
|
||||
|
||||
* Mon Mar 14 2011 Martin Gracik <mgracik@redhat.com> 0.4-1
|
||||
- Add the images-xen section to treeinfo on x86_64
|
||||
- Print a message when no arguments given (#684463)
|
||||
- Mako template returns unicode strings (#681003)
|
||||
- The check option in options causes ValueError
|
||||
- Disable all ctrl-alt-arrow metacity shortcuts
|
||||
- Remove the locale-archive explicitly
|
||||
- Use xz when compressing the initrd
|
||||
- Keep the source files for locales and get rid of the binary form
|
||||
- Add /sbin to $PATH (for the tty2 terminal)
|
||||
- Create /var/run/dbus directory in installtree
|
||||
- Add mkdir support to template
|
||||
- gpart is present only on i386 arch (#672611)
|
||||
- util-linux-ng changed to util-linux
|
||||
|
||||
* Mon Jan 24 2011 Martin Gracik <mgracik@redhat.com> 0.3-1
|
||||
- Don't remove libmount package
|
||||
- Don't create mtab symlink, already exists
|
||||
- Exit with error if we have no lang-table
|
||||
- Fix file logging
|
||||
- Overwrite the /etc/shadow file
|
||||
- Use [images-xen] section for PAE and xen kernels
|
||||
|
||||
* Fri Jan 14 2011 Martin Gracik <mgracik@redhat.com> 0.2-2
|
||||
- Fix the gnome themes
|
||||
- Add biosdevname package
|
||||
- Edit .bash_history file
|
||||
- Add the initrd and kernel lines to .treeinfo
|
||||
- Don't remove the gamin package from installtree
|
||||
|
||||
* Wed Dec 01 2010 Martin Gracik <mgracik@redhat.com> 0.1-1
|
||||
- First packaging of the new lorax tool.
|
3
rel-eng/lorax_tito/__init__.py
Normal file
3
rel-eng/lorax_tito/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
from lorax_tito.tagger import LoraxRHELTagger
|
||||
|
||||
__all__ = ['LoraxRHELTagger']
|
118
rel-eng/lorax_tito/tagger.py
Normal file
118
rel-eng/lorax_tito/tagger.py
Normal file
@ -0,0 +1,118 @@
|
||||
import re
|
||||
from tito.common import run_command
|
||||
from tito.tagger import VersionTagger
|
||||
|
||||
|
||||
class LoraxRHELTagger(VersionTagger):
|
||||
"""
|
||||
Tagger which is based on ReleaseTagger and use Red Hat Enterprise Linux
|
||||
format of Changelog:
|
||||
- description
|
||||
Resolves/Related: rhbz#1111
|
||||
|
||||
Used for:
|
||||
- Red Hat Enterprise Linux
|
||||
|
||||
If you want it put in tito.pros:
|
||||
[buildconfig]
|
||||
tagger = lorax_tito.LoraxRHELTagger
|
||||
"""
|
||||
def _getCommitDetail(self, commit, field):
|
||||
""" Get specific details about the commit using git log format field specifiers.
|
||||
"""
|
||||
command = ['git', 'log', '-1', "--pretty=format:%s" % field, commit]
|
||||
output = run_command(" ".join(command))
|
||||
ret = output.strip('\n').split('\n')
|
||||
|
||||
if len(ret) == 1 and ret[0].find('@') != -1:
|
||||
ret = [ret[0].split('@')[0]]
|
||||
elif len(ret) == 1:
|
||||
ret = [ret[0]]
|
||||
else:
|
||||
ret = [x for x in ret if x != '']
|
||||
|
||||
return ret
|
||||
|
||||
def _generate_default_changelog(self, last_tag):
|
||||
"""
|
||||
Run git-log and will generate changelog, which still can be edited by user
|
||||
in _make_changelog.
|
||||
use format:
|
||||
- description
|
||||
Resolves/Related: rhbz#1111
|
||||
"""
|
||||
patch_command = "git log --pretty=oneline --relative %s..%s -- %s" % (last_tag, "HEAD", ".")
|
||||
output = filter(lambda x: x.find('l10n: ') != 41 and \
|
||||
x.find('Merge commit') != 41 and \
|
||||
x.find('Merge branch') != 41,
|
||||
run_command(patch_command).strip('\n').split('\n'))
|
||||
|
||||
rpm_log = []
|
||||
for line in output:
|
||||
if not line:
|
||||
continue
|
||||
|
||||
rhbz = set()
|
||||
commit = line.split(' ')[0]
|
||||
summary = self._getCommitDetail(commit, "%s")[0]
|
||||
body = self._getCommitDetail(commit, "%b")
|
||||
author = self._getCommitDetail(commit, "%aE")[0]
|
||||
|
||||
# prepend Related/Resolves if subject contains BZ number
|
||||
m = re.search(r"\(#\d+(\,.*)*\)", summary)
|
||||
if m:
|
||||
fullbug = summary[m.start():m.end()]
|
||||
bugstr = summary[m.start()+2:m.end()-1]
|
||||
|
||||
bug = ''
|
||||
for c in bugstr:
|
||||
if c.isdigit():
|
||||
bug += c
|
||||
else:
|
||||
break
|
||||
|
||||
if len(bugstr) > len(bug):
|
||||
tmp = bugstr[len(bug):]
|
||||
|
||||
for c in tmp:
|
||||
if not c.isalpha():
|
||||
tmp = tmp[1:]
|
||||
else:
|
||||
break
|
||||
|
||||
if len(tmp) > 0:
|
||||
author = tmp
|
||||
|
||||
summary = summary.replace(fullbug, "(%s)" % author)
|
||||
rhbz.add("Resolves: rhbz#%s" % bug)
|
||||
|
||||
summary_bug = bug
|
||||
else:
|
||||
summary = summary.strip()
|
||||
summary += " (%s)" % author
|
||||
summary_bug = None
|
||||
|
||||
for bodyline in body:
|
||||
m = re.match(r"^(Resolves|Related|Conflicts):\ +rhbz#\d+.*$", bodyline)
|
||||
if not m:
|
||||
continue
|
||||
|
||||
actionre = re.search("(Resolves|Related|Conflicts)", bodyline)
|
||||
bugre = re.search(r"\d+", bodyline)
|
||||
if actionre and bugre:
|
||||
action = actionre.group()
|
||||
bug = bugre.group()
|
||||
rhbz.add("%s: rhbz#%s" % (action, bug))
|
||||
|
||||
# Remove the summary bug's Resolves action if it is for the same bug
|
||||
if action != 'Resolves':
|
||||
summary_str = "Resolves: rhbz#%s" % summary_bug
|
||||
if summary_bug and bug == summary_bug and summary_str in rhbz:
|
||||
rhbz.remove(summary_str)
|
||||
|
||||
if rhbz:
|
||||
rpm_log.append("%s\n%s" %(summary.strip(),"\n".join(rhbz)))
|
||||
else:
|
||||
rpm_log.append("%s (%s)" % (summary.strip(), author))
|
||||
|
||||
return "\n".join(rpm_log)
|
@ -1 +0,0 @@
|
||||
19.6-1 /
|
1
rel-eng/packages/lorax-composer
Normal file
1
rel-eng/packages/lorax-composer
Normal file
@ -0,0 +1 @@
|
||||
19.7.43-1 ./
|
@ -1,5 +1,6 @@
|
||||
[globalconfig]
|
||||
default_builder = tito.builder.Builder
|
||||
default_tagger = tito.tagger.VersionTagger
|
||||
[buildconfig]
|
||||
builder = tito.builder.Builder
|
||||
tagger = lorax_tito.LoraxRHELTagger
|
||||
changelog_do_not_remove_cherrypick = 0
|
||||
changelog_format = %s (%ae)
|
||||
lib_dir = ./rel-eng/
|
||||
|
24
setup.py
24
setup.py
@ -1,13 +1,16 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
from distutils.core import setup
|
||||
from glob import glob
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
# config file
|
||||
data_files = [("/etc/lorax", ["etc/lorax.conf"])]
|
||||
data_files = [("/etc/lorax", ["etc/lorax.conf"]),
|
||||
("/etc/lorax", ["etc/composer.conf"]),
|
||||
("/usr/lib/systemd/system", ["systemd/lorax-composer.service",
|
||||
"systemd/lorax-composer.socket"]),
|
||||
("/usr/lib/tmpfiles.d/", ["systemd/lorax-composer.conf"])]
|
||||
|
||||
# shared files
|
||||
for root, dnames, fnames in os.walk("share"):
|
||||
@ -17,7 +20,10 @@ for root, dnames, fnames in os.walk("share"):
|
||||
|
||||
# executable
|
||||
data_files.append(("/usr/sbin", ["src/sbin/lorax", "src/sbin/mkefiboot",
|
||||
"src/sbin/livemedia-creator"]))
|
||||
"src/sbin/livemedia-creator", "src/sbin/lorax-composer"]))
|
||||
data_files.append(("/usr/bin", ["src/bin/image-minimizer",
|
||||
"src/bin/mk-s390-cdboot",
|
||||
"src/bin/composer-cli"]))
|
||||
|
||||
# get the version
|
||||
sys.path.insert(0, "src")
|
||||
@ -34,13 +40,13 @@ finally:
|
||||
setup(name="lorax",
|
||||
version=vernum,
|
||||
description="Lorax",
|
||||
long_description="",
|
||||
author="Martin Gracik",
|
||||
author_email="mgracik@redhat.com",
|
||||
url="http://",
|
||||
download_url="http://",
|
||||
long_description="Tools for creating bootable images, including the Anaconda boot.iso",
|
||||
author="Brian C. Lane, Will Woods, Martin Gracik",
|
||||
author_email="bcl@redhat.com",
|
||||
url="https://rhinstaller.github.io/lorax/",
|
||||
download_url="https://github.com/rhinstaller/lorax/releases",
|
||||
license="GPLv2+",
|
||||
packages=["pylorax"],
|
||||
packages=["pylorax", "pylorax.api", "composer", "composer.cli"],
|
||||
package_dir={"" : "src"},
|
||||
data_files=data_files
|
||||
)
|
||||
|
63
share/aarch64.tmpl
Normal file
63
share/aarch64.tmpl
Normal file
@ -0,0 +1,63 @@
|
||||
<%page args="kernels, runtime_img, basearch, outroot, product, isolabel"/>
|
||||
<%
|
||||
configdir="tmp/config_files/aarch64"
|
||||
PXEBOOTDIR="images/pxeboot"
|
||||
KERNELDIR=PXEBOOTDIR
|
||||
LIVEDIR="LiveOS"
|
||||
LORAXDIR="usr/share/lorax/"
|
||||
%>
|
||||
|
||||
mkdir ${LIVEDIR}
|
||||
install ${runtime_img} ${LIVEDIR}/squashfs.img
|
||||
treeinfo stage2 mainimage ${LIVEDIR}/squashfs.img
|
||||
|
||||
## install kernels
|
||||
mkdir ${KERNELDIR}
|
||||
%for kernel in kernels:
|
||||
## normal aarch64
|
||||
installkernel images-${basearch} ${kernel.path} ${KERNELDIR}/vmlinuz
|
||||
installinitrd images-${basearch} ${kernel.initrd.path} ${KERNELDIR}/initrd.img
|
||||
%if doupgrade:
|
||||
installupgradeinitrd images-${basearch} ${kernel.upgrade.path} ${KERNELDIR}/upgrade.img
|
||||
%endif
|
||||
%endfor
|
||||
|
||||
#FIXME: this will need adjusted when we have a real bootloader.
|
||||
## WHeeeeeeee, EFI.
|
||||
## We could remove the basearch restriction someday..
|
||||
<% efiargs=""; efigraft="" %>
|
||||
%if exists("boot/efi/EFI/*/gcdaa64.efi"):
|
||||
<%
|
||||
efiarch = 'AA64'
|
||||
efigraft="EFI/BOOT={0}/EFI/BOOT".format(outroot)
|
||||
images = ["images/efiboot.img"]
|
||||
for img in images:
|
||||
efiargs += " -eltorito-alt-boot -e {0} -no-emul-boot".format(img)
|
||||
efigraft += " {0}={1}/{0}".format(img,outroot)
|
||||
%>
|
||||
<%include file="efi.tmpl" args="configdir=configdir, KERNELDIR=KERNELDIR, efiarch32=None, efiarch64=efiarch, isolabel=isolabel"/>
|
||||
|
||||
# Create optional product.img and updates.img
|
||||
<% imggraft=""; images=["product", "updates"] %>
|
||||
%for img in images:
|
||||
%if exists("%s/%s/" % (LORAXDIR, img)):
|
||||
installimg ${LORAXDIR}/${img}/ images/${img}.img
|
||||
<% imggraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %>
|
||||
%endif
|
||||
%endfor
|
||||
|
||||
# Inherit iso-graft/ if it exists from external templates
|
||||
<%
|
||||
import os
|
||||
if os.path.exists(workdir + "/iso-graft"):
|
||||
imggraft += " " + workdir + "/iso-graft"
|
||||
%>
|
||||
|
||||
## make boot.iso
|
||||
runcmd mkisofs -o ${outroot}/images/boot.iso \
|
||||
${efiargs} -R -J -V '${isolabel}' -T -graft-points \
|
||||
${KERNELDIR}=${outroot}/${KERNELDIR} \
|
||||
${LIVEDIR}=${outroot}/${LIVEDIR} \
|
||||
${efigraft} ${imggraft}
|
||||
treeinfo images-${basearch} boot.iso images/boot.iso
|
||||
%endif
|
@ -112,5 +112,12 @@ mkdir ${KERNELDIR}
|
||||
treeinfo ${basearch} platforms ${platforms}
|
||||
|
||||
|
||||
# Inherit iso-graft/ if it exists from external templates
|
||||
<%
|
||||
import os
|
||||
if os.path.exists(workdir + "/iso-graft"):
|
||||
imggraft += " " + workdir + "/iso-graft"
|
||||
%>
|
||||
|
||||
## FIXME: ARM may need some extra boot config
|
||||
|
||||
|
55
share/composer/ami.ks
Normal file
55
share/composer/ami.ks
Normal file
@ -0,0 +1,55 @@
|
||||
# Lorax Composer AMI output kickstart template
|
||||
|
||||
# Add a separate /boot partition
|
||||
part /boot --size=1024
|
||||
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
|
||||
# NOTE: The root account is locked by default
|
||||
# Network information
|
||||
network --bootproto=dhcp --onboot=on --activate
|
||||
# System authorization information
|
||||
auth --useshadow --enablemd5
|
||||
# NOTE: keyboard and lang can be replaced by blueprint customizations.locale settings
|
||||
# System keyboard
|
||||
keyboard --xlayouts=us --vckeymap=us
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# Installation logging level
|
||||
logging --level=info
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --append="no_timer_check console=ttyS0,115200n8 console=tty1 net.ifnames=0"
|
||||
|
||||
# Basic services
|
||||
services --enabled=sshd,chronyd,cloud-init
|
||||
|
||||
%post
|
||||
# Remove random-seed
|
||||
rm /var/lib/systemd/random-seed
|
||||
|
||||
# Clear /etc/machine-id
|
||||
rm /etc/machine-id
|
||||
touch /etc/machine-id
|
||||
|
||||
# tell cloud-init to create the ec2-user account
|
||||
sed -i 's/cloud-user/ec2-user/' /etc/cloud/cloud.cfg
|
||||
%end
|
||||
|
||||
%packages
|
||||
kernel
|
||||
-dracut-config-rescue
|
||||
# Enable networking by removing the config file that disables it
|
||||
-NetworkManager-config-server
|
||||
|
||||
grub2
|
||||
|
||||
chrony
|
||||
|
||||
cloud-init
|
||||
|
||||
# NOTE lorax-composer will add the recipe packages below here, including the final %end
|
38
share/composer/ext4-filesystem.ks
Normal file
38
share/composer/ext4-filesystem.ks
Normal file
@ -0,0 +1,38 @@
|
||||
# Lorax Composer filesystem output kickstart template
|
||||
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
|
||||
# NOTE: The root account is locked by default
|
||||
# Network information
|
||||
network --bootproto=dhcp --onboot=on --activate
|
||||
# NOTE: keyboard and lang can be replaced by blueprint customizations.locale settings
|
||||
# System keyboard
|
||||
keyboard --xlayouts=us --vckeymap=us
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# Installation logging level
|
||||
logging --level=info
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
# System bootloader configuration (unpartitioned fs image doesn't use a bootloader)
|
||||
bootloader --location=none
|
||||
|
||||
%post
|
||||
# Remove random-seed
|
||||
rm /var/lib/systemd/random-seed
|
||||
|
||||
# Clear /etc/machine-id
|
||||
rm /etc/machine-id
|
||||
touch /etc/machine-id
|
||||
%end
|
||||
|
||||
%packages --nobase
|
||||
# Packages requires to support this output format go here
|
||||
selinux-policy-targeted
|
||||
# Enable networking by removing the config file that disables it
|
||||
-NetworkManager-config-server
|
||||
|
||||
# NOTE lorax-composer will add the blueprint packages below here, including the final %end
|
364
share/composer/live-iso.ks
Normal file
364
share/composer/live-iso.ks
Normal file
@ -0,0 +1,364 @@
|
||||
# Lorax Composer Live ISO output kickstart template
|
||||
|
||||
# Firewall configuration
|
||||
firewall --enabled --service=mdns
|
||||
|
||||
# X Window System configuration information
|
||||
xconfig --startxonboot
|
||||
# Root password is removed for live-iso
|
||||
rootpw --plaintext removethispw
|
||||
# Network information
|
||||
network --bootproto=dhcp --onboot=on --activate
|
||||
# NOTE: keyboard and lang can be replaced by blueprint customizations.locale settings
|
||||
# System keyboard
|
||||
keyboard --xlayouts=us --vckeymap=us
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# Installation logging level
|
||||
logging --level=info
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
# System services
|
||||
services --disabled="network,sshd" --enabled="NetworkManager"
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
|
||||
%post
|
||||
# FIXME: it'd be better to get this installed from a package
|
||||
cat > /etc/rc.d/init.d/livesys << EOF
|
||||
#!/bin/bash
|
||||
#
|
||||
# live: Init script for live image
|
||||
#
|
||||
# chkconfig: 345 00 99
|
||||
# description: Init script for live image.
|
||||
|
||||
. /etc/init.d/functions
|
||||
|
||||
if ! strstr "\`cat /proc/cmdline\`" rd.live.image || [ "\$1" != "start" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ -e /.liveimg-configured ] ; then
|
||||
configdone=1
|
||||
fi
|
||||
|
||||
exists() {
|
||||
which \$1 >/dev/null 2>&1 || return
|
||||
\$*
|
||||
}
|
||||
|
||||
touch /.liveimg-configured
|
||||
|
||||
# mount live image
|
||||
if [ -b \`readlink -f /dev/live\` ]; then
|
||||
mkdir -p /mnt/live
|
||||
mount -o ro /dev/live /mnt/live 2>/dev/null || mount /dev/live /mnt/live
|
||||
fi
|
||||
|
||||
livedir="LiveOS"
|
||||
for arg in \`cat /proc/cmdline\` ; do
|
||||
if [ "\${arg##live_dir=}" != "\${arg}" ]; then
|
||||
livedir=\${arg##live_dir=}
|
||||
return
|
||||
fi
|
||||
done
|
||||
|
||||
# enable swaps unless requested otherwise
|
||||
swaps=\`blkid -t TYPE=swap -o device\`
|
||||
if ! strstr "\`cat /proc/cmdline\`" noswap && [ -n "\$swaps" ] ; then
|
||||
for s in \$swaps ; do
|
||||
action "Enabling swap partition \$s" swapon \$s
|
||||
done
|
||||
fi
|
||||
if ! strstr "\`cat /proc/cmdline\`" noswap && [ -f /mnt/live/\${livedir}/swap.img ] ; then
|
||||
action "Enabling swap file" swapon /mnt/live/\${livedir}/swap.img
|
||||
fi
|
||||
|
||||
mountPersistentHome() {
|
||||
# support label/uuid
|
||||
if [ "\${homedev##LABEL=}" != "\${homedev}" -o "\${homedev##UUID=}" != "\${homedev}" ]; then
|
||||
homedev=\`/sbin/blkid -o device -t "\$homedev"\`
|
||||
fi
|
||||
|
||||
# if we're given a file rather than a blockdev, loopback it
|
||||
if [ "\${homedev##mtd}" != "\${homedev}" ]; then
|
||||
# mtd devs don't have a block device but get magic-mounted with -t jffs2
|
||||
mountopts="-t jffs2"
|
||||
elif [ ! -b "\$homedev" ]; then
|
||||
loopdev=\`losetup -f\`
|
||||
if [ "\${homedev##/mnt/live}" != "\${homedev}" ]; then
|
||||
action "Remounting live store r/w" mount -o remount,rw /mnt/live
|
||||
fi
|
||||
losetup \$loopdev \$homedev
|
||||
homedev=\$loopdev
|
||||
fi
|
||||
|
||||
# if it's encrypted, we need to unlock it
|
||||
if [ "\$(/sbin/blkid -s TYPE -o value \$homedev 2>/dev/null)" = "crypto_LUKS" ]; then
|
||||
echo
|
||||
echo "Setting up encrypted /home device"
|
||||
plymouth ask-for-password --command="cryptsetup luksOpen \$homedev EncHome"
|
||||
homedev=/dev/mapper/EncHome
|
||||
fi
|
||||
|
||||
# and finally do the mount
|
||||
mount \$mountopts \$homedev /home
|
||||
# if we have /home under what's passed for persistent home, then
|
||||
# we should make that the real /home. useful for mtd device on olpc
|
||||
if [ -d /home/home ]; then mount --bind /home/home /home ; fi
|
||||
[ -x /sbin/restorecon ] && /sbin/restorecon /home
|
||||
if [ -d /home/liveuser ]; then USERADDARGS="-M" ; fi
|
||||
}
|
||||
|
||||
findPersistentHome() {
|
||||
for arg in \`cat /proc/cmdline\` ; do
|
||||
if [ "\${arg##persistenthome=}" != "\${arg}" ]; then
|
||||
homedev=\${arg##persistenthome=}
|
||||
return
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
if strstr "\`cat /proc/cmdline\`" persistenthome= ; then
|
||||
findPersistentHome
|
||||
elif [ -e /mnt/live/\${livedir}/home.img ]; then
|
||||
homedev=/mnt/live/\${livedir}/home.img
|
||||
fi
|
||||
|
||||
# if we have a persistent /home, then we want to go ahead and mount it
|
||||
if ! strstr "\`cat /proc/cmdline\`" nopersistenthome && [ -n "\$homedev" ] ; then
|
||||
action "Mounting persistent /home" mountPersistentHome
|
||||
fi
|
||||
|
||||
# make it so that we don't do writing to the overlay for things which
|
||||
# are just tmpdirs/caches
|
||||
mount -t tmpfs -o mode=0755 varcacheyum /var/cache/yum
|
||||
mount -t tmpfs tmp /tmp
|
||||
mount -t tmpfs vartmp /var/tmp
|
||||
[ -x /sbin/restorecon ] && /sbin/restorecon /var/cache/yum /tmp /var/tmp >/dev/null 2>&1
|
||||
|
||||
if [ -n "\$configdone" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# add fedora user with no passwd
|
||||
action "Adding live user" useradd \$USERADDARGS -c "Live System User" liveuser
|
||||
passwd -d liveuser > /dev/null
|
||||
usermod -aG wheel liveuser > /dev/null
|
||||
|
||||
# turn off firstboot for livecd boots
|
||||
chkconfig --level 345 firstboot off 2>/dev/null
|
||||
# We made firstboot a native systemd service, so it can no longer be turned
|
||||
# off with chkconfig. It should be possible to turn it off with systemctl, but
|
||||
# that doesn't work right either. For now, this is good enough: the firstboot
|
||||
# service will start up, but this tells it not to run firstboot. I suspect the
|
||||
# other services 'disabled' below are not actually getting disabled properly,
|
||||
# with systemd, but we can look into that later. - AdamW 2010/08 F14Alpha
|
||||
echo "RUN_FIRSTBOOT=NO" > /etc/sysconfig/firstboot
|
||||
|
||||
# don't start yum-updatesd for livecd boots
|
||||
chkconfig --level 345 yum-updatesd off 2>/dev/null
|
||||
|
||||
# turn off mdmonitor by default
|
||||
chkconfig --level 345 mdmonitor off 2>/dev/null
|
||||
|
||||
# turn off setroubleshoot on the live image to preserve resources
|
||||
chkconfig --level 345 setroubleshoot off 2>/dev/null
|
||||
|
||||
# don't do packagekit checking by default
|
||||
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -s -t string /apps/gnome-packagekit/update-icon/frequency_get_updates never >/dev/null
|
||||
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -s -t string /apps/gnome-packagekit/update-icon/frequency_get_upgrades never >/dev/null
|
||||
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -s -t string /apps/gnome-packagekit/update-icon/frequency_refresh_cache never >/dev/null
|
||||
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -s -t bool /apps/gnome-packagekit/update-icon/notify_available false >/dev/null
|
||||
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -s -t bool /apps/gnome-packagekit/update-icon/notify_distro_upgrades false >/dev/null
|
||||
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -s -t bool /apps/gnome-packagekit/enable_check_firmware false >/dev/null
|
||||
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -s -t bool /apps/gnome-packagekit/enable_check_hardware false >/dev/null
|
||||
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -s -t bool /apps/gnome-packagekit/enable_codec_helper false >/dev/null
|
||||
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -s -t bool /apps/gnome-packagekit/enable_font_helper false >/dev/null
|
||||
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -s -t bool /apps/gnome-packagekit/enable_mime_type_helper false >/dev/null
|
||||
|
||||
|
||||
# don't start cron/at as they tend to spawn things which are
|
||||
# disk intensive that are painful on a live image
|
||||
chkconfig --level 345 crond off 2>/dev/null
|
||||
chkconfig --level 345 atd off 2>/dev/null
|
||||
chkconfig --level 345 anacron off 2>/dev/null
|
||||
chkconfig --level 345 readahead_early off 2>/dev/null
|
||||
chkconfig --level 345 readahead_later off 2>/dev/null
|
||||
|
||||
# Stopgap fix for RH #217966; should be fixed in HAL instead
|
||||
touch /media/.hal-mtab
|
||||
|
||||
# workaround clock syncing on shutdown that we don't want (#297421)
|
||||
sed -i -e 's/hwclock/no-such-hwclock/g' /etc/rc.d/init.d/halt
|
||||
|
||||
# and hack so that we eject the cd on shutdown if we're using a CD...
|
||||
if strstr "\`cat /proc/cmdline\`" CDLABEL= ; then
|
||||
cat >> /sbin/halt.local << FOE
|
||||
#!/bin/bash
|
||||
# XXX: This often gets stuck during shutdown because /etc/init.d/halt
|
||||
# (or something else still running) wants to read files from the block\
|
||||
# device that was ejected. Disable for now. Bug #531924
|
||||
# we want to eject the cd on halt, but let's also try to avoid
|
||||
# io errors due to not being able to get files...
|
||||
#cat /sbin/halt > /dev/null
|
||||
#cat /sbin/reboot > /dev/null
|
||||
#/usr/sbin/eject -p -m \$(readlink -f /dev/live) >/dev/null 2>&1
|
||||
#echo "Please remove the CD from your drive and press Enter to finish restarting"
|
||||
#read -t 30 < /dev/console
|
||||
FOE
|
||||
chmod +x /sbin/halt.local
|
||||
fi
|
||||
|
||||
EOF
|
||||
|
||||
# bah, hal starts way too late
|
||||
cat > /etc/rc.d/init.d/livesys-late << EOF
|
||||
#!/bin/bash
|
||||
#
|
||||
# live: Late init script for live image
|
||||
#
|
||||
# chkconfig: 345 99 01
|
||||
# description: Late init script for live image.
|
||||
|
||||
. /etc/init.d/functions
|
||||
|
||||
if ! strstr "\`cat /proc/cmdline\`" rd.live.image || [ "\$1" != "start" ] || [ -e /.liveimg-late-configured ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
exists() {
|
||||
which \$1 >/dev/null 2>&1 || return
|
||||
\$*
|
||||
}
|
||||
|
||||
touch /.liveimg-late-configured
|
||||
|
||||
# read some variables out of /proc/cmdline
|
||||
for o in \`cat /proc/cmdline\` ; do
|
||||
case \$o in
|
||||
ks=*)
|
||||
ks="--kickstart=\${o#ks=}"
|
||||
;;
|
||||
xdriver=*)
|
||||
xdriver="\${o#xdriver=}"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# if liveinst or textinst is given, start anaconda
|
||||
if strstr "\`cat /proc/cmdline\`" liveinst ; then
|
||||
plymouth --quit
|
||||
/usr/sbin/liveinst \$ks
|
||||
fi
|
||||
if strstr "\`cat /proc/cmdline\`" textinst ; then
|
||||
plymouth --quit
|
||||
/usr/sbin/liveinst --text \$ks
|
||||
fi
|
||||
|
||||
# configure X, allowing user to override xdriver
|
||||
if [ -n "\$xdriver" ]; then
|
||||
cat > /etc/X11/xorg.conf.d/00-xdriver.conf <<FOE
|
||||
Section "Device"
|
||||
Identifier "Videocard0"
|
||||
Driver "\$xdriver"
|
||||
EndSection
|
||||
FOE
|
||||
fi
|
||||
|
||||
EOF
|
||||
|
||||
chmod 755 /etc/rc.d/init.d/livesys
|
||||
/sbin/restorecon /etc/rc.d/init.d/livesys
|
||||
/sbin/chkconfig --add livesys
|
||||
|
||||
chmod 755 /etc/rc.d/init.d/livesys-late
|
||||
/sbin/restorecon /etc/rc.d/init.d/livesys-late
|
||||
/sbin/chkconfig --add livesys-late
|
||||
|
||||
# work around for poor key import UI in PackageKit
|
||||
rm -f /var/lib/rpm/__db*
|
||||
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
|
||||
echo "Packages within this LiveCD"
|
||||
rpm -qa
|
||||
|
||||
# go ahead and pre-make the man -k cache (#455968)
|
||||
/usr/bin/mandb
|
||||
|
||||
# make sure there aren't core files lying around
|
||||
rm -f /core*
|
||||
|
||||
# convince readahead not to collect
|
||||
rm -f /.readahead_collect
|
||||
touch /var/lib/readahead/early.sorted
|
||||
|
||||
# Remove random-seed
|
||||
rm /var/lib/systemd/random-seed
|
||||
%end
|
||||
|
||||
%post
|
||||
cat >> /etc/rc.d/init.d/livesys << EOF
|
||||
# disable screensaver locking
|
||||
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -s -t bool /apps/gnome-screensaver/lock_enabled false >/dev/null
|
||||
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -s -t bool /desktop/gnome/lockdown/disable_lock_screen true >/dev/null
|
||||
|
||||
# set up timed auto-login for after 60 seconds
|
||||
cat >> /etc/gdm/custom.conf << FOE
|
||||
[daemon]
|
||||
AutomaticLoginEnable=True
|
||||
AutomaticLogin=liveuser
|
||||
FOE
|
||||
|
||||
# Show harddisk install on the desktop
|
||||
sed -i -e 's/NoDisplay=true/NoDisplay=false/' /usr/share/applications/liveinst.desktop
|
||||
mkdir /home/liveuser/Desktop
|
||||
cp /usr/share/applications/liveinst.desktop /home/liveuser/Desktop
|
||||
chown -R liveuser.liveuser /home/liveuser/Desktop
|
||||
chmod a+x /home/liveuser/Desktop/liveinst.desktop
|
||||
|
||||
# But not trash and home
|
||||
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -s -t bool /apps/nautilus/desktop/trash_icon_visible false >/dev/null
|
||||
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -s -t bool /apps/nautilus/desktop/home_icon_visible false >/dev/null
|
||||
|
||||
# Turn off PackageKit-command-not-found while uninstalled
|
||||
sed -i -e 's/^SoftwareSourceSearch=true/SoftwareSourceSearch=false/' /etc/PackageKit/CommandNotFound.conf
|
||||
|
||||
EOF
|
||||
|
||||
# Remove root password
|
||||
passwd -d root > /dev/null
|
||||
|
||||
# fstab from the install won't match anything. remove it and let dracut
|
||||
# handle mounting.
|
||||
cat /dev/null > /etc/fstab
|
||||
|
||||
%end
|
||||
|
||||
# NOTE Do NOT add any other sections after %packages
|
||||
%packages
|
||||
# Packages requires to support this output format go here
|
||||
isomd5sum
|
||||
kernel
|
||||
memtest86+
|
||||
syslinux
|
||||
-dracut-config-rescue
|
||||
selinux-policy-targeted
|
||||
# Enable networking by removing the config file that disables it
|
||||
-NetworkManager-config-server
|
||||
|
||||
# This package is needed to boot the iso on UEFI
|
||||
shim
|
||||
shim-ia32
|
||||
grub2
|
||||
grub2-efi
|
||||
grub2-efi-*-cdboot
|
||||
grub2-efi-ia32
|
||||
efibootmgr
|
||||
|
||||
|
||||
# NOTE lorax-composer will add the blueprint packages below here, including the final %end%packages
|
47
share/composer/openstack.ks
Normal file
47
share/composer/openstack.ks
Normal file
@ -0,0 +1,47 @@
|
||||
# Lorax Composer openstack output kickstart template
|
||||
|
||||
# Firewall configuration
|
||||
firewall --disabled
|
||||
|
||||
# NOTE: The root account is locked by default
|
||||
# Network information
|
||||
network --bootproto=dhcp --onboot=on --activate
|
||||
# NOTE: keyboard and lang can be replaced by blueprint customizations.locale settings
|
||||
# System keyboard
|
||||
keyboard --xlayouts=us --vckeymap=us
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# Installation logging level
|
||||
logging --level=info
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --append="no_timer_check console=ttyS0,115200n8 console=tty1 net.ifnames=0"
|
||||
|
||||
# Start sshd and cloud-init at boot time
|
||||
services --enabled=sshd,cloud-init,cloud-init-local,cloud-config,cloud-final
|
||||
|
||||
%post
|
||||
# Remove random-seed
|
||||
rm /var/lib/systemd/random-seed
|
||||
|
||||
# Clear /etc/machine-id
|
||||
rm /etc/machine-id
|
||||
touch /etc/machine-id
|
||||
%end
|
||||
|
||||
%packages
|
||||
kernel
|
||||
-dracut-config-rescue
|
||||
grub2
|
||||
# Enable networking by removing the config file that disables it
|
||||
-NetworkManager-config-server
|
||||
|
||||
# Make sure virt guest agents are installed
|
||||
qemu-guest-agent
|
||||
spice-vdagent
|
||||
cloud-init
|
||||
|
||||
# NOTE lorax-composer will add the recipe packages below here, including the final %end
|
42
share/composer/partitioned-disk.ks
Normal file
42
share/composer/partitioned-disk.ks
Normal file
@ -0,0 +1,42 @@
|
||||
# Lorax Composer partitioned disk output kickstart template
|
||||
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
|
||||
# NOTE: The root account is locked by default
|
||||
# Network information
|
||||
network --bootproto=dhcp --onboot=on --activate
|
||||
# NOTE: keyboard and lang can be replaced by blueprint customizations.locale settings
|
||||
# System keyboard
|
||||
keyboard --xlayouts=us --vckeymap=us
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# Installation logging level
|
||||
logging --level=info
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
|
||||
%post
|
||||
# Remove random-seed
|
||||
rm /var/lib/systemd/random-seed
|
||||
|
||||
# Clear /etc/machine-id
|
||||
rm /etc/machine-id
|
||||
touch /etc/machine-id
|
||||
%end
|
||||
|
||||
%packages
|
||||
kernel
|
||||
-dracut-config-rescue
|
||||
selinux-policy-targeted
|
||||
grub2
|
||||
# Enable networking by removing the config file that disables it
|
||||
-NetworkManager-config-server
|
||||
|
||||
# NOTE lorax-composer will add the blueprint packages below here, including the final %end
|
46
share/composer/qcow2.ks
Normal file
46
share/composer/qcow2.ks
Normal file
@ -0,0 +1,46 @@
|
||||
# Lorax Composer qcow2 output kickstart template
|
||||
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
|
||||
# NOTE: The root account is locked by default
|
||||
# Network information
|
||||
network --bootproto=dhcp --onboot=on --activate
|
||||
# NOTE: keyboard and lang can be replaced by blueprint customizations.locale settings
|
||||
# System keyboard
|
||||
keyboard --xlayouts=us --vckeymap=us
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# Installation logging level
|
||||
logging --level=info
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr
|
||||
# Clear the Master Boot Record
|
||||
zerombr
|
||||
|
||||
%post
|
||||
# Remove random-seed
|
||||
rm /var/lib/systemd/random-seed
|
||||
|
||||
# Clear /etc/machine-id
|
||||
rm /etc/machine-id
|
||||
touch /etc/machine-id
|
||||
%end
|
||||
|
||||
%packages
|
||||
kernel
|
||||
-dracut-config-rescue
|
||||
selinux-policy-targeted
|
||||
grub2
|
||||
# Enable networking by removing the config file that disables it
|
||||
-NetworkManager-config-server
|
||||
|
||||
# Make sure virt guest agents are installed
|
||||
qemu-guest-agent
|
||||
spice-vdagent
|
||||
|
||||
# NOTE lorax-composer will add the blueprint packages below here, including the final %end
|
39
share/composer/tar.ks
Normal file
39
share/composer/tar.ks
Normal file
@ -0,0 +1,39 @@
|
||||
# Lorax Composer tar output kickstart template
|
||||
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
|
||||
# NOTE: The root account is locked by default
|
||||
# Network information
|
||||
network --bootproto=dhcp --onboot=on --activate
|
||||
# NOTE: keyboard and lang can be replaced by blueprint customizations.locale settings
|
||||
# System keyboard
|
||||
keyboard --xlayouts=us --vckeymap=us
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# Installation logging level
|
||||
logging --level=info
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
# System bootloader configuration (tar doesn't need a bootloader)
|
||||
bootloader --location=none
|
||||
|
||||
%post
|
||||
# Remove random-seed
|
||||
rm /var/lib/systemd/random-seed
|
||||
|
||||
# Clear /etc/machine-id
|
||||
rm /etc/machine-id
|
||||
touch /etc/machine-id
|
||||
%end
|
||||
|
||||
# NOTE Do NOT add any other sections after %packages
|
||||
%packages
|
||||
# Packages requires to support this output format go here
|
||||
selinux-policy-targeted
|
||||
# Enable networking by removing the config file that disables it
|
||||
-NetworkManager-config-server
|
||||
|
||||
# NOTE lorax-composer will add the blueprint packages below here, including the final %end
|
75
share/composer/vhd.ks
Normal file
75
share/composer/vhd.ks
Normal file
@ -0,0 +1,75 @@
|
||||
# Lorax Composer VHD (Azure, Hyper-V) output kickstart template
|
||||
|
||||
# Add a separate /boot partition
|
||||
part /boot --size=1024
|
||||
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
|
||||
# NOTE: The root account is locked by default
|
||||
# Network information
|
||||
network --bootproto=dhcp --onboot=on --activate
|
||||
# NOTE: keyboard and lang can be replaced by blueprint customizations.locale settings
|
||||
# System keyboard
|
||||
keyboard --xlayouts=us --vckeymap=us
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# Installation logging level
|
||||
logging --level=info
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr --append="no_timer_check console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300 net.ifnames=0"
|
||||
|
||||
# Basic services
|
||||
services --enabled=sshd,chronyd,waagent
|
||||
|
||||
%post
|
||||
# Remove random-seed
|
||||
rm /var/lib/systemd/random-seed
|
||||
|
||||
# Clear /etc/machine-id
|
||||
rm /etc/machine-id
|
||||
touch /etc/machine-id
|
||||
|
||||
# This file is required by waagent in RHEL, but compatible with NetworkManager
|
||||
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
|
||||
DEVICE=eth0
|
||||
ONBOOT=yes
|
||||
BOOTPROTO=dhcp
|
||||
TYPE=Ethernet
|
||||
USERCTL=yes
|
||||
PEERDNS=yes
|
||||
IPV6INIT=no
|
||||
EOF
|
||||
|
||||
# Add Hyper-V modules into initramfs
|
||||
cat > /etc/dracut.conf.d/10-hyperv.conf << EOF
|
||||
add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
|
||||
EOF
|
||||
|
||||
# Regenerate the intramfs image
|
||||
dracut -f -v --persistent-policy by-uuid
|
||||
%end
|
||||
|
||||
%addon com_redhat_kdump --disable
|
||||
%end
|
||||
|
||||
%packages
|
||||
kernel
|
||||
-dracut-config-rescue
|
||||
# Enable networking by removing the config file that disables it
|
||||
-NetworkManager-config-server
|
||||
|
||||
grub2
|
||||
|
||||
chrony
|
||||
|
||||
WALinuxAgent
|
||||
|
||||
# Requirements of WALinuxAgent
|
||||
net-tools
|
||||
|
||||
# NOTE lorax-composer will add the recipe packages below here, including the final %end
|
46
share/composer/vmdk.ks
Normal file
46
share/composer/vmdk.ks
Normal file
@ -0,0 +1,46 @@
|
||||
# Lorax Composer vmdk kickstart template
|
||||
|
||||
# Firewall configuration
|
||||
firewall --enabled
|
||||
|
||||
# NOTE: The root account is locked by default
|
||||
# Network information
|
||||
network --bootproto=dhcp --onboot=on --activate
|
||||
# NOTE: keyboard and lang can be replaced by blueprint customizations.locale settings
|
||||
# System keyboard
|
||||
keyboard --xlayouts=us --vckeymap=us
|
||||
# System language
|
||||
lang en_US.UTF-8
|
||||
# SELinux configuration
|
||||
selinux --enforcing
|
||||
# Installation logging level
|
||||
logging --level=info
|
||||
# Shutdown after installation
|
||||
shutdown
|
||||
# System bootloader configuration
|
||||
bootloader --location=mbr
|
||||
|
||||
# Basic services
|
||||
services --enabled=sshd,chronyd,vmtoolsd
|
||||
|
||||
%post
|
||||
# Remove random-seed
|
||||
rm /var/lib/systemd/random-seed
|
||||
|
||||
# Clear /etc/machine-id
|
||||
rm /etc/machine-id
|
||||
touch /etc/machine-id
|
||||
%end
|
||||
|
||||
%packages
|
||||
kernel
|
||||
-dracut-config-rescue
|
||||
# Enable networking by removing the config file that disables it
|
||||
-NetworkManager-config-server
|
||||
|
||||
grub2
|
||||
|
||||
chrony
|
||||
open-vm-tools
|
||||
|
||||
# NOTE lorax-composer will add the recipe packages below here, including the final %end
|
5
share/config_files/aarch64/boot.msg
Normal file
5
share/config_files/aarch64/boot.msg
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
splash.lss
|
||||
|
||||
- Press the 01<ENTER>07 key to begin the installation process.
|
||||
|
13
share/config_files/aarch64/grub.conf
Normal file
13
share/config_files/aarch64/grub.conf
Normal file
@ -0,0 +1,13 @@
|
||||
#debug --graphics
|
||||
default=0
|
||||
splashimage=@SPLASHPATH@
|
||||
timeout 5
|
||||
hiddenmenu
|
||||
title Install @PRODUCT@ @VERSION@
|
||||
findiso
|
||||
kernel @KERNELPATH@ @ROOT@ quiet
|
||||
initrd @INITRDPATH@
|
||||
title Test this media & install @PRODUCT@ @VERSION@
|
||||
findiso
|
||||
kernel @KERNELPATH@ @ROOT@ rd.live.check quiet
|
||||
initrd @INITRDPATH@
|
46
share/config_files/aarch64/grub2-efi.cfg
Normal file
46
share/config_files/aarch64/grub2-efi.cfg
Normal file
@ -0,0 +1,46 @@
|
||||
set default="1"
|
||||
|
||||
function load_video {
|
||||
if [ x$feature_all_video_module = xy ]; then
|
||||
insmod all_video
|
||||
else
|
||||
insmod efi_gop
|
||||
insmod efi_uga
|
||||
insmod ieee1275_fb
|
||||
insmod vbe
|
||||
insmod vga
|
||||
insmod video_bochs
|
||||
insmod video_cirrus
|
||||
fi
|
||||
}
|
||||
|
||||
load_video
|
||||
set gfxpayload=keep
|
||||
insmod gzio
|
||||
insmod part_gpt
|
||||
insmod ext2
|
||||
|
||||
set timeout=60
|
||||
### END /etc/grub.d/00_header ###
|
||||
|
||||
search --no-floppy --set=root -l '@ISOLABEL@'
|
||||
|
||||
### BEGIN /etc/grub.d/10_linux ###
|
||||
menuentry 'Install @PRODUCT@ @VERSION@' --class red --class gnu-linux --class gnu --class os {
|
||||
linux @KERNELPATH@ @ROOT@ ro
|
||||
initrd @INITRDPATH@
|
||||
}
|
||||
menuentry 'Test this media & install @PRODUCT@ @VERSION@' --class red --class gnu-linux --class gnu --class os {
|
||||
linux @KERNELPATH@ @ROOT@ rd.live.check
|
||||
initrd @INITRDPATH@
|
||||
}
|
||||
submenu 'Troubleshooting -->' {
|
||||
menuentry 'Install @PRODUCT@ @VERSION@ in basic graphics mode' --class red --class gnu-linux --class gnu --class os {
|
||||
linux @KERNELPATH@ @ROOT@ nomodeset
|
||||
initrd @INITRDPATH@
|
||||
}
|
||||
menuentry 'Rescue a @PRODUCT@ system' --class red --class gnu-linux --class gnu --class os {
|
||||
linux @KERNELPATH@ @ROOT@ rescue
|
||||
initrd @INITRDPATH@
|
||||
}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
[main]
|
||||
no-auto-default=*
|
@ -0,0 +1,2 @@
|
||||
[connection]
|
||||
connection.autoconnect-slaves=1
|
@ -0,0 +1,2 @@
|
||||
[logging]
|
||||
level=DEBUG
|
@ -1 +1 @@
|
||||
SYSFONT="latarcyrheb-sun16"
|
||||
SYSFONT="eurlatgr"
|
||||
|
@ -1,21 +0,0 @@
|
||||
[org.gnome.desktop.wm.keybindings]
|
||||
switch-to-workspace-left=[]
|
||||
switch-to-workspace-right=[]
|
||||
switch-to-workspace-up=[]
|
||||
switch-to-workspace-down=[]
|
||||
switch-group=[]
|
||||
switch-windows=[]
|
||||
switch-panels=[]
|
||||
cycle-group=[]
|
||||
cycle-windows=[]
|
||||
cycle-panels=[]
|
||||
activate-window-menu=[]
|
||||
toggle-maximized=[]
|
||||
maximize=[]
|
||||
unmaximize=[]
|
||||
begin-move=[]
|
||||
begin-resize=[]
|
||||
move-to-workspace-left=[]
|
||||
move-to-workspace-right=[]
|
||||
move-to-workspace-up=[]
|
||||
move-to-workspace-down=[]
|
@ -1,7 +1,24 @@
|
||||
# rsyslog configuration file
|
||||
|
||||
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
|
||||
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
|
||||
|
||||
#### MODULES ####
|
||||
$ModLoad imuxsock.so # provides support for local system logging
|
||||
|
||||
# The imjournal module bellow is now used as a message source instead of imuxsock.
|
||||
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
|
||||
$SystemLogRateLimitInterval 0 # disables message dropping, we need all of them
|
||||
$ModLoad imklog.so # provides kernel logging support
|
||||
$ModLoad imjournal # provides access to the systemd journal
|
||||
#$ModLoad imklog # reads kernel messages (the same are read from journald)
|
||||
#$ModLoad immark # provides --MARK-- message capability
|
||||
|
||||
# Provides UDP syslog reception
|
||||
#$ModLoad imudp
|
||||
#$UDPServerRun 514
|
||||
|
||||
# Provides TCP syslog reception
|
||||
#$ModLoad imtcp
|
||||
#$InputTCPServerRun 514
|
||||
|
||||
$ModLoad imfile
|
||||
$InputFileName /tmp/X.log
|
||||
@ -15,10 +32,29 @@ $InputFileStateFile anaconda-tb-statefile
|
||||
$InputFileFacility local1
|
||||
$InputRunFileMonitor
|
||||
|
||||
|
||||
#### GLOBAL DIRECTIVES ####
|
||||
|
||||
# Where to place auxiliary files
|
||||
#$WorkDirectory /var/lib/rsyslog
|
||||
|
||||
# Use default timestamp format
|
||||
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
|
||||
|
||||
# File syncing capability is disabled by default. This feature is usually not required,
|
||||
# not useful and an extreme performance hit
|
||||
#$ActionFileEnableSync on
|
||||
|
||||
# Include all config files in /etc/rsyslog.d/
|
||||
$IncludeConfig /etc/rsyslog.d/*.conf
|
||||
|
||||
# Turn off message reception via local log socket;
|
||||
# local messages are retrieved through imjournal now.
|
||||
$OmitLocalLogging on
|
||||
|
||||
# File to store the position in the journal
|
||||
$IMJournalStateFile imjournal.state
|
||||
|
||||
#### TEMPLATES ####
|
||||
|
||||
$template anaconda_tty4, "%syslogseverity-text:::uppercase% %programname%:%msg%\n"
|
||||
@ -26,24 +62,32 @@ $template anaconda_syslog, "%timestamp:8:$:date-rfc3164%,%timestamp:1:3:date-sub
|
||||
$template virtio_ForwardFormat, "<%PRI%>%TIMESTAMP:::date-rfc3339% localhost %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%\n"
|
||||
|
||||
#### RULES ####
|
||||
|
||||
# log everything except anaconda-specific records from local1 (those are stored
|
||||
# directly into files via python logging)
|
||||
|
||||
# discard messages from dracut regenerating initrd
|
||||
:programname,isequal,"dracut" ~
|
||||
|
||||
*.*;\
|
||||
authpriv.none;\
|
||||
local1.none /tmp/syslog;anaconda_syslog
|
||||
& /dev/tty4;anaconda_tty4
|
||||
|
||||
|
||||
# ### begin forwarding rule ###
|
||||
# The statement between the begin ... end define a SINGLE forwarding
|
||||
# rule. They belong together, do NOT split them. If you create multiple
|
||||
# forwarding rules, duplicate the whole block!
|
||||
# Remote Logging (we use TCP for reliable delivery)
|
||||
#
|
||||
# An on-disk queue is created for this action. If the remote host is
|
||||
# down, messages are spooled to disk and sent when it is up again.
|
||||
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
|
||||
$ActionQueueMaxDiskSpace 1m # space limit (use as much as possible)
|
||||
$ActionQueueSaveOnShutdown off # do not save messages to disk on shutdown
|
||||
$ActionQueueType LinkedList # run asynchronously
|
||||
$ActionResumeRetryCount -1 # infinite retries if host is down
|
||||
#$ActionQueueType LinkedList # run asynchronously
|
||||
#$ActionResumeRetryCount -1 # infinite retries if host is down
|
||||
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
|
||||
#*.* @@remote-host:514
|
||||
# ### end of the forwarding rule ###
|
||||
|
||||
|
1
share/config_files/common/spice-vdagentd
Normal file
1
share/config_files/common/spice-vdagentd
Normal file
@ -0,0 +1 @@
|
||||
SPICE_VDAGENTD_EXTRA_ARGS=-X
|
2
share/config_files/common/vconsole.conf
Normal file
2
share/config_files/common/vconsole.conf
Normal file
@ -0,0 +1,2 @@
|
||||
KEYMAP=us
|
||||
FONT=eurlatgr
|
@ -1,6 +1,7 @@
|
||||
<chrp-boot> <description>Linux</description>
|
||||
<os-name>Linux</os-name>
|
||||
<boot-script>boot &device;:\ppc\chrp\yaboot</boot-script>
|
||||
<chrp-boot>
|
||||
<description>grub 2.00</description>
|
||||
<os-name>grub 2.00</os-name>
|
||||
<boot-script>boot &device;:\boot\grub\powerpc-ieee1275\core.elf</boot-script>
|
||||
<icon size=64,64 color-space=3,3,2>
|
||||
<bitmap> FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
|
30
share/config_files/ppc/grub.cfg.in
Normal file
30
share/config_files/ppc/grub.cfg.in
Normal file
@ -0,0 +1,30 @@
|
||||
set default=0
|
||||
set timeout=5
|
||||
|
||||
echo -e "\nWelcome to the @PRODUCT@ @VERSION@ installer!\n\n"
|
||||
|
||||
menuentry "Install @PRODUCT@ @VERSION@ (64-bit kernel)" --class fedora --class gnu-linux --class gnu --class os {
|
||||
linux /ppc/ppc64/vmlinuz @ROOT@ ro
|
||||
initrd /ppc/ppc64/initrd.img
|
||||
}
|
||||
|
||||
menuentry "Test this media & install @PRODUCT@ @VERSION@ (64-bit kernel)" --class fedora --class gnu-linux --class gnu --class os {
|
||||
linux /ppc/ppc64/vmlinuz @ROOT@ rd.live.check ro
|
||||
initrd /ppc/ppc64/initrd.img
|
||||
}
|
||||
|
||||
menuentry "Rescue a @PRODUCT@ system (64-bit kernel)" --class fedora --class gnu-linux --class gnu --class os {
|
||||
linux /ppc/ppc64/vmlinuz @ROOT@ rescue ro
|
||||
initrd /ppc/ppc64/initrd.img
|
||||
}
|
||||
|
||||
submenu 'Other options...' {
|
||||
menuentry 'Reboot' {
|
||||
reboot
|
||||
}
|
||||
|
||||
menuentry 'Exit to Open Firmware' {
|
||||
exit
|
||||
}
|
||||
}
|
||||
|
1
share/config_files/s390/cdboot.prm
Normal file
1
share/config_files/s390/cdboot.prm
Normal file
@ -0,0 +1 @@
|
||||
ro
|
@ -1,5 +1,5 @@
|
||||
* minimal lpar ins file
|
||||
images/kernel.img 0x00000000
|
||||
images/initrd.img @INITRD_LOAD_ADDRESS@
|
||||
images/generic.prm 0x00010480
|
||||
images/genericdvd.prm 0x00010480
|
||||
images/initrd.addrsize 0x00010408
|
||||
|
@ -1 +1 @@
|
||||
ro ramdisk_size=40000 cio_ignore=all,!0.0.0009
|
||||
ro ramdisk_size=40000 cio_ignore=all,!condev
|
||||
|
1
share/config_files/s390/genericdvd.prm
Normal file
1
share/config_files/s390/genericdvd.prm
Normal file
@ -0,0 +1 @@
|
||||
ro ramdisk_size=40000 cio_ignore=all,!condev rd.cmdline=ask
|
@ -1,7 +1,7 @@
|
||||
#debug --graphics
|
||||
default=0
|
||||
default=1
|
||||
splashimage=@SPLASHPATH@
|
||||
timeout 5
|
||||
timeout 60
|
||||
hiddenmenu
|
||||
title Install @PRODUCT@ @VERSION@
|
||||
findiso
|
||||
|
43
share/config_files/x86/grub2-efi-lockdown.cfg
Normal file
43
share/config_files/x86/grub2-efi-lockdown.cfg
Normal file
@ -0,0 +1,43 @@
|
||||
set default="1"
|
||||
|
||||
function load_video {
|
||||
insmod efi_gop
|
||||
insmod efi_uga
|
||||
insmod video_bochs
|
||||
insmod video_cirrus
|
||||
insmod all_video
|
||||
}
|
||||
|
||||
load_video
|
||||
set gfxpayload=keep
|
||||
insmod gzio
|
||||
insmod part_gpt
|
||||
insmod ext2
|
||||
|
||||
set timeout=60
|
||||
### END /etc/grub.d/00_header ###
|
||||
|
||||
search --no-floppy --set=root -l '@ISOLABEL@'
|
||||
|
||||
### BEGIN /etc/grub.d/10_linux ###
|
||||
menuentry 'Install @PRODUCT@ @VERSION@' --class fedora --class gnu-linux --class gnu --class os {
|
||||
linuxefi @KERNELPATH@ @ROOT@ quiet
|
||||
initrdefi @INITRDPATH@
|
||||
}
|
||||
menuentry 'Test this media & install @PRODUCT@ @VERSION@' --class fedora --class gnu-linux --class gnu --class os {
|
||||
linuxefi @KERNELPATH@ @ROOT@ rd.live.check quiet
|
||||
initrdefi @INITRDPATH@
|
||||
}
|
||||
submenu 'Troubleshooting -->' {
|
||||
menuentry 'Install @PRODUCT@ @VERSION@ in basic graphics mode' --class fedora --class gnu-linux --class gnu --class os {
|
||||
linuxefi @KERNELPATH@ @ROOT@ xdriver=vesa nomodeset quiet
|
||||
initrdefi @INITRDPATH@
|
||||
}
|
||||
menuentry 'Rescue a @PRODUCT@ system' --class fedora --class gnu-linux --class gnu --class os {
|
||||
linuxefi @KERNELPATH@ @ROOT@ rescue quiet
|
||||
initrdefi @INITRDPATH@
|
||||
}
|
||||
menuentry '@PRODUCT@ @VERSION@ Secure Boot Lockdown' {
|
||||
chainloader /EFI/BOOT/lockdown.efi
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
set default="0"
|
||||
set default="1"
|
||||
|
||||
function load_video {
|
||||
insmod efi_gop
|
||||
@ -14,7 +14,7 @@ insmod gzio
|
||||
insmod part_gpt
|
||||
insmod ext2
|
||||
|
||||
set timeout=5
|
||||
set timeout=60
|
||||
### END /etc/grub.d/00_header ###
|
||||
|
||||
search --no-floppy --set=root -l '@ISOLABEL@'
|
||||
|
@ -1,5 +1,6 @@
|
||||
<%page args="configdir, KERNELDIR, efiarch, isolabel"/>
|
||||
<%page args="configdir, KERNELDIR, efiarch32, efiarch64, isolabel"/>
|
||||
<%
|
||||
from string import lower
|
||||
EFIBOOTDIR="EFI/BOOT"
|
||||
APPLE_EFI_ICON=inroot+"/usr/share/pixmaps/bootloader/fedora.icns"
|
||||
APPLE_EFI_DISKNAME=inroot+"/usr/share/pixmaps/bootloader/fedora-media.vol"
|
||||
@ -7,9 +8,19 @@ APPLE_EFI_DISKNAME=inroot+"/usr/share/pixmaps/bootloader/fedora-media.vol"
|
||||
|
||||
mkdir ${EFIBOOTDIR}
|
||||
mkdir ${EFIBOOTDIR}/fonts/
|
||||
install boot/efi/EFI/*/shim.efi ${EFIBOOTDIR}/BOOT${efiarch}.efi
|
||||
install boot/efi/EFI/*/MokManager.efi ${EFIBOOTDIR}/
|
||||
install boot/efi/EFI/*/gcdx64.efi ${EFIBOOTDIR}/grubx64.efi
|
||||
%if exists("usr/share/shim/lockdown.efi"):
|
||||
install usr/share/shim/lockdown.efi ${EFIBOOTDIR}/
|
||||
%endif
|
||||
%if efiarch64:
|
||||
install boot/efi/EFI/*/shim${efiarch64|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI
|
||||
install boot/efi/EFI/*/mm${efiarch64|lower}.efi ${EFIBOOTDIR}/
|
||||
install boot/efi/EFI/*/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/grub${efiarch64|lower}.efi
|
||||
%endif
|
||||
%if efiarch32:
|
||||
install boot/efi/EFI/*/shim${efiarch32|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch32}.EFI
|
||||
install boot/efi/EFI/*/mm${efiarch32|lower}.efi ${EFIBOOTDIR}/
|
||||
install boot/efi/EFI/*/gcd${efiarch32|lower}.efi ${EFIBOOTDIR}/grub${efiarch32|lower}.efi
|
||||
%endif
|
||||
install boot/efi/EFI/*/fonts/unicode.pf2 ${EFIBOOTDIR}/fonts/
|
||||
|
||||
## actually make the EFI images
|
||||
@ -31,7 +42,11 @@ ${make_efiboot("images/efiboot.img")}
|
||||
copy ${KERNELDIR}/vmlinuz ${EFIBOOTDIR}
|
||||
copy ${KERNELDIR}/initrd.img ${EFIBOOTDIR}
|
||||
%endif
|
||||
%if exists("usr/share/shim/lockdown.efi"):
|
||||
install ${configdir}/grub2-efi-lockdown.cfg ${eficonf}
|
||||
%else:
|
||||
install ${configdir}/grub2-efi.cfg ${eficonf}
|
||||
%endif
|
||||
replace @PRODUCT@ '${product.name}' ${eficonf}
|
||||
replace @VERSION@ ${product.version} ${eficonf}
|
||||
replace @KERNELNAME@ vmlinuz ${eficonf}
|
||||
@ -43,9 +58,6 @@ ${make_efiboot("images/efiboot.img")}
|
||||
%else:
|
||||
replace @ROOT@ 'inst.stage2=hd:LABEL=${isolabel|udev}' ${eficonf}
|
||||
%endif
|
||||
%if efiarch == 'IA32':
|
||||
copy ${eficonf} ${EFIBOOTDIR}/BOOT.conf
|
||||
%endif
|
||||
runcmd mkefiboot ${args} ${outroot}/${EFIBOOTDIR} ${outroot}/${img}
|
||||
%if include_kernel:
|
||||
remove ${EFIBOOTDIR}/vmlinuz
|
||||
|
85
share/live/aarch64.tmpl
Normal file
85
share/live/aarch64.tmpl
Normal file
@ -0,0 +1,85 @@
|
||||
<%page args="kernels, runtime_img, basearch, inroot, outroot, product, isolabel, extra_boot_args"/>
|
||||
<%
|
||||
configdir="tmp/config_files/aarch64"
|
||||
PXEBOOTDIR="images/pxeboot"
|
||||
KERNELDIR=PXEBOOTDIR
|
||||
LIVEDIR="LiveOS"
|
||||
LORAXDIR="usr/share/lorax/"
|
||||
|
||||
## Don't allow spaces or escape characters in the iso label
|
||||
def valid_label(ch):
|
||||
return ch.isalnum() or ch == '_'
|
||||
|
||||
isolabel = ''.join(ch if valid_label(ch) else '-' for ch in isolabel)
|
||||
|
||||
from os.path import basename
|
||||
%>
|
||||
|
||||
## Test ${runtime_img} to see if udf is needed
|
||||
<%
|
||||
import os
|
||||
from pylorax.sysutils import joinpaths
|
||||
if os.stat(joinpaths(inroot, runtime_img)).st_size >= 4*1024**3:
|
||||
udfargs = "-allow-limited-size"
|
||||
else:
|
||||
udfargs = ""
|
||||
%>
|
||||
|
||||
mkdir ${LIVEDIR}
|
||||
install ${runtime_img} ${LIVEDIR}/squashfs.img
|
||||
treeinfo stage2 mainimage ${LIVEDIR}/squashfs.img
|
||||
|
||||
## install kernels
|
||||
mkdir ${KERNELDIR}
|
||||
%for kernel in kernels:
|
||||
## normal aarch64
|
||||
installkernel images-${basearch} ${kernel.path} ${KERNELDIR}/vmlinuz
|
||||
installinitrd images-${basearch} ${kernel.initrd.path} ${KERNELDIR}/initrd.img
|
||||
%endfor
|
||||
|
||||
#FIXME: this will need adjusted when we have a real bootloader.
|
||||
## WHeeeeeeee, EFI.
|
||||
## We could remove the basearch restriction someday..
|
||||
<% efiargs=""; efigraft="" %>
|
||||
%if exists("boot/efi/EFI/*/gcdaa64.efi"):
|
||||
<%
|
||||
efiarch = 'AA64'
|
||||
efigraft="EFI/BOOT={0}/EFI/BOOT".format(outroot)
|
||||
images = ["images/efiboot.img"]
|
||||
%>
|
||||
%for img in images:
|
||||
<%
|
||||
efiargs += " -eltorito-alt-boot -e {0} -no-emul-boot".format(img)
|
||||
efigraft += " {0}={1}/{0}".format(img,outroot)
|
||||
%>
|
||||
treeinfo images-${basearch} ${img|basename} ${img}
|
||||
%endfor
|
||||
<%include file="efi.tmpl" args="configdir=configdir, KERNELDIR=KERNELDIR, efiarch32=None, efiarch64=efiarch, isolabel=isolabel, extra_boot_args=extra_boot_args"/>
|
||||
%endif
|
||||
|
||||
# Create optional product.img and updates.img
|
||||
<% filegraft=""; images=["product", "updates"] %>
|
||||
%for img in images:
|
||||
%if exists("%s/%s/" % (LORAXDIR, img)):
|
||||
installimg ${LORAXDIR}/${img}/ images/${img}.img
|
||||
treeinfo images-${basearch} ${img}.img images/${img}.img
|
||||
<% filegraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %>
|
||||
%endif
|
||||
%endfor
|
||||
|
||||
# Add the license files
|
||||
%for f in glob("/usr/share/licenses/*-release/*"):
|
||||
install ${f} ${f|basename}
|
||||
<% filegraft += " {0}={1}/{0}".format(basename(f), outroot) %>
|
||||
%endfor
|
||||
|
||||
%if exists("boot/efi/EFI/*/gcdaa64.efi"):
|
||||
## make boot.iso
|
||||
runcmd mkisofs -o ${outroot}/images/boot.iso \
|
||||
${efiargs} -R -J -V '${isolabel}' -T ${udfargs} \
|
||||
-graft-points \
|
||||
${KERNELDIR}=${outroot}/${KERNELDIR} \
|
||||
${LIVEDIR}=${outroot}/${LIVEDIR} \
|
||||
${efigraft} ${filegraft}
|
||||
treeinfo images-${basearch} boot.iso images/boot.iso
|
||||
%endif
|
42
share/live/config_files/aarch64/grub2-efi.cfg
Normal file
42
share/live/config_files/aarch64/grub2-efi.cfg
Normal file
@ -0,0 +1,42 @@
|
||||
set default="1"
|
||||
|
||||
function load_video {
|
||||
if [ x$feature_all_video_module = xy ]; then
|
||||
insmod all_video
|
||||
else
|
||||
insmod efi_gop
|
||||
insmod efi_uga
|
||||
insmod ieee1275_fb
|
||||
insmod vbe
|
||||
insmod vga
|
||||
insmod video_bochs
|
||||
insmod video_cirrus
|
||||
fi
|
||||
}
|
||||
|
||||
load_video
|
||||
set gfxpayload=keep
|
||||
insmod gzio
|
||||
insmod part_gpt
|
||||
insmod ext2
|
||||
|
||||
set timeout=60
|
||||
### END /etc/grub.d/00_header ###
|
||||
|
||||
search --no-floppy --set=root -l '@ISOLABEL@'
|
||||
|
||||
### BEGIN /etc/grub.d/10_linux ###
|
||||
menuentry 'Start @PRODUCT@ @VERSION@' --class red --class gnu-linux --class gnu --class os {
|
||||
linux @KERNELPATH@ @ROOT@ @EXTRA@ rd.live.image quiet
|
||||
initrd @INITRDPATH@
|
||||
}
|
||||
menuentry 'Test this media & start @PRODUCT@ @VERSION@' --class red --class gnu-linux --class gnu --class os {
|
||||
linux @KERNELPATH@ @ROOT@ @EXTRA@ rd.live.image rd.live.check quiet
|
||||
initrd @INITRDPATH@
|
||||
}
|
||||
submenu 'Troubleshooting -->' {
|
||||
menuentry 'Install @PRODUCT@ @VERSION@ in basic graphics mode' --class red --class gnu-linux --class gnu --class os {
|
||||
linux @KERNELPATH@ @ROOT@ @EXTRA@ rd.live.image nomodeset quiet
|
||||
initrd @INITRDPATH@
|
||||
}
|
||||
}
|
170
share/live/config_files/ppc/bootinfo.txt
Normal file
170
share/live/config_files/ppc/bootinfo.txt
Normal file
@ -0,0 +1,170 @@
|
||||
<chrp-boot>
|
||||
<description>grub 2.00</description>
|
||||
<os-name>grub 2.00</os-name>
|
||||
<boot-script>boot &device;:\boot\grub\powerpc-ieee1275\core.elf</boot-script>
|
||||
<icon size=64,64 color-space=3,3,2>
|
||||
<bitmap> FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||
FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
00 00 00 00 00 00 </bitmap> </icon> </chrp-boot>
|
34
share/live/config_files/ppc/grub.cfg.in
Normal file
34
share/live/config_files/ppc/grub.cfg.in
Normal file
@ -0,0 +1,34 @@
|
||||
set default=0
|
||||
set timeout=5
|
||||
|
||||
echo -e "\nWelcome to the @PRODUCT@ @VERSION@ installer!\n\n"
|
||||
|
||||
for BITS in 32 64; do
|
||||
if [ -d "/ppc/ppc${BITS}" ]; then
|
||||
menuentry "Start @PRODUCT@ @VERSION@ (${BITS}-bit kernel)" $BITS --class fedora --class gnu-linux --class gnu --class os {
|
||||
linux /ppc/ppc${2}/vmlinuz @ROOT@ @EXTRA@ ro rd.live.image quiet
|
||||
initrd /ppc/ppc${2}/initrd.img
|
||||
}
|
||||
|
||||
menuentry "Test this media & start @PRODUCT@ @VERSION@ (${BITS}-bit kernel)" $BITS --class fedora --class gnu-linux --class gnu --class os {
|
||||
linux /ppc/ppc${2}/vmlinuz @ROOT@ @EXTRA@ rd.live.image rd.live.check ro quiet
|
||||
initrd /ppc/ppc${2}/initrd.img
|
||||
}
|
||||
|
||||
menuentry "Rescue a @PRODUCT@ system (${BITS}-bit kernel)" $BITS --class fedora --class gnu-linux --class gnu --class os {
|
||||
linux /ppc/ppc${2}/vmlinuz @ROOT@ rd.live.image rescue ro
|
||||
initrd /ppc/ppc${2}/initrd.img
|
||||
}
|
||||
fi
|
||||
done
|
||||
|
||||
submenu 'Other options...' {
|
||||
menuentry 'Reboot' {
|
||||
reboot
|
||||
}
|
||||
|
||||
menuentry 'Exit to Open Firmware' {
|
||||
exit
|
||||
}
|
||||
}
|
||||
|
81
share/live/config_files/ppc/magic
Normal file
81
share/live/config_files/ppc/magic
Normal file
@ -0,0 +1,81 @@
|
||||
#
|
||||
# Example magic file for mkhybrid
|
||||
#
|
||||
# The "message" for the offset MUST be 4 characters for the CREATOR
|
||||
# and 4 characters for the TYPE - white space is optional between them.
|
||||
# Any other characters on this line are ignored. Continuation lines (starting
|
||||
# with '>') are also ignored i.e. only the initial offset lines are used.
|
||||
#
|
||||
# The continuation lines are given here, but they do not need to exist.
|
||||
|
||||
#
|
||||
# James Pearson 20/5/98
|
||||
|
||||
# off type test message
|
||||
|
||||
# GIF
|
||||
0 string GIF8 8BIM GIFf
|
||||
>4 string 7a \b, version 8%s,
|
||||
>4 string 9a \b, version 8%s,
|
||||
>6 leshort >0 %hd x
|
||||
>8 leshort >0 %hd,
|
||||
#>10 byte &0x80 color mapped,
|
||||
#>10 byte&0x07 =0x00 2 colors
|
||||
#>10 byte&0x07 =0x01 4 colors
|
||||
#>10 byte&0x07 =0x02 8 colors
|
||||
#>10 byte&0x07 =0x03 16 colors
|
||||
#>10 byte&0x07 =0x04 32 colors
|
||||
#>10 byte&0x07 =0x05 64 colors
|
||||
#>10 byte&0x07 =0x06 128 colors
|
||||
#>10 byte&0x07 =0x07 256 colors
|
||||
|
||||
# JPEG images
|
||||
#
|
||||
0 ubeshort 0xffd8 8BIM JPEG image data
|
||||
|
||||
# StuffIt
|
||||
#
|
||||
0 string SIT! SIT!SIT!
|
||||
|
||||
# standard unix compress
|
||||
0 string \037\235 LZIV ZIVU
|
||||
>2 byte&0x80 >0 block compressed
|
||||
>2 byte&0x1f x %d bits
|
||||
|
||||
# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver)
|
||||
0 string \037\213 GNUz ZIVU gzip compressed data
|
||||
>2 byte <8 \b, reserved method,
|
||||
>2 byte 8 \b, deflated,
|
||||
>3 byte &0x01 ASCII,
|
||||
>3 byte &0x02 continuation,
|
||||
>3 byte &0x04 extra field,
|
||||
>3 byte &0x08 original filename,
|
||||
>3 byte &0x10 comment,
|
||||
>3 byte &0x20 encrypted,
|
||||
>4 ledate x last modified: %s,
|
||||
>8 byte 2 max compression,
|
||||
>8 byte 4 max speed,
|
||||
>9 byte =0x00 os: MS-DOS
|
||||
>9 byte =0x01 os: Amiga
|
||||
>9 byte =0x02 os: VMS
|
||||
>9 byte =0x03 os: Unix
|
||||
>9 byte =0x05 os: Atari
|
||||
>9 byte =0x06 os: OS/2
|
||||
>9 byte =0x07 os: MacOS
|
||||
>9 byte =0x0A os: Tops/20
|
||||
>9 byte =0x0B os: Win/32
|
||||
|
||||
# Postscript
|
||||
0 string %! ASPSTEXT
|
||||
>2 string PS-Adobe- conforming
|
||||
>>11 string >\0 at level %.3s
|
||||
>>>15 string EPS - type %s
|
||||
>>>15 string Query - type %s
|
||||
>>>15 string ExitServer - type %s
|
||||
# Some PCs have the annoying habit of adding a ^D as a document separator
|
||||
0 string \004%! ASPS TEXT PostScript document text
|
||||
>3 string PS-Adobe- conforming
|
||||
>>12 string >\0 at level %.3s
|
||||
>>>16 string EPS - type %s
|
||||
>>>16 string Query - type %s
|
||||
>>>16 string ExitServer - type %s
|
27
share/live/config_files/ppc/mapping
Normal file
27
share/live/config_files/ppc/mapping
Normal file
@ -0,0 +1,27 @@
|
||||
# Example filename mapping file
|
||||
#
|
||||
# yaboot Raw 'UNIX' 'boot' "Bootstrap"
|
||||
# vmlinux Raw 'UNIX' 'boot' "Bootstrap"
|
||||
#
|
||||
# EXTN XLate CREATOR TYPE Comment
|
||||
COPYING Ascii 'ttxt' 'ttro' "Text File"
|
||||
CREDITS Ascii 'ttxt' 'ttro' "Text File"
|
||||
README Ascii 'ttxt' 'ttro' "Text File"
|
||||
RPM-GPG-KEY Ascii 'ttxt' 'ttro' "Text File"
|
||||
RELEASE_NOTES Ascii 'ttxt' 'ttro' "Text File"
|
||||
.b Raw 'chrp' 'tbxi' "Macintosh Toolbox ROM file"
|
||||
.gif Raw '8BIM' 'GIFf' "Gif File"
|
||||
.jpg Raw '8BIM' 'JPEG' "Jpeg File"
|
||||
.tif Raw '8BIM' 'TIFF' "Photoshop TIFF image"
|
||||
.hqx Ascii 'BnHq' 'TEXT' "BinHex file"
|
||||
.doc Raw 'MSWD' 'WDBN' "Word file"
|
||||
.mov Raw 'TVOD' 'MooV' "QuickTime Movie"
|
||||
.html Ascii 'MOSS' 'TEXT' "HTML File"
|
||||
.htm Ascii 'MOSS' 'TEXT' "HTML File"
|
||||
.conf Ascii 'ttxt' 'TEXT' "config file"
|
||||
.txt Ascii 'ttxt' 'TEXT' "Text File"
|
||||
.tbxi Raw 'chrp' 'tbxi' "Macintosh Toolbox ROM file"
|
||||
.sea Raw 'aust' 'APPL' "Self Expanding Archive"
|
||||
.sit Raw 'SIT!' 'SITD' "Stuffit Expander file"
|
||||
* Raw '????' '????' "Unknown"
|
||||
|
74
share/live/config_files/ppc/ofboot.b
Normal file
74
share/live/config_files/ppc/ofboot.b
Normal file
@ -0,0 +1,74 @@
|
||||
<CHRP-BOOT>
|
||||
<COMPATIBLE>
|
||||
MacRISC MacRISC3 MacRISC4
|
||||
</COMPATIBLE>
|
||||
|
||||
<DESCRIPTION>
|
||||
Boot Chooser
|
||||
</DESCRIPTION>
|
||||
|
||||
<BOOT-SCRIPT>
|
||||
" screen" output
|
||||
load-base release-load-area
|
||||
" /cpus/@0" find-package if
|
||||
" 64-bit" rot get-package-property 0= if
|
||||
2drop
|
||||
" boot cd:,\ppc\mac\yaboot conf=cd:,\ppc\ppc64\yaboot.conf" eval
|
||||
else
|
||||
" boot cd:,\ppc\mac\yaboot conf=cd:,\ppc\ppc32\yaboot.conf" eval
|
||||
then
|
||||
then
|
||||
</BOOT-SCRIPT>
|
||||
|
||||
<OS-BADGE-ICONS>
|
||||
1010
|
||||
000000000000F8FEACF6000000000000
|
||||
0000000000F5FFFFFEFEF50000000000
|
||||
00000000002BFAFEFAFCF70000000000
|
||||
0000000000F65D5857812B0000000000
|
||||
0000000000F5350B2F88560000000000
|
||||
0000000000F6335708F8FE0000000000
|
||||
00000000005600F600F5FD8100000000
|
||||
00000000F9F8000000F5FAFFF8000000
|
||||
000000008100F5F50000F6FEFE000000
|
||||
000000F8F700F500F50000FCFFF70000
|
||||
00000088F70000F50000F5FCFF2B0000
|
||||
0000002F582A00F5000008ADE02C0000
|
||||
00090B0A35A62B0000002D3B350A0000
|
||||
000A0A0B0B3BF60000505E0B0A0B0A00
|
||||
002E350B0B2F87FAFCF45F0B2E090000
|
||||
00000007335FF82BF72B575907000000
|
||||
000000000000ACFFFF81000000000000
|
||||
000000000081FFFFFFFF810000000000
|
||||
0000000000FBFFFFFFFFAC0000000000
|
||||
000000000081DFDFDFFFFB0000000000
|
||||
000000000081DD5F83FFFD0000000000
|
||||
000000000081DDDF5EACFF0000000000
|
||||
0000000000FDF981F981FFFF00000000
|
||||
00000000FFACF9F9F981FFFFAC000000
|
||||
00000000FFF98181F9F981FFFF000000
|
||||
000000ACACF981F981F9F9FFFFAC0000
|
||||
000000FFACF9F981F9F981FFFFFB0000
|
||||
00000083DFFBF981F9F95EFFFFFC0000
|
||||
005F5F5FDDFFFBF9F9F983DDDD5F0000
|
||||
005F5F5F5FDD81F9F9E7DF5F5F5F5F00
|
||||
0083DD5F5F83FFFFFFFFDF5F835F0000
|
||||
000000FBDDDFACFBACFBDFDFFB000000
|
||||
000000000000FFFFFFFF000000000000
|
||||
0000000000FFFFFFFFFFFF0000000000
|
||||
0000000000FFFFFFFFFFFF0000000000
|
||||
0000000000FFFFFFFFFFFF0000000000
|
||||
0000000000FFFFFFFFFFFF0000000000
|
||||
0000000000FFFFFFFFFFFF0000000000
|
||||
0000000000FFFFFFFFFFFFFF00000000
|
||||
00000000FFFFFFFFFFFFFFFFFF000000
|
||||
00000000FFFFFFFFFFFFFFFFFF000000
|
||||
000000FFFFFFFFFFFFFFFFFFFFFF0000
|
||||
000000FFFFFFFFFFFFFFFFFFFFFF0000
|
||||
000000FFFFFFFFFFFFFFFFFFFFFF0000
|
||||
00FFFFFFFFFFFFFFFFFFFFFFFFFF0000
|
||||
00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00
|
||||
00FFFFFFFFFFFFFFFFFFFFFFFFFF0000
|
||||
000000FFFFFFFFFFFFFFFFFFFF000000
|
||||
</OS-BADGE-ICONS>
|
||||
</CHRP-BOOT>
|
16
share/live/config_files/ppc/yaboot.conf.3264
Normal file
16
share/live/config_files/ppc/yaboot.conf.3264
Normal file
@ -0,0 +1,16 @@
|
||||
init-message = "\nWelcome to the @PRODUCT@ @VERSION@ installer!\nUse 'linux32' for 32-bit kernel.\n\n"
|
||||
timeout=6000
|
||||
default=linux
|
||||
|
||||
image=/ppc/ppc64/vmlinuz
|
||||
label=linux64
|
||||
alias=linux
|
||||
initrd=/ppc/ppc64/ramdisk.image.gz
|
||||
read-only
|
||||
append="@ROOT@"
|
||||
|
||||
image=/ppc/ppc32/vmlinuz
|
||||
label=linux32
|
||||
initrd=/ppc/ppc32/ramdisk.image.gz
|
||||
read-only
|
||||
append="@ROOT@"
|
9
share/live/config_files/ppc/yaboot.conf.in
Normal file
9
share/live/config_files/ppc/yaboot.conf.in
Normal file
@ -0,0 +1,9 @@
|
||||
init-message = "\nWelcome to the @BITS@-bit @PRODUCT@ @VERSION@ installer!\nHit <TAB> for boot options.\n\n"
|
||||
timeout=6000
|
||||
default=linux
|
||||
|
||||
image=/ppc/ppc@BITS@/vmlinuz
|
||||
label=linux
|
||||
initrd=/ppc/ppc@BITS@/initrd.img
|
||||
read-only
|
||||
append="@ROOT@ rd.live.image quiet"
|
5
share/live/config_files/s390/generic.ins
Normal file
5
share/live/config_files/s390/generic.ins
Normal file
@ -0,0 +1,5 @@
|
||||
* minimal lpar ins file
|
||||
images/kernel.img 0x00000000
|
||||
images/initrd.img @INITRD_LOAD_ADDRESS@
|
||||
images/genericdvd.prm 0x00010480
|
||||
images/initrd.addrsize 0x00010408
|
1
share/live/config_files/s390/generic.prm
Normal file
1
share/live/config_files/s390/generic.prm
Normal file
@ -0,0 +1 @@
|
||||
ro ramdisk_size=40000 cio_ignore=all,!condev @EXTRA@
|
1
share/live/config_files/s390/genericdvd.prm
Normal file
1
share/live/config_files/s390/genericdvd.prm
Normal file
@ -0,0 +1 @@
|
||||
ro ramdisk_size=40000 cio_ignore=all,!condev rd.cmdline=ask
|
9
share/live/config_files/s390/redhat.exec
Normal file
9
share/live/config_files/s390/redhat.exec
Normal file
@ -0,0 +1,9 @@
|
||||
/* */
|
||||
'CL RDR'
|
||||
'PURGE RDR ALL'
|
||||
'SPOOL PUNCH * RDR'
|
||||
'PUNCH KERNEL IMG A (NOH'
|
||||
'PUNCH GENERIC PRM A (NOH'
|
||||
'PUNCH INITRD IMG A (NOH'
|
||||
'CH RDR ALL KEEP NOHOLD'
|
||||
'I 00C'
|
@ -1,13 +1,13 @@
|
||||
#debug --graphics
|
||||
default=0
|
||||
default=1
|
||||
splashimage=@SPLASHPATH@
|
||||
timeout 5
|
||||
timeout 60
|
||||
hiddenmenu
|
||||
title Start @PRODUCT@ @VERSION@
|
||||
findiso
|
||||
kernel @KERNELPATH@ @ROOT@ rd.live.image rd.luks=0 rd.md=0 rd.dm=0 quiet
|
||||
kernel @KERNELPATH@ @ROOT@ @EXTRA@ rd.live.image quiet
|
||||
initrd @INITRDPATH@
|
||||
title Test this media & start @PRODUCT@ @VERSION@
|
||||
findiso
|
||||
kernel @KERNELPATH@ @ROOT@ rd.live.image rd.luks=0 rd.md=0 rd.dm=0 rd.live.check quiet
|
||||
kernel @KERNELPATH@ @ROOT@ @EXTRA@ rd.live.image rd.live.check quiet
|
||||
initrd @INITRDPATH@
|
||||
|
43
share/live/config_files/x86/grub2-efi-lockdown.cfg
Normal file
43
share/live/config_files/x86/grub2-efi-lockdown.cfg
Normal file
@ -0,0 +1,43 @@
|
||||
set default="1"
|
||||
|
||||
function load_video {
|
||||
insmod efi_gop
|
||||
insmod efi_uga
|
||||
insmod video_bochs
|
||||
insmod video_cirrus
|
||||
insmod all_video
|
||||
}
|
||||
|
||||
load_video
|
||||
set gfxpayload=keep
|
||||
insmod gzio
|
||||
insmod part_gpt
|
||||
insmod ext2
|
||||
|
||||
set timeout=60
|
||||
### END /etc/grub.d/00_header ###
|
||||
|
||||
search --no-floppy --set=root -l '@ISOLABEL@'
|
||||
|
||||
### BEGIN /etc/grub.d/10_linux ###
|
||||
menuentry 'Start @PRODUCT@ @VERSION@' --class fedora --class gnu-linux --class gnu --class os {
|
||||
linuxefi @KERNELPATH@ @ROOT@ rd.live.image quiet
|
||||
initrdefi @INITRDPATH@
|
||||
}
|
||||
menuentry 'Test this media & start @PRODUCT@ @VERSION@' --class fedora --class gnu-linux --class gnu --class os {
|
||||
linuxefi @KERNELPATH@ @ROOT@ rd.live.image rd.live.check quiet
|
||||
initrdefi @INITRDPATH@
|
||||
}
|
||||
submenu 'Troubleshooting -->' {
|
||||
menuentry 'Start @PRODUCT@ @VERSION@ in basic graphics mode' --class fedora --class gnu-linux --class gnu --class os {
|
||||
linuxefi @KERNELPATH@ @ROOT@ rd.live.image xdriver=vesa nomodeset quiet
|
||||
initrdefi @INITRDPATH@
|
||||
}
|
||||
menuentry 'Rescue a @PRODUCT@ system' --class fedora --class gnu-linux --class gnu --class os {
|
||||
linuxefi @KERNELPATH@ @ROOT@ rd.live.image rescue quiet
|
||||
initrdefi @INITRDPATH@
|
||||
}
|
||||
menuentry '@PRODUCT@ @VERSION@ Secure Boot Lockdown' {
|
||||
chainloader /EFI/BOOT/lockdown.efi
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
set default="0"
|
||||
set default="1"
|
||||
|
||||
function load_video {
|
||||
insmod efi_gop
|
||||
@ -14,27 +14,27 @@ insmod gzio
|
||||
insmod part_gpt
|
||||
insmod ext2
|
||||
|
||||
set timeout=5
|
||||
set timeout=60
|
||||
### END /etc/grub.d/00_header ###
|
||||
|
||||
search --no-floppy --set=root -l '@ISOLABEL@'
|
||||
|
||||
### BEGIN /etc/grub.d/10_linux ###
|
||||
menuentry 'Start @PRODUCT@ @VERSION@' --class fedora --class gnu-linux --class gnu --class os {
|
||||
linuxefi @KERNELPATH@ @ROOT@ rd.live.image rd.luks=0 rd.md=0 rd.dm=0 quiet
|
||||
linuxefi @KERNELPATH@ @ROOT@ @EXTRA@ rd.live.image quiet
|
||||
initrdefi @INITRDPATH@
|
||||
}
|
||||
menuentry 'Test this media & start @PRODUCT@ @VERSION@' --class fedora --class gnu-linux --class gnu --class os {
|
||||
linuxefi @KERNELPATH@ @ROOT@ rd.live.image rd.luks=0 rd.md=0 rd.dm=0 rd.live.check quiet
|
||||
linuxefi @KERNELPATH@ @ROOT@ @EXTRA@ rd.live.image rd.live.check quiet
|
||||
initrdefi @INITRDPATH@
|
||||
}
|
||||
submenu 'Troubleshooting -->' {
|
||||
menuentry 'Start @PRODUCT@ @VERSION@ in basic graphics mode' --class fedora --class gnu-linux --class gnu --class os {
|
||||
linuxefi @KERNELPATH@ @ROOT@ rd.live.image rd.luks=0 rd.md=0 rd.dm=0 xdriver=vesa nomodeset quiet
|
||||
linuxefi @KERNELPATH@ @ROOT@ @EXTRA@ rd.live.image xdriver=vesa nomodeset quiet
|
||||
initrdefi @INITRDPATH@
|
||||
}
|
||||
menuentry 'Rescue a @PRODUCT@ system' --class fedora --class gnu-linux --class gnu --class os {
|
||||
linuxefi @KERNELPATH@ @ROOT@ rd.live.image rd.luks=0 rd.md=0 rd.dm=0 rescue quiet
|
||||
linuxefi @KERNELPATH@ @ROOT@ @EXTRA@ rd.live.image rescue quiet
|
||||
initrdefi @INITRDPATH@
|
||||
}
|
||||
}
|
||||
|
@ -61,13 +61,13 @@ menu separator # insert an empty line
|
||||
label linux
|
||||
menu label ^Start @PRODUCT@ @VERSION@
|
||||
kernel vmlinuz
|
||||
append initrd=initrd.img @ROOT@ rd.live.image rd.luks=0 rd.md=0 rd.dm=0 quiet
|
||||
append initrd=initrd.img @ROOT@ @EXTRA@ rd.live.image quiet
|
||||
|
||||
label check
|
||||
menu label Test this ^media & start @PRODUCT@ @VERSION@
|
||||
menu default
|
||||
kernel vmlinuz
|
||||
append initrd=initrd.img @ROOT@ rd.live.image rd.luks=0 rd.md=0 rd.dm=0 rd.live.check quiet
|
||||
append initrd=initrd.img @ROOT@ @EXTRA@ rd.live.image rd.live.check quiet
|
||||
|
||||
menu separator # insert an empty line
|
||||
|
||||
@ -83,7 +83,7 @@ label vesa
|
||||
@PRODUCT@ @VERSION@.
|
||||
endtext
|
||||
kernel vmlinuz
|
||||
append initrd=initrd.img @ROOT@ rd.live.image rd.luks=0 rd.md=0 rd.dm=0 xdriver=vesa nomodeset quiet
|
||||
append initrd=initrd.img @ROOT@ @EXTRA@ rd.live.image xdriver=vesa nomodeset quiet
|
||||
|
||||
label rescue
|
||||
menu indent count 5
|
||||
@ -93,7 +93,7 @@ label rescue
|
||||
and edit config files to try to get it booting again.
|
||||
endtext
|
||||
kernel vmlinuz
|
||||
append initrd=initrd.img @ROOT@ rd.live.image rd.luks=0 rd.md=0 rd.dm=0 rescue quiet
|
||||
append initrd=initrd.img @ROOT@ @EXTRA@ rd.live.image rescue quiet
|
||||
|
||||
label memtest
|
||||
menu label Run a ^memory test
|
||||
|
@ -1,5 +1,6 @@
|
||||
<%page args="configdir, KERNELDIR, efiarch, isolabel"/>
|
||||
<%page args="configdir, KERNELDIR, efiarch32, efiarch64, isolabel, extra_boot_args"/>
|
||||
<%
|
||||
from string import lower
|
||||
EFIBOOTDIR="EFI/BOOT"
|
||||
APPLE_EFI_ICON=inroot+"/usr/share/pixmaps/bootloader/fedora.icns"
|
||||
APPLE_EFI_DISKNAME=inroot+"/usr/share/pixmaps/bootloader/fedora-media.vol"
|
||||
@ -7,8 +8,19 @@ APPLE_EFI_DISKNAME=inroot+"/usr/share/pixmaps/bootloader/fedora-media.vol"
|
||||
|
||||
mkdir ${EFIBOOTDIR}
|
||||
mkdir ${EFIBOOTDIR}/fonts/
|
||||
install boot/efi/EFI/*/shim.efi ${EFIBOOTDIR}/BOOT${efiarch}.efi
|
||||
install boot/efi/EFI/*/gcdx64.efi ${EFIBOOTDIR}/grubx64.efi
|
||||
%if exists("usr/share/shim/lockdown.efi"):
|
||||
install usr/share/shim/lockdown.efi ${EFIBOOTDIR}/
|
||||
%endif
|
||||
%if efiarch64:
|
||||
install boot/efi/EFI/*/shim${efiarch64|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI
|
||||
install boot/efi/EFI/*/mm${efiarch64|lower}.efi ${EFIBOOTDIR}/
|
||||
install boot/efi/EFI/*/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/grub${efiarch64|lower}.efi
|
||||
%endif
|
||||
%if efiarch32:
|
||||
install boot/efi/EFI/*/shim${efiarch32|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch32}.EFI
|
||||
install boot/efi/EFI/*/mm${efiarch32|lower}.efi ${EFIBOOTDIR}/
|
||||
install boot/efi/EFI/*/gcd${efiarch32|lower}.efi ${EFIBOOTDIR}/grub${efiarch32|lower}.efi
|
||||
%endif
|
||||
install boot/efi/EFI/*/fonts/unicode.pf2 ${EFIBOOTDIR}/fonts/
|
||||
|
||||
## actually make the EFI images
|
||||
@ -30,21 +42,23 @@ ${make_efiboot("images/efiboot.img")}
|
||||
copy ${KERNELDIR}/vmlinuz ${EFIBOOTDIR}
|
||||
copy ${KERNELDIR}/initrd.img ${EFIBOOTDIR}
|
||||
%endif
|
||||
%if exists("usr/share/shim/lockdown.efi"):
|
||||
install ${configdir}/grub2-efi-lockdown.cfg ${eficonf}
|
||||
%else:
|
||||
install ${configdir}/grub2-efi.cfg ${eficonf}
|
||||
%endif
|
||||
replace @PRODUCT@ '${product.name}' ${eficonf}
|
||||
replace @VERSION@ ${product.version} ${eficonf}
|
||||
replace @KERNELNAME@ vmlinuz ${eficonf}
|
||||
replace @KERNELPATH@ /${kdir}/vmlinuz ${eficonf}
|
||||
replace @INITRDPATH@ /${kdir}/initrd.img ${eficonf}
|
||||
replace @ISOLABEL@ '${isolabel}' ${eficonf}
|
||||
replace @EXTRA@ '${extra_boot_args}' ${eficonf}
|
||||
%if disk:
|
||||
replace @ROOT@ root=live:LABEL=ANACONDA ${eficonf}
|
||||
%else:
|
||||
replace @ROOT@ 'root=live:CDLABEL=${isolabel|udev}' ${eficonf}
|
||||
%endif
|
||||
%if efiarch == 'IA32':
|
||||
copy ${eficonf} ${EFIBOOTDIR}/BOOT.conf
|
||||
%endif
|
||||
runcmd mkefiboot ${args} ${outroot}/${EFIBOOTDIR} ${outroot}/${img}
|
||||
%if include_kernel:
|
||||
remove ${EFIBOOTDIR}/vmlinuz
|
||||
|
@ -1,24 +1,17 @@
|
||||
<%page args="kernels, runtime_img, basearch, libdir, inroot, outroot, product, isolabel"/>
|
||||
<%page args="kernels, runtime_img, basearch, libdir, inroot, outroot, product, isolabel, extra_boot_args"/>
|
||||
<%
|
||||
configdir="tmp/config_files/ppc"
|
||||
BOOTDIR="ppc"
|
||||
GRUBDIR="boot/grub"
|
||||
LIVEDIR="LiveOS"
|
||||
MACDIR=BOOTDIR+"/mac"
|
||||
NETBOOTDIR="images/netboot"
|
||||
LORAXDIR="usr/share/lorax/"
|
||||
|
||||
WRAPPER="usr/sbin/wrapper"
|
||||
WRAPPER_DATA="usr/"+libdir+"/kernel-wrapper"
|
||||
|
||||
bitsizes = set()
|
||||
prepboot = ""
|
||||
|
||||
## NOTE: yaboot freaks out and stops parsing its config if it sees a '\',
|
||||
## so we can't use the udev escape sequences in the root arg.
|
||||
## Instead we'll just replace any non-ASCII characters in the isolabel
|
||||
## with '_', which means we won't need any udev escapes.
|
||||
isolabel = ''.join(ch if ch.isalnum() else '_' for ch in isolabel)
|
||||
|
||||
rootarg = "root=live:CDLABEL=%s" % isolabel
|
||||
%>
|
||||
|
||||
mkdir ${LIVEDIR}
|
||||
@ -35,43 +28,40 @@ treeinfo stage2 mainimage ${LIVEDIR}/squashfs.img
|
||||
mkdir ${BOOTDIR}
|
||||
## boot stuff for normal (CHRP/PREP) PPC systems
|
||||
install ${configdir}/bootinfo.txt ${BOOTDIR}
|
||||
install boot/efika.forth ${BOOTDIR}
|
||||
mkdir ${BOOTDIR}/chrp
|
||||
install usr/lib/yaboot/yaboot ${BOOTDIR}/chrp
|
||||
runcmd ${inroot}/usr/lib/yaboot/addnote ${outroot}/${BOOTDIR}/chrp/yaboot
|
||||
## special boot dir for PowerMacs
|
||||
mkdir ${MACDIR}
|
||||
install usr/lib/yaboot/yaboot ${MACDIR}
|
||||
install ${configdir}/ofboot.b ${MACDIR}
|
||||
|
||||
mkdir ${GRUBDIR}/powerpc-ieee1275
|
||||
runcmd grub2-mkimage -O powerpc-ieee1275 -d /usr/lib/grub/powerpc-ieee1275 -p '()/boot/grub' \
|
||||
-o ${outroot}/${GRUBDIR}/powerpc-ieee1275/core.elf iso9660 ext2 ofnet net tftp http
|
||||
install /usr/lib/grub/powerpc-ieee1275/*.mod ${GRUBDIR}/powerpc-ieee1275
|
||||
install /usr/lib/grub/powerpc-ieee1275/*.lst ${GRUBDIR}/powerpc-ieee1275
|
||||
|
||||
|
||||
install ${configdir}/grub.cfg.in ${GRUBDIR}/grub.cfg
|
||||
replace @PRODUCT@ '${product.name}' ${GRUBDIR}/grub.cfg
|
||||
replace @VERSION@ ${product.version} ${GRUBDIR}/grub.cfg
|
||||
replace @ROOT@ 'root=live:CDLABEL=${isolabel|udev}' ${GRUBDIR}/grub.cfg
|
||||
replace @EXTRA@ '${extra_boot_args}' ${GRUBDIR}/grub.cfg
|
||||
|
||||
## copy mapping and magic files needed for isos
|
||||
install ${configdir}/mapping ${BOOTDIR}
|
||||
install ${configdir}/magic ${BOOTDIR}
|
||||
|
||||
## NOTE: PPC is kind of funky. There's three possible "arch" setups here:
|
||||
## ppc, ppc64, and 'hybrid' (ppc userspace, both ppc & ppc64 kernels).
|
||||
## ppc, ppc64, ppc64le and 'hybrid' (ppc userspace, both ppc & ppc64 kernels).
|
||||
|
||||
## Install kernel and bootloader config (in separate places for each arch)
|
||||
%for kernel in kernels:
|
||||
<%
|
||||
bits = 64 if kernel.arch == "ppc64" else 32
|
||||
bits = 64 if kernel.arch in ("ppc64", "ppc64le") else 32
|
||||
## separate dirs/images for each arch
|
||||
KERNELDIR=BOOTDIR+"/ppc%s" % bits
|
||||
NETIMG=NETBOOTDIR+"/ppc%s.img" % bits
|
||||
bitsizes.add(bits)
|
||||
%>
|
||||
## install kernel
|
||||
mkdir ${KERNELDIR} ${NETBOOTDIR}
|
||||
installkernel images-${kernel.arch} ${kernel.path} ${KERNELDIR}/vmlinuz
|
||||
installinitrd images-${kernel.arch} ${kernel.initrd.path} ${KERNELDIR}/initrd.img
|
||||
|
||||
## install arch-specific bootloader config
|
||||
install ${configdir}/yaboot.conf.in ${KERNELDIR}/yaboot.conf
|
||||
replace @BITS@ ${bits} ${KERNELDIR}/yaboot.conf
|
||||
replace @PRODUCT@ '${product.name}' ${KERNELDIR}/yaboot.conf
|
||||
replace @VERSION@ ${product.version} ${KERNELDIR}/yaboot.conf
|
||||
replace @ROOT@ "${rootarg}" ${KERNELDIR}/yaboot.conf
|
||||
|
||||
## kernel-wrapper magic that makes the netboot combined ppc{32,64}.img
|
||||
runcmd ${inroot}/${WRAPPER} -p of \
|
||||
-D ${inroot}/${WRAPPER_DATA} \
|
||||
@ -86,18 +76,14 @@ install ${configdir}/magic ${BOOTDIR}
|
||||
%endif
|
||||
%endfor
|
||||
|
||||
## choose correct yaboot.conf
|
||||
mkdir etc
|
||||
%if len(bitsizes) == 2:
|
||||
## both kernels means hybrid - use the magic hybrid config
|
||||
install ${configdir}/yaboot.conf.3264 etc/yaboot.conf
|
||||
replace @PRODUCT@ ${product.name} etc/yaboot.conf
|
||||
replace @VERSION@ ${product.version} etc/yaboot.conf
|
||||
replace @ROOT@ "${rootarg}" etc/yaboot.conf
|
||||
%else:
|
||||
## single arch - use the arch-specific yaboot.conf from above
|
||||
copy ${KERNELDIR}/yaboot.conf etc/yaboot.conf
|
||||
# Create optional product.img and updates.img
|
||||
<% imggraft=""; images=["product", "updates"] %>
|
||||
%for img in images:
|
||||
%if exists("%s/%s/" % (LORAXDIR, img)):
|
||||
installimg ${LORAXDIR}/${img}/ images/${img}.img
|
||||
<% imggraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %>
|
||||
%endif
|
||||
%endfor
|
||||
|
||||
## make boot.iso
|
||||
runcmd mkisofs -o ${outroot}/images/boot.iso -chrp-boot -U \
|
||||
@ -107,10 +93,10 @@ runcmd mkisofs -o ${outroot}/images/boot.iso -chrp-boot -U \
|
||||
-hfs-volid ${product.version} -hfs-bless ${outroot}/${MACDIR} \
|
||||
-map ${inroot}/${configdir}/mapping \
|
||||
-no-desktop -allow-multidot -graft-points \
|
||||
etc=${outroot}/etc \
|
||||
${BOOTDIR}=${outroot}/${BOOTDIR} \
|
||||
${GRUBDIR}=${outroot}/${GRUBDIR} \
|
||||
${NETBOOTDIR}=${outroot}/${NETBOOTDIR} \
|
||||
${LIVEDIR}=${outroot}/${LIVEDIR}
|
||||
${LIVEDIR}=${outroot}/${LIVEDIR} ${imggraft}
|
||||
|
||||
%for kernel in kernels:
|
||||
treeinfo images-${kernel.arch} boot.iso images/boot.iso
|
||||
|
@ -1,9 +1,10 @@
|
||||
<%page args="kernels, runtime_img, runtime_base, basearch, outroot"/>
|
||||
<%page args="kernels, runtime_img, runtime_base, basearch, outroot, extra_boot_args"/>
|
||||
<%
|
||||
configdir="tmp/config_files/s390"
|
||||
BOOTDIR="images"
|
||||
KERNELDIR=BOOTDIR
|
||||
INITRD_ADDRESS="0x02000000"
|
||||
LORAXDIR="usr/share/lorax/"
|
||||
# The assumption seems to be that there is only one s390 kernel, ever
|
||||
kernel = kernels[0]
|
||||
%>
|
||||
@ -15,10 +16,12 @@ treeinfo stage2 mainimage images/${runtime_base}
|
||||
## install bootloader (such as it is) and bootloader config
|
||||
install ${configdir}/redhat.exec ${BOOTDIR}
|
||||
install ${configdir}/generic.prm ${BOOTDIR}
|
||||
install ${configdir}/genericdvd.prm ${BOOTDIR}
|
||||
install ${configdir}/generic.ins .
|
||||
|
||||
## configure bootloader
|
||||
replace @INITRD_LOAD_ADDRESS@ ${INITRD_ADDRESS} generic.ins
|
||||
replace @EXTRA@ '${extra_boot_args}' ${BOOTDIR}/generic.prm
|
||||
|
||||
## install kernel
|
||||
installkernel images-${basearch} ${kernel.path} ${KERNELDIR}/kernel.img
|
||||
@ -30,4 +33,15 @@ createaddrsize ${INITRD_ADDRESS} ${outroot}/${BOOTDIR}/initrd.img ${outroot}/${B
|
||||
## s390 also has some special treeinfo data
|
||||
treeinfo images-${basearch} initrd.addrsize ${BOOTDIR}/initrd.addrsize
|
||||
treeinfo images-${basearch} generic.prm ${BOOTDIR}/generic.prm
|
||||
treeinfo images-${basearch} genericdvd.prm ${BOOTDIR}/genericdvd.prm
|
||||
treeinfo images-${basearch} generic.ins generic.ins
|
||||
treeinfo images-${basearch} redhat.exec ${BOOTDIR}/redhat.exec
|
||||
|
||||
# Create optional product.img and updates.img
|
||||
<% imggraft=""; images=["product", "updates"] %>
|
||||
%for img in images:
|
||||
%if exists("%s/%s/" % (LORAXDIR, img)):
|
||||
installimg ${LORAXDIR}/${img}/ images/${img}.img
|
||||
<% imggraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %>
|
||||
%endif
|
||||
%endfor
|
||||
|
@ -1,4 +1,4 @@
|
||||
<%page args="kernels, runtime_img, basearch, outroot, product, isolabel"/>
|
||||
<%page args="kernels, runtime_img, basearch, outroot, product, isolabel, extra_boot_args"/>
|
||||
<%
|
||||
configdir="tmp/config_files/x86"
|
||||
SYSLINUXDIR="usr/share/syslinux"
|
||||
@ -6,6 +6,7 @@ PXEBOOTDIR="images/pxeboot"
|
||||
BOOTDIR="isolinux"
|
||||
KERNELDIR=PXEBOOTDIR
|
||||
LIVEDIR="LiveOS"
|
||||
LORAXDIR="usr/share/lorax/"
|
||||
%>
|
||||
|
||||
mkdir ${LIVEDIR}
|
||||
@ -26,6 +27,7 @@ install boot/memtest* ${BOOTDIR}/memtest
|
||||
replace @VERSION@ ${product.version} ${BOOTDIR}/grub.conf ${BOOTDIR}/isolinux.cfg ${BOOTDIR}/*.msg
|
||||
replace @PRODUCT@ '${product.name}' ${BOOTDIR}/grub.conf ${BOOTDIR}/isolinux.cfg ${BOOTDIR}/*.msg
|
||||
replace @ROOT@ 'root=live:CDLABEL=${isolabel|udev}' ${BOOTDIR}/isolinux.cfg
|
||||
replace @EXTRA@ '${extra_boot_args}' ${BOOTDIR}/isolinux.cfg
|
||||
|
||||
## install kernels
|
||||
mkdir ${KERNELDIR}
|
||||
@ -47,11 +49,15 @@ hardlink ${KERNELDIR}/initrd.img ${BOOTDIR}
|
||||
%endif
|
||||
|
||||
## WHeeeeeeee, EFI.
|
||||
## We could remove the basearch restriction someday..
|
||||
<% efiargs=""; efigraft=""; efihybrid="" %>
|
||||
%if exists("boot/efi/EFI/fedora/gcdx64.efi") and basearch != 'i386':
|
||||
<% efiargs=""; efigraft=""; efihybrid=""; efiarch32=None; efiarch64=None %>
|
||||
%if exists("boot/efi/EFI/*/gcdia32.efi"):
|
||||
<% efiarch32 = 'IA32' %>
|
||||
%endif
|
||||
%if exists("boot/efi/EFI/*/gcdx64.efi"):
|
||||
<% efiarch64 = 'X64' %>
|
||||
%endif
|
||||
%if efiarch32 or efiarch64:
|
||||
<%
|
||||
efiarch = 'X64' if basearch=='x86_64' else 'IA32'
|
||||
efigraft="EFI/BOOT={0}/EFI/BOOT".format(outroot)
|
||||
images = ["images/efiboot.img"]
|
||||
if domacboot:
|
||||
@ -61,9 +67,18 @@ hardlink ${KERNELDIR}/initrd.img ${BOOTDIR}
|
||||
efigraft += " {0}={1}/{0}".format(img,outroot)
|
||||
efihybrid = "--uefi --mac" if domacboot else "--uefi"
|
||||
%>
|
||||
<%include file="efi.tmpl" args="configdir=configdir, KERNELDIR=KERNELDIR, efiarch=efiarch, isolabel=isolabel"/>
|
||||
<%include file="efi.tmpl" args="configdir=configdir, KERNELDIR=KERNELDIR, efiarch32=efiarch32, efiarch64=efiarch64, isolabel=isolabel, extra_boot_args=extra_boot_args"/>
|
||||
%endif
|
||||
|
||||
# Create optional product.img and updates.img
|
||||
<% imggraft=""; images=["product", "updates"] %>
|
||||
%for img in images:
|
||||
%if exists("%s/%s/" % (LORAXDIR, img)):
|
||||
installimg ${LORAXDIR}/${img}/ images/${img}.img
|
||||
<% imggraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %>
|
||||
%endif
|
||||
%endfor
|
||||
|
||||
## make boot.iso
|
||||
runcmd mkisofs -o ${outroot}/images/boot.iso \
|
||||
-b ${BOOTDIR}/isolinux.bin -c ${BOOTDIR}/boot.cat \
|
||||
@ -72,6 +87,6 @@ runcmd mkisofs -o ${outroot}/images/boot.iso \
|
||||
${BOOTDIR}=${outroot}/${BOOTDIR} \
|
||||
${KERNELDIR}=${outroot}/${KERNELDIR} \
|
||||
${LIVEDIR}=${outroot}/${LIVEDIR} \
|
||||
${efigraft}
|
||||
${efigraft} ${imggraft}
|
||||
runcmd isohybrid ${efihybrid} ${outroot}/images/boot.iso
|
||||
treeinfo images-${basearch} boot.iso images/boot.iso
|
||||
|
@ -2,24 +2,16 @@
|
||||
<%
|
||||
configdir="tmp/config_files/ppc"
|
||||
BOOTDIR="ppc"
|
||||
GRUBDIR="boot/grub"
|
||||
LIVEDIR="LiveOS"
|
||||
MACDIR=BOOTDIR+"/mac"
|
||||
NETBOOTDIR="images/netboot"
|
||||
LORAXDIR="usr/share/lorax/"
|
||||
|
||||
WRAPPER="usr/sbin/wrapper"
|
||||
WRAPPER_DATA="usr/"+libdir+"/kernel-wrapper"
|
||||
|
||||
bitsizes = set()
|
||||
prepboot = ""
|
||||
|
||||
## NOTE: yaboot freaks out and stops parsing its config if it sees a '\',
|
||||
## so we can't use the udev escape sequences in the root arg.
|
||||
## Instead we'll just replace any non-ASCII characters in the isolabel
|
||||
## with '_', which means we won't need any udev escapes.
|
||||
isolabel = ''.join(ch if ch.isalnum() else '_' for ch in isolabel)
|
||||
|
||||
## Anaconda finds the CDROM device automatically
|
||||
rootarg = ""
|
||||
%>
|
||||
|
||||
mkdir ${LIVEDIR}
|
||||
@ -36,30 +28,33 @@ treeinfo stage2 mainimage ${LIVEDIR}/squashfs.img
|
||||
mkdir ${BOOTDIR}
|
||||
## boot stuff for normal (CHRP/PREP) PPC systems
|
||||
install ${configdir}/bootinfo.txt ${BOOTDIR}
|
||||
install boot/efika.forth ${BOOTDIR}
|
||||
mkdir ${BOOTDIR}/chrp
|
||||
install usr/lib/yaboot/yaboot ${BOOTDIR}/chrp
|
||||
runcmd ${inroot}/usr/lib/yaboot/addnote ${outroot}/${BOOTDIR}/chrp/yaboot
|
||||
## special boot dir for PowerMacs
|
||||
mkdir ${MACDIR}
|
||||
install usr/lib/yaboot/yaboot ${MACDIR}
|
||||
install ${configdir}/ofboot.b ${MACDIR}
|
||||
|
||||
mkdir ${GRUBDIR}/powerpc-ieee1275
|
||||
runcmd grub2-mkimage -O powerpc-ieee1275 -d /usr/lib/grub/powerpc-ieee1275 -p '()/boot/grub' \
|
||||
-o ${outroot}/${GRUBDIR}/powerpc-ieee1275/core.elf iso9660 ext2 ofnet net tftp http
|
||||
install /usr/lib/grub/powerpc-ieee1275/*.mod ${GRUBDIR}/powerpc-ieee1275
|
||||
install /usr/lib/grub/powerpc-ieee1275/*.lst ${GRUBDIR}/powerpc-ieee1275
|
||||
|
||||
|
||||
install ${configdir}/grub.cfg.in ${GRUBDIR}/grub.cfg
|
||||
replace @PRODUCT@ '${product.name}' ${GRUBDIR}/grub.cfg
|
||||
replace @VERSION@ ${product.version} ${GRUBDIR}/grub.cfg
|
||||
replace @ROOT@ 'inst.stage2=hd:LABEL=${isolabel|udev}' ${GRUBDIR}/grub.cfg
|
||||
|
||||
## copy mapping and magic files needed for isos
|
||||
install ${configdir}/mapping ${BOOTDIR}
|
||||
install ${configdir}/magic ${BOOTDIR}
|
||||
|
||||
## NOTE: PPC is kind of funky. There's three possible "arch" setups here:
|
||||
## ppc, ppc64, and 'hybrid' (ppc userspace, both ppc & ppc64 kernels).
|
||||
## ppc, ppc64, ppc64le, and 'hybrid' (ppc userspace, both ppc & ppc64 kernels).
|
||||
|
||||
## Install kernel and bootloader config (in separate places for each arch)
|
||||
%for kernel in kernels:
|
||||
<%
|
||||
bits = 64 if kernel.arch == "ppc64" else 32
|
||||
bits = 64 if kernel.arch in ("ppc64", "ppc64le") else 32
|
||||
## separate dirs/images for each arch
|
||||
KERNELDIR=BOOTDIR+"/ppc%s" % bits
|
||||
NETIMG=NETBOOTDIR+"/ppc%s.img" % bits
|
||||
bitsizes.add(bits)
|
||||
%>
|
||||
## install kernel
|
||||
mkdir ${KERNELDIR} ${NETBOOTDIR}
|
||||
@ -71,13 +66,6 @@ install ${configdir}/magic ${BOOTDIR}
|
||||
installupgradeinitrd images-${kernel.arch} ${kernel.upgrade.path} ${KERNELDIR}/upgrade.img
|
||||
%endif
|
||||
|
||||
## install arch-specific bootloader config
|
||||
install ${configdir}/yaboot.conf.in ${KERNELDIR}/yaboot.conf
|
||||
replace @BITS@ ${bits} ${KERNELDIR}/yaboot.conf
|
||||
replace @PRODUCT@ '${product.name}' ${KERNELDIR}/yaboot.conf
|
||||
replace @VERSION@ ${product.version} ${KERNELDIR}/yaboot.conf
|
||||
replace @ROOT@ "${rootarg}" ${KERNELDIR}/yaboot.conf
|
||||
|
||||
## kernel-wrapper magic that makes the netboot combined ppc{32,64}.img
|
||||
runcmd ${inroot}/${WRAPPER} -p of \
|
||||
-D ${inroot}/${WRAPPER_DATA} \
|
||||
@ -92,18 +80,21 @@ install ${configdir}/magic ${BOOTDIR}
|
||||
%endif
|
||||
%endfor
|
||||
|
||||
## choose correct yaboot.conf
|
||||
mkdir etc
|
||||
%if len(bitsizes) == 2:
|
||||
## both kernels means hybrid - use the magic hybrid config
|
||||
install ${configdir}/yaboot.conf.3264 etc/yaboot.conf
|
||||
replace @PRODUCT@ ${product.name} etc/yaboot.conf
|
||||
replace @VERSION@ ${product.version} etc/yaboot.conf
|
||||
replace @ROOT@ "${rootarg}" etc/yaboot.conf
|
||||
%else:
|
||||
## single arch - use the arch-specific yaboot.conf from above
|
||||
copy ${KERNELDIR}/yaboot.conf etc/yaboot.conf
|
||||
# Create optional product.img and updates.img
|
||||
<% imggraft=""; images=["product", "updates"] %>
|
||||
%for img in images:
|
||||
%if exists("%s/%s/" % (LORAXDIR, img)):
|
||||
installimg ${LORAXDIR}/${img}/ images/${img}.img
|
||||
<% imggraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %>
|
||||
%endif
|
||||
%endfor
|
||||
|
||||
# Inherit iso-graft/ if it exists from external templates
|
||||
<%
|
||||
import os
|
||||
if os.path.exists(workdir + "/iso-graft"):
|
||||
imggraft += " " + workdir + "/iso-graft"
|
||||
%>
|
||||
|
||||
## make boot.iso
|
||||
runcmd mkisofs -o ${outroot}/images/boot.iso -chrp-boot -U \
|
||||
@ -113,10 +104,11 @@ runcmd mkisofs -o ${outroot}/images/boot.iso -chrp-boot -U \
|
||||
-hfs-volid ${product.version} -hfs-bless ${outroot}/${MACDIR} \
|
||||
-map ${inroot}/${configdir}/mapping \
|
||||
-no-desktop -allow-multidot -graft-points \
|
||||
etc=${outroot}/etc \
|
||||
${BOOTDIR}=${outroot}/${BOOTDIR} \
|
||||
${GRUBDIR}=${outroot}/${GRUBDIR} \
|
||||
${NETBOOTDIR}=${outroot}/${NETBOOTDIR} \
|
||||
${LIVEDIR}=${outroot}/${LIVEDIR}
|
||||
${LIVEDIR}=${outroot}/${LIVEDIR} ${imggraft}
|
||||
|
||||
|
||||
%for kernel in kernels:
|
||||
treeinfo images-${kernel.arch} boot.iso images/boot.iso
|
||||
|
3
share/pxe-live/pxe-config.tmpl
Normal file
3
share/pxe-live/pxe-config.tmpl
Normal file
@ -0,0 +1,3 @@
|
||||
# PXE configuration template generated by livemedia-creator
|
||||
kernel <PXE_DIR>${kernel}
|
||||
append initrd=<PXE_DIR>${initrd} root=live:<URL>/${liveimg} ${addargs}
|
@ -10,22 +10,27 @@ remove usr/share/i18n
|
||||
removepkg perl*
|
||||
%endif
|
||||
## no sound support, thanks
|
||||
removepkg alsa* flac gstreamer-tools libsndfile pulseaudio* sound-theme-freedesktop
|
||||
## ...except alsa-libs, which are needed by spice-vdagent
|
||||
removepkg alsa-*firmware* flac gstreamer-tools libsndfile pulseaudio* sound-theme-freedesktop
|
||||
removepkg midisport-firmware
|
||||
## no fancy video, either
|
||||
removepkg libcrystalhd crystalhd-firmware ivtv-firmware cx18-firmware
|
||||
removepkg mesa-dri-drivers
|
||||
## we don't create new initramfs/bootloader conf inside anaconda
|
||||
## (that happens inside the target system after we install dracut/grubby)
|
||||
removepkg dracut-network grubby anaconda-dracut
|
||||
removefrom ${product.name}-logos /usr/share/plymouth/*
|
||||
## In order to execute the /usr move on upgrades we need convertfs from dracut
|
||||
## We also need dracut-shutdown.service and dracut-initramfs-restore to reboot
|
||||
removefrom dracut --allbut /usr/lib/dracut/modules.d/30convertfs/convertfs.sh \
|
||||
/usr/lib/dracut/modules.d/99base/dracut-lib.sh \
|
||||
/usr/lib/systemd/* /usr/lib/dracut/dracut-initramfs-restore
|
||||
/usr/lib/systemd/* /usr/lib/dracut/modules.d/98systemd/*.service \
|
||||
/usr/lib/dracut/dracut-initramfs-restore
|
||||
## we don't run SELinux (not in enforcing, anyway)
|
||||
removepkg checkpolicy selinux-policy libselinux-utils
|
||||
|
||||
## selinux checks for the /etc/selinux/config file's existance
|
||||
## The removepkg above removes it, create an empty one. See rhbz#1243168
|
||||
append etc/selinux/config ""
|
||||
|
||||
## anaconda has its own repo files
|
||||
removefrom fedora-release --allbut /etc/os-release
|
||||
removepkg fedora-release-rawhide
|
||||
@ -39,8 +44,6 @@ removepkg gnupg2 pinentry
|
||||
removepkg cups-libs iscan-firmware
|
||||
## no storage device monitoring
|
||||
removepkg device-mapper-event dmraid-events sgpio
|
||||
## we don't (currently) support deltarpms in anaconda
|
||||
removepkg deltarpm
|
||||
## no notifications in anaconda
|
||||
removepkg notification-daemon
|
||||
## logrotate isn't useful in anaconda
|
||||
@ -48,13 +51,15 @@ removepkg logrotate
|
||||
remove /etc/logrotate.d
|
||||
## anaconda needs this to do media check
|
||||
removefrom isomd5sum --allbut /usr/bin/checkisomd5
|
||||
## remove ntp keep only config file
|
||||
removefrom ntp --allbut /etc/ntp.conf
|
||||
|
||||
## various other things we remove to save space
|
||||
removepkg avahi-autoipd coreutils-libs curl dash db4-utils diffutils file
|
||||
removepkg avahi-autoipd coreutils-libs dash db4-utils diffutils file
|
||||
removepkg genisoimage gnome-python2 info iptables
|
||||
removepkg jasper-libs libXt libXxf86misc
|
||||
removepkg libasyncns libdaemon libhbaapi libhbalinux
|
||||
removepkg libmcpp libpcap libtiff libutempter linux-atm-libs
|
||||
removepkg jasper-libs libXxf86misc
|
||||
removepkg libasyncns libhbaapi libhbalinux
|
||||
removepkg libmcpp libtiff libutempter linux-atm-libs
|
||||
removepkg lvm2-libs m4 mailx makebootfat mcpp
|
||||
removepkg mingetty mobile-broadband-provider-info pkgconfig ppp pth
|
||||
removepkg rmt rpcbind squashfs-tools system-config-firewall-base
|
||||
@ -62,7 +67,7 @@ removepkg tigervnc-license ttmkfdir xml-common xorg-x11-font-utils
|
||||
removepkg xorg-x11-server-common yum-utils
|
||||
|
||||
## other removals
|
||||
remove /boot /home /media /opt /srv /tmp/*
|
||||
remove /home /media /opt /srv /tmp/*
|
||||
remove /usr/etc /usr/games /usr/local /usr/tmp
|
||||
remove /usr/share/doc /usr/share/info /usr/share/man /usr/share/gnome
|
||||
remove /usr/share/mime/application /usr/share/mime/audio /usr/share/mime/image
|
||||
@ -77,22 +82,23 @@ remove /var/lib/rpm/* /var/lib/yum
|
||||
remove /usr/share/icons/*/icon-theme.cache
|
||||
|
||||
## clean up kernel modules
|
||||
<%
|
||||
removekmods = """
|
||||
sound drivers/media drivers/hwmon drivers/video drivers/char
|
||||
net/atm net/bluetooth net/sched net/sctp net/bridge
|
||||
net/rds net/l2tp net/decnet net/netfilter net/ipv4 net/ipv6
|
||||
drivers/watchdog drivers/target drivers/rtc drivers/input/joystick
|
||||
drivers/bluetooth drivers/hid drivers/edac drivers/staging
|
||||
drivers/usb/serial drivers/usb/host drivers/usb/misc
|
||||
fs/ocfs2 fs/ceph fs/nfsd fs/ubifs fs/nilfs2
|
||||
arch/x86/kvm
|
||||
"""
|
||||
%>
|
||||
%for kmodpath in removekmods.split():
|
||||
remove lib/modules/*/kernel/${kmodpath}
|
||||
%endfor
|
||||
removekmod sound drivers/media drivers/hwmon \
|
||||
net/atm net/bluetooth net/sched net/sctp \
|
||||
net/rds net/l2tp net/decnet net/netfilter net/ipv4 net/ipv6 \
|
||||
drivers/watchdog drivers/rtc drivers/input/joystick \
|
||||
drivers/bluetooth drivers/edac drivers/usb/serial \
|
||||
drivers/usb/host drivers/usb/misc fs/ocfs2 fs/ceph fs/nfsd \
|
||||
fs/ubifs fs/nilfs2 arch/x86/kvm
|
||||
## Need to keep virtio_console.ko and ipmi stuff in drivers/char
|
||||
## Also keep virtio-rng so that the installer can get sufficient randomness for
|
||||
## LUKS setup.
|
||||
removekmod drivers/char --allbut virtio_console hw_random \
|
||||
virtio-rng ipmi hmcdrv
|
||||
removekmod drivers/staging --allbut zram
|
||||
removekmod drivers/video --allbut hyperv_fb syscopyarea sysfillrect sysimgblt fb_sys_fops
|
||||
remove lib/modules/*/{build,source,*.map}
|
||||
## Need to keep hid-multitouch and i2c-hid in drivers/hid, rhbz#1526323
|
||||
removekmod drivers/hid --allbut hid-multitouch i2c-hid
|
||||
## NOTE: depmod gets re-run after cleanup finishes
|
||||
|
||||
## remove unused themes, theme engines, icons, etc.
|
||||
@ -112,7 +118,8 @@ removefrom metacity --allbut /usr/bin/* /usr/${libdir}/* /etc/*
|
||||
|
||||
## filesystem tools
|
||||
removefrom e2fsprogs /usr/share/locale/*
|
||||
removefrom xfsprogs /usr/share/locale/*
|
||||
removefrom xfsprogs /usr/share/locale/* /usr/share/doc/* /usr/share/man/*
|
||||
removefrom xfsdump --allbut /usr/sbin/*
|
||||
|
||||
## other package specific removals
|
||||
removefrom GConf2 /etc/rpm/* /etc/xdg/* /usr/bin/*
|
||||
@ -135,11 +142,11 @@ removefrom authconfig /usr/sbin/* /usr/share/*
|
||||
removefrom bash /etc/* /usr/bin/bashbug* /usr/share/*
|
||||
removefrom bind-libs-lite /usr/${libdir}/libirs*
|
||||
removefrom bind-libs-lite /usr/${libdir}/libisccfg-export*
|
||||
removefrom bind-utils /usr/bin/dig /usr/bin/host /usr/bin/nsupdate
|
||||
removefrom bind-utils /usr/bin/dig /usr/bin/host /usr/bin/nsupdate /usr/bin/delv
|
||||
removefrom bitmap-fangsongti-fonts /usr/share/fonts/*
|
||||
removefrom ca-certificates /etc/pki/java/*
|
||||
removefrom ca-certificates /etc/pki/tls/certs/ca-bundle.trust.crt /etc/ssl/*
|
||||
removefrom cairo /usr/${libdir}/libcairo-script*
|
||||
removefrom cairo /usr/${libdir}/libcairo-script* /usr/bin/cairo-sphinx
|
||||
removefrom coreutils /etc/* /usr/bin/link /usr/bin/nice /usr/bin/stty /usr/bin/su /usr/bin/unlink
|
||||
removefrom coreutils /usr/sbin/runuser /usr/bin/[ /usr/bin/base64 /usr/bin/chcon
|
||||
removefrom coreutils /usr/bin/cksum /usr/bin/comm /usr/bin/csplit
|
||||
@ -148,9 +155,9 @@ removefrom coreutils /usr/bin/expand /usr/bin/factor
|
||||
removefrom coreutils /usr/bin/fold /usr/bin/groups /usr/bin/hostid
|
||||
removefrom coreutils /usr/bin/install /usr/bin/join /usr/bin/logname
|
||||
removefrom coreutils /usr/bin/mkfifo /usr/bin/nl /usr/bin/nohup /usr/bin/nproc
|
||||
removefrom coreutils /usr/bin/od /usr/bin/paste /usr/bin/pathchk
|
||||
removefrom coreutils /usr/bin/pathchk
|
||||
removefrom coreutils /usr/bin/pinky /usr/bin/pr /usr/bin/printenv
|
||||
removefrom coreutils /usr/bin/printf /usr/bin/ptx /usr/bin/runcon /usr/bin/seq
|
||||
removefrom coreutils /usr/bin/printf /usr/bin/ptx /usr/bin/runcon
|
||||
removefrom coreutils /usr/bin/sha224sum /usr/bin/sha384sum
|
||||
removefrom coreutils /usr/bin/sha512sum /usr/bin/shuf /usr/bin/stat
|
||||
removefrom coreutils /usr/bin/stdbuf /usr/bin/sum /usr/bin/test
|
||||
@ -160,7 +167,6 @@ removefrom coreutils /usr/bin/who /usr/bin/whoami /usr/bin/yes /usr/share/*
|
||||
removefrom cpio /usr/share/*
|
||||
removefrom cracklib /usr/sbin/*
|
||||
removefrom cracklib-dicts /usr/${libdir}/* /usr/sbin/*
|
||||
removefrom createrepo /usr/bin/* /usr/share/*
|
||||
removefrom cryptsetup-luks /usr/share/*
|
||||
removefrom cyrus-sasl-lib /usr/sbin/*
|
||||
removefrom db4 /usr/*
|
||||
@ -192,12 +198,14 @@ removefrom glibc /lib/*/nosegneg/* /${libdir}/libBrokenLocale*
|
||||
removefrom glibc /${libdir}/libSegFault* /${libdir}/libanl*
|
||||
removefrom glibc /${libdir}/libcidn* /${libdir}/libnss_compat*
|
||||
removefrom glibc /${libdir}/libnss_hesiod* /${libdir}/libnss_nis*
|
||||
removefrom glibc /${libdir}/libthread* /${libdir}/rtkaio* /sbin/*
|
||||
# python-pyudev uses ctypes.util.find_library, which uses /sbin/ldconfig
|
||||
removefrom glibc /${libdir}/rtkaio* /sbin/sln
|
||||
removefrom glibc /usr/libexec/* /usr/sbin/*
|
||||
removefrom glibc-common /etc/* /usr/bin/catchsegv /usr/bin/gencat
|
||||
removefrom glibc-common /usr/bin/getconf /usr/bin/getent
|
||||
removefrom glibc-common /usr/bin/getent
|
||||
removefrom glibc-common /usr/bin/locale /usr/bin/rpcgen /usr/bin/sprof
|
||||
removefrom glibc-common /usr/bin/tzselect /usr/bin/localedef
|
||||
# NB: we keep /usr/bin/localedef so anaconda can inspect payload locale info
|
||||
removefrom glibc-common /usr/bin/tzselect
|
||||
removefrom glibc-common /usr/libexec/* /usr/sbin/*
|
||||
removefrom gmp /usr/${libdir}/libgmpxx.* /usr/${libdir}/libmp.*
|
||||
removefrom gnome-bluetooth-libs /usr/${libdir}/libgnome-bluetooth*
|
||||
@ -208,13 +216,11 @@ removefrom gnome-keyring /usr/share/glib-2.0/* /usr/share/gnome-keyring*
|
||||
removefrom gnome-keyring /usr/share/locale/*
|
||||
removefrom gnome-python2-gconf /usr/share/pygtk/*
|
||||
removefrom gnutls /usr/share/locale/*
|
||||
removefrom gpgme /usr/${libdir}/libgpgme-*
|
||||
removefrom grep /etc/* /usr/share/locale/*
|
||||
removefrom gstreamer /usr/bin/* /usr/${libdir}/gstreamer-0.10/*
|
||||
removefrom gstreamer /usr/${libdir}/libgst* /usr/libexec/* /usr/share/locale/*
|
||||
removefrom gtk2 /usr/bin/update-gtk-immodules
|
||||
removefrom gtk3 /usr/${libdir}/gtk-3.0/*
|
||||
removefrom gtk3 /usr/${libdir}/libgailutil*
|
||||
removefrom gzip /usr/bin/{gzexe,zcmp,zdiff,zegrep,zfgrep,zforce,zgrep,zless,zmore,znew}
|
||||
removefrom hwdata /etc/* /usr/share/hwdata/oui.txt /usr/share/hwdata/pnp.ids
|
||||
removefrom hwdata /usr/share/hwdata/upgradelist
|
||||
@ -249,9 +255,8 @@ removefrom libvorbis /usr/${libdir}/libvorbisenc.*
|
||||
removefrom libxml2 /usr/bin/*
|
||||
removefrom libxml2-python /usr/${libdir}/python?.?/site-packages/libxml2mod.a
|
||||
removefrom libxml2-python /usr/${libdir}/python?.?/site-packages/libxml2mod.la
|
||||
removefrom lldpad /etc/* /usr/sbin/lldptool
|
||||
removefrom lldpad /etc/*
|
||||
removefrom lua /usr/bin/*
|
||||
removefrom lzo /usr/${libdir}/liblzo2.*
|
||||
removefrom madan-fonts /usr/share/fonts/madan/*
|
||||
removefrom mdadm /etc/*
|
||||
removefrom module-init-tools /etc/* /usr/sbin/insmod.static /usr/sbin/weak-modules
|
||||
@ -287,7 +292,6 @@ removefrom openssh-clients /usr/libexec/*
|
||||
removefrom openssh-server /etc/ssh/* /usr/libexec/*
|
||||
removefrom openssl /etc/pki/* /usr/bin/* /usr/${libdir}/openssl/*
|
||||
removefrom pam /usr/sbin/* /usr/share/locale/*
|
||||
removefrom pciutils /usr/sbin/*
|
||||
removefrom policycoreutils /etc/* /usr/bin/* /usr/share/locale/*
|
||||
removefrom polkit /usr/bin/*
|
||||
removefrom polkit-desktop-policy /var/lib/*
|
||||
@ -304,7 +308,7 @@ removefrom python-ethtool /usr/sbin/*
|
||||
removefrom python-meh /usr/share/locale/*
|
||||
removefrom readline /usr/${libdir}/*
|
||||
removefrom libreport /usr/bin/* /usr/share/locale/*
|
||||
removefrom rpm /usr/bin/* /usr/lib/rpm/platform/* /usr/share/locale/*
|
||||
removefrom rpm /usr/share/locale/*
|
||||
removefrom rsync /etc/*
|
||||
removefrom sed /usr/share/locale/*
|
||||
removefrom smartmontools /etc/* /usr/sbin/smartd
|
||||
@ -320,11 +324,10 @@ removefrom util-linux --allbut \
|
||||
/usr/bin/{dmesg,getopt,kill,login,lsblk,more,mount,umount,mountpoint} \
|
||||
/etc/mtab /etc/pam.d/login /etc/pam.d/remote \
|
||||
/usr/sbin/{agetty,blkid,blockdev,clock,fdisk,fsck,fstrim,hwclock,losetup} \
|
||||
/usr/sbin/{mkswap,nologin,sfdisk,swapoff,swapon,wipefs} \
|
||||
/usr/bin/logger
|
||||
/usr/sbin/{mkswap,nologin,sfdisk,swapoff,swapon,wipefs,partx,fsfreeze} \
|
||||
/usr/bin/{logger,hexdump,flock,chmem,lsmem}
|
||||
removefrom volume_key-libs /usr/share/locale/*
|
||||
removefrom wget /etc/* /usr/share/locale/*
|
||||
removefrom xkeyboard-config /usr/share/locale/*
|
||||
removefrom xorg-x11-drv-intel /usr/${libdir}/libI*
|
||||
removefrom xorg-x11-drv-openchrome /usr/${libdir}/libchrome*
|
||||
removefrom xorg-x11-drv-synaptics /usr/bin/*
|
||||
@ -332,14 +335,24 @@ removefrom xorg-x11-drv-wacom /usr/bin/*
|
||||
removefrom xorg-x11-fonts-misc --allbut /usr/share/X11/fonts/misc/{6x13,encodings,fonts,*cursor}*
|
||||
removefrom xorg-x11-server-utils --allbut /usr/bin/xrandr /usr/share/X11/rgb.txt
|
||||
removefrom yum /etc/* /usr/share/locale/* /usr/share/yum-cli/*
|
||||
removefrom ${product.name}-logos /etc/*
|
||||
removefrom ${product.name}-logos /usr/share/icons/{Bluecurve,oxygen}/*
|
||||
removefrom ${product.name}-logos /usr/share/{firstboot,gnome-screensaver,kde4,pixmaps}/*
|
||||
removefrom redhat-logos /etc/*
|
||||
removefrom redhat-logos /usr/share/icons/{Bluecurve,oxygen}/*
|
||||
removefrom redhat-logos /usr/share/{firstboot,gnome-screensaver,kde4,pixmaps}/*
|
||||
removefrom redhat-logos /usr/share/{plymouth,backgrounds}*
|
||||
|
||||
## RHEL cleanups
|
||||
removefrom subscription-manager --allbut /etc/rhsm/* /usr/share/rhsm/* /var/log/rhsm/* \
|
||||
/etc/yum/pluginconf.d/product-id.conf /usr/lib/yum-plugins/product-id.py
|
||||
|
||||
## cleanup_python_files()
|
||||
runcmd find ${root} -name "*.pyo" -type f -delete
|
||||
runcmd find ${root} -name "*.pyc" -type f -exec ln -sf /dev/null {} \;
|
||||
|
||||
## cleanup /boot/ leaving vmlinuz, and .*hmac files
|
||||
runcmd chroot ${root} find /boot \! -name "vmlinuz*" \
|
||||
-and \! -name ".vmlinuz*" \
|
||||
-and \! -name boot -delete
|
||||
|
||||
## remove any broken links in /etc or /usr
|
||||
## (broken systemd service links lead to confusing noise at boot)
|
||||
## NOTE: not checking /var because we want to keep /var/run
|
||||
|
@ -3,24 +3,26 @@
|
||||
|
||||
## anaconda package
|
||||
installpkg anaconda anaconda-widgets
|
||||
|
||||
## anaconda deps that aren't in the RPM
|
||||
installpkg tmux
|
||||
installpkg firstboot
|
||||
installpkg iscsi-initiator-utils
|
||||
## speed up compression on multicore systems
|
||||
installpkg pigz
|
||||
|
||||
## firstaidkit (rescue mode) packages
|
||||
installpkg firstaidkit-plugin-{passwd,key-recovery,mdadm-conf}
|
||||
## Other available payloads
|
||||
installpkg rpm-ostree
|
||||
|
||||
## kernel and firmware
|
||||
installpkg kernel
|
||||
%if basearch != "s390x":
|
||||
installpkg *-firmware
|
||||
installpkg b43-openfwwf
|
||||
%endif
|
||||
|
||||
## arch-specific packages (bootloaders etc.)
|
||||
%if basearch == "aarch64":
|
||||
installpkg efibootmgr grub2-efi-aa64-cdboot grubby shim-aa64
|
||||
installpkg grub2-tools grub2-tools-minimal grub2-tools-extra
|
||||
%endif
|
||||
%if basearch in ("arm", "armhfp"):
|
||||
installpkg kernel-lpae kernel-tegra
|
||||
installpkg uboot-tools
|
||||
@ -28,28 +30,37 @@ installpkg kernel
|
||||
%if basearch == "i386":
|
||||
installpkg kernel-PAE gpart
|
||||
%endif
|
||||
%if basearch == "x86_64":
|
||||
installpkg grub2-tools-efi
|
||||
installpkg shim-x64 grub2-efi-x64-cdboot
|
||||
%endif
|
||||
%if basearch in ("i386", "x86_64"):
|
||||
installpkg grub2 grub2-tools biosdevname memtest86+ syslinux
|
||||
installpkg efibootmgr grub2-efi shim shim-unsigned
|
||||
installpkg biosdevname memtest86+ syslinux
|
||||
installpkg grub2-tools grub2-tools-minimal grub2-tools-extra
|
||||
installpkg efibootmgr
|
||||
installpkg shim-ia32 grub2-efi-ia32-cdboot
|
||||
%endif
|
||||
%if basearch in ("ppc", "ppc64"):
|
||||
installpkg grub2 grub2-tools yaboot fbset hfsutils kernel-bootwrapper ppc64-utils
|
||||
%if basearch in ("ppc", "ppc64", "ppc64le"):
|
||||
installpkg fbset hfsutils kernel-bootwrapper ppc64-utils
|
||||
installpkg grub2-tools grub2-tools-minimal grub2-tools-extra
|
||||
installpkg grub2-${basearch}
|
||||
%endif
|
||||
|
||||
%if basearch == "s390x":
|
||||
installpkg lsscsi s390utils-base s390utils-cmsfs-fuse
|
||||
installpkg lsscsi s390utils-base s390utils-cmsfs-fuse s390utils-hmcdrvfs
|
||||
%endif
|
||||
|
||||
## yay, plymouth
|
||||
installpkg plymouth
|
||||
|
||||
## extra dracut modules
|
||||
installpkg anaconda-dracut dracut-network dracut-nohostonly dracut-norescue
|
||||
installpkg anaconda-dracut dracut-network dracut-config-generic dracut-fips
|
||||
|
||||
## fedup-dracut handles upgrades
|
||||
installpkg fedup-dracut fedup-dracut-plymouth
|
||||
## install other fedup scripts, if there are any. It's OK if there aren't.
|
||||
log "Looking for extra fedup-dracut packages..."
|
||||
-installpkg *-fedup-dracut
|
||||
## redhat-upgrade-dracut handles upgrades on RHEL
|
||||
installpkg redhat-upgrade-dracut redhat-upgrade-dracut-plymouth
|
||||
log "Looking for extra redhat-upgrade-dracut packages..."
|
||||
-installpkg *-redhat-upgrade-dracut
|
||||
installpkg redhat-release-eula
|
||||
|
||||
## rpcbind or portmap needed by dracut nfs module
|
||||
installpkg rpcbind
|
||||
@ -79,10 +90,11 @@ installpkg gnome-keyring
|
||||
installpkg python-imaging
|
||||
|
||||
## filesystem tools
|
||||
installpkg btrfs-progs jfsutils xfsprogs reiserfs-utils gfs2-utils ntfs-3g ntfsprogs
|
||||
installpkg btrfs-progs xfsprogs gfs2-utils
|
||||
installpkg python-volume_key volume_key
|
||||
installpkg system-storage-manager
|
||||
installpkg device-mapper-persistent-data
|
||||
installpkg xfsdump
|
||||
|
||||
## SELinux support
|
||||
installpkg selinux-policy-targeted audit libsemanage-python
|
||||
@ -94,14 +106,20 @@ installpkg tigervnc-server-minimal
|
||||
installpkg tigervnc-server-module
|
||||
%endif
|
||||
installpkg net-tools
|
||||
installpkg bridge-utils
|
||||
installpkg nmap-ncat
|
||||
|
||||
## ntp packages
|
||||
installpkg ntp
|
||||
|
||||
## hardware utilities/libraries
|
||||
installpkg pciutils usbutils
|
||||
installpkg pciutils usbutils ipmitool
|
||||
installpkg mt-st smartmontools
|
||||
%if basearch != "s390x":
|
||||
installpkg hdparm pcmciautils
|
||||
installpkg hdparm
|
||||
%endif
|
||||
installpkg libmlx4
|
||||
installpkg libmlx4 rdma
|
||||
installpkg rng-tools
|
||||
|
||||
## translations & language packs
|
||||
installpkg yum-langpacks
|
||||
@ -124,22 +142,27 @@ installpkg xorg-x11-fonts-misc
|
||||
installpkg gnome-themes-standard gnome-icon-theme-legacy
|
||||
|
||||
## branding & logos
|
||||
installpkg fedora-gnome-theme fedora-icon-theme
|
||||
installpkg gnome-themes-standard
|
||||
|
||||
## debugging/bug reporting tools
|
||||
installpkg gdb-gdbserver
|
||||
installpkg python-epdb
|
||||
installpkg libreport-plugin-bugzilla libreport-plugin-reportuploader
|
||||
installpkg fpaste
|
||||
|
||||
## extra tools not required by anaconda
|
||||
installpkg vim-minimal strace lsof dump xz less eject
|
||||
installpkg wget rsync rsh bind-utils ftp mtr vconfig
|
||||
installpkg icfg spice-vdagent
|
||||
installpkg gdisk
|
||||
installpkg wget rsync rsh bind-utils ftp mtr
|
||||
installpkg spice-vdagent
|
||||
installpkg gdisk hexedit sg3_utils
|
||||
|
||||
## yum plugins
|
||||
installpkg yum-plugin-fastestmirror yum-langpacks
|
||||
installpkg yum-langpacks
|
||||
|
||||
## RHEL packages
|
||||
installpkg subscription-manager
|
||||
|
||||
## addons
|
||||
installpkg kexec-tools-anaconda-addon
|
||||
installpkg oscap-anaconda-addon
|
||||
|
||||
## actually install all the requested packages
|
||||
run_pkg_transaction
|
||||
|
@ -26,6 +26,10 @@ symlink /lib/systemd/system/anaconda.target etc/systemd/system/default.target
|
||||
mkdir etc/systemd/system/local-fs.target.wants/
|
||||
symlink /lib/systemd/system/tmp.mount etc/systemd/system/local-fs.target.wants/tmp.mount
|
||||
|
||||
## Start rngd
|
||||
mkdir etc/systemd/system/basic.target.wants/
|
||||
symlink /lib/systemd/system/rngd.service etc/systemd/system/basic.target.wants/rngd.service
|
||||
|
||||
## Disable unwanted systemd services
|
||||
systemctl disable systemd-readahead-collect.service \
|
||||
systemd-readahead-replay.service \
|
||||
@ -34,9 +38,17 @@ systemctl disable systemd-readahead-collect.service \
|
||||
lvm2-monitor.service
|
||||
## These services can't be disabled normally (they're linked into place in
|
||||
## /usr/lib/systemd rather than /etc/systemd), so we have to mask them.
|
||||
systemctl mask fedora-configure.service fedora-loadmodules.service \
|
||||
fedora-autorelabel.service fedora-autorelabel-mark.service \
|
||||
fedora-wait-storage.service media.mount
|
||||
systemctl mask rhel-configure.service rhel-loadmodules.service \
|
||||
rhel-autorelabel.service rhel-autorelabel-mark.service \
|
||||
rhel-wait-storage.service media.mount \
|
||||
systemd-tmpfiles-clean.service systemd-tmpfiles-clean.timer
|
||||
|
||||
## remove because it cannot be disabled
|
||||
remove usr/lib/systemd/system-generators/lvm2-activation-generator
|
||||
|
||||
## Make logind activate anaconda-shell@.service on switch to empty VT
|
||||
symlink anaconda-shell@.service lib/systemd/system/autovt@.service
|
||||
replace "#ReserveVT=6" "ReserveVT=2" etc/systemd/logind.conf
|
||||
|
||||
## Don't write the journal to the overlay, just keep it in RAM
|
||||
remove var/log/journal
|
||||
@ -50,9 +62,12 @@ install ${configdir}/bash_history root/.bash_history
|
||||
install ${configdir}/profile root/.profile
|
||||
install ${configdir}/libuser.conf etc
|
||||
install ${configdir}/sysctl.conf etc/sysctl.d/anaconda.conf
|
||||
%if exists(root+"/etc/selinux/targeted"):
|
||||
install ${configdir}/selinux.config etc/selinux/config
|
||||
%endif
|
||||
install ${configdir}/spice-vdagentd etc/sysconfig
|
||||
mkdir etc/NetworkManager/conf.d
|
||||
install ${configdir}/90-anaconda-no-auto-default.conf etc/NetworkManager/conf.d
|
||||
install ${configdir}/91-anaconda-autoconnect-slaves.conf etc/NetworkManager/conf.d
|
||||
install ${configdir}/92-anaconda-loglevel-debug.conf etc/NetworkManager/conf.d
|
||||
install ${configdir}/vconsole.conf etc
|
||||
|
||||
## set up sshd
|
||||
install ${configdir}/sshd_config.anaconda etc/ssh
|
||||
@ -91,10 +106,6 @@ gconfset /apps/metacity/global_keybindings/switch_windows string disabled
|
||||
gconfset /desktop/gnome/interface/accessibility bool true
|
||||
gconfset /desktop/gnome/interface/at-spi-corba bool true
|
||||
|
||||
## Some settings are controlled by gsettings now.
|
||||
install ${configdir}/org.gnome.desktop.wm.keybindings.gschema.override usr/share/glib-2.0/schemas
|
||||
runcmd chroot ${root} glib-compile-schemas /usr/share/glib-2.0/schemas
|
||||
|
||||
move usr/libexec/anaconda/auditd sbin
|
||||
|
||||
## for compatibility with Ancient Anaconda Traditions
|
||||
@ -109,7 +120,13 @@ append etc/depmod.d/dd.conf "search updates built-in"
|
||||
append etc/multipath.conf "defaults {\n\tfind_multipaths yes\n\tuser_friendly_names yes\n}\n"
|
||||
|
||||
## make lvm auto-activate
|
||||
remove etc/lvm/*
|
||||
remove etc/lvm/archive/*
|
||||
remove etc/lvm/archive
|
||||
remove etc/lvm/backup/*
|
||||
remove etc/lvm/backup
|
||||
remove etc/lvm/cache/*
|
||||
remove etc/lvm/cache
|
||||
remove etc/lvm/lvm.conf
|
||||
append etc/lvm/lvm.conf "global {\n\tuse_lvmetad = 1\n}\n"
|
||||
|
||||
## TODO: we could run prelink here if we wanted?
|
||||
|
@ -4,6 +4,7 @@ configdir="tmp/config_files/s390"
|
||||
BOOTDIR="images"
|
||||
KERNELDIR=BOOTDIR
|
||||
INITRD_ADDRESS="0x02000000"
|
||||
LORAXDIR="usr/share/lorax/"
|
||||
# The assumption seems to be that there is only one s390 kernel, ever
|
||||
kernel = kernels[0]
|
||||
%>
|
||||
@ -15,6 +16,8 @@ treeinfo stage2 mainimage images/${runtime_base}
|
||||
## install bootloader (such as it is) and bootloader config
|
||||
install ${configdir}/redhat.exec ${BOOTDIR}
|
||||
install ${configdir}/generic.prm ${BOOTDIR}
|
||||
install ${configdir}/genericdvd.prm ${BOOTDIR}
|
||||
install ${configdir}/cdboot.prm ${BOOTDIR}
|
||||
install ${configdir}/generic.ins .
|
||||
|
||||
## configure bootloader
|
||||
@ -35,4 +38,36 @@ createaddrsize ${INITRD_ADDRESS} ${outroot}/${BOOTDIR}/initrd.img ${outroot}/${B
|
||||
## s390 also has some special treeinfo data
|
||||
treeinfo images-${basearch} initrd.addrsize ${BOOTDIR}/initrd.addrsize
|
||||
treeinfo images-${basearch} generic.prm ${BOOTDIR}/generic.prm
|
||||
treeinfo images-${basearch} genericdvd.prm ${BOOTDIR}/genericdvd.prm
|
||||
treeinfo images-${basearch} generic.ins generic.ins
|
||||
treeinfo images-${basearch} redhat.exec ${BOOTDIR}/redhat.exec
|
||||
|
||||
# Create optional product.img and updates.img in /images/
|
||||
<% imggraft=""; images=["product", "updates"] %>
|
||||
%for img in images:
|
||||
%if exists("%s/%s/" % (LORAXDIR, img)):
|
||||
installimg ${LORAXDIR}/${img}/ images/${img}.img
|
||||
%endif
|
||||
%endfor
|
||||
|
||||
# Inherit iso-graft/ if it exists from external templates
|
||||
<%
|
||||
import os
|
||||
if os.path.exists(workdir + "/iso-graft"):
|
||||
imggraft += " " + workdir + "/iso-graft"
|
||||
%>
|
||||
|
||||
## Make a combined kernel+initrd image for the iso
|
||||
runcmd mk-s390-cdboot -i ${outroot}/${KERNELDIR}/kernel.img \
|
||||
-r ${outroot}/${KERNELDIR}/initrd.img \
|
||||
-p ${outroot}/${BOOTDIR}/cdboot.prm \
|
||||
-o ${outroot}/${BOOTDIR}/cdboot.img
|
||||
|
||||
## make boot.iso
|
||||
runcmd mkisofs -o ${outroot}/images/boot.iso \
|
||||
-b ${BOOTDIR}/cdboot.img -c ${BOOTDIR}/boot.cat \
|
||||
-boot-load-size 4 -no-emul-boot \
|
||||
-R -J -V '${isolabel}' -T -graft-points \
|
||||
${BOOTDIR}=${outroot}/${BOOTDIR} \
|
||||
${imggraft}
|
||||
treeinfo images-${basearch} boot.iso images/boot.iso
|
||||
|
@ -6,6 +6,7 @@ PXEBOOTDIR="images/pxeboot"
|
||||
BOOTDIR="isolinux"
|
||||
KERNELDIR=PXEBOOTDIR
|
||||
LIVEDIR="LiveOS"
|
||||
LORAXDIR="usr/share/lorax/"
|
||||
%>
|
||||
|
||||
mkdir ${LIVEDIR}
|
||||
@ -61,11 +62,15 @@ hardlink ${KERNELDIR}/initrd.img ${BOOTDIR}
|
||||
%endif
|
||||
|
||||
## WHeeeeeeee, EFI.
|
||||
## We could remove the basearch restriction someday..
|
||||
<% efiargs=""; efigraft=""; efihybrid="" %>
|
||||
%if exists("boot/efi/EFI/*/gcdx64.efi") and basearch != 'i386':
|
||||
<% efiargs=""; efigraft=""; efihybrid=""; efiarch32=None; efiarch64=None %>
|
||||
%if exists("boot/efi/EFI/*/gcdia32.efi"):
|
||||
<% efiarch32 = 'IA32' %>
|
||||
%endif
|
||||
%if exists("boot/efi/EFI/*/gcdx64.efi"):
|
||||
<% efiarch64 = 'X64' %>
|
||||
%endif
|
||||
%if efiarch32 or efiarch64:
|
||||
<%
|
||||
efiarch = 'X64' if basearch=='x86_64' else 'IA32'
|
||||
efigraft="EFI/BOOT={0}/EFI/BOOT".format(outroot)
|
||||
images = ["images/efiboot.img"]
|
||||
if domacboot:
|
||||
@ -75,9 +80,25 @@ hardlink ${KERNELDIR}/initrd.img ${BOOTDIR}
|
||||
efigraft += " {0}={1}/{0}".format(img,outroot)
|
||||
efihybrid = "--uefi --mac" if domacboot else "--uefi"
|
||||
%>
|
||||
<%include file="efi.tmpl" args="configdir=configdir, KERNELDIR=KERNELDIR, efiarch=efiarch, isolabel=isolabel"/>
|
||||
<%include file="efi.tmpl" args="configdir=configdir, KERNELDIR=KERNELDIR, efiarch32=efiarch32, efiarch64=efiarch64, isolabel=isolabel"/>
|
||||
%endif
|
||||
|
||||
# Create optional product.img and updates.img
|
||||
<% imggraft=""; images=["product", "updates"] %>
|
||||
%for img in images:
|
||||
%if exists("%s/%s/" % (LORAXDIR, img)):
|
||||
installimg ${LORAXDIR}/${img}/ images/${img}.img
|
||||
<% imggraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %>
|
||||
%endif
|
||||
%endfor
|
||||
|
||||
# Inherit iso-graft/ if it exists from external templates
|
||||
<%
|
||||
import os
|
||||
if os.path.exists(workdir + "/iso-graft"):
|
||||
imggraft += " " + workdir + "/iso-graft"
|
||||
%>
|
||||
|
||||
## make boot.iso
|
||||
runcmd mkisofs -o ${outroot}/images/boot.iso \
|
||||
-b ${BOOTDIR}/isolinux.bin -c ${BOOTDIR}/boot.cat \
|
||||
@ -86,6 +107,6 @@ runcmd mkisofs -o ${outroot}/images/boot.iso \
|
||||
${BOOTDIR}=${outroot}/${BOOTDIR} \
|
||||
${KERNELDIR}=${outroot}/${KERNELDIR} \
|
||||
${LIVEDIR}=${outroot}/${LIVEDIR} \
|
||||
${efigraft}
|
||||
${efigraft} ${imggraft}
|
||||
runcmd isohybrid ${efihybrid} ${outroot}/images/boot.iso
|
||||
treeinfo images-${basearch} boot.iso images/boot.iso
|
||||
|
122
src/bin/composer-cli
Executable file
122
src/bin/composer-cli
Executable file
@ -0,0 +1,122 @@
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# composer-cli
|
||||
#
|
||||
# Copyright (C) 2018 Red Hat, Inc.
|
||||
#
|
||||
# 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 logging
|
||||
log = logging.getLogger("composer-cli")
|
||||
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
|
||||
from composer import vernum
|
||||
from composer.cli.help import epilog
|
||||
from composer.cli import main
|
||||
|
||||
VERSION = "{0}-{1}".format(os.path.basename(sys.argv[0]), vernum)
|
||||
|
||||
|
||||
def get_parser():
|
||||
""" Return the ArgumentParser for composer-cli"""
|
||||
|
||||
parser = argparse.ArgumentParser(description="Lorax Composer commandline tool",
|
||||
epilog=epilog,
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
fromfile_prefix_chars="@")
|
||||
|
||||
parser.add_argument("-j", "--json", action="store_true", default=False,
|
||||
help="Output the raw JSON response instead of the normal output.")
|
||||
parser.add_argument("-s", "--socket", default="/run/weldr/api.socket", metavar="SOCKET",
|
||||
help="Path to the socket file to listen on")
|
||||
parser.add_argument("--log", dest="logfile", default=None, metavar="LOG",
|
||||
help="Path to optional logfile")
|
||||
parser.add_argument("-a", "--api", dest="api_version", default="0", metavar="APIVER",
|
||||
help="API Version to use")
|
||||
parser.add_argument("--test", dest="testmode", default=0, type=int, metavar="TESTMODE",
|
||||
help="Pass test mode to compose. 1=Mock compose with fail. 2=Mock compose with finished.")
|
||||
parser.add_argument("-V", action="store_true", dest="showver",
|
||||
help="show program's version number and exit")
|
||||
|
||||
# Commands are implemented by parsing the remaining arguments outside of argparse
|
||||
parser.add_argument('args', nargs=argparse.REMAINDER)
|
||||
|
||||
|
||||
return parser
|
||||
|
||||
def setup_logging(logfile=None):
|
||||
""" Setup logging to console and to an optional logfile
|
||||
|
||||
:param logfile: Optional path to file to store logs in
|
||||
:type logfile: None or str
|
||||
"""
|
||||
log.setLevel(logging.DEBUG)
|
||||
|
||||
sh = logging.StreamHandler()
|
||||
sh.setLevel(logging.INFO)
|
||||
fmt = logging.Formatter("%(asctime)s: %(message)s")
|
||||
sh.setFormatter(fmt)
|
||||
log.addHandler(sh)
|
||||
|
||||
if logfile != None:
|
||||
fh = logging.FileHandler(filename=logfile)
|
||||
fh.setLevel(logging.DEBUG)
|
||||
fmt = logging.Formatter("%(asctime)s %(levelname)s %(name)s: %(message)s")
|
||||
fh.setFormatter(fmt)
|
||||
log.addHandler(fh)
|
||||
|
||||
if __name__ == '__main__':
|
||||
# parse the arguments
|
||||
arg_parser = get_parser()
|
||||
opts = arg_parser.parse_args()
|
||||
|
||||
if opts.showver:
|
||||
print(VERSION)
|
||||
sys.exit(0)
|
||||
|
||||
if opts.logfile != None:
|
||||
logpath = os.path.abspath(os.path.dirname(opts.logfile))
|
||||
if not os.path.isdir(logpath):
|
||||
os.makedirs(logpath)
|
||||
setup_logging(opts.logfile)
|
||||
log.debug("opts=%s", opts)
|
||||
|
||||
if len(opts.args) == 0:
|
||||
log.error("Missing command")
|
||||
sys.exit(1)
|
||||
elif opts.args[0] == "help":
|
||||
arg_parser.print_help()
|
||||
sys.exit(0)
|
||||
elif len(opts.args) == 1:
|
||||
log.error("Missing %s sub-command", opts.args[0])
|
||||
sys.exit(1)
|
||||
|
||||
errors = []
|
||||
|
||||
# Check to see if the socket exists and can be accessed
|
||||
if not os.path.exists(opts.socket):
|
||||
errors.append("%s does not exist" % opts.socket)
|
||||
elif not os.access(opts.socket, os.R_OK|os.W_OK):
|
||||
errors.append("This user cannot access %s" % opts.socket)
|
||||
|
||||
# No point in continuing if there are errors
|
||||
if errors:
|
||||
for e in errors:
|
||||
log.error(e)
|
||||
sys.exit(1)
|
||||
|
||||
sys.exit(main(opts))
|
197
src/bin/image-minimizer
Executable file
197
src/bin/image-minimizer
Executable file
@ -0,0 +1,197 @@
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# image-minimizer: removes files and packages on the filesystem
|
||||
#
|
||||
# Copyright 2007-2010 Red Hat Inc.
|
||||
#
|
||||
# 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; version 2 of the License.
|
||||
#
|
||||
# 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 Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
import glob
|
||||
import optparse
|
||||
import os
|
||||
import sys
|
||||
import rpm
|
||||
|
||||
class ImageMinimizer:
|
||||
filename = ''
|
||||
dryrun = False
|
||||
verbose = False
|
||||
prefix = None
|
||||
drops = set()
|
||||
visited = set()
|
||||
drops_rpm = set()
|
||||
ts = None
|
||||
|
||||
def __init__(self, _filename, root, dryrun, verbose):
|
||||
self.filename = _filename
|
||||
self.prefix = root
|
||||
self.dryrun = dryrun
|
||||
self.verbose = verbose
|
||||
self.ts = None
|
||||
|
||||
# Recursively adds all files and directories.
|
||||
# This is done becuase globbing does not allow
|
||||
# ** for arbitrary nesting.
|
||||
def add_directory(self, files, dirname):
|
||||
self.visited.add(dirname)
|
||||
for root, dirs, items in os.walk(dirname):
|
||||
for _dir in dirs:
|
||||
self.visited.add(os.path.join(root, _dir))
|
||||
for name in items:
|
||||
files.add(os.path.join(root, name))
|
||||
|
||||
def add_pattern(self, files, pattern):
|
||||
globs = glob.glob(pattern)
|
||||
if self.verbose and len(globs) == 0:
|
||||
print "%s file not found" % pattern
|
||||
for g in globs:
|
||||
if os.path.isdir(g):
|
||||
self.add_directory(files, g)
|
||||
else:
|
||||
files.add(g)
|
||||
|
||||
def add_pattern_rpm(self, rpms, pattern):
|
||||
if self.ts is None:
|
||||
if self.prefix is None:
|
||||
raise Exception ('Must specify installation root for droprpm/keeprpm')
|
||||
self.ts = rpm.TransactionSet(self.prefix)
|
||||
mi = self.ts.dbMatch()
|
||||
mi.pattern('name', rpm.RPMMIRE_GLOB, pattern)
|
||||
not_found = True
|
||||
for hdr in mi:
|
||||
not_found = False
|
||||
rpms.add(hdr['name'])
|
||||
if self.verbose and not_found:
|
||||
print "%s package not found" % pattern
|
||||
|
||||
# Parses each line in the ifle
|
||||
def parse_line(self, line):
|
||||
command = ""
|
||||
pattern = ""
|
||||
tok = line.split(None,1)
|
||||
if len(tok) > 0:
|
||||
command = tok[0].lower()
|
||||
if len(tok) > 1:
|
||||
pattern = tok[1].strip()
|
||||
|
||||
# Strip out all the comments and blank lines
|
||||
if not (command.startswith('#') or command==''):
|
||||
if command == 'keep':
|
||||
if self.prefix is not None :
|
||||
pattern = pattern.lstrip('/')
|
||||
pattern = os.path.join(self.prefix, pattern)
|
||||
keeps = set()
|
||||
self.add_pattern(keeps, pattern)
|
||||
self.drops.difference_update(keeps)
|
||||
keeps = None
|
||||
elif command == 'drop':
|
||||
if self.prefix is not None :
|
||||
pattern = pattern.lstrip('/')
|
||||
pattern = os.path.join(self.prefix, pattern)
|
||||
self.add_pattern(self.drops, pattern)
|
||||
elif command == 'keeprpm':
|
||||
keeps_rpm = set()
|
||||
self.add_pattern_rpm(keeps_rpm, pattern)
|
||||
self.drops_rpm.difference_update(keeps_rpm)
|
||||
keeps_rpm = None
|
||||
elif command == 'droprpm':
|
||||
self.add_pattern_rpm(self.drops_rpm, pattern)
|
||||
else:
|
||||
raise Exception ('Unknown Command: ' + command)
|
||||
|
||||
def remove(self):
|
||||
for tag in sorted(self.drops, reverse=True):
|
||||
self.visited.add(os.path.split(tag)[0])
|
||||
if os.path.isdir(tag):
|
||||
self.visited.add(tag)
|
||||
else:
|
||||
if self.dryrun:
|
||||
print 'rm ' + tag
|
||||
else:
|
||||
if self.verbose:
|
||||
print 'rm ' + tag
|
||||
os.remove(tag)
|
||||
|
||||
#remove all empty directory. Every 8k counts!
|
||||
for _dir in sorted(self.visited, reverse=True):
|
||||
if len(os.listdir(_dir)) == 0:
|
||||
if self.dryrun:
|
||||
print 'rm -rf ' + _dir
|
||||
else:
|
||||
if self.verbose:
|
||||
print 'rm -rf ' + _dir
|
||||
os.rmdir(_dir)
|
||||
|
||||
def remove_rpm(self):
|
||||
|
||||
def runCallback(reason, amount, total, key, client_data):
|
||||
if self.verbose and reason == rpm.RPMCALLBACK_UNINST_STOP:
|
||||
print key, "erased"
|
||||
|
||||
if len(self.drops_rpm) == 0:
|
||||
return
|
||||
|
||||
for pkg in self.drops_rpm:
|
||||
if self.dryrun:
|
||||
print "erasing ", pkg
|
||||
else:
|
||||
self.ts.addErase(pkg)
|
||||
if not self.dryrun:
|
||||
# skip ts.check(), equivalent to --nodeps
|
||||
self.ts.run(runCallback, "erase")
|
||||
|
||||
def filter(self):
|
||||
for line in (open(self.filename).readlines()):
|
||||
self.parse_line(line.strip())
|
||||
self.remove()
|
||||
self.remove_rpm()
|
||||
|
||||
|
||||
def parse_options():
|
||||
usage = "usage: %prog [options] filename"
|
||||
parser = optparse.OptionParser(usage=usage)
|
||||
|
||||
parser.set_defaults(root=os.environ.get('INSTALL_ROOT', '/mnt/sysimage/'), dry_run=False)
|
||||
|
||||
parser.add_option("-i", "--installroot", type="string", dest="root",
|
||||
help="Root path to prepend to all file patterns and installation root for RPM "
|
||||
"operations. Defaults to INSTALL_ROOT or /mnt/sysimage/")
|
||||
|
||||
parser.add_option("--dryrun", action="store_true", dest="dryrun",
|
||||
help="If set, no filesystem changes are made.")
|
||||
|
||||
parser.add_option("-v", "--verbose", action="store_true", dest="verbose",
|
||||
help="Display every action as it is performed.")
|
||||
|
||||
(_options, _args) = parser.parse_args()
|
||||
if len(args) == 0:
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
|
||||
return (_options, _args)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
(options, args) = parse_options()
|
||||
filename = args[0]
|
||||
minimizer = ImageMinimizer(filename, options.root, options.dryrun,
|
||||
options.verbose)
|
||||
minimizer.filter()
|
||||
except SystemExit, e:
|
||||
sys.exit(e.code)
|
||||
except KeyboardInterrupt, e:
|
||||
print >> sys.stderr, "Aborted at user request"
|
||||
except Exception, e:
|
||||
print e
|
||||
sys.exit(1)
|
113
src/bin/mk-s390-cdboot
Executable file
113
src/bin/mk-s390-cdboot
Executable file
@ -0,0 +1,113 @@
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# mk-s390-cdboot
|
||||
#
|
||||
# Copyright (C) 2017 Red Hat, Inc.
|
||||
#
|
||||
# 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/>.
|
||||
#
|
||||
from __future__ import print_function
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import shutil
|
||||
from struct import pack
|
||||
import sys
|
||||
|
||||
|
||||
INITRD_START = 0x0000000000800000
|
||||
START_PSW_ADDRESS = 0x80010000
|
||||
KERNEL_PSW_ADDRESS = 0x04
|
||||
KERNEL_INITRD_START = 0x10408
|
||||
KERNEL_INITRD_SIZE = 0x10410
|
||||
KERNEL_CMDLINE = 0x10480
|
||||
# See https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/s390/include/uapi/asm/setup.h
|
||||
KERNEL_CMDLINE_SIZE = 896
|
||||
|
||||
|
||||
def setup_parser():
|
||||
""" Setup the cmdline parser"""
|
||||
parser = argparse.ArgumentParser(description="Create s390 boot image")
|
||||
parser.add_argument("-i", dest="kernel", required=True, metavar="KERNEL",
|
||||
help="The kernel.img file")
|
||||
parser.add_argument("-r", dest="ramdisk", required=True, metavar="RAMDISK",
|
||||
help="The initrd.img file")
|
||||
parser.add_argument("-p", dest="parmfile", required=True, metavar="PARMFILE",
|
||||
help="The parm file")
|
||||
parser.add_argument("-o", dest="outfile", required=True, metavar="OUTFILE",
|
||||
help="The output image file")
|
||||
return parser
|
||||
|
||||
|
||||
def copy_kernel(kernel, outfile):
|
||||
""" Copy the kernel to the outfile"""
|
||||
shutil.copy2(kernel, outfile)
|
||||
|
||||
|
||||
def append_ramdisk(ramdisk, outfile):
|
||||
""" Append the ramdisk to the kernel and return its size"""
|
||||
with open(ramdisk, "rb") as ram_fd:
|
||||
with open(outfile, "r+b") as out_fd:
|
||||
out_fd.seek(INITRD_START)
|
||||
out_fd.write(ram_fd.read())
|
||||
return os.stat(ramdisk).st_size
|
||||
|
||||
|
||||
def configure_kernel(outfile, parmfile, size):
|
||||
""" Configure the kernel with the ramdisk start address and size."""
|
||||
with open(outfile, "r+b") as out_fd:
|
||||
# Change the start PSW address
|
||||
out_fd.seek(KERNEL_PSW_ADDRESS)
|
||||
out_fd.write(pack(">L", START_PSW_ADDRESS))
|
||||
|
||||
# Write the initrd start and size
|
||||
out_fd.seek(KERNEL_INITRD_START)
|
||||
out_fd.write(pack(">Q", INITRD_START))
|
||||
out_fd.seek(KERNEL_INITRD_SIZE)
|
||||
out_fd.write(pack(">Q", size))
|
||||
|
||||
# Erase the previous COMMAND_LINE, write zeros
|
||||
out_fd.seek(KERNEL_CMDLINE)
|
||||
out_fd.write("\0" * KERNEL_CMDLINE_SIZE)
|
||||
|
||||
# Write the first line of the parmfile
|
||||
cmdline = open(parmfile, "r").readline().strip()
|
||||
out_fd.seek(KERNEL_CMDLINE)
|
||||
out_fd.write(cmdline)
|
||||
|
||||
|
||||
def main():
|
||||
parser = setup_parser()
|
||||
args = parser.parse_args()
|
||||
|
||||
errors = []
|
||||
for f in [args.kernel, args.ramdisk, args.parmfile]:
|
||||
if not os.path.exists(f):
|
||||
errors.append("ERROR: %s is missing" % f)
|
||||
if errors:
|
||||
map(print, errors)
|
||||
sys.exit(1)
|
||||
|
||||
print("Creating bootable CD-ROM image...")
|
||||
print("kernel is : %s" % args.kernel)
|
||||
print("ramdisk is : %s" % args.ramdisk)
|
||||
print("parmfile is: %s" % args.parmfile)
|
||||
print("outfile is : %s" % args.outfile)
|
||||
|
||||
copy_kernel(args.kernel, args.outfile)
|
||||
size = append_ramdisk(args.ramdisk, args.outfile)
|
||||
configure_kernel(args.outfile, args.parmfile, size)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
27
src/composer/__init__.py
Normal file
27
src/composer/__init__.py
Normal file
@ -0,0 +1,27 @@
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# composer-cli
|
||||
#
|
||||
# Copyright (C) 2018 Red Hat, Inc.
|
||||
#
|
||||
# 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/>.
|
||||
#
|
||||
|
||||
# get composer version
|
||||
try:
|
||||
import composer.version
|
||||
except ImportError:
|
||||
vernum = "devel"
|
||||
else:
|
||||
vernum = composer.version.num
|
56
src/composer/cli/__init__.py
Normal file
56
src/composer/cli/__init__.py
Normal file
@ -0,0 +1,56 @@
|
||||
#
|
||||
# composer-cli
|
||||
#
|
||||
# Copyright (C) 2018 Red Hat, Inc.
|
||||
#
|
||||
# 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 logging
|
||||
log = logging.getLogger("composer-cli")
|
||||
|
||||
from composer.cli.blueprints import blueprints_cmd
|
||||
from composer.cli.modules import modules_cmd
|
||||
from composer.cli.projects import projects_cmd
|
||||
from composer.cli.compose import compose_cmd
|
||||
from composer.cli.sources import sources_cmd
|
||||
from composer.cli.status import status_cmd
|
||||
|
||||
command_map = {
|
||||
"blueprints": blueprints_cmd,
|
||||
"modules": modules_cmd,
|
||||
"projects": projects_cmd,
|
||||
"compose": compose_cmd,
|
||||
"sources": sources_cmd,
|
||||
"status": status_cmd
|
||||
}
|
||||
|
||||
|
||||
def main(opts):
|
||||
""" Main program execution
|
||||
|
||||
:param opts: Cmdline arguments
|
||||
:type opts: argparse.Namespace
|
||||
"""
|
||||
|
||||
# Making sure opts.args is not empty (thus, has a command and subcommand)
|
||||
# is already handled in src/bin/composer-cli.
|
||||
if opts.args[0] not in command_map:
|
||||
log.error("Unknown command %s", opts.args[0])
|
||||
return 1
|
||||
else:
|
||||
try:
|
||||
return command_map[opts.args[0]](opts)
|
||||
except Exception as e:
|
||||
log.error(str(e))
|
||||
return 1
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user