sakuric 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. data/CHANGELOG +13 -0
  2. data/Gemfile +22 -0
  3. data/Gemfile.lock +60 -0
  4. data/HISTORY.yml +13 -0
  5. data/INSTALL +5 -0
  6. data/LICENSE +1 -0
  7. data/Makefile +19 -0
  8. data/Manifest +405 -0
  9. data/README.md +72 -0
  10. data/Rakefile +4 -0
  11. data/TODO +3 -0
  12. data/VERSION +1 -0
  13. data/bashrc +30 -0
  14. data/bashrc.d/00-functions.include +7 -0
  15. data/bashrc.d/01-sakura_checks.include +15 -0
  16. data/bashrc.d/02-uname.include +11 -0
  17. data/bashrc.d/80-ruby.include +4 -0
  18. data/bashrc.d/99-dirs.include +11 -0
  19. data/bashrc.d/aliases.include +20 -0
  20. data/bashrc.d/common.include +7 -0
  21. data/bashrc.d/local.d/README +1 -0
  22. data/bashrc.d/local.d/nothing.include +0 -0
  23. data/bashrc.d/uname.d/Darwin +6 -0
  24. data/bashrc.d/uname.d/Linux +0 -0
  25. data/bashrc.local.sample +11 -0
  26. data/bin/10 +7 -0
  27. data/bin/10times +7 -0
  28. data/bin/1every +22 -0
  29. data/bin/1everyN +22 -0
  30. data/bin/1suN +22 -0
  31. data/bin/2 +5 -0
  32. data/bin/act +24 -0
  33. data/bin/amarelo +2 -0
  34. data/bin/arancio +4 -0
  35. data/bin/arcobaleno +10 -0
  36. data/bin/bianco +3 -0
  37. data/bin/black +2 -0
  38. data/bin/brew-install +3 -0
  39. data/bin/cache +50 -0
  40. data/bin/cache3 +50 -0
  41. data/bin/cheorae +4 -0
  42. data/bin/colorastdouterr +37 -0
  43. data/bin/cp2desktop +3 -0
  44. data/bin/create-git-repo.sh +24 -0
  45. data/bin/csoe +37 -0
  46. data/bin/data +3 -0
  47. data/bin/derive +90 -0
  48. data/bin/dimmi +31 -0
  49. data/bin/dimmiora +4 -0
  50. data/bin/doppioni +48 -0
  51. data/bin/du- +9 -0
  52. data/bin/duplicates +48 -0
  53. data/bin/echodo +7 -0
  54. data/bin/ensure_line_present +82 -0
  55. data/bin/epoch2date +5 -0
  56. data/bin/fanout +100 -0
  57. data/bin/find-broken-symlink +26 -0
  58. data/bin/find-duplicates +48 -0
  59. data/bin/find-special-chars-within-filenames +12 -0
  60. data/bin/fix-terminal +5 -0
  61. data/bin/gce-create-centos-instance +5 -0
  62. data/bin/gce-create-custom-image +8 -0
  63. data/bin/gce-curl-get-instances-for-project +7 -0
  64. data/bin/gce-get-token +3 -0
  65. data/bin/gce-getproject-metadata +35 -0
  66. data/bin/gce-public-ip +4 -0
  67. data/bin/gcutil-fetch +36 -0
  68. data/bin/giallo +2 -0
  69. data/bin/git-clone-in-non-empty-dir +21 -0
  70. data/bin/git-ignore +3 -0
  71. data/bin/git-repos +98 -0
  72. data/bin/git-repos.py +99 -0
  73. data/bin/gitinfo +2 -0
  74. data/bin/google-spreadsheet-cat +40 -0
  75. data/bin/google_ips +5 -0
  76. data/bin/gray +3 -0
  77. data/bin/green +2 -0
  78. data/bin/grigio +3 -0
  79. data/bin/gsutil-debug-bucket +12 -0
  80. data/bin/gsutil-get-oauth2-token +4 -0
  81. data/bin/gugol-image +74 -0
  82. data/bin/hamachi-ubuntu-install +17 -0
  83. data/bin/head-1^-1 +5 -0
  84. data/bin/ifdownup +13 -0
  85. data/bin/immature/ok2 +25 -0
  86. data/bin/immature/twice-still-broken +9 -0
  87. data/bin/install-gic-repo +13 -0
  88. data/bin/install-sakura-on-debian-latest +6 -0
  89. data/bin/iphoto_big_files.sh +37 -0
  90. data/bin/itunes +140 -0
  91. data/bin/jason-xpath.rb +54 -0
  92. data/bin/jsawk +1128 -0
  93. data/bin/json-xpath.rb +54 -0
  94. data/bin/keepup +13 -0
  95. data/bin/lsof-top10 +3 -0
  96. data/bin/minicook +218 -0
  97. data/bin/mv2. +2 -0
  98. data/bin/mv2desktop +2 -0
  99. data/bin/mv2dropbox +2 -0
  100. data/bin/mv2here +2 -0
  101. data/bin/mvto +39 -0
  102. data/bin/nero +2 -0
  103. data/bin/never_as_root +18 -0
  104. data/bin/not +16 -0
  105. data/bin/ok +42 -0
  106. data/bin/orange +4 -0
  107. data/bin/pink +2 -0
  108. data/bin/polygen-dell +7 -0
  109. data/bin/polygen-heanet +6 -0
  110. data/bin/polygen-labs +4 -0
  111. data/bin/print_key_val +4 -0
  112. data/bin/rainbow +10 -0
  113. data/bin/recipe +19 -0
  114. data/bin/red +2 -0
  115. data/bin/remember-command +140 -0
  116. data/bin/remember-command.rb +140 -0
  117. data/bin/richelp +99 -0
  118. data/bin/ricorda-comando +140 -0
  119. data/bin/rosa +2 -0
  120. data/bin/rosso +2 -0
  121. data/bin/run-parts.sh +50 -0
  122. data/bin/sakura-check-version +48 -0
  123. data/bin/sakura-init.DRAFT +5 -0
  124. data/bin/sakura-version +2 -0
  125. data/bin/sano +5 -0
  126. data/bin/sbianca +3 -0
  127. data/bin/sblua +2 -0
  128. data/bin/setterm-reset +5 -0
  129. data/bin/sgialla +2 -0
  130. data/bin/sgrigia +2 -0
  131. data/bin/split +37 -0
  132. data/bin/split.rb +37 -0
  133. data/bin/srosa +1 -0
  134. data/bin/srossa +2 -0
  135. data/bin/strip-white-spaces +2 -0
  136. data/bin/stty-sane +5 -0
  137. data/bin/sudo^-1 +18 -0
  138. data/bin/sverda +6 -0
  139. data/bin/swift-saio-install.sh +336 -0
  140. data/bin/synergyc +0 -0
  141. data/bin/synergys +0 -0
  142. data/bin/syracuse.pl +29 -0
  143. data/bin/tail-n+2 +5 -0
  144. data/bin/tellme +31 -0
  145. data/bin/tellme-time +4 -0
  146. data/bin/timeout3 +91 -0
  147. data/bin/top5 +4 -0
  148. data/bin/trim +4 -0
  149. data/bin/trova-broken-symlink +26 -0
  150. data/bin/twice +5 -0
  151. data/bin/twice.rb +5 -0
  152. data/bin/ubuntu-install-hamachi64 +17 -0
  153. data/bin/ultimo +5 -0
  154. data/bin/upload.py +2380 -0
  155. data/bin/usleep +0 -0
  156. data/bin/varia +90 -0
  157. data/bin/verde +2 -0
  158. data/bin/vermelho +2 -0
  159. data/bin/vim-whereveritis +5 -0
  160. data/bin/viola +1 -0
  161. data/bin/virsh-list-all-vms.py +21 -0
  162. data/bin/virtualbox-manage +41 -0
  163. data/bin/weekend +12 -0
  164. data/bin/whattimeisit +4 -0
  165. data/bin/whereis-ip +5 -0
  166. data/bin/white +3 -0
  167. data/bin/whitefy +3 -0
  168. data/bin/yellow +2 -0
  169. data/bin/yellowfy +2 -0
  170. data/bin/zombies +25 -0
  171. data/docz/polygen/dell.grm +100 -0
  172. data/docz/polygen/frati.grm +85 -0
  173. data/docz/polygen/heanet.grm +54 -0
  174. data/docz/richelp/gcompute.yml +52 -0
  175. data/docz/richelp/gcutil.yml +52 -0
  176. data/docz/richelp/gmail.yml +2 -0
  177. data/docz/richelp/ruby.yml +81 -0
  178. data/docz/richelp/sakura.yml +20 -0
  179. data/docz/richelp/sql.yml +12 -0
  180. data/docz/richelp/ubuntu.yml +22 -0
  181. data/docz/richelp/yaml.yml +39 -0
  182. data/docz/richelp/yml.yml +39 -0
  183. data/etc/sakura/devel.yml +36 -0
  184. data/etc/synergy.conf.example +37 -0
  185. data/images/color-sample.png +0 -0
  186. data/images/google.jpg +0 -0
  187. data/images/icons/toilet.png +0 -0
  188. data/images/sakura.jpg +0 -0
  189. data/images/sakura2.jpg +0 -0
  190. data/init.rb +5 -0
  191. data/lib/classes/arrays.rb +246 -0
  192. data/lib/classes/debug_ric.rb +196 -0
  193. data/lib/classes/fake_data.rb +8 -0
  194. data/lib/classes/ric_debug.rb +0 -0
  195. data/lib/classes/ricconf.rb +110 -0
  196. data/lib/classes/richelp.rb +70 -0
  197. data/lib/classes/strings.rb +284 -0
  198. data/lib/facter/google_compute_engine.rb +10 -0
  199. data/lib/recipes/20120411-puppet-rump-palladius.recipe +2 -0
  200. data/lib/recipes/20120726-skype.ubuntu.recipe +16 -0
  201. data/lib/recipes/20130206-puppet3.ubuntu.recipe +32 -0
  202. data/lib/recipes/20130206-redis.linux.recipe +17 -0
  203. data/lib/recipes/20130208-vanilla.linux.recipe +37 -0
  204. data/lib/recipes/Makefile +4 -0
  205. data/lib/recipes/README.md +29 -0
  206. data/lib/recipes/scripts/redis.sh +14 -0
  207. data/lib/ric.rb +156 -0
  208. data/lib/ric_colors.rb +313 -0
  209. data/lib/ric_strings.rb +285 -0
  210. data/lib/sonice-players/itunes_mac.rb +43 -0
  211. data/lib/sonice-players/itunes_win.rb +47 -0
  212. data/lib/sonice-players/mpd.rb +45 -0
  213. data/lib/sonice-players/rhythmbox.rb +38 -0
  214. data/profile +1 -0
  215. data/sakuric.gemspec +40 -0
  216. data/sbin/install-sakura-on-debian +25 -0
  217. data/sbin/make-install.sh +10 -0
  218. data/sbin/mate-createsymlink +4 -0
  219. data/sounds/0.ogg +0 -0
  220. data/sounds/0.wav +0 -0
  221. data/sounds/01.ogg +0 -0
  222. data/sounds/02.ogg +0 -0
  223. data/sounds/03.ogg +0 -0
  224. data/sounds/08.ogg +0 -0
  225. data/sounds/09.ogg +0 -0
  226. data/sounds/1.ogg +0 -0
  227. data/sounds/1.wav +0 -0
  228. data/sounds/10.ogg +0 -0
  229. data/sounds/100.ogg +0 -0
  230. data/sounds/11.ogg +0 -0
  231. data/sounds/12.ogg +0 -0
  232. data/sounds/13.ogg +0 -0
  233. data/sounds/14.ogg +0 -0
  234. data/sounds/15.ogg +0 -0
  235. data/sounds/16.ogg +0 -0
  236. data/sounds/17.ogg +0 -0
  237. data/sounds/18.ogg +0 -0
  238. data/sounds/19.ogg +0 -0
  239. data/sounds/2.ogg +0 -0
  240. data/sounds/2.wav +0 -0
  241. data/sounds/20.ogg +0 -0
  242. data/sounds/21.ogg +0 -0
  243. data/sounds/22.ogg +0 -0
  244. data/sounds/23.ogg +0 -0
  245. data/sounds/24.ogg +0 -0
  246. data/sounds/26.ogg +0 -0
  247. data/sounds/3.ogg +0 -0
  248. data/sounds/3.wav +0 -0
  249. data/sounds/30.ogg +0 -0
  250. data/sounds/34.ogg +0 -0
  251. data/sounds/4.ogg +0 -0
  252. data/sounds/4.wav +0 -0
  253. data/sounds/40.ogg +0 -0
  254. data/sounds/42.ogg +0 -0
  255. data/sounds/45.ogg +0 -0
  256. data/sounds/47.ogg +0 -0
  257. data/sounds/5.ogg +0 -0
  258. data/sounds/5.wav +0 -0
  259. data/sounds/50.ogg +0 -0
  260. data/sounds/6.ogg +0 -0
  261. data/sounds/6.wav +0 -0
  262. data/sounds/60.ogg +0 -0
  263. data/sounds/7.ogg +0 -0
  264. data/sounds/7.wav +0 -0
  265. data/sounds/70.ogg +0 -0
  266. data/sounds/8.ogg +0 -0
  267. data/sounds/8.wav +0 -0
  268. data/sounds/80.ogg +0 -0
  269. data/sounds/9.ogg +0 -0
  270. data/sounds/9.wav +0 -0
  271. data/sounds/90.ogg +0 -0
  272. data/sounds/a.ogg +0 -0
  273. data/sounds/aaahhh.ogg +0 -0
  274. data/sounds/abologna.ogg +0 -0
  275. data/sounds/adargenta.ogg +0 -0
  276. data/sounds/alzatiecammina.ogg +0 -0
  277. data/sounds/apache.ogg +0 -0
  278. data/sounds/attenzione.ogg +0 -0
  279. data/sounds/awesome.m4a +0 -0
  280. data/sounds/bazinga.mp3 +0 -0
  281. data/sounds/bazinga.ogg +0 -0
  282. data/sounds/bela regaz.wav +0 -0
  283. data/sounds/benvenuti.wav +0 -0
  284. data/sounds/benvenuti2.wav +0 -0
  285. data/sounds/bergonz.ogg +0 -0
  286. data/sounds/boh.ogg +0 -0
  287. data/sounds/buahah.ogg +0 -0
  288. data/sounds/buonasera.ogg +0 -0
  289. data/sounds/buongiorno.ogg +0 -0
  290. data/sounds/burp.ogg +0 -0
  291. data/sounds/carlo.ogg +0 -0
  292. data/sounds/cena.ogg +0 -0
  293. data/sounds/che figata.m4a +0 -0
  294. data/sounds/che figlio di puttana.m4a +0 -0
  295. data/sounds/che.ogg +0 -0
  296. data/sounds/ciao.ogg +0 -0
  297. data/sounds/ciao.wav +0 -0
  298. data/sounds/da.ogg +0 -0
  299. data/sounds/davide.ogg +0 -0
  300. data/sounds/demone.ogg +0 -0
  301. data/sounds/dhcp.ogg +0 -0
  302. data/sounds/dinuovo.ogg +0 -0
  303. data/sounds/dns.ogg +0 -0
  304. data/sounds/dopo.ogg +0 -0
  305. data/sounds/e'.ogg +0 -0
  306. data/sounds/eattivo.ogg +0 -0
  307. data/sounds/ee.ogg +0 -0
  308. data/sounds/ehi.ogg +0 -0
  309. data/sounds/eoragiu.ogg +0 -0
  310. data/sounds/eorasu.ogg +0 -0
  311. data/sounds/eripartita.ogg +0 -0
  312. data/sounds/estato.ogg +0 -0
  313. data/sounds/estatoriavviato.ogg +0 -0
  314. data/sounds/fratro.ogg +0 -0
  315. data/sounds/frozenbubble.ogg +0 -0
  316. data/sounds/funziona.ogg +0 -0
  317. data/sounds/go raibh mile maith agaibh.m4a +0 -0
  318. data/sounds/grazie.ogg +0 -0
  319. data/sounds/h1.ogg +0 -0
  320. data/sounds/hainuovaposta.ogg +0 -0
  321. data/sounds/hogiamangiato.ogg +0 -0
  322. data/sounds/host.ogg +0 -0
  323. data/sounds/il.ogg +0 -0
  324. data/sounds/ilcomputer.ogg +0 -0
  325. data/sounds/ilnumerodaleiselezionatoe.ogg +0 -0
  326. data/sounds/ilprocesso.ogg +0 -0
  327. data/sounds/ilprogramma.ogg +0 -0
  328. data/sounds/ilservizio.ogg +0 -0
  329. data/sounds/imap.ogg +0 -0
  330. data/sounds/imieisuperpoterimidiconoche.ogg +0 -0
  331. data/sounds/infunzione.ogg +0 -0
  332. data/sounds/inpunto.ogg +0 -0
  333. data/sounds/ipmon.ogg +0 -0
  334. data/sounds/laconnessioneadinternet.ogg +0 -0
  335. data/sounds/lastampante.ogg +0 -0
  336. data/sounds/lazzaron.ogg +0 -0
  337. data/sounds/ldap.ogg +0 -0
  338. data/sounds/linterfaccia.ogg +0 -0
  339. data/sounds/lucilla.ogg +0 -0
  340. data/sounds/ma vaffanculo.m4a +0 -0
  341. data/sounds/majjal.wav +0 -0
  342. data/sounds/mamma.ogg +0 -0
  343. data/sounds/mauro.ogg +0 -0
  344. data/sounds/max.ogg +0 -0
  345. data/sounds/meerda.wav +0 -0
  346. data/sounds/meno.ogg +0 -0
  347. data/sounds/merda clo.wav +0 -0
  348. data/sounds/mezza.ogg +0 -0
  349. data/sounds/mila.ogg +0 -0
  350. data/sounds/mille.ogg +0 -0
  351. data/sounds/minuti.ogg +0 -0
  352. data/sounds/named.ogg +0 -0
  353. data/sounds/no.ogg +0 -0
  354. data/sounds/nohofame.ogg +0 -0
  355. data/sounds/nonfunziona.ogg +0 -0
  356. data/sounds/nonriescoatrovare.ogg +0 -0
  357. data/sounds/nonsarebbeoradilavorare.ogg +0 -0
  358. data/sounds/nonstalavorando.ogg +0 -0
  359. data/sounds/numero.wav +0 -0
  360. data/sounds/ooohhh.ogg +0 -0
  361. data/sounds/pinger.ogg +0 -0
  362. data/sounds/pocofa.ogg +0 -0
  363. data/sounds/pop3.ogg +0 -0
  364. data/sounds/porca puttana.m4a +0 -0
  365. data/sounds/porcapupazza.ogg +0 -0
  366. data/sounds/ppp.ogg +0 -0
  367. data/sounds/pranzo.ogg +0 -0
  368. data/sounds/prego.ogg +0 -0
  369. data/sounds/prima.ogg +0 -0
  370. data/sounds/qualcosamidice.ogg +0 -0
  371. data/sounds/raggiungibile.ogg +0 -0
  372. data/sounds/riccardo.ogg +0 -0
  373. data/sounds/salsa ridge.wav +0 -0
  374. data/sounds/scusa.ogg +0 -0
  375. data/sounds/seriously man.m4a +0 -0
  376. data/sounds/si.ogg +0 -0
  377. data/sounds/sito porno con sonoro.wav +0 -0
  378. data/sounds/socmel.wav +0 -0
  379. data/sounds/sono.ogg +0 -0
  380. data/sounds/sonoacasa.ogg +0 -0
  381. data/sounds/sonole.ogg +0 -0
  382. data/sounds/sputo.ogg +0 -0
  383. data/sounds/ssh.ogg +0 -0
  384. data/sounds/stagiocando.ogg +0 -0
  385. data/sounds/statospento.ogg +0 -0
  386. data/sounds/stopaiodipalle.ogg +0 -0
  387. data/sounds/thesedicks.wav +0 -0
  388. data/sounds/tornatosu.ogg +0 -0
  389. data/sounds/trapoco.ogg +0 -0
  390. data/sounds/trequarti.ogg +0 -0
  391. data/sounds/tutti.ogg +0 -0
  392. data/sounds/una.ogg +0 -0
  393. data/sounds/unquarto.ogg +0 -0
  394. data/sounds/virgola.ogg +0 -0
  395. data/sources/c/usleep.c +50 -0
  396. data/spec/my_first_spec.rb +6 -0
  397. data/tasks/sakuric-gem.rake +21 -0
  398. data/tasks/testing.rake +15 -0
  399. data/templates/bashrc.inject +10 -0
  400. data/templates/happy_christmas.ascii_art +5 -0
  401. data/test/roodi.sh +10 -0
  402. data/test/test_mini_failing.rb +3 -0
  403. data/test/test_mini_ok.rb +3 -0
  404. data/test/test_ruby_syntax.sh +12 -0
  405. data/third-party/jsawk/README.markdown +437 -0
  406. data/third-party/jsawk/jsawk +1128 -0
  407. metadata +835 -0
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+
3
+ #set -x
4
+ DATE=${1:-0}
5
+ perl -e 'print scalar(localtime('$DATE')), "\n"'
@@ -0,0 +1,100 @@
1
+ #!/bin/bash
2
+ #Copyright 2000, 2001, 2002, 2003 William Stearns <wstearns@pobox.com>
3
+ #GPL'd, of course.
4
+ #Version 0.6.1, 8/7/2002
5
+ #Home web site: http://www.stearns.org/fanout/
6
+
7
+ fanoutcleanup () {
8
+ echo -n Exiting fanout, cleaning up... >/dev/stderr
9
+ if [ -n "$OUTFILES" ]; then
10
+ for ONEFILE in $OUTFILES ; do
11
+ if [ -f $ONEFILE ]; then
12
+ rm -f ONEFILE
13
+ fi
14
+ done
15
+ fi
16
+ echo done. >/dev/stderr
17
+ exit
18
+ }
19
+
20
+ trap fanoutcleanup EXIT #Clean up on exit
21
+
22
+ usage () {
23
+ echo "Usage:" >/dev/stderr
24
+ echo " $0 \"MACHINES\" \"commands and parameters to run on each machine\"" >/dev/stderr
25
+ echo " $0 -h #Show this help" >/dev/stderr
26
+ echo >/dev/stderr
27
+ echo "Examples:" >/dev/stderr
28
+ echo " fanout \"wstearns@localhost localhost anotherhost.someplace.net\" \\" >/dev/stderr
29
+ echo " \"echo My PID is \\\"\$PPID\\\" ; sleep 15\"" >/dev/stderr
30
+ echo >/dev/stderr
31
+ echo " fanout \"localhost\" \"uname -a ; rpm -qa | egrep -i '(openlinux|redhat-release)' \\" >/dev/stderr
32
+ echo " ; uptime ; df -P / ; netstat -a | grep '*:*'\" | less" >/dev/stderr
33
+ echo >/dev/stderr
34
+ echo " fanout \"localhost myaccount@localhost\" \"uptime\" >uptime-sample" >/dev/stderr
35
+ echo >/dev/stderr
36
+ echo " If you set the SERVERS variable in your environment, you can run commands on" >/dev/stderr
37
+ echo " these machines over and over:" >/dev/stderr
38
+ echo >/dev/stderr
39
+ echo " export SERVERS=\"web1 web2 mail\"" >/dev/stderr
40
+ echo " fanout \"\$SERVERS \" \"uname -a ; ( if [ -f /var/log/dmesg ]; then \\" >/dev/stderr
41
+ echo " cat /var/log/dmesg ; else dmesg ; fi ) | egrep -i '(hd[a-h]|sd[a-h])' ; ls -al \\" >/dev/stderr
42
+ echo " /proc/kcore ; cat /proc/cpuinfo\" >serverspecs" >/dev/stderr
43
+ exit
44
+ }
45
+
46
+ if [ -z "$1" ]; then usage ; fi
47
+ if [ "$1" = "-h" ]; then usage ; fi
48
+ if [ "$1" = "--noping" ]; then PING="NO" ; shift ; fi
49
+
50
+ MYPID="$$"
51
+ TARGETS=`echo "$1" | tr ' ' '\012' | sort | uniq` #Sort and remove dupes
52
+ shift #Leave just the commands and params to be executed.
53
+ STARTTIME=`date`
54
+ for ONETARGET in $TARGETS ; do
55
+ case $ONETARGET in
56
+ *@*) #user@machine form
57
+ ONEUSER="-l ${ONETARGET%%@*}"
58
+ ONEMACH=${ONETARGET##*@}
59
+ HEADER="==== As ${ONETARGET%%@*} on $ONEMACH ===="
60
+ ;;
61
+ *) #just machine form
62
+ ONEUSER=""
63
+ ONEMACH=$ONETARGET
64
+ HEADER="==== On $ONEMACH ===="
65
+ ;;
66
+ esac
67
+
68
+ if type -path mktemp >/dev/null 2>/dev/null ; then
69
+ TMPFILE=`mktemp -q /tmp/fanout.XXXXXX`
70
+ if [ $? -ne 0 ]; then
71
+ echo "$0: Can't create temp file ${TMPFILE}." >/dev/stderr
72
+ exit 1
73
+ fi
74
+ else
75
+ TMPFILE="/tmp/fanout.$MYPID.$ONETARGET.$RANDOM"
76
+ touch $TMPFILE
77
+ if [ $? -ne 0 ]; then
78
+ echo "$0: Can't create temp file ${TMPFILE}." >/dev/stderr
79
+ exit 1
80
+ fi
81
+ fi
82
+ OUTFILES="$OUTFILES $TMPFILE" #Remember the filename for later display, cleanup
83
+ if [ "$PING" = "NO" ] || ping -c 3 $ONEMACH >/dev/null 2>/dev/null ; then
84
+ echo Starting $ONETARGET >/dev/stderr #Machine is reachable
85
+ #Show machine name header, show command output, indented two spaces, save all to a temp file.
86
+ ( echo $HEADER ; ssh -n $ONEUSER $ONEMACH "$*" | sed -e 's/^/ /' ; echo ) >$TMPFILE &
87
+ else
88
+ echo $ONETARGET unavailable >/dev/stderr #Machine not responding
89
+ echo $HEADER ; echo "==== Machine unreachable by ping" ; echo >$TMPFILE
90
+ fi
91
+ done
92
+ wait #Until everyone's done.
93
+
94
+ echo "Fanout executing \"$*\""
95
+ echo Start time $STARTTIME , End time `date`
96
+ for ONEFILE in $OUTFILES ; do
97
+ cat $ONEFILE
98
+ rm -f $ONEFILE
99
+ done
100
+
@@ -0,0 +1,26 @@
1
+ #!/bin/bash
2
+
3
+ # This finds everything which is in the current dir (and below) and looks for broken links.
4
+
5
+ WHERE=${1:-.}
6
+ CANCELLA=${2:-noncancellare}
7
+
8
+ usage() {
9
+ echo "Usage: $(basename $0) [<DIRECTORY>] [--delete]"
10
+ echo ""
11
+ echo " This scripts finds the symlinks in the specified DIR tree."
12
+ echo " If directory is not specified, current dir ('.') is assumed."
13
+ echo " With --delete option, it'll also delete them"
14
+ }
15
+
16
+ if echo $2 | egrep -q '^--delete$' ; then
17
+ blue "# I DELETE symlinks from '$WHERE' in giu:" >&2
18
+ find $WHERE -type l ! -exec test -r {} \; -print0 | xargs -0 rm
19
+ green "Done"
20
+ else
21
+ yellow "# I look for symlinks from '$WHERE' downwards:" >&2
22
+ find $WHERE -type l ! -exec test -r {} \; -print
23
+ usage
24
+ # echo "+ If you want to delete em, please type: '$0 $WHERE --delete'"
25
+ fi
26
+
@@ -0,0 +1,48 @@
1
+ #!/bin/bash
2
+
3
+ DIR=${1:-.}
4
+ #DEBUG=true
5
+ DEBUG=false
6
+
7
+ ################################################################################
8
+ # This program finds all files in the current directrory with the same md5 and it prints them out.
9
+ ################################################################################
10
+
11
+ function debugga() {
12
+ if $DEBUG ; then
13
+ echo '#DEB# ' $* >&2
14
+ fi
15
+ }
16
+ TMPFILE="/tmp/md5z.$USER.$$"
17
+ #DOPPIONIcaTMP_DUPLICATES="/tmp/m5d-duplicates"
18
+ #TMPFILE='./.md5z.list'
19
+ TMP_DUPLICATES='./.md5z.duplicates'
20
+ FIND_OPTS='-not -type l'
21
+
22
+ # creao lista degli md5 almeno doppi.
23
+ rm -f $TMPFILE $TMP_DUPLICATES
24
+ # in case its empty..
25
+ touch $TMPFILE $TMP_DUPLICATES
26
+ find "$DIR" $FIND_OPTS | fgrep -v '/.svn/' | while read F; do
27
+ debugga File "$F"
28
+ md5sum "$F" >>$TMPFILE # 2>/dev/null
29
+ done
30
+
31
+ debugga "Creating file with duplicates from dir: '$DIR'"
32
+ cat $TMPFILE|sort|awk '{print $1}'|uniq -c|egrep -v " 1"|awk '{print $2}' >$TMP_DUPLICATES
33
+
34
+ #debugga "Leggo i file e ti dico cosa ho trovato:"
35
+
36
+ cat $TMP_DUPLICATES|while read row
37
+ do
38
+ echo " ### MD5: $row ###"
39
+ fgrep $row $TMPFILE|cut -d" " -f 2-
40
+ echo
41
+ done
42
+
43
+ if $DEBUG; then
44
+ debugga Leaving files where they are for debug.
45
+ else
46
+ rm -f $TMPFILE $TMP_DUPLICATES
47
+ fi
48
+
@@ -0,0 +1,12 @@
1
+ #!/bin/bash
2
+
3
+ DIR=${1:-.}
4
+
5
+ #echo "# Mancano ancora le parentesi tonde e quadre)"
6
+ echo "#Looking for filenames with special characters for dir: '$DIR'..." >&2
7
+ find "$DIR" | while read x; do
8
+ y=$( echo $x | sed -e 's/[a-zA-Z0-9@ ()./_-]//g' )
9
+ if echo $y | egrep -qv '^$' ; then
10
+ yellow "'$x' --> '$y'";
11
+ fi
12
+ done
@@ -0,0 +1,5 @@
1
+
2
+ setterm -reset
3
+ stty sane
4
+ echo "Now the terminal should be ok ;)"
5
+ echo
@@ -0,0 +1,5 @@
1
+ #!/bin/sh
2
+
3
+ NAME=${1:-test-instance}
4
+
5
+ echodo gcutil addinstance $NAME --image projects/google/images/centos-6-v20120912
@@ -0,0 +1,8 @@
1
+ #!/bin/sh
2
+
3
+ set -x
4
+
5
+ sudo python /usr/share/imagebundle/image_bundle.py -r / -o /tmp/ --log_file=/tmp/image_creation.log
6
+ echo please now find the logs and the tar.gz in /tmp. You might want to try this:
7
+ echo gsutil mb gs://gce-java-image/
8
+ echo gsutil cp /tmp/*.tar.gz gs://gce-java-image/java-image.tar.gz
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+
3
+ PROJECT=${1:-MYPROJECT}
4
+
5
+ echo "Getting instances for project: $PROJECT"
6
+ curl --header "Authorization: Bearer $(gce-get-token)" \
7
+ "https://www.googleapis.com/compute/v1beta13/projects/$PROJECT/instances"
@@ -0,0 +1,3 @@
1
+ #!/bin/sh
2
+
3
+ cat ~/.gcutil_auth |grep -i access_token | cut -d '"' -f 4
@@ -0,0 +1,35 @@
1
+ #!/bin/bash
2
+
3
+ # @tags: gce, google compute engine, metadata, json, parser
4
+
5
+ # verify gem jazor has been installed
6
+ if [ ! -f /usr/bin/jazor ] ; then
7
+ echo 'Jazor gem not found. Try this: sudo gem install jazor'
8
+ exit 1
9
+ fi
10
+
11
+ GCUTIL_JSON="gcutil getproject --format json"
12
+
13
+ usage() {
14
+ echo "$0 [<METADATA>]"
15
+ echo " --help: this help"
16
+ echo " <METADATA>: retrieves value for this metadata Key"
17
+ echo " --show: retrieves a list of metadata keys"
18
+ echo "Note. Only the current project is available ATM. To change project, you have to change ~/.gcutil.flags"
19
+ exit 1
20
+ }
21
+
22
+ if [ "A$1" = 'A--help' -o "A$1" = 'A-h' ] ; then
23
+ usage
24
+ fi
25
+ if [ "$#" -eq 0 ];then
26
+ usage
27
+ fi
28
+
29
+ if [ "$1" = '--show' ];then
30
+ echo 'List of Project Metadata:'
31
+ $GCUTIL_JSON | jazor 'commonInstanceMetadata.items.map{|x| x["key"] }.each{|x| print "- " + x, "\n" }; "\n"'
32
+ else
33
+ ARGUMENT="$1"
34
+ $GCUTIL_JSON | jazor 'commonInstanceMetadata.items.map{|x| x["key"]=="'$ARGUMENT'" ? x["value"] : null }.compact()[0]'
35
+ fi
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+
3
+ curl -s http://metadata.google.internal/0.1/meta-data/network | json-xpath.rb networkInterface.0.accessConfiguration.0.externalIp
4
+
@@ -0,0 +1,36 @@
1
+ #!/bin/bash
2
+
3
+ # Author: A. Iurlano
4
+
5
+ # run this as normal user, with bash shell
6
+
7
+ GZNAME=`curl -s https://developers.google.com/compute/docs/gcutil/ | grep -o 'https://code.google.com/p/google-compute-engine-tools/downloads/detail?name=gcutil-[^"]*.tar.gz'| grep -o 'gcutil.*'`
8
+
9
+ GCURL='https://google-compute-engine-tools.googlecode.com/files/'${GZNAME}
10
+
11
+ #echo ${GCURL}
12
+ #echo ${GZNAME}
13
+
14
+ cd /usr/local/
15
+
16
+ sudo -E wget -c ${GCURL} -O ${GZNAME}
17
+
18
+ sudo tar zxvf ${GZNAME}
19
+
20
+ export FOLDERNAME=${GZNAME:0:$((${#GZNAME}-7))}
21
+
22
+ sudo rm -f /usr/local/gcutil
23
+ sudo ln -sf /usr/local/${FOLDERNAME} /usr/local/gcutil
24
+
25
+ #check if it was added to the path
26
+ grep -q '/usr/local/gcutil' ~/.bashrc
27
+ if [ $? -ne 0 ]; then
28
+ cat <<EOF >> ~/.bashrc
29
+
30
+ export PATH=/usr/local/gcutil:\${PATH}
31
+
32
+ EOF
33
+ echo "Warning: Your .bashrc file was modified."
34
+ echo " Remember to do . ~/.bashrc or logout and log back in"
35
+ fi
36
+
@@ -0,0 +1,2 @@
1
+ #!/bin/bash
2
+ echo -en "\033[1;33m$*\033[0m\n"
@@ -0,0 +1,21 @@
1
+ #!/bin/bash
2
+
3
+
4
+ # From here: http://stackoverflow.com/questions/2411031/git-how-do-i-clone-into-a-non-empty-directory
5
+
6
+ REPO=${1:-git://github.com/palladius/gceproject-dns.palladius.eu.git}
7
+ DIR=${2:-/tmp/}
8
+
9
+ echo Cloning $REPO into dir: $DIR
10
+
11
+ set +x
12
+
13
+ # git clone in non-empty dir
14
+ git clone --no-checkout $REPO $DIR/.gitclone.tmp/ &&
15
+ mv $DIR/.gitclone.tmp/.git $DIR/ &&
16
+ rmdir $DIR/.gitclone.tmp &&
17
+ cd $DIR/ &&
18
+ git reset --hard HEAD && # git thinks all files are deleted, this reverses that behaviour
19
+ echo 'Repo succesfully checked out into: '$DIR ||
20
+ echo "Some problems here: $?"
21
+
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ echo $* >> .gitignore
@@ -0,0 +1,98 @@
1
+ #!/usr/bin/python
2
+
3
+ import glob
4
+ import os
5
+ import sys
6
+ import subprocess
7
+ from optparse import OptionParser
8
+
9
+ version = '1.1'
10
+ default_git_basedir = os.path.expandvars("$HOME/git/")
11
+ debug = False
12
+ valid_commands = [ 'list', 'dump','help']
13
+
14
+
15
+ def deb(*args):
16
+ if (debug):
17
+ print "#DEB", ' '.join(arg.__str__() for arg in args)
18
+
19
+ def parse_python_26():
20
+ '''There's a better parser with python2.7 but that's what I have in 2.6..'''
21
+ parser = OptionParser(usage = """Usage: %prog v{1} [Options] <COMMAND>
22
+ COMMAND: {0}
23
+
24
+ Examples:
25
+ %prog list --gitdir ~/Desktop/myrepos/ # lists all git repos in it
26
+ %prog dump --dumpdir ~/Dropbox/dump/of/my/repos/ # dumps a command to clone those repos all at once!
27
+ %prog dump --dumpdir ~/Dropbox/tmp/myreposbackups/ | sh # executes it ;)
28
+
29
+ """.format(valid_commands,version))
30
+ parser.add_option("-d", "--dumpdir", dest="dumpdir", default=default_git_basedir,
31
+ help="alternate dump dir (default: '{0}')".format(default_git_basedir), metavar="DIR")
32
+ parser.add_option("-g", "--gitdir", dest="gitdir", default=default_git_basedir,
33
+ help="changes git basedir (default: '{0}')".format(default_git_basedir), metavar="DIR")
34
+ parser.add_option("-q", "--quiet",
35
+ action="store_false", dest="verbose", default=True,
36
+ help="don't print status messages to stdout")
37
+ parser.add_option("-v", "--version",
38
+ help="prints version (which peraltro is '{0}')".format(version))
39
+ (options, args) = parser.parse_args()
40
+ if len(args) != 1:
41
+ parser.error("wrong number of arguments: valid_commands={0}".format(valid_commands))
42
+ if(args[0] not in valid_commands):
43
+ parser.error("wrong command: {0}. available:{ 1}".format(args[1], valid_commands))
44
+ return (parser,options,args)
45
+
46
+ def dumprepos(mybasedir,dump_basedir):
47
+ '''Prints adump of all your repo in such a way that you can reconstruct them: cool!'''
48
+ from subprocess import Popen,PIPE
49
+ deb( "Dumping to STDOUT your local Git Repos within {0} (dumpdir='{1}'):".format(mybasedir,dump_basedir))
50
+ dump = ''
51
+ for repo in gitrepos(mybasedir):
52
+ url_cmd = 'git config --get remote.origin.url'
53
+ p = Popen([url_cmd], cwd = repo, stdout=PIPE,shell=True, env = {'PATH': '/usr/local/bin/'}) # .wait() #stdout.read()
54
+ out,err=p.communicate()
55
+ url = out.strip() # trailing CRLF
56
+ if err or len(url) < 10:
57
+ sys.stderr.write( "Skipping '{0}': ERR={1} URL='{2}'\n".format(repo,err,url) )
58
+ else:
59
+ desturl= repo
60
+ dump += "git clone '{0}' '{1}'\n".format(url,desturl.replace(mybasedir,dump_basedir))
61
+ return dump
62
+
63
+ def main():
64
+ (parser,opts, args) = parse_python_26()
65
+ if args[0] == 'list':
66
+ deb( "Listing your local Git Repos:")
67
+ for repo in gitrepos(opts.gitdir):
68
+ print repo
69
+ elif args[0] == 'dump':
70
+ print dumprepos(opts.gitdir,opts.dumpdir)
71
+ elif args[0] == 'help':
72
+ #print dir(parser)
73
+ print parser.format_help()
74
+ #parser.print_usage()
75
+ else:
76
+ print "Unrecognized command: {0}".format(args[0])
77
+ exit(1)
78
+ exit(0)
79
+
80
+ def isGitRepo(dir):
81
+ '''Dice se la sottodir ha un ./.git/ e magari altre cose..'''
82
+ return os.path.isdir("{0}/.git/".format(dir))
83
+
84
+ def gitrepos(basedir):
85
+ '''Dice i repo che sono sotto ~/git/DIR o ~/git/DIR1/DIR2. Li riconosce dalla dir .git'''
86
+ repos = []
87
+ GITGLOB = '.git/'
88
+ os.chdir(basedir)
89
+ for files in glob.glob('*/{0}'.format(GITGLOB)) + glob.glob("*/*/{0}".format(GITGLOB)):
90
+ repodir = (basedir + files.__str__())[:-len(GITGLOB)] # removes "/.git/"
91
+ if isGitRepo(repodir):
92
+ repos.append(repodir)
93
+ return repos
94
+
95
+ if __name__ == '__main__':
96
+ main()
97
+ else:
98
+ print 'Bella Ric! Prova ad usare: gitrepos(), o main()!'
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/python
2
+
3
+ import glob
4
+ import os
5
+ import sys
6
+ import subprocess
7
+ default_git_basedir = os.path.expandvars("$HOME/git/")
8
+
9
+ valid_commands = [ 'list', 'dump','help']
10
+ debug = False
11
+ version = '1.1'
12
+
13
+ def deb(*args):
14
+ if (debug):
15
+ print "#DEB", ' '.join(arg.__str__() for arg in args)
16
+
17
+ def parse_python_26():
18
+ from optparse import OptionParser
19
+ parser = OptionParser(usage = """Usage: %prog v{1} [Options] <COMMAND>
20
+ COMMAND: {0}
21
+
22
+ Examples:
23
+ %prog list --gitdir ~/Desktop/myrepos/ # lists all git repos in it
24
+ %prog dump --dumpdir ~/Dropbox/dump/of/my/repos/ # dumps a command to clone those repos all at once!
25
+ %prog dump --dumpdir ~/Dropbox/tmp/myreposbackups/ | sh # executes it ;)
26
+
27
+ """.format(valid_commands,version))
28
+ parser.add_option("-d", "--dumpdir", dest="dumpdir", default=default_git_basedir,
29
+ help="alternate dump dir (default: '{0}')".format(default_git_basedir), metavar="DIR")
30
+ parser.add_option("-g", "--gitdir", dest="gitdir", default=default_git_basedir,
31
+ help="changes git basedir (default: '{0}')".format(default_git_basedir), metavar="DIR")
32
+ parser.add_option("-q", "--quiet",
33
+ action="store_false", dest="verbose", default=True,
34
+ help="don't print status messages to stdout")
35
+ parser.add_option("-v", "--version",
36
+ help="prints version (which peraltro is '{0}')".format(version))
37
+ (options, args) = parser.parse_args()
38
+ if len(args) != 1:
39
+ parser.error("wrong number of arguments: valid_commands={0}".format(valid_commands))
40
+ if(args[0] not in valid_commands):
41
+ parser.error("wrong command: {0}. available:{ 1}".format(args[1], valid_commands))
42
+ return (parser,options,args)
43
+
44
+ def dumprepos(mybasedir,dump_basedir):
45
+ '''Prints adump of all your repo in such a way that you can reconstruct them: cool!'''
46
+ deb( "Dumping to STDOUT your local Git Repos within {0} (dumpdir='{1}'):".format(mybasedir,dump_basedir))
47
+ dump = ''
48
+ from subprocess import Popen,PIPE
49
+ for repo in gitrepos(mybasedir):
50
+ url_cmd = 'git config --get remote.origin.url'
51
+ p = Popen([url_cmd], cwd = repo, stdout=PIPE,shell=True, env = {'PATH': '/usr/local/bin/'}) # .wait() #stdout.read()
52
+ out,err=p.communicate()
53
+ url = out.strip() # trailing CRLF
54
+ if err or len(url) < 10:
55
+ sys.stderr.write( "Skipping '{0}': ERR={1} URL='{2}'\n".format(repo,err,url) )
56
+ else:
57
+ desturl= repo
58
+ #dump += "git clone '{0}' '{1}'\n".format(url,desturl)
59
+ #dump += "git clone '{0}' '{1}'\n".format(url,mybasedir)
60
+ #dump += "git clone '{0}' '{1}'\n".format(url,dump_basedir)
61
+ dump += "git clone '{0}' '{1}'\n".format(url,desturl.replace(mybasedir,dump_basedir))
62
+ return dump
63
+
64
+ def main():
65
+ (parser,opts, args) = parse_python_26()
66
+ if args[0] == 'list':
67
+ deb( "Listing your local Git Repos:")
68
+ for repo in gitrepos(opts.gitdir):
69
+ print repo
70
+ elif args[0] == 'dump':
71
+ print dumprepos(opts.gitdir,opts.dumpdir)
72
+ elif args[0] == 'help':
73
+ #print dir(parser)
74
+ print parser.format_help()
75
+ #parser.print_usage()
76
+ else:
77
+ print "Unrecognized command: {0}".format(args[0])
78
+ exit(1)
79
+ exit(0)
80
+
81
+ def isGitRepo(dir):
82
+ '''Dice se la sottodir ha un ./.git/ e magari altre cose..'''
83
+ return os.path.isdir("{0}/.git/".format(dir))
84
+
85
+ def gitrepos(basedir):
86
+ '''Dice i repo che sono sotto ~/git/DIR o ~/git/DIR1/DIR2. Li riconosce dalla dir .git'''
87
+ repos = []
88
+ GITGLOB = '.git/'
89
+ os.chdir(basedir)
90
+ for files in glob.glob('*/{0}'.format(GITGLOB)) + glob.glob("*/*/{0}".format(GITGLOB)):
91
+ repodir = (basedir + files.__str__())[:-len(GITGLOB)] # removes "/.git/"
92
+ if isGitRepo(repodir):
93
+ repos.append(repodir)
94
+ return repos
95
+
96
+ if __name__ == '__main__':
97
+ main()
98
+ else:
99
+ print 'Bella Ric! Prova ad usare: gitrepos(), o main()!'