Hi,
Thanks for going over this again. I'm at debconf, and have been working
on this package a lot while here. There are a bunch of changes to both
the package and the README.debian. I've responded to specific issues you
ran into bellow, but I'd also recommend taking a look around at the
changes as well.
Matija Nalis <mnalis-debianbug@voyager.hr> writes:
>> Matija Nalis <mnalis-debianbug@voyager.hr> writes:
>> > - "sudo -u postgres createdb -E UNICODE -O mediagoblin mediagoblin"
>> > complains with:
>> > "createdb: database creation failed: ERROR: new encoding (UTF8) is
>> > incompatible with the encoding of the template database (SQL_ASCII)
>> > HINT: Use the same encoding as in the template database, or use
>> > template0 as template."
>> >
>> > So I did: "sudo -u postgres createdb -E UNICODE -T template0 -O mediagoblin mediagoblin"
>> > which didn't complain. Hopefully it did the right thing :)
>>
>> That's strange. It works for me, and psql -c '\list' shows the encoding
>> of template1 as UTF8 on both a wheezy machine and a jessie machine. Is
>> this a fresh install?
>
> No, it was upgrade from squeeze (and possibly woody before that, but probably squeeze was
> first install).
>
> But even on fresh jessie debootstrap(8) install, it shows for me:
> $ psql -c '\list'
> List of databases
> Name | Owner | Encoding | Collate | Ctype | Access privileges
> -------------+-------------+-----------+---------+-------+-----------------------
> mediagoblin | mediagoblin | UTF8 | C | C |
> postgres | postgres | SQL_ASCII | C | C |
> template0 | postgres | SQL_ASCII | C | C | =c/postgres +
> | | | | | postgres=CTc/postgres
> template1 | postgres | SQL_ASCII | C | C | =c/postgres +
> | | | | | postgres=CTc/postgres
> (4 rows)
>
> it might be different if installed through debian installer, and user choose something
> other than "C" locale. I usually choose "C" on servers and even rarely install locales
> package at all, unless I need it.
I'm not quite sure why this is. I'll look into it more.
>> Again, thanks a lot for going over this package. The updated version
>> can be found on mentors here:
>> https://mentors.debian.net/package/mediagoblin
>
> Thanks a lot! Ok, I tried with:
> http://mentors.debian.net/debian/pool/main/m/mediagoblin/mediagoblin_0.6.1-1+dfsg1.dsc
>
> and clean jessie chroot system (created via debootstrap(8)) - so it would be closer to targeted
> distribution (I'll try wheezy again when I get it to work in jessie):
>
> - "sudo -u postgres createuser mediagoblin" does not ask any of the questions:
> > Shall the new role be a superuser? (y/n) n
> > Shall the new role be allowed to create databases? (y/n) n
> > Shall the new role be allowed to create more new roles? (y/n) n
>
> but seems to create user ok. So something to that effect probably should be in docs:
> "if you're asked the following questions, the correct answers
> are..."
The README.debian has the following:
Then answer NO to all the questions:
> Shall the new role be a superuser? (y/n) n
> Shall the new role be allowed to create databases? (y/n) n
> Shall the new role be allowed to create more new roles? (y/n) n
> - "sudo -u postgres createdb -E UNICODE -O mediagoblin mediagoblin" still fails:
> createdb: database creation failed: ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII)
> HINT: Use the same encoding as in the template database, or use
> template0 as template.
>
> I guess it might be related to system using default C locale, and not something
> utf8-based, but I don't really know. Anyway workaround with adding "-T template0"
> seems to work and db is created. I think we should mention that workaround in README.Debian
> if the user encounters the bug.
I'll move to 'sudo -u postgres createdb -E UNICODE -T template0 -O
mediagoblin mediagoblin' in the README for now. It should work for both
the UTF8 case and the SQL_ASCII case.
>
> - "3. Add the following to the [mediagoblin] in /etc/mediagoblin.ini:"
> correct path is /etc/mediagoblin/mediagoblin.ini
Fixed.
> - "$ su - [mediagoblin]"
> we should drop the square brackets around 'mediagoblin', they're confusing (and don't work).
> So make it just: '$ su - mediagoblin'
Good point. I've changed it.
> - on "/usr/bin/gmg -cf /etc/mediagoblin/mediagoblin.ini dbupdate" step, it warns:
> WARNING:mediagoblin.init.config:When setting up config section, could not import 'mediagoblin.media_types.image'
> -> Initializing main mediagoblin tables... done.
> + Laying foundations for Privilege table
>
> if that warning is OK, we should mention in docs that it should be ignored.
> If it isn't, we'll need to find out what is the problem (maybe depends on mime.types handler or something?)
There should have been an dependency on python-pil. There is now, and
installing it should fix your issue.
> - "7. Restart nginx, most likely with $ /etc/init.d/nginx restart"
>
> As we're still running as mediagoblin user in this step, we should indicate
> that restarting should be done as root (not as user as '$' suggest);
> or change the order of commands (so we can say "$ sudo
> /etc/init.d/nginx restart")
Good point. All of the commands are now done with sudo -u, so this
shouldn't be an issue any more.
> - starting still doesn't work:
> PYTHONPATH=/usr/share/mediagoblin/ CELERY_ALWAYS_EAGER=false\
> /usr/bin/paster serve /etc/mediagoblin/mediagoblin/paste.ini\
> --pid-file=/home/mediagoblin/mediagoblin.pid --server-name=fcgi\
> fcgi_host=127.0.0.1 fcgi_port=26543
>
> Until that is solved, we should indicate in README.Debian that due to
> some bug they MUST NOT be in directory containing *.egg-info files
> (and not default ~mediagoblin, in which they most probably will be if
> they follow instructions)
I've moved many of the files and the .egg_info directory to
/usr/lib/python2.7/dist-packages/, which should fix this issue.
> however, even when I change directory to for example /tmp, it still
> doesn't work.
>
> Command from README.Debian.gz is:
> PYTHONPATH=/usr/share/mediagoblin/ CELERY_ALWAYS_EAGER=false
> /usr/bin/paster serve /etc/mediagoblin/mediagoblin/paste.ini\
> --pid-file=/home/mediagoblin/mediagoblin.pid
> --server-name=fcgi\
> fcgi_host=127.0.0.1 fcgi_port=26543
>
> but:
> 1) "/etc/mediagoblin/mediagoblin/paste.ini" should be "/etc/mediagoblin/paste.ini"
> 2) there is no /home/mediagoblin (user was created with
> "/usr/share/mediagoblin" as non-writeable home)
Both of these have been fixed.
> This fails with new error:
>
> 2014-08-18 13:28:57,606 INFO [mediagoblin.app] GNU MediaGoblin 0.6.1 main server starting
> 2014-08-18 13:28:57,611 WARNING [mediagoblin.init.config] When setting up config section, could not import 'mediagoblin.media_types.image'
> Traceback (most recent call last):
> File "/usr/bin/paster", line 4, in <module>
> command.run()
> File "/usr/lib/python2.7/dist-packages/paste/script/command.py", line 104, in run
> invoke(command, command_name, options, args[1:])
> File "/usr/lib/python2.7/dist-packages/paste/script/command.py", line 143, in invoke
> exit_code = runner.run(args)
> File "/usr/lib/python2.7/dist-packages/paste/script/command.py", line 238, in run
> result = self.command()
> File "/usr/lib/python2.7/dist-packages/paste/script/serve.py", line 284, in command
> relative_to=base, global_conf=vars)
> File "/usr/lib/python2.7/dist-packages/paste/script/serve.py", line 321, in loadapp
> **kw)
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 247, in loadapp
> return loadobj(APP, uri, name=name, **kw)
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 272, in loadobj
> return context.create()
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 710, in create
> return self.object_type.invoke(self)
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 203, in invoke
> app = context.app_context.create()
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 710, in create
> return self.object_type.invoke(self)
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 144, in invoke
> **context.local_conf)
> File "/usr/lib/python2.7/dist-packages/paste/deploy/util.py", line 55, in fix_call
> val = callable(*args, **kw)
> File "/usr/lib/python2.7/dist-packages/paste/urlmap.py", line 28, in urlmap_factory
> app = loader.get_app(app_name, global_conf=global_conf)
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 350, in get_app
> name=name, global_conf=global_conf).create()
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 710, in create
> return self.object_type.invoke(self)
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 146, in invoke
> return fix_call(context.object, context.global_conf, **context.local_conf)
> File "/usr/lib/python2.7/dist-packages/paste/deploy/util.py", line 55, in fix_call
> val = callable(*args, **kw)
> File "/usr/share/mediagoblin/mediagoblin/app.py", line 277, in paste_app_factory
> mgoblin_app = MediaGoblinApp(mediagoblin_config)
> File "/usr/share/mediagoblin/mediagoblin/app.py", line 74, in __init__
> setup_crypto()
> File "/usr/share/mediagoblin/mediagoblin/tools/crypto.py", line 86, in setup_crypto
> create_key(key_dir, key_filepath)
> File "/usr/share/mediagoblin/mediagoblin/tools/crypto.py", line 59, in create_key
> os.makedirs(key_dir)
> File "/usr/lib/python2.7/os.py", line 150, in makedirs
> makedirs(head, mode)
> File "/usr/lib/python2.7/os.py", line 157, in makedirs
> mkdir(name, mode)
> OSError: [Errno 13] Permission denied: '/etc/mediagoblin/user_dev'
> Removing PID file /tmp/mediagoblin.pid
>
> /etc/mediagobin is writeable only by root, as it probably should be.
> So I created it myself as root:
> - "install -d -m 0755 -g mediagoblin -o mediagoblin
> /etc/mediagoblin/user_dev"
The default paths sucked. It was trying to write user data into
/etc/. The package now includes a paste.ini and a mediagoblin.ini with
sane paths.
> running it again, we get little further:
> 2014-08-18 13:33:09,572 INFO [mediagoblin.app] GNU MediaGoblin 0.6.1 main server starting
> 2014-08-18 13:33:09,577 WARNING [mediagoblin.init.config] When setting up config section, could not import 'mediagoblin.media_types.image'
> 2014-08-18 13:33:09,590 INFO [mediagoblin.tools.crypto] Created /etc/mediagoblin/user_dev/crypto
> 2014-08-18 13:33:09,592 INFO [mediagoblin.tools.crypto] Saved new key for It's Dangerous
> 2014-08-18 13:33:09,647 INFO [mediagoblin.app] Setting up plugins.
> 2014-08-18 13:33:09,647 INFO [mediagoblin.init.plugins] Importing plugin module: mediagoblin.plugins.geolocation
> 2014-08-18 13:33:09,647 INFO [mediagoblin.init.plugins] Importing plugin module: mediagoblin.plugins.basic_auth
> 2014-08-18 13:33:09,647 INFO [mediagoblin.init.plugins] Importing plugin module: mediagoblin.media_types.image
> Traceback (most recent call last):
> File "/usr/bin/paster", line 4, in <module>
> command.run()
> File "/usr/lib/python2.7/dist-packages/paste/script/command.py", line 104, in run
> invoke(command, command_name, options, args[1:])
> File "/usr/lib/python2.7/dist-packages/paste/script/command.py", line 143, in invoke
> exit_code = runner.run(args)
> File "/usr/lib/python2.7/dist-packages/paste/script/command.py", line 238, in run
> result = self.command()
> File "/usr/lib/python2.7/dist-packages/paste/script/serve.py", line 284, in command
> relative_to=base, global_conf=vars)
> File "/usr/lib/python2.7/dist-packages/paste/script/serve.py", line 321, in loadapp
> **kw)
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 247, in loadapp
> return loadobj(APP, uri, name=name, **kw)
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 272, in loadobj
> return context.create()
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 710, in create
> return self.object_type.invoke(self)
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 203, in invoke
> app = context.app_context.create()
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 710, in create
> return self.object_type.invoke(self)
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 144, in invoke
> **context.local_conf)
> File "/usr/lib/python2.7/dist-packages/paste/deploy/util.py", line 55, in fix_call
> val = callable(*args, **kw)
> File "/usr/lib/python2.7/dist-packages/paste/urlmap.py", line 28, in urlmap_factory
> app = loader.get_app(app_name, global_conf=global_conf)
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 350, in get_app
> name=name, global_conf=global_conf).create()
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 710, in create
> return self.object_type.invoke(self)
> File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 146, in invoke
> return fix_call(context.object, context.global_conf, **context.local_conf)
> File "/usr/lib/python2.7/dist-packages/paste/deploy/util.py", line 55, in fix_call
> val = callable(*args, **kw)
> File "/usr/share/mediagoblin/mediagoblin/app.py", line 277, in paste_app_factory
> mgoblin_app = MediaGoblinApp(mediagoblin_config)
> File "/usr/share/mediagoblin/mediagoblin/app.py", line 89, in __init__
> setup_plugins()
> File "/usr/share/mediagoblin/mediagoblin/init/plugins/__init__.py", line 56, in setup_plugins
> __import__(plugin_module)
> File "/usr/share/mediagoblin/mediagoblin/media_types/image/__init__.py", line 20, in <module>
> from mediagoblin.media_types.image.processing import sniff_handler, \
> File "/usr/share/mediagoblin/mediagoblin/media_types/image/processing.py", line 20, in <module>
> import Image
> ImportError: No module named Image
> Removing PID file /tmp/mediagoblin.pid
>
>
> Hmmm, I'm stuck there. It seems maybe like that "could not import
> 'mediagoblin.media_types.image'" was not a harmless warning afterall,
> but we miss depending on something there?
This was the PIL issue above. It should work now
> I've commented out "[[mediagoblin.media_types.image]]" in /etc/mediagoblin/mediagoblin.ini and rerun
> "/usr/bin/gmg -cf /etc/mediagoblin/mediagoblin.ini dbupdate", which finally managed to start it:
>
> $ cd /tmp; PYTHONPATH=/usr/share/mediagoblin/ CELERY_ALWAYS_EAGER=false\
>> /usr/bin/paster serve /etc/mediagoblin/paste.ini\
>> --pid-file=/tmp/mediagoblin.pid\
>> --server-name=fcgi\
>> fcgi_host=127.0.0.1 fcgi_port=26543
> 2014-08-18 13:39:25,476 INFO [mediagoblin.app] GNU MediaGoblin 0.6.1 main server starting
> 2014-08-18 13:39:25,544 INFO [mediagoblin.app] Setting up plugins.
> 2014-08-18 13:39:25,545 INFO [mediagoblin.init.plugins] Importing plugin module: mediagoblin.plugins.geolocation
> 2014-08-18 13:39:25,545 INFO [mediagoblin.init.plugins] Importing plugin module: mediagoblin.plugins.basic_auth
> 2014-08-18 13:39:25,630 INFO [mediagoblin.init.celery] Setting celery configuration from object "mediagoblin.init.celery.dummy_settings_module"
> Starting server in PID 19196.
>
> I can create and confirm account. Of course, when I try to add any
> image I get "Sorry, I don't support that file type :(" but that is
> due to above problem. I think anything on which
> "mediagoblin.media_types.image" depends should be hard "Depends" for
> mediagobling package (as it is most basic type we need to support),
> while mediagoblin.media_types.video and others might be
> recommends/suggests as needed.
>
> This is very close to be easily installable on Jessie. After it works
> by the docs without any issues on a clean system or two, we can try
> to help to ease some of those manual steps (for example prepare
> config files for apache/nginx so they can be enabled more easily;
> package /etc/init.d script, auto create user on install (if not
> found), create subpackages for mediagoblin-pgsql/mediagoblin-sqlite3
> which would do further automation, ask questions and run gmg on
> package (re-)configure etc). I can help with some of that, probably.
I think you'll find the package much closer to functional now, if
not yet perfect. If you could help with the clean-up and extra niceness
after, that would be fantastic. I'm hoping to get a working version of
the package uploaded before the end of debconf.
Thanks again for going through this and testing it. It's a lot of help!
Simon
Attachment:
pgpAIpTt5srHw.pgp
Description: PGP signature