From 5250ae9f0894ea8152fc9bc7692e6fb117f85f58 Mon Sep 17 00:00:00 2001 From: Rob Austein Date: Mon, 15 Feb 2016 23:08:06 +0000 Subject: Snapshot before whacking migrations. svn path=/branches/tk705/; revision=6259 --- Makefile.in | 4 +- buildtools/debian-skeleton/rpki-ca.install | 5 +- buildtools/debian-skeleton/rpki-ca.postinst | 14 +-- buildtools/debian-skeleton/rpki-ca.postrm | 6 +- buildtools/debian-skeleton/rpki-rp.install | 4 + buildtools/debian-skeleton/rpki-rp.postinst | 5 +- buildtools/debian-skeleton/rpki-rp.postrm | 2 +- ca/Makefile.in | 8 +- rp/config/Makefile.in | 12 +- rp/config/rpki-sql-setup | 34 +++--- setup.py | 182 +++++++++++++++------------- 11 files changed, 147 insertions(+), 129 deletions(-) diff --git a/Makefile.in b/Makefile.in index a85cc6a4..59495f70 100644 --- a/Makefile.in +++ b/Makefile.in @@ -218,9 +218,9 @@ tags: Makefile .FORCE makemigrations: RPKI_CONF=makemigrations.conf.$$$$ TEMP_DB=makemigrations.db.$$$$; export RPKI_CONF TEMP_DB; trap "rm -f $$RPKI_CONF $$TEMP_DB" 0; \ - ${PYTHON} ca/rpki-confgen --read-xml ca/rpki-confgen.xml --autoconf --set myrpki::shared_sql_engine=sqlite3 \ + ${PYTHON} rp/config/rpki-confgen --read-xml rp/config/rpki-confgen.xml --autoconf --set myrpki::shared_sql_engine=sqlite3 \ --set myrpki::rpkid_sql_database=$$TEMP_DB --set myrpki::irdbd_sql_database=$$TEMP_DB --set myrpki::pubd_sql_database=$$TEMP_DB \ --pwgen myrpki::shared_sql_password --pwgen web_portal::secret-key --write-conf $$RPKI_CONF; \ - for i in rpkid pubd irdb; do ca/rpki-manage makemigrations --settings rpki.django_settings.$$i; done + for i in rpkid pubd irdb rcynicdb; do rp/config/rpki-manage makemigrations --settings rpki.django_settings.$$i; done .FORCE: diff --git a/buildtools/debian-skeleton/rpki-ca.install b/buildtools/debian-skeleton/rpki-ca.install index 90f4eecf..075a3a32 100644 --- a/buildtools/debian-skeleton/rpki-ca.install +++ b/buildtools/debian-skeleton/rpki-ca.install @@ -1,3 +1,6 @@ usr/lib/rpki -usr/sbin +usr/sbin/irbe_cli +usr/sbin/rpki-start-servers +usr/sbin/rpkic +usr/sbin/rpkigui-query-routes usr/share/rpki diff --git a/buildtools/debian-skeleton/rpki-ca.postinst b/buildtools/debian-skeleton/rpki-ca.postinst index 9bd1f96d..d8e089ce 100644 --- a/buildtools/debian-skeleton/rpki-ca.postinst +++ b/buildtools/debian-skeleton/rpki-ca.postinst @@ -15,9 +15,9 @@ setup_config() { --set myrpki::run_rpkid=yes \ --set myrpki::run_pubd=yes \ --write-xml /etc/rpki/rpki.ca.xml \ - --write-conf /etc/rpki/rpki.ca.sample.conf + --write-conf /etc/rpki/rpki.ca.conf.sample - if test ! -f /etc/rpki.conf || cmp -s /etc/rpki.conf /etc/rpki/rpki.rp.sample.conf + if test ! -f /etc/rpki.conf || cmp -s /etc/rpki.conf /etc/rpki/rpki.rp.conf.sample then cp -p /etc/rpki/rpki.ca.conf.sample /etc/rpki.conf fi @@ -25,17 +25,16 @@ setup_config() { setup_sql() { rpki-sql-setup --debug --verbose --postgresql-root-username postgres create + sudo -u rpki rpki-manage migrate rpkidb --settings rpki.django_settings.rpkid + sudo -u rpki rpki-manage migrate pubdb --settings rpki.django_settings.pubd + sudo -u rpki rpki-manage migrate irdb --settings rpki.django_settings.irdb + sudo -u rpki rpki-manage migrate app --settings rpki.django_settings.gui } setup_bpki() { rpkic initialize_server_bpki } -setup_django() { - rpki-manage syncdb --noinput - rpki-manage migrate app -} - setup_cron() { t=$(hexdump -n 1 -e '"%u"' /dev/urandom) && echo "$(($t % 60)) */2 * * * nobody /usr/lib/rpki/rpkigui-import-routes" > /etc/cron.d/rpkigui-routeviews chmod 644 /etc/cron.d/rpkigui-routeviews @@ -63,7 +62,6 @@ case "$1" in setup_config setup_sql setup_bpki - setup_django setup_cron ;; diff --git a/buildtools/debian-skeleton/rpki-ca.postrm b/buildtools/debian-skeleton/rpki-ca.postrm index c49492fe..c9418cdb 100644 --- a/buildtools/debian-skeleton/rpki-ca.postrm +++ b/buildtools/debian-skeleton/rpki-ca.postrm @@ -22,11 +22,11 @@ set -e case "$1" in purge) - if cmp -s /etc/rpki.conf /etc/rpki/rpki.ca.sample.conf + if cmp -s /etc/rpki.conf /etc/rpki/rpki.ca.conf.sample then - cp -p /etc/rpki/rpki.rp.sample.conf /etc/rpki.conf + cp -p /etc/rpki/rpki.rp.conf.sample /etc/rpki.conf fi - rm -f /etc/rpki/rpki.ca.sample.conf /etc/rpki/rpki.ca.xml + rm -f /etc/rpki/rpki.ca.conf.sample /etc/rpki/rpki.ca.xml rm -f /etc/rpki/apache.conf /etc/rpki/apache.cer /etc/rpki/apache.key ;; diff --git a/buildtools/debian-skeleton/rpki-rp.install b/buildtools/debian-skeleton/rpki-rp.install index fe0073a2..f1db3570 100644 --- a/buildtools/debian-skeleton/rpki-rp.install +++ b/buildtools/debian-skeleton/rpki-rp.install @@ -3,4 +3,8 @@ etc/rpki/trust-anchors etc/xinetd.d/rpki-rtr usr/bin usr/lib/python2.7 +usr/sbin/rpki-confgen +usr/sbin/rpki-manage +usr/sbin/rpki-sql-backup +usr/sbin/rpki-sql-setup var/rcynic diff --git a/buildtools/debian-skeleton/rpki-rp.postinst b/buildtools/debian-skeleton/rpki-rp.postinst index ae95e7b2..a3c1bb68 100644 --- a/buildtools/debian-skeleton/rpki-rp.postinst +++ b/buildtools/debian-skeleton/rpki-rp.postinst @@ -37,16 +37,17 @@ setup_config() { --set myrpki::run_rpkid=no \ --set myrpki::run_pubd=no \ --write-xml /etc/rpki/rpki.rp.xml \ - --write-conf /etc/rpki/rpki.rp.sample.conf + --write-conf /etc/rpki/rpki.rp.conf.sample if test ! -f /etc/rpki.conf then - cp -p /etc/rpki/rpki.rp.sample.conf /etc/rpki.conf + cp -p /etc/rpki/rpki.rp.conf.sample /etc/rpki.conf fi } setup_sql() { rpki-sql-setup --debug --verbose --postgresql-root-username postgres create + sudo -u rpki rpki-manage migrate rcynicdb --settings rpki.django_settings.rcynic } # We want to pick a *random* minute for rcynic to run, to spread load diff --git a/buildtools/debian-skeleton/rpki-rp.postrm b/buildtools/debian-skeleton/rpki-rp.postrm index 7236d7a5..ff8eafab 100644 --- a/buildtools/debian-skeleton/rpki-rp.postrm +++ b/buildtools/debian-skeleton/rpki-rp.postrm @@ -29,7 +29,7 @@ case "$1" in sudo -u postgres psql -f $sql rm -f $sql fi - rm -f /etc/rpki/rpki.rp.sample.conf /etc/rpki/rpki.rp.xml /etc/rpki.conf + rm -f /etc/rpki/rpki.rp.conf.sample /etc/rpki/rpki.rp.xml /etc/rpki.conf ;; remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) diff --git a/ca/Makefile.in b/ca/Makefile.in index 27425766..1a18df0b 100644 --- a/ca/Makefile.in +++ b/ca/Makefile.in @@ -84,15 +84,15 @@ install-conf: --set myrpki::run_rpkid=yes \ --set myrpki::run_pubd=yes \ --write-xml ${DESTDIR}${sysconfdir}/rpki/rpki.ca.xml \ - --write-conf ${DESTDIR}${sysconfdir}/rpki/rpki.ca.sample.conf + --write-conf ${DESTDIR}${sysconfdir}/rpki/rpki.ca.conf.sample if test ! -f ${DESTDIR}${sysconfdir}/rpki.conf ||\ - cmp -s ${DESTDIR}${sysconfdir}/rpki.conf ${DESTDIR}${sysconfdir}/rpki/rpki.rp.sample.conf;\ + cmp -s ${DESTDIR}${sysconfdir}/rpki.conf ${DESTDIR}${sysconfdir}/rpki/rpki.rp.conf.sample;\ then \ - cp -p ${DESTDIR}${sysconfdir}/rpki/rpki.ca.sample.conf ${DESTDIR}${sysconfdir}/rpki.conf + cp -p ${DESTDIR}${sysconfdir}/rpki/rpki.ca.conf.sample ${DESTDIR}${sysconfdir}/rpki.conf fi #uninstall deinstall:: -# rm -f ${DESTDIR}${sysconfdir}/rpki/rpki.ca.xml ${DESTDIR}${sysconfdir}/rpki/rpki.ca.sample.conf +# rm -f ${DESTDIR}${sysconfdir}/rpki/rpki.ca.xml ${DESTDIR}${sysconfdir}/rpki/rpki.ca.conf.sample install-apache: ${libexecdir}/rpkigui-apache-conf-gen --install --verbose diff --git a/rp/config/Makefile.in b/rp/config/Makefile.in index d7367a5f..c6050f3e 100644 --- a/rp/config/Makefile.in +++ b/rp/config/Makefile.in @@ -23,7 +23,7 @@ srcdir = @srcdir@ CFG_INSTALL_TARGETS = @CFG_INSTALL_TARGETS@ -all:: rpki.rp.xml rpki.rp.sample.conf +all:: rpki.rp.xml rpki.rp.conf.sample clean:: @true @@ -35,7 +35,7 @@ install-always:: all @echo "== Default configuration file location is ${sysconfdir}/rpki.conf ==" @echo ${INSTALL} -d ${DESTDIR}${sysconfdir}/rpki - ${INSTALL} rpki.rp.xml rpki.rp.sample.conf ${DESTDIR}${sysconfdir}/rpki + ${INSTALL} rpki.rp.xml rpki.rp.conf.sample ${DESTDIR}${sysconfdir}/rpki test uninstall deinstall:: @true @@ -56,13 +56,13 @@ rpki.rp.xml: ${abs_top_srcdir}/rpki/autoconf.py rpki-confgen rpki-confgen.xml --set myrpki::run_pubd=no \ --write-xml $@ -rpki.rp.sample.conf: rpki.rp.xml +rpki.rp.conf.sample: rpki.rp.xml ${PYTHON} rpki-confgen \ --read-xml rpki.rp.xml \ --write-conf $@ clean:: - rm -f rpki.rp.xml rpki.rp.sample.conf + rm -f rpki.rp.xml rpki.rp.conf.sample install-postconf: \ install-user install-conf install-sql install-django @@ -75,10 +75,10 @@ install-user: install-conf: test -f ${DESTDIR}${sysconfdir}/rpki.conf ||\ - cp -p ${DESTDIR}${sysconfdir}/rpki/rpki.rp.sample.conf ${DESTDIR}${sysconfdir}/rpki.conf + cp -p ${DESTDIR}${sysconfdir}/rpki/rpki.rp.conf.sample ${DESTDIR}${sysconfdir}/rpki.conf #uninstall deinstall:: -# rm -f ${DESTDIR}${sysconfdir}/rpki/rpki.rp.xml ${DESTDIR}${sysconfdir}/rpki/rpki.rp.sample.conf +# rm -f ${DESTDIR}${sysconfdir}/rpki/rpki.rp.xml ${DESTDIR}${sysconfdir}/rpki/rpki.rp.conf.sample install-sql: ${sbindir}/rpki-sql-setup create diff --git a/rp/config/rpki-sql-setup b/rp/config/rpki-sql-setup index c72c97c5..98ef2898 100755 --- a/rp/config/rpki-sql-setup +++ b/rp/config/rpki-sql-setup @@ -54,10 +54,6 @@ class Abstract_Driver(object): else: return True - def db_exists(self, udb): - self.execute("SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = %s", (udb.database,)) - return bool(self.fetchone()[0]) - def fetchone(self): return self._cur.fetchone() @@ -88,6 +84,10 @@ class MySQL_Driver(Abstract_Driver): def _db_accessible_test(self, udb): self.driver.connect(db = udb.database, user = udb.username, passwd = udb.password).close() + def db_exists(self, udb): + self.execute("SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '{0.database}'".format(udb)) + return bool(self.fetchone()[0]) + def execute(*args): try: self._cur @@ -203,27 +203,27 @@ class PostgreSQL_Driver(Abstract_Driver): finally: self._seteuid(uid) - def _role_in_use(self, udb): - self.execute('''\ + def db_exists(self, udb): + self.execute("SELECT COUNT(*) FROM pg_database WHERE datname = '{0.database}'".format(udb)) + return bool(self.fetchone()[0]) + + def role_in_use(self, udb): + self.execute(textwrap.dedent('''\ SELECT COUNT(*) FROM pg_database JOIN pg_roles ON pg_database.datdba = pg_roles.oid - WHERE pg_roles.rolname = %s''', (udb.username,)) + WHERE pg_roles.rolname = '{0.username}' + '''.format(udb))) return bool(self.fetchone()[0]) def create(self, udb): - self.execute('''\ - DO $$ BEGIN - IF NOT EXISTS (SELECT * FROM pg_catalog.pg_roles - WHERE rolname = '{0.username}') - THEN - CREATE ROLE {0.username} LOGIN PASSWORD '{0.password}'; - END IF; - END $$'''.format(udb)) - self.execute("CREATE DATABASE {0.database} OWNER {0.username}".format(udb)) + if not self.role_in_use(udb): + self.execute("CREATE ROLE {0.username} LOGIN PASSWORD '{0.password}'".format(udb)) + if not self.db_exists(udb): + self.execute("CREATE DATABASE {0.database} OWNER {0.username}".format(udb)) def drop(self, udb): self.execute("DROP DATABASE IF EXISTS {0.database}".format(udb)) - if not self._role_in_use(udb): + if not self.role_in_use(udb): self.execute("DROP ROLE IF EXISTS {0.username}".format(udb)) def script_drop(self, udb): diff --git a/setup.py b/setup.py index 58503bd4..65d8e654 100644 --- a/setup.py +++ b/setup.py @@ -37,6 +37,99 @@ except ImportError: # pylint: disable=W0622 +scripts = [] +data_files = [] +packages = [] +package_data = {} +ext_modules = [] + +# I keep forgetting to update the packages list here. Could we +# automate this by looking for __init__.py files in the rpki/ tree? +# Might have to filter out some rpki.gui.app subdirs, or, rather, +# list those as package_data instead. + +if autoconf.RP_TARGET == "rp": + + packages += ["rpki", + "rpki.POW", + "rpki.django_settings", + "rpki.rtr", + "rpki.irdb", + "rpki.pubdb", + "rpki.rpkidb", + "rpki.rcynicdb", + "rpki.gui", + "rpki.gui.app", + "rpki.gui.cacheview", + "rpki.gui.api", + "rpki.gui.routeview"] + + ext_modules += [Extension("rpki.POW._POW", ["ext/POW.c"], + include_dirs = [cflag[2:] for cflag in autoconf.CFLAGS.split() if cflag.startswith("-I")], + extra_compile_args = [cflag for cflag in autoconf.CFLAGS.split() if not cflag.startswith("-I")], + extra_link_args = autoconf.LDFLAGS.split() + autoconf.LIBS.split())] + + for package in ("rpki.irdb", "rpki.pubdb", "rpki.rpkidb", "rpki.rcynicdb"): + package_data[package] = ["migrations/*.py"] + + data_files += [(autoconf.sysconfdir + "/rpki", + ["rp/config/rpki-confgen.xml"])] + + scripts += [(autoconf.bindir, + ["rp/rcynic/rcynic-cron", + "rp/rcynic/rcynic-html", + "rp/rcynic/rcynic-svn", + "rp/rcynic/rcynic-text", + "rp/rcynic/validation_status", + "rp/rpki-rtr/rpki-rtr", + "rp/utils/find_roa", + "rp/utils/hashdir", + "rp/utils/print_roa", + "rp/utils/print_rpki_manifest", + "rp/utils/scan_roas", + "rp/utils/scan_routercerts", + "rp/utils/uri"]), + (autoconf.sbindir, + ["rp/config/rpki-confgen", + "rp/config/rpki-sql-backup", + "rp/config/rpki-sql-setup", + "rp/config/rpki-manage"])] + +if autoconf.CA_TARGET == "ca": + + package_data["rpki.gui.app"] = ["migrations/*.py", + "static/*/*", + "templates/*.html", + "templates/*/*.html", + "templatetags/*.py"] + + package_data["rpki.gui.cacheview"] = ["templates/*/*.html"] + + + data_files += [(autoconf.datarootdir + "/rpki/wsgi", + ["ca/rpki.wsgi"]), + (autoconf.datarootdir + "/rpki/media/css", + glob("rpki/gui/app/static/css/*")), + (autoconf.datarootdir + "/rpki/media/js", + glob("rpki/gui/app/static/js/*")), + (autoconf.datarootdir + "/rpki/media/img", + glob("rpki/gui/app/static/img/*"))] + + scripts += [(autoconf.sbindir, + ["ca/rpkic", + "ca/rpki-start-servers", + "ca/rpkigui-query-routes", + "ca/irbe_cli"]), + (autoconf.libexecdir, + ["ca/irdbd", + "ca/pubd", + "ca/rootd", + "ca/rpkid", + "ca/rpkigui-import-routes", + "ca/rpkigui-check-expired", + "ca/rpkigui-rcynic", + "ca/rpkigui-apache-conf-gen"])] + setup_args = dict( name = "rpki", version = VERSION, @@ -46,90 +139,9 @@ setup_args = dict( cmdclass = {"build_scripts" : setup_extensions.build_scripts, "install_scripts" : setup_extensions.install_scripts}) -scripts = [] +for name in ("scripts", "data_files", "packages", "package_data", "ext_modules"): + val = globals().get(name) + if val: + setup_args[name] = val -# I keep forgetting to update the packages list here. Could we -# automate this by looking for __init__.py files in the rpki/ tree? -# Might have to filter out some rpki.gui.app subdirs, or, rather, -# list those as package_data instead. - -if autoconf.RP_TARGET == "rp": - setup_args.update( - packages = ["rpki", - "rpki.POW", - "rpki.django_settings", - "rpki.rtr", - "rpki.irdb", - "rpki.pubdb", - "rpki.rpkidb", - "rpki.rcynicdb", - "rpki.gui", - "rpki.gui.app", - "rpki.gui.cacheview", - "rpki.gui.api", - "rpki.gui.routeview"], - ext_modules = [Extension("rpki.POW._POW", ["ext/POW.c"], - include_dirs = [cflag[2:] for cflag in autoconf.CFLAGS.split() if cflag.startswith("-I")], - extra_compile_args = [cflag for cflag in autoconf.CFLAGS.split() if not cflag.startswith("-I")], - extra_link_args = autoconf.LDFLAGS.split() + autoconf.LIBS.split())], - package_data = {"rpki.gui.app" : ["migrations/*.py", - "static/*/*", - "templates/*.html", - "templates/*/*.html", - "templatetags/*.py"], - "rpki.gui.cacheview" : ["templates/*/*.html"], - "rpki.irdb": ["migrations/*.py"], - "rpki.pubdb": ["migrations/*.py"], - "rpki.rpkidb": ["migrations/*.py"], - "rpki.rcynicdb": ["migrations/*.py"]}) - - scripts += [(autoconf.bindir, - ["rp/rcynic/rcynic-cron", - "rp/rcynic/rcynic-html", - "rp/rcynic/rcynic-svn", - "rp/rcynic/rcynic-text", - "rp/rcynic/validation_status", - "rp/rpki-rtr/rpki-rtr", - "rp/utils/find_roa", - "rp/utils/hashdir", - "rp/utils/print_roa", - "rp/utils/print_rpki_manifest", - "rp/utils/scan_roas", - "rp/utils/scan_routercerts", - "rp/utils/uri"]), - (autoconf.sbindir, - ["rp/config/rpki-confgen", - "rp/config/rpki-sql-backup", - "rp/config/rpki-sql-setup", - "rp/config/rpki-manage"])] - -if autoconf.CA_TARGET == "ca": - setup_args.update( - data_files = [(autoconf.sysconfdir + "/rpki", - ["ca/rpki-confgen.xml"]), - (autoconf.datarootdir + "/rpki/wsgi", - ["ca/rpki.wsgi"]), - (autoconf.datarootdir + "/rpki/media/css", - glob("rpki/gui/app/static/css/*")), - (autoconf.datarootdir + "/rpki/media/js", - glob("rpki/gui/app/static/js/*")), - (autoconf.datarootdir + "/rpki/media/img", - glob("rpki/gui/app/static/img/*"))]) - - scripts += [(autoconf.sbindir, - ["ca/rpkic", - "ca/rpki-start-servers", - "ca/rpkigui-query-routes", - "ca/irbe_cli"]), - (autoconf.libexecdir, - ["ca/irdbd", - "ca/pubd", - "ca/rootd", - "ca/rpkid", - "ca/rpkigui-import-routes", - "ca/rpkigui-check-expired", - "ca/rpkigui-rcynic", - "ca/rpkigui-apache-conf-gen"])] - -setup_args.update(scripts = scripts) setup(**setup_args) -- cgit v1.2.3