├── .circleci └── config.yml ├── .git-blame-ignore-revs ├── .gitignore ├── COPYING ├── FAQ ├── Makefile ├── README.md ├── TODO ├── docs ├── Makefile ├── bugs.rst ├── changes.rst ├── conf.py ├── configuration.rst ├── developer.rst ├── faq.rst ├── index.rst ├── installation │ ├── debian.rst │ ├── gentoo.rst │ ├── index.rst │ ├── initial_config.rst │ ├── mod_asn.rst │ ├── opensuse.rst │ ├── prerequirements.rst │ ├── source.rst │ └── troubleshooting.rst ├── intro.rst ├── mirrors.rst ├── platforms.rst ├── tuning.rst ├── upgrading.rst └── usecases.rst ├── mb ├── Makefile ├── famfamfam_flag_icons │ ├── gif │ │ ├── ad.gif │ │ ├── ae.gif │ │ ├── af.gif │ │ ├── ag.gif │ │ ├── ai.gif │ │ ├── al.gif │ │ ├── am.gif │ │ ├── an.gif │ │ ├── ao.gif │ │ ├── ar.gif │ │ ├── as.gif │ │ ├── at.gif │ │ ├── au.gif │ │ ├── aw.gif │ │ ├── ax.gif │ │ ├── az.gif │ │ ├── ba.gif │ │ ├── bb.gif │ │ ├── bd.gif │ │ ├── be.gif │ │ ├── bf.gif │ │ ├── bg.gif │ │ ├── bh.gif │ │ ├── bi.gif │ │ ├── bj.gif │ │ ├── bm.gif │ │ ├── bn.gif │ │ ├── bo.gif │ │ ├── br.gif │ │ ├── bs.gif │ │ ├── bt.gif │ │ ├── bv.gif │ │ ├── bw.gif │ │ ├── by.gif │ │ ├── bz.gif │ │ ├── ca.gif │ │ ├── catalonia.gif │ │ ├── cc.gif │ │ ├── cd.gif │ │ ├── cf.gif │ │ ├── cg.gif │ │ ├── ch.gif │ │ ├── ci.gif │ │ ├── ck.gif │ │ ├── cl.gif │ │ ├── cm.gif │ │ ├── cn.gif │ │ ├── co.gif │ │ ├── cr.gif │ │ ├── cs.gif │ │ ├── cu.gif │ │ ├── cv.gif │ │ ├── cx.gif │ │ ├── cy.gif │ │ ├── cz.gif │ │ ├── de.gif │ │ ├── dj.gif │ │ ├── dk.gif │ │ ├── dm.gif │ │ ├── do.gif │ │ ├── dz.gif │ │ ├── ec.gif │ │ ├── ee.gif │ │ ├── eg.gif │ │ ├── eh.gif │ │ ├── england.gif │ │ ├── er.gif │ │ ├── es.gif │ │ ├── et.gif │ │ ├── europeanunion.gif │ │ ├── fam.gif │ │ ├── fi.gif │ │ ├── fj.gif │ │ ├── fk.gif │ │ ├── fm.gif │ │ ├── fo.gif │ │ ├── fr.gif │ │ ├── ga.gif │ │ ├── gb.gif │ │ ├── gd.gif │ │ ├── ge.gif │ │ ├── gf.gif │ │ ├── gh.gif │ │ ├── gi.gif │ │ ├── gl.gif │ │ ├── gm.gif │ │ ├── gn.gif │ │ ├── gp.gif │ │ ├── gq.gif │ │ ├── gr.gif │ │ ├── gs.gif │ │ ├── gt.gif │ │ ├── gu.gif │ │ ├── gw.gif │ │ ├── gy.gif │ │ ├── hk.gif │ │ ├── hm.gif │ │ ├── hn.gif │ │ ├── hr.gif │ │ ├── ht.gif │ │ ├── hu.gif │ │ ├── id.gif │ │ ├── ie.gif │ │ ├── il.gif │ │ ├── in.gif │ │ ├── io.gif │ │ ├── iq.gif │ │ ├── ir.gif │ │ ├── is.gif │ │ ├── it.gif │ │ ├── jm.gif │ │ ├── jo.gif │ │ ├── jp.gif │ │ ├── ke.gif │ │ ├── kg.gif │ │ ├── kh.gif │ │ ├── ki.gif │ │ ├── km.gif │ │ ├── kn.gif │ │ ├── kp.gif │ │ ├── kr.gif │ │ ├── kw.gif │ │ ├── ky.gif │ │ ├── kz.gif │ │ ├── la.gif │ │ ├── lb.gif │ │ ├── lc.gif │ │ ├── li.gif │ │ ├── lk.gif │ │ ├── lr.gif │ │ ├── ls.gif │ │ ├── lt.gif │ │ ├── lu.gif │ │ ├── lv.gif │ │ ├── ly.gif │ │ ├── ma.gif │ │ ├── mc.gif │ │ ├── md.gif │ │ ├── me.gif │ │ ├── mg.gif │ │ ├── mh.gif │ │ ├── mk.gif │ │ ├── ml.gif │ │ ├── mm.gif │ │ ├── mn.gif │ │ ├── mo.gif │ │ ├── mp.gif │ │ ├── mq.gif │ │ ├── mr.gif │ │ ├── ms.gif │ │ ├── mt.gif │ │ ├── mu.gif │ │ ├── mv.gif │ │ ├── mw.gif │ │ ├── mx.gif │ │ ├── my.gif │ │ ├── mz.gif │ │ ├── na.gif │ │ ├── nc.gif │ │ ├── ne.gif │ │ ├── nf.gif │ │ ├── ng.gif │ │ ├── ni.gif │ │ ├── nl.gif │ │ ├── no.gif │ │ ├── np.gif │ │ ├── nr.gif │ │ ├── nu.gif │ │ ├── nz.gif │ │ ├── om.gif │ │ ├── pa.gif │ │ ├── pe.gif │ │ ├── pf.gif │ │ ├── pg.gif │ │ ├── ph.gif │ │ ├── pk.gif │ │ ├── pl.gif │ │ ├── pm.gif │ │ ├── pn.gif │ │ ├── pr.gif │ │ ├── ps.gif │ │ ├── pt.gif │ │ ├── pw.gif │ │ ├── py.gif │ │ ├── qa.gif │ │ ├── re.gif │ │ ├── ro.gif │ │ ├── rs.gif │ │ ├── ru.gif │ │ ├── rw.gif │ │ ├── sa.gif │ │ ├── sb.gif │ │ ├── sc.gif │ │ ├── scotland.gif │ │ ├── sd.gif │ │ ├── se.gif │ │ ├── sg.gif │ │ ├── sh.gif │ │ ├── si.gif │ │ ├── sj.gif │ │ ├── sk.gif │ │ ├── sl.gif │ │ ├── sm.gif │ │ ├── sn.gif │ │ ├── so.gif │ │ ├── sr.gif │ │ ├── st.gif │ │ ├── sv.gif │ │ ├── sy.gif │ │ ├── sz.gif │ │ ├── tc.gif │ │ ├── td.gif │ │ ├── tf.gif │ │ ├── tg.gif │ │ ├── th.gif │ │ ├── tj.gif │ │ ├── tk.gif │ │ ├── tl.gif │ │ ├── tm.gif │ │ ├── tn.gif │ │ ├── to.gif │ │ ├── tr.gif │ │ ├── tt.gif │ │ ├── tv.gif │ │ ├── tw.gif │ │ ├── tz.gif │ │ ├── ua.gif │ │ ├── ug.gif │ │ ├── um.gif │ │ ├── us.gif │ │ ├── uy.gif │ │ ├── uz.gif │ │ ├── va.gif │ │ ├── vc.gif │ │ ├── ve.gif │ │ ├── vg.gif │ │ ├── vi.gif │ │ ├── vn.gif │ │ ├── vu.gif │ │ ├── wales.gif │ │ ├── wf.gif │ │ ├── ws.gif │ │ ├── ye.gif │ │ ├── yt.gif │ │ ├── za.gif │ │ ├── zm.gif │ │ └── zw.gif │ ├── png │ │ ├── ad.png │ │ ├── ae.png │ │ ├── af.png │ │ ├── ag.png │ │ ├── ai.png │ │ ├── al.png │ │ ├── am.png │ │ ├── an.png │ │ ├── ao.png │ │ ├── ar.png │ │ ├── as.png │ │ ├── at.png │ │ ├── au.png │ │ ├── aw.png │ │ ├── ax.png │ │ ├── az.png │ │ ├── ba.png │ │ ├── bb.png │ │ ├── bd.png │ │ ├── be.png │ │ ├── bf.png │ │ ├── bg.png │ │ ├── bh.png │ │ ├── bi.png │ │ ├── bj.png │ │ ├── bm.png │ │ ├── bn.png │ │ ├── bo.png │ │ ├── br.png │ │ ├── bs.png │ │ ├── bt.png │ │ ├── bv.png │ │ ├── bw.png │ │ ├── by.png │ │ ├── bz.png │ │ ├── ca.png │ │ ├── catalonia.png │ │ ├── cc.png │ │ ├── cd.png │ │ ├── cf.png │ │ ├── cg.png │ │ ├── ch.png │ │ ├── ci.png │ │ ├── ck.png │ │ ├── cl.png │ │ ├── cm.png │ │ ├── cn.png │ │ ├── co.png │ │ ├── cr.png │ │ ├── cs.png │ │ ├── cu.png │ │ ├── cv.png │ │ ├── cx.png │ │ ├── cy.png │ │ ├── cz.png │ │ ├── de.png │ │ ├── dj.png │ │ ├── dk.png │ │ ├── dm.png │ │ ├── do.png │ │ ├── dz.png │ │ ├── ec.png │ │ ├── ee.png │ │ ├── eg.png │ │ ├── eh.png │ │ ├── england.png │ │ ├── er.png │ │ ├── es.png │ │ ├── et.png │ │ ├── europeanunion.png │ │ ├── fam.png │ │ ├── fi.png │ │ ├── fj.png │ │ ├── fk.png │ │ ├── fm.png │ │ ├── fo.png │ │ ├── fr.png │ │ ├── ga.png │ │ ├── gb.png │ │ ├── gd.png │ │ ├── ge.png │ │ ├── gf.png │ │ ├── gh.png │ │ ├── gi.png │ │ ├── gl.png │ │ ├── gm.png │ │ ├── gn.png │ │ ├── gp.png │ │ ├── gq.png │ │ ├── gr.png │ │ ├── gs.png │ │ ├── gt.png │ │ ├── gu.png │ │ ├── gw.png │ │ ├── gy.png │ │ ├── hk.png │ │ ├── hm.png │ │ ├── hn.png │ │ ├── hr.png │ │ ├── ht.png │ │ ├── hu.png │ │ ├── id.png │ │ ├── ie.png │ │ ├── il.png │ │ ├── in.png │ │ ├── io.png │ │ ├── iq.png │ │ ├── ir.png │ │ ├── is.png │ │ ├── it.png │ │ ├── jm.png │ │ ├── jo.png │ │ ├── jp.png │ │ ├── ke.png │ │ ├── kg.png │ │ ├── kh.png │ │ ├── ki.png │ │ ├── km.png │ │ ├── kn.png │ │ ├── kp.png │ │ ├── kr.png │ │ ├── kw.png │ │ ├── ky.png │ │ ├── kz.png │ │ ├── la.png │ │ ├── lb.png │ │ ├── lc.png │ │ ├── li.png │ │ ├── lk.png │ │ ├── lr.png │ │ ├── ls.png │ │ ├── lt.png │ │ ├── lu.png │ │ ├── lv.png │ │ ├── ly.png │ │ ├── ma.png │ │ ├── mc.png │ │ ├── md.png │ │ ├── me.png │ │ ├── mg.png │ │ ├── mh.png │ │ ├── mk.png │ │ ├── ml.png │ │ ├── mm.png │ │ ├── mn.png │ │ ├── mo.png │ │ ├── mp.png │ │ ├── mq.png │ │ ├── mr.png │ │ ├── ms.png │ │ ├── mt.png │ │ ├── mu.png │ │ ├── mv.png │ │ ├── mw.png │ │ ├── mx.png │ │ ├── my.png │ │ ├── mz.png │ │ ├── na.png │ │ ├── nc.png │ │ ├── ne.png │ │ ├── nf.png │ │ ├── ng.png │ │ ├── ni.png │ │ ├── nl.png │ │ ├── no.png │ │ ├── np.png │ │ ├── nr.png │ │ ├── nu.png │ │ ├── nz.png │ │ ├── om.png │ │ ├── pa.png │ │ ├── pe.png │ │ ├── pf.png │ │ ├── pg.png │ │ ├── ph.png │ │ ├── pk.png │ │ ├── pl.png │ │ ├── pm.png │ │ ├── pn.png │ │ ├── pr.png │ │ ├── ps.png │ │ ├── pt.png │ │ ├── pw.png │ │ ├── py.png │ │ ├── qa.png │ │ ├── re.png │ │ ├── ro.png │ │ ├── rs.png │ │ ├── ru.png │ │ ├── rw.png │ │ ├── sa.png │ │ ├── sb.png │ │ ├── sc.png │ │ ├── scotland.png │ │ ├── sd.png │ │ ├── se.png │ │ ├── sg.png │ │ ├── sh.png │ │ ├── si.png │ │ ├── sj.png │ │ ├── sk.png │ │ ├── sl.png │ │ ├── sm.png │ │ ├── sn.png │ │ ├── so.png │ │ ├── sr.png │ │ ├── st.png │ │ ├── sv.png │ │ ├── sy.png │ │ ├── sz.png │ │ ├── tc.png │ │ ├── td.png │ │ ├── tf.png │ │ ├── tg.png │ │ ├── th.png │ │ ├── tj.png │ │ ├── tk.png │ │ ├── tl.png │ │ ├── tm.png │ │ ├── tn.png │ │ ├── to.png │ │ ├── tr.png │ │ ├── tt.png │ │ ├── tv.png │ │ ├── tw.png │ │ ├── tz.png │ │ ├── ua.png │ │ ├── ug.png │ │ ├── um.png │ │ ├── us.png │ │ ├── uy.png │ │ ├── uz.png │ │ ├── va.png │ │ ├── vc.png │ │ ├── ve.png │ │ ├── vg.png │ │ ├── vi.png │ │ ├── vn.png │ │ ├── vu.png │ │ ├── wales.png │ │ ├── wf.png │ │ ├── ws.png │ │ ├── ye.png │ │ ├── yt.png │ │ ├── za.png │ │ ├── zm.png │ │ └── zw.png │ └── readme.txt ├── mb │ ├── __init__.py │ ├── appinfo.py │ ├── conf.py │ ├── conn.py │ ├── core.py │ ├── crawl.py │ ├── crawlers │ │ ├── __init__.py │ │ ├── ftp.py │ │ ├── http.py │ │ └── rsync.py │ ├── dbmaint.py │ ├── exports.py │ ├── filelist.py │ ├── files.py │ ├── hashes.py │ ├── mberr.py │ ├── mirrorlists.py │ ├── randomfile.py │ ├── testmirror.py │ ├── timestamps.py │ └── util.py ├── meson.build ├── requirements.txt ├── scripts │ ├── mb │ └── mirrorprobe ├── setup.py ├── tests │ ├── conf_tests.py │ ├── data │ │ ├── file1 │ │ └── file1M │ └── hashes_tests.py └── zsyncmodule.c ├── meson.build ├── meson_options.txt ├── mod_autoindex_mb ├── INSTALL ├── NOTICE ├── meson.build ├── mod_autoindex.c.patch └── mod_autoindex_mb.c ├── mod_mirrorbrain ├── meson.build ├── mod_dbd.conf ├── mod_memcache.conf ├── mod_mirrorbrain.c └── mod_mirrorbrain.conf ├── mod_stats ├── README ├── TODO ├── downloadstats │ ├── __init__.py │ ├── manage.py │ ├── settings.py.dist │ ├── stats │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── models.py │ │ ├── urls.py │ │ └── views.py │ └── urls.py ├── mod_dbd.conf ├── mod_stats.c ├── mod_stats.conf └── tools │ ├── dlcount.py │ ├── go-oo.conf │ ├── ooo.conf │ ├── tdf.conf │ └── xbmc.conf ├── sql ├── initialdata-postgresql.sql ├── migrations │ ├── 0001-schema-postgresql-upgrade-2.6-2.7.sql │ ├── 0002-schema-postgresql-move-to-mapping-table.sql │ └── 0003-schema-postgresql-migrate-to-mapping-table.sql └── schema-postgresql.sql ├── t ├── docker │ ├── 01-smoke.sh │ ├── 02-location-setenv.sh │ ├── 02-location.sh │ ├── 03-mb-test.sh │ ├── 04-mirrorprobe.sh │ ├── environs │ │ ├── 01-smoke.sh │ │ ├── 02-maintenance.sh │ │ ├── 07-zsync-full.sh │ │ └── 07-zsync.sh │ └── lib │ │ ├── Dockerfile │ │ ├── Dockerfile.environs │ │ ├── common.sh │ │ ├── dbus.service │ │ ├── init │ │ ├── 3-local-mirrors-location.sh │ │ ├── 3-local-mirrors.sh │ │ └── install-from-source.sh │ │ ├── mirrorbrain-ci-asn.mmdb │ │ ├── mirrorbrain-ci-city.mmdb │ │ ├── mirrorbrain.conf │ │ ├── mod_maxminddb.conf │ │ ├── test-in-container-environs.sh │ │ └── test-in-container-systemd.sh ├── test_docker.sh └── test_environs.sh └── tools ├── Makefile ├── README ├── bdecode ├── create_timestamp ├── meson.build ├── mirrorbrain-ci-asn.pl ├── mirrorbrain-ci-city.pl ├── mirrorprobe-logrotate ├── null-rsync ├── null-rsync.1 ├── null-rsync.1.html ├── null-rsync.1.ronn ├── push2mirrors ├── rsyncinfo ├── rsyncusers ├── rsyncusers.sh └── scanner.pl /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2.1 2 | 3 | jobs: 4 | test_mb: 5 | machine: 6 | image: ubuntu-1604:201903-01 7 | steps: 8 | - checkout 9 | - run: 10 | command: | 11 | pyenv versions 12 | pyenv global 3.7.0 13 | make test_mb 14 | 15 | integration: 16 | machine: 17 | image: ubuntu-1604:201903-01 18 | steps: 19 | - checkout 20 | - run: 21 | command: | 22 | pyenv versions 23 | pyenv global 3.7.0 24 | git clone https://github.com/coryb/osht ../osht 25 | make test_docker PRIVILEGED_TESTS=1 OSHT_LOCATION=$(pwd)/../osht/osht.sh 26 | 27 | environs: 28 | machine: 29 | image: ubuntu-1604:201903-01 30 | steps: 31 | - checkout 32 | - run: 33 | command: | 34 | pyenv versions 35 | pyenv global 3.7.0 36 | git clone https://github.com/coryb/osht ../osht 37 | make test_environs OSHT_LOCATION=$(pwd)/../osht/osht.sh 38 | 39 | workflows: 40 | version: 2.1 41 | test: 42 | jobs: 43 | - test_mb 44 | - integration 45 | - environs 46 | -------------------------------------------------------------------------------- /.git-blame-ignore-revs: -------------------------------------------------------------------------------- 1 | 59a5300542e9ad97621dfcb1fa612269a1ba98ae 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /**/__pycache__/ 2 | /**/*.pyc 3 | mb/build 4 | mod_mirrorbrain/.libs 5 | mod_mirrorbrain/mod_mirrorbrain.la 6 | mod_mirrorbrain/mod_mirrorbrain.lo 7 | mod_mirrorbrain/mod_mirrorbrain.slo 8 | t/docker/lib/src/sql 9 | /**/*.mmdb 10 | /build/ 11 | -------------------------------------------------------------------------------- /FAQ: -------------------------------------------------------------------------------- 1 | The issues listed in this file should be moved into the main documentation. 2 | http://mirrorbrain.org/faq/ has answers to some more general questions. 3 | 4 | 5 | 6 | 7 | Q: How often does the scan take place? What I am wondering is; if I chose to 8 | delete something, how long before the distribution server sees it? I 9 | would not want anyone to get an error when they try to download 10 | something. 11 | 12 | A: Good question. For now, the "best" is to send a note that one is going to 13 | delete something... the master site can then disable redirection to the 14 | mirror, and re-enable it after a scan once they are done... 15 | 16 | A brute-force approach would be to make the server return a 404, or take it 17 | offline for some minutes, because every (e.g.) 5 minutes the redirector 18 | checks with a request to '/' that the host is alive, and disables 19 | redirection if that returns an error. 20 | Yes, too ugly. 21 | 22 | The plan is, to provide admin access to the redirector database, so 23 | mirrors could 24 | * disable redirection themselves, 25 | * trigger a scan, and re-enable it 26 | * maybe even mark parts of the tree as deleted in the database, so 27 | they can safely delete them without further action required. 28 | 29 | This could possibly solved to a satisfactory degree by more frequent 30 | scanning, of random files, basically simulating a (very light) workload. 31 | 32 | 33 | 34 | Q: What does "zrkadlo" mean? 35 | A: mod_zrkadlo was the previous name of mod_mirrorbrain. "zrkadlo" is a word 36 | found when travelling in Slovakia in 2006. 'zrkadlo' is Slovakian for 'mirror', 37 | and comprises about 33% of my Slovakian vocabulary :) 38 | 39 | Here is a nice illustration: http://sk.wikiquote.org/wiki/Zrkadlo 40 | 41 | 42 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | 2 | test_mb: 3 | ( cd mb && PYTHONPATH=. python3 -m unittest discover -p '*tests.py' tests -v ) 4 | 5 | test_docker: 6 | bash t/test_docker.sh 7 | 8 | test_environs: 9 | bash t/test_environs.sh 10 | 11 | build_install: 12 | meson setup build 13 | meson configure --prefix=/usr --datadir=/usr/share -Dmemcached=false -Dinstall-icons=false build 14 | ninja -v -C build 15 | rm -rf build 16 | meson setup build 17 | meson configure --prefix=/usr --datadir=/usr/share -Dmemcached=true -Dinstall-icons=false build 18 | ninja -v -C build 19 | DESTDIR=$(DESTDIR) ninja -v -C build install 20 | -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | This file is relatively obsolete. Issues are tracked in the issue tracker 2 | meanwhile, which can be found here: 3 | http://mirrorbrain.org/issues 4 | 5 | Missing features: 6 | 7 | * mb probefile: follow redirects. Testcase: 8 | http://distro.ibiblio.org/pub/linux/distributions/opensuse/factory/iso/openSUSE-NET-i586-Build0138-Media.iso 9 | which "blindly" redirects to an FTP server (by URL rewriting), but the file isn't there. 10 | see http://diveintopython.org/http_web_services/redirects.html for some ideas/details 11 | 12 | * mirrorprobe: does it deal with FTP urls entered as baseurl (which is meant for HTTP)? 13 | 14 | * make MirrorBrainExcludeNetwork work by prefix match, instead of simple string 15 | prefix comparison using apr_ipsubnet_create() and apr_ipsubnet_test() as 16 | mod_authz_host does? 17 | 18 | * make installation easier, by providing Makefiles, and a setup.py for the Python module. 19 | 20 | 21 | Improvements: 22 | 23 | * rewrite debugLog(r, cfg, ...) as macro which checks for cfg->debug==1 before 24 | caling ebugLog() 25 | 26 | * check whether the maxconnections metalink attribute should be included, so that 27 | aria2c downloads from more than one server even when every server has a distinct 28 | preference value. 29 | 30 | 31 | * ?mirrorlist mirror lists: set Vary header on X-AS? 32 | make it more cacheable? 33 | Cf. http://redbot.org/?uri=http%3A%2F%2Fdownload.opensuse.org%2Frepositories%2FApache%2FFedora_10%2FApache.repo%3Fmirrorlist 34 | Metalinks: 35 | make them less cacheable? 36 | 37 | * check if the Vary header on Accept is added on all requests! 38 | 39 | Further ideas: 40 | 41 | * evaluate if it makes sense to memcache database query results, which may not be 42 | practicable for all objects, but for some particular objects, like those with 43 | mime type application/x-cd-image. They should not be cached for a significant 44 | amount of time, but a few minutes shouldn't be a problem. 45 | As a key for the memcache object, one could use the label of the prepared SQL 46 | statement combined with the filename. 47 | 48 | * stickyness of (large) files to certain mirrors, to make better use of buffer caches? 49 | 50 | * collect statistics on number and volume (cumulated file sizes) of redirects 51 | for mod_status, show per mirror identifier since last restart 52 | 53 | -------------------------------------------------------------------------------- /docs/developer.rst: -------------------------------------------------------------------------------- 1 | 2 | Documentation for Developers 3 | ============================ 4 | 5 | 6 | If you are contributing to the MirrorBrain project, please read this first. 7 | 8 | 9 | Participating in the community 10 | ------------------------------ 11 | 12 | The community exists mainly through mailing lists and a Subversion repository. 13 | To participate: 14 | 15 | Go to http://mirrorbrain.org/communication/ and join the "mirrorbrain", 16 | "mirrorbrain-commits", and "mirrorbrain-announce" mailing lists. The dev list, 17 | "mirrorbrain", is where almost all discussion takes place. All development 18 | questions should go there, though you might want to check the list archives 19 | first. The "mirrorbrain-commits" list receives automated commit emails. 20 | 21 | Get a copy of the latest development sources from 22 | http://svn.mirrorbrain.org/svn/mirrorbrain/trunk/. New development always 23 | takes place on trunk. Bugfixes, enhancements, and new features might be 24 | backported from there to the various release branches. 25 | 26 | How to work on the documentation is described in :ref:`hacking_the_docs`. 27 | 28 | 29 | .. TODO 30 | Hacking on the apache modules 31 | ----------------------------- 32 | 33 | To be written. 34 | 35 | 36 | Writing extensions for the Python module 37 | ---------------------------------------- 38 | 39 | To be written. 40 | 41 | 42 | Debugging notes 43 | --------------- 44 | 45 | To be written. 46 | -------------------------------------------------------------------------------- /docs/index.rst: -------------------------------------------------------------------------------- 1 | .. MirrorBrain documentation master file, created by 2 | sphinx-quickstart on Tue Jul 7 20:18:43 2009. 3 | You can adapt this file completely to your liking, but it should at least 4 | contain the root `toctree` directive. 5 | 6 | Table of Contents 7 | ======================================= 8 | :Release: |version| 9 | :Date: |today| 10 | 11 | .. toctree:: 12 | 13 | intro 14 | faq 15 | platforms 16 | installation/index 17 | mirrors 18 | configuration 19 | usecases 20 | tuning 21 | upgrading 22 | developer 23 | bugs 24 | changes 25 | 26 | .. configuration_reference 27 | 28 | Indices and tables 29 | ================== 30 | 31 | * :ref:`genindex` 32 | * :ref:`modindex` 33 | 34 | -------------------------------------------------------------------------------- /docs/installation/index.rst: -------------------------------------------------------------------------------- 1 | Installation 2 | ============ 3 | 4 | .. toctree:: 5 | :glob: 6 | 7 | prerequirements 8 | source 9 | opensuse 10 | debian 11 | gentoo 12 | mod_asn 13 | initial_config 14 | troubleshooting 15 | 16 | -------------------------------------------------------------------------------- /docs/installation/opensuse.rst: -------------------------------------------------------------------------------- 1 | 2 | 3 | Installation on openSUSE Linux or SLE 4 | ===================================== 5 | 6 | Adding package repositories 7 | --------------------------- 8 | 9 | Add the needed repositories, using the subdirectory that matches your 10 | distribution version: 11 | 12 | * http://download.opensuse.org/repositories/Apache:/MirrorBrain/ 13 | * http://download.opensuse.org/repositories/devel:/languages:/python/ 14 | * http://download.opensuse.org/repositories/server:/database:/postgresql/ 15 | 16 | You can do this via commandline (we are using openSUSE 13.1 in our example):: 17 | 18 | zypper addrepo --refresh http://download.opensuse.org/repositories/Apache:/MirrorBrain/Apache_openSUSE_13.1 Apache:MirrorBrain 19 | zypper addrepo --refresh http://download.opensuse.org/repositories/devel:/languages:/python/openSUSE_13.1 devel:languages:python 20 | zypper addrepo --refresh http://download.opensuse.org/repositories/server:/database:/postgresql/openSUSE_13.1 server:database:postgresql 21 | 22 | 23 | Installing the MirrorBrain packages 24 | ----------------------------------- 25 | 26 | Here's a list of packages needed to have one host running the database and the 27 | redirector: 28 | 29 | apache2 apache2-mod_asn apache2-mod_geoip apache2-mod_mirrorbrain 30 | apache2-mod_form apache2-worker GeoIP libapr-util1-dbd-pgsql 31 | libGeoIP1 mirrorbrain mirrorbrain-scanner mirrorbrain-tools 32 | perl-Config-IniFiles perl-DBD-Pg perl-Digest-MD4 perl-libwww-perl perl-TimeDate 33 | postgresql postgresql-ip4r postgresql-server python-cmdln python-psycopg2 34 | python-SQLObject python-FormEncode 35 | 36 | .. note:: If the web server is set up on a separate host than the database 37 | server, the web server needs only the package libapr-util1-dbd-pgsql 38 | and no other postgresql* packages. 39 | 40 | You can install the packages via the following commandline:: 41 | 42 | zypper install apache2-worker \ 43 | apache2-mod_asn apache2-mod_mirrorbrain \ 44 | postgresql-server postgresql-ip4r \ 45 | mirrorbrain mirrorbrain-scanner mirrorbrain-tools 46 | 47 | The packages not mentioned in this commandline are drawn in via package 48 | dependencies. 49 | 50 | 51 | Next steps 52 | ---------- 53 | 54 | From here, follow on with :ref:`initial_configuration`. 55 | -------------------------------------------------------------------------------- /docs/installation/troubleshooting.rst: -------------------------------------------------------------------------------- 1 | 2 | Troubleshooting 3 | --------------- 4 | 5 | If Apache doesn't start, or anything else seems wrong, make sure to check 6 | Apache's error_log. It usually points into the right direction. 7 | 8 | A general note about Apache configuration which might be in order. With most 9 | config directives, it is important to pay attention where to put them - the 10 | order does not matter, but the context does. There is the concept of directory 11 | contexts and vhost contexts, which must not be overlooked. Things can be 12 | "global", or inside a container, or within a 13 | container. 14 | 15 | This matters because Apache applies the config recursively onto subdirectories, 16 | and for each request it does a "merge" of possibly overlapping directives. 17 | Settings in vhost context are merged only when the server forks, while settings 18 | in directory context are merged for each request. This is also the reason why 19 | some of mod_asn's config directives are programmed to be used in one or the 20 | other context, for performance reasons. 21 | 22 | The install docs you are reading attempt to always point out in which context 23 | the directives belong. 24 | 25 | .. note:: To get help, please subscribe to the mirrorbrain mailing list, see 26 | http://mirrorbrain.org/communication . Questions can be answered 27 | there, and all kind of feedback is appreciated. 28 | 29 | .. note:: Bugs should be reported via http://mirrorbrain.org/issues/ or via the 30 | mailing list. 31 | 32 | -------------------------------------------------------------------------------- /mb/Makefile: -------------------------------------------------------------------------------- 1 | PY_FILES=mb.py mb/*.py 2 | PYC_FILES=$(wildcard *.pyc mb/*.pyc mb/crawlers/__pycache__/ mb/__pycache__/ __pycache__/) 3 | 4 | all: $(PY_FILES) 5 | python3 -m compileall $^ 6 | 7 | clean: $(PYCF_FILES) 8 | ifdef PYC_FILES 9 | rm -rv $(PYC_FILES) 10 | endif 11 | -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ad.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ad.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ae.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ae.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/af.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/af.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ag.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ag.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ai.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ai.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/al.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/al.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/am.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/am.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/an.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/an.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ao.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ao.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ar.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/as.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/as.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/at.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/at.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/au.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/au.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/aw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/aw.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ax.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ax.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/az.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/az.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ba.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ba.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/bb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/bb.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/bd.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/bd.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/be.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/be.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/bf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/bf.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/bg.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/bh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/bh.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/bi.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/bi.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/bj.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/bj.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/bm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/bm.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/bn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/bn.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/bo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/bo.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/br.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/br.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/bs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/bs.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/bt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/bt.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/bv.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/bv.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/bw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/bw.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/by.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/by.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/bz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/bz.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ca.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ca.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/catalonia.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/catalonia.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/cc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/cc.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/cd.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/cd.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/cf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/cf.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/cg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/cg.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ch.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ch.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ci.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ci.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ck.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ck.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/cl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/cl.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/cm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/cm.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/cn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/cn.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/co.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/co.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/cr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/cr.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/cs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/cs.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/cu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/cu.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/cv.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/cv.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/cx.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/cx.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/cy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/cy.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/cz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/cz.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/de.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/de.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/dj.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/dj.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/dk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/dk.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/dm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/dm.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/do.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/do.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/dz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/dz.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ec.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ec.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ee.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ee.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/eg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/eg.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/eh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/eh.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/england.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/england.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/er.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/er.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/es.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/es.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/et.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/et.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/europeanunion.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/europeanunion.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/fam.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/fam.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/fi.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/fi.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/fj.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/fj.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/fk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/fk.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/fm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/fm.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/fo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/fo.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/fr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/fr.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ga.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ga.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/gb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/gb.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/gd.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/gd.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ge.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ge.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/gf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/gf.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/gh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/gh.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/gi.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/gi.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/gl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/gl.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/gm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/gm.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/gn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/gn.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/gp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/gp.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/gq.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/gq.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/gr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/gr.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/gs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/gs.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/gt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/gt.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/gu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/gu.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/gw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/gw.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/gy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/gy.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/hk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/hk.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/hm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/hm.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/hn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/hn.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/hr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/hr.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ht.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ht.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/hu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/hu.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/id.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/id.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ie.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ie.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/il.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/il.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/in.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/in.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/io.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/io.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/iq.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/iq.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ir.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ir.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/is.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/is.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/it.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/it.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/jm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/jm.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/jo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/jo.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/jp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/jp.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ke.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ke.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/kg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/kg.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/kh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/kh.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ki.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ki.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/km.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/km.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/kn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/kn.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/kp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/kp.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/kr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/kr.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/kw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/kw.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ky.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ky.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/kz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/kz.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/la.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/la.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/lb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/lb.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/lc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/lc.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/li.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/li.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/lk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/lk.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/lr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/lr.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ls.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ls.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/lt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/lt.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/lu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/lu.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/lv.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/lv.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ly.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ly.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ma.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ma.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/mc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/mc.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/md.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/md.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/me.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/me.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/mg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/mg.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/mh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/mh.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/mk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/mk.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ml.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ml.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/mm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/mm.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/mn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/mn.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/mo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/mo.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/mp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/mp.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/mq.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/mq.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/mr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/mr.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ms.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ms.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/mt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/mt.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/mu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/mu.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/mv.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/mv.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/mw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/mw.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/mx.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/mx.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/my.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/my.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/mz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/mz.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/na.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/na.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/nc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/nc.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ne.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ne.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/nf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/nf.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ng.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ng.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ni.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ni.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/nl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/nl.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/no.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/no.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/np.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/np.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/nr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/nr.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/nu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/nu.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/nz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/nz.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/om.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/om.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/pa.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/pa.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/pe.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/pe.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/pf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/pf.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/pg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/pg.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ph.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ph.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/pk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/pk.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/pl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/pl.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/pm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/pm.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/pn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/pn.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/pr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/pr.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ps.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ps.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/pt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/pt.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/pw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/pw.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/py.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/py.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/qa.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/qa.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/re.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/re.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ro.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ro.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/rs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/rs.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ru.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ru.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/rw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/rw.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/sa.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/sa.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/sb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/sb.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/sc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/sc.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/scotland.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/scotland.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/sd.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/sd.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/se.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/se.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/sg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/sg.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/sh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/sh.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/si.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/si.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/sj.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/sj.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/sk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/sk.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/sl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/sl.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/sm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/sm.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/sn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/sn.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/so.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/so.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/sr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/sr.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/st.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/st.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/sv.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/sv.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/sy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/sy.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/sz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/sz.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/tc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/tc.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/td.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/td.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/tf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/tf.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/tg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/tg.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/th.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/th.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/tj.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/tj.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/tk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/tk.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/tl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/tl.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/tm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/tm.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/tn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/tn.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/to.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/to.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/tr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/tr.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/tt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/tt.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/tv.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/tv.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/tw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/tw.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/tz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/tz.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ua.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ua.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ug.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ug.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/um.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/um.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/us.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/us.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/uy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/uy.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/uz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/uz.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/va.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/va.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/vc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/vc.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ve.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ve.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/vg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/vg.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/vi.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/vi.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/vn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/vn.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/vu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/vu.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/wales.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/wales.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/wf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/wf.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ws.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ws.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/ye.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/ye.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/yt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/yt.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/za.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/za.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/zm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/zm.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/gif/zw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/gif/zw.gif -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ad.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ae.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ae.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/af.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/af.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ag.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ai.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/al.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/al.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/am.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/am.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/an.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/an.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ao.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ar.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/as.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/at.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/at.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/au.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/au.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/aw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/aw.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ax.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/az.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/az.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ba.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/bb.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/bd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/bd.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/be.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/be.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/bf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/bf.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/bg.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/bh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/bh.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/bi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/bi.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/bj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/bj.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/bm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/bm.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/bn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/bn.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/bo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/bo.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/br.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/br.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/bs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/bs.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/bt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/bt.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/bv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/bv.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/bw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/bw.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/by.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/by.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/bz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/bz.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ca.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/catalonia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/catalonia.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/cc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/cc.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/cd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/cd.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/cf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/cf.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/cg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/cg.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ch.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ci.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ci.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ck.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/cl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/cl.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/cm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/cm.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/cn.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/co.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/co.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/cr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/cr.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/cs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/cs.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/cu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/cu.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/cv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/cv.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/cx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/cx.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/cy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/cy.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/cz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/cz.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/de.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/dj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/dj.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/dk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/dk.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/dm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/dm.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/do.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/do.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/dz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/dz.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ec.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ee.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/eg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/eg.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/eh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/eh.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/england.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/england.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/er.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/er.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/es.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/es.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/et.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/et.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/europeanunion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/europeanunion.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/fam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/fam.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/fi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/fi.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/fj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/fj.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/fk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/fk.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/fm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/fm.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/fo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/fo.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/fr.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ga.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ga.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/gb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/gb.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/gd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/gd.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ge.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/gf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/gf.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/gh.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/gi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/gi.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/gl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/gl.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/gm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/gm.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/gn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/gn.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/gp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/gp.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/gq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/gq.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/gr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/gr.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/gs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/gs.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/gt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/gt.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/gu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/gu.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/gw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/gw.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/gy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/gy.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/hk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/hk.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/hm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/hm.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/hn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/hn.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/hr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/hr.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ht.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ht.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/hu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/hu.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/id.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ie.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/il.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/il.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/in.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/io.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/io.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/iq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/iq.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ir.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/is.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/is.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/it.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/it.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/jm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/jm.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/jo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/jo.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/jp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/jp.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ke.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/kg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/kg.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/kh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/kh.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ki.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ki.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/km.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/km.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/kn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/kn.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/kp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/kp.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/kr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/kr.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/kw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/kw.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ky.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/kz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/kz.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/la.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/la.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/lb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/lb.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/lc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/lc.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/li.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/li.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/lk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/lk.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/lr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/lr.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ls.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/lt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/lt.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/lu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/lu.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/lv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/lv.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ly.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ma.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/mc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/mc.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/md.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/md.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/me.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/me.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/mg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/mg.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/mh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/mh.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/mk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/mk.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ml.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/mm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/mm.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/mn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/mn.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/mo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/mo.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/mp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/mp.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/mq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/mq.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/mr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/mr.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ms.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/mt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/mt.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/mu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/mu.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/mv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/mv.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/mw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/mw.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/mx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/mx.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/my.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/my.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/mz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/mz.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/na.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/na.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/nc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/nc.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ne.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/nf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/nf.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ng.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ni.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/nl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/nl.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/no.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/no.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/np.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/np.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/nr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/nr.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/nu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/nu.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/nz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/nz.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/om.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/om.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/pa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/pa.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/pe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/pe.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/pf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/pf.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/pg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/pg.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ph.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/pk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/pk.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/pl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/pl.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/pm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/pm.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/pn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/pn.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/pr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/pr.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ps.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/pt.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/pw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/pw.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/py.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/py.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/qa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/qa.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/re.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/re.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ro.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/rs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/rs.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ru.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ru.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/rw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/rw.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/sa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/sa.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/sb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/sb.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/sc.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/scotland.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/scotland.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/sd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/sd.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/se.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/se.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/sg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/sg.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/sh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/sh.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/si.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/si.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/sj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/sj.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/sk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/sk.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/sl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/sl.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/sm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/sm.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/sn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/sn.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/so.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/so.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/sr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/sr.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/st.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/st.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/sv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/sv.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/sy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/sy.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/sz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/sz.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/tc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/tc.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/td.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/td.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/tf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/tf.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/tg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/tg.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/th.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/th.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/tj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/tj.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/tk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/tk.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/tl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/tl.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/tm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/tm.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/tn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/tn.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/to.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/to.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/tr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/tr.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/tt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/tt.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/tv.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/tw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/tw.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/tz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/tz.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ua.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ug.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/um.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/um.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/us.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/us.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/uy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/uy.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/uz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/uz.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/va.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/va.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/vc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/vc.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ve.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/vg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/vg.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/vi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/vi.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/vn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/vn.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/vu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/vu.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/wales.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/wales.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/wf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/wf.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ws.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ws.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/ye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/ye.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/yt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/yt.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/za.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/za.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/zm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/zm.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/png/zw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mb/famfamfam_flag_icons/png/zw.png -------------------------------------------------------------------------------- /mb/famfamfam_flag_icons/readme.txt: -------------------------------------------------------------------------------- 1 | Flag icons - http://www.famfamfam.com 2 | 3 | These icons are public domain, and as such are free for any use (attribution appreciated but not required). 4 | 5 | Note that these flags are named using the ISO3166-1 alpha-2 country codes where appropriate. A list of codes can be found at http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 6 | 7 | If you find these icons useful, please donate via paypal to mjames@gmail.com (or click the donate button available at http://www.famfamfam.com/lab/icons/silk) 8 | 9 | Contact: mjames@gmail.com -------------------------------------------------------------------------------- /mb/mb/__init__.py: -------------------------------------------------------------------------------- 1 | __title__ = 'MirrorBrain Tools' 2 | 3 | __copyright__ = 'Novell / SUSE Linux Products GmbH' 4 | __license__ = 'GPL-2.0' 5 | 6 | __url__ = 'https://github.com/opensuse/mirrorbrain/' 7 | 8 | __author__ = 'MirrorBrain project' 9 | __author_email__ = 'info@mirrorbrain.org' 10 | 11 | __version__ = '2.20.0' 12 | -------------------------------------------------------------------------------- /mb/mb/appinfo.py: -------------------------------------------------------------------------------- 1 | import mb 2 | from mb.util import VersionParser 3 | 4 | copyright = mb.__copyright__ 5 | license = mb.__license__ 6 | 7 | url = mb.__url__ 8 | 9 | author_name = mb.__author__ 10 | author_email = mb.__author_email__ 11 | 12 | version = mb.__version__ 13 | parsed_version = VersionParser(version) 14 | -------------------------------------------------------------------------------- /mb/mb/core.py: -------------------------------------------------------------------------------- 1 | import mb.mberr 2 | 3 | 4 | class Directory: 5 | def __init__(self, name): 6 | self.name = name 7 | self.files = [] 8 | 9 | def __str__(self): 10 | # return '%s:\n%s' % (self.name, '\n'.join(self.files)) 11 | return '%-45s: %6s files' % (self.name, int(len(self.files))) 12 | 13 | 14 | def delete_mirror(conn, mirror): 15 | """delete a mirror by specifying its (exact) identifier string)""" 16 | try: 17 | m = conn.Server.select(conn.Server.q.identifier == mirror)[0] 18 | except IndexError: 19 | raise mb.mberr.MirrorNotFoundError(mirror) 20 | 21 | # Delete relates prefix and asn values for the server 22 | conn.Serverpfx._connection.query( 23 | "DELETE from serverpfx where serverid=%d" % m.id) 24 | 25 | conn.Server.delete(m.id) 26 | 27 | 28 | def mirror_get_nfiles(conn, mirror): 29 | query = """SELECT mirr_get_nfiles(%d)""" % (mirror.id) 30 | return conn.Server._connection.queryAll(query)[0] 31 | -------------------------------------------------------------------------------- /mb/mb/crawlers/__init__.py: -------------------------------------------------------------------------------- 1 | __all__ = ['http', 'rsync', 'ftp'] 2 | -------------------------------------------------------------------------------- /mb/mb/filelist.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | def get_filelist(url): 4 | 5 | if url.startswith('rsync'): 6 | import mb.crawlers.rsync 7 | return mb.crawlers.rsync.get_filelist(url) 8 | 9 | elif url.startswith('http'): 10 | import mb.crawlers.http 11 | return mb.crawlers.http.get_filelist(url) 12 | 13 | elif url.startswith('ftp'): 14 | import mb.crawlers.ftp 15 | return mb.crawlers.ftp.get_filelist(url) 16 | 17 | else: 18 | import sys 19 | sys.exit('unknown error... url is \'%s\'' % url) 20 | -------------------------------------------------------------------------------- /mb/mb/mberr.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2008-2010 Peter Poeml. All rights reserved. 2 | # This program is free software; it may be used, copied, modified 3 | # and distributed under the terms of the GNU General Public Licence, 4 | # either version 2, or (at your option) any later version. 5 | 6 | 7 | # exception classes 8 | 9 | class MbBaseError(Exception): 10 | def __init__(self, args=()): 11 | Exception.__init__(self) 12 | self.args = args 13 | 14 | def __str__(self): 15 | return ''.join(self.args) 16 | 17 | 18 | class SignalInterrupt(Exception): 19 | """Exception raised on SIGTERM and SIGHUP.""" 20 | 21 | 22 | class UserAbort(MbBaseError): 23 | """Exception raised when the user requested abortion""" 24 | 25 | 26 | class NoConfigfile(MbBaseError): 27 | """Exception raised when mb's configfile cannot be found""" 28 | 29 | def __init__(self, fname, msg): 30 | MbBaseError.__init__(self) 31 | self.file = fname 32 | self.msg = msg 33 | 34 | 35 | class ConfigError(MbBaseError): 36 | """Exception raised when there is an error in the config file""" 37 | 38 | def __init__(self, msg, fname): 39 | MbBaseError.__init__(self) 40 | self.msg = msg 41 | self.file = fname 42 | 43 | 44 | class MirrorNotFoundError(MbBaseError): 45 | """Raised when a mirror wasn't found in the database""" 46 | 47 | def __init__(self, identifier): 48 | MbBaseError.__init__(self) 49 | self.identifier = identifier 50 | self.msg = 'A mirror with identifier %r does not exist in the database\n' \ 51 | '(full name required for this operation!)' \ 52 | % self.identifier 53 | 54 | 55 | class SocketError(MbBaseError): 56 | """Raised for network errors""" 57 | 58 | def __init__(self, url, msg): 59 | MbBaseError.__init__(self) 60 | self.url = url 61 | self.msg = 'Could not access %r: %r' % (url, msg) 62 | 63 | 64 | class NameOrServiceNotKnown(MbBaseError): 65 | """Raised when a hostname could not be looked up in the DNS""" 66 | 67 | def __init__(self, hostname): 68 | MbBaseError.__init__(self) 69 | self.msg = 'DNS lookup for hostname %r failed: Name or service not known' % hostname 70 | -------------------------------------------------------------------------------- /mb/mb/randomfile.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | import os.path 4 | 5 | # python equivalent for this: 6 | # find /srv/mirrors/openoffice -type f | head -n 1 7 | 8 | # needs local file tree and knowledge of base dir 9 | 10 | 11 | def find_first_file_in_tree(bdir): 12 | files = None 13 | for (path, dirs, files) in os.walk(bdir): 14 | # print (path) 15 | # print (dirs) 16 | # print (files) 17 | # print ("----") 18 | if files: 19 | break 20 | # print ('********') 21 | if files: 22 | found = os.path.join(path, files[0]) 23 | found = found[len(bdir):] 24 | found = found.lstrip('/') 25 | return found 26 | else: 27 | return None 28 | 29 | 30 | if __name__ == '__main__': 31 | 32 | bdir = sys.argv[1] 33 | print(find_first_file_in_tree(bdir)) 34 | -------------------------------------------------------------------------------- /mb/mb/timestamps.py: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | import os 4 | import sys 5 | import time 6 | import tempfile 7 | import pwd 8 | import grp 9 | 10 | explanation = """ 11 | Should you wonder about this file, it supplies timestamps that can be 12 | used to assess possible lags in mirroring. 13 | 14 | These are not used by MirrorBrain for mirror checking, but can help 15 | human beings with verifying a mirrors setup. (Maybe MirrorBrain could/should 16 | make use of these timestamps in the future.) 17 | 18 | In addition, the .timestamp_invisible is supposed to be not visible 19 | through HTTP, FTP or rsync. This serves to ensure that a mirrors's 20 | permission setup is correct. Keeping certain files temporarily 21 | unreadable can be an important step in the process of publishing content. 22 | 23 | Feel free to contact mirrorbrain at mirrorbrain org for more information; 24 | Thanks. 25 | 26 | """ 27 | 28 | 29 | def create(tstamps, user=None, group=None): 30 | 31 | epoch = int(time.time()) 32 | utc = time.strftime("%a, %d %b %Y %H:%M:%S UTC", time.gmtime()) 33 | 34 | if user: 35 | user = pwd.getpwnam(user).pw_uid 36 | else: 37 | user = os.geteuid() 38 | 39 | if group: 40 | group = grp.getgrnam(group).gr_gid 41 | else: 42 | group = os.getegid() 43 | 44 | for tstamp in tstamps: 45 | try: 46 | # we might write in a directory not owned by root 47 | (fd, tmpfilename) = tempfile.mkstemp(prefix=os.path.basename(tstamp), 48 | dir=os.path.dirname(tstamp)) 49 | except OSError as e: 50 | sys.exit(e) 51 | 52 | if tstamp.endswith('invisible'): 53 | mode = 0o0640 54 | else: 55 | mode = 0o0644 56 | 57 | try: 58 | os.chown(tmpfilename, 59 | user, 60 | group) 61 | except OSError as e: 62 | sys.exit(e) 63 | 64 | os.chmod(tmpfilename, mode) 65 | 66 | f = os.fdopen(fd, 'w') 67 | f.write('%s\n%s\n\n' % (epoch, utc)) 68 | f.write(explanation) 69 | f.close() 70 | 71 | os.rename(tmpfilename, tstamp) 72 | -------------------------------------------------------------------------------- /mb/meson.build: -------------------------------------------------------------------------------- 1 | # TODO: we dont have any egg info file. so no pip integration 2 | # TODO: patch mb/__init__.py based on meson.project_version() 3 | 4 | python3 = import('python').find_installation('python3', required: true) 5 | python3_dep = dependency('python3') 6 | 7 | python_module_arch_dir = python3.get_install_dir(pure: false) 8 | python3.extension_module('zsync', 9 | ['zsyncmodule.c'], 10 | install: true, 11 | install_dir: python_module_arch_dir, 12 | dependencies: [python3_dep], 13 | ) 14 | 15 | mb_script_files = [ 16 | 'scripts/mb', 17 | 'scripts/mirrorprobe', 18 | ] 19 | 20 | python_module_lib_dir = python3.get_install_dir(pure: true) 21 | install_subdir(['mb'], 22 | install_dir: python_module_lib_dir, 23 | install_mode: ['rw-r--r--'], 24 | ) 25 | 26 | install_data(mb_script_files, 27 | install_dir: get_option('bindir'), 28 | install_mode: ['rwxr-xr-x'], 29 | ) 30 | 31 | if get_option('install-icons') 32 | install_subdir(['famfamfam_flag_icons'], 33 | install_dir: get_option('datadir') + '/' + meson.project_name(), 34 | install_mode: ['rw-r--r--'], 35 | exclude_files: ['famfamfam_flag_icons/readme.txt'], 36 | ) 37 | endif 38 | -------------------------------------------------------------------------------- /mb/requirements.txt: -------------------------------------------------------------------------------- 1 | geoip2>=3.0.0 2 | SQLObject 3 | psycopg2 4 | FormEncode 5 | cmdln 6 | -------------------------------------------------------------------------------- /mb/setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | from setuptools import setup, Extension 4 | 5 | import mb.appinfo 6 | 7 | requirements = [i.strip() for i in open("requirements.txt").readlines()] 8 | 9 | s = setup( 10 | name='mb', 11 | version=mb.appinfo.version, 12 | description='mb, a tool to maintain the MirrorBrain database', 13 | author=mb.appinfo.author_name, 14 | author_email=mb.appinfo.author_email, 15 | license=mb.appinfo.license, 16 | url=mb.appinfo.url, 17 | 18 | packages=['mb'], 19 | scripts=['scripts/mb', 'scripts/mirrorprobe'], 20 | # We enforce python 3.5 here as that matches the list 21 | # of the geoip2 dependency 22 | python_requires=">=3.5", 23 | install_requires=requirements, 24 | 25 | ext_modules=[Extension('zsync', sources=['zsyncmodule.c'])], 26 | classifiers=[ 27 | "Development Status :: 5 - Production/Stable", 28 | "Environment :: Web Environment", 29 | "Intended Audience :: Developers", 30 | "Intended Audience :: System Administrators", 31 | "License :: OSI Approved :: GPL-2.0", 32 | "Programming Language :: Python :: 3.5", 33 | "Programming Language :: Python :: 3.6", 34 | "Programming Language :: Python :: 3.7", 35 | "Programming Language :: Python :: 3.8", 36 | "Programming Language :: Python", 37 | "Topic :: Internet :: Proxy Servers", 38 | "Topic :: Internet", 39 | ], 40 | ) 41 | -------------------------------------------------------------------------------- /mb/tests/conf_tests.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | 3 | from mb.conf import adjust_zsync_block_size_for_1G 4 | 5 | 6 | class TestConfig(unittest.TestCase): 7 | 8 | def test_adjust_zsync_block_size_for_1G(self): 9 | cases = { 10 | 0: None, 11 | 1023: None, 12 | 1025: 1024, 13 | 3*1024: 2*1024, 14 | 4*1024: 4*1024, 15 | 4*1024+1: 4*1024, 16 | 1024*1024*1024+1: 1024*1024*1024 17 | } 18 | for n in cases: 19 | self.assertEqual(cases[n], adjust_zsync_block_size_for_1G(n), "for input " + repr(n)) 20 | 21 | if __name__ == '__main__': 22 | unittest.main() 23 | -------------------------------------------------------------------------------- /mb/tests/data/file1: -------------------------------------------------------------------------------- 1 | 1 2 | -------------------------------------------------------------------------------- /mb/tests/hashes_tests.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | 3 | import mb.hashes 4 | 5 | 6 | class TestUM(unittest.TestCase): 7 | 8 | def test_HashbagSmall(self): 9 | hb = mb.hashes.HashBag('tests/data/file1') 10 | hb.do_zsync_hashes = False 11 | hb.do_chunked_hashes = True 12 | hb.do_chunked_with_zsync = False 13 | 14 | hb.chunk_size = mb.hashes.DEFAULT_PIECESIZE 15 | hb.fill() 16 | self.assertEqual(hb.dump_raw(), '''piece e5fa44f2b31c1fb553b6021e7360d07d5d91ff5e 17 | md5 b026324c6904b2a9cb4b88d6d61c81d1 18 | sha1 e5fa44f2b31c1fb553b6021e7360d07d5d91ff5e 19 | sha256 4355a46b19d348dc2f57c046f8ef63d4538ebb936000f3c9ee954a27460dd865 20 | btih 90a428db0a7bb9aed0c3df3997ef1882453e9479''') 21 | 22 | def test_Hashbag1M(self): 23 | f = open('tests/data/file1M', 'w') 24 | for i in range(1024*104): 25 | f.write('1') 26 | f.close() 27 | 28 | hb = mb.hashes.HashBag('tests/data/file1M') 29 | hb.do_zsync_hashes = False 30 | hb.do_chunked_hashes = True 31 | hb.do_chunked_with_zsync = False 32 | 33 | hb.chunk_size = mb.hashes.DEFAULT_PIECESIZE 34 | hb.fill() 35 | self.assertEqual(hb.dump_raw(), '''piece 676bfdfe157cf682ea7067d9d8b4f71e560ddd56 36 | md5 169b0ed54597537cb8d841e9a02d7893 37 | sha1 676bfdfe157cf682ea7067d9d8b4f71e560ddd56 38 | sha256 830cd9233e0a2bc65822e0848376a3fc54c1661acc9c743d7e9f09bee9767301 39 | btih 9b299a80ed2048b58f54e4d68ef3436dc6368031''') 40 | 41 | 42 | if __name__ == '__main__': 43 | unittest.main() 44 | -------------------------------------------------------------------------------- /mb/zsyncmodule.c: -------------------------------------------------------------------------------- 1 | /* "rsum" checksumming function from zsync's librcksum/rsum.c, version 0.6.1, 2 | * wrapped into a Python extension 3 | * 4 | * Copyright 2010,2012 Peter Poeml 5 | * 6 | * The checksumming function itself is available under the Artistic License; 7 | * the boilerplate was a nice exercise. 8 | * 9 | * This is something that will be a whole lot slower when programmed in a 10 | * scripting language, thus I wanted this Python extension. */ 11 | 12 | #define PY_SSIZE_T_CLEAN 13 | #include 14 | #include 15 | #include "Python.h" 16 | 17 | static PyObject *zsync_rsum06(PyObject *self, PyObject *args) { 18 | char *data; 19 | Py_ssize_t len; 20 | unsigned short a, b; 21 | unsigned char digest[4]; 22 | memset(digest, 0, sizeof(digest)); 23 | 24 | if (!PyArg_ParseTuple(args, "s#", &data, &len)) 25 | return NULL; 26 | 27 | { 28 | register unsigned short aa = 0; 29 | register unsigned short bb = 0; 30 | while (len) { 31 | register unsigned char c = *data++; 32 | aa += c; 33 | bb += len * c; 34 | len--; 35 | } 36 | a = aa; 37 | b = bb; 38 | } 39 | 40 | a = htons(a); 41 | b = htons(b); 42 | memcpy((void *)&digest, &a, 2); 43 | memcpy((void *)&digest + 2, &b, 2); 44 | 45 | return PyBytes_FromStringAndSize((const char *)digest, sizeof(digest)); 46 | } 47 | 48 | static PyMethodDef zsyncMethods[] = { 49 | {"rsum06", zsync_rsum06, METH_VARARGS, "Calculate a zsync rsum value."}, 50 | {NULL, NULL, 0, NULL} 51 | }; 52 | 53 | static struct PyModuleDef zsyncModule = { 54 | PyModuleDef_HEAD_INIT, 55 | "zsync", 56 | "zsync rsum generation", 57 | -1, 58 | zsyncMethods 59 | }; 60 | 61 | PyMODINIT_FUNC 62 | PyInit_zsync(void) 63 | { 64 | return PyModule_Create(&zsyncModule); 65 | } 66 | 67 | /* vim: set ts=4 sw=4 expandtab smarttab: */ 68 | -------------------------------------------------------------------------------- /meson.build: -------------------------------------------------------------------------------- 1 | project('mirrorbrain', 'c', 2 | version: '2.20.0', 3 | license: 'GPL-2.0', 4 | meson_version: '>= 0.54.0', 5 | ) 6 | 7 | apxs = find_program(['apxs2', 'apxs'], required: true) 8 | apache_libexecdir = run_command(apxs, '-q', 'LIBEXECDIR').stdout().strip() 9 | apache_includedir = run_command(apxs, '-q', 'INCLUDEDIR').stdout().strip() 10 | 11 | apr = dependency('apr-1', required: true) 12 | 13 | subdir('mod_mirrorbrain') 14 | subdir('mod_autoindex_mb') 15 | subdir('mb') 16 | subdir('tools') -------------------------------------------------------------------------------- /meson_options.txt: -------------------------------------------------------------------------------- 1 | option('memcached', type : 'boolean', value : true, 2 | description: 'Build mod_mirrorbrain with memcached support') 3 | 4 | option('install-icons', type : 'boolean', value : true, 5 | description: 'Install FamFam icons (to datadir)') 6 | 7 | option('tools', type : 'boolean', value : false, 8 | description: 'Install additional tools from the tools directory') 9 | -------------------------------------------------------------------------------- /mod_autoindex_mb/INSTALL: -------------------------------------------------------------------------------- 1 | mod_autoindex_mb is a patched mod_autoindex. It adds a little further 2 | capability as index option. 3 | 4 | The following option is provided: 5 | 6 | 7 | IndexOptions Mirrorlist 8 | 9 | 10 | This adds a link named "Details" for each item in the index, which links to 11 | the same item but with ".mirrorlist" appended. 12 | 13 | 14 | The provided mod_autoindex.c.patch shows the differences to the original module. 15 | This patch is *not* meant to be applied to mod_autoindex in the httpd source tree. 16 | It merely serves to illustrate in which way mod_autoindex_mb differs from 17 | mod_autoindex. 18 | 19 | Only one module can be loaded at a time - either mod_autoindex or mod_autoindex_mb. 20 | The two modules can not usefully run side by side, because they share the same 21 | configuration directives. 22 | The module name differs, so that it can be explicit which module is loaded. 23 | 24 | 25 | The module can be compiled like this: 26 | apxs2 -c '-Wc,-Wall -g -D_GNU_SOURCE' mod_autoindex_mb.c 27 | 28 | (I can't remember why I needed the _GNU_SOURCE. It was on Linux and was probably 29 | related to filesystem access. The module should work on any platform, of course.) 30 | 31 | poeml, Tue Jul 14 01:02:15 CEST 2009 32 | -------------------------------------------------------------------------------- /mod_autoindex_mb/NOTICE: -------------------------------------------------------------------------------- 1 | This product includes software developed at 2 | The Apache Software Foundation (http://www.apache.org/). 3 | 4 | Portions of this software were developed at the National Center 5 | for Supercomputing Applications (NCSA) at the University of 6 | Illinois at Urbana-Champaign. 7 | -------------------------------------------------------------------------------- /mod_autoindex_mb/meson.build: -------------------------------------------------------------------------------- 1 | mod_mirrorbrain = shared_module('mod_autoindex_mb', 2 | ['mod_autoindex_mb.c'], 3 | dependencies: [lib_m, apr], 4 | build_rpath: apache_libexecdir, 5 | include_directories: [include_directories(apache_includedir)], 6 | name_prefix: '', 7 | install: true, 8 | install_dir: apache_libexecdir, 9 | ) 10 | -------------------------------------------------------------------------------- /mod_mirrorbrain/meson.build: -------------------------------------------------------------------------------- 1 | lib_m = meson.get_compiler('c').find_library('m', required: true) 2 | 3 | if get_option('memcached') 4 | add_project_arguments('-DWITH_MEMCACHE', language:'c') 5 | endif 6 | 7 | add_project_arguments('-DMOD_MIRRORBRAIN_VER="' + meson.project_version() + '"', language: 'c') 8 | 9 | mod_mirrorbrain = shared_module('mod_mirrorbrain', 10 | ['mod_mirrorbrain.c'], 11 | dependencies: [lib_m, apr], 12 | build_rpath: apache_libexecdir, 13 | include_directories: [include_directories(apache_includedir)], 14 | name_prefix: '', 15 | install: true, 16 | install_dir: apache_libexecdir, 17 | ) 18 | -------------------------------------------------------------------------------- /mod_mirrorbrain/mod_dbd.conf: -------------------------------------------------------------------------------- 1 | # This is configuration is per server. 2 | 3 | DBDriver pgsql 4 | DBDParams "host=localhost user=mb password=foobar dbname=mb connect_timeout=15" 5 | 6 | # applies to threaded MPMs only. Prefork will use one databae connection 7 | # per child. 8 | 9 | DBDMin 0 10 | DBDMax 32 11 | DBDKeep 4 12 | DBDExptime 10 13 | 14 | 15 | -------------------------------------------------------------------------------- /mod_mirrorbrain/mod_memcache.conf: -------------------------------------------------------------------------------- 1 | 2 | MemcacheServer 127.0.0.1:11211 min=0 smax=4 max=16 ttl=600 3 | 4 | -------------------------------------------------------------------------------- /mod_stats/README: -------------------------------------------------------------------------------- 1 | See http://mirrorbrain.org/download-statistics/ for background information on 2 | this module (and possible further plans). 3 | 4 | 5 | The Apache module isn't usable at this time. Instructions how to build it 6 | are here just for archive purposes: 7 | 8 | # packages: 9 | 10 | http://download.opensuse.org/repositories/Apache:/Modules/ 11 | 12 | 13 | # build and install man manually: 14 | 15 | sudo apxs2 -ci -Wc,"-Wall -g" mod_stats.c 16 | 17 | a2enmod dbd 18 | a2enmod stats 19 | 20 | copy mod_dbd.conf to /etc/apache2 and include it server-wide (via 21 | /etc/sysconfig/apache2:APACHE_CONF_INCLUDE_FILES) 22 | 23 | copy contents of mod_stats.conf into your virtual host configuration. 24 | 25 | 26 | 27 | 28 | Archiving and pruning old data from the 'stats_counter' table: 29 | 30 | pg_dump -U mb -t stats_counter > stats_counter-20101004.dump 31 | delete from stats_counter where date between E'2009-01-01 00:00:00' and E'2010-08-31 23:59:59.999999'; 32 | vacuum full stats_counter; 33 | -------------------------------------------------------------------------------- /mod_stats/TODO: -------------------------------------------------------------------------------- 1 | Handle "cmd=deleted" requests, to allow marking packages as deleted. 2 | -------------------------------------------------------------------------------- /mod_stats/downloadstats/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mod_stats/downloadstats/__init__.py -------------------------------------------------------------------------------- /mod_stats/downloadstats/manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | from django.core.management import execute_manager 3 | try: 4 | import settings # Assumed to be in the same directory. 5 | except ImportError: 6 | import sys 7 | sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__) 8 | sys.exit(1) 9 | 10 | if __name__ == "__main__": 11 | execute_manager(settings) 12 | -------------------------------------------------------------------------------- /mod_stats/downloadstats/stats/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/mod_stats/downloadstats/stats/__init__.py -------------------------------------------------------------------------------- /mod_stats/downloadstats/stats/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from downloadstats.stats.models import Counter 4 | 5 | 6 | class CounterAdmin(admin.ModelAdmin): 7 | 8 | list_display = ('product', 'osname', 'version', 'lang', 'country', 'date', 'count') 9 | ordering = ('product', 'osname', 'version', 'lang', 'country') 10 | 11 | search_fields = ('product', 'osname') 12 | list_filter = ('date', 'product', 'osname', 'version', 'lang', 'country') 13 | 14 | 15 | admin.site.register(Counter, CounterAdmin) 16 | -------------------------------------------------------------------------------- /mod_stats/downloadstats/stats/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | 4 | class Counter(models.Model): 5 | 6 | # I'm undecided whether to settle for a "normal" date field, or optimize as 7 | # described in the proposal. 8 | #year = models.PositiveSmallIntegerField() 9 | #day = models.PositiveSmallIntegerField() 10 | date = models.DateField(db_index=True) 11 | 12 | product = models.CharField(max_length=256, db_index=True) 13 | 14 | # all these should probably called attr1, attr2, attr3, ... 15 | osname = models.CharField(max_length=256, db_index=True) 16 | version = models.CharField(max_length=32, db_index=True) 17 | lang = models.CharField(max_length=32, db_index=True) 18 | country = models.CharField(max_length=2, db_index=True) 19 | 20 | count = models.IntegerField(default=1) 21 | 22 | def __unicode__(self): 23 | return u'%s / %s / %s / %s / %s' % (self.product, 24 | self.osname, 25 | self.version, 26 | self.lang, 27 | self.country) 28 | -------------------------------------------------------------------------------- /mod_stats/downloadstats/stats/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls.defaults import * 2 | 3 | urlpatterns = patterns('downloadstats.stats.views', 4 | 5 | (r'^csv/(?P\d{4})(?P\d{2})(?P\d{2})\.csv$', 'stats_csv'), 6 | (r'^csv/(?P\d{4})(?P\d{2})\.csv$', 'stats_csv'), 7 | 8 | (r'^csv/all-countries/(?P\d{4})(?P\d{2})(?P\d{2})\.csv$', 'stats_csv', {'by_country': False}), 9 | (r'^csv/all-countries/(?P\d{4})(?P\d{2})\.csv$', 'stats_csv', {'by_country': False}), 10 | ) 11 | -------------------------------------------------------------------------------- /mod_stats/downloadstats/stats/views.py: -------------------------------------------------------------------------------- 1 | from django.http import HttpResponse 2 | from django.db.models import Sum 3 | 4 | from downloadstats.stats.models import Counter 5 | 6 | 7 | def stats_csv(request, year, month, day=None, by_country=True): 8 | import csv 9 | 10 | response = HttpResponse(mimetype='text/plain') 11 | #response['Content-Disposition'] = 'attachment; filename=%s%s%s.csv' % (year, month, day or '') 12 | 13 | writer = csv.writer(response) 14 | if by_country: 15 | writer.writerow(['Date', 'Product', 'Version', 'OS', 'Language', 'Country', 'Downloads']) 16 | else: 17 | writer.writerow(['Date', 'Product', 'Version', 'OS', 'Language', 'Downloads']) 18 | 19 | products = [i['product'] for i in Counter.objects.values('product').distinct()] 20 | 21 | for product in products: 22 | 23 | s = Counter.objects.filter(product=product) 24 | s = s.filter(date__year=year, date__month=month) 25 | if day: 26 | s = s.filter(date__day=day) 27 | if by_country: 28 | s = s.values('date', 'product', 'version', 'osname', 'lang', 'country') 29 | else: 30 | s = s.values('date', 'product', 'version', 'osname', 'lang') 31 | s = s.annotate(counter=Sum('count')) 32 | s = s.order_by('date', 'product') 33 | 34 | for i in s: 35 | if by_country: 36 | writer.writerow((i['date'], i['product'], i['version'], i['osname'], i['lang'], i['country'], i['counter'])) 37 | else: 38 | writer.writerow((i['date'], i['product'], i['version'], i['osname'], i['lang'], i['counter'])) 39 | 40 | return response 41 | -------------------------------------------------------------------------------- /mod_stats/downloadstats/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls.defaults import * 2 | 3 | # Uncomment the next two lines to enable the admin: 4 | from django.contrib import admin 5 | admin.autodiscover() 6 | 7 | urlpatterns = patterns('', 8 | (r'', include('downloadstats.stats.urls')), 9 | 10 | # Uncomment the admin/doc line below and add 'django.contrib.admindocs' 11 | # to INSTALLED_APPS to enable admin documentation: 12 | # (r'^admin/doc/', include('django.contrib.admindocs.urls')), 13 | 14 | # Uncomment the next line to enable the admin: 15 | (r'^admin/', include(admin.site.urls)), 16 | ) 17 | -------------------------------------------------------------------------------- /mod_stats/mod_dbd.conf: -------------------------------------------------------------------------------- 1 | # This is configuration is per server. 2 | 3 | DBDriver mysql 4 | DBDParams "host=host, user=user, pass=pass, dbname=dbname" 5 | -------------------------------------------------------------------------------- /mod_stats/tools/xbmc.conf: -------------------------------------------------------------------------------- 1 | StatsLogMask "^(\S+).+\[(.*?)\] \"GET (\S*) HTTP.*\" (200|302) [^\"]+ \"([^\"]*)\" \"([^\"]*)\".*" 2 | StatsDupWindow 200 3 | StatsIgnoreMask ".*\?.*" 4 | StatsIgnoreMask "^.*\.(txt|list|html)$" 5 | # strip prefixed protocol (normally only sent to proxies, but sometimes occurs in the wild) 6 | StatsPrefilter "^http://[^/]+/" "" 7 | # remove duplicated slashes 8 | StatsPrefilter "/+" "/" 9 | # strip appended .metalink suffix 10 | StatsPrefilter "\.metalink$" "" 11 | 12 | # dharma-pre/metadata.artists.freebase.com/metadata.artists.freebase.com-1.0.6.zip 13 | # $osname/$product/$product-$version.zip 14 | 15 | StatsCount "^/addons/([^/]+)/([^/]+)/\2-([0-9.]+)\.zip$" "prod: \2 os: \1 version: \3 lang: --" 16 | 17 | 18 | StatsPostfilter "(prod|os|version|lang): " "" 19 | # FIXME: we didn't need to add those words in the first place; not needed at all. 20 | # they were just useful for orientation. 21 | 22 | 23 | # vim: ft=apache ai ts=4 sw=4 smarttab expandtab smarttab 24 | -------------------------------------------------------------------------------- /sql/migrations/0003-schema-postgresql-migrate-to-mapping-table.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO files ( 2 | id, 3 | path, 4 | mtime, 5 | size, 6 | md5, 7 | sha1, 8 | sha256, 9 | sha1piecesize, 10 | sha1pieces, 11 | btih, 12 | pgp, 13 | zblocksize, 14 | zhashlens, 15 | zsums 16 | ) 17 | OVERRIDING SYSTEM VALUE 18 | SELECT 19 | filearr.id, 20 | filearr.path, 21 | to_timestamp(hash.mtime) as mtime, 22 | hash.size::bigint, 23 | hash.md5::bytea, 24 | hash.sha1::bytea, 25 | hash.sha256::bytea, 26 | hash.sha1piecesize::integer, 27 | hash.sha1pieces::bytea, 28 | hash.btih::bytea, 29 | hash.pgp::text, 30 | hash.zblocksize::integer, 31 | hash.zhashlens::character varying(8), 32 | hash.zsums::bytea 33 | FROM filearr 34 | LEFT JOIN hash ON hash.file_id = filearr.id 35 | ORDER BY filearr.id; 36 | 37 | -- TODO: documentation that this needs the intarray extension 38 | INSERT INTO server_files ( 39 | file_id, 40 | server_id 41 | ) 42 | SELECT 43 | id AS file_id, 44 | unnest(mirrors & (select array_agg(id) from server)) AS server_id 45 | FROM filearr 46 | ORDER BY id; 47 | -------------------------------------------------------------------------------- /t/docker/01-smoke.sh: -------------------------------------------------------------------------------- 1 | #!lib/test-in-container-systemd.sh lib/init/3-local-mirrors.sh 2 | 3 | set -ex 4 | source lib/common.sh 5 | 6 | curl -v 127.0.0.1:80/downloads/folder1/file1.dat 7 | 8 | tail /var/log/apache2/MAIN-error_log 9 | 10 | grep 'Chose server mirror' /var/log/apache2/MAIN-error_log 11 | 12 | -------------------------------------------------------------------------------- /t/docker/02-location-setenv.sh: -------------------------------------------------------------------------------- 1 | #!lib/test-in-container-systemd.sh lib/init/3-local-mirrors-location.sh 2 | 3 | set -ex 4 | source lib/common.sh 5 | 6 | sudo zypper -n install apache2-mod_security2 7 | systemctl stop apache2 8 | a2enmod unique_id 9 | a2enmod security2 10 | sed -i '/ServerSignature On/a SecRuleEngine On\nSecRule ARGS:mmdb_addr . "phase:1,t:none,id:32768,log,setenv:'"'"'MMDB_ADDR=%{MATCHED_VAR}'"'" /etc/apache2/vhosts.d/MAIN.conf 11 | systemctl start apache2 12 | 13 | curl --interface 127.0.0.3 127.0.0.1:80/downloads/folder1/file1.dat 14 | 15 | tail /var/log/apache2/MAIN-error_log 16 | 17 | grep 'Chose server mirrorEU' /var/log/apache2/MAIN-error_log 18 | grep -qv 'Chose server mirrorNA' /var/log/apache2/MAIN-error_log 19 | grep -qv 'Chose server mirrorAS' /var/log/apache2/MAIN-error_log 20 | 21 | curl --interface 127.0.0.2 127.0.0.1:80/downloads/folder1/file1.dat 22 | tail /var/log/apache2/MAIN-error_log 23 | grep 'Chose server mirrorNA' /var/log/apache2/MAIN-error_log 24 | 25 | # make sure client address is rewritten with GET parameters according to 26 | curl --interface 127.0.0.2 127.0.0.1:80/downloads/folder1/file1.dat?mmdb_addr=127.0.0.4 27 | tail /var/log/apache2/MAIN-error_log 28 | grep 'clientip: 127.0.0.4' /var/log/apache2/MAIN-error_log 29 | grep 'Chose server mirrorAS' /var/log/apache2/MAIN-error_log 30 | -------------------------------------------------------------------------------- /t/docker/02-location.sh: -------------------------------------------------------------------------------- 1 | #!lib/test-in-container-systemd.sh lib/init/3-local-mirrors-location.sh 2 | 3 | set -ex 4 | source lib/common.sh 5 | 6 | curl --interface 127.0.0.3 127.0.0.1:80/downloads/folder1/file1.dat 7 | 8 | tail /var/log/apache2/MAIN-error_log 9 | 10 | grep 'Chose server mirrorEU' /var/log/apache2/MAIN-error_log 11 | grep -qv 'Chose server mirrorNA' /var/log/apache2/MAIN-error_log 12 | grep -qv 'Chose server mirrorAS' /var/log/apache2/MAIN-error_log 13 | 14 | curl --interface 127.0.0.2 127.0.0.1:80/downloads/folder1/file1.dat 15 | tail /var/log/apache2/MAIN-error_log 16 | grep 'Chose server mirrorNA' /var/log/apache2/MAIN-error_log 17 | 18 | curl --interface 127.0.0.2 127.0.0.1:80/downloads/folder1/file1.dat.mirrorlist | grep 'http://maps.google.com/maps/dir//37.750999,-97.821999/49.417000,8.700000/34.771999,113.726997/37.750999,-97.821999' 19 | -------------------------------------------------------------------------------- /t/docker/03-mb-test.sh: -------------------------------------------------------------------------------- 1 | #!lib/test-in-container-systemd.sh lib/init/3-local-mirrors-location.sh 2 | 3 | set -ex 4 | source lib/common.sh 5 | 6 | curl --interface 127.0.0.3 127.0.0.1:80/downloads/folder1/file1.dat 7 | 8 | tail /var/log/apache2/MAIN-error_log 9 | 10 | grep 'Chose server mirrorEU' /var/log/apache2/MAIN-error_log 11 | grep -qv 'Chose server mirrorNA' /var/log/apache2/MAIN-error_log 12 | grep -qv 'Chose server mirrorAS' /var/log/apache2/MAIN-error_log 13 | 14 | curl --interface 127.0.0.2 127.0.0.1:80/downloads/folder1/file1.dat 15 | tail /var/log/apache2/MAIN-error_log 16 | grep 'Chose server mirrorNA' /var/log/apache2/MAIN-error_log 17 | 18 | curl -s http://127.0.0.2 19 | 20 | sudo service apache2 stop 21 | 22 | curl http://127.0.0.2 || : 23 | 24 | mb test mirrorNA || : 25 | 26 | sudo service apache2 start 27 | 28 | mb test mirrorNA 29 | -------------------------------------------------------------------------------- /t/docker/04-mirrorprobe.sh: -------------------------------------------------------------------------------- 1 | #!lib/test-in-container-systemd.sh lib/init/3-local-mirrors-location.sh 2 | 3 | set -ex 4 | source lib/common.sh 5 | 6 | curl --interface 127.0.0.3 127.0.0.1:80/downloads/folder1/file1.dat 7 | 8 | tail /var/log/apache2/MAIN-error_log 9 | 10 | grep 'Chose server mirrorEU' /var/log/apache2/MAIN-error_log 11 | grep -qv 'Chose server mirrorNA' /var/log/apache2/MAIN-error_log 12 | grep -qv 'Chose server mirrorAS' /var/log/apache2/MAIN-error_log 13 | 14 | curl --interface 127.0.0.2 127.0.0.1:80/downloads/folder1/file1.dat 15 | tail /var/log/apache2/MAIN-error_log 16 | grep 'Chose server mirrorNA' /var/log/apache2/MAIN-error_log 17 | 18 | curl -s http://127.0.0.2 19 | 20 | sudo service apache2 stop 21 | 22 | curl http://127.0.0.2 || : 23 | 24 | mirrorprobe -L DEBUG mirrorNA || : 25 | 26 | mv /var/log/apache2/MAIN-error_log /var/log/apache2/MAIN-error_log.1 27 | 28 | sudo service apache2 start 29 | 30 | curl --interface 127.0.0.2 127.0.0.1:80/downloads/folder1/file1.dat 31 | grep 'Chose server ' /var/log/apache2/MAIN-error_log 32 | grep -v 'Chose server mirrorNA' /var/log/apache2/MAIN-error_log 33 | 34 | # enable back 35 | mirrorprobe -L DEBUG -e mirrorNA 36 | curl --interface 127.0.0.2 127.0.0.1:80/downloads/folder1/file1.dat 37 | grep 'Chose server mirrorNA' /var/log/apache2/MAIN-error_log || { 38 | cat /var/log/mirrorbrain/mirrorprobe.log 39 | exit 1 40 | } 41 | -------------------------------------------------------------------------------- /t/docker/environs/01-smoke.sh: -------------------------------------------------------------------------------- 1 | #!../lib/test-in-container-environs.sh 2 | set -ex 3 | 4 | [ -d mirrorbrain ] 5 | 6 | ./environ.sh pg9-system2 7 | ./environ.sh ap9-system2 8 | ./environ.sh ap8-system2 9 | ./environ.sh ap7-system2 10 | ./environ.sh mb9 $(pwd)/mirrorbrain 11 | 12 | pg9*/start.sh 13 | 14 | mb9*/configure_db.sh pg9 15 | mb9*/configure_apache.sh ap9 16 | 17 | ap9=$(ls -d ap9*) 18 | 19 | # populate test data 20 | for x in ap7 ap8 ap9; do 21 | xx=$(ls -d $x*/) 22 | mkdir -p $xx/dt/downloads/{folder1,folder2,folder3} 23 | echo $xx/dt/downloads/{folder1,folder2,folder3}/{file1,file2}.dat | xargs -n 1 touch 24 | done 25 | 26 | mb9*/mb.sh makehashes -v $PWD/ap9-system2/dt 27 | 28 | ap9*/start.sh 29 | 30 | mb9*/mb.sh makehashes -v $PWD/ap9-system2/dt 31 | 32 | ap9*/curl.sh downloads/ | grep folder1 33 | 34 | for x in ap7 ap8; do 35 | $x*/start.sh 36 | $x*/status.sh 37 | mb9*/mb.sh new $x --http http://"$($x-system2/print_address.sh)" --region NA --country us 38 | mb9*/mb.sh scan --enable $x 39 | $x-system2/curl.sh | grep downloads 40 | done 41 | 42 | ap9*/curl.sh /downloads/folder1/file1.dat 43 | 44 | tail ap9*/dt/error_log | grep 'Chose server ' 45 | -------------------------------------------------------------------------------- /t/docker/environs/02-maintenance.sh: -------------------------------------------------------------------------------- 1 | #!../lib/test-in-container-environs.sh 2 | set -ex 3 | 4 | [ -d mirrorbrain ] 5 | 6 | ./environ.sh pg9-system2 7 | ./environ.sh ap9-system2 8 | ./environ.sh ap8-system2 9 | ./environ.sh ap7-system2 10 | ./environ.sh mb9 $(pwd)/mirrorbrain 11 | 12 | pg9*/start.sh 13 | 14 | mb9*/configure_db.sh pg9 15 | mb9*/configure_apache.sh ap9 16 | 17 | ap9=$(ls -d ap9*) 18 | 19 | # populate test data 20 | for x in ap7 ap8 ap9; do 21 | xx=$(ls -d $x*/) 22 | mkdir -p $xx/dt/downloads/{folder1,folder2,folder3} 23 | echo $xx/dt/downloads/{folder1,folder2,folder3}/{file1,file2}.dat | xargs -n 1 touch 24 | done 25 | 26 | mb9*/mb.sh learnfiles $PWD/ap9-system2/dt 27 | 28 | test 6 == $(pg9*/sql.sh -t -c 'select count(*) from files' mirrorbrain) 29 | 30 | mkdir -p ap9-system2/hashes 31 | 32 | mb9*/mb.sh makehashes $PWD/ap9-system2/dt/ 33 | 34 | ap9*/start.sh 35 | ap9*/curl.sh downloads/ | grep folder1 36 | 37 | for x in ap7 ap8; do 38 | $x*/start.sh 39 | $x*/status.sh 40 | mb9*/mb.sh new $x --http http://"$($x-system2/print_address.sh)" --region NA --country us 41 | mb9*/mb.sh scan --enable $x 42 | $x-system2/curl.sh | grep downloads 43 | done 44 | 45 | ap9*/curl.sh /downloads/folder1/file1.dat 46 | 47 | tail ap9*/dt/error_log | grep 'Chose server ' 48 | 49 | test 3 == $(mb9/mb.sh file ls *file1.dat | grep ap7 | wc -l) 50 | test 3 == $(mb9/mb.sh dirs ap8 | grep downloads | wc -l) 51 | 52 | for x in ap7 ap8 ap9; do 53 | xx=$(ls -d $x*/) 54 | rm -r $xx/dt/downloads/folder2 55 | [ $x == ap9 ] || mb9*/mb.sh scan $x 56 | done 57 | 58 | test 2 == $(mb9/mb.sh file ls *file1.dat | grep ap7 | wc -l) 59 | test 2 == $(mb9/mb.sh dirs ap8 | grep downloads | wc -l) 60 | 61 | mv ap9*/dt/*log ap9*/ 62 | mb9*/mb.sh makehashes $PWD/ap9-system2/dt/ 63 | 64 | mb9*/mb.sh db vacuum -n | grep 'Stale files' | grep '\b2\b' 65 | mb9*/mb.sh db vacuum | grep 'Done.' 66 | mb9/mb.sh db vacuum -n | grep 'Stale files' | grep '\b0\b' 67 | 68 | rm ap7-system2/dt/downloads/folder3/file1.dat 69 | mb9/mb.sh scan ap7 70 | test 1 == $(mb9/mb.sh file ls *file1.dat | grep ap7 | wc -l) 71 | test ap7 == $(mb9/mb.sh dirs --missing downloads/folder3/file1.dat) 72 | test ap8 == $(mb9/mb.sh dirs -d downloads/folder3/file1.dat) 73 | test 2 == $(mb9/mb.sh dirs -d downloads/folder1/file1.dat | wc -l) 74 | -------------------------------------------------------------------------------- /t/docker/environs/07-zsync-full.sh: -------------------------------------------------------------------------------- 1 | #!../lib/test-in-container-environs.sh 2 | set -ex 3 | 4 | ./environ.sh pg9-system2 5 | ./environ.sh ap9-system2 6 | ./environ.sh ap8-system2 7 | ./environ.sh ap7-system2 8 | ./environ.sh mb9 $(pwd)/mirrorbrain 9 | 10 | pg9*/start.sh 11 | 12 | mb9*/configure_db.sh pg9 13 | mb9*/configure_apache.sh ap9 14 | 15 | size=${BIG_FILE_SIZE:-100M} 16 | file=.product/mb/.data/file$size 17 | 18 | mkdir -p .product/mb/.data 19 | [ -f $file ] || ! which fallocate || fallocate -l $size $file 20 | [ -f $file ] || dd if=/dev/zero of=./$file bs=4K iflag=fullblock,count_bytes count=$size 21 | 22 | sed -i '/dbname = mirrorbrain/a zsync_hashes = 1' mb9*/mirrorbrain.conf 23 | 24 | ap9=$(ls -d ap9*) 25 | 26 | # populate test data 27 | for x in ap7 ap8 ap9; do 28 | xx=$(ls -d $x*/) 29 | mkdir -p $xx/dt/downloads/ 30 | # add the file only to one mirror 31 | [ $x == ap7 ] || ln $file $xx/dt/downloads/ 32 | done 33 | 34 | mb9*/mb.sh makehashes -v $PWD/ap9-system2/dt/ 35 | 36 | for x in ap7 ap8; do 37 | $x*/start.sh 38 | $x*/status.sh 39 | mb9*/mb.sh new $x --http http://"$($x-system2/print_address.sh)" --region NA --country us 40 | mb9*/mb.sh scan --enable $x 41 | done 42 | 43 | ap9*/start.sh 44 | checksum=$(ap9*/curl.sh downloads/file$size.zsync | tail -n +4 | md5sum -) 45 | # compare to checksum, which should be correct one for the file 46 | [ $size != 100M ] || test "$checksum" == "d0e0f1362080c568137254d190ba2421 -" 47 | 48 | tail ap9*/dt/error_log | grep 'Found 1 mirror' 49 | -------------------------------------------------------------------------------- /t/docker/environs/07-zsync.sh: -------------------------------------------------------------------------------- 1 | #!../lib/test-in-container-environs.sh 2 | set -ex 3 | 4 | ./environ.sh mb9 $(pwd)/mirrorbrain 5 | ./environ.sh pg9-system2 6 | 7 | pg9*/start.sh 8 | 9 | mb9*/configure_db.sh pg9 10 | 11 | size=${BIG_FILE_SIZE:-100M} 12 | file=.product/mb/.data/file$size 13 | 14 | mkdir -p .product/mb/.data 15 | [ -f $file ] || ! which fallocate || fallocate -l $size $file 16 | [ -f $file ] || dd if=/dev/zero of=./$file bs=4K iflag=fullblock,count_bytes count=$size 17 | 18 | mkdir -p mb9/downloads 19 | 20 | ln $file mb9/downloads/ 21 | 22 | sed -i '/dbname = mirrorbrain/a zsync_hashes = 1' mb9*/mirrorbrain.conf 23 | 24 | mb9*/mb.sh makehashes $PWD/mb9/downloads 25 | # test with checksum of zsums receved for 100M empty file with 2.19.3 26 | test $file != .product/mb/.data/file100M || test 336c175872f11712eaa1f7a97d8942ab == $(pg9*/sql.sh -t -c "select md5(zsums) from files" mirrorbrain) 27 | pg9*/sql.sh -c "select path, sha1, length(sha1pieces) as sha1pieceslen, zblocksize, zhashlens, length(zsums) as zsumslen from files" mirrorbrain 28 | 29 | mb9*/mb.sh makehashes -v --zsync-mask '.*' $PWD/mb9/downloads 30 | pg9*/sql.sh -c "select path, sha1, length(sha1pieces) as sha1pieceslen, zblocksize, zhashlens, length(zsums) as zsumslen from files" mirrorbrain 31 | -------------------------------------------------------------------------------- /t/docker/lib/Dockerfile.environs: -------------------------------------------------------------------------------- 1 | #!BuildTag: serviced 2 | FROM opensuse/leap:15.1 3 | ENV container docker 4 | 5 | ENV LANG en_US.UTF-8 6 | 7 | RUN zypper -n install git-core wget tar m4 8 | WORKDIR /opt 9 | RUN git clone https://github.com/andrii-suse/environs 10 | # when we build image we don't know user id who will use it 11 | # so make folder writeble for everyone inside container 12 | RUN chmod -R o+w environs 13 | 14 | WORKDIR /opt/environs 15 | RUN bash -x .product/mb/branch/.install_dependencies.sh 16 | 17 | ENTRYPOINT ["/usr/bin/tail", "-f", "/dev/null"] 18 | -------------------------------------------------------------------------------- /t/docker/lib/common.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/t/docker/lib/common.sh -------------------------------------------------------------------------------- /t/docker/lib/dbus.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=D-Bus System Message Bus 3 | Requires=dbus.socket 4 | After=syslog.target 5 | 6 | [Service] 7 | PIDFile=/var/run/messagebus.pid 8 | ExecStartPre=/bin/mkdir -p /var/run/dbus 9 | ExecStartPre=/bin/chmod g+w /var/run/ /var/run/dbus/ 10 | ExecStart=/bin/dbus-daemon --system --fork 11 | ExecReload=/bin/dbus-send --print-reply --system --type=method_call --dest=org.freedesktop.DBus / org.freedesktop.DBus.ReloadConfig 12 | ExecStopPost=/bin/rm -f /var/run/messagebus.pid 13 | #OOMScoreAdjust=-900 14 | User=dbus 15 | Group=root 16 | PermissionsStartOnly=true 17 | -------------------------------------------------------------------------------- /t/docker/lib/init/3-local-mirrors-location.sh: -------------------------------------------------------------------------------- 1 | thisdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" 2 | 3 | . $thisdir/install-from-source.sh 4 | 5 | setup_vhost1() { 6 | local site=$1 7 | local offset=$2 8 | local continent=$3 9 | local country=$4 10 | cp /etc/apache2/vhosts.d/vhost.template /etc/apache2/vhosts.d/$site.conf 11 | sed -i "s,dummy-host.example.com,$site," /etc/apache2/vhosts.d/$site.conf 12 | sed -i "s,127.0.0.1,127.0.0.$offset," /etc/apache2/vhosts.d/$site.conf 13 | if [ "$port" == 80 ]; then 14 | sed -i "/ServerSignature On/a DBDriver pgsql\nDBDParams \"host=localhost user=mirrorbrain password=mirrorbrain dbname=mirrorbrain connect_timeout=15\"\nMirrorBrainMetalinkPublisher '$site' http://127.0.0.1" /etc/apache2/vhosts.d/$site.conf 15 | sed -i '/Directory "\/srv\/www\/vhosts\/MAIN"/a MirrorBrainEngine On\n MirrorBrainDebug On\n FormGET On\n MirrorBrainHandleHEADRequestLocally Off\n MirrorBrainMinSize 0\n MirrorBrainExcludeUserAgent rpm\/4.4.2*\n MirrorBrainExcludeUserAgent *APT-HTTP*\n MirrorBrainExcludeMimeType application\/pgp-keys' /etc/apache2/vhosts.d/$site.conf 16 | mkdir -p /srv/hashes/srv/www/vhosts/$site/downloads/ 17 | chown -R mirrorbrain:mirrorbrain srv/hashes/srv/www/vhosts/$site/downloads/ 18 | fi 19 | 20 | mkdir -p /srv/www/vhosts/$site/downloads/{folder1,folder2,folder3} 21 | echo /srv/www/vhosts/$site/downloads/{folder1,folder2,folder3}/{file1,file2}.dat | xargs -n 1 touch 22 | } 23 | 24 | setup_vhost1 mirrorNA 2 NA us 25 | setup_vhost1 mirrorEU 3 EU de 26 | setup_vhost1 mirrorAS 4 AS cn 27 | 28 | systemctl start apache2 29 | 30 | curl -s 127.0.0.1 | grep downloads 31 | 32 | mb new mirrorNA --http http://127.0.0.2 --rsync rsync://127.0.0.2/downloads --country us --region NA 33 | mb scan --enable mirrorNA 34 | mb new mirrorEU --http http://127.0.0.3 --rsync rsync://127.0.0.3/downloads --country de --region EU 35 | mb scan --enable mirrorEU 36 | mb new mirrorAS --http http://127.0.0.4 --rsync rsync://127.0.0.4/downloads --country cn --region AS 37 | mb scan --enable mirrorAS 38 | -------------------------------------------------------------------------------- /t/docker/lib/init/3-local-mirrors.sh: -------------------------------------------------------------------------------- 1 | thisdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" 2 | 3 | . $thisdir/install-from-source.sh 4 | 5 | mirrors='mirrorA mirrorB mirrorC mirrorD mirrorE mirrorF' 6 | 7 | for site in $mirrors; do 8 | setup_vhost $site $((port++)) 9 | done 10 | 11 | systemctl start apache2 12 | 13 | port=80 14 | curl -s 127.0.0.1:80 | grep downloads 15 | 16 | for site in $mirrors; do 17 | : $((port++)) 18 | mb new $site --http http://127.0.0.1:$port --rsync rsync://127.0.0.1/$site/downloads --region NA --country us 19 | mb scan --enable $site 20 | curl -s 127.0.0.1:$port | grep downloads 21 | done 22 | -------------------------------------------------------------------------------- /t/docker/lib/init/install-from-source.sh: -------------------------------------------------------------------------------- 1 | 2 | ( 3 | cd /opt/project 4 | # install -m 755 tools/geoiplookup_continent /usr/bin/geoiplookup_continent 5 | # install -m 755 tools/geoiplookup_city /usr/bin/geoiplookup_city 6 | # install -m 755 tools/geoip-lite-update /usr/bin/geoip-lite-update 7 | # install -m 755 tools/null-rsync /usr/bin/null-rsync 8 | install -m 755 tools/scanner.pl /usr/bin/scanner 9 | 10 | cd /opt/project/mod_mirrorbrain 11 | apxs -cia -lm mod_mirrorbrain.c 12 | ) 13 | 14 | ( 15 | rm /usr/bin/mb 16 | rm -f /usr/lib64/python*/site-packages/mb/* 17 | cd /opt/project/mb && python3 setup.py install 18 | ) 19 | 20 | systemctl start postgresql 21 | 22 | port=80 23 | 24 | setup_vhost() { 25 | local site=$1 26 | local port=$2 27 | cp /etc/apache2/vhosts.d/vhost.template /etc/apache2/vhosts.d/$site.conf 28 | sed -i "s,dummy-host.example.com,$site," /etc/apache2/vhosts.d/$site.conf 29 | sed -i "s,:80,:$port," /etc/apache2/vhosts.d/$site.conf 30 | if [ "$port" != 80 ]; then 31 | echo Listen $port >> /etc/apache2/listen.conf 32 | else 33 | sed -i "/ServerSignature On/a DBDriver pgsql\nDBDParams \"host=localhost user=mirrorbrain password=mirrorbrain dbname=mirrorbrain connect_timeout=15\"\nMirrorBrainMetalinkPublisher '$site' http://127.0.0.1" /etc/apache2/vhosts.d/$site.conf 34 | sed -i '/Directory "\/srv\/www\/vhosts\/MAIN"/a MirrorBrainEngine On\n MirrorBrainDebug On\n FormGET On\n MirrorBrainHandleHEADRequestLocally Off\n MirrorBrainMinSize 0\n MirrorBrainExcludeUserAgent rpm\/4.4.2*\n MirrorBrainExcludeUserAgent *APT-HTTP*\n MirrorBrainExcludeMimeType application\/pgp-keys' /etc/apache2/vhosts.d/$site.conf 35 | mkdir -p /srv/hashes/srv/www/vhosts/$site/downloads/ 36 | chown -R mirrorbrain:mirrorbrain srv/hashes/srv/www/vhosts/$site/downloads/ 37 | fi 38 | 39 | mkdir -p /srv/www/vhosts/$site/downloads/{folder1,folder2,folder3} 40 | echo /srv/www/vhosts/$site/downloads/{folder1,folder2,folder3}/{file1,file2}.dat | xargs -n 1 touch 41 | } 42 | 43 | setup_vhost MAIN $((port++)) 44 | 45 | a2enmod form 46 | a2enmod maxminddb 47 | a2enmod dbd 48 | # a2enmod mirrorbrain 49 | 50 | mb makehashes /srv/www/vhosts/MAIN 51 | -------------------------------------------------------------------------------- /t/docker/lib/mirrorbrain-ci-asn.mmdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/t/docker/lib/mirrorbrain-ci-asn.mmdb -------------------------------------------------------------------------------- /t/docker/lib/mirrorbrain-ci-city.mmdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openSUSE/mirrorbrain/c5fcf05bad171d6c59f5ca47e988372d1ab4f0c2/t/docker/lib/mirrorbrain-ci-city.mmdb -------------------------------------------------------------------------------- /t/docker/lib/mirrorbrain.conf: -------------------------------------------------------------------------------- 1 | [general] 2 | instances = main 3 | 4 | [main] 5 | dbuser = mirrorbrain 6 | dbpass = mirrorbrain 7 | dbdriver = postgresql 8 | dbhost = 127.0.0.1 9 | # optional: dbport = ... 10 | dbname = mirrorbrain 11 | 12 | [mirrorprobe] 13 | # logfile = /var/log/mirrorbrain/mirrorprobe.log 14 | # loglevel = INFO 15 | -------------------------------------------------------------------------------- /t/docker/lib/mod_maxminddb.conf: -------------------------------------------------------------------------------- 1 | 2 | MaxMindDBEnable On 3 | 4 | # ### 5 | # specify database locations 6 | # 7 | # MaxMindDBFile COUNTRY_DB /var/lib/GeoIP/GeoLite2-Country.mmdb 8 | MaxMindDBFile CITY_DB /var/lib/GeoIP/GeoLite2-City.mmdb 9 | MaxMindDBFile ASN_DB /var/lib/GeoIP/GeoLite2-ASN.mmdb 10 | 11 | # ### 12 | # assign the lookup result to an environment variable 13 | # 14 | # variable DB name/selector 15 | # 16 | MaxMindDBEnv GEOIP_COUNTRY_CODE CITY_DB/country/iso_code 17 | MaxMindDBEnv GEOIP_COUNTRY_NAME CITY_DB/country/names/en 18 | MaxMindDBEnv GEOIP_CONTINENT_CODE CITY_DB/continent/code 19 | MaxMindDBEnv GEOIP_LATITUDE CITY_DB/location/latitude 20 | MaxMindDBEnv GEOIP_LONGITUDE CITY_DB/location/longitude 21 | MaxMindDBEnv ASN ASN_DB/autonomous_system_number 22 | 23 | # DB name variable 24 | # 25 | # MaxMindDBNetworkEnv ASN_DB PFX 26 | 27 | -------------------------------------------------------------------------------- /t/test_docker.sh: -------------------------------------------------------------------------------- 1 | cd "$(dirname "${BASH_SOURCE[0]}")" 2 | 3 | ( 4 | dockerfail=0 5 | cd docker 6 | for t in *.sh; do 7 | [ -x "$t" ] || continue 8 | ./$t 9 | if [ $? -eq 0 ] ; then 10 | echo "P:$t" 11 | else 12 | : $((dockerfail++)) 13 | echo "F-$t" 14 | fi 15 | done 16 | exit $dockerfail 17 | ) 18 | dockerfail=$? 19 | ( exit $dockerfail ) 20 | -------------------------------------------------------------------------------- /t/test_environs.sh: -------------------------------------------------------------------------------- 1 | cd "$(dirname "${BASH_SOURCE[0]}")" 2 | 3 | ( 4 | dockerfail=0 5 | cd docker/environs 6 | for t in *.sh; do 7 | [ -x "$t" ] || continue 8 | ./$t 9 | if [ $? -eq 0 ] ; then 10 | echo "P:$t" 11 | else 12 | : $((dockerfail++)) 13 | echo "F-$t" 14 | fi 15 | done 16 | exit $dockerfail 17 | ) 18 | dockerfail=$? 19 | ( exit $dockerfail ) 20 | -------------------------------------------------------------------------------- /tools/Makefile: -------------------------------------------------------------------------------- 1 | prefix = /usr/local 2 | exec_prefix = $(prefix) 3 | bindir = $(exec_prefix)/bin 4 | mandir = $(prefix)/share/man 5 | sysconfdir = $(prefix)/etc 6 | datadir = $(prefix)/share 7 | docdir = $(datadir)/doc/packages 8 | 9 | BINDIR = $(PREFIX)/bin 10 | MANDIR = $(PREFIX)/share/man 11 | 12 | INSTALL = install 13 | RONN = ronn-1.9 14 | 15 | 16 | null-rsync.1: null-rsync.1.ronn 17 | $(RONN) --roff $< 18 | $(RONN) --html $< 19 | 20 | install: null-rsync null-rsync.1 21 | $(INSTALL) -d $(DESTDIR)$(bindir) 22 | $(INSTALL) -d $(DESTDIR)$(mandir)/man1 23 | $(INSTALL) -d $(DESTDIR)$(docdir)/mirrorbrain-tools 24 | $(INSTALL) null-rsync $(DESTDIR)$(bindir) 25 | $(INSTALL) -m 0644 null-rsync.1 $(DESTDIR)$(mandir)/man1 26 | $(INSTALL) -m 0644 null-rsync.1.html README.md $(DESTDIR)$(docdir)/mirrorbrain-tools 27 | 28 | -------------------------------------------------------------------------------- /tools/README: -------------------------------------------------------------------------------- 1 | This directory contains some tools that are used by the "mb" tool, or are 2 | packaged just for conveniency. 3 | 4 | 5 | 6 | Needed by "mb" (and therefore required to be placed within $PATH) are: 7 | 8 | geoiplookup_continent.c 9 | A minimal clone of the "standard" geoiplookup tool (which comes with GeoIP), 10 | just that it can print out the continent, which the standard tool can't. 11 | Install it to /usr/bin/geoiplookup_continent 12 | 13 | scanner.pl 14 | The scanner, for now written in Perl, which is integral part of MirrorBrain. 15 | Install it as /usr/bin/scanner. You don't execute it directly though. 16 | It's called for you when you use the command "mb scan". 17 | 18 | 19 | Optional tools: 20 | 21 | geoip-lite-update 22 | Can fetch updated databases from GeoIP 23 | 24 | 25 | Additional tools that may or may not be useful for operators of MirrorBrain, or 26 | of a mirror infrastructure in general. You can ignore them for a MirrorBrain 27 | install: 28 | 29 | create_timestamp 30 | Creates a small file containing a timestamp which can be used to let it 31 | spread to mirrors, so to check them for uptodate-ness. 32 | 33 | geoiplookup_city.c 34 | Show details from a city GeoIP database, similar to what the standard 35 | geoiplookup tool does, but also shows the continent. 36 | 37 | mirrorprobe-logrotate 38 | Logrotate snippet for the /var/log/mirrorbrain/mirrorprobe.log file 39 | 40 | push2mirrors 41 | Skeleton script to push content to mirrors, via rsync, in parallel. 42 | 43 | rsyncusers 44 | Tool to summarize rsync uses from an rsync log file 45 | rsyncusers.sh 46 | Same tool in a more stupid but more portable shell implementation 47 | 48 | rsyncinfo 49 | Tool to assess the size of rsync modules on a remote server, or a 50 | subdirectory 51 | 52 | bdecode 53 | Parse a Torrent file (or other BEncoded input), and pretty-print it. 54 | Can read from standard input: curl -s | bdecode 55 | Useful to work on the Torrent generator in mod_mirrorbrain. 56 | -------------------------------------------------------------------------------- /tools/bdecode: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | # Bencode decoder 4 | # 5 | # This code is in the public domain 6 | # http://buffis.com/2007/07/28/bittorrent-bencode-decoder-in-python-using-30-lines-of-code/ 7 | 8 | import fileinput 9 | from pprint import pprint 10 | 11 | 12 | class Decoder(object): 13 | def __init__(self, data): self.data, self.ptr = data, 0 14 | def _cur(self): return self.data[self.ptr] 15 | 16 | def _get(self, x): 17 | self.ptr += x 18 | return self.data[self.ptr-x:self.ptr] 19 | 20 | def _get_int_until(self, c): 21 | num = int(self._get(self.data.index(c, self.ptr)-self.ptr)) 22 | self._get(1) # kill extra char 23 | return num 24 | 25 | def _get_str(self): return self._get(self._get_int_until(":")) 26 | def _get_int(self): return self._get_int_until("e") 27 | 28 | def decode(self): 29 | i = self._get(1) 30 | if i == "d": 31 | r = {} 32 | while self._cur() != "e": 33 | key = self._get_str() 34 | val = self.decode() 35 | r[key] = val 36 | self._get(1) 37 | elif i == "l": 38 | r = [] 39 | while self._cur() != "e": 40 | r.append(self.decode()) 41 | self._get(1) 42 | elif i == "i": 43 | r = self._get_int() 44 | elif i.isdigit(): 45 | self._get(-1) # reeeeewind 46 | r = self._get_str() 47 | return r 48 | 49 | 50 | lines = [] 51 | for line in fileinput.input(): 52 | lines.append(line) 53 | #print (repr(''.join(lines))) 54 | 55 | d = Decoder(''.join(lines)) 56 | pprint(d.decode()) 57 | -------------------------------------------------------------------------------- /tools/meson.build: -------------------------------------------------------------------------------- 1 | script_files = [ 2 | 'scanner.pl', 3 | ] 4 | 5 | extra_script_files = [ 6 | 'bdecode', 7 | 'rsyncinfo', 8 | 'rsyncusers', 9 | 'create_timestamp', 10 | 'null-rsync', 11 | ] 12 | 13 | logrotate_files = [ 14 | 'mirrorprobe-logrotate', 15 | ] 16 | 17 | 18 | install_data(script_files, 19 | install_dir: get_option('bindir'), 20 | install_mode: ['rwxr-xr-x'], 21 | rename: ['scanner'], 22 | ) 23 | 24 | if get_option('tools') 25 | install_data(extra_script_files, 26 | install_dir: get_option('bindir'), 27 | install_mode: ['rwxr-xr-x'], 28 | ) 29 | endif 30 | 31 | install_data(logrotate_files, 32 | install_dir: '/etc/logrotate.d', 33 | install_mode: ['rw-r--r--'], 34 | rename: ['mirrorprobe'], 35 | ) 36 | -------------------------------------------------------------------------------- /tools/mirrorprobe-logrotate: -------------------------------------------------------------------------------- 1 | /var/log/mirrorprobe.log { 2 | compress 3 | dateext 4 | rotate 99 5 | size=+16M 6 | notifempty 7 | missingok 8 | create 660 root mirrorbrain 9 | } 10 | 11 | /var/log/mirrorbrain/mirrorprobe.log { 12 | compress 13 | dateext 14 | rotate 99 15 | size=+16M 16 | notifempty 17 | missingok 18 | create 640 mirrorbrain mirrorbrain 19 | } 20 | 21 | -------------------------------------------------------------------------------- /tools/rsyncusers.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # analyze rsync logfile to list rsync users per rsync module 4 | 5 | # Copyright 2008,2009,2010,2011,2012 Peter Poeml 6 | # 7 | # This program is free software; you can redistribute it and/or 8 | # modify it under the terms of the GNU General Public License version 2 9 | # as published by the Free Software Foundation; 10 | # 11 | # This program is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with this program; if not, write to the Free Software 18 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 19 | 20 | __version__='1.0' 21 | __author__='Peter Poeml ' 22 | __copyright__='Peter poeml ' 23 | __license__='GPLv2' 24 | __url__='http://mirrorbrain.org' 25 | 26 | 27 | LOGFILE=${1:?An rsync logfile is needed as argument. (It may be compressed.)} 28 | 29 | case $LOGFILE in 30 | *.bz2) CAT=bzcat; GREP=zgrep;; 31 | *.gz) CAT=zcat; GREP=zgrep;; 32 | *) CAT=cat; GREP=grep;; 33 | esac 34 | 35 | $CAT $LOGFILE | \ 36 | for i in $(grep "rsync on " | awk '{ print $6 }' | cut -d/ -f1 | sort | uniq); do 37 | echo 38 | echo $i 39 | $GREP "rsync on $i" $LOGFILE \ 40 | | awk '{ printf " %-18s %s\n", $9, $8 }' \ 41 | | sed 's/(//g ; s/)//g' \ 42 | | sort -n \ 43 | | uniq 44 | done 45 | 46 | --------------------------------------------------------------------------------