Compare commits
917 Commits
Author | SHA1 | Date | |
---|---|---|---|
3edb672410 | |||
733fdca042 | |||
7cc9629788 | |||
df3986e8dc | |||
e674b316c3 | |||
7611760c3c | |||
056ae579a9 | |||
6f9ab14ffe | |||
c9eaf7d83f | |||
693f447bf4 | |||
6e23aaeeb0 | |||
d32be911b7 | |||
89efc824f9 | |||
c69e3d414f | |||
b9f264f705 | |||
737179b81b | |||
2687e72643 | |||
0527aee96e | |||
3ac6a38e25 | |||
f156fe0b1e | |||
625d5f1d25 | |||
e30820261a | |||
5c03184c94 | |||
0ed5ddf6b9 | |||
f39787c6ec | |||
11145f686a | |||
21042e4677 | |||
e4176dfd94 | |||
1787aa2310 | |||
d1f77aa354 | |||
c2cfd7739a | |||
e7745c2dd4 | |||
ce8f541520 | |||
30594aa84b | |||
2df175ee57 | |||
fbb05f8dee | |||
9d8e3c53d1 | |||
2886c40aa2 | |||
e50a686536 | |||
8570d12ce6 | |||
5d6c6b4053 | |||
90bda71351 | |||
7d7b88a427 | |||
5cc1826744 | |||
0bf0f48ad0 | |||
b818e11c73 | |||
ad14de35ea | |||
54a5b5485d | |||
5a06851b0f | |||
a855b04c21 | |||
e5315532a1 | |||
db1467b8fd | |||
3123d8e65e | |||
d9b1485354 | |||
744a3fa0ac | |||
2803868e16 | |||
4f7bc3f6bf | |||
8cdc3cb2bb | |||
1b7b2744ba | |||
b9951d269d | |||
4ffd43f2e0 | |||
ddfbc00f78 | |||
e33f2a5afe | |||
f245e17138 | |||
efe31b8c9d | |||
5cb4112cd0 | |||
f424f41561 | |||
e5a147351d | |||
771bd1c563 | |||
776cd96fd7 | |||
471315dcbb | |||
bfdf9b5bef | |||
108215fce4 | |||
6ddb870a56 | |||
c0b130fd29 | |||
ae20e49440 | |||
2e5101d6a2 | |||
cff4833370 | |||
9c6e7a8750 | |||
e9d52d8f35 | |||
d3d86c6ff9 | |||
b761cb610c | |||
6e36d26471 | |||
2344a63da7 | |||
61dc4c1154 | |||
f36be0dfb2 | |||
63674ef02b | |||
ee80091650 | |||
e5ab8dd240 | |||
8b0d4713b5 | |||
1025357631 | |||
2a023070e7 | |||
27a82e439b | |||
92157dee42 | |||
efe9fbbbdb | |||
dc94b5c0cf | |||
5e876652f8 | |||
9c1a8e67b2 | |||
81cefdc51e | |||
c5796d6b2d | |||
6919352a59 | |||
7ba7d1c501 | |||
9d7594356e | |||
c0d4e950e9 | |||
e071b81ad7 | |||
d5ff03481d | |||
3ecb127f33 | |||
432ab6f915 | |||
01c14bbeee | |||
0913c2ed9f | |||
61433fbf9c | |||
e4e0a55073 | |||
e08c66bc89 | |||
0d1193278c | |||
3ead1f37bc | |||
93de256914 | |||
5e33a36bcd | |||
9e1351529a | |||
c9e8110ece | |||
c671cb399d | |||
1a764f15ff | |||
027f9b8c45 | |||
2293239614 | |||
9fc07bb4e7 | |||
7b15f945ba | |||
f2cfaeef13 | |||
c36b8fb577 | |||
68a42d0f6a | |||
306e77f307 | |||
b006bb44cd | |||
6963d4109a | |||
9665d5a5d0 | |||
137dfa9674 | |||
440d2aa1fa | |||
f4047a3b64 | |||
af1bdd3ca5 | |||
85e77e4bda | |||
a56ec0e0f1 | |||
d6e78b9665 | |||
1699cc5f44 | |||
2ae8406a4b | |||
1db7d08e82 | |||
aba08c2600 | |||
e83b6d1036 | |||
af9096df0c | |||
89f0c0974d | |||
fb434c2a96 | |||
f7ab14ff7e | |||
f46812f07a | |||
e76a6a6a84 | |||
45bf006040 | |||
d5cc9ca031 | |||
06686d98f1 | |||
9a018a6f51 | |||
a932a1a7cd | |||
cb09f4db83 | |||
f8952225cf | |||
4f7bcbcede | |||
5cdd93d3d8 | |||
7030b8783c | |||
8a682edade | |||
a85cdf6ddc | |||
d75783b0eb | |||
11e6021e77 | |||
938307cb69 | |||
8b49084d91 | |||
98c1ac8843 | |||
28d42b00f3 | |||
dfdfd59eae | |||
6af03598c8 | |||
b3a44d07ad | |||
111463a861 | |||
fe839f4c7b | |||
ba8e1a1dcc | |||
a75b91e2e9 | |||
dfb5fc31d8 | |||
40c9cb968c | |||
580e20b342 | |||
da28d8b429 | |||
b03df72236 | |||
7a4870f8c8 | |||
a4ed8d9a45 | |||
3d54e3771d | |||
4607f0f3c2 | |||
![]() |
4bf4f6d1f3 | ||
![]() |
47e058330f | ||
026b8496fd | |||
![]() |
31e43dabd7 | ||
b191552cb0 | |||
1d4c4b4b04 | |||
b3983edd2a | |||
543d2d2f79 | |||
f1a9c7a5e5 | |||
ad44a1c2e5 | |||
44f719b2e6 | |||
40d6605472 | |||
f64bbbf0ee | |||
01e940b953 | |||
e453ed2533 | |||
434a8bce16 | |||
337f24c447 | |||
dac4cb6a73 | |||
c6d00839d2 | |||
24d05192d1 | |||
45c40d735b | |||
c921d2a902 | |||
edf956f1bb | |||
85842f3c41 | |||
e395720902 | |||
4603b1a6a0 | |||
a91542b47f | |||
51c4c3317c | |||
82a7952e2a | |||
d1d32de841 | |||
037cb1a9e2 | |||
04d037f3ed | |||
725ba6d2c2 | |||
246b9473aa | |||
9555874ec3 | |||
e2e6b76e4a | |||
2ec6c21ec8 | |||
bc1a740f35 | |||
ada594a30b | |||
856c948eeb | |||
cc1b45d0fc | |||
28ceb74b44 | |||
751e372bfd | |||
c5e15368a1 | |||
14beb13b7c | |||
f474657be6 | |||
109797502a | |||
bb7a4fc84c | |||
e0e6178aa5 | |||
07bea2c842 | |||
7254661f45 | |||
fb285e0319 | |||
9d5713c1f9 | |||
d083d87c93 | |||
9ed51b43f8 | |||
e2b2f49214 | |||
c147a0cef3 | |||
05fd86acc7 | |||
10177a16de | |||
b18b24c22d | |||
f4f9b69257 | |||
74190f7264 | |||
9fad9924ef | |||
1d7e2d0949 | |||
7268cecce6 | |||
aa269661cb | |||
f7b3f90ba0 | |||
1c4c1c3faf | |||
ccf3c67278 | |||
1b12cee1fb | |||
45976f45c2 | |||
1960c0c94e | |||
4f206d732c | |||
d666859b83 | |||
4ee346b521 | |||
c9796b2562 | |||
668eec1497 | |||
abd178bf0d | |||
b0db9af448 | |||
d7763fd8b7 | |||
b7492fc34e | |||
08c081ac33 | |||
98129cd400 | |||
99c0ccd66d | |||
2283a66201 | |||
412ad542f4 | |||
8f1810f52b | |||
640a2b1158 | |||
7f143c0fd4 | |||
e873ad523e | |||
625b45582a | |||
300935c83e | |||
43330297e3 | |||
046ba0d323 | |||
7fd6b81742 | |||
4ba6909e4b | |||
0c21e704c3 | |||
c8b8f107a1 | |||
979c39c01b | |||
fd5b7872a3 | |||
ad1898388f | |||
c33ff4c5ef | |||
247b449752 | |||
28f4d398c2 | |||
f28df5266c | |||
1210ca7382 | |||
46416f713c | |||
60a8796f4c | |||
6f01bac2be | |||
175f6edce6 | |||
73db7284cf | |||
5fc55cc3e7 | |||
21274af799 | |||
f7f8889bba | |||
747c563a2b | |||
4fdd23c8eb | |||
5457228b02 | |||
a55f9c4a04 | |||
ac7efadaae | |||
528483893f | |||
d5c51622c2 | |||
f7d036a60f | |||
87b8d5b5b0 | |||
0866bbd4d9 | |||
8daf4ec6a1 | |||
ef1c8f2996 | |||
269379f3a2 | |||
aae3703558 | |||
f8750935a8 | |||
c202a279dd | |||
921caa1acc | |||
ce98445e41 | |||
2b5ed18ee3 | |||
29c54e7548 | |||
de53bae548 | |||
600b8246fa | |||
914f635fe1 | |||
a774497248 | |||
5a444a65b9 | |||
425e8a5642 | |||
52c3d7a690 | |||
d5f8fa4fff | |||
5fe5137328 | |||
74cf35b47c | |||
046862389d | |||
3dfe5427e9 | |||
488a2574a8 | |||
13ce5b8254 | |||
d03b04f822 | |||
68794910a6 | |||
7fad3635e2 | |||
f65dda68e4 | |||
bc7eebc487 | |||
8af50f4b91 | |||
458ccd3df1 | |||
c97bc6a92e | |||
ae70f66089 | |||
f508dae60f | |||
60a4c73857 | |||
85ac283eff | |||
80db4629f6 | |||
4400ba758a | |||
ae7ffeb7b1 | |||
9bfd515cac | |||
a5a41d9b1e | |||
7e5859eee5 | |||
b3429603c9 | |||
c44d1d31f7 | |||
aa4eb4a481 | |||
4c58b127af | |||
991f94b48c | |||
fb96852bf6 | |||
386fc0d070 | |||
c2f43e6b6d | |||
8cb3b2fc57 | |||
5967541159 | |||
d79e218dfc | |||
ccbfff4366 | |||
50dee34e6f | |||
99d5069b55 | |||
a825f3b931 | |||
8c143e16c3 | |||
7e26ae1e0c | |||
cbb34ecd3f | |||
7524a2869a | |||
9b03dcd69f | |||
c7eca6ae7d | |||
8b4067ab49 | |||
3971dca710 | |||
c66eee117e | |||
7c135faa60 | |||
72c3512072 | |||
0891e89278 | |||
d197fc0420 | |||
d028c47842 | |||
b068a12c02 | |||
d7c981d257 | |||
7ec538187b | |||
43c5445603 | |||
0054d4de70 | |||
6a03853aa7 | |||
6462bec2c6 | |||
7a728a9d34 | |||
df788f6159 | |||
edaaec19ee | |||
41089f7ed0 | |||
af2b74f31f | |||
de5727e7e2 | |||
49c8e756e6 | |||
71bb5aaaec | |||
44b1954a43 | |||
d70825c296 | |||
45d912d495 | |||
3292686e33 | |||
5139c09d70 | |||
25a4f9640d | |||
ba29496150 | |||
f72dd86584 | |||
01325d0c23 | |||
45da726704 | |||
dcb637e054 | |||
9c6f606daa | |||
764dd53bf8 | |||
307fa4827a | |||
45c6422e62 | |||
a9004fa1d2 | |||
434a87019f | |||
6d0b122a8f | |||
af969e4876 | |||
b0d9cd91bb | |||
0c4af8a27a | |||
7ff32caed0 | |||
3293d09e90 | |||
e6be47eb32 | |||
1151b5c01a | |||
2f86786c94 | |||
e9d0aeebaf | |||
0193e7c35d | |||
7583dedaea | |||
96c146e0c5 | |||
4f7cb900d2 | |||
9d991e2d43 | |||
e3ba5800c0 | |||
48c662be2e | |||
566f1d7afb | |||
f34b63a51e | |||
2873638aa5 | |||
3a4cc1258d | |||
22adfe63ee | |||
e74480cccc | |||
56b18a4eb6 | |||
ed180b5bfb | |||
4ad84c0c47 | |||
a5be8d8770 | |||
19267dd993 | |||
dbf965db90 | |||
3ac0859c0a | |||
a60f23a2af | |||
6cfb62b92d | |||
305a1808bf | |||
6184fde5a2 | |||
7676c7635a | |||
775bc8eee6 | |||
d620760681 | |||
fe0e2718d8 | |||
300d42ab04 | |||
16114f54d6 | |||
827dd141b7 | |||
e78ec7f61c | |||
0ae44bd3ed | |||
1a2f6c4335 | |||
cdd152f716 | |||
04e37db5cb | |||
75385a76bf | |||
c1d98a01dc | |||
ba2c8063a8 | |||
e621a5671e | |||
6f1b8b4926 | |||
a88c24e747 | |||
bad6c4811a | |||
4b85c93251 | |||
9600fb801a | |||
7181725056 | |||
6a6b2a5f32 | |||
e0d6910271 | |||
c7286d1406 | |||
4d2bf89e23 | |||
0bbcef690b | |||
51f4e92c3d | |||
8b8cffd9f8 | |||
d4137906be | |||
6e142b7e61 | |||
1a3550ed9a | |||
c58a6ccaf7 | |||
7bc3af2869 | |||
4c43b01739 | |||
174c08759e | |||
e493b49811 | |||
66e1674c00 | |||
f1dca506fb | |||
b5e2417514 | |||
7f503ae2ab | |||
96449de8d6 | |||
6e45dfe457 | |||
60f3e4d344 | |||
a3c5ffbd88 | |||
4535b67045 | |||
7356c1da73 | |||
1c3c07f8b2 | |||
db57d7958f | |||
a4e758ec5d | |||
777bb1fc68 | |||
9c86a6ff6e | |||
f9d3f906f2 | |||
fa6e87a425 | |||
5f68f3eb50 | |||
33b7dbabd8 | |||
49df32157d | |||
daafe41e63 | |||
3c8b6f8d5f | |||
045885c77a | |||
1b1589e046 | |||
13440e2fd9 | |||
ee3b58354c | |||
56972a669c | |||
952b4edcef | |||
51109be813 | |||
82c366957f | |||
2fa28d5cd3 | |||
af006c4db9 | |||
e20757b45e | |||
cb21c53895 | |||
04f2f91d08 | |||
4bc810843e | |||
7299aeb98c | |||
eee9a65c70 | |||
6b33929b17 | |||
2b1ad2b531 | |||
a0752e9d94 | |||
ad303993e0 | |||
7408760ca7 | |||
1ec281d746 | |||
5d828c4894 | |||
9481cad10c | |||
f17dccaaf9 | |||
a61452c816 | |||
86963ec09f | |||
9eaed33548 | |||
70165cb09f | |||
ed0659f2a1 | |||
f0ae5ae118 | |||
9a37329cc1 | |||
6f6fc747e2 | |||
7954e7fcc8 | |||
ab535b759b | |||
625f93d80e | |||
4a8c5d1e3d | |||
151e083a49 | |||
7c86854605 | |||
20d083b4f7 | |||
4a46cd33f0 | |||
bdd859c5ae | |||
bda961fc5b | |||
f35e9e8560 | |||
bc4c8cbb81 | |||
be4985f61a | |||
0e6f55abb9 | |||
191d3c223d | |||
2d84c44c5b | |||
b40388f3a5 | |||
48e43599b8 | |||
a7e6228669 | |||
0b595837ba | |||
4f520db786 | |||
4f11cc40d6 | |||
9132d6d6ec | |||
b07b894e01 | |||
72d7d15cca | |||
9fb19b4cef | |||
6c3ae24a67 | |||
528a281e30 | |||
489b31ded9 | |||
7bd0a95b3e | |||
6130c2ff7f | |||
9c5b46b372 | |||
f31f5f72ad | |||
ab8ede8c28 | |||
312c7dcc1b | |||
5bf55e5999 | |||
b6ff411b8f | |||
1569bfb29a | |||
45573e23f7 | |||
1e576da4ae | |||
eeef48dfe1 | |||
ea45055864 | |||
efc60b36ab | |||
36eec4a517 | |||
2afffefa75 | |||
6ec37f6af4 | |||
6e8c200803 | |||
cf629e62e1 | |||
a66c0c231f | |||
52e838e383 | |||
8ad2e4c1e1 | |||
7fb81a0bc9 | |||
dbc3daa737 | |||
aff1c15931 | |||
8e17fb1fb3 | |||
a916180ef2 | |||
0372a5c44c | |||
7d1ec90345 | |||
c9886925a3 | |||
72e0c369c3 | |||
f4725018aa | |||
1267056d2f | |||
3f105f12d5 | |||
f131e21177 | |||
d99718e692 | |||
1aee0cb4e6 | |||
f05382cdac | |||
747c056aec | |||
1ee4de04c4 | |||
e4f154efc6 | |||
ef00e07b21 | |||
377ca5e82f | |||
2f448d542d | |||
2cc24119b5 | |||
65bd363a13 | |||
0b39b2324b | |||
d1a1d4d664 | |||
46fbec7974 | |||
c541958828 | |||
e2ea2ead3c | |||
eacc23902f | |||
8e404c4f65 | |||
1b922757c0 | |||
70fedc230c | |||
eca8c11900 | |||
ce52d25855 | |||
a76d28e9fd | |||
070f5bfff6 | |||
3f464145aa | |||
335ca05aaa | |||
04717850a5 | |||
c659159188 | |||
e3344f512e | |||
f663e59746 | |||
796898b528 | |||
4f9939715b | |||
80ae9d74bd | |||
2a6cd4ddec | |||
1f4362c226 | |||
6df782178d | |||
302986d345 | |||
e1311bb5c5 | |||
63ab5fe49c | |||
f9f0ffc4ab | |||
d4591dfe8e | |||
bef927cc3b | |||
5d3f576994 | |||
084b96a65b | |||
8b3a7a2cac | |||
c25160c63b | |||
d5f4ae25c0 | |||
f8f731e3ed | |||
e4b7714799 | |||
6f1d5e5947 | |||
4aaded5ab9 | |||
f20cc48176 | |||
9e4ccaef00 | |||
8f9ddb5bb2 | |||
e01cabb65d | |||
8482d61288 | |||
a264b3e484 | |||
262048fee5 | |||
8c22012d13 | |||
dec100b23b | |||
c82c90840e | |||
d535df3629 | |||
0365c5483c | |||
8ce9821095 | |||
5b0f13dde1 | |||
fec6b2fb8b | |||
151433b85c | |||
a99f313014 | |||
540e718180 | |||
78e0a8e99c | |||
027b416398 | |||
c03411536e | |||
1dbe02f6af | |||
2394edf7da | |||
fc467cb250 | |||
9d8b32bcd1 | |||
9084e7eb34 | |||
a84775ce48 | |||
3bbabbf811 | |||
c1a536be52 | |||
2daf190c60 | |||
0b468307f7 | |||
836c933949 | |||
2991e63d5b | |||
52bb0d584f | |||
bab9c501e5 | |||
4593ad8f8e | |||
8e5ad225f1 | |||
a4b83564c8 | |||
b3e6ff6092 | |||
ee2e411856 | |||
e44003526f | |||
396728a5d8 | |||
a6160b308a | |||
2fb17f7402 | |||
42c6fa6218 | |||
5061d4b6e4 | |||
14c56673a1 | |||
a2480ec269 | |||
95aa12fb25 | |||
f233ae1bca | |||
f908e1ce1d | |||
999fb7f78d | |||
37a2dce795 | |||
ab4148c0ac | |||
6970b5dcec | |||
37a2ff3d8d | |||
8f4a5acb06 | |||
4a7b14b929 | |||
8a6678cc0c | |||
e9b574d83d | |||
2561f67213 | |||
38f21aa312 | |||
d5846bab1d | |||
8fa58e24e3 | |||
20df6c462f | |||
3a24e8301e | |||
31fb39d642 | |||
528d5795ec | |||
a43359c760 | |||
2177e6acc6 | |||
9a777b3307 | |||
a5fcf7858f | |||
af3bb37f3d | |||
fbad98660d | |||
f570438117 | |||
3d1b826976 | |||
e800376e40 | |||
0805f4f522 | |||
225060c0b1 | |||
ad88c99fc5 | |||
532d21d2a4 | |||
c52031b38a | |||
ca4de19902 | |||
02f52af289 | |||
f2b6381943 | |||
6192c0ab25 | |||
7a385357de | |||
b6b7fa94ca | |||
e58ff74d83 | |||
c6d0fe5e95 | |||
c5ef5ceea6 | |||
5411b3b1f9 | |||
748c2f7ab0 | |||
367acfe620 | |||
ad19121f6b | |||
feb00bcf11 | |||
fa3d3b48b1 | |||
b266663d8a | |||
286d1fe959 | |||
67f29ddea4 | |||
a8fa7227b8 | |||
e9e4e6a56e | |||
e5f0df2e18 | |||
27a2ab0c01 | |||
11b87fdfd1 | |||
87edaad648 | |||
83d6db3072 | |||
f34f32a7a3 | |||
35a55f07d1 | |||
5524d3f245 | |||
e6e73bb8aa | |||
e79658e0c5 | |||
04681449a0 | |||
96447b9430 | |||
739a94d44d | |||
a7767f7983 | |||
683d5df062 | |||
ed1633a30b | |||
b920641fca | |||
fd9105fa44 | |||
6366256c52 | |||
fbc1a5cc9b | |||
e3cd3cec3f | |||
c552d2de56 | |||
62a59e51f4 | |||
4b7d4f4c04 | |||
c95d1cd39a | |||
4e1e5a44ca | |||
5aa60a3367 | |||
6a4e6a7146 | |||
24a8839fec | |||
24812c1795 | |||
390233a4a2 | |||
2425cbe0f8 | |||
96b1866049 | |||
a7ee78fb7f | |||
b278b175e3 | |||
9983e499a4 | |||
e37cc8fad3 | |||
2980d15769 | |||
190519d968 | |||
4a4094c493 | |||
d735b7b695 | |||
8d486dc4e3 | |||
db24c7084f | |||
3ccd4edc7d | |||
b9dc5ca71e | |||
b4ade73a8f | |||
44fe622ac8 | |||
2a6d0899ca | |||
94615de67a | |||
d2a56d6f1f | |||
f3ba5e3b7c | |||
40babfe24a | |||
f4f49c048c | |||
87d8797666 | |||
cbf79b19af | |||
5c466d8c2c | |||
9eb566acf5 | |||
a08278896a | |||
9710cf7e70 | |||
45df4e36dd | |||
9995f9583c | |||
538b84fbe5 | |||
5c9144f0b9 | |||
ca5c076718 | |||
361f1b287f | |||
8854469a64 | |||
f0a71e4598 | |||
830a33b96f | |||
40f5347656 | |||
2fbc599113 | |||
5bef9b104a | |||
96afb2a10f | |||
4b212d85ba | |||
30e5ddabbb | |||
55c57551eb | |||
409e4062f1 | |||
208f30ddad | |||
f388f27495 | |||
cdbcddb7f4 | |||
ddf9d7c71c | |||
7f06888e34 | |||
8a334183bb | |||
b710461786 | |||
e52d6c6558 | |||
9fa8e3c19b | |||
c3b9bba98a | |||
35334b63cd | |||
c00d9e42ed | |||
2fc7392fe1 | |||
f85cd8aafb | |||
de383beab1 | |||
a7fd880ea4 | |||
c01eb20bda | |||
04b723f512 | |||
dcf0e613e1 | |||
75654610f7 | |||
eb0a3be78e | |||
d251a4e764 | |||
2fd51b65a6 | |||
d056be4a2a | |||
63e78f44ef | |||
64699c045d | |||
22acf0a947 | |||
18b25016ab | |||
b8bf04b689 | |||
d57839dc3c | |||
6e67302691 | |||
b7600aa43b | |||
a49d6e2a24 | |||
16c1936e65 | |||
c6b6dd41c9 | |||
d8ab7f74ac | |||
0204a21aeb | |||
3a9bf0492e | |||
a730609280 | |||
ce0193f64b | |||
1eba9a75af | |||
c669e8fa57 | |||
f0f7a6ff3e | |||
8fced87f34 | |||
9fe17b3593 | |||
f5db579658 | |||
3653f7db5a | |||
7091ecff64 | |||
34dbba9991 | |||
470d7cfe41 | |||
e4b77298bc | |||
28bb531203 | |||
317dbca756 | |||
01b9a6804f | |||
fc75fcd960 | |||
50580856f0 | |||
12c521cfb2 | |||
![]() |
86a5787510 | ||
e74d9e4a46 | |||
9218941135 | |||
fcacf64679 | |||
01ea57ea6d | |||
9fe71b3e11 | |||
8143452c1b | |||
c9ce115f78 | |||
d9153af17f | |||
135dbf667d | |||
3d5aeb2be0 | |||
278bf5a2d0 | |||
db76c12a1f | |||
a31f8c29ee | |||
5a31e7e09a | |||
![]() |
f74b5e3b26 | ||
ded89be259 | |||
5d3e9fefd7 | |||
ada36863be | |||
deaa416ff8 | |||
f96c4821cd | |||
f04e862bc0 | |||
42b959010c | |||
9bc373f60b | |||
1834d296bb | |||
a18fa53945 | |||
9fc1c673de | |||
6c93dc161a | |||
a45fd99410 | |||
339ac983d8 |
4
.udir
4
.udir
@ -16,8 +16,10 @@ rm_utools=
|
||||
kvm_service=
|
||||
# Faut-il installer le service openvz-fix-etchosts?
|
||||
openvz_service=
|
||||
# Faut-il installer le service kill-ssh-user-sessions?
|
||||
ksus_service=
|
||||
|
||||
configure_variables=(dest uninst_utools rm_utools kvm_service openvz_service)
|
||||
configure_variables=(dest uninst_utools rm_utools kvm_service openvz_service ksus_service)
|
||||
configure_dest_for=(bashrc profile lib/uinst/conf lib/uinst/rootconf lib/profile.d/nutools.shared lib/bashrc.d/bash_completion.shared lib/init.d/kvm-stop-all legacy/sysinc/utools legacy/sysinc/system_caps legacy/sysinc/private/init)
|
||||
config_scripts=(lib/uinst/conf lib/uinst/system_caps.legacy)
|
||||
install_profiles=true
|
||||
|
1445
CHANGES.md
Normal file
1445
CHANGES.md
Normal file
File diff suppressed because it is too large
Load Diff
508
CHANGES.txt
508
CHANGES.txt
@ -1,508 +0,0 @@
|
||||
## Version 4.4.0 du 15/04/2016-12:04
|
||||
|
||||
73391a9 awkrun: ajout d'un champ field à cqsql
|
||||
2f60fec git_track_branch(): support de git >= 1.8.x
|
||||
130b4d1 tenir compte du fichier /etc/debian_chroot pour initialiser UTOOLS_CHROOT
|
||||
48c0420 ne pas afficher d'erreur si apache n'est pas installé
|
||||
5e1a6cf Intégration de la branche rumount
|
||||
1ad804b implémentation initiale de rumount
|
||||
f460399 améliorer le calcul du répertoire destination avec pclone/pcrone
|
||||
6411e63 configurer la valeur de l'umask
|
||||
eb4362d apacheconfig: déploiement pour plusieurs systèmes à partir des mêmes sources
|
||||
|
||||
## Version 4.3.0 du 07/04/2016-14:57
|
||||
|
||||
d021c97 support de on_debian() avec des arguments
|
||||
|
||||
## Version 4.2.0 du 06/04/2016-14:25
|
||||
|
||||
a710c5a Intégration de la branche stdout
|
||||
ba969e3 ajout de stdredir pour pallier l'absence éventuelle de /dev/std*
|
||||
472f2c7 Intégration de la branche sysinfos
|
||||
1864cdf fonctions pour faciliter la gestion des dépendances sous debian
|
||||
2c27f03 uproject: ajouter la commande xconfig-export
|
||||
ed3de6d umail: ajout de l'option --gencmd
|
||||
|
||||
## Version 4.1.1 du 08/03/2016-12:04
|
||||
|
||||
0bd2b1f correction de bugs avec apacheconfig
|
||||
|
||||
## Version 4.1.0 du 03/03/2016-11:02
|
||||
|
||||
4024b2a pyulib/umail: possibilité de spécifier le type de contenu
|
||||
|
||||
## Version 4.0.0 du 01/03/2016-19:08
|
||||
|
||||
c46626c ldif: support de dumpcsv et printcsv dans get_transform_cmd()
|
||||
d661e43 doinplace fonctionne comme la fonction. la version étendue est un lien nommé doinplacex
|
||||
d6540ac dumpcsv: ajouter l'option --hname
|
||||
903d500 dumpcsv: ajouter les options --keep-fields, --skip-fields, --dump-headers
|
||||
af18332 implémenter printcsv
|
||||
383410a *csv: améliorer cohérences des arguments
|
||||
4808fa0 dumpcsv: ajout de l'option -b
|
||||
939b5ad implémenter dumpcsv et nettoyer un peu le code
|
||||
cb0e553 script doinplace qui mélange les fonctionnalités des fonctions doinplace et evalp
|
||||
0cf8e04 scripts noerror, noout, noerr qui fonctionnent comme les fonctions du même nom
|
||||
66249c9 nutools base: ajout de noerror(), noout(), noerr()
|
||||
db76488 maj doc
|
||||
40f1bf6 prel: après avoir fusionné une branche, revenir sur develop
|
||||
|
||||
## Version 3.5.0 du 26/02/2016-11:35
|
||||
|
||||
4648b3f awkrun: ajout de la fonction qarr()
|
||||
81e7f9b correction de certains messages affichés
|
||||
0ea24ec ajout de sqlcsv
|
||||
ad06535 pu: autoriser fast-forward même en cas de modifications locales
|
||||
1c397e8 ajout des fonctions awk cqsql(), sval(), cval(). réorganiser et clarifier la doc
|
||||
|
||||
## Version 3.4.2 du 10/02/2016-11:45
|
||||
|
||||
## Version 3.4.1 du 10/02/2016-11:45
|
||||
|
||||
a702b89 mergecsv: bug quand left ne contient qu'un seul champ vide
|
||||
|
||||
## Version 3.4.0 du 09/02/2016-11:25
|
||||
|
||||
788e1ff cgilsxml.py: ajout de l'option -E. bug avec le tri sur des valeurs inexistantes
|
||||
|
||||
## Version 3.3.0 du 08/02/2016-09:41
|
||||
|
||||
da3ef60 cgilsxml.py: ajouter de squery_string permettant d'ajouter un préfixe
|
||||
bb25711 cgi: cgierror et cgiredirect arrêtent le script
|
||||
|
||||
## Version 3.2.0 du 07/02/2016-23:05
|
||||
|
||||
24f3211 cgiparams.py et cgilsxml.py: modifications pour gérer la construction de QUERY_STRING
|
||||
|
||||
## Version 3.1.0 du 04/02/2016-13:52
|
||||
|
||||
3190a32 cgilsxml.py: ajout de la variable script_base, qui permet de faire des urls relatives
|
||||
f4537af ussh: bug dans l'analyse des arguments
|
||||
9992505 ussh: pas de valeur par défaut pour DEFAULT_USER; --parse affiche toutes les options
|
||||
b19059e Intégration de la branche ussh-auto-persist
|
||||
5c75737 ussh: configuration du multiplexage pour certains hôtes
|
||||
|
||||
## Version 3.0.1 du 31/12/2015-12:36
|
||||
|
||||
56c305a awk ne supporte pas \s
|
||||
|
||||
## Version 3.0.0 du 24/12/2015-15:39
|
||||
|
||||
4b1c30b nouvelles fonctions pour le module cgi. cgilsxml, cgiupload et cgiparams sont rassemblés dans le module cgisupport
|
||||
|
||||
## Version 2.26.0 du 24/12/2015-12:17
|
||||
|
||||
d5a2cce cgilsxml.py: rajouter la variable env/query_vars
|
||||
|
||||
## Version 2.25.0 du 24/12/2015-11:15
|
||||
|
||||
6c73940 cgilsxml.py: désactiver le cache par défaut
|
||||
|
||||
## Version 2.24.1 du 24/12/2015-10:12
|
||||
|
||||
3aba3e3 bug
|
||||
|
||||
## Version 2.24.0 du 24/12/2015-09:58
|
||||
|
||||
b288cf2 apacheconfig: support des fichiers de confs --> /etc/apache2/cond.d sur debian wheezy-
|
||||
2e3fe66 ussh: forcer l'allocation d'un tty avec --cc
|
||||
58fa40c ussh: ajouter le support de uwatch
|
||||
7bc63c5 maj doc uwatch
|
||||
2d2754b ajout de uwatch pour afficher un compte
|
||||
4376fff maj doc
|
||||
bb176d7 maj du template pour runsconfig
|
||||
|
||||
## Version 2.23.1 du 15/12/2015-11:01
|
||||
|
||||
d8d0cc8 cgilsxml: sélectionner automatiquement un groupe seul
|
||||
|
||||
## Version 2.23.0 du 15/12/2015-10:06
|
||||
|
||||
501a7d2 cgilsxml: script_name et xslt peuvent être spécifié dans les paramètres QUERY_STRING
|
||||
ebe4599 Intégration de la branche runs
|
||||
35eadc1 correction d'un bug avec la recherche d'un fichier de recette
|
||||
98ba626 les recettes ont maintenant l'extension .rr par défaut
|
||||
a2e863e chercher aussi les scripts dans le sous-répertoire runs dans les répertoires d'hôte
|
||||
|
||||
## Version 2.22.0 du 07/12/2015-19:05
|
||||
|
||||
dbc4d9a uscrontab: ne pas afficher plusieurs fois un même message quand le verrou est posé. n'afficher le message sur la pause qu'avec un tty
|
||||
9821d20 ajouter le lien vers cgilsxml.py
|
||||
|
||||
## Version 2.21.0 du 07/12/2015-15:12
|
||||
|
||||
d7b468d cgilsxml: ajouter les variables dlname, size, Y, m, d, H, M, S. maj doc
|
||||
eac94a7 cgiupload: possibilité de filtrer sur le nom du fichier ou son type de contenu
|
||||
fae2111 ajout de cgilsxml
|
||||
26fe709 apacheconfig: -S peut aussi être utilisé avec --localhosts
|
||||
7c6ad6a apacheconfig: nouvelles options pour le développement
|
||||
c2d5eab pxs fait aussi git pull avec un dépôt sans annexe
|
||||
dca7bee pxs fonctionne pour les dépôt normaux comme pci -A
|
||||
|
||||
## Version 2.20.0 du 12/11/2015-15:41
|
||||
|
||||
16d95d2 apache_autoconf(): déploiement des certificats autorité
|
||||
775a021 nutools: ajout de cpvcs() pour copier avec la sémantique de cpnovcs() les fichiers de VCS aussi
|
||||
1ca0ee5 runs: ajout des options --force, --copy-links et --with-vcs à ref()
|
||||
91686fb templatectl: il n'est plus nécessaire de spécifier explicitement fichier.template
|
||||
|
||||
## Version 2.19.0 du 02/11/2015-11:03
|
||||
|
||||
37f3bff apacheconfig: diverses corrections de bugs
|
||||
5d3861b apacheconfig: si host==@@dhost@@, alors hostname=@@dhostname@@ et aliases=@@daliases@@
|
||||
27592d4 apacheconfig: support des hôtes dynamiques ou statiques
|
||||
93ac7ea re-écrire la gestion des templates pour apacheconfig et runsconfig
|
||||
|
||||
## Version 2.18.0 du 27/10/2015-12:05
|
||||
|
||||
434403a Intégration de la branche uscrontab
|
||||
2118885 uscrontab: possibilité de mettre en pause sans modifier les planifications en cours
|
||||
0eeee20 awkrun: renommer les fonctions quote_*
|
||||
18691c8 upassword: maj doc et support des commentaires pour le mode batch
|
||||
|
||||
## Version 2.17.2 du 26/09/2015-12:25
|
||||
|
||||
1837a0c pxs: corriger xget, xcopy, xmove pour utiliser directement git annex sync
|
||||
|
||||
## Version 2.17.1 du 26/09/2015-12:21
|
||||
|
||||
c8c6744 pxs: support des versions <= 5.20150825
|
||||
|
||||
## Version 2.17.0 du 26/09/2015-11:51
|
||||
|
||||
552e4ba améliorer pxs pour un dépôt en mode direct
|
||||
2ce66e6 maj doc
|
||||
|
||||
## Version 2.16.0 du 10/09/2015-11:16
|
||||
|
||||
42aa7ea fonctions e*: changer l'affichage en mode NO_COLOR pour afficher les préfixes complets
|
||||
|
||||
## Version 2.15.0 du 08/09/2015-10:14
|
||||
|
||||
69ee45a Intégration de la branche prel-fixes
|
||||
47b6e5b créer VERSION.txt et CHANGES.txt à la racine du projet
|
||||
9d8a747 faire le push à la fin des opérations d'update et/ou de merge
|
||||
|
||||
## Version 2.14.0 du 03/09/2015-09:04
|
||||
|
||||
9dcd60b pxs transfert les données aussi en mode direct
|
||||
|
||||
## Version 2.13.0 du 01/09/2015-15:44
|
||||
|
||||
8d2e386 uscrontab: permettre d'ignorer le code d'erreur pour une commande planifiée
|
||||
aa989ef Intégration de la branche uinst
|
||||
58d9f16 uinst -y pose toujours la question si le répertoire est calculé automatiquement
|
||||
594fd4e activer l'autocomplétion pour uinst -h
|
||||
|
||||
## Version 2.12.1 du 24/08/2015-16:12
|
||||
|
||||
e356c2b bug avec le calcul du système
|
||||
e040cac Avec les fonctions e*, afficher le statut de façon explicite en mode non coloré
|
||||
|
||||
## Version 2.12.0 du 23/08/2015-22:57
|
||||
|
||||
dcb85ac Améliorer le déploiement uinst:rsync avec préfixes pour les hôtes distants
|
||||
|
||||
## Version 2.11.0 du 21/08/2015-10:31
|
||||
|
||||
d9282f7 uinst: ajouter l'option -h pour la méthode uinst:rsync
|
||||
7643573 nettoyer la branche
|
||||
|
||||
## Version 2.10.0 du 19/08/2015-10:23
|
||||
|
||||
6ba41b9 support de --uses-su pour ruinst -C
|
||||
|
||||
## Version 2.9.0 du 10/08/2015-14:04
|
||||
|
||||
447d13f support de nouvelles versions d'OS pour sysinfos
|
||||
48e111a fconv et fnconv: le premier argument est le fichier s'il n'est pas spécifié avec -f
|
||||
c29f4b9 mkiso: nouvelles options -A et -V
|
||||
662b82f caturl --check ne doit pas afficher l'url
|
||||
|
||||
## Version 2.8.0 du 22/07/2015-15:09
|
||||
|
||||
0f5b572 uinst installe maintenant les profils en mode partagé par défaut
|
||||
fb6b492 améliorer l'affichage des scripts geturl et openurl
|
||||
|
||||
## Version 2.7.0 du 17/07/2015-22:03
|
||||
|
||||
7e2a6c3 update-nutools ignore par défaut l'eventuel proxy défini par http_proxy
|
||||
13215c3 apacheconfig: améliorer l'affichage de l'aide et support du répertoire .apacheconfig
|
||||
27f5f7a pyulib honore maintenant UTOOLS_NO_COLORS
|
||||
3ee6cb4 diminuer l'indentation pour les fonctions e*
|
||||
d4ac5f7 modifier l'affichage des fonction e*
|
||||
|
||||
## Version 2.6.0 du 10/07/2015-17:32
|
||||
|
||||
efa6b3a Intégration de la branche ftps
|
||||
3288999 authftp: support tls en forçant l'utilisation de lftp
|
||||
58e7f6f pconf reconnait maintenant les arguments offline et online
|
||||
|
||||
## Version 2.5.1 du 03/07/2015-08:29
|
||||
|
||||
abc4cb9 dumpclients: possibilité de choisir les champs supplémentaires à afficher
|
||||
|
||||
## Version 2.5.0 du 03/07/2015-07:39
|
||||
|
||||
2e15cbe Ajouter l'option -z à dumpclients
|
||||
|
||||
## Version 2.4.0 du 01/07/2015-04:04
|
||||
|
||||
fda97a8 mise à jour de upassword
|
||||
|
||||
## Version 2.3.0 du 01/07/2015-03:09
|
||||
|
||||
f581aa9 Intégration de la branche pdev-merges
|
||||
80d7a73 ajouter les options -b et -s à pdev
|
||||
|
||||
## Version 2.2.0 du 24/06/2015-16:19
|
||||
|
||||
98cfdfc Intégration de la branche update-upassword
|
||||
34f027b bug avec la présence du scheme dans sha
|
||||
b5e6c13 Intégration de la branche update-upassword
|
||||
e4e2fa7 mise à jour upassword pour afficher sha en hexadécimal
|
||||
|
||||
## Version 2.1.1 du 22/06/2015-11:37
|
||||
|
||||
40225b0 Intégration de la branche proxy-default
|
||||
2fa0791 profile.d/proxy lit aussi les valeurs par défaut pour l'hôte
|
||||
|
||||
## Version 2.1.0 du 22/06/2015-10:25
|
||||
|
||||
2a3eb76 Intégration de la branche uenv-modifs
|
||||
bd8c7f8 correction d'un bug avec le nom final
|
||||
d73c929 correction d'un bug avec le choix du répertoire de destination
|
||||
e9089d8 les répertoires de profil partagé et de machine sont traités comme un seul répertoire
|
||||
e3f76cd possibilité de spécifier si un profil doit être installé dans le répertoire de profil partagé
|
||||
|
||||
## Version 2.0.0 du 22/06/2015-00:48
|
||||
|
||||
8286b29 Intégration de la branche uenv-modifs
|
||||
c43cda0 les répertoires de profil sont spécifiques au nom de la machine
|
||||
|
||||
## Version 1.19.0 du 21/06/2015-10:27
|
||||
|
||||
387dec2 Intégration de la branche add-pxwa
|
||||
4d0b734 ajout de la commande xwebapp
|
||||
|
||||
## Version 1.18.0 du 09/06/2015-10:40
|
||||
|
||||
01e2929 Intégration de la branche fix-javaproperties
|
||||
b24e9ff norm_properties() affiche les caractères en majuscule, comme JavaProperties#store()
|
||||
|
||||
## Version 1.17.0 du 07/06/2015-14:00
|
||||
|
||||
e2d0c0c Intégration de la branche pdev-fix
|
||||
1cc3bd4 ajouter l'option --sync à pdev
|
||||
|
||||
## Version 1.16.0 du 04/06/2015-22:14
|
||||
|
||||
4a15085 Intégration de la branche verbose-update
|
||||
8a27561 pu: afficher un message s'il y a des modifications locales
|
||||
|
||||
## Version 1.15.0 du 22/05/2015-17:03
|
||||
|
||||
e715087 Intégration de la branche update-upassword
|
||||
a74a373 upassword: possibilité de spécifier de façon dynamique la ligne à afficher après
|
||||
|
||||
## Version 1.14.0 du 22/05/2015-16:41
|
||||
|
||||
d8f20c3 Intégration de la branche update-upassword
|
||||
dea524a ajout du mode batch
|
||||
|
||||
## Version 1.13.0 du 22/05/2015-16:04
|
||||
|
||||
275bff8 Intégration de la branche update-upassword
|
||||
1ce1d98 mise à jour de upassword
|
||||
|
||||
## Version 1.12.0 du 22/05/2015-13:37
|
||||
|
||||
57fc84d correction d'un bug avec prel -s
|
||||
cf108d7 Intégration de la branche prel-show-modifs
|
||||
a744f48 prel -s afficher la liste des modifications qui seraient enregistrées
|
||||
|
||||
## Version 1.11.0 du 22/05/2015-11:41
|
||||
|
||||
2984052 Intégration de la branche quiet-completion
|
||||
755cfa7 ne pas afficher les erreurs pour les fonctions de complétion de git
|
||||
2b5eb2a Intégration de la branche pu
|
||||
b004730 uproject update fait fetch puis merge, manuellement
|
||||
|
||||
## Version 1.10.0 du 20/05/2015-12:08
|
||||
|
||||
bf1d86a Intégration de la branche pu-auto-forward
|
||||
8bf8164 fast-forwarder automatiquement les branches locales par rapport aux branches distantes
|
||||
8baabea Intégration de la branche ptools-maj-topic
|
||||
5ff5b7d déterminer les branches de topic: ignorer les branches avec un slash dans le nom
|
||||
|
||||
## Version 1.9.0 du 19/05/2015-18:25
|
||||
|
||||
5933089 Intégration de la branche awkfsv
|
||||
caeb06e possibilité de spécifier les types des champs pour mysqlloadcsv
|
||||
b2c9f81 uawk requière maintenant de spécifier le nom de l'outil
|
||||
|
||||
## Version 1.8.1 du 19/05/2015-10:45
|
||||
|
||||
de8d690 Intégration de la branche annex-support
|
||||
2044181 ne pas synchroniser l'annexe en mode automatique
|
||||
|
||||
## Version 1.8.0 du 19/05/2015-10:27
|
||||
|
||||
4779695 Intégration de la branche annex-support
|
||||
89ad130 support de git-annex pour pp et pdev
|
||||
|
||||
## Version 1.7.0 du 15/05/2015-16:11
|
||||
|
||||
16ad285 Intégration de la branche nutools
|
||||
93d8262 rajouter le script nutools pour vérifier la version installée de nutools. renommer la fonction nutools() en pconf()
|
||||
|
||||
## Version 1.6.0 du 04/05/2015-12:40
|
||||
|
||||
0463b2c Intégration de la branche norm_props
|
||||
48ca720 ajout de l'en-tête
|
||||
|
||||
## Version 1.5.1 du 29/04/2015-10:14
|
||||
|
||||
4c92f54 Intégration de la branche push-all
|
||||
02c15f9 pp -a pousse toutes les branches et tous les tags. ajouter les options -b et -t pour pousser respectivement toutes les branches et tous les tags
|
||||
|
||||
## Version 1.4.1 du 29/04/2015-10:12
|
||||
|
||||
Release erronée, à ignorer
|
||||
|
||||
## Version 1.4.0 du 27/04/2015-18:12
|
||||
|
||||
7122fc4 Intégration de la branche norm-properties
|
||||
845c54e ajout de la fonction norm_properties
|
||||
|
||||
## Version 1.3.0 du 24/04/2015-12:32
|
||||
|
||||
bdc6e9b Intégration de la branche localhost
|
||||
94b2b48 reconnaitre la valeur spéciale localhost pour check_hostname()
|
||||
|
||||
## Version 1.2.4 du 20/04/2015-17:55
|
||||
|
||||
988e045 bug
|
||||
|
||||
## Version 1.2.3 du 20/04/2015-17:43
|
||||
|
||||
Correction d'un bug avec la copie des fichiers
|
||||
|
||||
d3ab6b8 bug
|
||||
7e0d44b cosmetic
|
||||
|
||||
## Version 1.2.2 du 20/04/2015-01:16
|
||||
|
||||
## Version 1.2.1 du 20/04/2015-01:15
|
||||
|
||||
145acfa bug
|
||||
|
||||
## Version 1.2.0 du 16/04/2015-13:59
|
||||
|
||||
d756a6c Intégration de la branche ldapt
|
||||
57dac04 support de xempty explicite, et de la possibilité de désactiver ce traitement
|
||||
75f21b5 support des attributs ordonnés
|
||||
00088b3 cosmetic
|
||||
|
||||
## Version 1.1.1 du 16/04/2015-12:10
|
||||
|
||||
Mise à jour de .ulibver
|
||||
|
||||
## Version 1.1.0 du 16/04/2015-12:09
|
||||
|
||||
4b445a2 Intégration de la branche ldapt-ev
|
||||
f8bd000 support de la nouvelle fonction ensureval
|
||||
dbd9605 Intégration de la branche ptools
|
||||
1fb27d6 pousser le tag quand il a été créé
|
||||
|
||||
## Version 1.0.0 du 14/04/2015-10:05
|
||||
|
||||
commencer à suivre les versions de nutools: cette release est la première de
|
||||
la série
|
||||
|
||||
66bbf23 Intégration de la branche update-ulibver
|
||||
f5aeff7 maj de ulib
|
||||
073e7b0 Intégration de la branche ptools
|
||||
8f6a32b forcer la création de la destination. afficher un message informatif
|
||||
48d9104 Intégration de la branche ptools
|
||||
6890d30 workaround pour le bug sous debian squeeze
|
||||
91de409 Intégration de la branche ptools
|
||||
cd50646 ne pas mettre à jour le fichier local
|
||||
f321f1c Intégration de la branche ptools
|
||||
6258a6b utiliser la version au lieu de la release
|
||||
5589314 bug
|
||||
10a7d4e Intégration de la branche ptools
|
||||
cd92832 ne pas supprimer la branche develop
|
||||
3f1dc3e Intégration de la branche ptools
|
||||
ce050db ajout d'un changelog possibilité d'éditer le changelog avec -e supprimer les options courtes -z et -Z
|
||||
2bc314c ajout de --merge-log supprimer les options courtes -z et -Z
|
||||
fc35a05 inclure la liste des modifications dans le log
|
||||
4578219 Intégration de la branche ptools
|
||||
5b0715e vérifier la présence dans le dépôt distant
|
||||
0e6e94c Intégration de la feature branch ptools
|
||||
10152b4 calcul de newver action delete
|
||||
6c8e750 implémener -z et -Z
|
||||
2f41de3 cosmetic
|
||||
5f6d5bb ajout des options courtes -z et -Z
|
||||
18bb510 supprimer l'option courte -d qui est déjà utilisée pour diff
|
||||
dd2a712 ajout de -d et --force-delete
|
||||
38f04ff maj doc
|
||||
523d3f1 doc pour nouvelle fonctionnalité à implémenter
|
||||
13dfb9a Intégration de la feature branch prel-tag
|
||||
da96f72 ajout d'un tag après fusion de la branche dans master
|
||||
2a71a51 Intégration de la feature branch prel-tag
|
||||
09c59d8 ne pas afficher les erreurs
|
||||
3e514d5 maj doc
|
||||
f9d4556 Intégration de la feature branch linedots
|
||||
7ae9b48 ajout de elinedots
|
||||
ffa9195 fast-forwarder si possible
|
||||
f64117c cosmetic
|
||||
d8a3ed4 checkout par défaut
|
||||
89be42e ne pas utiliser csort
|
||||
881bcde tenir compte de la valeur de origin
|
||||
7c67a7f tenir compte des branches potentielles
|
||||
b757ca1 Intégration de la feature branch git-opts
|
||||
c3683a5 bug
|
||||
743e17b fast-forwarder automatiquement la branche vers laquelle on bascule
|
||||
e3e3bbb ajout de git_fast_forward
|
||||
1661ee5 ajout des fonctions git_is_ancestor(), git_should_ff(), git_should_push(), git_is_merged()
|
||||
2e215cc utiliser l'api
|
||||
b975724 maj doc
|
||||
262d12e toujours charger le module
|
||||
8ae0a8d utiliser nouvelle API --add-metadata
|
||||
259e1be ajout de --add-metadata support de --allow-empty pour --update
|
||||
8d3ab79 ajout de semver_addmetadata utiliser API moderne pour les perfs
|
||||
ac940b8 ne garder que les infos sur la branche courante dans les metadata
|
||||
1e11a57 ajouter pz pour faire une archive d'un projet
|
||||
9389fb0 autoriser --allow-emptyp pour l'action --show
|
||||
f90ad4d bug
|
||||
26aa98f cosmetic
|
||||
8deda74 cosmetic
|
||||
f8c4a54 calcul de la version avec --prel
|
||||
22a26d9 support des numéros style maven
|
||||
4f0a746 support des fichiers pom.xml
|
||||
6d85330 Intégration de la feature branch ptools
|
||||
f60787a prel est maintenant en topevel
|
||||
7647d2d prel est prêt à passer en toplevel
|
||||
7c36761 possibilité de faire -u et -m dans la même commande
|
||||
de618ae possibilité de ne pas supprimer une feature branch après son intégration
|
||||
57bf621 cosmetic
|
||||
8d4d35d mettre à jour la version avec pver
|
||||
f98c977 support de -v en mode auto
|
||||
4b64305 finaliser l'option -u
|
||||
5862e75 ne pas charger le fichier s'il n'existe pas
|
||||
e5b8b81 début d'implémentation de update
|
||||
9235ce1 nettoyage
|
||||
ffaed8a quelques corrections
|
||||
9182dcf maj api chargement depuis ~/etc/completion.d
|
||||
bbbc35a maj api chargement depuis ~/etc/completion.d
|
||||
d2133c7 intégrer les modifications faites à l'ur
|
||||
90772f0 Intégration de la feature branch completion
|
||||
163df88 bug
|
||||
e8d683b bug
|
||||
041a830 suite du support de bash_completion
|
||||
9c17a60 framework pour la complétion automatique
|
||||
bbbe6c4 l'option -c ne fait que le basculement ou la création. Le choix de la version se fera avec -u
|
||||
c5ba03b ajouter les completions pour prel
|
||||
2b2b7f5 début d'implémentation de prel -c
|
||||
3f925ca déplacer le code de pver dans ptools
|
20
EnsureVM
20
EnsureVM
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS service
|
||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
||||
urequire service
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: s'assurer que les services sont lancés pour un type de virtualisation
|
||||
@ -17,7 +17,7 @@ function ensure_kvm() {
|
||||
# sont chargés, et que le service libvirt-bin est démarré
|
||||
local module modified
|
||||
|
||||
if [ -z "$check_only" ]; then
|
||||
if [ -z "$check_only" -a -n "$exclusive" ]; then
|
||||
# Vérifier que les modules vbox* sont déchargés
|
||||
for module in vboxpci vboxnetadp vboxnetflt vboxdrv; do
|
||||
if lsmod | quietgrep "$module"; then
|
||||
@ -54,19 +54,24 @@ function ensure_kvm() {
|
||||
[ -n "$modified" ] && sleep 1
|
||||
|
||||
service=
|
||||
if check_sysinfos -d redhatlike; then
|
||||
function __guess_service() {
|
||||
for i in libvirtd libvirtd-bin; do
|
||||
[ -f "/etc/init.d/$i" ] && {
|
||||
service="$i"
|
||||
break
|
||||
}
|
||||
done
|
||||
}
|
||||
if check_sysinfos -d redhatlike; then
|
||||
__guess_service
|
||||
elif check_sysinfos -d debian -v jessie+; then
|
||||
__guess_service
|
||||
elif check_sysinfos -d debianlike; then
|
||||
service=libvirt-bin
|
||||
fi
|
||||
if [ -n "$service" ]; then
|
||||
# s'assurer que le service tourne
|
||||
service libvirt-bin startm
|
||||
service "$service" startm
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
@ -77,7 +82,7 @@ function ensure_virtualbox() {
|
||||
# sont chargés, et que le service vboxdrv est démarré
|
||||
local module modified
|
||||
|
||||
if [ -z "$check_only" ]; then
|
||||
if [ -z "$check_only" -a -n "$exclusive" ]; then
|
||||
# Vérifier que kvm{,_intel,_amd} ne sont pas chargés
|
||||
for module in kvm_intel kvm_amd kvm; do
|
||||
if lsmod | quietgrep "$module"; then
|
||||
@ -112,9 +117,12 @@ function ensure_virtualbox() {
|
||||
}
|
||||
|
||||
check_only=
|
||||
exclusive=
|
||||
parse_opts + "${PRETTYOPTS[@]}" \
|
||||
--help '$exit_with display_help' \
|
||||
-c,--check-only,--check check_only=1 \
|
||||
-x,--exclusive exclusive=1 \
|
||||
-s,--shared exclusive= \
|
||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||
|
||||
run_as_root "$@"
|
||||
|
61
README.md
Normal file
61
README.md
Normal file
@ -0,0 +1,61 @@
|
||||
# nutools
|
||||
|
||||
nutools est un ensemble d'utilitaires pour faciliter l'utililisation des Unixes,
|
||||
en particulier Linux, mais aussi MacOS X et Cygwin.
|
||||
|
||||
C'est aussi une librairie de scripts shell réutilisables ([ulib](doc/ulib.md))
|
||||
et une librairie de modules python réutilisables (pyulib)
|
||||
|
||||
## Installation
|
||||
|
||||
~~~sh
|
||||
git clone https://git.univ-reunion.fr/modules/nutools
|
||||
git checkout develop
|
||||
cd nutools
|
||||
./uinst -y
|
||||
~~~
|
||||
|
||||
Dans l'exemple ci-dessous, on installe la branche develop, pour avoir toujours
|
||||
la dernière version des outils.
|
||||
|
||||
Pour mettre à jour, il suffit de mettre à jour le dépôt et de relancer
|
||||
l'installation
|
||||
~~~sh
|
||||
cd nutools
|
||||
git pull
|
||||
./uinst -y
|
||||
~~~
|
||||
|
||||
Alternative, il est possible de demander à nutools à se mettre à jour avec la
|
||||
dernière version
|
||||
~~~sh
|
||||
update-nutools --develop
|
||||
~~~
|
||||
|
||||
## Prérequis
|
||||
|
||||
Python >= 2.3 et GNU Awk sont requis pour que toutes les fonctionnalités soient
|
||||
supportées.
|
||||
* Sous Linux, lors de l'installation du package, les meilleurs efforts sont fait
|
||||
pour que ces packages soient installés.
|
||||
* Sous MacOSX, il faut installer manuellement Fink, DarwinPorts ou Homebrew
|
||||
|
||||
## Outils
|
||||
|
||||
Chaque outil contient une aide intégrée. Il suffit de lancer l'outil avec
|
||||
l'argument `--help` pour avoir une aide détaillée.
|
||||
|
||||
* Déploiement d'un répertoire ou d'une archive
|
||||
* [uinst](doc/tools/uinst): Déploiement local
|
||||
* [mkusfx](doc/tools/mkusfx): Faire une archive auto-installable avec uinst
|
||||
* [ruinst](doc/tools/ruinst): Déploiement distant avec uinst
|
||||
* [runs](doc/tools/runs): Lancer un script avec le protocole RUNS
|
||||
* [rruns](doc/tools/rruns): Déploiement distant avec runs
|
||||
* Librairie réutilisable de scripts shell
|
||||
* [uinc](doc/tools/uinc): Dépliage des inclusions dans un fichier
|
||||
* [ulibsync](doc/tools/ulibsync): Faire une copie locale pour un projet de ulib et/ou pyulib
|
||||
* Autres outils
|
||||
* [udir](doc/tools/udir): Gestion des paramètres d'un répertoire. Ces paramètres sont entre
|
||||
autres utilisés par uinst et uinc.
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
4
SKvm
4
SKvm
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS virsh
|
||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
||||
urequire virsh
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: lancer une machine virtuelle kvm
|
||||
|
85
SVirtualBox
85
SVirtualBox
@ -1,7 +1,6 @@
|
||||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS
|
||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: lancer une machine virtuelle VirtualBox
|
||||
@ -10,19 +9,38 @@ USAGE
|
||||
$scriptname [options] vmName
|
||||
|
||||
OPTIONS
|
||||
-n Ne rien faire excepté s'assurer que les modules VirtualBox sont chargés
|
||||
-l Lister les machines virtuelles
|
||||
-s Démarrer la machine virtuelle (par défaut)
|
||||
-n, --nop
|
||||
Ne rien faire excepté s'assurer que les modules VirtualBox sont chargés
|
||||
-l, --list
|
||||
Lister les machines virtuelles
|
||||
-s, --start
|
||||
Démarrer la machine virtuelle. C'est l'action par défaut.
|
||||
Si le nom de la machine virtuelle n'est pas spécifiée, un menu est
|
||||
affiché
|
||||
-b Démarrer la VM sans interface graphique. Cette option n'est valide
|
||||
qu'avec -s
|
||||
-k Arrêter la machine virtuelle (par ACPI)
|
||||
-p Mettre en veille la machine virtuelle (par ACPI)
|
||||
-H Arrêter sauvagement la machine virtuelle
|
||||
-R Redémarrer sauvagement la machine virtuelle
|
||||
-S Enregistrer l'état de la machine virtuelle
|
||||
-g Afficher le gestionnaire de machines virtuelle"
|
||||
-x, --gui
|
||||
-b, --headless
|
||||
--separate
|
||||
Ces options ne sont valides qu'avec -s et permettent de spécifier le
|
||||
type de démarrage: 'gui' permet d'afficher une fenêtre complète dans
|
||||
laquelle l'accélération graphique est supportée, headless démarre la
|
||||
machine en tâche de fond, et separate affiche une fenêtre qui attaque la
|
||||
machine démarrée en tâche de fond. --separate est l'option par défaut.
|
||||
-k, -t, --stop
|
||||
Arrêter la machine virtuelle. Les options -p, -H, -R, -S et -r
|
||||
permettent de spécifier le type d'arrêt de la machine virtuelle
|
||||
-p, --sleep
|
||||
Mettre en veille la machine virtuelle (par ACPI)
|
||||
-H, --poweroff
|
||||
Arrêter sauvagement la machine virtuelle
|
||||
-R, --reset
|
||||
Redémarrer sauvagement la machine virtuelle
|
||||
-S, --savestate
|
||||
Enregistrer l'état de la machine virtuelle
|
||||
-r, --rrestart
|
||||
Arrêter la machine, restaurer l'état du dernier snapshot puis la
|
||||
relancer.
|
||||
-g, --gui
|
||||
Afficher le gestionnaire de machines virtuelle"
|
||||
}
|
||||
|
||||
function build_arrays() {
|
||||
@ -62,20 +80,24 @@ function start_virtualbox() {
|
||||
}
|
||||
|
||||
action=start
|
||||
type=separate
|
||||
stopaction=acpipowerbutton
|
||||
headless=
|
||||
restore=
|
||||
parse_opts + "${PRETTYOPTS[@]}" \
|
||||
--help '$exit_with display_help' \
|
||||
-n action=nop \
|
||||
-n,--nop action=nop \
|
||||
-l,--list action=list \
|
||||
-s,--start action=start \
|
||||
-b,--background,--headless headless=1 \
|
||||
-x,--gui type=gui \
|
||||
-b,--background,--headless type=headless \
|
||||
--separate type=separate \
|
||||
-k,-t,--stop '$action=stop; stopaction=acpipowerbutton' \
|
||||
-p,--sleep '$action=stop; stopaction=acpisleepbutton' \
|
||||
-H '$action=stop; stopaction=poweroff' \
|
||||
-R '$action=stop; stopaction=reset' \
|
||||
-S '$action=stop; stopaction=savestate' \
|
||||
-g action=gui \
|
||||
-H,--poweroff '$action=stop; stopaction=poweroff' \
|
||||
-R,--reset '$action=stop; stopaction=reset' \
|
||||
-S,--savestate '$action=stop; stopaction=savestate' \
|
||||
-r,--rrestart '$action=stop; restore=1' \
|
||||
-g,--gui action=gui \
|
||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||
|
||||
"$scriptdir/EnsureVM" virtualbox || die
|
||||
@ -110,8 +132,8 @@ $(array_join rvms "
|
||||
fi
|
||||
|
||||
if [ -n "$vm" ]; then
|
||||
estep "Démarrage de $vm${headless:+ en tâche de fond}"
|
||||
VBoxManage -q startvm ${headless:+--type headless} "$vm" "$@"
|
||||
estep "Démarrage de $vm de type $type"
|
||||
VBoxManage -q startvm --type "$type" "$vm" "$@"
|
||||
else
|
||||
ewarn "Aucune VM à démarrer n'a été trouvée"
|
||||
fi
|
||||
@ -120,10 +142,23 @@ elif [ "$action" == stop ]; then
|
||||
if [ -z "$vm" -a "${rvms[*]}" ]; then
|
||||
select_vm rvms vm "Choisissez la VM à arrêter avec la méthode $stopaction"
|
||||
fi
|
||||
[ -n "$vm" ] || die
|
||||
|
||||
if [ -n "$vm" ]; then
|
||||
estep "Arrêt de $vm avec la méthode $stopaction"
|
||||
VBoxManage -q controlvm "$vm" "$stopaction"
|
||||
estep "Arrêt de $vm avec la méthode $stopaction"
|
||||
VBoxManage -q controlvm "$vm" "$stopaction" || die
|
||||
if [ -n "$restore" ]; then
|
||||
ebegin "Attente de l'arrêt"
|
||||
while true; do
|
||||
build_arrays
|
||||
array_contains svms "$vm" && break
|
||||
edot 0
|
||||
sleep 1
|
||||
done
|
||||
eend
|
||||
estep "Restauration du snapshot"
|
||||
VBoxManage -q snapshot "$vm" restorecurrent || die
|
||||
estep "Démarrage"
|
||||
VBoxManage -q startvm --type "$type" "$vm"
|
||||
fi
|
||||
|
||||
elif [ "$action" == gui ]; then
|
||||
|
86
Sscreen
Executable file
86
Sscreen
Executable file
@ -0,0 +1,86 @@
|
||||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
|
||||
# désactiver le verrouillage
|
||||
export LOCKPRG=/bin/true
|
||||
|
||||
COULEUR_NORMALE=$'\e[0m'
|
||||
COULEUR_ROUGE=$'\e[31;1m'
|
||||
COULEUR_VERTE=$'\e[32;1m'
|
||||
COULEUR_JAUNE=$'\e[33;1m'
|
||||
COULEUR_BLEUE=$'\e[34;1m'
|
||||
COULEUR_BLANCHE=$'\e[37;1m'
|
||||
|
||||
function __ask() {
|
||||
local r
|
||||
read -p "$1" -t 2 r
|
||||
[ $? -gt 128 -o -z "$r" -o "$r" == "o" -o "$r" == "O" -o "$r" == "y" -o "$r" == "Y" ]
|
||||
}
|
||||
|
||||
function __auto_screen() {
|
||||
# Si on est déjà dans screen, ne rien faire
|
||||
[ -z "$STY" ] || return
|
||||
|
||||
# Si screen pas installé, ne rien faire
|
||||
local dir screen="$(which screen 2>/dev/null)"
|
||||
if [ -z "$screen" ]; then
|
||||
for dir in /usr/local/bin /opt/bin /usr/bin /bin; do
|
||||
if [ -x "$dir/screen" ]; then
|
||||
screen="$dir/screen"
|
||||
PATH="$PATH:$dir"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [ -z "$screen" ]; then
|
||||
echo "${COULEUR_JAUNE}WARNING${COULEUR_NORMALE} screen introuvable. une session bash classique sera lancée"
|
||||
exec /bin/bash -l
|
||||
fi
|
||||
|
||||
# corriger TERM pour les vieilles versions de Linux
|
||||
case "$TERM" in
|
||||
xterm*) TERM=xterm;;
|
||||
screen*) TERM=screen;;
|
||||
esac
|
||||
export TERM
|
||||
|
||||
local msgprefix
|
||||
local screens count
|
||||
local session_name="nutools-$USER"
|
||||
|
||||
screens="$(LANG=C screen -ls | grep -Ei "${session_name}.*attached|detached")"
|
||||
if [ -n "$screens" ]; then
|
||||
count="$(echo "$screens" | wc -l)"
|
||||
else
|
||||
count=0
|
||||
fi
|
||||
if [ $count -gt 0 ]; then
|
||||
if [ $count -eq 1 ]; then
|
||||
msgprefix="Il y a ${COULEUR_BLEUE}1 session screen en cours${COULEUR_NORMALE}
|
||||
Cette session"
|
||||
else
|
||||
msgprefix="Il y a ${COULEUR_ROUGE}$count sessions screen en cours${COULEUR_NORMALE}:
|
||||
$screens
|
||||
La première session"
|
||||
fi
|
||||
if __ask "
|
||||
$msgprefix sera reconnectée automatiquent dans 2 secondes
|
||||
Voulez-vous reconnecter la session screen? [On] "; then
|
||||
exec screen -q -s -/bin/bash -xRR -S "$session_name"
|
||||
else
|
||||
exec /bin/bash -l
|
||||
fi
|
||||
elif __ask "
|
||||
Une ${COULEUR_VERTE}nouvelle session screen${COULEUR_NORMALE} sera lancée automatiquement dans 2 secondes
|
||||
Voulez-vous lancer une session screen? [On] "; then
|
||||
exec screen -q -s -/bin/bash -RR -S "$session_name"
|
||||
else
|
||||
exec /bin/bash -l
|
||||
fi
|
||||
}
|
||||
|
||||
if [ $# -gt 0 ]; then
|
||||
# lancer les commandes fournies avant de lancer SCREEN
|
||||
"$@"
|
||||
fi
|
||||
__auto_screen
|
25
TODO.md
Normal file
25
TODO.md
Normal file
@ -0,0 +1,25 @@
|
||||
# TODO
|
||||
|
||||
dkbuild
|
||||
* setversion peut prendre la version depuis la branche git d'un dépôt
|
||||
* un argument permettrait de spécifier comment la version est calculée à
|
||||
partir du dépôt
|
||||
* si cela a du sens, une commande setlatest qui permet de désigner quelle
|
||||
distribution/version est la dernière
|
||||
|
||||
|
||||
git push
|
||||
* ajouter le support pour le mode DEBUG
|
||||
~~~
|
||||
export GIT_TRACE=1
|
||||
export GIT_TRANSFER_TRACE=1
|
||||
export GIT_CURL_VERBOSE=1
|
||||
~~~
|
||||
* ajouter le support http basique pour git lfs en cas de problème pour upload de certains fichiers
|
||||
~~~
|
||||
git config --add lfs.basictransfersonly true
|
||||
~~~
|
||||
ou le mettre dans un fichier .lfsconfig
|
||||
cf https://github.com/git-lfs/git-lfs/blob/main/docs/man/git-lfs-config.adoc
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
@ -1 +1 @@
|
||||
4.4.0
|
||||
11.4.0
|
||||
|
2
_root
2
_root
@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
source "$(dirname -- "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire base
|
||||
|
||||
function display_help() {
|
||||
|
385
apacheconfig
385
apacheconfig
@ -1,7 +1,8 @@
|
||||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS template apache.tools
|
||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
||||
urequire template apache.tools
|
||||
apacheconfig_initvars
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: Gérer la configuration d'un serveur web apache
|
||||
@ -15,6 +16,19 @@ OPTIONS
|
||||
Créer un nouveau répertoire de configuration pour un hôte
|
||||
-d, --destdir DESTDIR[=$TEMPLATECTL_NAME]
|
||||
Nom du répertoire local de configuration.
|
||||
-f,--full
|
||||
--partial
|
||||
Indiquer respectivement que la configuration est complète ou partielle.
|
||||
Avec la configuration complète, le serveur peut être complètement
|
||||
configuré avec tous les fichiers présents. Avec la configuration
|
||||
partielle, uniquement les informations spécifiques à un service en
|
||||
particulier sont disponibles.
|
||||
Cette option est utilisée avec --create. Par défaut, la configuration
|
||||
est partielle.
|
||||
Pour le moment, la seule différence est que --full crée un fichier de
|
||||
configuration nommé .apacheconfig alors que --partial crée un fichier
|
||||
nommé apacheconfig.conf qui est visible et donc découvrable et éditable
|
||||
plus facilement
|
||||
|
||||
-t, --template [OPT]
|
||||
Gérer les fichiers du répertoire local avec templatectl. La valeur de
|
||||
@ -45,9 +59,23 @@ OPTIONS
|
||||
Lors du déploiement de la configuration, les valeurs des variables
|
||||
dynamiques sont remplacées dans les fichiers destination.
|
||||
Les arguments qui restent sont passés tels quels à apache_autoconf
|
||||
-p, --pull
|
||||
Faire 'git pull' avant --update
|
||||
-F, --fix-ip
|
||||
Corriger les lignes de la forme '<VirtualHost *:PORT>#*ip:IP' et les
|
||||
remplacer par '<VirtualHost IP:PORT>'
|
||||
Cela permet de déployer une version de production des fichiers de
|
||||
configuration.
|
||||
-N, --network-config
|
||||
Mettre aussi à jour la configuration réseau.
|
||||
--no-post-update
|
||||
Ne pas lancer le script post-update.sh après le déploiement s'il existe.
|
||||
Le script est lancé avec les mêmes arguments que apacheconfig_deploy()
|
||||
la fonction définie dans le module apache.tools
|
||||
-r, --certsdir CERTSDIR
|
||||
Spécifier le cas échéant le répertoire contenant les certificats à
|
||||
déployer. Cet argument est requis si le répertoire certsconf/ existe.
|
||||
déployer. Cet argument est requis si le répertoire certsconf/ existe,
|
||||
sauf si les certificats sont déjà déployés.
|
||||
|
||||
--localhosts
|
||||
Créer dans le fichier /etc/hosts tous les noms d'hôte ayant un suffixe
|
||||
@ -62,113 +90,48 @@ OPTIONS
|
||||
-S, --one-site SITE
|
||||
Ne déployer que le fichier de site spécifié. Cette option est utilisée
|
||||
avec --deploy ou --localhosts et est utile pour le développement et les
|
||||
tests."
|
||||
}
|
||||
tests.
|
||||
|
||||
# toujours placer une variable dépendante AVANT la variable maitre
|
||||
TEMPLATE_STATIC_VARS=(
|
||||
hostname aliases host
|
||||
certsdir caname
|
||||
)
|
||||
TEMPLATE_DYNAMIC_VARS=(
|
||||
ips_namevirtualhosts ips_listens ips
|
||||
dhostname daliases dhost
|
||||
admin configdir
|
||||
)
|
||||
TEMPLATE_NOWRITE_VARS=(hostname aliases dhostname daliases configdir)
|
||||
|
||||
__TEMPLATE_DEFAULTF_host=__template_defaultf_host
|
||||
__TEMPLATE_UPDATEF_host=__template_updatef_host
|
||||
function __template_defaultf_host() {
|
||||
myhost
|
||||
-k, --new-site HOST.TLD
|
||||
Créer une définition pour un nouveau site à partir des fichiers du
|
||||
répertoires templates/
|
||||
-K, --new-site-templatedir TEMPLATEDIR
|
||||
Spécifier le répertoire source pour les templates de site utilisés par
|
||||
l'option --new-site. Par défaut, utiliser le répertoire templates/ situé
|
||||
dans le répertoire de configuration.
|
||||
Si TEMPLATEDIR est un nom simple sans séparateur de chemin '/' et qu'un
|
||||
répertoire templates/TEMPLATEDIR existe, alors prendre ce répertoire-là
|
||||
comme source.
|
||||
--new-site-force
|
||||
Avec --new-site, utiliser le nom d'hôte fourni même s'il n'est pas
|
||||
pleinement qualifié"
|
||||
}
|
||||
function __template_updatef_host() {
|
||||
if [ "$host" == "@@dhost@@" ]; then
|
||||
__template_set_var hostname @@dhostname@@
|
||||
__template_set_var aliases @@daliases@@
|
||||
else
|
||||
local update_aliases
|
||||
[ "$aliases" == "$hostname" ] && update_aliases=1
|
||||
__template_set_var hostname "${host%%.*}"
|
||||
[ -n "$update_aliases" ] && __template_set_var aliases "$hostname"
|
||||
[ -n "$ips" ] || __template_set_var ips ""
|
||||
fi
|
||||
}
|
||||
|
||||
__TEMPLATE_DEFAULTF_ips=__template_defaultf_ips
|
||||
__TEMPLATE_UPDATEF_ips=__template_updatef_ips
|
||||
function __template_defaultf_ips() {
|
||||
local -a ips
|
||||
if [ "$host" != "@@dhost@@" ]; then
|
||||
resolv_ips ips "$host"
|
||||
else
|
||||
resolv_ips ips "$dhost"
|
||||
fi
|
||||
echo "${ips[*]}"
|
||||
}
|
||||
function __template_updatef_ips() {
|
||||
local -a ipports; local ipport ip port
|
||||
local nvhs ls
|
||||
nvhs=
|
||||
ls=
|
||||
array_split ipports "$ips" " "
|
||||
for ipport in "${ipports[@]}"; do
|
||||
splitpair "$ipport" ip port
|
||||
[ -n "$port" ] || port=443
|
||||
[ -n "$nvhs" ] || nvhs="#ips_namevirtualhosts"
|
||||
nvhs="$nvhs
|
||||
NameVirtualHost $ip:$port"
|
||||
[ -n "$ls" ] || ls="#ips_listens"
|
||||
ls="$ls
|
||||
Listen $ip:$port"
|
||||
done
|
||||
[ -n "$nvhs" ] && __template_set_var ips_namevirtualhosts "$nvhs"
|
||||
[ -n "$ls" ] && __template_set_var ips_listens "$ls"
|
||||
}
|
||||
|
||||
__TEMPLATE_DEFAULTF_dhost=__template_defaultf_dhost
|
||||
__TEMPLATE_UPDATEF_dhost=__template_updatef_dhost
|
||||
function __template_defaultf_dhost() {
|
||||
myhost
|
||||
}
|
||||
function __template_updatef_dhost() {
|
||||
local update_daliases
|
||||
[ "$daliases" == "$dhostname" ] && update_daliases=1
|
||||
__template_set_var dhostname "${dhost%%.*}"
|
||||
[ -n "$update_daliases" ] && __template_set_var daliases "$dhostname"
|
||||
[ -n "$ips" ] || __template_set_var ips ""
|
||||
}
|
||||
|
||||
DEFAULT_ADMIN=supervision-gdrsi@listes.univ-reunion.fr
|
||||
DEFAULT_CERTSDIR=1507-renater
|
||||
DEFAULT_CANAME=1507-DigiCertCA.crt
|
||||
set_defaults apacheconfig
|
||||
|
||||
TEMPLATECTL_NAME=apacheconfig
|
||||
TEMPLATECTL_SRCDIRS=(apacheconfig)
|
||||
TEMPLATECTL_CONFIG="$TEMPLATECTL_NAME"
|
||||
TEMPLATECTL_DEFAULTS=(
|
||||
admin="$DEFAULT_ADMIN"
|
||||
certsdir="$DEFAULT_CERTSDIR"
|
||||
caname="$DEFAULT_CANAME"
|
||||
)
|
||||
TEMPLATECTL_VARS=()
|
||||
|
||||
action=
|
||||
destdir=
|
||||
nohideconfig=
|
||||
nohideconfig=auto
|
||||
templateopt=
|
||||
FULLCONF=
|
||||
pull=
|
||||
fixip=
|
||||
netconf=
|
||||
no_post_update=
|
||||
aac_certsdir=
|
||||
bits=
|
||||
oneconf=
|
||||
onemodule=
|
||||
onesite=
|
||||
site_host=
|
||||
site_templdir=
|
||||
site_force=
|
||||
args=(
|
||||
--help '$exit_with display_help'
|
||||
-c,--create action=create
|
||||
-d:,--destdir: destdir=
|
||||
--no-hideconfig nohideconfig=1
|
||||
--hideconfig nohideconfig=
|
||||
-f,--full FULLCONF=1
|
||||
--partial FULLCONF=
|
||||
-t::,--template:: '$set@ templateopt; action=template'
|
||||
--help-template '$templateopt=-help; action=template'
|
||||
-l,--list '$templateopt=l; action=template'
|
||||
@ -184,33 +147,37 @@ args=(
|
||||
-8,--jessie '$array_add TEMPLATECTL_VARS sysver=jessie'
|
||||
--bits: bits=
|
||||
-u,--update,--deploy action=deploy
|
||||
-p,--pull pull=1
|
||||
-F,--fix-ip fixip=1
|
||||
-N,--network-config netconf=1
|
||||
--no-post-update no_post_update=1
|
||||
-r:,--certsdir: aac_certsdir=
|
||||
--localhosts action=localhosts
|
||||
-C:,--one-conf: oneconf=
|
||||
-M:,--one-module: onemodule=
|
||||
-S:,--one-site: onesite=
|
||||
-k:,--new-site: '$action=new-site; set@ site_host'
|
||||
-K:,--new-site-templatedir: site_templdir=
|
||||
--new-site-force site_force=
|
||||
)
|
||||
parse_args "$@"; set -- "${args[@]}"
|
||||
|
||||
__template_set_destdir destdir autocreate "$TEMPLATECTL_NAME" || die
|
||||
setx config=templatectl_config "$destdir" ${nohideconfig:+nohideconfig}
|
||||
modified=
|
||||
templatectl_loadvars "$config" && modified=1
|
||||
|
||||
if [ -n "$sysname" -o -n "$sysdist" -o -n "$sysver" ]; then
|
||||
ensure_sysinfos sysname sysdist sysver
|
||||
custom_sysinfos=1
|
||||
else
|
||||
sysname="$MYSYSNAME"
|
||||
sysdist="$MYSYSDIST"
|
||||
sysver="$MYSYSVER"
|
||||
bits="$MYBITS"
|
||||
custom_sysinfos=
|
||||
if [ "$nohideconfig" == auto ]; then
|
||||
[ -n "$FULLCONF" ] && nohideconfig= || nohideconfig=1
|
||||
fi
|
||||
__template_set_var sysname "$sysname"
|
||||
__template_set_var sysdist "$sysdist"
|
||||
__template_set_var sysver "$sysver"
|
||||
#check_sysinfos --vars sysname sysdist sysver bits "${templatectl_suffix[@]}
|
||||
|
||||
if [ -n "$pull" ]; then
|
||||
estep "Mise à jour du dépôt"
|
||||
if [ -n "$destdir" ]; then
|
||||
[ -d "$destdir" ] || die "$destdir: répertoire introuvable"
|
||||
(cd "$destdir" && git pull) || die
|
||||
else
|
||||
git pull || die
|
||||
fi
|
||||
fi
|
||||
|
||||
apacheconfig_loadconf "$destdir" "$nohideconfig" || die
|
||||
apacheconfig_sysinfos "$sysname" "$sysdist" "$sysver" "$bits"
|
||||
|
||||
################################################################################
|
||||
if [ "$action" == create ]; then
|
||||
@ -233,7 +200,7 @@ if [ "$action" == create ]; then
|
||||
ask_yesno "Le fichier $(ppath "$config") sera écrasé. Voulez-vous continuer?" O || die
|
||||
rm -f "$config" || die
|
||||
fi
|
||||
templatectl -d "$destdir" --config "$config" --no-load-vars -m --write-vars
|
||||
templatectl -d "$destdir" --config "$config" ${nohideconfig:+--no-hide-config} --no-load-vars -m --write-vars
|
||||
|
||||
################################################################################
|
||||
elif [ "$action" == template ]; then
|
||||
@ -247,7 +214,11 @@ elif [ "$action" == deploy -o "$action" == localhosts ]; then
|
||||
[ -d "$destdir" ] || die "$destdir: répertoire introuvable"
|
||||
|
||||
args=(
|
||||
-d "$destdir" --$action ${aac_certsdir:+-r "$aac_certsdir"}
|
||||
-d "$destdir" --$action
|
||||
${fixip:+--fix-ip}
|
||||
${netconf:+--network-config}
|
||||
${no_post_update:+--no-post-update}
|
||||
${aac_certsdir:+-r "$aac_certsdir"}
|
||||
${oneconf:+--one-conf "$oneconf"}
|
||||
${onemodule:+--one-module "$onemodule"}
|
||||
${onesite:+--one-site "$onesite"}
|
||||
@ -262,24 +233,182 @@ elif [ "$action" == deploy -o "$action" == localhosts ]; then
|
||||
|
||||
if [ "$action" == deploy ]; then
|
||||
etitle "Mise à jour du système"
|
||||
args=(apache_autoconf
|
||||
--ignore "$(basename -- "$config")"
|
||||
${oneconf:+--one-conf "$(basename -- "$oneconf")"}
|
||||
${onemodule:+--one-module "$(basename -- "$onemodule")"}
|
||||
)
|
||||
# sur une ligne séparée parce que $bits peut être vide
|
||||
[ -n "$custom_sysinfos" ] && array_add args --sysname "$sysname" --sysdist "$sysdist" --sysver "$sysver" --bits "$bits"
|
||||
apacheconfig_deploy \
|
||||
"$destdir" "$aac_certsdir" \
|
||||
"$config" "$oneconf" "$onemodule" "$onesite" \
|
||||
"$custom_sysinfos" "$sysname" "$sysdist" "$sysver" "$bits" \
|
||||
"$netconf" "$fixip" "$no_post_update" || die
|
||||
eend
|
||||
elif [ "$action" == localhosts ]; then
|
||||
etitle "Mise à jour de /etc/hosts"
|
||||
args=(apache_autoconf_localhosts)
|
||||
apacheconfig_localhosts "$destdir" "$aac_certsdir" "$onesite" || die
|
||||
eend
|
||||
fi
|
||||
args=("${args[@]}"
|
||||
"$destdir" "$aac_certsdir"
|
||||
${onesite:+--one-site "$(basename -- "$onesite")"}
|
||||
)
|
||||
for __name in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
|
||||
array_add args "$__name=${!__name}"
|
||||
|
||||
################################################################################
|
||||
elif [ "$action" == new-site ]; then
|
||||
host="$site_host"
|
||||
templdir="$site_templdir"
|
||||
|
||||
if [ -z "$templdir" -a -d "$destdir/templates" ]; then
|
||||
# si on ne précise pas le template à utiliser, alors afficher
|
||||
# éventuellement un menu si plusieurs templates sont disponibles
|
||||
templdirs=()
|
||||
if [ -n "$(list_all "$destdir/templates" "*SITE*")" ]; then
|
||||
array_add templdirs templates
|
||||
templdir=templates
|
||||
fi
|
||||
array_from_lines stempldirs "$(list_dirs "$destdir/templates" | grep -v SITE)"
|
||||
for stempldir in "${stempldirs[@]}"; do
|
||||
if [ -n "$(list_all "$destdir/templates/$stempldir" "*SITE*")" ]; then
|
||||
array_add templdirs "templates/$stempldir"
|
||||
[ -n "$templdir" ] || templdir="templates/$stempldir"
|
||||
fi
|
||||
done
|
||||
if [ ${#templdirs[*]} -gt 1 ]; then
|
||||
simple_menu templdir templdirs -t "Choix du répertoire des modèles" -m "Veuillez choisir le modèle à utiliser"
|
||||
fi
|
||||
templdir="$destdir/$templdir"
|
||||
fi
|
||||
|
||||
if [[ "$templdir" != */* ]] && [ -d "$destdir/templates/$templdir" ]; then
|
||||
templdir="$destdir/templates/$templdir"
|
||||
elif [ -z "$templdir" ]; then
|
||||
templdir="$destdir/templates"
|
||||
fi
|
||||
[ -d "$templdir" ] || die "$templdir: répertoire introuvable"
|
||||
force="$site_force"
|
||||
|
||||
clrtempl=
|
||||
ssltempl=
|
||||
certstempl=
|
||||
wwwtempl=
|
||||
array_from_lines clrtempls "$(list_files "$templdir" "*SITE*.conf")"
|
||||
array_from_lines ssltempls "$(list_files "$templdir" "*SITE*.ssl.conf")"
|
||||
array_from_lines certstempls "$(list_files "$templdir" "*SITE*-certs.conf")"
|
||||
for xtempl in "${ssltempls[@]}" "${certstempls[@]}"; do
|
||||
array_del clrtempls "$xtempl"
|
||||
done
|
||||
"${args[@]}" "$@" || die
|
||||
[ ${#clrtempls[*]} -gt 0 ] && clrtempl="${clrtempls[0]}"
|
||||
[ ${#ssltempls[*]} -gt 0 ] && ssltempl="${ssltempls[0]}"
|
||||
[ ${#certstempls[*]} -gt 0 ] && certstempl="${certstempls[0]}"
|
||||
array_from_lines wwwtempls "$(list_dirs "$templdir" "*SITE*")"
|
||||
[ ${#wwwtempls[*]} -gt 0 ] && wwwtempl="${wwwtempls[0]}"
|
||||
|
||||
found=
|
||||
for i in "$clrtempl" "$ssltempl" "$certstempl" "$wwwtempl"; do
|
||||
[ -n "$i" ] && { found=1; break; }
|
||||
done
|
||||
[ -n "$found" ] || die "Aucun template disponible"
|
||||
|
||||
if [ -z "$force" ] && [[ "$host" != *.* ]]; then
|
||||
die "$host n'est pas un nom d'hôte pleinement qualifié"
|
||||
fi
|
||||
|
||||
hostip=
|
||||
for i in "$clrtempl" "$ssltempl"; do
|
||||
[ -n "$i" -a -f "$templdir/$i" ] || continue
|
||||
quietgrep SITE_IP "$templdir/$i" && { hostip=1; break; }
|
||||
done
|
||||
if [ -n "$hostip" ]; then
|
||||
# Il y a un champ SITE_IP, il faut demander à l'utilisateur l'adresse ip
|
||||
# correspondante
|
||||
[[ "$host" == *.* ]] && hostdomain="${host#*.}" || hostdomain=
|
||||
pri=
|
||||
hostip=
|
||||
i=0
|
||||
while [ $i -lt ${#PUBDOMAINS[*]} ]; do
|
||||
if [ "${PUBDOMAINS[$i]}" == "$hostdomain" ]; then
|
||||
pri="$VSPREFIX${host%$hostdomain}${PRIDOMAINS[$i]}"
|
||||
resolv_ips ips "$pri"
|
||||
if [ -n "$ips" ]; then
|
||||
hostip="${ips[0]}"
|
||||
break
|
||||
fi
|
||||
fi
|
||||
i=$(($i + 1))
|
||||
done
|
||||
if [ -z "$hostip" ]; then
|
||||
pri="$VSPREFIX$host"
|
||||
resolv_ips ips "$pri"
|
||||
[ -n "$ips" ] && hostip="${ips[0]}"
|
||||
fi
|
||||
if [ -n "$pri" -a -n "$hostip" ]; then
|
||||
enote "Correspondance automatique $host --> $pri"
|
||||
read_value "Veuillez confirmer l'adresse IP d'écoute" hostip "$hostip" N
|
||||
else
|
||||
enote "Vous devez saisir l'adresse IP privée correspondant à $host"
|
||||
read_value "Veuillez entrer l'adresse IP *privée* d'écoute" hostip "" N
|
||||
fi
|
||||
[ -n "$hostip" ] || ewarn "Vous avez choisi de ne pas spécifier d'adresse IP d'écoute. Il faudra corriger manuellement les fichiers générés"
|
||||
fi
|
||||
|
||||
etitle "$host"
|
||||
hostname="${host%%.*}"
|
||||
clrconf="${clrtempl/SITE/$hostname}"
|
||||
sslconf="${ssltempl/SITE/$hostname}"
|
||||
certsconf="${certstempl/SITE/$hostname}"
|
||||
wwwdir="${wwwtempl/SITE/$hostname}"
|
||||
|
||||
mkdir -p "$destdir/certsconf"
|
||||
mkdir -p "$destdir/sites"
|
||||
|
||||
sedscript=
|
||||
[ -n "$hostip" ] && sedscript="$sedscript
|
||||
s/SITE_IP/$hostip/g"
|
||||
sedscript="$sedscript
|
||||
s/SITE.TLD/$host/g
|
||||
s/SITE/$hostname/g"
|
||||
|
||||
if [ -z "$clrtempl" ]; then
|
||||
:
|
||||
elif [ ! -f "$templdir/$clrtempl" ]; then
|
||||
ewarn "Le fichier $(ppath "$templdir/$clrtempl") n'existe pas. La copie ne sera pas complète"
|
||||
elif [ -f "$destdir/sites/$clrconf" ]; then
|
||||
ewarn "Le fichier sites/$clrconf existe déjà. Il ne sera pas écrasé."
|
||||
else
|
||||
estep "sites/$clrconf"
|
||||
sed "$sedscript" "$templdir/$clrtempl" >"$destdir/sites/$clrconf" || die
|
||||
fi
|
||||
|
||||
if [ -z "$ssltempl" ]; then
|
||||
:
|
||||
elif [ ! -f "$templdir/$ssltempl" ]; then
|
||||
ewarn "Le fichier $(ppath "$templdir/$ssltempl") n'existe pas. La copie ne sera pas complète"
|
||||
elif [ -f "$destdir/sites/$sslconf" ]; then
|
||||
ewarn "Le fichier sites/$sslconf existe déjà. Il ne sera pas écrasé."
|
||||
else
|
||||
estep "sites/$sslconf"
|
||||
sed "$sedscript" "$templdir/$ssltempl" >"$destdir/sites/$sslconf" || die
|
||||
fi
|
||||
|
||||
if [ -z "$certstempl" ]; then
|
||||
:
|
||||
elif [ ! -f "$templdir/$certstempl" ]; then
|
||||
ewarn "Le fichier $(ppath "$templdir/$certstempl") n'existe pas. La copie ne sera pas complète"
|
||||
elif [ -f "$destdir/certsconf/$certsconf" ]; then
|
||||
ewarn "Le fichier certsconf/$certsconf exite déjà. Il ne sera pas écrasé."
|
||||
else
|
||||
estep "certsconf/$certsconf"
|
||||
sed "$sedscript" "$templdir/$certstempl" >"$destdir/certsconf/$certsconf" || die
|
||||
fi
|
||||
|
||||
if [ -z "$wwwtempl" ]; then
|
||||
:
|
||||
elif [ ! -d "$templdir/$wwwtempl" ]; then
|
||||
ewarn "Le répertoire $(ppath "$templdir/$wwwtempl") n'existe pas. La copie ne sera pas complète"
|
||||
elif [ -d "$destdir/$wwwdir" ]; then
|
||||
ewarn "Le répertoire $wwwdir existe déjà. Il ne sera pas écrasé."
|
||||
else
|
||||
estep "$wwwdir"
|
||||
cpdirnovcs "$templdir/$wwwtempl" "$destdir/$wwwdir" || die
|
||||
sed -i "$sedscript" "$destdir/$wwwdir/.udir" || die
|
||||
fi
|
||||
|
||||
eend
|
||||
|
||||
if [ -n "$wwwtempl" ]; then
|
||||
eimportant "Ne pas oublier le cas échéant de mettre à jour HTDMAPPINGS dans $(ppath "$config") e.g.
|
||||
HTDMAPPINGS=($wwwdir)"
|
||||
fi
|
||||
fi
|
||||
|
40
authftp
40
authftp
@ -1,7 +1,6 @@
|
||||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS
|
||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: Se connecter sur un site FTP authentifié
|
||||
@ -28,6 +27,11 @@ OPTIONS
|
||||
--tls
|
||||
Indiquer que la connexion se fera en TLS. Implique --lftp puisque ncftp
|
||||
ne le supporte pas.
|
||||
--verify-certificate
|
||||
Avec la connexion --tls, forcer la vérification du certificat, qui est
|
||||
désactivée par défaut.
|
||||
--sftp
|
||||
Indiquer que la connexion se fait via SFTP. Implique --lftp --noproxy
|
||||
|
||||
note: A cause d'une limitation de lftp, ce n'est pas possible de se connecter
|
||||
automatiquement avec lftp si le mot de passe contient une virgule. A cause de la
|
||||
@ -35,6 +39,14 @@ façon dont le proxy ftp est configuré, il n'est pas possible de se connecter
|
||||
avec un mot de passe qui contient le caractère @"
|
||||
}
|
||||
|
||||
function hostkeyfailed_apropos() {
|
||||
eecho "\
|
||||
------------------------------------------------------------------------------------
|
||||
Si le message 'Host key verification failed' apparait, lancer la commande suivante:
|
||||
ssh -o StrictHostKeyChecking=no -o BatchMode=yes $1
|
||||
------------------------------------------------------------------------------------"
|
||||
}
|
||||
|
||||
AUTHFTP_PROXY_DISABLED=1 # par défaut, ne pas utiliser le proxy
|
||||
set_defaults proxy
|
||||
set_defaults authftp
|
||||
@ -43,6 +55,8 @@ noproxy="$AUTHFTP_PROXY_DISABLED"
|
||||
lftp=
|
||||
options=()
|
||||
tls=
|
||||
verify_certificate=no
|
||||
sftp=
|
||||
parse_opts "${PRETTYOPTS[@]}" \
|
||||
--help '$exit_with display_help' \
|
||||
-p,--proxy noproxy= \
|
||||
@ -50,6 +64,8 @@ parse_opts "${PRETTYOPTS[@]}" \
|
||||
-l,--lftp lftp=1 \
|
||||
-o:,--option: options \
|
||||
--tls tls=1 \
|
||||
--verify-certificate verify_certificate=yes \
|
||||
--sftp sftp=1 \
|
||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||
|
||||
[ -n "$noproxy" -o -n "$AUTHFTP_PROXY_HOST" ] || die "AUTHFTP_PROXY_HOST doit être défini"
|
||||
@ -62,13 +78,27 @@ read_value -i "Entrez l'identifiant de connexion" login "$2"
|
||||
read_value -i "Entrez le mot de passe" password "$3"
|
||||
read_value -i "Entrez le chemin" path "$4" N
|
||||
|
||||
[ -n "$tls" ] && lftp=1
|
||||
[ -n "$tls" -o -n "$sftp" ] && lftp=1
|
||||
[ -n "$sftp" ] && noproxy=1
|
||||
|
||||
if [ -n "$lftp" ]; then
|
||||
if [ -n "$noproxy" ]; then
|
||||
exec lftp -u "$login,$password" "${options[@]}" "ftp://$host/$path"
|
||||
export LFTP_PASSWORD="$password"
|
||||
if [ -n "$sftp" ]; then
|
||||
url="sftp://$host/$path"
|
||||
hostkeyfailed_apropos "$login@$host"
|
||||
else
|
||||
url="ftp://$host/$path"
|
||||
fi
|
||||
exec lftp "${options[@]}" -e "\
|
||||
set ssl:verify-certificate $verify_certificate
|
||||
open -u $login --env-password $url"
|
||||
else
|
||||
exec lftp -u "${login}@${my_login}@${host},${password}@${my_password}" "${options[@]}" "ftp://$AUTHFTP_PROXY_HOST/$path"
|
||||
export LFTP_PASSWORD="${password}@${my_password}"
|
||||
url="ftp://$AUTHFTP_PROXY_HOST/$path"
|
||||
exec lftp "${options[@]}" -e "\
|
||||
set ssl:verify-certificate $verify_certificate
|
||||
open -u ${login}@${my_login}@${host} --env-password $url"
|
||||
fi
|
||||
else
|
||||
if [ -n "$noproxy" ]; then
|
||||
|
24
caturl
24
caturl
@ -1,19 +1,26 @@
|
||||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS
|
||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: Afficher une url
|
||||
|
||||
USAGE
|
||||
$scriptname <file.url|file.desktop|URL>"
|
||||
$scriptname <file.url|file.desktop|URL>
|
||||
|
||||
OPTIONS
|
||||
-c, --check
|
||||
Vérifier que le fichier est valide
|
||||
-g, --get
|
||||
Attaquer l'url spécifiée avec curl"
|
||||
}
|
||||
|
||||
check=
|
||||
get=
|
||||
parse_opts "${PRETTYOPTS[@]}" \
|
||||
--help '$exit_with display_help' \
|
||||
--check check=1 \
|
||||
-c,--check check=1 \
|
||||
-g,--get get=1 \
|
||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||
|
||||
function findurl() {
|
||||
@ -87,5 +94,10 @@ END { if (type == 2) print URL }
|
||||
fi
|
||||
fi
|
||||
|
||||
[ -n "$check" ] && exit 0
|
||||
echo "$URL"
|
||||
if [ -n "$check" ]; then
|
||||
exit 0
|
||||
elif [ -n "$get" ]; then
|
||||
curl -fs "$URL"
|
||||
else
|
||||
echo "$URL"
|
||||
fi
|
||||
|
410
chrono.py
Executable file
410
chrono.py
Executable file
@ -0,0 +1,410 @@
|
||||
#!/usr/bin/env python2
|
||||
# -*- coding: utf-8 mode: python -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
|
||||
u"""Afficher un chronomètre"""
|
||||
|
||||
import os, sys, re, subprocess, traceback
|
||||
from os import path
|
||||
from datetime import date as Date, time as Time
|
||||
from datetime import datetime as Datetime, timedelta as Timedelta
|
||||
from types import IntType, LongType
|
||||
|
||||
DEFAULT_SOUND = path.join(path.dirname(__file__), 'lib', 'chrono.wav')
|
||||
|
||||
def win_playSound(name):
|
||||
try: import winsound as s
|
||||
except: return
|
||||
if name is None:
|
||||
s.PlaySound(None, s.SND_ASYNC)
|
||||
else:
|
||||
scriptdir = path.split(path.abspath(sys.argv[0]))[0]
|
||||
soundfile = path.join(scriptdir, name)
|
||||
s.PlaySound(soundfile, s.SND_FILENAME + s.SND_ASYNC)
|
||||
|
||||
def linux_playSound(name):
|
||||
subprocess.call(['/usr/bin/aplay', '-Nq', name])
|
||||
|
||||
def playSound(name=None):
|
||||
if os.name == 'nt':
|
||||
return win_playSound(name)
|
||||
elif sys.platform.startswith('linux'):
|
||||
return linux_playSound(name)
|
||||
|
||||
def isnum(i):
|
||||
return type(i) in (IntType, LongType)
|
||||
RE_NUM = re.compile(r'\d+$')
|
||||
def numof(s):
|
||||
if isnum(s): return s
|
||||
elif s is None: return None
|
||||
elif RE_NUM.match(str(s)) is not None: return int(str(s))
|
||||
else: return s
|
||||
|
||||
DEFAULT_TIMEOUT = '5'
|
||||
|
||||
RE_DESTHOUR = re.compile(r'@(\d+)(?:[:.](\d+)(?:[:.](\d+))?)?$')
|
||||
def parse_desthour(s):
|
||||
mo = RE_DESTHOUR.match(s)
|
||||
if mo is None: return None
|
||||
h, m, s = mo.groups()
|
||||
if h is None: h = 0
|
||||
if m is None: m = 0
|
||||
if s is None: s = 0
|
||||
h, m, s = int(h), int(m), int(s)
|
||||
src = Datetime.today()
|
||||
srcdate = src.date(); srctime = src.time()
|
||||
destdate = srcdate; desttime = Time(h, m, s)
|
||||
if desttime <= srctime: destdate = destdate + Timedelta(1)
|
||||
src = Datetime.combine(srcdate, srctime)
|
||||
dest = Datetime.combine(destdate, desttime)
|
||||
delta = dest - src
|
||||
return delta.total_seconds()
|
||||
|
||||
RE_TIMEOUT = re.compile(r'(\d+)(?:[:.](\d+)(?:[:.](\d+))?)?$')
|
||||
def parse_timeout(s):
|
||||
mo = RE_TIMEOUT.match(s)
|
||||
if mo is None: return None
|
||||
h, m, s = mo.groups()
|
||||
if m is None and s is None:
|
||||
# M
|
||||
m = h
|
||||
h = None
|
||||
elif s is None:
|
||||
# M:S
|
||||
s = m
|
||||
m = h
|
||||
h = None
|
||||
else:
|
||||
# H:M:S
|
||||
pass
|
||||
if h is None: h = 0
|
||||
if m is None: m = 0
|
||||
if s is None: s = 0
|
||||
h, m, s = int(h), int(m), int(s)
|
||||
return h * 3600 + m * 60 + s
|
||||
|
||||
class Chrono:
|
||||
MODE_MINUTEUR = 'M'
|
||||
MODE_CHRONOMETRE = 'C'
|
||||
STATE_STARTED = 'started'
|
||||
STATE_PAUSED = 'paused'
|
||||
STATE_STOPPED = 'stopped'
|
||||
|
||||
ZERO = None
|
||||
|
||||
state = None
|
||||
mode = None
|
||||
timeout = None
|
||||
elapsed = None
|
||||
date_start = None
|
||||
max_elapsed = None
|
||||
initial = None
|
||||
|
||||
def __init__(self, timeout=None, start=False):
|
||||
self.ZERO = self.__delta(0)
|
||||
self.set_timeout(timeout)
|
||||
if start: self.start()
|
||||
|
||||
def __format(self, delta):
|
||||
h = delta.seconds // 3600
|
||||
seconds = delta.seconds % 3600
|
||||
m = seconds // 60
|
||||
s = seconds % 60
|
||||
if h > 0: return '%02i:%02i:%02i' % (h, m, s)
|
||||
else: return '%02i:%02i' % (m, s)
|
||||
|
||||
def __delta(self, timeout):
|
||||
return Timedelta(seconds=timeout)
|
||||
|
||||
def set_timeout(self, timeout=None):
|
||||
if timeout == '': timeout = None
|
||||
if timeout is not None and not isnum(timeout):
|
||||
tmp = parse_desthour(str(timeout))
|
||||
if tmp is None: tmp = parse_timeout(timeout)
|
||||
if tmp is None: tmp = int(timeout) * 60
|
||||
timeout = tmp
|
||||
if timeout == 0: timeout = None
|
||||
self.timeout = timeout
|
||||
self.elapsed = self.ZERO
|
||||
self.state = self.STATE_STOPPED
|
||||
if timeout is None:
|
||||
self.mode = self.MODE_CHRONOMETRE
|
||||
self.initial = self.__format(self.ZERO)
|
||||
else:
|
||||
self.mode = self.MODE_MINUTEUR
|
||||
self.max_elapsed = self.__delta(timeout)
|
||||
self.initial = self.__format(self.max_elapsed)
|
||||
|
||||
def is_chronometre(self):
|
||||
return self.mode == self.MODE_CHRONOMETRE
|
||||
|
||||
def is_minuteur(self):
|
||||
return self.mode == self.MODE_MINUTEUR
|
||||
|
||||
def get_elapsed(self):
|
||||
if self.date_start is None: return self.ZERO
|
||||
delta = Datetime.today() - self.date_start
|
||||
return self.elapsed + delta
|
||||
|
||||
def start(self, timeout=None):
|
||||
if timeout is None: timeout = self.timeout
|
||||
self.elapsed = self.ZERO
|
||||
self.date_start = Datetime.today()
|
||||
self.state = self.STATE_STARTED
|
||||
|
||||
def is_started(self):
|
||||
return self.state == self.STATE_STARTED
|
||||
|
||||
def pause(self):
|
||||
if self.state == self.STATE_PAUSED:
|
||||
self.date_start = Datetime.today()
|
||||
self.state = self.STATE_STARTED
|
||||
else:
|
||||
self.elapsed = self.get_elapsed()
|
||||
self.state = self.STATE_PAUSED
|
||||
|
||||
def is_paused(self):
|
||||
return self.state == self.STATE_PAUSED
|
||||
|
||||
def stop(self):
|
||||
self.elapsed = self.get_elapsed()
|
||||
self.state = self.STATE_STOPPED
|
||||
|
||||
def is_stopped(self):
|
||||
return self.state == self.STATE_STOPPED
|
||||
|
||||
def is_end(self):
|
||||
if not self.is_started(): return False
|
||||
if not self.is_minuteur(): return False
|
||||
elapsed = self.get_elapsed()
|
||||
return elapsed >= self.max_elapsed
|
||||
|
||||
def __repr__(self):
|
||||
elapsed = self.get_elapsed() if self.is_started() else self.elapsed
|
||||
if self.is_minuteur():
|
||||
delta = self.max_elapsed - elapsed
|
||||
if delta < self.ZERO: delta = self.ZERO
|
||||
return self.__format(delta)
|
||||
else:
|
||||
return self.__format(elapsed)
|
||||
|
||||
def run_chronometre(timeout=None, autostart=False):
|
||||
from Tkinter import Tk, Toplevel, Frame, Label, Entry, Button
|
||||
import tkMessageBox
|
||||
|
||||
class Dialog(Toplevel):
|
||||
def __init__(self, parent, title=None):
|
||||
self.result = None
|
||||
self.have_result = False
|
||||
|
||||
Toplevel.__init__(self, parent)
|
||||
self.transient(parent)
|
||||
if title: self.title(title)
|
||||
self.parent = parent
|
||||
|
||||
body = Frame(self)
|
||||
self.initial_focus = self.body(body)
|
||||
body.pack(padx=5, pady=5)
|
||||
self.buttonbox()
|
||||
self.grab_set()
|
||||
if not self.initial_focus: self.initial_focus = self
|
||||
self.protocol("WM_DELETE_WINDOW", self.cancel)
|
||||
self.geometry("+%d+%d" % (parent.winfo_rootx()+50,
|
||||
parent.winfo_rooty()+50))
|
||||
self.initial_focus.focus_set()
|
||||
self.wait_window(self)
|
||||
|
||||
def set_result(self, result):
|
||||
self.result = result
|
||||
self.have_result = True
|
||||
|
||||
def body(self, master):
|
||||
pass
|
||||
|
||||
def buttonbox(self):
|
||||
box = Frame(self)
|
||||
w = Button(box, text="OK", width=10, command=self.ok, default='active')
|
||||
w.pack(side='left', padx=5, pady=5)
|
||||
w = Button(box, text="Annuler", width=10, command=self.cancel)
|
||||
w.pack(side='left', padx=5, pady=5)
|
||||
self.bind("<Return>", self.ok)
|
||||
self.bind("<Escape>", self.cancel)
|
||||
box.pack()
|
||||
|
||||
def ok(self, event=None):
|
||||
if not self.validate():
|
||||
self.initial_focus.focus_set()
|
||||
return
|
||||
self.withdraw()
|
||||
self.update_idletasks()
|
||||
self.apply()
|
||||
self.cancel()
|
||||
|
||||
def cancel(self, event=None):
|
||||
self.parent.focus_set()
|
||||
self.destroy()
|
||||
|
||||
def validate(self):
|
||||
return True
|
||||
|
||||
def apply(self):
|
||||
pass
|
||||
|
||||
class Config(Dialog):
|
||||
def body(self, master):
|
||||
Label(master, text="Nb minutes", padx=20).grid(row=0)
|
||||
self.entry = Entry(master)
|
||||
self.entry.grid(row=0, column=1)
|
||||
return self.entry
|
||||
|
||||
def apply(self):
|
||||
value = self.entry.get()
|
||||
if value == "": result = None
|
||||
else: result = value
|
||||
self.set_result(result)
|
||||
|
||||
class Application(Frame):
|
||||
root = None
|
||||
chrono = None
|
||||
|
||||
def __init__(self, timeout=None, autostart=False, **kw):
|
||||
self.chrono = Chrono(timeout)
|
||||
|
||||
root = Tk()
|
||||
root.title("Chronomètre")
|
||||
root.columnconfigure(0, weight=1)
|
||||
root.rowconfigure(0, weight=1)
|
||||
root.bind("c", lambda event: self.do_config())
|
||||
root.bind("s", lambda event: self.do_start())
|
||||
root.bind("p", lambda event: self.do_pause())
|
||||
root.bind("<space>", lambda event: self.do_pause())
|
||||
root.bind("q", lambda event: self.quit())
|
||||
self.root = root
|
||||
|
||||
kw.update(master=root)
|
||||
Frame.__init__(self, **kw)
|
||||
|
||||
self.TIME = Label(self, width=10, height=2, text=self.chrono.initial, padx=30, pady=10, font=('Helvetica', 18, "normal"))
|
||||
self.START = Button(self, text="Start", command=self.do_start)
|
||||
self.PAUSE = Button(self, text="Pause", command=self.do_pause, state="disabled")
|
||||
self.CONFIG = Button(self, text="Config", command=self.do_config)
|
||||
self.QUIT = Button(self, text="Quit", command=self.quit)
|
||||
|
||||
self.grid(column=0, row=0, sticky='nsew')
|
||||
self.TIME.grid(column=0, row=0, columnspan=4, sticky='nsew')
|
||||
self.START.grid(column=0, row=1, sticky='ew')
|
||||
self.PAUSE.grid(column=1, row=1, sticky='ew')
|
||||
self.CONFIG.grid(column=2, row=1, sticky='ew')
|
||||
self.QUIT.grid(column=3, row=1, sticky='ew')
|
||||
|
||||
self.columnconfigure(0, weight=2)
|
||||
self.columnconfigure(1, weight=2)
|
||||
self.columnconfigure(2, weight=1)
|
||||
self.columnconfigure(3, weight=1)
|
||||
self.rowconfigure(0, weight=1)
|
||||
|
||||
if autostart: self.do_start()
|
||||
|
||||
def update_time(self):
|
||||
chrono = self.chrono
|
||||
self.TIME.configure(text=chrono)
|
||||
if chrono.is_started():
|
||||
if chrono.is_end():
|
||||
playSound(DEFAULT_SOUND)
|
||||
else:
|
||||
self.root.after(300, self.update_time)
|
||||
|
||||
def do_start(self):
|
||||
self.PAUSE.configure(state="normal", text="Pause")
|
||||
self.START.configure(text="reStart")
|
||||
self.chrono.start()
|
||||
self.update_time()
|
||||
|
||||
def do_pause(self):
|
||||
self.chrono.pause()
|
||||
if self.chrono.is_paused():
|
||||
self.PAUSE.configure(text="unPause")
|
||||
else:
|
||||
self.PAUSE.configure(text="Pause")
|
||||
self.update_time()
|
||||
|
||||
def do_config(self):
|
||||
chrono = self.chrono
|
||||
chrono.stop()
|
||||
config = Config(self.root)
|
||||
if config.have_result:
|
||||
try:
|
||||
self.PAUSE.configure(text="Pause", state="disabled")
|
||||
self.START.configure(text="Start")
|
||||
chrono.set_timeout(config.result)
|
||||
self.TIME.configure(text=chrono.initial)
|
||||
except:
|
||||
traceback.print_exc()
|
||||
tkMessageBox.showerror("Valeur invalide", sys.exc_info()[1])
|
||||
|
||||
Application(timeout, autostart).mainloop()
|
||||
|
||||
if __name__ == '__main__':
|
||||
from argparse import ArgumentParser, HelpFormatter
|
||||
if sys.argv[1:2] == ['--compat']:
|
||||
# Avec l'argument --compat, désactiver la classe FancyHelpFormatter qui
|
||||
# se base sur une API non documentée
|
||||
sys.argv = sys.argv[0:1] + sys.argv[2:]
|
||||
FancyHelpFormatter = HelpFormatter
|
||||
else:
|
||||
class FancyHelpFormatter(HelpFormatter):
|
||||
"""Comme HelpFormatter, mais ne touche pas aux lignes qui commencent par les
|
||||
caractères '>>>'. Cela permet de mixer du texte formaté et du texte non
|
||||
formaté.
|
||||
"""
|
||||
def _fill_text(self, text, width, indent):
|
||||
return ''.join([indent + line for line in text.splitlines(True)])
|
||||
def _split_lines(self, text, width):
|
||||
lines = ['']
|
||||
for line in text.splitlines():
|
||||
if line.startswith('>>>'):
|
||||
lines.append(line)
|
||||
lines.append('')
|
||||
else:
|
||||
lines[-1] += '\n' + line
|
||||
lines = filter(None, lines)
|
||||
texts = []
|
||||
for line in lines:
|
||||
if line.startswith('>>>'):
|
||||
texts.append(line[3:])
|
||||
else:
|
||||
texts.extend(super(FancyHelpFormatter, self)._split_lines(line, width))
|
||||
return texts
|
||||
AP = ArgumentParser(
|
||||
usage=u"%(prog)s [options] [TIMEOUT]",
|
||||
description=u"Afficher un chronomètre",
|
||||
epilog=u"Si TIMEOUT est spécifié, par défaut le décompte démarre automatiquement.",
|
||||
formatter_class=FancyHelpFormatter,
|
||||
)
|
||||
AP.set_defaults(autostart=None, timeout=None)
|
||||
AP.add_argument('timeout', metavar='TIMEOUT', nargs='?',
|
||||
help=u"""\
|
||||
>>> '' (valeur vide)
|
||||
chronomètre qui démarre à 0:00 et ne s'arrête pas
|
||||
>>> 'H:M:S' (heures:minutes:secondes)
|
||||
>>> ou 'M:S' (minutes:secondes)
|
||||
>>> ou 'M' (minutes)
|
||||
minuteur qui démarre à H:M:S et fait un décompte jusqu'à 0:00. A la fin
|
||||
du décompte, une sonnerie retentit.
|
||||
>>> '@H[:M[:S]]'
|
||||
minuteur qui fonctionne comme précédemment, sauf qu'on spécifie l'heure
|
||||
d'arrivée, et que la durée est calculée automatiquement""")
|
||||
AP.add_argument('-n', '--no-autostart', dest='autostart', action='store_false',
|
||||
help=u"Ne pas démarrer automatiquement le décompte même si TIMEOUT est spécifié.")
|
||||
AP.add_argument('-s', '--autostart', dest='autostart', action='store_true',
|
||||
help=u"Forcer le démarrage automatique du décompte, même si TIMEOUT n'est pas spécifié.")
|
||||
o = AP.parse_args()
|
||||
|
||||
autostart = o.autostart
|
||||
if autostart is None: autostart = o.timeout is not None
|
||||
o.autostart = autostart
|
||||
|
||||
timeout = o.timeout
|
||||
if timeout is None: timeout = DEFAULT_TIMEOUT
|
||||
o.timeout = timeout
|
||||
|
||||
run_chronometre(o.timeout, o.autostart)
|
@ -411,7 +411,7 @@ javac* | jikes*)
|
||||
fi
|
||||
[[ ! -z "${execute:="${compilerDir}java -cp $cacheDir${classPath:+:$classPath} $mainClass"}" ]]
|
||||
# Prepare to tell javac to compile for the latest language version it supports
|
||||
sourceVersion="-source $(${compilerDir}java -version 2>&1 | sed -n '1s,[^"]*"\([1-9][1-9]*\.[1-9][1-9]*\).*,\1,p')"
|
||||
sourceVersion="-source $(${compilerDir}java -version 2>&1 | sed -n '1{s/.*"\(.*\)".*/\1/; s/^1\.//; s/\..*//; p}')"
|
||||
;;
|
||||
jikes*)
|
||||
if [[ -z "$classPath" && -z "$compilerArgs" && -z "$CLASSPATH" ]] ; then
|
||||
|
172
create-user
Executable file
172
create-user
Executable file
@ -0,0 +1,172 @@
|
||||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: créer un utilisateur sudoer et lui installer une clé publique ssh
|
||||
|
||||
USAGE
|
||||
$scriptname user [-p pubkey]
|
||||
|
||||
OPTIONS
|
||||
-p, --pkfile PKFILE
|
||||
Installer la clé publique ssh contenue dans le fichier spécifié. Par
|
||||
défaut, prendre le fichier ~/.ssh/id_rsa.pub de l'utilisateur courant.
|
||||
-s, --pkstring PUBKEY
|
||||
Installer la clé publique ssh spécifiée. Cette option avancée n'est pas
|
||||
utilisée en temps normal. Elle a la priorité sur l'option --pkfile
|
||||
-l, --luser
|
||||
Ne pas donner à l'utilisateur le droit de sudoer.
|
||||
-h, --host [USER@]HOST
|
||||
Créer l'utilisateur sur l'hôte distant spécifié. Si l'utilisateur
|
||||
distant n'est pas root, il doit être sudoer.
|
||||
-T, --tmproot TMPROOT
|
||||
Spécifier le répertoire temporaire sur l'hôte distant, comme par exemple
|
||||
/var/tmp. Cette option est utile pour certains serveurs, qui ont un /tmp
|
||||
minuscule.
|
||||
-S, --ssh SSH
|
||||
Spécifier le programme à utiliser pour la connection par ssh."
|
||||
}
|
||||
|
||||
function create_user() {
|
||||
# Créer le user, si nécessaire
|
||||
# retourner vrai si le user a été créé, faux si ce n'était pas nécessaire
|
||||
local user="$1" password="$2"
|
||||
[ -z "$(getent passwd "$user")" ] || return 1
|
||||
estep "Creation de l'utilisateur $user..."
|
||||
useradd -s /bin/bash -m "$user"
|
||||
[ -n "$password" ] || return 0
|
||||
if ! (echo "$password" | passwd --stdin "$user" 2>/dev/null); then
|
||||
echo "$user:$password" | chpasswd
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
function init_sudoer() {
|
||||
local user="$1"
|
||||
local TAB=$'\t'
|
||||
if [ -d /etc/sudoers.d ]; then
|
||||
if [ ! -f "/etc/sudoers.d/$user" ]; then
|
||||
estep "Ajout de $user comme sudoer dans /etc/sudoers.d/$user"
|
||||
echo "$user${TAB}ALL=(ALL) NOPASSWD: ALL" >"/etc/sudoers.d/$user"
|
||||
chmod 440 "/etc/sudoers.d/$user"
|
||||
fi
|
||||
elif [ -f /etc/sudoers ]; then
|
||||
if ! grep -q "^$user" /etc/sudoers; then
|
||||
estep "Ajout de user comme sudoer dans /etc/sudoers..."
|
||||
echo "$user${TAB}ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function install_pubkeys() {
|
||||
# Installer la clé $1 pour l'utilisateur $2
|
||||
# $1 peut contenir autant de clés que nécessaire, une par ligne
|
||||
local user="$1" pubkeys="$2"
|
||||
local homedir="$(eval "echo ~$user")"
|
||||
[ -d "$homedir" ] || return
|
||||
|
||||
local sshdir="$homedir/.ssh"
|
||||
if [ ! -d "$sshdir" ]; then
|
||||
mkdir -p "$sshdir"
|
||||
chmod 700 "$sshdir"
|
||||
chown -R "$user:" "$sshdir"
|
||||
fi
|
||||
local ak="$sshdir/authorized_keys"
|
||||
if [ ! -f "$ak" ]; then
|
||||
touch "$ak"
|
||||
chown "$user:" "$ak"
|
||||
fi
|
||||
|
||||
local -a pks
|
||||
local pk
|
||||
array_from_lines pks "$pubkeys"
|
||||
for pk in "${pks[@]}"; do
|
||||
if ! grep -q "$pk" "$ak"; then
|
||||
estep "Installation de la clé ${pk:0:20}... pour $user"
|
||||
echo "$pk" >>"$ak"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
pkfile=
|
||||
pkstring=
|
||||
luser=
|
||||
host=
|
||||
tmproot=
|
||||
SSH=
|
||||
args=(
|
||||
--help '$exit_with display_help'
|
||||
-p:,--pkfile: pkfile=
|
||||
-s:,--pkstring: pkstring=
|
||||
-l,--luser luser=1
|
||||
-h:,-H:,--host: host=
|
||||
-T:,--tmproot: tmproot=
|
||||
-S:,--ssh: SSH=
|
||||
)
|
||||
parse_args "$@"; set -- "${args[@]}"
|
||||
|
||||
user="$1"
|
||||
[ -n "$user" ] || die "Vous devez spécifier l'utilisateur à créer"
|
||||
|
||||
if [ -z "$pkstring" ]; then
|
||||
if [ -z "$pkfile" ]; then
|
||||
if [ -f ~/.ssh/id_rsa.pub ]; then pkfile=~/.ssh/id_rsa.pub
|
||||
elif [ -f ~/.ssh/id_dsa.pub ]; then pkfile=~/.ssh/id_dsa.pub
|
||||
fi
|
||||
fi
|
||||
if [ -f "$pkfile" ]; then pkstring="$(<"$pkfile")"
|
||||
elif [ -n "$pkfile" ]; then die "$pkfile: fichier introuvable"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$host" ]; then
|
||||
# déploiement local
|
||||
run_as_root ${pkstring:+-s "$pkstring"} ${luser:+-l} "$user"
|
||||
create_user "$user"
|
||||
[ -z "$luser" ] && init_sudoer "$user"
|
||||
[ -n "$pkstring" ] && install_pubkeys "$user" "$pkstring"
|
||||
exit 0
|
||||
|
||||
else
|
||||
# déploiement distant
|
||||
if [ -n "$host" ]; then
|
||||
splituserhost "$host" remoteuser host
|
||||
[ -n "$remoteuser" ] || remoteuser=root
|
||||
fi
|
||||
if [ -n "$SSH" ]; then
|
||||
ssh=("$SSH" -o StrictHostKeyChecking=no -o ConnectTimeout=2 -qt)
|
||||
scp=(scp -S "$SSH" -o StrictHostKeyChecking=no -o ConnectTimeout=2 -q)
|
||||
else
|
||||
ssh=(ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 -qt)
|
||||
scp=(scp -o StrictHostKeyChecking=no -o ConnectTimeout=2 -q)
|
||||
fi
|
||||
|
||||
ac_set_tmpdir workdir
|
||||
mkdir "$workdir/lib"
|
||||
ulibsync "$workdir/lib"
|
||||
cp "$script" "$workdir"
|
||||
echo "#!/bin/bash
|
||||
$(qvals "./$scriptname" ${pkstring:+-s "$pkstring"} ${luser:+-l} "$user")" >"$workdir/do_remote"
|
||||
chmod +x "$workdir/do_remote"
|
||||
|
||||
ac_set_tmpfile archive
|
||||
archivename="$(basename "$archive")"
|
||||
|
||||
"$scriptdir/mkusfx" --tmp-archive --bare -o "$archive" "$workdir" ./do_remote || die
|
||||
|
||||
estep "Copie du script sur $remoteuser@$host"
|
||||
"${scp[@]}" "$archive" "$remoteuser@$host:" || die
|
||||
|
||||
estep "Exécution du script"
|
||||
"${ssh[@]}" "$remoteuser@$host" "\
|
||||
__estack=$(qval "$__estack")
|
||||
__tlevel=$(qval "$__tlevel")
|
||||
export __estack __tlevel
|
||||
${UTOOLS_LANG:+UTOOLS_LANG='$UTOOLS_LANG'; export UTOOLS_LANG
|
||||
}$(qvals "./$archivename" ${tmproot:+--tmproot "$tmproot"})"
|
||||
r=$?
|
||||
ac_clean "$workdir"
|
||||
|
||||
exit $r
|
||||
fi
|
65
cssh
65
cssh
@ -1,7 +1,6 @@
|
||||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS
|
||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: Faire une connexion ssh en lançant automatiquement un screen sur l'hôte distant
|
||||
@ -23,55 +22,19 @@ vars="$("$scriptdir/ussh" --parse "$@")" || die
|
||||
eval "$vars"
|
||||
[ "${#hosts[*]}" -gt 0 ] || die "Vous devez spécifier l'hôte sur lequel se connecter"
|
||||
|
||||
cmd="'$(quoted_args "${args[@]}")
|
||||
"'
|
||||
function __ask() {
|
||||
local r
|
||||
read -p "$1" -t 2 r
|
||||
[ $? -gt 128 -o -z "$r" -o "$r" == "o" -o "$r" == "O" -o "$r" == "y" -o "$r" == "Y" ]
|
||||
}
|
||||
|
||||
function __auto_screen() {
|
||||
# Si on est déjà dans screen, ne rien faire
|
||||
[ -z "$STY" ] || return
|
||||
|
||||
local msgprefix
|
||||
local screens count
|
||||
|
||||
screens="$(LANG=C screen -ls | grep -Ei "attached|detached")"
|
||||
if [ -n "$screens" ]; then
|
||||
count="$(echo "$screens" | wc -l)"
|
||||
else
|
||||
count=0
|
||||
fi
|
||||
if [ $count -gt 0 ]; then
|
||||
if [ $count -eq 1 ]; then
|
||||
msgprefix="Il y a '"$COULEUR_BLEUE"'1 session screen en cours'"$COULEUR_NORMALE"'
|
||||
Cette session"
|
||||
else
|
||||
msgprefix="Il y a '"$COULEUR_ROUGE"'$count sessions screen en cours'"$COULEUR_NORMALE"':
|
||||
$screens
|
||||
La première session"
|
||||
fi
|
||||
if __ask "
|
||||
$msgprefix sera reconnectée automatiquent dans 2 secondes
|
||||
Voulez-vous reconnecter la session screen? [On] "; then
|
||||
exec screen -q -s -/bin/bash -xRR
|
||||
else
|
||||
exec /bin/bash -l
|
||||
fi
|
||||
elif __ask "
|
||||
Une '"$COULEUR_VERTE"'nouvelle session screen'"$COULEUR_NORMALE"' sera lancée automatiquement dans 2 secondes
|
||||
Voulez-vous lancer une session screen? [On] "; then
|
||||
exec screen -q -s -/bin/bash -RR
|
||||
else
|
||||
exec /bin/bash -l
|
||||
fi
|
||||
}
|
||||
|
||||
__auto_screen
|
||||
'\'
|
||||
[ ${#args[*]} -gt 0 ] && cmd="$(qvals "${args[@]}"); " || cmd=
|
||||
cmd="$cmd
|
||||
export LOCKPRG=/bin/true; $(<"$scriptdir/Sscreen")"
|
||||
cmd="'${cmd//\'/\'\\\'\'}'"
|
||||
|
||||
for host in "${hosts[@]}"; do
|
||||
${exec:+exec} "$ssh" "${options[@]}" -t "$host" -- /bin/bash -c "$cmd"
|
||||
"$ssh" \
|
||||
"${options[@]}" -qt "$host" -- \
|
||||
"export LOCKPRG=/bin/true; [ -x /usr/local/nutools/Sscreen ] && exec /usr/local/nutools/Sscreen $(qvals "${args[@]}") || exit 123"
|
||||
if [ $? -eq 123 ]; then
|
||||
# pas de Sscreen en face, le faire à la main
|
||||
${exec:+exec} \
|
||||
"$ssh" "${options[@]}" -t "$host" -- \
|
||||
/bin/bash -c "$cmd"
|
||||
fi
|
||||
done
|
||||
|
124
cx-conndev
Executable file
124
cx-conndev
Executable file
@ -0,0 +1,124 @@
|
||||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
||||
|
||||
[ -n "$COMPOSE_V1" ] && DOCKER_COMPOSE=(docker-compose) || DOCKER_COMPOSE=(docker compose)
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: se connecter à la base MySQL
|
||||
|
||||
USAGE
|
||||
$scriptname [DATABASE]
|
||||
$scriptname -d [-uUSER [-pPASSWORD]] DATABASES... >backup.sql
|
||||
$scriptname -c [-uUSER [-pPASSWORD]] <backup.sql
|
||||
|
||||
OPTIONS
|
||||
--compose-v1
|
||||
Forcer l'utilisation de docker-compose v1
|
||||
-h, -s, --service SERVICE
|
||||
Spécifier le nom du service. La valeur par défaut est db
|
||||
-i, --ipnum IPNUM
|
||||
Si le service est dans plusieurs réseaux, sélectionner le numéro du
|
||||
réseau à attaquer en commençant à 1 (la liste sera affichée si cette
|
||||
option n'est pas spécifiée)
|
||||
-c, --mysql-cmd
|
||||
Lancer 'mysql -hSERVICE_IP' avec les arguments supplémentaires fournis
|
||||
sur la ligne de commande
|
||||
-d, --mysqldump-cmd
|
||||
Lancer 'mysqldump --databases --add-drop-database -hSERVICE_IP' avec
|
||||
les arguments supplémentaires fournis sur la ligne de commande
|
||||
-k, --klean
|
||||
Lancer la commande 'klean' dans le container spécifié (supprime toutes
|
||||
les données et relance le container)
|
||||
-u, --user USER
|
||||
-p, --password PASSWORD
|
||||
Paramètres supplémentaires utilisés uniquement avec les options -c et -d"
|
||||
}
|
||||
|
||||
service=db
|
||||
ipnum=
|
||||
mysql_cmd=
|
||||
mysqldump_cmd=
|
||||
klean=
|
||||
user=
|
||||
password=
|
||||
args=(
|
||||
--help '$exit_with display_help'
|
||||
--compose-v1 '$DOCKER_COMPOSE=(docker-compose)'
|
||||
-h:,-s:,--service: service=
|
||||
-i:,--ipnum: ipnum=
|
||||
-c,--mysql-cmd mysql_cmd=1
|
||||
-d,--mysqldump-cmd mysqldump_cmd=1
|
||||
-k,--klean klean=1
|
||||
-u:,--user: user=
|
||||
-p:,--password: password=
|
||||
)
|
||||
parse_args "$@"; set -- "${args[@]}"
|
||||
|
||||
[ -n "$service" ] || die "Vous devez spécifier le nom du service"
|
||||
|
||||
found=
|
||||
first=1
|
||||
while true; do
|
||||
if [ -f composer.json ]; then
|
||||
found=1
|
||||
break
|
||||
fi
|
||||
first=
|
||||
cd ..
|
||||
if [ "$(pwd)" == "$HOME" ]; then
|
||||
die "Cette commande ne peut être lancée que depuis un projet Composer"
|
||||
fi
|
||||
done
|
||||
if [ -z "$first" ]; then
|
||||
enote "Le répertoire du projet est $(ppath . ~)"
|
||||
fi
|
||||
|
||||
###
|
||||
|
||||
function die_not_found() { die "$service: service introuvable. vérifiez que le projet est actuellement up"; }
|
||||
setx cid="${DOCKER_COMPOSE[@]}" ps -q "$service" 2>/dev/null || die_not_found
|
||||
[ -n "$cid" ] || die_not_found
|
||||
edebug "$service id: $cid"
|
||||
|
||||
function die_not_found() { die "$service: $cid: ip introuvable"; }
|
||||
setx ip=docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}},{{end}}' "$cid" || die_not_found
|
||||
[ -n "$ip" ] || die_not_found
|
||||
ipdesc="${ip%,}"
|
||||
if [ -z "$ipnum" ] && [[ "$ipdesc" == *,* ]]; then
|
||||
enote "Le service est accessible sur plusieurs adresses ip: $ipdesc"
|
||||
enote "Pensez à spécifier l'option -i pour désigner l'adresse à utiliser (-i1 pour la première, -i2 pour la seconde, etc.)"
|
||||
fi
|
||||
if [ -n "$ipnum" ]; then
|
||||
let ipnum=ipnum-1
|
||||
while [ $ipnum -gt 0 ]; do
|
||||
ip="${ip#*,}"
|
||||
let ipnum=ipnum-1
|
||||
done
|
||||
fi
|
||||
ip="${ip%%,*}"
|
||||
[ -n "$ip" ] || die_not_found
|
||||
edebug "$service ip: $ip"
|
||||
|
||||
if [ -n "$mysql_cmd" ]; then
|
||||
mysql -h"$ip" ${user:+-u"$user"} ${password:+-p"$password"} "$@"
|
||||
|
||||
elif [ -n "$mysqldump_cmd" ]; then
|
||||
mysqldump --databases --add-drop-database -h"$ip" ${user:+-u"$user"} ${password:+-p"$password"} "$@"
|
||||
|
||||
elif [ -n "$klean" ]; then
|
||||
estep "klean"
|
||||
docker exec "$cid" klean
|
||||
estep "wait 10sec..."
|
||||
sleep 10
|
||||
estep "start"
|
||||
"${DOCKER_COMPOSE[@]}" start "$service"
|
||||
|
||||
else
|
||||
[ -f bin/conndev.php ] || die "Impossible de trouver le script compagnon conndev.php"
|
||||
|
||||
mysql_cmd="$(php bin/conndev.php "$ip" "$@")"
|
||||
edebug "mysql_cmd: $mysql_cmd"
|
||||
|
||||
eval "$mysql_cmd"
|
||||
fi
|
60
cx-shelldev
Executable file
60
cx-shelldev
Executable file
@ -0,0 +1,60 @@
|
||||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
||||
|
||||
[ -n "$COMPOSE_V1" ] && DOCKER_COMPOSE=(docker-compose) || DOCKER_COMPOSE=(docker compose)
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: ouvrir un shell dans le container
|
||||
|
||||
USAGE
|
||||
$scriptname [CMD...]
|
||||
|
||||
OPTIONS
|
||||
--compose-v1
|
||||
Forcer l'utilisation de docker-compose v1
|
||||
-h, -s, --service SERVICE
|
||||
Spécifier le nom du service sur lequel ouvrir le shell
|
||||
-d, --db
|
||||
équivalent à -s db
|
||||
-w, --web
|
||||
équivalent à -s web (c'est la valeur par défaut)"
|
||||
}
|
||||
|
||||
service=web
|
||||
args=(
|
||||
--help '$exit_with display_help'
|
||||
--compose-v1 '$DOCKER_COMPOSE=(docker-compose)'
|
||||
-h:,-s:,--service: service=
|
||||
-d,--db service=db
|
||||
-w,--web service=web
|
||||
)
|
||||
parse_args "$@"; set -- "${args[@]}"
|
||||
|
||||
[ -n "$service" ] || die "Vous devez spécifier le nom du service"
|
||||
|
||||
found=
|
||||
first=1
|
||||
while true; do
|
||||
if [ -f composer.json ]; then
|
||||
found=1
|
||||
break
|
||||
fi
|
||||
first=
|
||||
cd ..
|
||||
if [ "$(pwd)" == "$HOME" ]; then
|
||||
die "Cette commande ne peut être lancée que depuis un projet Composer"
|
||||
fi
|
||||
done
|
||||
if [ -z "$first" ]; then
|
||||
enote "Le répertoire du projet est $(ppath . ~)"
|
||||
fi
|
||||
|
||||
###
|
||||
|
||||
setx cid="${DOCKER_COMPOSE[@]}" ps -q "$service" 2>/dev/null || die "$service: service introuvable"
|
||||
|
||||
cmd=("$@")
|
||||
[ ${#cmd[*]} -gt 0 ] || cmd=(bash)
|
||||
|
||||
"${DOCKER_COMPOSE[@]}" exec "$service" "${cmd[@]}"
|
282
cx-updatedev
Executable file
282
cx-updatedev
Executable file
@ -0,0 +1,282 @@
|
||||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: mettre à jour un module ur/* ou lib/* sans utiliser composer
|
||||
|
||||
ça permet de faire du développement plus rapidement sans utiliser les dépôts de
|
||||
type path
|
||||
|
||||
USAGE
|
||||
$scriptname modules...
|
||||
|
||||
OPTIONS
|
||||
-n, --fake
|
||||
Afficher simplement ce qui serait fait
|
||||
-q, --quiet
|
||||
Ne pas lancer rsync en mode verbose
|
||||
-g, --no-wait
|
||||
Ne pas attendre avant de faire git commit
|
||||
--rsync
|
||||
Mettre à jour les répertoires dans vendor/ qui ne sont pas des liens
|
||||
symboliques à partir des projets dépendants correspondants. Les liens
|
||||
symboliques créés avec --link sont ignorés. C'est l'option par défaut.
|
||||
-l, --link
|
||||
Transformer les clones de dépôts dans vendor/ en liens symboliques vers
|
||||
les projets dépendants correpondants.
|
||||
-k, --copy
|
||||
Transformer les liens symboliques dans vendor/ en copies des projets
|
||||
dépendants correspondants. Les répertoires qui ne sont pas des liens
|
||||
symboliques sont ignorés.
|
||||
Cette option peut être considérée comme le contraire de --link
|
||||
-i, --install
|
||||
Supprimer les répertoires des projets dépendants dans vendor/, qu'il
|
||||
s'agisse de liens symboliques ou de répertoires normaux, puis les faire
|
||||
recréer par 'composer i'
|
||||
Celà permet de ramener le projet à l'état original.
|
||||
-j, --reinstall-link
|
||||
Supprimer les répertoires des projets dépendants dans vendor/ s'il
|
||||
s'agit de liens symboliques, puis les faire recréer par 'composer i'
|
||||
Cette variante est plus rapide que --install puisqu'on ne cherche pas à
|
||||
tout recréer.
|
||||
-u, --update
|
||||
Supprimer les répertoires des projets dépendants dans vendor/, qu'il
|
||||
s'agisse de liens symboliques ou de répertoires normaux, puis les faire
|
||||
recréer par 'composer u'
|
||||
Celà permet de mettre à jour le projet sans les erreurs qui résultent
|
||||
des modifications faites par les autres actions.
|
||||
-w, --update-commit
|
||||
Mettre à jour le projet avec --update puis enregistrer les modifications
|
||||
éventuelles dans git
|
||||
--ud, --update-deps
|
||||
Mettre à jour les projets dépendants avec --update-commit avant de
|
||||
mettre à jour le projet courant.
|
||||
--ur, --update-recursive
|
||||
Mettre à jour de façon récursive tous les projets dépendants.
|
||||
NB: les modifications dans les projets dépendants seront automatiquement
|
||||
enregistrées dans git."
|
||||
}
|
||||
|
||||
fake=
|
||||
verbose=1
|
||||
nowait=
|
||||
action=rsync
|
||||
args=(
|
||||
--help '$exit_with display_help'
|
||||
-d:,--project-dir: projdir=
|
||||
-n,--fake fake=1
|
||||
-q,--quiet verbose=
|
||||
-g,--no-wait nowait=1
|
||||
-l,--link action=link
|
||||
-k,--copy action=copy
|
||||
-i,--install action=install
|
||||
-j,--reinstall-link action=reinstall-link
|
||||
-u,--update action=update
|
||||
-w,--update-commit action=update-commit
|
||||
--ud,--update-deps action=update-deps
|
||||
--ur,--update-recursive action=update-recursive
|
||||
)
|
||||
parse_args "$@"; set -- "${args[@]}"
|
||||
|
||||
if [ -d "$projdir" ]; then
|
||||
cd "$projdir"
|
||||
elif [ -e "$projdir" ]; then
|
||||
die "$projdir: répertoire introuvable"
|
||||
fi
|
||||
|
||||
found=
|
||||
first=1
|
||||
while true; do
|
||||
if [ -f composer.json ]; then
|
||||
found=1
|
||||
break
|
||||
fi
|
||||
first=
|
||||
cd ..
|
||||
if [ "$(pwd)" == "$HOME" ]; then
|
||||
die "Cette commande ne peut être lancée que depuis un projet Composer"
|
||||
fi
|
||||
done
|
||||
if [ -z "$first" ]; then
|
||||
enote "Le répertoire du projet est $(ppath . ~)"
|
||||
fi
|
||||
|
||||
if [ "$action" == update-deps -o "$action" == update-recursive ]; then
|
||||
# avec update-deps et update-recursive, tous les modules doivent être
|
||||
# considérés
|
||||
set --
|
||||
fi
|
||||
|
||||
###
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
setx -a ms=list_dirs vendor "ur/*" "lib/*"
|
||||
set -- "${ms[@]}"
|
||||
fi
|
||||
|
||||
function check_module() {
|
||||
[ -d "../$m" ] || die "$m: module introuvable"
|
||||
}
|
||||
function update_with_rsync() {
|
||||
local -a rsync_args
|
||||
rsync_args=(
|
||||
-a ${fake:+-n} ${verbose:+-v}
|
||||
--delete
|
||||
-f "- /.git/"
|
||||
-f "- /vendor/"
|
||||
"../$m/" "vendor/$p"
|
||||
)
|
||||
rsync "${rsync_args[@]}"
|
||||
}
|
||||
|
||||
deps=()
|
||||
modules=()
|
||||
for m in "$@"; do
|
||||
m="${m#vendor/}" # pour permettre de spécifier le chemin directement
|
||||
m="${m//\//-}"
|
||||
case "$m" in
|
||||
ur-*|lib-*) ;;
|
||||
*) m="ur-$m";;
|
||||
esac
|
||||
modules+=("$m")
|
||||
p="${m//-/\/}"
|
||||
|
||||
check_module
|
||||
case "$action" in
|
||||
rsync)
|
||||
# Action par défaut: ignorer les liens et synchroniser les copies
|
||||
if [ ! -L "vendor/$p" ]; then
|
||||
etitle "$m"
|
||||
update_with_rsync
|
||||
eend
|
||||
fi
|
||||
;;
|
||||
link)
|
||||
# Ignorer les liens et transformer les copies en liens
|
||||
if [ ! -L "vendor/$p" ]; then
|
||||
link="$m"
|
||||
path="/project/vendor/$p"
|
||||
path="${path%/*}"
|
||||
while [ -n "$path" ]; do
|
||||
link="../$link"
|
||||
path="${path%/*}"
|
||||
done
|
||||
|
||||
etitle "$m"
|
||||
estep "suppr. vendor/$p"
|
||||
rm -rf "vendor/$p"
|
||||
mkdirof "vendor/$p"
|
||||
|
||||
estep "vendor/$p --> $link"
|
||||
ln -s "$link" "vendor/$p"
|
||||
eend
|
||||
fi
|
||||
;;
|
||||
copy)
|
||||
# Transformer les liens en copie et les synchroniser
|
||||
etitle "$m"
|
||||
if [ -L "vendor/$p" ]; then
|
||||
estep "suppr. vendor/$p"
|
||||
rm -f "vendor/$p"
|
||||
fi
|
||||
update_with_rsync
|
||||
eend
|
||||
;;
|
||||
install)
|
||||
# Supprimer les liens et répertoires...
|
||||
etitle "$m"
|
||||
if [ -e "vendor/$p" ]; then
|
||||
estep "suppr. vendor/$p"
|
||||
rm -rf "vendor/$p"
|
||||
fi
|
||||
array_add deps "$p"
|
||||
eend
|
||||
;;
|
||||
reinstall-link)
|
||||
# Supprimer les liens uniquement...
|
||||
etitle "$m"
|
||||
if [ -L "vendor/$p" ]; then
|
||||
estep "suppr. vendor/$p"
|
||||
rm -f "vendor/$p"
|
||||
fi
|
||||
array_add deps "$p"
|
||||
eend
|
||||
;;
|
||||
update|update-commit|update-deps|update-recursive)
|
||||
# Supprimer les liens et répertoires...
|
||||
etitle "$m"
|
||||
if [ -e "vendor/$p" ]; then
|
||||
estep "suppr. vendor/$p"
|
||||
rm -rf "vendor/$p"
|
||||
fi
|
||||
array_add deps "$p"
|
||||
eend
|
||||
;;
|
||||
*) die "$action: action inconnue";;
|
||||
esac
|
||||
done
|
||||
|
||||
case "$action" in
|
||||
install|reinstall-link)
|
||||
# ... puis installer les dépendances
|
||||
estep "Installation des dépendances"
|
||||
"$scriptdir/dk" ci || die
|
||||
;;
|
||||
update|update-commit)
|
||||
# ... puis mettre à jour les dépendances
|
||||
estep "Mise à jour des dépendances"
|
||||
"$scriptdir/dk" cu "${deps[@]}" || die
|
||||
|
||||
if [ "$action" == update-commit ]; then
|
||||
if [ -z "$nowait" ]; then
|
||||
# laisser le temps à @$*! d'eclipse qui met à jour automatiquement le projet...
|
||||
estep "Attendre 10 secondes avant git commit"
|
||||
sleep 10
|
||||
fi
|
||||
|
||||
estep "Enregistrement dans git"
|
||||
pci -A "maj deps"
|
||||
fi
|
||||
;;
|
||||
update-deps)
|
||||
# mettre à jour les dépendances directes
|
||||
for m in "${modules[@]}"; do
|
||||
etitle "Mise à jour projet dépendant: $m"
|
||||
"$script" -d "../$m" -w
|
||||
eend
|
||||
done
|
||||
|
||||
estep "Mise à jour des dépendances"
|
||||
"$scriptdir/dk" cu || die
|
||||
|
||||
if [ -z "$nowait" ]; then
|
||||
# laisser le temps à @$*! d'eclipse qui met à jour automatiquement le projet...
|
||||
estep "Attendre 10 secondes avant git commit"
|
||||
sleep 10
|
||||
fi
|
||||
|
||||
estep "Enregistrement dans git"
|
||||
pci -A "maj deps"
|
||||
;;
|
||||
update-recursive)
|
||||
# mettre à jour les dépendances de façon récursive
|
||||
for m in "${modules[@]}"; do
|
||||
etitle "Mise à jour récursive: $m"
|
||||
"$script" -d "../$m" --ur
|
||||
eend
|
||||
done
|
||||
|
||||
estep "Mise à jour des dépendances"
|
||||
"$scriptdir/dk" cu || die
|
||||
|
||||
if [ -z "$nowait" ]; then
|
||||
# laisser le temps à @$*! d'eclipse qui met à jour automatiquement le projet...
|
||||
estep "Attendre 10 secondes avant git commit"
|
||||
sleep 10
|
||||
fi
|
||||
|
||||
estep "Enregistrement dans git"
|
||||
pci -A "maj deps"
|
||||
;;
|
||||
esac
|
132
dmcerts
Executable file
132
dmcerts
Executable file
@ -0,0 +1,132 @@
|
||||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
||||
urequire install
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: gérer les certificats de docker-machine
|
||||
|
||||
Les certificats créés par docker-machine ont une durée trop courte à mon goût.
|
||||
Ce script permet de les recréer avec une durée de 30 ans pour le CA et le
|
||||
certificat client, et de 10 ans pour chaque machine
|
||||
|
||||
USAGE
|
||||
$scriptname [host]"
|
||||
}
|
||||
|
||||
args=(
|
||||
--help '$exit_with display_help'
|
||||
)
|
||||
parse_args "$@"; set -- "${args[@]}"
|
||||
|
||||
dmdir="$HOME/.docker/machine"
|
||||
|
||||
cadir="$dmdir/dmcerts"
|
||||
cakey="$cadir/dmca.key"
|
||||
cacsr="$cadir/dmca.csr"
|
||||
cacrt="$cadir/dmca.crt"
|
||||
cacrl="$cadir/dmca.crl"
|
||||
if [ ! -d "$cadir" ]; then
|
||||
enote "Le répertoire $cadir va être créé. Ne faites cela que si c'est la première fois. Sinon, récupérez le répertoire déjà créé par ailleurs"
|
||||
ask_yesno "Voulez-vous continuer?" N || die
|
||||
|
||||
mkdir "$cadir"
|
||||
chmod 700 "$cadir"
|
||||
mkdir "$cadir"/{openssl,newcerts}
|
||||
touch "$cadir/index.txt"
|
||||
echo 01 >"$cadir/serial"
|
||||
|
||||
for src in "$scriptdir"/lib/dmcerts_openssl_*.cnf; do
|
||||
dest="$cadir/openssl/${src#$scriptdir/lib/dmcerts_openssl_}"
|
||||
cp "$src" "$dest"
|
||||
done
|
||||
sed -i "s/^dir = .*/dir = ${cadir//\//\\\/}/" "$cadir/openssl/"*.cnf
|
||||
|
||||
openssl req -config "$cadir/openssl/ca.cnf" -batch -new -nodes -keyout "$cakey" -out "$cacsr" &&
|
||||
openssl ca -config "$cadir/openssl/ca.cnf" -batch -notext -out "$cacrt" -days 10950 -keyfile "$cakey" -selfsign -extensions v3_ca -infiles "$cacsr" &&
|
||||
openssl ca -config "$cadir/openssl/ca.cnf" -batch -gencrl -out "$cacrl" ||
|
||||
die "Une erreur s'est produite. Veuillez supprimer $cadir et recommencer"
|
||||
fi
|
||||
|
||||
clientkey="$cadir/dmclient.key"
|
||||
clientcsr="$cadir/dmclient.csr"
|
||||
clientcrt="$cadir/dmclient.crt"
|
||||
clientcnf="$cadir/openssl/client.cnf"
|
||||
if [ ! -f "$clientcrt" ]; then
|
||||
#sed -i "s/^dir = .*/dir = ${cadir//\//\\\/}/" "$clientcnf"
|
||||
|
||||
subj="/countryName=FR/stateOrProvinceName=La Reunion/localityName=Sainte Clotilde/organizationName=jclain/CN=dmclient/"
|
||||
openssl req -config "$clientcnf" -batch -new -nodes -subj "$subj" -keyout "$clientkey" -out "$clientcsr" &&
|
||||
openssl ca -config "$clientcnf" -batch -keyfile "$cakey" -notext -out "$clientcrt" -infiles "$clientcsr" &&
|
||||
chmod 644 "$clientcrt" &&
|
||||
chmod 600 "$clientkey" &&
|
||||
rm -f "$clientcsr" ||
|
||||
die "Une erreur s'est produite pendant la génération du certificat client"
|
||||
fi
|
||||
|
||||
estep "Vérification certificats locaux"
|
||||
copy_update "$cacrt" "$dmdir/certs/ca.pem"
|
||||
copy_update "$cakey" "$dmdir/certs/ca-key.pem"
|
||||
copy_update "$clientcrt" "$dmdir/certs/cert.pem"
|
||||
copy_update "$clientkey" "$dmdir/certs/key.pem"
|
||||
|
||||
first=1
|
||||
for host in "$@"; do
|
||||
if [ -n "$first" ]; then
|
||||
servercnf="$cadir/openssl/server.cnf"
|
||||
#sed -i "s/^dir = .*/dir = ${cadir//\//\\\/}/" "$servercnf"
|
||||
else
|
||||
first=
|
||||
fi
|
||||
|
||||
etitle "$host"
|
||||
machine="${host%%.*}"
|
||||
machinedir="$dmdir/machines/$machine"
|
||||
if [ ! -d "$machinedir" ]; then
|
||||
eerror "$machine: machine inexistante"
|
||||
fi
|
||||
|
||||
serverkey="${machine}-server.key"
|
||||
servercsr="${machine}-server.csr"
|
||||
servercrt="${machine}-server.crt"
|
||||
if [ ! -f "$servercrt" ]; then
|
||||
subj="/countryName=FR/stateOrProvinceName=La Reunion/localityName=Sainte Clotilde/organizationName=jclain/CN=dmserver-$host/"
|
||||
sans="DNS:$host,DNS:localhost"
|
||||
sed -i "s/^subjectAltName = .*/subjectAltName = $sans/" "$servercnf"
|
||||
openssl req -config "$servercnf" -batch -new -nodes -subj "$subj" -keyout "$serverkey" -out "$servercsr" &&
|
||||
openssl ca -config "$servercnf" -batch -keyfile "$cakey" -notext -out "$servercrt" -infiles "$servercsr" &&
|
||||
chmod 644 "$servercrt" &&
|
||||
chmod 600 "$serverkey" &&
|
||||
rm -f "$servercsr" ||
|
||||
die "Une erreur s'est produite pendant la génération du certificat serveur"
|
||||
fi
|
||||
|
||||
estep "machine: $machine"
|
||||
ask_yesno "Voulez-vous remplacer les certificats distants et locaux?" O || continue
|
||||
|
||||
estep "Copie distante"
|
||||
scp "$cacrt" "root@$host:/etc/docker/ca.pem" || die
|
||||
scp "$servercrt" "root@$host:/etc/docker/server.pem" || die
|
||||
scp "$serverkey" "root@$host:/etc/docker/server-key.pem" || die
|
||||
|
||||
estep "Redémarrage docker distant"
|
||||
ssh "root@$host" "service docker restart" || die
|
||||
|
||||
estep "Copie locale"
|
||||
copy_update "$cacrt" "$machinedir/ca.pem"
|
||||
copy_update "$cakey" "$machinedir/ca-key.pem"
|
||||
copy_update "$clientcrt" "$machinedir/cert.pem"
|
||||
copy_update "$clientkey" "$machinedir/key.pem"
|
||||
copy_update "$servercrt" "$machinedir/server.pem"
|
||||
copy_update "$serverkey" "$machinedir/server-key.pem"
|
||||
|
||||
estep "Test de l'accès au serveur"
|
||||
setx env=docker-machine env "$machine" || die
|
||||
eval "$env"
|
||||
echo "$machine docker version: $(docker system info -f '{{.ServerVersion}}')"
|
||||
|
||||
estep "Suppression des fichiers temporaires"
|
||||
rm -f "$servercrt" "$serverkey"
|
||||
done
|
||||
|
||||
enote "N'oubliez pas de re-exporter les docker-machines qui ont été regénérées"
|
160
dmctl
Executable file
160
dmctl
Executable file
@ -0,0 +1,160 @@
|
||||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: import/exporter une docker-machine
|
||||
|
||||
USAGE
|
||||
$scriptname -d NAME
|
||||
$scriptname -l ARCHIVE
|
||||
$scriptname -a ARCHIVEs...
|
||||
|
||||
OPTIONS
|
||||
-d, --dump
|
||||
Exporter la machine
|
||||
-l, --load
|
||||
Importer la machine à partir de l'archive spécifiée
|
||||
-a, --load-all
|
||||
Importer toutes les machines depuis le répertoire spécifié"
|
||||
}
|
||||
|
||||
function dump_machine() {
|
||||
local name srcdir workdir destdir archive i
|
||||
|
||||
name="$1"
|
||||
[ -n "$name" ] || die "Vous devez spécifier le nom de la machine"
|
||||
|
||||
srcdir="$HOME/.docker/machine/machines/$name"
|
||||
[ -d "$srcdir" ] || die "$name: nom de machine incorrect"
|
||||
|
||||
ac_set_tmpdir workdir
|
||||
destdir="$workdir/$name"
|
||||
|
||||
archive="${name}-machine.tar.gz"
|
||||
|
||||
estep "Copie des fichiers"
|
||||
cp -r "$srcdir" "$workdir" || die
|
||||
for i in ca-key.pem ca.pem key.pem cert.pem; do
|
||||
[ -f "$destdir/$i" ] || {
|
||||
cp "$HOME/.docker/machine/certs/$i" "$destdir" || die
|
||||
}
|
||||
done
|
||||
|
||||
estep "Correction des chemins"
|
||||
sed -i "\
|
||||
s|$HOME/.docker/machine|DOCKER_MACHINE_HOME|g
|
||||
s|DOCKER_MACHINE_HOME/certs/|DOCKER_MACHINE_HOME/machines/$name/|g
|
||||
" "$destdir/config.json" || die
|
||||
|
||||
estep "Génération de $archive"
|
||||
tar czf "$archive" -C "$workdir" "$name" || die
|
||||
|
||||
ac_clean "$workdir"
|
||||
}
|
||||
|
||||
function load_machine() {
|
||||
local archive archivename destdir machinedir origdir workdir srcdir
|
||||
|
||||
archive="$1"
|
||||
[ -n "$archive" ] || die "Vous devez spécifier l'archive à importer"
|
||||
|
||||
setx archivename=basename -- "$archive"
|
||||
if [[ "$archivename" == *-machine.tar.gz ]]; then
|
||||
name="${archivename%-machine.tar.gz}"
|
||||
else
|
||||
die "$archive: n'est pas une archive docker-machine"
|
||||
fi
|
||||
|
||||
destdir="$HOME/.docker/machine/machines"
|
||||
machinedir="$destdir/$name"
|
||||
origdir="$HOME/${name}-machine.orig"
|
||||
if [ -d "$machinedir" ]; then
|
||||
if [ -n "$NOCLOBBER" ]; then
|
||||
ewarn "$name: cette machine existe déjà"
|
||||
return
|
||||
else
|
||||
ewarn "$name: une machine du même nom existe déjà"
|
||||
ask_yesno "Voulez-vous l'écraser?" N || die
|
||||
|
||||
[ -d "$origdir" ] && rm -rf "$origdir"
|
||||
mv "$machinedir" "$origdir"
|
||||
fi
|
||||
fi
|
||||
|
||||
ac_set_tmpdir workdir
|
||||
srcdir="$workdir/$name"
|
||||
|
||||
estep "Extraction de l'archive"
|
||||
tar xzf "$archive" -C "$workdir"
|
||||
|
||||
[ -d "$srcdir" ] || die "L'archive n'est pas pour la machine $name"
|
||||
|
||||
estep "Corriger les chemins"
|
||||
sed -i "\
|
||||
s|DOCKER_MACHINE_HOME|$HOME/.docker/machine|g
|
||||
" "$srcdir/config.json" || die
|
||||
|
||||
estep "Installation de la machine"
|
||||
mkdir -p "$destdir"
|
||||
mv "$srcdir" "$destdir"
|
||||
|
||||
if [ -d "$origdir" ]; then
|
||||
enote "Une fois que la machine aura été testée, vous pouvez supprimer ce répertoire:
|
||||
$origdir"
|
||||
fi
|
||||
|
||||
ac_clean "$workdir"
|
||||
}
|
||||
|
||||
# faut-il ignorer les machines existantes
|
||||
NOCLOBBER=
|
||||
|
||||
action=
|
||||
args=(
|
||||
--help '$exit_with display_help'
|
||||
-d,--dump,-x,--export,-s,--save action=dump
|
||||
-l,--load,-i,--import action=load
|
||||
-a,--all,--load-all,--import-all action=loadall
|
||||
)
|
||||
parse_args "$@"; set -- "${args[@]}"
|
||||
|
||||
if [ -z "$action" ]; then
|
||||
case "$1" in
|
||||
d|dump|x|export|s|save) action=dump; shift;;
|
||||
l|load|i|import) action=load; shift;;
|
||||
a|all|loadall|importall) action=loadall; shift;;
|
||||
*) die "Vous devez spécifier l'action à effectuer";;
|
||||
esac
|
||||
fi
|
||||
|
||||
case "$action" in
|
||||
dump)
|
||||
dump_machine "$1"
|
||||
;;
|
||||
load)
|
||||
for archive in "$@"; do
|
||||
etitle "$archive"
|
||||
load_machine "$archive"
|
||||
eend
|
||||
done
|
||||
;;
|
||||
loadall)
|
||||
[ $# -gt 0 ] || set -- .
|
||||
archives=()
|
||||
for file in "$@"; do
|
||||
if [ -d "$file" ]; then
|
||||
NOCLOBBER=1
|
||||
array_lsfiles files "$file" "*-machine.tar.gz"
|
||||
array_extend archives files
|
||||
else
|
||||
archives+=("$file")
|
||||
fi
|
||||
done
|
||||
for archive in "${archives[@]}"; do
|
||||
etitle "$archive"
|
||||
load_machine "$archive"
|
||||
eend
|
||||
done
|
||||
;;
|
||||
esac
|
@ -1,25 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
# Pense-bête:
|
||||
# ''bold'' ==striked== __underline__ //italic// ^^super^^ ~~sub~~
|
||||
# @@highlight@@ @@color:red;background-color:white; rouge sur noir@@
|
||||
# ~NotAWikiWord [[force wikiword]] [[friendly name|WikiWord]]
|
||||
# [[external|http://site.com]] ---- {{monospace}}
|
||||
# !h1 !!h2 !!!h3 !!!!h4 !!!!!h5
|
||||
# * dotlist ** sublist # numlist ## sublist
|
||||
# {{{ |caption|c [img[title|filename]]
|
||||
# pre text |!header|!header|h [img[filename]]
|
||||
# }}} |cell|cell| [img[title|filename][link]]
|
||||
# <<< |>|colspan| [img[filename][link]]
|
||||
# blockquote |rowspan|one| [<img[filename]]
|
||||
# <<< |~|two| [>img[filename]]
|
||||
# >quote1 |left| right|
|
||||
# >>quote2 |>| center |
|
||||
# >>>quote3
|
||||
##@creator: jclain
|
||||
##@created: 09/03/2012 05:08
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: DefaultTiddlers
|
||||
|
||||
[[Main]]
|
@ -1,16 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:19
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: EnsureVM
|
||||
|
||||
{{{
|
||||
EnsureVM: s'assurer que les services sont lancés pour un type de virtualisation
|
||||
|
||||
USAGE
|
||||
EnsureVM type
|
||||
|
||||
Les types supportés sont virtualbox et kvm (par défaut)
|
||||
}}}
|
46
doc/Main.twp
46
doc/Main.twp
@ -1,46 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
# Pense-bête:
|
||||
# ''bold'' ==striked== __underline__ //italic// ^^super^^ ~~sub~~
|
||||
# @@highlight@@ @@color:red;background-color:white; rouge sur noir@@
|
||||
# ~NotAWikiWord [[force wikiword]] [[friendly name|WikiWord]]
|
||||
# [[external|http://site.com]] ---- {{monospace}}
|
||||
# !h1 !!h2 !!!h3 !!!!h4 !!!!!h5
|
||||
# * dotlist ** sublist # numlist ## sublist
|
||||
# {{{ |caption|c [img[title|filename]]
|
||||
# pre text |!header|!header|h [img[filename]]
|
||||
# }}} |cell|cell| [img[title|filename][link]]
|
||||
# <<< |>|colspan| [img[filename][link]]
|
||||
# blockquote |rowspan|one| [<img[filename]]
|
||||
# <<< |~|two| [>img[filename]]
|
||||
# >quote1 |left| right|
|
||||
# >>quote2 |>| center |
|
||||
# >>>quote3
|
||||
##@creator: jclain
|
||||
##@created: 09/03/2012 05:08
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: Main
|
||||
|
||||
!Présentation
|
||||
nutools est un ensemble d'utilitaires pour faciliter l'utililisation des Unixes, en particulier Linux, mais aussi MacOS X et Cygwin.
|
||||
C'est aussi une librairie de scripts shell réutilisables ([[ulib]]) et une librairie de modules python réutilisables (pyulib)
|
||||
|
||||
!Prérequis
|
||||
Python >= 2.3 et GNU Awk sont requis pour que toutes les fonctionnalités soient supportées.
|
||||
* Sous Linux, lors de l'installation du package, les meilleurs efforts sont fait pour que ces packages soient installés.
|
||||
* Sous MacOSX, il faut installer manuellement Fink, DarwinPorts ou Homebrew
|
||||
|
||||
! Outils
|
||||
Chaque outil contient une aide intégrée. Il suffit de lancer l'outil avec l'argument {{{--help}}} pour avoir une aide détaillée.
|
||||
* Déploiement d'un répertoire ou d'une archive
|
||||
** [[uinst]]: Déploiement local
|
||||
** [[mkusfx]]: Faire une archive auto-installable avec uinst
|
||||
** [[ruinst]]: Déploiement distant avec uinst
|
||||
** [[runs]]: Lancer un script avec le protocole RUNS
|
||||
** [[rruns]]: Déploiement distant avec runs
|
||||
* Librairie réutilisable de scripts shell
|
||||
** [[uinc]]: Dépliage des inclusions dans un fichier
|
||||
** [[ulibsync]]: Faire une copie locale pour un projet de ulib et/ou pyulib
|
||||
* Autres outils
|
||||
** [[udir]]: Gestion des paramètres d'un répertoire. Ces paramètres sont entre autres utilisés par uinst et uinc.
|
@ -1,25 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
# Pense-bête:
|
||||
# ''bold'' ==striked== __underline__ //italic// ^^super^^ ~~sub~~
|
||||
# @@highlight@@ @@color:red;background-color:white; rouge sur noir@@
|
||||
# ~NotAWikiWord [[force wikiword]] [[friendly name|WikiWord]]
|
||||
# [[external|http://site.com]] ---- {{monospace}}
|
||||
# !h1 !!h2 !!!h3 !!!!h4 !!!!!h5
|
||||
# * dotlist ** sublist # numlist ## sublist
|
||||
# {{{ |caption|c [img[title|filename]]
|
||||
# pre text |!header|!header|h [img[filename]]
|
||||
# }}} |cell|cell| [img[title|filename][link]]
|
||||
# <<< |>|colspan| [img[filename][link]]
|
||||
# blockquote |rowspan|one| [<img[filename]]
|
||||
# <<< |~|two| [>img[filename]]
|
||||
# >quote1 |left| right|
|
||||
# >>quote2 |>| center |
|
||||
# >>>quote3
|
||||
##@creator: jclain
|
||||
##@created: 09/03/2012 05:08
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: MainMenu
|
||||
|
||||
[[GettingStarted]]
|
30
doc/SKvm.twp
30
doc/SKvm.twp
@ -1,30 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:20
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: SKvm
|
||||
|
||||
{{{
|
||||
SKvm: lancer une machine virtuelle kvm
|
||||
|
||||
USAGE
|
||||
SKvm [options] vmName
|
||||
SKvm {-l|-A|-g}
|
||||
|
||||
OPTIONS
|
||||
-n Ne rien faire excepté s'assurer que les modules kvm sont chargés
|
||||
-u Lancer l'opération avec les droits de l'utilisateur courant. Par défaut,
|
||||
ce script tente d'acquérir les droits de root.
|
||||
-l Lister les machines virtuelles
|
||||
-s Démarrer la machine virtuelle (par défaut)
|
||||
Si le nom de la machine virtuelle n'est pas spécifiée, un menu est
|
||||
affiché
|
||||
-k Arrêter la machine virtuelle
|
||||
-H Arrêter sauvagement la machine virtuelle
|
||||
-r Redémarrer la machine virtuelle
|
||||
-S Enregistrer l'état de la machine virtuelle
|
||||
-A Arrêter toutes les machines virtuelles qui tournent actuellement
|
||||
-g Afficher le gestionnaire de machines virtuelle
|
||||
}}}
|
@ -1,27 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:20
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: SVirtualBox
|
||||
|
||||
{{{
|
||||
SVirtualBox: lancer une machine virtuelle VirtualBox
|
||||
|
||||
USAGE
|
||||
SVirtualBox [options] vmName
|
||||
|
||||
OPTIONS
|
||||
-n Ne rien faire excepté s'assurer que les modules VirtualBox sont chargés
|
||||
-l Lister les machines virtuelles
|
||||
-s Démarrer la machine virtuelle (par défaut)
|
||||
Si le nom de la machine virtuelle n'est pas spécifiée, un menu est
|
||||
affiché
|
||||
-k Arrêter la machine virtuelle (par ACPI)
|
||||
-p Mettre en veille la machine virtuelle (par ACPI)
|
||||
-H Arrêter sauvagement la machine virtuelle
|
||||
-R Redémarrer sauvagement la machine virtuelle
|
||||
-S Enregistrer l'état de la machine virtuelle
|
||||
-g Afficher le gestionnaire de machines virtuelle
|
||||
}}}
|
@ -1,25 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
# Pense-bête:
|
||||
# ''bold'' ==striked== __underline__ //italic// ^^super^^ ~~sub~~
|
||||
# @@highlight@@ @@color:red;background-color:white; rouge sur noir@@
|
||||
# ~NotAWikiWord [[force wikiword]] [[friendly name|WikiWord]]
|
||||
# [[external|http://site.com]] ---- {{monospace}}
|
||||
# !h1 !!h2 !!!h3 !!!!h4 !!!!!h5
|
||||
# * dotlist ** sublist # numlist ## sublist
|
||||
# {{{ |caption|c [img[title|filename]]
|
||||
# pre text |!header|!header|h [img[filename]]
|
||||
# }}} |cell|cell| [img[title|filename][link]]
|
||||
# <<< |>|colspan| [img[filename][link]]
|
||||
# blockquote |rowspan|one| [<img[filename]]
|
||||
# <<< |~|two| [>img[filename]]
|
||||
# >quote1 |left| right|
|
||||
# >>quote2 |>| center |
|
||||
# >>>quote3
|
||||
##@creator: jclain
|
||||
##@created: 09/03/2012 05:08
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: SiteSubtitle
|
||||
|
||||
Outils divers pour linux/macosx, et librairies pour bash
|
@ -1,25 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
# Pense-bête:
|
||||
# ''bold'' ==striked== __underline__ //italic// ^^super^^ ~~sub~~
|
||||
# @@highlight@@ @@color:red;background-color:white; rouge sur noir@@
|
||||
# ~NotAWikiWord [[force wikiword]] [[friendly name|WikiWord]]
|
||||
# [[external|http://site.com]] ---- {{monospace}}
|
||||
# !h1 !!h2 !!!h3 !!!!h4 !!!!!h5
|
||||
# * dotlist ** sublist # numlist ## sublist
|
||||
# {{{ |caption|c [img[title|filename]]
|
||||
# pre text |!header|!header|h [img[filename]]
|
||||
# }}} |cell|cell| [img[title|filename][link]]
|
||||
# <<< |>|colspan| [img[filename][link]]
|
||||
# blockquote |rowspan|one| [<img[filename]]
|
||||
# <<< |~|two| [>img[filename]]
|
||||
# >quote1 |left| right|
|
||||
# >>quote2 |>| center |
|
||||
# >>>quote3
|
||||
##@creator: jclain
|
||||
##@created: 09/03/2012 05:08
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: SiteTitle
|
||||
|
||||
nutools
|
@ -1,25 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
# Pense-bête:
|
||||
# ''bold'' ==striked== __underline__ //italic// ^^super^^ ~~sub~~
|
||||
# @@highlight@@ @@color:red;background-color:white; rouge sur noir@@
|
||||
# ~NotAWikiWord [[force wikiword]] [[friendly name|WikiWord]]
|
||||
# [[external|http://site.com]] ---- {{monospace}}
|
||||
# !h1 !!h2 !!!h3 !!!!h4 !!!!!h5
|
||||
# * dotlist ** sublist # numlist ## sublist
|
||||
# {{{ |caption|c [img[title|filename]]
|
||||
# pre text |!header|!header|h [img[filename]]
|
||||
# }}} |cell|cell| [img[title|filename][link]]
|
||||
# <<< |>|colspan| [img[filename][link]]
|
||||
# blockquote |rowspan|one| [<img[filename]]
|
||||
# <<< |~|two| [>img[filename]]
|
||||
# >quote1 |left| right|
|
||||
# >>quote2 |>| center |
|
||||
# >>>quote3
|
||||
##@creator: jclain
|
||||
##@created: 09/03/2012 05:08
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: SiteUrl
|
||||
|
||||
|
@ -1,12 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:20
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: _root
|
||||
|
||||
{{{
|
||||
_root: devenir l'utilisateur root, avec 'sudo' si possible, ou 'su' si
|
||||
'sudo' n'est pas installé
|
||||
}}}
|
@ -1,18 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:19
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: authftp
|
||||
|
||||
{{{
|
||||
authftp: Se connecter avec ncftp sur un site FTP authentifié
|
||||
Ce script est conçu pour les sites qui utilisent un proxy FTP pour les connexion
|
||||
authentifiées.
|
||||
|
||||
USAGE
|
||||
authftp [options] host login password [path]
|
||||
|
||||
OPTIONS
|
||||
}}}
|
@ -1,14 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:19
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: caturl
|
||||
|
||||
{{{
|
||||
caturl: Afficher une url
|
||||
|
||||
USAGE
|
||||
caturl <file.url|file.desktop|URL>
|
||||
}}}
|
@ -1,11 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:19
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: compileAndGo
|
||||
|
||||
{{{
|
||||
compileAndGo: see http://Yost.com/computers/compileAndGo
|
||||
}}}
|
@ -1,27 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:19
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: fconv
|
||||
|
||||
{{{
|
||||
fconv: convertir des fichiers dans un autre encoding
|
||||
|
||||
USAGE
|
||||
fconv [-f src_enc] [ -t dest_enc] [/path/to/file]
|
||||
|
||||
OPTIONS
|
||||
-f from
|
||||
Encoding source. Si n'est pas spécifié ou vaut 'detect', l'encoding est
|
||||
autodétecté.
|
||||
-t to
|
||||
Encoding destination. Doit être spécifié.
|
||||
Cas particulier: si to vaut 'lf' ou 'crlf', from est ignoré, et seuls
|
||||
les caractères de fin de lignes sont convertis.
|
||||
-N Ne pas optimiser le calcul de l'encoding. Cette option n'est valide que
|
||||
si -f n'est pas spécifié. On assume que tous les noms de fichiers n'ont
|
||||
pas le même encoding. L'encoding from est donc recalculé à chaque fois.
|
||||
-r inverser from et to, qui doivent être tous les deux spécifiés.
|
||||
}}}
|
@ -1,25 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:19
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: fnconv
|
||||
|
||||
{{{
|
||||
fnconv: renommer des fichiers en changeant leur encoding
|
||||
|
||||
USAGE
|
||||
fnconv [-f src_enc] [ -t dest_enc] [/path/to/file]
|
||||
|
||||
OPTIONS
|
||||
-f from
|
||||
Encoding source. Si n'est pas spécifié ou vaut 'detect', l'encoding est
|
||||
autodétecté.
|
||||
-t to
|
||||
Encoding destination. Doit être spécifié.
|
||||
-N Ne pas optimiser le calcul de l'encoding. Cette option n'est valide que
|
||||
si -f n'est pas spécifié. On assume que tous les noms de fichiers n'ont
|
||||
pas le même encoding. L'encoding from est donc recalculé à chaque fois.
|
||||
-r inverser from et to, qui doivent être tous les deux spécifiés.
|
||||
}}}
|
@ -1,14 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:19
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: geturl
|
||||
|
||||
{{{
|
||||
geturl: Télécharger un fichier avec wget ou curl
|
||||
|
||||
USAGE
|
||||
geturl <file.url|file.desktop|URL> [wget options]
|
||||
}}}
|
@ -1,18 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:19
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: mkiso
|
||||
|
||||
{{{
|
||||
mkiso: créer une image iso d'un répertoire
|
||||
|
||||
USAGE
|
||||
mkiso [options] srcdir [dest.iso]
|
||||
|
||||
OPTIONS
|
||||
-M, --hfs
|
||||
créer une image hybride ISO/HFS
|
||||
}}}
|
@ -1,14 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:20
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: openurl
|
||||
|
||||
{{{
|
||||
openurl: Ouvrir une URL dans un navigateur
|
||||
|
||||
USAGE
|
||||
openurl <file.url|file.desktop|URL>
|
||||
}}}
|
@ -1,16 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:20
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: rmtildes
|
||||
|
||||
{{{
|
||||
rmtildes: supprimer les fichiers *~ dans le répertoire courant
|
||||
|
||||
USAGE
|
||||
rmtildes [dir [glob]]
|
||||
|
||||
Par défaut, dir==. et glob==*~
|
||||
}}}
|
@ -1,38 +0,0 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:20
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: ruinst
|
||||
|
||||
{{{
|
||||
ruinst: Déploiement distant avec uinst
|
||||
|
||||
USAGE
|
||||
ruinst [-H host] [-T tmproot] <file|archive|dir> [-- options de uinst]
|
||||
|
||||
OPTIONS
|
||||
-C Ne pas faire le déploiement. Configurer uniquement la connexion par clé
|
||||
sur les hôtes distants spécifiés pour le user spécifié. Il faut pouvoir
|
||||
se connecter par mot de passe pour configurer la connexion par clé.
|
||||
Si l'on veut configurer la connexion par clé pour le user root, mais que
|
||||
ce n'est pas possible de se connecter par mot de passe avec le user root
|
||||
sur l'hôte distant, et qu'il existe un user sudoer sur l'hôte distant,
|
||||
il est possible de faire la configuration avec '--configure root'. La
|
||||
commande serait alors
|
||||
ruinst -H user@host --configure root
|
||||
-T tmproot
|
||||
Spécifier le répertoire temporaire sur l'hôte distant, comme par exemple
|
||||
/var/tmp. Cette option est utile pour les vservers, qui ont par défaut
|
||||
un /tmp minuscule de 16 Mo.
|
||||
-S ssh
|
||||
Spécifier le programme à utiliser pour la connection par ssh.
|
||||
-H host
|
||||
Spécifier un hôte distant sur lequel faire le déploiement. Plusieurs
|
||||
options -H peuvent être spécifiées, ou alors on peut séparer plusieurs
|
||||
hôtes par ':', e.g. -H host1:host2
|
||||
Par défaut, la connexion sur l'hôte distant se fait avec l'utilisateur
|
||||
root. Il est possible de spécifier un autre utilisateur avec la syntaxe
|
||||
user@host, e.g -H user@host
|
||||
}}}
|
12
doc/tools/EnsureVM.md
Normal file
12
doc/tools/EnsureVM.md
Normal file
@ -0,0 +1,12 @@
|
||||
# EnsureVM
|
||||
|
||||
~~~
|
||||
EnsureVM: s'assurer que les services sont lancés pour un type de virtualisation
|
||||
|
||||
USAGE
|
||||
EnsureVM type
|
||||
|
||||
Les types supportés sont virtualbox et kvm (par défaut)
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
36
doc/tools/SKvm.md
Normal file
36
doc/tools/SKvm.md
Normal file
@ -0,0 +1,36 @@
|
||||
# SKvm
|
||||
|
||||
~~~
|
||||
SKvm: lancer une machine virtuelle kvm
|
||||
|
||||
USAGE
|
||||
SKvm [options] vmName
|
||||
SKvm {-l|-A|-g}
|
||||
|
||||
OPTIONS
|
||||
-n, --check
|
||||
Ne rien faire excepté s'assurer que les modules kvm sont chargés
|
||||
-u, --user
|
||||
Lancer l'opération avec les droits de l'utilisateur courant. Par défaut,
|
||||
ce script tente d'acquérir les droits de root.
|
||||
-l, --list
|
||||
Lister les machines virtuelles
|
||||
-s, --start
|
||||
Démarrer la machine virtuelle (par défaut)
|
||||
Si le nom de la machine virtuelle n'est pas spécifiée, un menu est
|
||||
affiché
|
||||
-k, --stop
|
||||
Arrêter la machine virtuelle
|
||||
-H, --destroy
|
||||
Arrêter sauvagement la machine virtuelle
|
||||
-r, --restart
|
||||
Redémarrer la machine virtuelle
|
||||
-S, --managed-save
|
||||
Enregistrer l'état de la machine virtuelle
|
||||
-A, --stop-all
|
||||
Arrêter toutes les machines virtuelles qui tournent actuellement
|
||||
-g, --gui
|
||||
Afficher le gestionnaire de machines virtuelle
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
44
doc/tools/SVirtualBox.md
Normal file
44
doc/tools/SVirtualBox.md
Normal file
@ -0,0 +1,44 @@
|
||||
# SVirtualBox
|
||||
|
||||
~~~
|
||||
SVirtualBox: lancer une machine virtuelle VirtualBox
|
||||
|
||||
USAGE
|
||||
SVirtualBox [options] vmName
|
||||
|
||||
OPTIONS
|
||||
-n, --nop
|
||||
Ne rien faire excepté s'assurer que les modules VirtualBox sont chargés
|
||||
-l, --list
|
||||
Lister les machines virtuelles
|
||||
-s, --start
|
||||
Démarrer la machine virtuelle. C'est l'action par défaut.
|
||||
Si le nom de la machine virtuelle n'est pas spécifiée, un menu est
|
||||
affiché
|
||||
-x, --gui
|
||||
-b, --headless
|
||||
--separate
|
||||
Ces options ne sont valides qu'avec -s et permettent de spécifier le
|
||||
type de démarrage: 'gui' permet d'afficher une fenêtre complète dans
|
||||
laquelle l'accélération graphique est supportée, headless démarre la
|
||||
machine en tâche de fond, et separate affiche une fenêtre qui attaque la
|
||||
machine démarrée en tâche de fond. --separate est l'option par défaut.
|
||||
-k, -t, --stop
|
||||
Arrêter la machine virtuelle. Les options -p, -H, -R, -S et -r
|
||||
permettent de spécifier le type d'arrêt de la machine virtuelle
|
||||
-p, --sleep
|
||||
Mettre en veille la machine virtuelle (par ACPI)
|
||||
-H, --poweroff
|
||||
Arrêter sauvagement la machine virtuelle
|
||||
-R, --reset
|
||||
Redémarrer sauvagement la machine virtuelle
|
||||
-S, --savestate
|
||||
Enregistrer l'état de la machine virtuelle
|
||||
-r, --rrestart
|
||||
Arrêter la machine, restaurer l'état du dernier snapshot puis la
|
||||
relancer.
|
||||
-g, --gui
|
||||
Afficher le gestionnaire de machines virtuelle
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
8
doc/tools/_root.md
Normal file
8
doc/tools/_root.md
Normal file
@ -0,0 +1,8 @@
|
||||
# _root
|
||||
|
||||
~~~
|
||||
_root: devenir l'utilisateur root, avec 'sudo' si possible, ou 'su' si
|
||||
'sudo' n'est pas installé
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
95
doc/tools/apacheconfig.md
Normal file
95
doc/tools/apacheconfig.md
Normal file
@ -0,0 +1,95 @@
|
||||
# apacheconfig
|
||||
|
||||
~~~
|
||||
apacheconfig: Gérer la configuration d'un serveur web apache
|
||||
|
||||
USAGE
|
||||
apacheconfig -c
|
||||
apacheconfig -t -- args...
|
||||
|
||||
OPTIONS
|
||||
-c, --create
|
||||
Créer un nouveau répertoire de configuration pour un hôte
|
||||
-d, --destdir DESTDIR[=apacheconfig]
|
||||
Nom du répertoire local de configuration.
|
||||
-f,--full
|
||||
--partial
|
||||
Indiquer respectivement que la configuration est complète ou partielle.
|
||||
Avec la configuration complète, le serveur peut être complètement
|
||||
configuré avec tous les fichiers présents. Avec la configuration
|
||||
partielle, uniquement les informations spécifiques à un service en
|
||||
particulier sont disponibles.
|
||||
Cette option est utilisée avec --create. Par défaut, la configuration
|
||||
est partielle.
|
||||
Pour le moment, la seule différence est que --full crée un fichier de
|
||||
configuration nommé .apacheconfig alors que --partial crée un fichier
|
||||
nommé apacheconfig.conf qui est visible et donc découvrable et éditable
|
||||
plus facilement
|
||||
|
||||
-t, --template [OPT]
|
||||
Gérer les fichiers du répertoire local avec templatectl. La valeur de
|
||||
cette option est utilisée comme argument court pour l'invocation de
|
||||
templatectl, e.g
|
||||
apacheconfig -tm args
|
||||
est équivalent à
|
||||
templatectl -m args
|
||||
Les arguments qui restent sont passés tels quels à templatectl
|
||||
Les options courantes de templatectl -l, -v, -m, -L sont disponibles
|
||||
directement
|
||||
--help-template
|
||||
Afficher l'aide concernent la gestion des templates.
|
||||
Equivalent à -t -- --help
|
||||
-h, --host HOST
|
||||
Spécifier l'hôte. Equivalent à -v host=HOST
|
||||
--sysname SYSNAME
|
||||
--sysdist SYSDIST
|
||||
-s, --sysver SYSVER
|
||||
Spécifier la distribution pour laquelle synchroniser le template. Par
|
||||
défaut, choisir les valeurs correspondantes au système courant.
|
||||
Les options -7 et -8 sont des aliases respectivement pour -s wheezy et
|
||||
-s jessie, parce que les fichiers par défaut ont changé à partir de
|
||||
debian jessie.
|
||||
|
||||
-u, --update, --deploy
|
||||
Mettre à jour la configuration système à partir du répertoire local.
|
||||
Lors du déploiement de la configuration, les valeurs des variables
|
||||
dynamiques sont remplacées dans les fichiers destination.
|
||||
Les arguments qui restent sont passés tels quels à apache_autoconf
|
||||
-N, --network-config
|
||||
Mettre aussi à jour la configuration réseau.
|
||||
-r, --certsdir CERTSDIR
|
||||
Spécifier le cas échéant le répertoire contenant les certificats à
|
||||
déployer. Cet argument est requis si le répertoire certsconf/ existe,
|
||||
sauf si les certificats sont déjà déployés.
|
||||
|
||||
--localhosts
|
||||
Créer dans le fichier /etc/hosts tous les noms d'hôte ayant un suffixe
|
||||
.local mentionnés dans les fichiers de site. Cette option est utile pour
|
||||
le développement et les tests.
|
||||
-C, --one-conf CONF
|
||||
Ne déployer que le fichier de configuration spécifié. Cette option est
|
||||
utilisée avec --deploy et est utile pour le développement et les tests.
|
||||
-M, --one-module MODULE
|
||||
Ne déployer que le fichier de module spécifié. Cette option est utilisée
|
||||
avec --deploy et est utile pour le développement et les tests.
|
||||
-S, --one-site SITE
|
||||
Ne déployer que le fichier de site spécifié. Cette option est utilisée
|
||||
avec --deploy ou --localhosts et est utile pour le développement et les
|
||||
tests.
|
||||
|
||||
-k, --new-site HOST.TLD
|
||||
Créer une définition pour un nouveau site à partir des fichiers du
|
||||
répertoires templates/
|
||||
-K, --new-site-templatedir TEMPLATEDIR
|
||||
Spécifier le répertoire source pour les templates de site utilisés par
|
||||
l'option --new-site. Par défaut, utiliser le répertoire templates/ situé
|
||||
dans le répertoire de configuration.
|
||||
Si TEMPLATEDIR est un nom simple sans séparateur de chemin '/' et qu'un
|
||||
répertoire templates/TEMPLATEDIR existe, alors prendre ce répertoire-là
|
||||
comme source.
|
||||
--new-site-force
|
||||
Avec --new-site, utiliser le nom d'hôte fourni même s'il n'est pas
|
||||
pleinement qualifié
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
35
doc/tools/authftp.md
Normal file
35
doc/tools/authftp.md
Normal file
@ -0,0 +1,35 @@
|
||||
# authftp
|
||||
|
||||
~~~
|
||||
authftp: Se connecter sur un site FTP authentifié
|
||||
Ce script nécessite ncftp. Il est conçu pour faciliter l'accès à des sites FTP
|
||||
s'il est requis d'y accéder par un proxy FTP pour les connexion authentifiées.
|
||||
|
||||
USAGE
|
||||
authftp [options] host login password [path]
|
||||
|
||||
OPTIONS
|
||||
-p, --proxy
|
||||
-n, --noproxy
|
||||
Forcer l'utilisation, resp. ne pas utiliser, le proxy FTP (i.e. faire la
|
||||
connexion directement)
|
||||
-l, --lftp
|
||||
Se connecter avec lftp au lieu de ncftp. Le fonctionnement n'est pas
|
||||
garanti si l'on utilise un proxy FTP.
|
||||
-o OPTION
|
||||
Ajouter une option à la commande lancée. Si l'option prend un argument,
|
||||
il faut doubler l'option -o, e.g.
|
||||
authftp -l -o -e -o 'mirror remote local' host login pass
|
||||
Dans cet exemple, l'option -e de lftp est utilisée pour faire un miroir
|
||||
local du répertoire remote.
|
||||
--tls
|
||||
Indiquer que la connexion se fera en TLS. Implique --lftp puisque ncftp
|
||||
ne le supporte pas.
|
||||
|
||||
note: A cause d'une limitation de lftp, ce n'est pas possible de se connecter
|
||||
automatiquement avec lftp si le mot de passe contient une virgule. A cause de la
|
||||
façon dont le proxy ftp est configuré, il n'est pas possible de se connecter
|
||||
avec un mot de passe qui contient le caractère @
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
16
doc/tools/caturl.md
Normal file
16
doc/tools/caturl.md
Normal file
@ -0,0 +1,16 @@
|
||||
# caturl
|
||||
|
||||
~~~
|
||||
caturl: Afficher une url
|
||||
|
||||
USAGE
|
||||
caturl <file.url|file.desktop|URL>
|
||||
|
||||
OPTIONS
|
||||
-c, --check
|
||||
Vérifier que le fichier est valide
|
||||
-g, --get
|
||||
Attaquer l'url spécifiée avec curl
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
28
doc/tools/chrono.py.md
Normal file
28
doc/tools/chrono.py.md
Normal file
@ -0,0 +1,28 @@
|
||||
# chrono.py
|
||||
|
||||
~~~
|
||||
usage: chrono.py [options] [TIMEOUT]
|
||||
|
||||
Afficher un chronomètre
|
||||
|
||||
positional arguments:
|
||||
TIMEOUT (valeur vide)
|
||||
chronomètre qui démarre à 0:00 et ne s'arrête pas
|
||||
H:M:S (heures:minutes:secondes)
|
||||
ou M:S (minutes:secondes)
|
||||
ou M (minutes)
|
||||
minuteur qui démarre à H:M:S et fait un décompte jusqu'à 0:00. A la fin
|
||||
du décompte, une sonnerie retentit.
|
||||
@H[:M[:S]]
|
||||
minuteur qui fonctionne comme précédemment, sauf qu'on spécifie l'heure
|
||||
d'arrivée, et que la durée est calculée automatiquement
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
-n, --no-autostart Ne pas démarrer automatiquement le décompte même si TIMEOUT est spécifié.
|
||||
-s, --autostart Forcer le démarrage automatique du décompte, même si TIMEOUT n'est pas spécifié.
|
||||
|
||||
Si TIMEOUT est spécifié, par défaut le décompte démarre automatiquement.
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
7
doc/tools/compileAndGo.md
Normal file
7
doc/tools/compileAndGo.md
Normal file
@ -0,0 +1,7 @@
|
||||
# compileAndGo
|
||||
|
||||
~~~
|
||||
compileAndGo: see http://Yost.com/computers/compileAndGo
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
29
doc/tools/create-user.md
Normal file
29
doc/tools/create-user.md
Normal file
@ -0,0 +1,29 @@
|
||||
# create-user
|
||||
|
||||
~~~
|
||||
create-user: créer un utilisateur sudoer et lui installer une clé publique ssh
|
||||
|
||||
USAGE
|
||||
create-user user [-p pubkey]
|
||||
|
||||
OPTIONS
|
||||
-p, --pkfile PKFILE
|
||||
Installer la clé publique ssh contenue dans le fichier spécifié. Par
|
||||
défaut, prendre le fichier ~/.ssh/id_rsa.pub de l'utilisateur courant.
|
||||
-s, --pkstring PUBKEY
|
||||
Installer la clé publique ssh spécifiée. Cette option avancée n'est pas
|
||||
utilisée en temps normal. Elle a la priorité sur l'option --pkfile
|
||||
-l, --luser
|
||||
Ne pas donner à l'utilisateur le droit de sudoer.
|
||||
-h, --host [USER@]HOST
|
||||
Créer l'utilisateur sur l'hôte distant spécifié. Si l'utilisateur
|
||||
distant n'est pas root, il doit être sudoer.
|
||||
-T, --tmproot TMPROOT
|
||||
Spécifier le répertoire temporaire sur l'hôte distant, comme par exemple
|
||||
/var/tmp. Cette option est utile pour certains serveurs, qui ont un /tmp
|
||||
minuscule.
|
||||
-S, --ssh SSH
|
||||
Spécifier le programme à utiliser pour la connection par ssh.
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
14
doc/tools/cssh.md
Normal file
14
doc/tools/cssh.md
Normal file
@ -0,0 +1,14 @@
|
||||
# cssh
|
||||
|
||||
~~~
|
||||
cssh: Faire une connexion ssh en lançant automatiquement un screen sur l'hôte distant
|
||||
|
||||
USAGE
|
||||
cssh [user@]host [options]
|
||||
|
||||
En principe, hormis l'argument user@host, il ne faudrait spécifier que des
|
||||
options. Dans le cas où d'autres arguments seraient spécifiés, les meilleurs
|
||||
efforts sont faits pour lancer ces commandes avant screen.
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
31
doc/tools/doinplace.md
Normal file
31
doc/tools/doinplace.md
Normal file
@ -0,0 +1,31 @@
|
||||
# doinplace
|
||||
|
||||
~~~
|
||||
doinplace: filtrer en place un fichier à travers une suite de commandes
|
||||
|
||||
USAGE
|
||||
doinplace FILE COMMAND [ARGS...]
|
||||
|
||||
Si on utilise une commande avec des options, penser à utliser '--' pour séparer
|
||||
les options de ce script des options de la commande
|
||||
|
||||
En plus des commandes systèmes, il est possible d'utiliser toute fonction de
|
||||
nutools qui effectue des traitement sur un flux comme stripnl, filter_empty,
|
||||
merge_contlines, filter_comment, filter_conf, etc. Les fonctions nl2lf, nl2crlf,
|
||||
nl2cr, latin1compat et noaccents sont aussi disponibles par convenance.
|
||||
|
||||
OPTIONS
|
||||
-p, --evalp
|
||||
Evaluer la commande avec evalp(), ce qui permet de chainer plusieurs
|
||||
commandes en les séparant par //. Cette option est automatiquement
|
||||
activée si ce script est lancé avec le nom doinplacex
|
||||
-g, --ignore-error, --replace-always
|
||||
Normalement, le fichier n'est pas remplacé si la commande retourne une
|
||||
erreur. Avec cette option, le fichier est remplacé quel que soit le code
|
||||
de retour de la commande. A utiliser par exemple avec des commandes
|
||||
comme grep qui peuvent retourner FAUX s'ils ne trouvent pas le motif.
|
||||
Cette option est automatiquement activée si ce script est lancé avec le
|
||||
nom doinplacef
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
26
doc/tools/dumpclients.md
Normal file
26
doc/tools/dumpclients.md
Normal file
@ -0,0 +1,26 @@
|
||||
# dumpclients
|
||||
|
||||
~~~
|
||||
dumpclients: afficher les connexions TCP entrantes sur un port
|
||||
|
||||
USAGE
|
||||
dumpclients [options] port
|
||||
|
||||
OPTIONS
|
||||
-4, --only-tcp
|
||||
-6, --only-tcp6
|
||||
Se limiter au protocole spécifié. Par défaut, afficher toutes les
|
||||
connexions, qu'elles soient en IPv4 ou en IPv6
|
||||
-a, --all
|
||||
Afficher tous les sockets, y compris les ports d'écoute. Par défaut,
|
||||
seules les sockets ouvertes sont affichées.
|
||||
-n, --numeric
|
||||
Afficher uniquement les adresses IP au lieu du nom d'hôte.
|
||||
-z, --allow-no-port
|
||||
Ne pas exiger que le port soit spécifié
|
||||
--show none,ip,port,state
|
||||
Spécifier d'afficher comme informations supplémentaire: rien, l'adresse
|
||||
ip, le port et/ou l'état. Par défaut, afficher le port et l'état.
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
94
doc/tools/em.md
Normal file
94
doc/tools/em.md
Normal file
@ -0,0 +1,94 @@
|
||||
# em
|
||||
|
||||
~~~
|
||||
Usage: /usr/bin/emacs [OPTION-OR-FILENAME]...
|
||||
|
||||
Run Emacs, the extensible, customizable, self-documenting real-time
|
||||
display editor. The recommended way to start Emacs for normal editing
|
||||
is with no options at all.
|
||||
|
||||
Run M-x info RET m emacs RET m emacs invocation RET inside Emacs to
|
||||
read the main documentation for these command-line arguments.
|
||||
|
||||
Initialization options:
|
||||
|
||||
--batch do not do interactive display; implies -q
|
||||
--chdir DIR change to directory DIR
|
||||
--daemon start a server in the background
|
||||
--debug-init enable Emacs Lisp debugger for init file
|
||||
--display, -d DISPLAY use X server DISPLAY
|
||||
--no-desktop do not load a saved desktop
|
||||
--no-init-file, -q load neither ~/.emacs nor default.el
|
||||
--no-shared-memory, -nl do not use shared memory
|
||||
--no-site-file do not load site-start.el
|
||||
--no-site-lisp, -nsl do not add site-lisp directories to load-path
|
||||
--no-splash do not display a splash screen on startup
|
||||
--no-window-system, -nw do not communicate with X, ignoring $DISPLAY
|
||||
--quick, -Q equivalent to:
|
||||
-q --no-site-file --no-site-lisp --no-splash
|
||||
--script FILE run FILE as an Emacs Lisp script
|
||||
--terminal, -t DEVICE use DEVICE for terminal I/O
|
||||
--user, -u USER load ~USER/.emacs instead of your own
|
||||
|
||||
Action options:
|
||||
|
||||
FILE visit FILE using find-file
|
||||
+LINE go to line LINE in next FILE
|
||||
+LINE:COLUMN go to line LINE, column COLUMN, in next FILE
|
||||
--directory, -L DIR prepend DIR to load-path (with :DIR, append DIR)
|
||||
--eval EXPR evaluate Emacs Lisp expression EXPR
|
||||
--execute EXPR evaluate Emacs Lisp expression EXPR
|
||||
--file FILE visit FILE using find-file
|
||||
--find-file FILE visit FILE using find-file
|
||||
--funcall, -f FUNC call Emacs Lisp function FUNC with no arguments
|
||||
--insert FILE insert contents of FILE into current buffer
|
||||
--kill exit without asking for confirmation
|
||||
--load, -l FILE load Emacs Lisp FILE using the load function
|
||||
--visit FILE visit FILE using find-file
|
||||
|
||||
Display options:
|
||||
|
||||
--background-color, -bg COLOR window background color
|
||||
--basic-display, -D disable many display features;
|
||||
used for debugging Emacs
|
||||
--border-color, -bd COLOR main border color
|
||||
--border-width, -bw WIDTH width of main border
|
||||
--color, --color=MODE override color mode for character terminals;
|
||||
MODE defaults to `auto', and
|
||||
can also be `never', `always',
|
||||
or a mode name like `ansi8'
|
||||
--cursor-color, -cr COLOR color of the Emacs cursor indicating point
|
||||
--font, -fn FONT default font; must be fixed-width
|
||||
--foreground-color, -fg COLOR window foreground color
|
||||
--fullheight, -fh make the first frame high as the screen
|
||||
--fullscreen, -fs make the first frame fullscreen
|
||||
--fullwidth, -fw make the first frame wide as the screen
|
||||
--maximized, -mm make the first frame maximized
|
||||
--geometry, -g GEOMETRY window geometry
|
||||
--no-bitmap-icon, -nbi do not use picture of gnu for Emacs icon
|
||||
--iconic start Emacs in iconified state
|
||||
--internal-border, -ib WIDTH width between text and main border
|
||||
--line-spacing, -lsp PIXELS additional space to put between lines
|
||||
--mouse-color, -ms COLOR mouse cursor color in Emacs window
|
||||
--name NAME title for initial Emacs frame
|
||||
--no-blinking-cursor, -nbc disable blinking cursor
|
||||
--reverse-video, -r, -rv switch foreground and background
|
||||
--title, -T TITLE title for initial Emacs frame
|
||||
--vertical-scroll-bars, -vb enable vertical scroll bars
|
||||
--xrm XRESOURCES set additional X resources
|
||||
--parent-id XID set parent window
|
||||
--help display this help and exit
|
||||
--version output version information and exit
|
||||
|
||||
You can generally also specify long option names with a single -; for
|
||||
example, -batch as well as --batch. You can use any unambiguous
|
||||
abbreviation for a --option.
|
||||
|
||||
Various environment variables and window system resources also affect
|
||||
the operation of Emacs. See the main documentation.
|
||||
|
||||
Report bugs to bug-gnu-emacs@gnu.org. First, please see the Bugs
|
||||
section of the Emacs manual or the file BUGS.
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
60
doc/tools/fconv.md
Normal file
60
doc/tools/fconv.md
Normal file
@ -0,0 +1,60 @@
|
||||
# fconv
|
||||
|
||||
~~~
|
||||
fconv: convertir un fichier ou les fichiers d'un répertoire
|
||||
|
||||
USAGE
|
||||
fconv -f FILE [cmds...]
|
||||
fconv FILE [cmds...]
|
||||
|
||||
Une ou plusieurs commandes peuvent être spécifiées, séparées par //
|
||||
La commande par défaut est 'lf'
|
||||
Si des commandes utilisant des options sont utilisées, penser à séparer les
|
||||
options de fconv avec --
|
||||
|
||||
OPTIONS
|
||||
-N, --detect-always
|
||||
Pour la commande conv, ne pas optimiser le calcul de l'encoding. Cette
|
||||
option n'est valide que si src_enc n'est pas spécifié. On assume que
|
||||
tous les fichiers n'ont pas le même encoding: l'encoding src_enc est
|
||||
donc recalculé à chaque fois.
|
||||
-r, --reverse
|
||||
Pour la commande conv, inverser src_enc et dest_enc, qui doivent être
|
||||
tous les deux spécifiés.
|
||||
-f, --file FILE
|
||||
Spécifier le fichier ou le répertoire concerné par la conversion. Les
|
||||
aliases -d et --dir sont aussi reconnus.
|
||||
Si cette option n'est pas spécifiée, le premier argument est considéré
|
||||
comme le nom du fichier ou du répertoire à convertir. Par défaut,
|
||||
convertir l'entrée standard.
|
||||
Si un répertoire est spécifié, tous les fichiers de ce répertoire et de
|
||||
ses sous-répertoires sont recherchés de façon récursive, sans limite de
|
||||
profondeur. Ensuite, chacun de ces fichiers est converti.
|
||||
--show-cmd
|
||||
Afficher la commande qui serait exécutée
|
||||
|
||||
COMMANDES
|
||||
c, conv dest_enc [src_enc]
|
||||
Convertir le fichier dans un autre encoding.
|
||||
dest_enc est l'encoding destination. Il doit être spécifié.
|
||||
src_enc est l'encoding source. S'il n'est pas spécifié ou vaut 'detect',
|
||||
il est autodétecté.
|
||||
U, utf8 [src_enc]
|
||||
Equivalent à conv utf8 src_enc
|
||||
L, latin1 [src_enc]
|
||||
Equivalent à conv latin1 src_enc
|
||||
lf
|
||||
crlf
|
||||
cr
|
||||
Convertir respectivement les caractères de fin de ligne en LF, CR/LF ou CR
|
||||
lc, latin1compat
|
||||
Transformer certains caratères UTF-8 en équivalents qui existent en Latin1
|
||||
na, noaccents
|
||||
Transformer les caractères accentués en caractères non accentués
|
||||
sort [-u]
|
||||
Trier le fichier avec la commande sort. Attention! Il ne faut utiliser
|
||||
que les options de sort qui agissent sur un flux e.g. -u pour trier les
|
||||
lignes de façon unique.
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
54
doc/tools/fnconv.md
Normal file
54
doc/tools/fnconv.md
Normal file
@ -0,0 +1,54 @@
|
||||
# fnconv
|
||||
|
||||
~~~
|
||||
fnconv: renommer un fichier ou les fichiers d'un répertoire
|
||||
|
||||
USAGE
|
||||
fnconv -f FILE [cmds...]
|
||||
fnconv FILE [cmds...]
|
||||
|
||||
Une ou plusieurs commandes peuvent être spécifiées, séparées //
|
||||
La commande par défaut est 'fixcase'
|
||||
|
||||
OPTIONS
|
||||
-N, --detect-always
|
||||
Pour la commande conv, ne pas optimiser le calcul de l'encoding. Cette
|
||||
option n'est valide que si src_enc n'est pas spécifié. On assume que
|
||||
tous les fichiers n'ont pas le même encoding: l'encoding src_enc est
|
||||
donc recalculé à chaque fois.
|
||||
-r, --reverse
|
||||
Pour la commande conv, inverser src_enc et dest_enc, qui doivent être
|
||||
tous les deux spécifiés.
|
||||
-f, --file FILE
|
||||
Spécifier le fichier ou le répertoire concerné par le renommage. Les
|
||||
aliases -d et --dir sont aussi reconnus.
|
||||
Si cette option n'est pas spécifiée, le premier argument est considéré
|
||||
comme le nom du fichier ou du répertoire à renommer.
|
||||
Si un répertoire est spécifié, le traitement est appliqué à tous les
|
||||
fichiers et répertoires de façon récursive, sans limite de profondeur.
|
||||
--show-cmd
|
||||
Afficher la commande qui serait exécutée
|
||||
|
||||
COMMANDES
|
||||
C, conv dest_enc [src_enc]
|
||||
Convertir le nom du fichier dans un autre encoding.
|
||||
dest_enc est l'encoding destination. Il doit être spécifié.
|
||||
src_enc est l'encoding source. S'il n'est pas spécifié ou vaut 'detect',
|
||||
il est autodétecté.
|
||||
U, utf8 [src_enc]
|
||||
Equivalent à conv utf8 src_enc
|
||||
L, latin1 [src_enc]
|
||||
Equivalent à conv latin1 src_enc
|
||||
lc, latin1compat
|
||||
Transformer certains caratères UTF-8 en équivalents qui existent en Latin1
|
||||
na, noaccents
|
||||
Transformer les caractères accentués en caractères non accentués
|
||||
l, lowercase
|
||||
Transfomer le nom en minuscule
|
||||
u, uppercase
|
||||
Transformer le nom en majuscule
|
||||
f, fixcase
|
||||
Transformer le nom en minuscule s'il est entièrement en majuscule
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
69
doc/tools/fndate.md
Normal file
69
doc/tools/fndate.md
Normal file
@ -0,0 +1,69 @@
|
||||
# fndate
|
||||
|
||||
~~~
|
||||
fndate: manipuler des noms de fichier pour les dater
|
||||
|
||||
USAGE
|
||||
fndate (FILE|DIR)s...
|
||||
fndate -k SRCs... [DESTDIR]
|
||||
fndate -m SRCs... [DESTDIR]
|
||||
fndate -c COMMAND [ARGs...]
|
||||
|
||||
OPTIONS
|
||||
--create-or-rename
|
||||
Créer un nouveau fichier (option -f) ou créer un nouveau répertoire
|
||||
(option -d), ou renommer un fichier existant sans le changer de
|
||||
répertoire. C'est l'option par défaut.
|
||||
-f, --create-file
|
||||
Créer un nouveau fichier. Cette option est ignorée si le fichier ou le
|
||||
répertoire spécifié existe. C'est la valeur par défaut
|
||||
-d, --create-dir
|
||||
Créer un nouveau répertoire. Cette option est ignorée si le fichier ou
|
||||
le répertoire spécifié existe.
|
||||
-k, --copy
|
||||
Copier le fichier SRC vers la destination DESTDIR qui vaut par défaut le
|
||||
répertoire courant si un seul fichier source est spécifié. Si plusieurs
|
||||
fichiers sources sont spécifiés, il faut absolument spécifier un
|
||||
répertoire destination. Dans la destination, les fichiers sont nommés
|
||||
avec la date en préfixe.
|
||||
-m, --move
|
||||
Déplacer le fichier SRC vers la destination DESTDIR qui vaut par défaut
|
||||
le répertoire courant si un seul fichier source est spécifié. Si
|
||||
plusieurs fichiers sources sont spécifiés, il faut absolument spécifier
|
||||
un répertoire destination. Dans la destination, les fichiers sont nommés
|
||||
avec la date en préfixe.
|
||||
-c, --cmd
|
||||
Les arguments sont une commande à lancer. Dans les argument, PLACEHOLDER
|
||||
est remplacé par la date. Si le PLACEHOLDER n'est trouvé dans aucun des
|
||||
arguments, alors ajouter la date à la fin de la commande. Par exemple,
|
||||
voici comment émuler l'option -k
|
||||
fndate -c cp src dest/~~
|
||||
--string
|
||||
Remplacer dans chaque argument le placeholder par la date et afficher le
|
||||
résultat.
|
||||
-P, --placeholder PLACEHOLDER
|
||||
Dans le nom spécifié, remplacer PLACEHOLDER par la date. Par défaut,
|
||||
PLACEHOLDER vaut ~~. Si le nom spécifié ne contient pas le PLACEHOLDER,
|
||||
il est placé au début.
|
||||
-@, --force-date DATE
|
||||
Dans le nom spécifié, si la date est déjà présente, forcer son
|
||||
remplacement par la valeur spécifiée. Par défaut, le fichier n'est pas
|
||||
modifié si la date est déjà présente.
|
||||
-F, --format FORMAT
|
||||
Spécifier le format de la date à insérer dans le nom du fichier. Par
|
||||
défaut, FORMAT vaut 'YYMMDD-'
|
||||
Les formats valides sont:
|
||||
YYYY année sur 4 chiffres
|
||||
YY année sur 2 chiffres
|
||||
MM mois sur 2 chiffres
|
||||
DD jour sur 2 chiffres
|
||||
Tous les autres caractères sont pris tels-quels
|
||||
-s, --short
|
||||
Equivalent à -F YYMMDD --autof
|
||||
-l, --long
|
||||
Equivalent à -F YYYMMDD --autof
|
||||
--autof
|
||||
Option non (pas encore) documentée
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
80
doc/tools/foreach.md
Normal file
80
doc/tools/foreach.md
Normal file
@ -0,0 +1,80 @@
|
||||
# foreach
|
||||
|
||||
~~~
|
||||
foreach: lancer une commande pour un ensemble d'arguments
|
||||
|
||||
USAGE
|
||||
foreach [options] [VAR=]expr cmd...
|
||||
foreach [options] [VAR=]items... -- cmd...
|
||||
|
||||
La commande est lancée avec la variable 'VAR', qui vaut par défaut 'item',
|
||||
définie à la valeur courante de l'énumération. De plus, la variable 'index'
|
||||
reçoit une valeur incrémentale commençant à 0.
|
||||
|
||||
La deuxième syntaxe appelée syntaxe alternative permet de spécifier un ensemble
|
||||
d'éléments directement, mais nécessite l'utilisation du séparateur '--' pour
|
||||
identifier où s'arrête la liste des éléments.
|
||||
|
||||
En plus de VAR, les variables file, dir, name, basename, ext et dotext sont
|
||||
définies. Elle valent respectivement le chemin absolu du fichier, le répertoire
|
||||
absolu du fichier, le nom du fichier, le nom de base sans extension, l'extension
|
||||
sans le point et l'extension avec le point, e.g pour item=dir/file.ext on a
|
||||
file=/path/to/dir/file.ext, dir=/path/to/dir, name=file.ext, basename=file,
|
||||
ext=ext, dotext=.ext
|
||||
|
||||
Les 3 exemples suivants sont équivalents:
|
||||
foreach '*.c' cp %item dest/dir
|
||||
foreach item='*.c' cp %item dest/dir
|
||||
foreach *.c -- cp %item dest/dir
|
||||
|
||||
OPTIONS
|
||||
-b, --basedir BASEDIR
|
||||
Chercher les expressions -d, -f, -a à partir de BASEDIR au lieu du
|
||||
répertoire courant.
|
||||
-d, --dir
|
||||
-f, --file
|
||||
-a, --all
|
||||
-s, --string
|
||||
Ces options permettent de spécifier le type d'expression et la façon de
|
||||
les traiter. Avec -d, faire la correspondance de l'expression sur les
|
||||
répertoires uniquement. Avec -f, faire la correspondance sur les fichier
|
||||
uniquement. Avec -a, faire la correspondance sur les répertoires et les
|
||||
fichiers. Avec -s, évaluer l'expression avec la fonction 'eval' du
|
||||
shell.
|
||||
Si la syntaxe alternative est utilisée, le premier élément est évalué
|
||||
conformément à ces options *si et seulement s'il* est précédé d'une
|
||||
chaine 'VAR='. Les autres éléments sont pris tels-quels. e.g:
|
||||
cette commande affiche uniquement la chaine '*.c':
|
||||
foreach '*.c' --
|
||||
alors que celle-ci liste les fichiers qui ont l'extension '.c':
|
||||
foreach 'item=*.c' --
|
||||
-p, --parent
|
||||
Pour chaque fichier/répertoire, se placer dans le répertoire parent
|
||||
avant de lancer la commande. item est aussi modifié pour ne plus
|
||||
contenir que le nom de la cible (qui est désormais dans le répertoire
|
||||
courant)
|
||||
Cette option a la priorité sur --go
|
||||
-g, --go
|
||||
Si la cible est un répertoire, en faire le répertoire courant avant de
|
||||
lancer la commande. Si la cible est un fichier, faire comme --parent et
|
||||
se placer dans le répertoire du fichier avant de lancer la commande.
|
||||
Dans les deux cas, item est modifié pour ne plus contenir que le nom de
|
||||
la cible, soit '.' pour le répertoire courant, soit le nom du fichier
|
||||
dans le répertoire courant.
|
||||
Si cette option est mentionnée seule, elle implique --dir
|
||||
-x, --expand
|
||||
-n, --no-expand
|
||||
Reconnaitre et traiter (resp. ne pas reconnaitre) la syntaxe %var dans
|
||||
les arguments. C'est le cas par défaut, ce qui permet de simplifier
|
||||
l'écriture d'une ligne de commande. Pour écrire le caractère '%', il
|
||||
suffit de le doubler e.g %%item
|
||||
Si l'expansion est désactivée, il faut protéger le caractère $ pour
|
||||
qu'il soit traité, e.g, avec les examples ci-dessus:
|
||||
foreach -n '*.c' 'cp "$item" dest/dir'
|
||||
-t, --title
|
||||
--no-title
|
||||
Afficher (resp. ne pas afficher) chaque correspondance avant de lancer
|
||||
la commande. Par défaut, l'affichage est effectué.
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
10
doc/tools/geturl.md
Normal file
10
doc/tools/geturl.md
Normal file
@ -0,0 +1,10 @@
|
||||
# geturl
|
||||
|
||||
~~~
|
||||
geturl: Télécharger un fichier avec wget ou curl
|
||||
|
||||
USAGE
|
||||
geturl <file.url|file.desktop|URL> [wget options]
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
@ -1,12 +1,6 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:19
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: mkRewriteRules
|
||||
# mkRewriteRules
|
||||
|
||||
{{{
|
||||
~~~
|
||||
mkRewriteRules: Créer un fichier de redirections pour Apache à partir d'un certain
|
||||
nombre de règles
|
||||
|
||||
@ -83,4 +77,6 @@ proxy), ou si le mode de réécriture requière l'utilisation d'un proxy.
|
||||
|
||||
Dans les exemples donnés ci-dessus, $URL est l'url générée par la réécriture,
|
||||
et $proxy_acls la valeur du champ proxy_acls spécifiée ci-dessus.
|
||||
}}}
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
21
doc/tools/mkiso.md
Normal file
21
doc/tools/mkiso.md
Normal file
@ -0,0 +1,21 @@
|
||||
# mkiso
|
||||
|
||||
~~~
|
||||
mkiso: créer une image iso d'un répertoire
|
||||
|
||||
USAGE
|
||||
mkiso [options] srcdir [dest.iso]
|
||||
|
||||
OPTIONS
|
||||
-M, --hfs
|
||||
créer une image hybride ISO/HFS
|
||||
-V, --volume
|
||||
Nom du volume. Par défaut, prendre le nom de base du répertoire
|
||||
d'origine. La taille est de 32 caractères max.
|
||||
-A, --application
|
||||
Description de l'application qui est sur l'image créée. Par défaut,
|
||||
prendre le nom de base du répertoire d'origine. La taille est de 128
|
||||
caractères max.
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
@ -1,12 +1,6 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:20
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: mkurl
|
||||
# mkurl
|
||||
|
||||
{{{
|
||||
~~~
|
||||
mkurl: Enregistrer une url dans un fichier raccourci
|
||||
|
||||
USAGE
|
||||
@ -17,4 +11,6 @@ Par défaut, l'url est enregistrée dans un fichier homepage.url
|
||||
Mais il est possible de spécifier un fichier avec l'extension .url pour un
|
||||
raccourci utilisable aussi sous Windows, ou avec l'extension .desktop pour
|
||||
compatibilité avec le standard XDG
|
||||
}}}
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
@ -1,12 +1,6 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:20
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: mkusfx
|
||||
# mkusfx
|
||||
|
||||
{{{
|
||||
~~~
|
||||
mkusfx: Créer une archive auto-extractible qui installe son contenu avec uinst
|
||||
|
||||
USAGE
|
||||
@ -32,4 +26,6 @@ OPTIONS
|
||||
Spécifier que l'archive doit pouvoir s'installer même sur un système sur
|
||||
lequel nutools n'est pas installé. Cette archive contiendra une copie
|
||||
locale de ulib et uinst.sh
|
||||
}}}
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
26
doc/tools/mocifs.md
Normal file
26
doc/tools/mocifs.md
Normal file
@ -0,0 +1,26 @@
|
||||
# mocifs
|
||||
|
||||
~~~
|
||||
mocifs: Monter un partage Windows/Samba/CIFS
|
||||
|
||||
USAGE
|
||||
mocifs [user@]host[/path] [mountpoint]
|
||||
|
||||
Par défaut, le répertoire distant est montée sur un répertoire avec le même nom
|
||||
de base que l'hôte. Si le répertoire distant est déjà monté, il est démonté.
|
||||
Les options -M et -U permettent de modifier le comportement par défaut.
|
||||
|
||||
OPTIONS
|
||||
-M
|
||||
Forcer le montage
|
||||
-U
|
||||
Forcer le démontage
|
||||
-o OPTIONS
|
||||
Ajouter les options spécifiées à la commande de montage mount.cifs
|
||||
-u USERNAME
|
||||
-p PASSWORD
|
||||
-c USERNAME:PASSWORD
|
||||
Spécifier les credentials à utiliser pour la connexion
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
40
doc/tools/modav.md
Normal file
40
doc/tools/modav.md
Normal file
@ -0,0 +1,40 @@
|
||||
# modav
|
||||
|
||||
~~~
|
||||
modav: Monter un répertoire sur un hôte distant avec davfs
|
||||
|
||||
USAGE
|
||||
modav http[s]://host[/path] [mountpoint]
|
||||
|
||||
Par défaut, le répertoire distant est montée sur un répertoire avec le même nom
|
||||
de base que l'hôte. Si le répertoire distant est déjà monté, il est démonté.
|
||||
Les options -M et -U permettent de modifier le comportement par défaut.
|
||||
|
||||
OPTIONS
|
||||
-M
|
||||
Forcer le montage
|
||||
-U
|
||||
Forcer le démontage
|
||||
-o OPTIONS
|
||||
Ajouter les options spécifiées à la commande de montage
|
||||
-u USERNAME
|
||||
-p PASSWORD
|
||||
-c USERNAME:PASSWORD
|
||||
Si les credentials à utiliser ne sont pas configuré dans le fichier
|
||||
/etc/davfs2/secrets, cette option permet de les spécifier. Si cette
|
||||
option est utilisée, il est possible de rajouter
|
||||
ask_auth 0
|
||||
dans le fichier /etc/davfs2/davfs2.conf pour éviter le conflit qui se
|
||||
produit quand des informations sont demandées interactivement. C'est le
|
||||
cas par exemple si une connexion en https est faite et que la chaine de
|
||||
certification n'est pas configurée. Pour mémoire, cela se fait avec
|
||||
servercert myCAs.pem
|
||||
dans le fichier /etc/davfs2/davfs2.conf
|
||||
Bien entendu, il est préférable de configurer les credentials dans le
|
||||
fichier /etc/davfs2/secrets avec la syntaxe
|
||||
url username password
|
||||
ou
|
||||
mountpoint username password
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
20
doc/tools/moiso.md
Normal file
20
doc/tools/moiso.md
Normal file
@ -0,0 +1,20 @@
|
||||
# moiso
|
||||
|
||||
~~~
|
||||
moiso: Monter une image ISO
|
||||
|
||||
USAGE
|
||||
moiso image.iso [mountpoint]
|
||||
|
||||
Par défaut, l'image iso est montée sur un répertoire avec le même nom de base.
|
||||
Si l'image est déjà montée, elle est démontée. Les options -m et -u permettent
|
||||
de modifier le comportement par défaut.
|
||||
|
||||
OPTIONS
|
||||
-m
|
||||
Forcer le montage
|
||||
-u
|
||||
Forcer le démontage
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
29
doc/tools/mossh.md
Normal file
29
doc/tools/mossh.md
Normal file
@ -0,0 +1,29 @@
|
||||
# mossh
|
||||
|
||||
~~~
|
||||
mossh: Monter un répertoire sur un hôte distant avec sshfs
|
||||
|
||||
USAGE
|
||||
mossh [user@]host[:/path] [mountpoint]
|
||||
|
||||
Par défaut, le répertoire distant est montée sur un répertoire avec le même nom
|
||||
de base que l'hôte. Si le répertoire distant est déjà monté, il est démonté.
|
||||
Les options -M et -U permettent de modifier le comportement par défaut.
|
||||
|
||||
OPTIONS
|
||||
-M
|
||||
Forcer le montage
|
||||
-U
|
||||
Forcer le démontage
|
||||
-o OPTIONS
|
||||
Ajouter les options spécifiées à la commande de montage
|
||||
-s
|
||||
Equivalent à -o allow_other ou -o allow_root selon que l'on est root ou
|
||||
non
|
||||
-u USER
|
||||
Spécifier le user pour la connexion distante, s'il n'est pas possible de
|
||||
le spécifier dans l'url. En cas de conflit, la valeur dans l'url est
|
||||
prioritaire par rapport à cette option.
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
65
doc/tools/mysqlcsv.md
Normal file
65
doc/tools/mysqlcsv.md
Normal file
@ -0,0 +1,65 @@
|
||||
# mysqlcsv
|
||||
|
||||
~~~
|
||||
mysqlcsv: Faire une requête MySQL et formater la sortie pour traitement avec awkcsv
|
||||
|
||||
USAGE
|
||||
mysqlcsv [query [db]] [-- mysql options]
|
||||
|
||||
query est la requête sql à exécuter. Si query n'est pas spécifiée, la(les)
|
||||
requête(s) sql sont prises sur l'entrée standard, ou depuis un fichier
|
||||
si l'option -f est spécifiée.
|
||||
db est le nom de la base de données. Cette argument n'est lu que si le nom
|
||||
de la base de donnée n'est ni spécifié dans le fichier de configuration,
|
||||
ni spécifié avec l'option -D
|
||||
|
||||
OPTIONS
|
||||
-h, --host HOST
|
||||
-P, --port PORT
|
||||
-u, --user USER
|
||||
-pPASSWORD
|
||||
-D, --database DATABASE
|
||||
Informations de connexion à la base de données
|
||||
-C, --config CONFIG
|
||||
Prendre les informations de connexion depuis le fichier spécifié.
|
||||
Le fichier doit être de la forme
|
||||
host=HOST
|
||||
#post=3306
|
||||
user=USER
|
||||
password=PASS
|
||||
#database=DB
|
||||
#query=QUERY
|
||||
Les variables port, database et query sont facultatives.
|
||||
Les valeurs définies dans ce fichier sont prioritaires par rapport à
|
||||
celles qui auraient été spécifiées sur la ligne de commande.
|
||||
Utiliser password=--NOT-SET-- s'il faut se connecter sans mot de passe
|
||||
Cette option peut être utilisée plusieurs fois, auquel cas les fichiers
|
||||
sont chargés dans l'ordre.
|
||||
--profile PROFILE
|
||||
La variable $PROFILE est définie avec la valeur spécifiée avant de
|
||||
sourcer les fichiers de configuration. Cela permet d'avoir des fichiers
|
||||
de configuration qui calculent dynamiquement les paramètres en fonction
|
||||
de la valeur du profil.
|
||||
-N, --no-headers
|
||||
Ne pas afficher les en-têtes
|
||||
-c, --force
|
||||
Continuer le traitement même en cas d'erreur
|
||||
-r, --raw
|
||||
Ne pas autoriser mysql à mettre en échappement certaines valeurs
|
||||
retournées par le serveur. Par défaut, les transformations suivantes
|
||||
sont effectuées:
|
||||
newline --> \n
|
||||
tab --> \t
|
||||
nul --> \0
|
||||
\ --> \\
|
||||
-n, --nulls
|
||||
Transformer dans le flux en sortie les valeurs NULL en chaines vides
|
||||
-f, --input INPUT
|
||||
Lire la requête depuis le fichier input au lieu de le lire depuis la
|
||||
ligne de commande ou l'entrée standard. Ne pas spécifier cette option
|
||||
ou utiliser '-' pour lire depuis l'entrée standard.
|
||||
Cette option est ignorée si la requête est spécifiée parmi les
|
||||
arguments.
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
108
doc/tools/mysqlloadcsv.md
Normal file
108
doc/tools/mysqlloadcsv.md
Normal file
@ -0,0 +1,108 @@
|
||||
# mysqlloadcsv
|
||||
|
||||
~~~
|
||||
mysqlloadcsv: Charger une table MySQL avec un fichier csv
|
||||
|
||||
USAGE
|
||||
mysqlloadcsv [db.]table [fields...] [-- mysql options]
|
||||
|
||||
db est le nom de la base de données
|
||||
table est le nom de la table à charger
|
||||
fields est la liste des colonnes. Si cette valeur est spécifiée, il faudra
|
||||
peut-être utiliser l'option -s pour ignorer le cas échéant la ligne des
|
||||
en-têtes dans le fichier en entrée. Sinon, les colonnes à utiliser sont
|
||||
calculées à partir du fichier en entrée.
|
||||
|
||||
Dans les données en entrées, qui doivent être en UTF8, les conversions suivantes
|
||||
sont effectuées par MySQL:
|
||||
|
||||
\0 --> <caractère NUL>
|
||||
\b --> <backspace>
|
||||
\n --> <newline>
|
||||
\r --> <carriage return>
|
||||
\t --> <tab>
|
||||
\Z --> Ctrl+Z
|
||||
\N --> NULL
|
||||
|
||||
OPTIONS
|
||||
-h, --host host
|
||||
-P, --port port
|
||||
-u, --user user
|
||||
-ppassword
|
||||
Informations de connexion à la base de données
|
||||
-C, --config CONFIG
|
||||
Prendre les informations de connexion depuis le fichier spécifié.
|
||||
Le fichier doit être de la forme
|
||||
host=HOST.TLD
|
||||
#post=3306
|
||||
user=USER
|
||||
password=PASS
|
||||
#dbtable=DB.TABLE
|
||||
#fields=(FIELDS...)
|
||||
# Il est possible aussi de spécifier DB et TABLE séparément:
|
||||
#database=DB
|
||||
#table=TABLE
|
||||
Les variables port, dbtable et fields sont facultatives.
|
||||
Les valeurs définies dans ce fichier sont prioritaires par rapport à
|
||||
celles qui auraient été spécifiées sur la ligne de commande.
|
||||
Utiliser password=--NOT-SET-- s'il faut se connecter sans mot de passe
|
||||
Cette option peut être utilisée plusieurs fois, auquel cas les fichiers
|
||||
sont chargés dans l'ordre.
|
||||
--profile PROFILE
|
||||
La variable $PROFILE est définie avec la valeur spécifiée avant de
|
||||
sourcer les fichiers de configuration. Cela permet d'avoir des fichiers
|
||||
de configuration qui calculent dynamiquement les paramètres en fonction
|
||||
de la valeur du profil.
|
||||
-f, --input INPUT
|
||||
Fichier en entrée. Ne pas spécifier cette option ou utiliser '-' pour
|
||||
lire depuis l'entrée standard.
|
||||
-d, --auto-dbtable DB
|
||||
Spécifier la base de données avec laquelle se connecter. De plus, si le
|
||||
nom de la table n'est pas spécifié, prendre par défaut le nom de base du
|
||||
fichier spécifié avec l'option -f
|
||||
-s, --skip-lines NBLINES
|
||||
Nombre de lignes à sauter dans le fichier en entrée
|
||||
-n, --fake
|
||||
Ne pas effectuer l'opération. Afficher simplement la commande SQL.
|
||||
--run
|
||||
Forcer le lancement de l'opération. Utiliser cette option avec -A pour
|
||||
créer la table avec les paramètres analysés.
|
||||
-T, --truncate
|
||||
Vider la table avant d'effectuer le chargement
|
||||
-L, --load-data
|
||||
Charger les données avec la commande 'load data local'. C'est l'option
|
||||
par défaut. Le fichier est transmis tel quel à MySQL.
|
||||
-I, --insert-data
|
||||
Charger les données en générant des commandes 'insert into'. L'effet est
|
||||
en principe le même avec l'option -L (sauf que certains formats de date
|
||||
exotiques seront correctement importés). Cette option peut aussi être
|
||||
utilisée avec l'option -n pour générer une liste de commande à corriger
|
||||
et/ou adapter.
|
||||
-U, -k, --update-data KEY
|
||||
Au lieu de charger de nouvelles données, essayer de mettre à jour la
|
||||
table. KEY est le nom de la colonne qui est utilisée comme clé. Toutes
|
||||
les autres colonnes sont les nouvelles données à mettre à jour. Si
|
||||
aucune ligne ne correspond à une clé donnée, la mise à jour pour cette
|
||||
ligne est ignorée.
|
||||
Note: utiliser les options -T et -U ensemble n'a pas de sens, mais -T
|
||||
est quand même honoré.
|
||||
-Z, --null-value VALUE
|
||||
Avec les options -I et -U, considérer que NULL est représenté par la
|
||||
chaine spécifiée. Par défaut, utiliser \N
|
||||
-z, --null-is-empty
|
||||
Avec les options -I et -U, considérer que NULL est représenté par la
|
||||
chaine vide. Cette option est équivalente à -Z ''
|
||||
-t, --types [DEFAULT_TYPE,]FIELD:TYPE,...
|
||||
Spécifier pour chaque champ mentionné le type de donnée à forcer. Le
|
||||
type 'auto' signifie que le type est autodétecté. C'est la valeur par
|
||||
défaut. Les autres types valides sont 'str', 'int' et 'date'
|
||||
Cette option est ignorée avec l'option -L
|
||||
-A, --analyse
|
||||
Analyser les données et afficher une requête pour créer une table qui
|
||||
pourrait contenir ces données.
|
||||
Cette option implique --fake et affiche simplement la commande SQL.
|
||||
Pour lancer la commande SQL générée, il faut ajouter l'option --run
|
||||
APRES cette option
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
45
doc/tools/netconfig.md
Normal file
45
doc/tools/netconfig.md
Normal file
@ -0,0 +1,45 @@
|
||||
# netconfig
|
||||
|
||||
~~~
|
||||
netconfig: gérer la configuration du réseau
|
||||
|
||||
USAGE
|
||||
netconfig -c network.conf
|
||||
netconfig [iface:]ip[/suffix]...
|
||||
|
||||
OPTIONS
|
||||
-P, --partial
|
||||
Activer le mode de configuration partielle. C'est la valeur par défaut.
|
||||
Dans ce mode, la configuration courante n'est pas modifiée. Seules de
|
||||
nouvelles adresses ips sont configurées le cas échéant.
|
||||
-F, --full
|
||||
Activer le mode de configuration complète. Dans ce mode, le nom d'hôte
|
||||
ainsi que toutes les interfaces, pont et adresses sont configurés.
|
||||
-z, --reset
|
||||
En mode full, recréer le fichier /etc/network/interfaces au lieu
|
||||
d'essayer de le mettre à jour.
|
||||
-l, --inline
|
||||
Prendre la configuration depuis la ligne de commande. C'est la valeur
|
||||
par défaut, sauf si un fichier network.conf existe dans le répertoire
|
||||
courant.
|
||||
Dans ce mode, chaque argument est une spécification d'adresse IP à
|
||||
configurer. Les autres paramètres i.e les ponts, le nom d'hôte et le
|
||||
contenu du fichier /etc/networks sont spécifiés avec les options -b,
|
||||
-h et -e
|
||||
-c, --config CONFIG
|
||||
Spécifier le fichier de configuration à utiliser pour la configuration
|
||||
du réseau. Cette option est automatiquement activée si le répertoire
|
||||
courant contient un fichier network.conf
|
||||
-w, --write
|
||||
Ecrire la configuration actuelle dans le fichier network.conf
|
||||
Note: comme ce script demande les droits de root, le fichier sera écrit
|
||||
avec le propriétaire root.
|
||||
-b, --bridge BR:IFACES
|
||||
En mode inline, spécifier une liste de ponts à configurer.
|
||||
-h, --host HOST
|
||||
En mode inline, spécifier le nom d'hôte pleinement qualifié
|
||||
-e, --etc-networks CONTENT
|
||||
Spécifier un contenu pour remplacer le fichier /etc/networks
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
7
doc/tools/noerr.md
Normal file
7
doc/tools/noerr.md
Normal file
@ -0,0 +1,7 @@
|
||||
# noerr
|
||||
|
||||
~~~
|
||||
noerr: lancer une commande en supprimant la sortie d'erreur
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
7
doc/tools/noerror.md
Normal file
7
doc/tools/noerror.md
Normal file
@ -0,0 +1,7 @@
|
||||
# noerror
|
||||
|
||||
~~~
|
||||
noerror: lancer une commande en masquant son code de retour. le code de retour est toujours 0
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
7
doc/tools/noout.md
Normal file
7
doc/tools/noout.md
Normal file
@ -0,0 +1,7 @@
|
||||
# noout
|
||||
|
||||
~~~
|
||||
noout: lancer une commande en supprimant la sortie standard
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
34
doc/tools/nutools.md
Normal file
34
doc/tools/nutools.md
Normal file
@ -0,0 +1,34 @@
|
||||
# nutools
|
||||
|
||||
~~~
|
||||
nutools: configurer ou afficher des informations sur nutools
|
||||
|
||||
USAGE
|
||||
nutools [VERSION]
|
||||
|
||||
OPTIONS
|
||||
-C, --configure
|
||||
Faire la configuration pour l'utilisateur courant en appelant uenv -u
|
||||
Avec cette option, l'option -l (ou --local-profiles) est aussi reconnue
|
||||
et est passée directement à uenv
|
||||
-v, --version
|
||||
Afficher la version de nutools installée. C'est l'option par défaut
|
||||
-c, --check
|
||||
Calculer si la version installée correspond à la version spécifiée
|
||||
-o, --oper OPERATOR
|
||||
Spécifier l'opérateur à utiliser avec l'option --check (par défaut,
|
||||
utiliser l'opérateur ge, qui permet de vérifier si la version minimum
|
||||
spécifiée est installée)
|
||||
--eq
|
||||
--ne
|
||||
--lt
|
||||
--le
|
||||
--gt
|
||||
--ge
|
||||
--same
|
||||
--diff
|
||||
Ces options sont des raccourcis. L'option '--OP' est équivalente à
|
||||
'--check --op OP'
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
10
doc/tools/openurl.md
Normal file
10
doc/tools/openurl.md
Normal file
@ -0,0 +1,10 @@
|
||||
# openurl
|
||||
|
||||
~~~
|
||||
openurl: Ouvrir une URL dans un navigateur
|
||||
|
||||
USAGE
|
||||
openurl <file.url|file.desktop|URL>
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
86
doc/tools/pdev.md
Normal file
86
doc/tools/pdev.md
Normal file
@ -0,0 +1,86 @@
|
||||
# pdev
|
||||
|
||||
~~~
|
||||
pdev: basculer sur une branche de développement
|
||||
|
||||
USAGE
|
||||
pdev [FEATURE [SOURCE]]
|
||||
pdev -m|-l|-d [FEATURE]
|
||||
|
||||
- Vérifier l'existence de la branche develop. La créer si nécessaire en la
|
||||
basant sur [origin/]master.
|
||||
- Vérifier s'il n'y a pas de modifications locales. Sinon, proposer de faire un
|
||||
commit ou un stash.
|
||||
- Si FEATURE est spécifié, et si on n'est pas déjà sur cette branche, basculer
|
||||
vers cette nouvelle branche. S'il s'agit d'une nouvelle branche, la baser sur
|
||||
la branche SOURCE, qui vaut par défaut develop
|
||||
- Si FEATURE n'est pas spécifié, basculer sur develop s'il s'agit de la seule
|
||||
solution, sinon afficher un menu pour choisir la branche de destination.
|
||||
|
||||
OPTIONS
|
||||
-C, --projdir PROJDIR
|
||||
Spécifier le répertoire de base du projet qui est dans git. Par défaut,
|
||||
on travaille dans le répertoire courant et on laisse git trouver le
|
||||
répertoire de base du projet. Avec cette option, le répertoire courant
|
||||
est modifié avant de lancer les commandes git.
|
||||
-O, --origin ORIGIN
|
||||
Spécifier le nom de l'origine. Par défaut, utiliser 'origin'
|
||||
-o, --offline
|
||||
En cas de création d'une branche, ne pas pousser vers l'origine; ne pas
|
||||
tenter le cas échéant de traquer la branche dans l'origine; ne pas
|
||||
supprimer une branche dans l'origine. Cette option est automatiquement
|
||||
activée si la variable UTOOLS_VCS_OFFLINE est définie.
|
||||
--online
|
||||
Annuler l'effet de la variable UTOOLS_VCS_OFFLINE: forcer le mode online
|
||||
--sync
|
||||
Faire un certain nombre d'opération pour 'corriger' le dépôt local: pour
|
||||
chacune des branches distantes, vérifier qu'il existe une branche locale
|
||||
qui la traque, et pour chaque feature branche locale, vérifier qu'il
|
||||
existe une branche distante associée. Cette option nécessite --online
|
||||
|
||||
-s, --squash COMMIT_MSG
|
||||
Si la branche actuelle est une feature branch, la merger comme un seul
|
||||
commit avec le message COMMIT_MSG dans develop puis la supprimer. Puis
|
||||
basculer sur la branche develop.
|
||||
Cette option ne devrait pas être utilisée avec -k, puisque bien que les
|
||||
modifications soient mergées, la branche elle-même n'est pas considérée
|
||||
comme mergée. Les résultats sont donc indéfinis si la branche est mergée
|
||||
à plusieurs reprises.
|
||||
-b, --rebase
|
||||
Si la branche actuelle est une feature branch, lancer 'git rebase -i'
|
||||
sur la feature branch. Cela permet de réordonner les commits pour
|
||||
nettoyer l'historique avant de fusionner la branche avec -m
|
||||
Cette option devrait le cas échéant être utilisée immédiatement avant -m
|
||||
ou alors il faut forcer le push et communiquer avec l'équipe sur le fait
|
||||
que la branche de feature a été rebasée.
|
||||
-m, --merge
|
||||
Si la branche actuelle est une feature branch, la merger dans develop
|
||||
puis la supprimer. Puis basculer sur la branche develop.
|
||||
--merge-log
|
||||
Ajouter un résumé des modifications sur la feature branch en ajoutant le
|
||||
log en une ligne de chaque commit dans le message du merge. Cette option
|
||||
n'est en principe pas nécessaire puisque 'prel -um' intègre la liste des
|
||||
commits dans CHANGES.txt
|
||||
-k, --keep
|
||||
Avec l'option -m, ne pas supprimer une feature branch après l'avoir
|
||||
fusionnée dans develop. Cela permet d'intégrer les modifications petit à
|
||||
petit.
|
||||
--delete
|
||||
Supprimer une feature branch, à condition qu'elle aie déjà été
|
||||
entièrement fusionnée dans la branch develop
|
||||
--force-delete
|
||||
Supprimer une feature branch, même si elle n'a pas encore été fusionnée
|
||||
dans la branche develop
|
||||
|
||||
-l, --log
|
||||
-d, --diff
|
||||
Afficher les modifications entre deux branches. L'option --log affiche
|
||||
les modifications dans l'ordre alors que --diff affiche les différences
|
||||
sous forme de diff. Les deux options peuvent être combinées et ont
|
||||
l'effet de 'git log -p'
|
||||
La branche comparée, s'il elle n'est pas spécifiée, est par défaut la
|
||||
branche courante. S'il s'agit d'une feature branch, elle est comparée à
|
||||
develop. S'il s'agit de la branche develop, elle est comparée à master.
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
105
doc/tools/prel.md
Normal file
105
doc/tools/prel.md
Normal file
@ -0,0 +1,105 @@
|
||||
# prel
|
||||
|
||||
~~~
|
||||
prel: basculer sur une branche de release
|
||||
|
||||
USAGE
|
||||
prel -u [SOURCE]
|
||||
prel -c [RELEASE [SOURCE]]
|
||||
prel -m|-l|-d [RELEASE]
|
||||
|
||||
- Vérifier s'il n'y a pas de modifications locales. Sinon, proposer de faire un
|
||||
commit ou un stash.
|
||||
- Avec l'option -c, s'il existe une branche de release, proposer de basculer
|
||||
vers elle ou sur la branche master. Sinon, basculer sur la branche master.
|
||||
- Avec l'option -u, proposer ou fixer une branche de release à créer. Si elle
|
||||
existe déjà, basculer vers elle. Sinon, la créer en la basant sur SOURCE, qui
|
||||
vaut par défaut develop
|
||||
|
||||
OPTIONS
|
||||
-C, --projdir PROJDIR
|
||||
Spécifier le répertoire de base du projet qui est dans git. Par défaut,
|
||||
on travaille dans le répertoire courant et on laisse git trouver le
|
||||
répertoire de base du projet. Avec cette option, le répertoire courant
|
||||
est modifié avant de lancer les commandes git.
|
||||
-O, --origin ORIGIN
|
||||
Spécifier le nom de l'origine. Par défaut, utiliser 'origin'
|
||||
-o, --offline
|
||||
En cas de création d'une branche, ne pas pousser vers l'origine; ne pas
|
||||
tenter le cas échéant de traquer la branche dans l'origine; ne pas
|
||||
supprimer une branche dans l'origine. Cette option est automatiquement
|
||||
activée si la variable UTOOLS_VCS_OFFLINE est définie.
|
||||
--online
|
||||
Annuler l'effet de la variable UTOOLS_VCS_OFFLINE: forcer le mode online
|
||||
|
||||
-c, --checkout
|
||||
Basculer vers une branche de release existante. C'est l'option par
|
||||
défaut. Si aucune branche de release n'existe, basculer vers master
|
||||
-u, --update
|
||||
Préparer une nouvelle release. Utiliser une des options -x, -z ou -p
|
||||
pour spécifier le type de release à préparer. Si la branche qui serait
|
||||
créée pour le type de release existe déjà, basculer vers cette branche.
|
||||
S'il faut la créer, la baser sur la branche SOURCE, qui vaut par défaut
|
||||
develop
|
||||
--menu
|
||||
-x, --major
|
||||
-z, --minor
|
||||
-p, --patchlevel
|
||||
Utilisé avec l'option -u, soit afficher un menu pour choisir la version
|
||||
de la nouvelle release (par défaut), soit préparer respectivement une
|
||||
release majeure, mineure, ou pour correction de bug.
|
||||
-v-OPT
|
||||
Avec l'option -u, spécifier une option de pver permettant de choisir la
|
||||
version de la nouvelle release. Les options supportées sont -v, -l, -a,
|
||||
-b, -r et -R. Par exemple, si la version actuelle sur la branche master
|
||||
est 0.2.3, les options '-uz -v-lbeta' permettent de préparer la release
|
||||
0.3.0-beta
|
||||
En principe, cette option n'a pas à être utilisée, puisque dans une
|
||||
branche de release, on peut faire vivre les versions de pré-release
|
||||
jusqu'à la release finale. Ainsi, la branche de release est nommée
|
||||
d'après la version finale, mais le projet peut recevoir une version de
|
||||
pré-release incrémentale.
|
||||
-w, --write
|
||||
Si une nouvelle branche est créée avec -u, mettre à jour le fichier
|
||||
VERSION.txt avec pver. C'est l'option par défaut.
|
||||
-n, --no-write
|
||||
Si une nouvelle branche est créée avec -u, NE PAS mettre à jour le
|
||||
fichier VERSION.txt avec pver. Utiliser cette option si la mise à jour
|
||||
du numéro de version doit être faite d'une manière particulière.
|
||||
-e, --edit
|
||||
Editer le fichier CHANGES.md autogénéré par les options -u -w ou un
|
||||
fichier CHANGES.txt existant. Cette option est surtout utile si -m est
|
||||
utilisé avec -u, pour donner la possibilité de corriger la liste des
|
||||
modifications avant leur enregistrement définitif.
|
||||
|
||||
-m, --merge
|
||||
Si la branche actuelle est une branche de release, ou s'il existe une
|
||||
branche de release, la merger dans master, puis dans develop, puis la
|
||||
supprimer. A l'issu de cette opération, rester sur la branche develop.
|
||||
S'il n'existe pas de branche de release, proposer de fusionner les
|
||||
modifications de la branche develop dans la branche master, sans
|
||||
préparer de branche de release au préalable.
|
||||
--delete
|
||||
Supprimer une branche de release, à condition qu'elle aie déjà été
|
||||
entièrement fusionnée dans la branch master
|
||||
--force-delete
|
||||
Supprimer une branche de release, même si elle n'a pas encore été
|
||||
fusionnée dans la branche master
|
||||
|
||||
-s, --summary
|
||||
Afficher la liste des différences entre la branche develop et la branche
|
||||
master, comme elle serait générée par les options -u -w pour le fichier
|
||||
CHANGES.txt (la syntaxe pour CHANGES.md est légèrement différente)
|
||||
-l, --log
|
||||
Afficher les modifications actuellement effectuée dans la branche de
|
||||
release par rapport à develop.
|
||||
-d, --diff
|
||||
Afficher les modifications actuellement effectuée dans la branche de
|
||||
release par rapport à develop, sous forme de diff.
|
||||
|
||||
OPTIONS AVANCEES
|
||||
--uc, --upgrade-changes
|
||||
Convertir un fichier CHANGES.txt en CHANGES.md
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
201
doc/tools/pver.md
Normal file
201
doc/tools/pver.md
Normal file
@ -0,0 +1,201 @@
|
||||
# pver
|
||||
|
||||
~~~
|
||||
pver: gérer des numéros de version selon les règles du versionage sémantique v2.0.0 (http://semver.org/)
|
||||
|
||||
USAGE
|
||||
pver [options]
|
||||
|
||||
OPTIONS
|
||||
-w, --auto-file DIR
|
||||
Gérer le numéro de version du répertoire spécifié. Si un fichier pom.xml
|
||||
existe dans ce répertoire, alors c'est l'option '-e DIR/pom.xml' qui est
|
||||
activé. Si un fichier VERSION.txt existe dans ce répertoire, alors c'est
|
||||
l'option '-f DIR/VERSION.txt' qui est activée. Sinon, un nouveau fichier
|
||||
VERSION.txt est créé dans ce répertoire. C'est l'option par défaut.
|
||||
--sw, --auto-string DIR
|
||||
Prendre pour valeur de départ la version du répertoire spécifié. Si un
|
||||
fichier pom.xml existe dans ce répertoire, alors c'est l'option -E qui
|
||||
est activé. Si un fichier VERSION.txt existe dans ce répertoire, alors
|
||||
c'est l'option -F qui est activée.
|
||||
--gw, --auto-git-string [BRANCH:]DIR
|
||||
Prendre pour valeur de départ la version du répertoire spécifié dans la
|
||||
branche BRANCH (qui vaut par défaut master) du dépôt git. Si un fichier
|
||||
pom.xml existe dans ce répertoire, alors c'est l'option -g qui est
|
||||
activé. Si un fichier VERSION.txt existe dans ce répertoire, alors c'est
|
||||
l'option -G qui est activée.
|
||||
-e, --pom POMFILE
|
||||
Gérer le numéro de version se trouvant dans le fichier pom.xml spécifié.
|
||||
Le fichier DOIT exister. Implique --maven-update
|
||||
-E, --pom-string POMFILE
|
||||
Prendre pour valeur de départ la version contenue dans le fichier
|
||||
pom.xml spécifié. Le fichier DOIT exister. Implique --maven-update
|
||||
-f, --file VERSIONFILE
|
||||
Gérer le numéro de version se trouvant dans le fichier spécifié. Le
|
||||
fichier est créé si nécessaire.
|
||||
-F, --file-string VERSIONFILE
|
||||
Prendre pour valeur de départ le contenu du fichier VERSIONFILE.
|
||||
-g, --git-file-string [BRANCH:]VERSIONFILE
|
||||
Prendre pour valeur de départ le contenu du fichier VERSIONFILE (qui
|
||||
vaut par défaut VERSION.txt) dans la branche BRANCH (qui vaut par défaut
|
||||
master) du dépôt git. Retourner 2 si on n'est pas situé dans un dépôt
|
||||
git.
|
||||
-G, --git-pom-string [BRANCH:]POMFILE
|
||||
Prendre pour valeur de départ la version du fichier POMFILE (qui vaut
|
||||
par défaut pom.xml) dans la branche BRANCH (qui vaut par défaut master)
|
||||
du dépôt git. Retourner 2 si on n'est pas situé dans un dépôt git.
|
||||
--git-prel-string
|
||||
Prendre pour valeur de départ le numéro de version correspondant à la
|
||||
branche de release courante. Retourner 1 si la branche courante n'est
|
||||
pas une branche de release, 2 si on n'est pas situé dans un dépôt git.
|
||||
-s, --string VERSION
|
||||
Prendre pour valeur de départ le numéro de version spécifié
|
||||
|
||||
--show
|
||||
Afficher le numéro de version. C'est l'action par défaut
|
||||
--check
|
||||
Vérifier que le numéro de version est conforme aux règles du versionage
|
||||
sémantique
|
||||
--eq VERSION
|
||||
--ne VERSION
|
||||
--lt VERSION
|
||||
--le VERSION
|
||||
--gt VERSION
|
||||
--ge VERSION
|
||||
--same VERSION
|
||||
--diff VERSION
|
||||
Comparer avec la version spécifiée. Les opérateurs --eq, --ne, --lt,
|
||||
--le, --gt, et --ge ignorent l'identifiant de build (comme le demande la
|
||||
règle du versionage sémantique). Les opérateurs --same et --diff
|
||||
comparent aussi les identifiants de build.
|
||||
-u, --update
|
||||
Mettre à jour le numéro de version.
|
||||
|
||||
Les options suivantes impliquent --update:
|
||||
-v, --set-version VERSION
|
||||
Spécifier un nouveau numéro de version qui écrase la valeur actuelle.
|
||||
Cette option ne devrait pas être utilisée en temps normal parce que cela
|
||||
va contre les règles du versionage sémantique.
|
||||
--prel
|
||||
Spécifier un nouveau numéro de version qui écrase la valeur actuelle. Le
|
||||
numéro de version est obtenu à partir du nom de la branche git courante,
|
||||
qui doit être de la forme release-VERSION
|
||||
--menu
|
||||
Afficher un menu permettant de choisir le composant de la version à
|
||||
incrémenter.
|
||||
-x, --major
|
||||
Augmenter le numéro de version majeure.
|
||||
-z, --minor
|
||||
Augmenter le numéro de version mineure. C'est la valeur par défaut, sauf
|
||||
avec --maven-update où c'est l'option -p qui est sélectionnée par
|
||||
défaut.
|
||||
-p, --patchlevel
|
||||
Augmenter le numéro de patch.
|
||||
-k, --keep
|
||||
Ne pas augmenter le numéro de version. Cette option est surtout utile
|
||||
pour *convertir* un numéro de version existant et mettre à jour le
|
||||
fichier correspondant. Elle est assumée si aucune option -[xzp] n'est
|
||||
spécifiée et qu'une des options -[labrSRmM] est utilisée.
|
||||
|
||||
-l, --prelease ID
|
||||
Spécifier un identifiant de pré-release, à ajouter au numéro de version.
|
||||
-a, --alpha
|
||||
-b, --beta
|
||||
-r, --rc
|
||||
Spécifier une pré-release de type alpha, beta, ou rc. Si la version est
|
||||
déjà dans ce type, augmenter la dernière valeur numérique des composants
|
||||
de l'identifiant, e.g. alpha deviant alpha.1, beta-1.2 devient beta-1.3,
|
||||
rc1 devient rc2
|
||||
XXX ces fonctions ne sont pas encore implémentées
|
||||
-S, --snapshot
|
||||
Ajouter l'identifiant SNAPSHOT, utilisé par Maven
|
||||
-R, --final, --release
|
||||
Supprimer l'identifiant de prérelease, utilisé par Maven
|
||||
|
||||
-m, --metadata ID
|
||||
Spécifier un identifiant de build, à ajouter au numéro de version.
|
||||
-M, --vcs-metadata
|
||||
Calculer l'identifiant de build à partir de la révision actuelle dans le
|
||||
gestionnaire de version. Note: pour le moment, seul git est supporté.
|
||||
--add-metadata ID
|
||||
Ajouter l'identifiant spécifié à la valeur actuelle, au lieu de la
|
||||
remplacer. Séparer l'identifiant de la valeur précédente avec un '.'
|
||||
|
||||
OPTIONS AVANCEES
|
||||
--show-source
|
||||
Afficher le type de source qui sera traité, i.e. pom, file, pom-string,
|
||||
file-string, git-pom-string, git-file-string
|
||||
--vpath VPATH
|
||||
Pour les options -e et -E, spécifier le chemin XPATH du tag qui contient
|
||||
le numéro de version.
|
||||
--map MAPFILE
|
||||
Cette option permet de spécifier un fichier de règles qui indique les
|
||||
fichiers pom.xml et VERSION.txt qui doivent être mis à jour dans un
|
||||
projet multi-modules pour lequel les versions doivent être mises à jour
|
||||
en même temps.
|
||||
Par défaut, si un fichier nommé .pver-map existe dans le répertoire de
|
||||
{POM,VERSION}FILE, cette option est automatiquement activée. Ainsi, on
|
||||
n'aura besoin d'utiliser cette option que si l'on désire charger un
|
||||
fichier alternatif ou ignorer le fichier par défaut.
|
||||
Si une valeur vide est fournie, seul le fichier {POM,VERSION}FILE est
|
||||
traité. Sinon, {POM,VERSION}FILE est utilisé uniquement pour chercher le
|
||||
fichier .pver-map et seuls les fichiers mentionnés dans MAPFILE sont
|
||||
traités.
|
||||
Le fichier MAPFILE est constitué d'un ensemble de lignes de la forme
|
||||
FILESPEC:VPATH
|
||||
FILESPEC est requis et prend la forme d'une spécification de chemin
|
||||
relatif au répertoire de MAPFILE et identifiant un ensemble de fichiers
|
||||
de version. Si FILESPEC contient des wildcards, alors les fichiers
|
||||
identifiés par ce chemin sont ignorés s'ils ont déjà été traités par une
|
||||
règle précédente. Si FILESPEC ne contient pas de wildcards, alors le
|
||||
fichier est systématiquement traité.
|
||||
VPATH désigne le chemin XPATH vers le numéro de version qu'il faut
|
||||
mettre à jour dans les fichiers pom.xml. Certaines valeurs spéciales
|
||||
pour VPATH sont supportées:
|
||||
(vide) le chemin par défaut est utilisé pour ce fichier, c'est à
|
||||
dire /project/version ou /project/parent/version en fonction
|
||||
du contenu du fichier
|
||||
- le fichier pom.xml n'est pas modifié (il est ignoré)
|
||||
D alias pour le chemin XPATH /project/version
|
||||
P alias pour le chemin XPATH /project/parent/version
|
||||
Pour les fichiers VERSION.txt, VPATH doit être vide
|
||||
Le fichier de version correspondant au premier fichier de la première
|
||||
ligne de MAPFILE contient la version de référence, qui est dupliquée
|
||||
dans tous les autres fichiers.
|
||||
--allow-empty
|
||||
Supporter que la version puisse ne pas être spécifiée ni trouvée. Sans
|
||||
cette option, on assume que la version effective est 0.0.0 si elle n'est
|
||||
pas spécifiée ni trouvée.
|
||||
Avec --show et --update, ne rien afficher si la version est vide.
|
||||
--convert
|
||||
--no-convert
|
||||
Activer (resp. désactiver) la conversion automatique. Par défaut, si la
|
||||
version est au format classique 'x.z[.p]-rDD/MM/YYYY', elle est
|
||||
convertie automatiquement au format sémantique x.z.p+rYYYYMMDD
|
||||
-t, --maven-update
|
||||
Mettre à jour le numéro de version selons les règles de Maven. Cette
|
||||
option est automatiquement activée si -e est sélectionné. Elle n'est
|
||||
prise en compte qu'avec l'option -u
|
||||
Si les options -R et -S ne sont pas spécifiée, alors une release est
|
||||
transformée en snapshot et une snapshot en release. Avec -R, une
|
||||
snapshot est transformée en release, et une release est traitée /
|
||||
incrémentée normalement. Avec -S une release est transformée en
|
||||
snapshot, et un snapshot est traité / incrémentée normalement.
|
||||
Si l'une des options -x, -z, -p est utilisée, alors la partie spécifiée
|
||||
est incrémentée selon les règles suivantes. Dans les exemples suivants,
|
||||
A est un nombre quelconque, B = A + 1, et x, y et z sont des nombres
|
||||
quelconques.
|
||||
Avec l'option -x:
|
||||
A.0.0-SNAPSHOT --> A.0.0
|
||||
A.x.y-SNAPSHOT --> B.0.0
|
||||
x.A.y --> x.B.0-SNAPSHOT
|
||||
Avec l'option -z:
|
||||
x.A.0-SNAPSHOT --> x.A.0
|
||||
x.A.y-SNAPSHOT --> x.B.0
|
||||
x.A.y --> x.B.0-SNAPSHOT
|
||||
Avec l'option -p, qui est celle sélectionnée par défaut:
|
||||
x.y.z-SNAPSHOT --> x.y.z
|
||||
x.y.A --> x.y.B-SNAPSHOT
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
20
doc/tools/pz.md
Normal file
20
doc/tools/pz.md
Normal file
@ -0,0 +1,20 @@
|
||||
# pz
|
||||
|
||||
~~~
|
||||
pz: faire une archive du projet
|
||||
|
||||
USAGE
|
||||
pz
|
||||
|
||||
OPTIONS
|
||||
-C, --projdir PROJDIR
|
||||
Spécifier le répertoire de base du projet qui est dans git. Par défaut,
|
||||
on travaille dans le répertoire courant et on laisse git trouver le
|
||||
répertoire de base du projet. Avec cette option, le répertoire courant
|
||||
est modifié avant de lancer les commandes git.
|
||||
-d, --destdir DESTDIR
|
||||
Spécifier le répertoire dans lequel générer l'archive. Par défaut,
|
||||
prendre le répertoire parent du répertoire de base du dépôt.
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
16
doc/tools/reptyr.cgo.md
Normal file
16
doc/tools/reptyr.cgo.md
Normal file
@ -0,0 +1,16 @@
|
||||
# reptyr.cgo
|
||||
|
||||
~~~
|
||||
Usage: reptyr [-s] PID
|
||||
reptyr -l|-L [COMMAND [ARGS]]
|
||||
-l Create a new pty pair and print the name of the slave.
|
||||
if there are command-line arguments after -l
|
||||
they are executed with REPTYR_PTY set to path of pty.
|
||||
-L Like '-l', but also redirect the child's stdio to the slave.
|
||||
-s Attach fds 0-2 on the target, even if it is not attached to a tty.
|
||||
-h Print this help message and exit.
|
||||
-v Print the version number and exit.
|
||||
-V Print verbose debug output.
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
12
doc/tools/rmtildes.md
Normal file
12
doc/tools/rmtildes.md
Normal file
@ -0,0 +1,12 @@
|
||||
# rmtildes
|
||||
|
||||
~~~
|
||||
rmtildes: supprimer les fichiers *~ dans le répertoire courant
|
||||
|
||||
USAGE
|
||||
rmtildes [dir [glob]]
|
||||
|
||||
Par défaut, dir==. et glob==*~
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
@ -1,19 +1,13 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 30/03/2012 04:42
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: rruns
|
||||
# rruns
|
||||
|
||||
{{{
|
||||
~~~
|
||||
rruns: Déploiement distant avec runs
|
||||
|
||||
USAGE
|
||||
rruns [-H host] [-T tmproot] rscriptname name=value...
|
||||
rruns [-H host] [-T tmproot] @recipe name=value...
|
||||
rruns [-H host] [-T tmproot] -f rscript name=value...
|
||||
rruns [-H host] [-T tmproot] -r recipe name=value...
|
||||
rruns [-h hosts] [-T tmproot] rscriptname name=value...
|
||||
rruns [-h hosts] [-T tmproot] @recipe name=value...
|
||||
rruns [-h hosts] [-T tmproot] -f rscript name=value...
|
||||
rruns [-h hosts] [-T tmproot] -r recipe name=value...
|
||||
|
||||
Lancer ce script sans argument (hors options) est équivalent à le lancer avec
|
||||
l'argument @default
|
||||
@ -27,20 +21,31 @@ OPTIONS
|
||||
sur l'hôte distant, et qu'il existe un user sudoer sur l'hôte distant,
|
||||
il est possible de faire la configuration avec '--configure root'. La
|
||||
commande serait alors
|
||||
rruns -H user@host --configure root
|
||||
rruns -h user@host --configure root
|
||||
-T tmproot
|
||||
Spécifier le répertoire temporaire sur l'hôte distant, comme par exemple
|
||||
/var/tmp. Cette option est utile pour les vservers, qui ont par défaut
|
||||
un /tmp minuscule de 16 Mo.
|
||||
-S ssh
|
||||
Spécifier le programme à utiliser pour la connection par ssh.
|
||||
-H host
|
||||
Spécifier un hôte distant sur lequel faire le déploiement. Plusieurs
|
||||
options -H peuvent être spécifiées, ou alors on peut séparer plusieurs
|
||||
hôtes par ':', e.g. -H host1:host2
|
||||
-h host
|
||||
-h @hostsfile
|
||||
Spécifier un ou plusieurs hôtes sur lequels faire le déploiement. Pour
|
||||
spécifier plusieurs hôtes, il est possible d'utiliser plusieurs fois
|
||||
l'option -h, ou spécifier en une seule fois plusieurs hôtes en les
|
||||
séparant par un espace ou le caractère ':', e.g. 'host1 host2' ou
|
||||
'host1:host2'. Si la spécification contient les caractères { et },
|
||||
l'expansion est effectuée, e.g
|
||||
-h 'root@{host1,host2}.univ.run'
|
||||
Par défaut, la connexion sur l'hôte distant se fait avec l'utilisateur
|
||||
root. Il est possible de spécifier un autre utilisateur avec la syntaxe
|
||||
user@host, e.g -H jclain@host
|
||||
user@host, e.g -h user@host
|
||||
La forme @hostsfile permet de lire la liste des hôtes depuis le fichier
|
||||
hostsfile, à raison d'un hôte par ligne.
|
||||
Si cette option n'est pas spécifiée, et que le répertoire courant est
|
||||
dans un des répertoires de $RUNSHOSTSPATH, sélectionner l'hôte
|
||||
correspondant. Sinon, l'utilisateur doit saisir l'hôte distant de façon
|
||||
interactive.
|
||||
-f RSCRIPT
|
||||
Lancer le script individuel spécifié au lieu de chercher dans les
|
||||
répertoires $RUNS{SCRIPTS,HOSTS}PATH
|
||||
@ -53,10 +58,17 @@ OPTIONS
|
||||
déploiement. Si plusieurs hôtes sont spécifiés, OUTPUT est considéré
|
||||
comme un nom de base auquel est ajouté le nom de l'hôte sur lequel
|
||||
l'archive doit être déployée.
|
||||
--init
|
||||
--no-init
|
||||
Forcer (resp. empêcher) la création des répertoires d'hôte correspondant
|
||||
aux hôtes spécifiés. Par défaut, la création des répertoires d'hôte est
|
||||
effectuée uniquement si ce script est lancé sans argument.
|
||||
--sysinfos
|
||||
Après un déploiement réussi sur l'hôte distant, inscrire si ce n'est
|
||||
déjà fait le résultat de la commande usysinfos dans le fichier
|
||||
sysinfos.conf du répertoire d'hôte.
|
||||
Cette option est automatiquement activée si ce script est lancé sans
|
||||
argument (hors options).
|
||||
}}}
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
48
doc/tools/ruinst.md
Normal file
48
doc/tools/ruinst.md
Normal file
@ -0,0 +1,48 @@
|
||||
# ruinst
|
||||
|
||||
~~~
|
||||
ruinst: Déploiement distant avec uinst
|
||||
|
||||
USAGE
|
||||
ruinst [-h host] [-T tmproot] <file|archive|dir> [-- options de uinst]
|
||||
|
||||
note: à cause d'une limitation de makeself, les options de uinst ne devraient
|
||||
pas contenir d'espaces ni de caractères spéciaux. L'échappement de ces
|
||||
caractères n'est pas garanti.
|
||||
|
||||
OPTIONS
|
||||
-C Ne pas faire le déploiement. Configurer uniquement la connexion par clé
|
||||
sur les hôtes distants spécifiés pour le user spécifié. Il faut pouvoir
|
||||
se connecter par mot de passe pour configurer la connexion par clé.
|
||||
Si l'on veut configurer la connexion par clé pour le user root, mais que
|
||||
ce n'est pas possible de se connecter par mot de passe avec le user root
|
||||
sur l'hôte distant, et qu'il existe un user sudoer sur l'hôte distant,
|
||||
il est possible de faire la configuration avec '--configure root'. La
|
||||
commande serait alors
|
||||
ruinst -h user@host --configure root
|
||||
Si l'hôte distant n'a pas sudo ou si sudo n'est pas configuré, il faut
|
||||
rajouter l'option --uses-su, e.g:
|
||||
ruinst -h user@host --configure root --uses-su
|
||||
-T tmproot
|
||||
Spécifier le répertoire temporaire sur l'hôte distant, comme par exemple
|
||||
/var/tmp. Cette option est utile pour les vservers, qui ont par défaut
|
||||
un /tmp minuscule de 16 Mo.
|
||||
-S, --ssh ssh
|
||||
Spécifier le programme à utiliser pour la connection par ssh.
|
||||
-h hosts
|
||||
-h @hostsfile
|
||||
Spécifier un ou plusieurs hôtes sur lequels faire le déploiement. Pour
|
||||
spécifier plusieurs hôtes, il est possible d'utiliser plusieurs fois
|
||||
l'option -h, ou spécifier en une seule fois plusieurs hôtes en les
|
||||
séparant par un espace ou le caractère ':', e.g. 'host1 host2' ou
|
||||
'host1:host2'. Si la spécification contient les caractères { et },
|
||||
l'expansion est effectuée, e.g
|
||||
-h 'root@{host1,host2}.univ.run'
|
||||
Par défaut, la connexion sur l'hôte distant se fait avec l'utilisateur
|
||||
root. Il est possible de spécifier un autre utilisateur avec la syntaxe
|
||||
user@host, e.g -h user@host
|
||||
La forme @hostsfile permet de lire la liste des hôtes depuis le fichier
|
||||
hostsfile, à raison d'un hôte par ligne.
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
14
doc/tools/rumount.md
Normal file
14
doc/tools/rumount.md
Normal file
@ -0,0 +1,14 @@
|
||||
# rumount
|
||||
|
||||
~~~
|
||||
rumount: démonter un système de fichier récursivement
|
||||
|
||||
USAGE
|
||||
rumount mountpoint
|
||||
|
||||
Démonter tous les systèmes de fichiers qui sont montés en-dessous de mountpoint
|
||||
puis démonter mountpoint. Démonter aussi tous les systèmes de fichiers
|
||||
bind-montés à partir d'un sous-répertoire de mountpoint.
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
@ -1,12 +1,6 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 30/03/2012 04:42
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: runs
|
||||
# runs
|
||||
|
||||
{{{
|
||||
~~~
|
||||
runs: Lancer un script avec le protocole runs
|
||||
|
||||
USAGE
|
||||
@ -18,8 +12,10 @@ USAGE
|
||||
OPTIONS
|
||||
Configuration
|
||||
--init
|
||||
Créer le répertoire d'hôte correspondant à l'hôte courant ou à l'hôte
|
||||
spécifié avec l'option -h
|
||||
--verify
|
||||
Vérifier le nom d'hôte et créer si nécessaire le répertoire d'hôte
|
||||
correspondant à l'hôte courant ou à l'hôte spécifié avec l'option -h
|
||||
Avec --verify, la création du répertoire d'hôte n'est pas effectuée.
|
||||
--sysinfos DATA
|
||||
Avec l'option --init, initialiser le fichier sysinfos.conf avec DATA, si
|
||||
le fichier n'a pas déjà été provisionné. Sans cette option, un fichier
|
||||
@ -44,7 +40,7 @@ Gestion des scripts
|
||||
{$RUNSHOSTSPATH}/$hostname.$domain (par défaut) et
|
||||
{$RUNSHOSTSPATH}/$domain/$hostname (le cas échéant)
|
||||
L'option --host est équivalente, sauf que son argument est facultatif et
|
||||
que sa valeur par défaut est l'hôte courant, soit melee
|
||||
que sa valeur par défaut est l'hôte courant, soit hydra
|
||||
--list
|
||||
Afficher la liste des scripts qui sont disponibles. Avec l'option -h,
|
||||
inclure aussi les scripts spécifiques à cet hôte.
|
||||
@ -57,4 +53,6 @@ Gestion des scripts
|
||||
--desc-only
|
||||
Afficher seulement la description du script
|
||||
-z Forcer la réinstallation des scripts qui se basent sur shouldrun/setdone
|
||||
}}}
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
33
doc/tools/runsconfig.md
Normal file
33
doc/tools/runsconfig.md
Normal file
@ -0,0 +1,33 @@
|
||||
# runsconfig
|
||||
|
||||
~~~
|
||||
runsconfig: Gérer un répertoire d'hôte de runs
|
||||
|
||||
USAGE
|
||||
runsconfig -c [host [destdir]]
|
||||
runsconfig -t -- args...
|
||||
|
||||
OPTIONS
|
||||
-c, --create
|
||||
Créer un nouveau répertoire de configuration pour un hôte
|
||||
-d, --destdir DESTDIR[=runs]
|
||||
Nom du répertoire local de configuration.
|
||||
|
||||
-t, --template [OPT]
|
||||
Gérer les fichiers du répertoire local avec templatectl. La valeur de
|
||||
cette option est utilisée comme argument court pour l'invocation de
|
||||
templatectl, e.g
|
||||
runsconfig -tm args
|
||||
est équivalent à
|
||||
templatectl -m args
|
||||
Les arguments qui restent sont passés tels quels à templatectl
|
||||
Les options courantes de templatectl -l, -v, -m, -L sont disponibles
|
||||
directement
|
||||
--help-template
|
||||
Afficher l'aide concernent la gestion des templates.
|
||||
Equivalent à -t -- --help
|
||||
-h, --host HOST
|
||||
Spécifier l'hôte. Equivalent à -v host=HOST
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
72
doc/tools/runsmod.md
Normal file
72
doc/tools/runsmod.md
Normal file
@ -0,0 +1,72 @@
|
||||
# runsmod
|
||||
|
||||
~~~
|
||||
runsmod: récupérer des dépôts git à usage de runs
|
||||
|
||||
USAGE
|
||||
runsmod [options] [-h host] [modules...]
|
||||
|
||||
Tous les dépôts spécifiés dans la configuration sont récupérés. Si des modules
|
||||
sont spécifiés, les dépôts correspondants sont récupérés aussi. Avec l'option
|
||||
-h, des dépôts spécifiques à l'hôte peuvent éventuellement être récupérés en
|
||||
plus.
|
||||
|
||||
Il est possible de spécifier le module '*' pour récupérer tous les modules
|
||||
disponibles. C'est utile sur un poste de développement.
|
||||
|
||||
OPTIONS
|
||||
-c, --config CONFIG
|
||||
Spécifier un fichier de configuration à charger au lieu de la valeur par
|
||||
défaut ~/etc/default/runs
|
||||
--prod
|
||||
--devel
|
||||
Forcer un mode de sélection des urls. En mode production, préférer pour
|
||||
le clonage les urls de production, qui sont en principe accessibles sans
|
||||
authentification et en lecture seule. En mode développement, préférer
|
||||
pour le clonage les urls de développement, qui sont en principe
|
||||
accessibles par clé ssh et en lecture/écriture
|
||||
--no-fetch
|
||||
Ne rien récupérer. Utile avec --update-repolist
|
||||
-N, --no-host
|
||||
-A, --all-hosts
|
||||
-H, -h, --host HOST
|
||||
-T, --this-host
|
||||
Options permettant de spécifier l'hôte pour la récupération de dépôts
|
||||
spécifiques.
|
||||
--no-host demande explicitement à ce qu'aucun hôte ne soit spécifié
|
||||
--all-hosts sélectionne tous les dépôts spécifiques
|
||||
--host récupère uniquement les dépôts pour l'hôte spécifié
|
||||
--this-host équivaut à --host natrix
|
||||
L'option par défaut est --this-host en mode production et --all-hosts en
|
||||
mode développement
|
||||
--update-repolist
|
||||
Forcer la mise à jour de la liste des dépôts. En principe, cette mise à
|
||||
jour n'est pas faite plus d'une fois par période de 24 heures.
|
||||
--shallow-clone
|
||||
Faire un clone avec une profondeur de 1. C'est la valeur par défaut pour
|
||||
le mode production.
|
||||
-0, --offline
|
||||
-n, --no-pull
|
||||
-u, --pull
|
||||
Spécifier le mode opératoire pour la récupération des dépôts.
|
||||
En mode --offline, ni clone ni pull ne sont autorisés. Le module doit
|
||||
avoir déjà été cloné.
|
||||
En mode --no-pull, seul le clonage est autorisé, e.g. le dépôt est
|
||||
cloné si ce n'est pas déjà le cas.
|
||||
En mode --pull, cloner le dépôt si ce n'est pas déjà le cas, ou le
|
||||
mettre à jour le dépôt avant de l'utiliser s'il avait déjà été cloné.
|
||||
Par défaut, utiliser --pull en mode production et --no-pull en mode
|
||||
développement.
|
||||
-i, --identity IDENTITY_FILE
|
||||
Spécifier le fichier depuis lequel lire la clé privée pour les
|
||||
connexions par ssh.
|
||||
-o, --output OUTPUT
|
||||
Spécifier un fichier dans lequel écrire des définitions de variables,
|
||||
notamment REPODIRS qui reçoit la liste des chemins des dépôts qui ont
|
||||
été récupérés. De plus, les variables RUNSSCRIPTSPATH, RUNSMODULESPATH
|
||||
et RUNSHOSTSPATH sont définies.
|
||||
-a, --append-output
|
||||
Ajouter au fichier OUTPUT au lieu de l'écraser
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
@ -1,12 +1,6 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:20
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: rwoinst
|
||||
# rwoinst
|
||||
|
||||
{{{
|
||||
~~~
|
||||
rwoinst: Déploiement distant avec woinst
|
||||
|
||||
USAGE
|
||||
@ -35,4 +29,6 @@ OPTIONS
|
||||
Par défaut, la connexion sur l'hôte distant se fait avec l'utilisateur
|
||||
root. Il est possible de spécifier un autre utilisateur avec la syntaxe
|
||||
user@host, e.g -H user@host
|
||||
}}}
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
94
doc/tools/sqlcsv.md
Normal file
94
doc/tools/sqlcsv.md
Normal file
@ -0,0 +1,94 @@
|
||||
# sqlcsv
|
||||
|
||||
~~~
|
||||
USAGE:
|
||||
sqlcsv [query]
|
||||
|
||||
query est la requête SQL à exécuter. Si query n'est pas spécifiée ou si elle
|
||||
vaut '-', la requête SQL est lue sur l'entrée standard, ou depuis un
|
||||
fichier si l'option -f est spécifiée.
|
||||
|
||||
DEMARRAGE
|
||||
|
||||
Au démarrage, les répertoires de configuration (utilisateur ~/.sqlcsv et système
|
||||
/etc/sqlcsv) sont analysés. Les fichiers *.jar situés dans ces répertoires sont
|
||||
ajoutés au CLASSPATH. La présence de certains fichiers est testée pour activer
|
||||
éventuellement les logs détaillés.
|
||||
|
||||
OPTIONS
|
||||
-C, --config CONFIG
|
||||
Prendre les informations de connexion depuis le fichier de propriété
|
||||
spécifié. Pour l'identifiant CONN, la propriété 'CONN.url' doit exister
|
||||
dans ce fichier avec la valeur de l'url jdbc de connexion. De plus, les
|
||||
propriétés 'CONN.user' et 'CONN.password' contiennent respectivement si
|
||||
nécessaire le nom et le mot de passe de connexion. La propriété
|
||||
'loglevel', si elle existe, est utilisée pour configurer le niveau
|
||||
d'affichage des logs, comme avec l'option --loglevel
|
||||
Si cette option n'est pas spécifiée, un fichier nommé sqlcsv.properties
|
||||
est recherché dans l'ordre: dans le répertoire courant, dans le
|
||||
répertoire de configuration utilisateur, puis dans le répertoire de
|
||||
configuration système. Si le fichier est trouvé, il est chargé
|
||||
automatiquement.
|
||||
-l, --conn CONN
|
||||
Spécifier l'identifiant (ou l'url) de connexion. Cette information est
|
||||
obligatoire. Si cette option n'est pas fournie, il faut spécifier un
|
||||
fichier de configuration avec l'option -C dans lequel *une seule*
|
||||
propriété 'CONN.url' est définie.
|
||||
-u, --user USER
|
||||
-p, --password PASSWORD
|
||||
Spécifier un nom de connexion et un mot de passe si l'url ne le fournit
|
||||
pas. Ces valeurs ont la priorité sur les valeurs éventuellement déjà
|
||||
présentes dans le fichier de propriété.
|
||||
-f, --input INPUT
|
||||
Lire la requête depuis le fichier INPUT au lieu de la lire depuis la
|
||||
ligne de commande ou l'entrée standard. Ne pas spécifier cette option ou
|
||||
utiliser '-' pour lire depuis l'entrée standard. Cette option est
|
||||
ignorée si la requête est fournie sur la ligne de commande.
|
||||
-o, --output OUTPUT
|
||||
Ecrire le résultat dans le fichier OUTPUT. Utiliser '-' pour spécifier
|
||||
la sortie standard (c'est la valeur par défaut). S'il y a plusieurs
|
||||
requêtes et que le fichier de sortie n'est pas la sortie standard,
|
||||
ajouter un numéro incrémental au nom du fichier en sortie pour chaque
|
||||
requête. Sinon, il est possible de spécifier plusieurs fois cette option
|
||||
pour nommer les fichiers correspondant à chaque requête.
|
||||
-t, --autocommit
|
||||
Activer le mode autocommit
|
||||
-c, --ignore-io-error
|
||||
Continuer le traitement même en cas d'erreur du système de fichiers.
|
||||
Cependant le traitement s'arrête et la transaction est annulée si une
|
||||
autre erreur se produit.
|
||||
-y, --ignore-any-error
|
||||
Continuer le traitement même en cas d'erreur quelconque.
|
||||
-n, --no-headers
|
||||
Ne JAMAIS inclure les en-têtes dans la sortie, même avec l'option -h
|
||||
-a, --append
|
||||
Ajouter le résultat au fichier OUTPUT au lieu de l'écraser.
|
||||
-A, --auto-na
|
||||
Activer les option -n -a si le fichier OUTPUT existe et qu'il est non
|
||||
vide. Le test n'est effectué que pour le premier fichier spécifié.
|
||||
-s, --same-output
|
||||
Utiliser le même fichier pour écrire le résultat de toutes les requêtes.
|
||||
Normalement, un numéro incrémental est ajouté au fichier en sortie si
|
||||
plusieurs requêtes sont spécifiées. Si les en-têtes sont les mêmes,
|
||||
ajouter le résultat au fichier directement à la suite. Sinon, sauter une
|
||||
ligne blanche et afficher les nouveaux en-têtes.
|
||||
-h, --force-headers
|
||||
En cas d'écriture du résultat de plusieurs requêtes dans un même
|
||||
fichier, ne pas tenter de concaténer les résultats même si les en-têtes
|
||||
sont les mêmes.
|
||||
--uc-output
|
||||
Ajouter dans la sortie les résultat de toutes les requêtes, pas
|
||||
seulement celles de type DQML
|
||||
--loglevel LOGLEVEL
|
||||
Spécifier le niveau de logs à afficher. Les valeurs valides sont à
|
||||
choisir parmi ALL, FINEST, FINER, FINE, CONFIG, INFO, WARNING, ERROR
|
||||
La présence de certains fichiers dans les répertoires de configuration
|
||||
utilisateur ou système configure les logs avant que les options de la
|
||||
ligne de commande ne soient analysés: un fichier DEBUG fait démarrer
|
||||
l'application avec le niveau de log ALL ce qui permet de voir les logs
|
||||
concernant le chargement des jar. Un fichier SQL_DEBUG permet d'activer
|
||||
la trace de DriverManager. Exemple:
|
||||
mkdir -p ~/.sqlcsv && touch ~/.sqlcsv/{DEBUG,SQL_DEBUG}
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
@ -1,12 +1,6 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:20
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: twsync
|
||||
# twsync
|
||||
|
||||
{{{
|
||||
~~~
|
||||
twsync: synchroniser un répertoire de wiki avec un tiddlywiki
|
||||
|
||||
USAGE
|
||||
@ -36,4 +30,6 @@ OPTIONS
|
||||
avec les dernières modifications.
|
||||
-U Mettre à jour le fichier wikifile avec la dernière version de tiddlywiki
|
||||
située dans ~/wop/modules/nutools/lib/tiddlywiki/empty.html
|
||||
}}}
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
13
doc/tools/uawk.md
Normal file
13
doc/tools/uawk.md
Normal file
@ -0,0 +1,13 @@
|
||||
# uawk
|
||||
|
||||
~~~
|
||||
uawk: wrapper pour des outils implémentés en awk
|
||||
|
||||
USAGE
|
||||
uawk TOOL args...
|
||||
|
||||
Les noms d'outils valides sont: awkrun awkcsv grepcsv awkfsv2csv mergecsv sortcsv dumpcsv printcsv
|
||||
Utiliser l'option --help pour obtenir de l'aide sur chacun des outils
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
@ -1,12 +1,6 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:20
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: ubackup
|
||||
# ubackup
|
||||
|
||||
{{{
|
||||
~~~
|
||||
ubackup: faire une sauvegarde des fichiers
|
||||
|
||||
USAGE
|
||||
@ -21,4 +15,6 @@ OPTIONS
|
||||
que pour l'utilisateur root.
|
||||
-n Afficher ce qui doit être fait plutôt que de le faire
|
||||
-H Arrêter la machine après une sauvegarde REUSSIE.
|
||||
}}}
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
31
doc/tools/ucalc.md
Normal file
31
doc/tools/ucalc.md
Normal file
@ -0,0 +1,31 @@
|
||||
# ucalc
|
||||
|
||||
~~~
|
||||
ucalc: Afficher une valeur dans plusieurs unités
|
||||
|
||||
USAGE
|
||||
ucalc value
|
||||
|
||||
Sans suffixe, la valeur est exprimée en octets. Sinon, elle peut être suffixée
|
||||
pour spécifier l'unité dans laquelle est exprimée la valeur:
|
||||
K,M,G,T -- Kibi (1024), Mibi (1024^2), Gibi (1024^3), Tebi (1024^4)
|
||||
k,m,g,t -- Kilo (1000), Mega (1000^2), Giga (1000^3), Tera (1000^4)
|
||||
s -- secteurs de 512 octets
|
||||
S -- secteurs de 2048 octets
|
||||
p -- pages de 4096 octets
|
||||
c -- cylindres (si l'option -c est spécifiée)
|
||||
b -- octets
|
||||
|
||||
OPTIONS
|
||||
-u UNIT
|
||||
Spécifier l'unité de value. Le suffixe qui est éventuellement sur value
|
||||
est ignoré.
|
||||
-o UNIT
|
||||
Spécifier l'unité en sortie. Par défaut, afficher la valeur dans toutes
|
||||
les unités supportées.
|
||||
-c VALUE
|
||||
Taille d'un cylindre en octets, pour permettre l'affichage des valeurs
|
||||
en cylindres
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
@ -1,29 +1,28 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:20
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: uconf
|
||||
# uconf
|
||||
|
||||
{{{
|
||||
~~~
|
||||
uconf: Activer ou désactiver un paramètre dans un fichier de configuration
|
||||
|
||||
USAGE
|
||||
uconf [options] config name[=value]...
|
||||
|
||||
OPTIONS
|
||||
-e Activer le paramètre (par défaut). Si le paramètre existe, mais est
|
||||
-e
|
||||
Activer le paramètre (par défaut). Si le paramètre existe, mais est
|
||||
commenté, il est décommenté. Si une valeur est spécifiée pour le
|
||||
paramètre, le paramètre est modifié dans le fichier en conséquence.
|
||||
-q Cette option s'utilise avec l'option -e et le type shell. Elle permet
|
||||
-q
|
||||
Cette option s'utilise avec l'option -e et le type shell. Elle permet
|
||||
de s'assurer que les valeurs ayant des espaces et/ou des caractères
|
||||
spéciaux sont quotées
|
||||
-d Désactiver le paramètre. Le paramètre est commenté s'il existe dans le
|
||||
-d
|
||||
Désactiver le paramètre. Le paramètre est commenté s'il existe dans le
|
||||
fichier
|
||||
-a Ajouter une valeur à la variable, ou un paramètre avec cette valeur
|
||||
-a
|
||||
Ajouter une valeur à la variable, ou un paramètre avec cette valeur
|
||||
(suivant le type de fichier de configuration)
|
||||
-A Ajouter une valeur au tableau, ou un paramètre avec cette valeur
|
||||
-A
|
||||
Ajouter une valeur au tableau, ou un paramètre avec cette valeur
|
||||
(suivant le type de fichier de configuration)
|
||||
-t TYPE
|
||||
Type de fichier de configuration. TYPE peut être sh (par défaut), apache
|
||||
@ -48,4 +47,6 @@ OPTIONS
|
||||
Avec le type mysql, préciser la section dans laquelle inscrire le
|
||||
paramètre. Attention! La section DOIT exister, elle n'est pas créée
|
||||
automatiquement.
|
||||
}}}
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
@ -1,12 +1,6 @@
|
||||
# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
##@creator: jclain
|
||||
##@created: 15/03/2012 22:20
|
||||
##@modifier: jclain
|
||||
##@changecount: 1
|
||||
##@tags:
|
||||
##@title: ucrontab
|
||||
# ucrontab
|
||||
|
||||
{{{
|
||||
~~~
|
||||
ucrontab: Ajouter/Supprimer une ligne dans crontab
|
||||
|
||||
USAGE
|
||||
@ -87,4 +81,6 @@ OPTIONS
|
||||
pour désactiver cette fonctionnalité.
|
||||
--fake
|
||||
Afficher simplement les modifications qui doivent être effectuées.
|
||||
}}}
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user