diff --git a/INSTALL b/INSTALL new file mode 100644 index 000000000..ceea9a0ad --- /dev/null +++ b/INSTALL @@ -0,0 +1,158 @@ +===================================== +Datatracker Installation Instructions +===================================== + + +General Instructions for Deployment of a New Release +==================================================== + + +In order to fetch a new release of the django datatracker code, simply +check out the appropriate tag from svn:: + + svn co http://svn.tools.ietf.org/svn/tools/ietfdb/tags/$releasenumber + +Don't forget to copy $releasenumber/ietf/settings_local.py from the +old release to the new one; otherwise things won't work! +:: + + cp $oldreleasenumber/ietf/settings_local.py $releasenumber/ietf/ + +Change into the directory of the new release and run migrations:: + + cd $releasenumber + PYTHONPATH=$PWD ietf/manage.py migrate + cd .. + +and then re-point the 'web' symlink:: + + rm ./web; ln -s $releasenumber web + +and finally restart apache:: + + sudo /etc/init.d/apache2 restart + + +Installing from Scratch +======================= + +In addition to the new release deployment instructions above, the settings_local.py +file has to be set up properly, and Apache has to be configured. Since the IETF +datatracker is only intended to be deployed from scratch once, these instructions +don't cover this. The general Django depoloyment instructions are relevant, however. + + +Additional Version-Specific Instructions +======================================== + +Version 4.40 +------------ + +- (DONE) Add ianasync user with an auth role in the "iana" group and an + rfceditorsync user with an auth role in the "rfceditor" group (don't + think Group(acronym="rfceditor") exists yet); IANA and RFC Editor need + to know the passwords for the poke mechanism + + +- (DONE) Make sure mailing list for iab-stream@iab.org is up (since we're now + emailing that) + +- Set rfc_must_published_later_than date in bin/iana-protocols-updates to today + +- Run the 3 new doc South migrations + +- New polling scripts, to be run every hour:: + + web/ietf/bin/iana-changes-updates + web/ietf/bin/iana-protocols-updates + web/ietf/bin/rfc-editor-index-updates (replaces mirror_rfc_index) + web/ietf/bin/rfc-editor-queue-updates (replaces mirror_rfc_queue) + +- Import old events from IANA:: + + bin/iana-changes-updates --from="2005-01-01 00:00:00" --to="2013-01-31 00:00:00" --no-email + +- Pipe IANA review emails to the datatracker. There used to be an action to pipe + such mails to henrik@levkowetz.com, for testing this feature, but I haven't seen + any in a little while, so I don't know if this has broken. Anyway, the iana review + emails should be piped into:: + + /www/ietf-datatracker/web/ietf/bin/iana-review-email + + +- Tell IANA we're doing this for real now: + + * Probably need another URL in sync/iana.py instead of the :8080 test one + + * Need them to provide a real IANA sync password for auth with their + server (put that in settings_local.py) + + * They need to poke the live server rather than my test server + + * Tell Michelle Cotton that we are now processing emails so they don't + have to enter comments manually + + * Also, they never explained what to do about the review states (IANA + OK/not OK). So it's not automatically updated (no source to update + from) and I didn't disable it. But they can set it manually for the + time being, e.g.:: + + http://statesync.ietf.beta.iola.dk/doc/draft-ietf-geopriv-policy-uri/edit/state/iana-review/ + + * Once a draft has a IANA review state, it turns into an edit link (if + you're in IANA or the Secretariat), so it should merely be a question + of going to the draft page, clicking the link and saving the new + state. Drafts automatically get a IANA Review Needed state in the + future. + + +Version 4.34 +------------ + +The migration step you do as a part of the release sequence is going to take +quite some time -- probably minutes. It will generate some output while it's +working, too. As long as it doesn't halt and say that something failed or +gave an error, this is as expected, and when it terminates, you should be OK +to continue. + +Version 4.21 +------------ + +This release will you to run migrations before moving the link to the new +version and doing the apache reload. I know you have a routine for the steps +needed to deploy a new release by now, but thought I'd mention it, anyway. + +If there is any problem at all doing the migrations, then you'll need to +do a fake initial migration, as follows:: + + web $ PYTHONPATH=PWD ietf/manage.py migrate --fake meeting 0001 + +and then to the regular migration again. + +Version 4.20 +------------ + +Some one-time actions that need to be taken are as follows:: + + Assuming that the release has been checked out in /a/www/ietf-datatracker/4.20: + + cd /a/www/ietf-datatracker/4.20 + + PYTHONPATH=$PWD ietf/manage.py migrate --fake doc 0001 + PYTHONPATH=$PWD ietf/manage.py migrate --fake name 0001 + + PYTHONPATH=$PWD ietf/manage.py dbshell <<< "delete from django_content_type where app_label='doc' and model='groupballotpositiondocevent';" + + PYTHONPATH=$PWD ietf/manage.py migrate doc || { \ + PYTHONPATH=$PWD ietf/manage.py dbshell <<< 'CREATE TABLE `doc_groupballotpositiondocevent` (`block_comment` longtext NOT NULL, `comment` longtext NOT NULL, `ad_id` integer NOT NULL, `comment_time` datetime NULL, `block_comment_time` datetime NULL, `pos_id` varchar(8) NOT NULL DEFAULT "norecord", `docevent_ptr_id` integer NOT NULL PRIMARY KEY);' + PYTHONPATH=$PWD ietf/manage.py dbshell <<< 'DROP TABLE `doc_ballottype` CASCADE;' + PYTHONPATH=$PWD ietf/manage.py dbshell <<< 'DROP TABLE `doc_ballottype_positions` CASCADE;' + PYTHONPATH=$PWD ietf/manage.py dbshell <<< 'DROP TABLE `doc_ballotdocevent` CASCADE;' + PYTHONPATH=$PWD ietf/manage.py dbshell <<< 'ALTER TABLE `doc_ballotpositiondocevent` DROP COLUMN `ballot_id` CASCADE;' + } + + PYTHONPATH=$PWD ietf/manage.py migrate doc + PYTHONPATH=$PWD ietf/manage.py migrate name + PYTHONPATH=$PWD python ietf/wgcharter/migrate.py | tee -a ~/charter-migration.log + + diff --git a/ietf/sync/iana.py b/ietf/sync/iana.py index f588fb02d..cc72547d5 100644 --- a/ietf/sync/iana.py +++ b/ietf/sync/iana.py @@ -201,7 +201,7 @@ def update_history_with_changes(changes, send_email=True): def parse_review_email(text): - msg = email.message_from_string(text) + msg = email.message_from_string(text.encode("utf-8")) # doc doc_name = "" diff --git a/ietf/sync/tests.py b/ietf/sync/tests.py index c422a20c1..94dc53ac2 100644 --- a/ietf/sync/tests.py +++ b/ietf/sync/tests.py @@ -127,6 +127,7 @@ class IANASyncTestCase(django.test.TestCase): msg = """From: "%(person)s via RT" Date: Thu, 10 May 2012 12:00:00 +0000 Subject: [IANA #12345] Last Call: <%(draft)s-%(rev)s.txt> (Long text) to Informational RFC + (BEGIN IANA LAST CALL COMMENTS) IESG: @@ -440,7 +441,7 @@ class RFCEditorUndoTestCase(django.test.TestCase): self.assertEquals(draft.get_state("draft-rfceditor"), None) # let's just test we can recover - e = DeletedEvent.objects.all().order_by("-time")[0] + e = DeletedEvent.objects.all().order_by("-time", "-id")[0] e.content_type.model_class().objects.create(**json.loads(e.json)) self.assertTrue(StateDocEvent.objects.filter(desc="First", doc=draft))