unsubscribe

Michael Nawrocki

On Dec 28, 2011, at 3:35 PM, calendarserver-users-requ...@lists.macosforge.org 
wrote:

> Send calendarserver-users mailing list submissions to
>       calendarserver-users@lists.macosforge.org
> 
> To subscribe or unsubscribe via the World Wide Web, visit
>       http://lists.macosforge.org/mailman/listinfo.cgi/calendarserver-users
> or, via email, send a message with subject or body 'help' to
>       calendarserver-users-requ...@lists.macosforge.org
> 
> You can reach the person managing the list at
>       calendarserver-users-ow...@lists.macosforge.org
> 
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of calendarserver-users digest..."
> 
> 
> Today's Topics:
> 
>   1. Re: CalendarServer 3.1 on Ubuntu 11.10 Server (Andre LaBranche)
> 
> 
> ----------------------------------------------------------------------
> 
> Message: 1
> Date: Wed, 28 Dec 2011 12:35:18 -0800
> From: Andre LaBranche <d...@apple.com>
> To: Jim J <jahose...@gmail.com>
> Cc: "calendarserver-users@lists.macosforge.org"
>       <calendarserver-users@lists.macosforge.org>
> Subject: Re: [CalendarServer-users] CalendarServer 3.1 on Ubuntu 11.10
>       Server
> Message-ID: <02f5e819-d3a3-4ef3-80c3-06b00017f...@apple.com>
> Content-Type: text/plain; charset="us-ascii"
> 
> 
> 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
>> 
>> 
> 
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: 
> <http://lists.macosforge.org/pipermail/calendarserver-users/attachments/20111228/13bf2932/attachment.html>
> 
> ------------------------------
> 
> _______________________________________________
> calendarserver-users mailing list
> calendarserver-users@lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/calendarserver-users
> 
> 
> End of calendarserver-users Digest, Vol 65, Issue 13
> ****************************************************

_______________________________________________
calendarserver-users mailing list
calendarserver-users@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/calendarserver-users

Reply via email to