On Dec 28, 2011, at 11:29 AM, Jim J wrote: > Thanks Andre! > > The idea works, not so much the implementation though. I'll post what I've > found, perhaps I missed something otherwise it might be something to look > into or at least help others. > > I was able to set up the database schema but I couldn't do it using the > bootstrap Python script. The script imports > calendarserver.tools.bootstrapdatabase and runs main(). The > bootstrapdatabase.py file makes some improper (and un-overrideable) > assumptions. First, CONNECTNAME is assumed to be "_postgres" but on Ubuntu > it's just "postgres" (no leading underscore). Maybe this isn't a bad > assumption on Mac OS X Server? Second it assumes the existence of database > user "caldav" and database "caldav". Unfortunately I'd already committed to > 'caldavd' (trailing 'd') being the username and group for the daemon so that > didn't work either.
See the 'database connectivity' section in this document: http://trac.calendarserver.org/wiki/MultiServerDeployment Basically you just need to set the postgres DSN as appropriate for your setup. Cheers, -dre > > I went into the Python file and changed those. Then it assumed that the SQL > script that it needed to execute was located at > /usr/share/caldavd/lib/python/.../current.sql. However, when I installed > calendarserver using ./run -i that's not where it put the SQL script! It put > it in /usr/local/lib/python2.7/dist-packages/.../current.sql. I ended up > quitting at this point and logged into PostgresSQL as the caldavd user and > manually executed the SQL script. > > Finally I was able to get calendarserver fully running *without SSL > encryption*. When I went to enable SSL, I seem to have tripped over some > crazy bug in the twisted framework. I didn't dig too deep but in Twisted > 11.0.0 there's a file internet/tcp.py. In the Connection class there's an "if > SSL:" and then a bunch of functions. Inside _startTLS there's a line: > > self.fileno = self.socket.fileno > > This line asserts. I don't really know why. Something about > OpenSSH.SSL.Connection doesn't have attribute 'fileno'. Anyway, I gave up at > this point, locked the unencrypted calendarserver to localhost and wrapped it > in stunnel4. That seems to work. That line doesn't seem to exist in Twisted > 10.x or even in 11.1.0 so I'm guessing it was a problem. > > Thanks for the help. > > Jim > > On Tue, Dec 27, 2011 at 7:10 PM, Andre LaBranche <d...@apple.com> wrote: > Forgot to cc the list... See quoted text for answers :) > > -dre > > Sent from my iPhone > > On Dec 27, 2011, at 6:34 PM, Andre LaBranche <d...@apple.com> wrote: > >> We only provision schema if we spawn Postgres. To use an externally managed >> DB, provision schema with calendarserver_bootstrap_database. >> >> Cheers, >> -dre >> >> Sent from my iPhone >> >> On Dec 27, 2011, at 4:33 PM, Jim J <jahose...@gmail.com> wrote: >> >>> Andre, >>> >>> Thanks! That's a very useful link actually. I've been trying to figure out >>> what all the options are. For some reason it didn't catch my attention >>> during my 'grep's. That fixes all the above problems, I can even use -u and >>> -g now. >>> >>> Next problem: >>> I created the caldavd user in PostgreSQL and created the caldavd database >>> (I'm using -u caldavd -g caldavd again). I noticed this connects to the >>> database using the caldavd user. Now I get this error: >>> >>> 2011-12-27 16:17:47-0500 [-] >>> [txdav.common.datastore.util.UpgradeDatabaseSchemaService#warn] Beginning >>> database schema check. >>> 2011-12-27 16:17:47-0500 [-] >>> [txdav.common.datastore.util.UpgradeDatabaseSchemaService#warn] Required >>> schema version: 3. >>> 2011-12-27 16:17:47-0500 [-] Unhandled error in Deferred: >>> 2011-12-27 16:17:47-0500 [-] Unhandled Error >>> Traceback (most recent call last): >>> File >>> "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 388, in >>> errback >>> self._startRunCallbacks(fail) >>> File >>> "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 455, in >>> _startRunCallbacks >>> self._runCallbacks() >>> File >>> "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 542, in >>> _runCallbacks >>> current.result = callback(current.result, *args, **kw) >>> File >>> "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1076, in >>> gotResult >>> _inlineCallbacks(r, g, deferred) >>> --- <exception caught here> --- >>> File >>> "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1018, in >>> _inlineCallbacks >>> result = result.throwExceptionIntoGenerator(g) >>> File >>> "/usr/lib/python2.7/dist-packages/twisted/python/failure.py", line 350, in >>> throwExceptionIntoGenerator >>> return g.throw(self.type, self.value, self.tb) >>> File >>> "/usr/local/lib/python2.7/dist-packages/txdav/common/datastore/util.py", >>> line 271, in doUpgrade >>> actual_version = yield sqlTxn.schemaVersion() >>> File >>> "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1018, in >>> _inlineCallbacks >>> result = result.throwExceptionIntoGenerator(g) >>> File >>> "/usr/lib/python2.7/dist-packages/twisted/python/failure.py", line 350, in >>> throwExceptionIntoGenerator >>> return g.throw(self.type, self.value, self.tb) >>> File >>> "/usr/local/lib/python2.7/dist-packages/txdav/common/datastore/sql.py", >>> line 233, in schemaVersion >>> result = yield self._schemaVersion.on(self) >>> File >>> "/usr/local/lib/python2.7/dist-packages/twext/internet/threadutils.py", >>> line 64, in _oneWorkUnit >>> result = instruction() >>> File >>> "/usr/local/lib/python2.7/dist-packages/twext/enterprise/adbapi2.py", line >>> 155, in <lambda> >>> lambda : self._reallyExecSQL(*args, **kw) >>> File >>> "/usr/local/lib/python2.7/dist-packages/twext/enterprise/adbapi2.py", line >>> 136, in _reallyExecSQL >>> result = self._reallyExecSQL(sql, args, raiseOnZeroRowCount) >>> File >>> "/usr/local/lib/python2.7/dist-packages/twext/enterprise/adbapi2.py", line >>> 130, in _reallyExecSQL >>> self._cursor.execute(sql, args) >>> File >>> "/usr/local/lib/python2.7/dist-packages/txdav/base/datastore/dbapiclient.py", >>> line 76, in execute >>> self.realCursor.execute(sql, args) >>> File "/usr/local/lib/python2.7/dist-packages/pgdb.py", line 259, >>> in execute >>> self.executemany(operation, (params,)) >>> File "/usr/local/lib/python2.7/dist-packages/pgdb.py", line 289, >>> in executemany >>> raise DatabaseError("error '%s' in '%s'" % (msg, sql)) >>> pg.DatabaseError: error 'ERROR: relation "calendarserver" does not >>> exist >>> LINE 1: select VALUE from CALENDARSERVER where NAME = 'VERSION' >>> ^ >>> ' in 'select VALUE from CALENDARSERVER where NAME = 'VERSION'' >>> >>> >>> I would have expected calendarserver to set up its own tables/schema (as it >>> appears to be attempting to do). Can I force it to rebuild the database? >>> >>> Thanks, >>> >>> Jim >>> >>> On Tue, Dec 27, 2011 at 1:40 PM, Andre LaBranche <d...@apple.com> wrote: >>> Hi, >>> >>> Try setting UseDatabase to Postgres, as described here: >>> http://trac.calendarserver.org/browser/CalendarServer/tags/release/CalendarServer-3.1/twistedcaldav/stdconfig.py >>> >>> You will also need to specify DSN which tells calendar server how to >>> connect to postgres. >>> >>> You can also set ServerEnabled to false for memcached to keep calendar >>> server from spawning memcached. >>> >>> I can provide examples once I get back home to a real machine... >>> >>> Cheers, >>> -dre >>> >>> Sent from my iPhone >>> >>> On Dec 27, 2011, at 1:21 PM, Jim J <jahose...@gmail.com> wrote: >>> >>>> All, >>>> >>>> I'm quite new to this calendarserver thing. I'm trying to set up 3.1 (from >>>> tags/releases in Subversion) on a 64-bit Ubuntu 11.10 server installation. >>>> It's been a disaster. I was able to run calendarserver from the SVN >>>> directory using ./run and then I "installed" it using ./run -i. That's >>>> where things went bad. Some issues I've worked around, but I'd like to get >>>> good solutions for. Currently I'm stuck trying to figure out what's going >>>> on with PostgreSQL. Perhaps you guys can clue me in on how to properly fix >>>> the following issues. >>>> >>>> This is how I'm currently executing caldavd. Once it works I'll put it >>>> into init.d and run it as a proper server. The () are because I *was* >>>> running with those flags (see part 1) and have given up on them. >>>> >>>> sudo caldavd -X -L -f <path to caldavd.plist file> (-u caldavd -g caldavd) >>>> >>>> 1. As I understand it, it is good practice to run Linux services that are >>>> exposed to the internet as a restricted user. Given that and existence of >>>> the -u and -g flags for caldavd, I figured those flags would be the right >>>> way to do things. That doesn't work at all. >>>> >>>> The first problem is that caldavd wants to write to >>>> /var/run/ccs_postgresql_xxxxx which it can't do because /var belongs to >>>> root and it attempts to do this after the setuid() call to become the >>>> caldavd user. So, I went into caldavd.plist and changed the "DataRoot" to >>>> a different directory and gave it to caldavd:caldavd. >>>> >>>> Then I tried again. This time it failed because it appears that >>>> calendarserver attempts to start postgresql whether or not the postgresql >>>> service is already running on the local box. To do this, it tries to >>>> setuid() again, this time to ROOT! If the entire point of setting a user >>>> for a service is to restrict it's privileges, why would one of those privs >>>> be to allow setuid to root? That makes no sense. >>>> >>>> So I gave up, now I'm trying to run it as root to see if the 3.1 release >>>> even functions. How do I make this server run as somebody other than root? >>>> >>>> 2. Running as root (without the -u and -g flags shown above) gets the >>>> application started and then it fails attempting to start memcached. I get >>>> the error "cannot listen on tcp port". This is because memcachd is a >>>> system service and is *already running*. Again, why is calendarserver >>>> attempting to start a service that's already running? >>>> >>>> So I stopped memcachd and tried again. >>>> >>>> 3. Calendarserver now successfully starts and connects to memcached but it >>>> cannot connect to postgresql. This I haven't yet worked around. I get the >>>> following error: >>>> 2011-12-27 12:43:11-0500 [-] [txdav.base.datastore.subpostgres#error] >>>> [Failure instance: Traceback: <class 'pg.InternalError'>: could not >>>> connect to server: No such file or directory >>>> Is the server running locally and accepting >>>> connections on Unix domain socket >>>> "/tmp/ccs_postgres_f5e263275ce7de576bd42ca08db4fc56/.s.PGSQL.5432"? >>>> >>>> >>>> /usr/lib/python2.7/dist-packages/twisted/internet/_baseprocess.py:60:maybeCallProcessEnded >>>> >>>> /usr/local/lib/python2.7/dist-packages/txdav/base/datastore/subpostgres.py:92:processEnded >>>> >>>> /usr/lib/python2.7/dist-packages/twisted/internet/defer.py:361:callback >>>> >>>> /usr/lib/python2.7/dist-packages/twisted/internet/defer.py:455:_startRunCallbacks >>>> --- <exception caught here> --- >>>> >>>> /usr/lib/python2.7/dist-packages/twisted/internet/defer.py:542:_runCallbacks >>>> >>>> /usr/local/lib/python2.7/dist-packages/txdav/base/datastore/subpostgres.py:367:gotReady >>>> >>>> /usr/local/lib/python2.7/dist-packages/txdav/base/datastore/subpostgres.py:269:ready >>>> >>>> /usr/local/lib/python2.7/dist-packages/txdav/base/datastore/subpostgres.py:261:produceConnection >>>> >>>> /usr/local/lib/python2.7/dist-packages/txdav/base/datastore/dbapiclient.py:196:connect >>>> /usr/local/lib/python2.7/dist-packages/pgdb.py:482:connect >>>> ] >>>> >>>> Here I'm stuck. Quite clearly calendarserver is expecting to launch the >>>> postgresql service (which, again, doesn't make sense to me), but then it >>>> can't connect when it does. Well, at least I'm assuming calendarserver >>>> successfully launches postgresql because I don't get the setuid() error I >>>> got in part 1 when it tries to setuid() to root in order to launch >>>> postgresql. I can't figure out how to fix this. Any thoughts? >>>> >>>> Thanks for the help, >>>> >>>> Jim >>>> _______________________________________________ >>>> calendarserver-users mailing list >>>> calendarserver-users@lists.macosforge.org >>>> http://lists.macosforge.org/mailman/listinfo.cgi/calendarserver-users >>> > > _______________________________________________ > calendarserver-users mailing list > calendarserver-users@lists.macosforge.org > http://lists.macosforge.org/mailman/listinfo.cgi/calendarserver-users > >
_______________________________________________ calendarserver-users mailing list calendarserver-users@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/calendarserver-users