From fec7370c09b55b9983eb5adf08c2be501b3f7aaa Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Mon, 2 Apr 2018 10:26:55 +0200 Subject: [PATCH 01/19] moving from submodules to fork --- .dockerignore | 23 + Dockerfile | 46 + docker/README.md | 9 + docker/caldavd.plist.template | 2264 +++++++++++++++++++++++++++++++++ docker/docker_cmd.sh | 19 + 5 files changed, 2361 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker/README.md create mode 100644 docker/caldavd.plist.template create mode 100755 docker/docker_cmd.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..ea12c04f0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,23 @@ +*.egg-info/ +*.o +*.py[co] +*.so +_trial_temp*/ +build/ +dropin.cache +*~ +*.lock +.git +.gitignore +.gitmodules +*.pyc +.develop/ +data/ +bin/calendarserver_* +calendarserver/version.py +conf/caldavd-dev.plist +subprojects/ +_run/ + +# Otherwise any change to the Dockerfile itself means a complete rebuild +Dockerfile \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..4553f92ab --- /dev/null +++ b/Dockerfile @@ -0,0 +1,46 @@ +FROM ubuntu:16.04 + +LABEL maintainer "giorgio.azzinnaro@gmail.com" +LABEL io.openshift.tags caldavd,ccs +LABEL io.openshift.wants memcached,postgres +LABEL io.k8s.description "Calendar and Contacts Server is a CalDAV implementation" + +# Straight from CCS GitHub install guide +# except for gettext-base, which we need for "envsubst" +RUN apt-get update && \ + apt-get -y install build-essential \ + python-setuptools python-pip python-dev \ + git curl gettext-base \ + libssl-dev libreadline6-dev libkrb5-dev libffi-dev \ + libldap2-dev libsasl2-dev zlib1g-dev + +# All of the source code is in here +ADD . /home/ccs + +WORKDIR /home/ccs + +# Dependencies are retrieved and CCS installed in /usr/local +RUN pip install -r requirements-default.txt + +# TODO Check if everything is in this dir +VOLUME [ "/var/db/caldavd" ] + +# This can be edited in docker/caldavd.plist.template > HTTPPort +EXPOSE 8080 + +# Some sensible defaults for config +ENV POSTGRES_HOST tcp:postgres:5432 +ENV POSTGRES_DB postgres +ENV POSTGRES_USER postgres +ENV POSTGRES_PASS password + +ENV MEMCACHED_HOST memcached +ENV MEMCACHED_PORT 11211 + +# To avoid errors with OpenShift +#USER 1000 + +# This entry point simply creates /etc/caldavd/caldavd.plist, +# using the given ENV as placeholders, +# and then runs `caldavd -X -L` +CMD [ "/home/ccs/docker/docker_cmd.sh" ] \ No newline at end of file diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 000000000..cdfb99eef --- /dev/null +++ b/docker/README.md @@ -0,0 +1,9 @@ +# CCS dockerised + +This container of [Calendar and Contacts Server](https://github.com/apple/ccs-calendarserver/) +is thought to be run in production (in Kubernetes or OpenShift). + +It uses `setup.py` and expects external __Postgres__ and __Memcached__. + +__Postgres__ schema must be manually defined during the first run, +using [current.sql](https://github.com/apple/ccs-calendarserver/blob/master/txdav/common/datastore/sql_schema/current.sql). \ No newline at end of file diff --git a/docker/caldavd.plist.template b/docker/caldavd.plist.template new file mode 100644 index 000000000..ed19ded8c --- /dev/null +++ b/docker/caldavd.plist.template @@ -0,0 +1,2264 @@ + + + + + + + + + + + ServerHostName + + + + + HTTPPort + 8080 + + + SSLPort + 0 + + + EnableSSL + + + + BehindTLSProxy + + + + RedirectHTTPToHTTPS + + + + SSLMethod + SSLv23_METHOD + + SSLCiphers + RC4-SHA:HIGH:!ADH + + + StrictTransportSecuritySeconds + 604800 + + + + SocketFiles + + Enabled + + + + Secured + secured.sock + + + Unsecured + unsecured.sock + + Owner + + + Group + + + Permissions + 504 + + + SocketRoot + /tmp/calendarserver + + + BindAddresses + + + + + BindHTTPPorts + + + + + BindSSLPorts + + + + + InheritFDs + + + + + InheritSSLFDs + + + + + UseMetaFD + + + + MetaFD + 0 + + + + + UseDatabase + + + + DBType + postgres + + + DBFeatures + + skip-locked + + + + + + + DatabaseConnection + + + endpoint + $POSTGRES_HOST + + + + database + $POSTGRES_DB + + + + user + $POSTGRES_USER + + + + password + $POSTGRES_PASS + + + + ssl + + + + + SharedConnectionPool + + + + DBAMPFD + 0 + + + FailIfUpgradeNeeded + + + + CheckExistingSchema + + + + UpgradeHomePrefix + + + + TransactionTimeoutSeconds + 300 + + + TransactionHTTPRetrySeconds + 300 + + + + WorkQueue + + + queuePollInterval + 0.1 + + + queueOverdueTimeout + 300 + + + queuePollingBackoff + + + 60 + 60 + + + 5 + 1 + + + + + overloadLevel + 95 + + + highPriorityLevel + 80 + + + mediumPriorityLevel + 50 + + + rowLimit + 1 + + + failureRescheduleInterval + 60 + + + lockRescheduleInterval + 60 + + + workParameters + + + + + + + + EnableCalDAV + + + + EnableCardDAV + + + + MigrationOnly + + + + + + ServerRoot + /var/db/caldavd + + + DataRoot + Data + + + DatabaseRoot + Database + + + AttachmentsRoot + Attachments + + + DocumentRoot + Documents + + + ConfigRoot + Config + + + LogRoot + /var/log/caldavd + + + RunRoot + /var/run/caldavd + + + WebCalendarRoot + /Applications/Server.app/Contents/ServerRoot/usr/share/collabd/webcal/public + + + + + + UserQuota + 104857600 + + + MaximumAttachmentSize + 10485760 + + + MaximumAttachmentsPerInstance + 5 + + + + MaxCollectionsPerHome + 50 + + + MaxResourcesPerCollection + 10000 + + + MaxResourceSize + 1048576 + + + MaxAttendeesPerInstance + 100 + + + MaxAllowedInstances + 3000 + + + WebCalendarAuthPath + + + + Aliases + + + + + + DirectoryService + + Enabled + + + type + xml + + params + + recordTypes + + users + groups + + + xmlFile + accounts.xml + + + + DirectoryRealmName + + + + DirectoryFilterStartsWith + + + + + ResourceService + + Enabled + + + type + xml + + params + + recordTypes + + locations + resources + addresses + + + xmlFile + resources.xml + + + + + + AugmentService + + type + xml + + params + + xmlFiles + + + + statSeconds + 15 + + + + + + + ProxyLoadFromFile + + + + + + AdminPrincipals + + + + + ReadPrincipals + + + + + EnableProxyPrincipals + + + + + + EnableAnonymousReadRoot + + + + EnableAnonymousReadNav + + + + EnablePrincipalListings + + + + EnableMonolithicCalendars + + + + + + RejectClients + + + + + + Authentication + + + Basic + + Enabled + + + + AllowedOverWireUnencrypted + + + + + Digest + + Enabled + + + Algorithm + md5 + + Qop + + + + AllowedOverWireUnencrypted + + + + + Kerberos + + Enabled + + + ServicePrincipal + + + + AllowedOverWireUnencrypted + + + + + ClientCertificate + + Enabled + + + + AllowedOverWireUnencrypted + + + + Required + + + + CAFiles + + + + + SendCAsToClient + + + + Wiki + + Enabled + + + Cookie + cc.collabd_session_guid + + EndpointDescriptor + unix:path=/var/run/collabd + + + + + + + AccessLogFile + access.log + + + ErrorLogFile + error.log + + + AgentLogFile + agent.log + + + UtilityLogFile + utility.log + + + ErrorLogEnabled + + + + ErrorLogRotateMB + 10 + + + ErrorLogMaxRotatedFiles + 5 + + + ErrorLogRotateOnStart + + + PIDFile + caldavd.pid + + RotateAccessLog + + + EnableExtendedAccessLog + + + EnableExtendedTimingAccessLog + + + + DefaultLogLevel + + + + LogLevels + + + + + LogID + + + AccountingCategories + + + HTTP + + + + iTIP + + + + iTIP-VFREEBUSY + + + + Implicit Errors + + + + AutoScheduling + + + + iSchedule + + + + xPod + + + + Invalid Instance + + + + migration + + + + AccountingPrincipals + + + + + AccountingLogRoot + accounting + + Stats + + EnableUnixStatsSocket + + + UnixStatsSocket + caldavd-stats.sock + + EnableTCPStatsSocket + + + TCPStatsPort + 8100 + + + LogDatabase + + LabelsInSQL + + + Statistics + + + StatisticsLogFile + sqlstats.log + + SQLStatements + + + TransactionWaitSeconds + 0 + + + + + + SSLCertificate + + + + SSLPrivateKey + + + + SSLAuthorityChain + + + SSLPassPhraseDialog + /etc/apache2/getsslpassphrase + + SSLCertAdmin + /Applications/Server.app/Contents/ServerRoot/usr/sbin/certadmin + + + SSLKeychainIdentity + + + + + + UserName + + + GroupName + + + + ProcessType + Combined + + MultiProcess + + ProcessCount + 0 + + MinProcessCount + 2 + + PerCPU + 1 + + PerGB + 1 + + StaggeredStartup + + Enabled + + + Interval + 15 + + + + + MemoryLimiter + + Enabled + + + + Seconds + 60 + + + Bytes + 2147483648 + + + ResidentOnly + + + + + EnableSACLs + + + + EnableReadOnlyServer + + + + + + EnableAddMember + + + + EnableSyncReport + + + + EnableSyncReportHome + + + + EnableConfigSyncToken + + + + EnableWellKnown + + + + EnableCalendarQueryExtended + + + + EnableManagedAttachments + + + + EnableServerInfo + + + + + + EnableJSONData + + + + + + EnableDropBox + + + + EnablePrivateEvents + + + + EnableTimezoneService + + + + TimezoneService + + + Enabled + + + + URI + /stdtimezones + + + Mode + primary + + + BasePath + + + + XMLInfoPath + + + + PrettyPrintJSON + + + SecondaryService + + + + Host + + + + URI + + + UpdateIntervalMinutes + 1440 + + + + + EnableTimezonesByReference + + + + UsePackageTimezones + + + + EnableBatchUpload + + + + MaxResourcesBatchUpload + 100 + + + MaxBytesBatchUpload + 10485760 + + Sharing + + + Enabled + + + + AllowExternalUsers + + + Calendars + + + Enabled + + + IgnorePerUserProperties + + X-APPLE-STRUCTURED-LOCATION + + + CollectionProperties + + Shadowable + + {urn:ietf:params:xml:ns:caldav}calendar-description + + + ProxyOverride + + {urn:ietf:params:xml:ns:caldav}calendar-description + {com.apple.ical:}calendarcolor + {http://apple.com/ns/ical/}calendar-color + {http://apple.com/ns/ical/}calendar-order + + + Global + + + + + Groups + + + Enabled + + + ReconciliationDelaySeconds + 5 + + + + AddressBooks + + + Enabled + + + CollectionProperties + + Shadowable + + {urn:ietf:params:xml:ns:carddav}addressbook-description + + + ProxyOverride + + + + Global + + + + + Groups + + + Enabled + + + + + + + RestrictCalendarsToOneComponentType + + + + SupportedComponents + + VEVENT + VTODO + + + + EnableTrashCollection + + + + ExposeTrashCollection + + + + ParallelUpgrades + + + + MergeUpgrades + + + + EnableDefaultAlarms + + + + RemoveDuplicateAlarms + + + + RemoveDuplicatePrivateComments + + + HostedStatus + + + Enabled + + + Parameter + X-APPLE-HOSTED-STATUS + + Values + + local + + + external + EXTERNAL + + + + RevisionCleanup + + Enabled + + + + SyncTokenLifetimeDays + 14.0 + + + CleanupPeriodDays + 2.0 + + + InboxCleanup + + Enabled + + + + ItemLifetimeDays + 14.0 + + + CleanupPeriodDays + 2.0 + + + StartDelaySeconds + 300 + + + StaggerSeconds + 0.5 + + + InboxRemoveWorkThreshold + 5 + + + RemovalStaggerSeconds + 0.5 + + + + DirectoryAddressBook + + Enabled + + + type + opendirectory + + params + + queryPeopleRecords + + + peopleNode + /Search/Contacts + + queryUserRecords + + + userNode + /Search/Contacts + + maxDSQueryRecords + 0 + + queryDSLocal + + + ignoreSystemRecords + + + dsLocalCacheTimeout + 30 + + liveQuery + + + fakeETag + + + cacheQuery + + + cacheTimeout + 30 + + standardizeSyntheticUIDs + + + addDSAttrXProperties + + + appleInternalServer + + + additionalAttributes + + + + allowedAttributes + + + + + name + directory + + MaxQueryResults + 1000 + + + + EnableSearchAddressBook + + + + AnonymousDirectoryAddressBookAccess + + + + + + EnableWebAdmin + + + + EnableControlAPI + + + + + Scheduling + + CalDAV + + + EmailDomain + + + + HTTPDomain + + + + AddressPatterns + + + + + OldDraftCompatibility + + + + ScheduleTagCompatibility + + + + EnablePrivateComments + + + + PerAttendeeProperties + + X-APPLE-NEEDS-REPLY + X-APPLE-TRAVEL-DURATION + X-APPLE-TRAVEL-START + X-APPLE-TRAVEL-RETURN-DURATION + X-APPLE-TRAVEL-RETURN + + + + OrganizerPublicProperties + + X-APPLE-DROPBOX + X-APPLE-STRUCTURED-LOCATION + + + + OrganizerPublicParameters + + + + + AttendeePublicProperties + + + + + AttendeePublicParameters + + + + + iSchedule + + + Enabled + + + + AddressPatterns + + + + + RemoteServers + remoteservers.xml + + + SerialNumber + 1 + + + DNSDebug + + + + DKIM + + + Enabled + + + + Domain + + + + KeySelector + ischedule + + + SignatureAlgorithm + rsa-sha256 + + + UseDNSKey + + + + UseHTTPKey + + + + UsePrivateExchangeKey + + + + ExpireSeconds + 3600 + + + PrivateKeyFile + + + + PublicKeyFile + + + + PrivateExchanges + + + + ProtocolDebug + + + + + iMIP + + + Enabled + + + Sending + + + Server + + + + Port + 587 + + + Address + + + UseSSL + + + + Username + + + + Password + + + + SuppressionDays + 7 + + + Receiving + + + Server + + + + Port + 0 + + UseSSL + + + + Type + + + + PollingSeconds + 30 + + + Username + + + + Password + + + + + AddressPatterns + + + + + MailTemplatesDirectory + /Applications/Server.app/Contents/ServerRoot/usr/share/caldavd/share/email_templates + + + MailIconsDirectory + /Applications/Server.app/Contents/ServerRoot/usr/share/caldavd/share/date_icons + + + InvitationDaysToLive + 90 + + + Options + + + AllowGroupAsOrganizer + + + + AllowLocationAsOrganizer + + + + AllowResourceAsOrganizer + + + + AllowLocationWithoutOrganizer + + + + AllowResourceWithoutOrganizer + + + + TrackUnscheduledLocationData + + + + TrackUnscheduledResourceData + + + + FakeResourceLocationEmail + + + + LimitFreeBusyAttendees + 30 + + + AttendeeRefreshBatch + 5 + + + AttendeeRefreshCountLimit + 50 + + + UIDLockTimeoutSeconds + 60 + + + UIDLockExpirySeconds + 300 + + + PrincipalHostAliases + + + + + TimestampAttendeePartStatChanges + + + + DelegeteRichFreeBusy + + + + RoomResourceRichFreeBusy + + + AutoSchedule + + + Enabled + + + + Always + + + + AllowUsers + + + + DefaultMode + automatic + + + FutureFreeBusyDays + 1095 + + + WorkQueues + + + Enabled + + + + RequestDelaySeconds + 5 + + + ReplyDelaySeconds + 1 + + + AutoReplyDelaySeconds + 5 + + + AttendeeRefreshBatchDelaySeconds + 5 + + + AttendeeRefreshBatchIntervalSeconds + 5 + + + TemporaryFailureDelay + 60 + + + MaxTemporaryFailures + 10 + + + + + Splitting + + + Enabled + + + + Size + 102400 + + + PastDays + 14 + + + Delay + 60 + + + + + FreeBusyURL + + + Enabled + + + + TimePeriod + 14 + + + AnonymousAccess + + + + + + Notifications + + Enabled + + + CoalesceSeconds + 3 + + Services + + APNS + + Enabled + + + SubscriptionURL + apns + + + SubscriptionRefreshIntervalSeconds + 172800 + + + SubscriptionPurgeIntervalSeconds + 43200 + + + SubscriptionPurgeSeconds + 1209600 + + ProviderHost + gateway.push.apple.com + + ProviderPort + 2195 + + FeedbackHost + feedback.push.apple.com + + FeedbackPort + 2196 + + + FeedbackUpdateSeconds + 28800 + + Environment + PRODUCTION + + EnableStaggering + + + StaggerSeconds + 3 + + CalDAV + + Enabled + + + CertificatePath + Certificates/apns:com.apple.calendar.cert.pem + + PrivateKeyPath + Certificates/apns:com.apple.calendar.key.pem + + AuthorityChainPath + Certificates/apns:com.apple.calendar.chain.pem + + Passphrase + + + KeychainIdentity + apns:com.apple.calendar + + Topic + + + + CardDAV + + Enabled + + + CertificatePath + Certificates/apns:com.apple.contact.cert.pem + + PrivateKeyPath + Certificates/apns:com.apple.contact.key.pem + + AuthorityChainPath + Certificates/apns:com.apple.contact.chain.pem + + Passphrase + + + KeychainIdentity + apns:com.apple.contact + + Topic + + + + + AMP + + Enabled + + + Port + 62311 + + EnableStaggering + + + StaggerSeconds + 3 + + + + + DirectoryProxy + + Enabled + + + SocketPath + directory-proxy.sock + + InSidecarCachingSeconds + 120 + + + DirectoryCaching + + + CachingSeconds + 60 + + NegativeCachingEnabled + + + + LookupsBetweenPurges + 10000 + + + + + Servers + + + Enabled + + + + ConfigFile + localservers.xml + + + MaxClients + 5 + + + InboxName + podding + + + ConduitName + conduit + + + + + + MaxRequests + 3 + + MaxAccepts + 1 + + + MaxDBConnectionsPerPool + 10 + + ListenBacklog + 2024 + + + IncomingDataTimeOut + 60 + + + PipelineIdleTimeOut + 15 + + + IdleConnectionTimeOut + 360 + + + CloseConnectionTimeOut + 15 + + UIDReservationTimeOut + 1800 + + MaxMultigetWithDataHrefs + 5000 + + MaxQueryWithDataResults + 1000 + + + MaxPrincipalSearchReportResults + 500 + + + PrincipalSearchReportTimeout + 10 + + + + ClientFixes + + ForceAttendeeTRANSP + + iOS/8\\.0(\\..*)? + iOS/8\\.1(\\..*)? + iOS/8\\.2(\\..*)? + + + + + + Localization + + TranslationsDirectory + /Applications/Server.app/Contents/ServerRoot/usr/share/caldavd/share/translations + + + LocalesDirectory + locales + + Language + + + + + + + Twisted + + reactor + select + + + + umask + 18 + + + ControlPort + 0 + + + ControlSocket + caldavd.sock + + + ResponseCompression + + + + HTTPRetryAfter + 180 + + + Profiling + + Enabled + + + BaseDirectory + /tmp/stats + + + Memcached + + MaxClients + 5 + + Pools + + Default + + + MemcacheSocket + + + ClientEnabled + + + + ServerEnabled + + + BindAddress + $MEMCACHED_HOST + + + Port + $MEMCACHED_PORT + + + + HandleCacheTypes + + Default + + + + + + + + memcached + memcached + + + MaxMemory + 0 + + Options + + + + ProxyDBKeyNormalization + + + + Postgres + + DatabaseName + caldav + + ClusterName + cluster + + LogFile + postgres.log + + LogRotation + + + SocketDirectory + + + SocketName + + + ListenAddresses + + + + + TxnTimeoutSeconds + 30 + + + SharedBuffers + 0 + + + MaxConnections + 0 + + + ExtraConnections + 3 + + BuffersToConnectionsRatio + 1.5 + + Options + + -c standard_conforming_strings=on + + + + Ctl + pg_ctl + + + Init + initdb + + + QueryCaching + + Enabled + + + MemcachedPool + Default + + ExpireSeconds + 3600 + + + GroupCaching + + Enabled + + + UpdateSeconds + 300 + + UseDirectoryBasedDelegates + + + InitialSchedulingDelaySeconds + 10 + + BatchSize + 100 + + BatchSchedulingIntervalSeconds + 2 + + + GroupAttendees + + Enabled + + + ReconciliationDelaySeconds + 5 + + + AutoUpdateSecondsFromNow + 3600 + + + AutomaticPurging + + Enabled + + + + PollingIntervalSeconds + 604800 + + + CheckStaggerSeconds + 0 + + + PurgeIntervalSeconds + 604800 + + HomePurgeDelaySeconds + 60 + + + GroupPurgeIntervalSeconds + 604800 + + + Manhole + + Enabled + + + + UseSSH + + + + StartingPortNumber + 5000 + + + DPSPortNumber + 4999 + + + PasswordFilePath + + + + sshKeyName + manhole.key + + sshKeySize + 4096 + + + EnableKeepAlive + + + EnableResponseCache + + + + ResponseCacheTimeout + 30 + + EnableFreeBusyCache + + + FreeBusyCacheDaysBack + 7 + + FreeBusyCacheDaysForward + 84 + + FreeBusyIndexLowerLimitDays + 365 + + FreeBusyIndexExpandAheadDays + 365 + + FreeBusyIndexExpandMaxDays + 1825 + + FreeBusyIndexDelayedExpand + + + FreeBusyIndexSmartUpdate + + + + RootResourcePropStoreClass + txweb2.dav.xattrprops.xattrPropertyStore + + + UtilityServiceClass + + + + MigratedInboxDaysCutoff + 60 + + + DefaultTimezone + + + + AgentInactivityTimeoutSeconds + 300 + + + ServiceDisablingProgram + + + + AlertPostingProgram + + + + + + ImportConfig + + + + Includes + + + + + WritableConfigFile + + + diff --git a/docker/docker_cmd.sh b/docker/docker_cmd.sh new file mode 100755 index 000000000..28804aa16 --- /dev/null +++ b/docker/docker_cmd.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +# Just get our conf file +TEMP_FILE="/home/ccs/docker/caldavd.plist.template" + +# It is important that this dir is world-writable, +# /tmp usually is +CONF_FILE="/tmp/caldavd.plist" + +# Replace any env variable as they come from docker run +envsubst < $TEMP_FILE > $CONF_FILE + +# TODO Evaluate performance issues +# This is because the random user picked by OpenShift +# is not allowed to write/mkdir __pycache__ +export PYTHONDONTWRITEBYTECODE=x + +# Run caldavd, no daemonize, log to stdout +caldavd -X -L -f $CONF_FILE From 885143149c91045d5f9ad2b264d8ad37d6e39f6c Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Mon, 2 Apr 2018 11:09:14 +0200 Subject: [PATCH 02/19] try to run with another user --- Dockerfile | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4553f92ab..d03be9436 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,10 @@ FROM ubuntu:16.04 -LABEL maintainer "giorgio.azzinnaro@gmail.com" -LABEL io.openshift.tags caldavd,ccs -LABEL io.openshift.wants memcached,postgres -LABEL io.k8s.description "Calendar and Contacts Server is a CalDAV implementation" +LABEL maintainer "giorgio.azzinnaro@gmail.com" +LABEL io.openshift.tags caldavd,ccs +LABEL io.openshift.wants memcached,postgres +LABEL io.k8s.description "Calendar and Contacts Server is a CalDAV implementation" +LABEL io.openshift.expose-services 8080:http # Straight from CCS GitHub install guide # except for gettext-base, which we need for "envsubst" @@ -20,7 +21,11 @@ ADD . /home/ccs WORKDIR /home/ccs # Dependencies are retrieved and CCS installed in /usr/local -RUN pip install -r requirements-default.txt +RUN pip install -r requirements-default.txt + +# Create all runtime directories and ensure right permissions for OC +RUN mkdir -p /var/db/caldavd /var/log/caldavd /var/run/caldavd && \ + chmod -R a+wX /home/ccs /var/db/caldavd /var/log/caldavd /var/run/caldavd # TODO Check if everything is in this dir VOLUME [ "/var/db/caldavd" ] @@ -37,8 +42,8 @@ ENV POSTGRES_PASS password ENV MEMCACHED_HOST memcached ENV MEMCACHED_PORT 11211 -# To avoid errors with OpenShift -#USER 1000 +# To avoid errors with OpenShift, could be any +USER 1000 # This entry point simply creates /etc/caldavd/caldavd.plist, # using the given ENV as placeholders, From bf320a376bdf8ee82e35f52c2beb515d165572e2 Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Mon, 2 Apr 2018 12:21:44 +0200 Subject: [PATCH 03/19] removed a few config layers from Dockerfile --- Dockerfile | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index d03be9436..c5a569f61 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,10 @@ FROM ubuntu:16.04 -LABEL maintainer "giorgio.azzinnaro@gmail.com" -LABEL io.openshift.tags caldavd,ccs -LABEL io.openshift.wants memcached,postgres -LABEL io.k8s.description "Calendar and Contacts Server is a CalDAV implementation" -LABEL io.openshift.expose-services 8080:http +LABEL maintainer = "giorgio.azzinnaro@gmail.com" \ + io.openshift.tags = caldavd,ccs \ + io.openshift.wants = memcached,postgres \ + io.k8s.description = "Calendar and Contacts Server is a CalDAV implementation" \ + io.openshift.expose-services = 8080:http4 # Straight from CCS GitHub install guide # except for gettext-base, which we need for "envsubst" @@ -34,13 +34,12 @@ VOLUME [ "/var/db/caldavd" ] EXPOSE 8080 # Some sensible defaults for config -ENV POSTGRES_HOST tcp:postgres:5432 -ENV POSTGRES_DB postgres -ENV POSTGRES_USER postgres -ENV POSTGRES_PASS password - -ENV MEMCACHED_HOST memcached -ENV MEMCACHED_PORT 11211 +ENV POSTGRES_HOST = tcp:postgres:5432 \ + POSTGRES_DB = postgres \ + POSTGRES_USER = postgres \ + POSTGRES_PASS = password \ + MEMCACHED_HOST = memcached \ + MEMCACHED_PORT = 11211 # To avoid errors with OpenShift, could be any USER 1000 From 0fa9a7e8aa5e21456f6f565988069e6774ef8105 Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Mon, 2 Apr 2018 19:42:15 +0200 Subject: [PATCH 04/19] using contrib/ directory --- Dockerfile | 2 +- {docker => contrib/docker}/README.md | 0 {docker => contrib/docker}/caldavd.plist.template | 0 {docker => contrib/docker}/docker_cmd.sh | 7 +------ 4 files changed, 2 insertions(+), 7 deletions(-) rename {docker => contrib/docker}/README.md (100%) rename {docker => contrib/docker}/caldavd.plist.template (100%) rename {docker => contrib/docker}/docker_cmd.sh (57%) diff --git a/Dockerfile b/Dockerfile index c5a569f61..7ad156282 100644 --- a/Dockerfile +++ b/Dockerfile @@ -47,4 +47,4 @@ USER 1000 # This entry point simply creates /etc/caldavd/caldavd.plist, # using the given ENV as placeholders, # and then runs `caldavd -X -L` -CMD [ "/home/ccs/docker/docker_cmd.sh" ] \ No newline at end of file +CMD [ "/home/ccs/contrib/docker/docker_cmd.sh" ] \ No newline at end of file diff --git a/docker/README.md b/contrib/docker/README.md similarity index 100% rename from docker/README.md rename to contrib/docker/README.md diff --git a/docker/caldavd.plist.template b/contrib/docker/caldavd.plist.template similarity index 100% rename from docker/caldavd.plist.template rename to contrib/docker/caldavd.plist.template diff --git a/docker/docker_cmd.sh b/contrib/docker/docker_cmd.sh similarity index 57% rename from docker/docker_cmd.sh rename to contrib/docker/docker_cmd.sh index 28804aa16..1157e0ed0 100755 --- a/docker/docker_cmd.sh +++ b/contrib/docker/docker_cmd.sh @@ -1,7 +1,7 @@ #!/bin/sh # Just get our conf file -TEMP_FILE="/home/ccs/docker/caldavd.plist.template" +TEMP_FILE="/home/ccs/contrib/docker/caldavd.plist.template" # It is important that this dir is world-writable, # /tmp usually is @@ -10,10 +10,5 @@ CONF_FILE="/tmp/caldavd.plist" # Replace any env variable as they come from docker run envsubst < $TEMP_FILE > $CONF_FILE -# TODO Evaluate performance issues -# This is because the random user picked by OpenShift -# is not allowed to write/mkdir __pycache__ -export PYTHONDONTWRITEBYTECODE=x - # Run caldavd, no daemonize, log to stdout caldavd -X -L -f $CONF_FILE From 429d08b6984b64392ee0706a56593cad529d2bbd Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Mon, 2 Apr 2018 22:56:50 +0200 Subject: [PATCH 05/19] relevant ldap config --- Dockerfile | 15 +++++++++------ contrib/docker/caldavd.plist.template | 15 ++++++++++++--- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7ad156282..ae389ffaa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,12 +34,15 @@ VOLUME [ "/var/db/caldavd" ] EXPOSE 8080 # Some sensible defaults for config -ENV POSTGRES_HOST = tcp:postgres:5432 \ - POSTGRES_DB = postgres \ - POSTGRES_USER = postgres \ - POSTGRES_PASS = password \ - MEMCACHED_HOST = memcached \ - MEMCACHED_PORT = 11211 +ENV POSTGRES_HOST = tcp:postgres:5432 \ + POSTGRES_DB = postgres \ + POSTGRES_USER = postgres \ + POSTGRES_PASS = password \ + MEMCACHED_HOST = memcached \ + MEMCACHED_PORT = 11211 \ + LDAP_URI = ldap://openldap \ + LDAP_DN = "cn=admin,dc=example,dc=org" \ + LDAP_PASS = admin # To avoid errors with OpenShift, could be any USER 1000 diff --git a/contrib/docker/caldavd.plist.template b/contrib/docker/caldavd.plist.template index ed19ded8c..a2ade19bc 100644 --- a/contrib/docker/caldavd.plist.template +++ b/contrib/docker/caldavd.plist.template @@ -400,7 +400,7 @@ type - xml + ldap params @@ -410,8 +410,17 @@ groups - xmlFile - accounts.xml + uri + $LDAP_URI + + credentials + + dn + $LDAP_DN + + password + $LDAP_PASS + From ae15a265c1c405711717db32dde66dc4a27bea15 Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Mon, 2 Apr 2018 23:02:26 +0200 Subject: [PATCH 06/19] fix issue with ENV in dockerfile --- Dockerfile | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index ae389ffaa..8833209d8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,15 +34,15 @@ VOLUME [ "/var/db/caldavd" ] EXPOSE 8080 # Some sensible defaults for config -ENV POSTGRES_HOST = tcp:postgres:5432 \ - POSTGRES_DB = postgres \ - POSTGRES_USER = postgres \ - POSTGRES_PASS = password \ - MEMCACHED_HOST = memcached \ - MEMCACHED_PORT = 11211 \ - LDAP_URI = ldap://openldap \ - LDAP_DN = "cn=admin,dc=example,dc=org" \ - LDAP_PASS = admin +ENV POSTGRES_HOST tcp:postgres:5432 +ENV POSTGRES_DB postgres +ENV POSTGRES_USER postgres +ENV POSTGRES_PASS password +ENV MEMCACHED_HOST memcached +ENV MEMCACHED_PORT 11211 +ENV LDAP_URI ldap://openldap +ENV LDAP_DN "cn=admin,dc=example,dc=org" +ENV LDAP_PASS admin # To avoid errors with OpenShift, could be any USER 1000 From 70424bd015909b60db0c80589cdb4c481a60f699 Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Sat, 14 Apr 2018 19:03:42 +0200 Subject: [PATCH 07/19] fixing issue with uid --- Dockerfile | 6 +++--- contrib/docker/docker_cmd.sh | 9 +++++++++ contrib/docker/passwd.template | 23 +++++++++++++++++++++++ 3 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 contrib/docker/passwd.template diff --git a/Dockerfile b/Dockerfile index 8833209d8..897d54f2b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,7 @@ LABEL maintainer = "giorgio.azzinnaro@gmail.com" RUN apt-get update && \ apt-get -y install build-essential \ python-setuptools python-pip python-dev \ - git curl gettext-base \ + git curl gettext-base libnss-wrapper \ libssl-dev libreadline6-dev libkrb5-dev libffi-dev \ libldap2-dev libsasl2-dev zlib1g-dev @@ -25,7 +25,7 @@ RUN pip install -r requirements-default.txt # Create all runtime directories and ensure right permissions for OC RUN mkdir -p /var/db/caldavd /var/log/caldavd /var/run/caldavd && \ - chmod -R a+wX /home/ccs /var/db/caldavd /var/log/caldavd /var/run/caldavd + chmod -R g+rwX /home/ccs /var/db/caldavd /var/log/caldavd /var/run/caldavd # TODO Check if everything is in this dir VOLUME [ "/var/db/caldavd" ] @@ -41,7 +41,7 @@ ENV POSTGRES_PASS password ENV MEMCACHED_HOST memcached ENV MEMCACHED_PORT 11211 ENV LDAP_URI ldap://openldap -ENV LDAP_DN "cn=admin,dc=example,dc=org" +ENV LDAP_DN cn=admin,dc=example,dc=org ENV LDAP_PASS admin # To avoid errors with OpenShift, could be any diff --git a/contrib/docker/docker_cmd.sh b/contrib/docker/docker_cmd.sh index 1157e0ed0..eda851036 100755 --- a/contrib/docker/docker_cmd.sh +++ b/contrib/docker/docker_cmd.sh @@ -1,5 +1,14 @@ #!/bin/sh +# This is because OpenShift runs with random UIDs, +# and ccs expects the UID to be in /etc/passwd +export USER_ID=$(id -u) +export GROUP_ID=$(id -g) +envsubst < "/home/ccs/contrib/docker/passwd.template" > /tmp/passwd +export LD_PRELOAD=libnss_wrapper.so +export NSS_WRAPPER_PASSWD=/tmp/passwd +export NSS_WRAPPER_GROUP=/etc/group + # Just get our conf file TEMP_FILE="/home/ccs/contrib/docker/caldavd.plist.template" diff --git a/contrib/docker/passwd.template b/contrib/docker/passwd.template new file mode 100644 index 000000000..552d368cb --- /dev/null +++ b/contrib/docker/passwd.template @@ -0,0 +1,23 @@ +root:x:0:0:root:/root:/bin/bash +daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin +bin:x:2:2:bin:/bin:/usr/sbin/nologin +sys:x:3:3:sys:/dev:/usr/sbin/nologin +sync:x:4:65534:sync:/bin:/bin/sync +games:x:5:60:games:/usr/games:/usr/sbin/nologin +man:x:6:12:man:/var/cache/man:/usr/sbin/nologin +lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin +mail:x:8:8:mail:/var/mail:/usr/sbin/nologin +news:x:9:9:news:/var/spool/news:/usr/sbin/nologin +uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin +proxy:x:13:13:proxy:/bin:/usr/sbin/nologin +www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin +backup:x:34:34:backup:/var/backups:/usr/sbin/nologin +list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin +irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin +gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin +nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin +systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false +systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false +systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false +systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false +calendarserver:x:${USER_ID}:${GROUP_ID}:Calendar and Contacts Server:${HOME}:/bin/bash \ No newline at end of file From f3ac298dcfd7e3d3c161afefdadec9ea58e23e7d Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Sat, 14 Apr 2018 19:22:23 +0200 Subject: [PATCH 08/19] trying to make nss_wrapper work --- Dockerfile | 2 +- contrib/docker/docker_cmd.sh | 2 +- contrib/docker/passwd.template | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 897d54f2b..2bb2a7db8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ LABEL maintainer = "giorgio.azzinnaro@gmail.com" io.openshift.tags = caldavd,ccs \ io.openshift.wants = memcached,postgres \ io.k8s.description = "Calendar and Contacts Server is a CalDAV implementation" \ - io.openshift.expose-services = 8080:http4 + io.openshift.expose-services = 8080:http # Straight from CCS GitHub install guide # except for gettext-base, which we need for "envsubst" diff --git a/contrib/docker/docker_cmd.sh b/contrib/docker/docker_cmd.sh index eda851036..d5face88f 100755 --- a/contrib/docker/docker_cmd.sh +++ b/contrib/docker/docker_cmd.sh @@ -5,7 +5,7 @@ export USER_ID=$(id -u) export GROUP_ID=$(id -g) envsubst < "/home/ccs/contrib/docker/passwd.template" > /tmp/passwd -export LD_PRELOAD=libnss_wrapper.so +export LD_PRELOAD=/usr/lib/libnss_wrapper.so export NSS_WRAPPER_PASSWD=/tmp/passwd export NSS_WRAPPER_GROUP=/etc/group diff --git a/contrib/docker/passwd.template b/contrib/docker/passwd.template index 552d368cb..b6c73d343 100644 --- a/contrib/docker/passwd.template +++ b/contrib/docker/passwd.template @@ -20,4 +20,4 @@ systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/fal systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false -calendarserver:x:${USER_ID}:${GROUP_ID}:Calendar and Contacts Server:${HOME}:/bin/bash \ No newline at end of file +calendarserver:x:${USER_ID}:${GROUP_ID}:Calendar and Contacts Server:${HOME}:/bin/bash From 4ce13d58e18b9fe42452f896934772d97182a649 Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Sat, 14 Apr 2018 19:25:58 +0200 Subject: [PATCH 09/19] refactoring entrypoint sh --- contrib/docker/docker_cmd.sh | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/contrib/docker/docker_cmd.sh b/contrib/docker/docker_cmd.sh index d5face88f..b582c7cf8 100755 --- a/contrib/docker/docker_cmd.sh +++ b/contrib/docker/docker_cmd.sh @@ -2,22 +2,26 @@ # This is because OpenShift runs with random UIDs, # and ccs expects the UID to be in /etc/passwd +PASSWD_TEMP_FILE="/home/ccs/contrib/docker/passwd.template" +PASSWD_FILE="/tmp/passwd" + export USER_ID=$(id -u) export GROUP_ID=$(id -g) -envsubst < "/home/ccs/contrib/docker/passwd.template" > /tmp/passwd +envsubst < $PASSWD_TEMP_FILE > $PASSWD_FILE + export LD_PRELOAD=/usr/lib/libnss_wrapper.so -export NSS_WRAPPER_PASSWD=/tmp/passwd +export NSS_WRAPPER_PASSWD=$PASSWD_FILE export NSS_WRAPPER_GROUP=/etc/group # Just get our conf file -TEMP_FILE="/home/ccs/contrib/docker/caldavd.plist.template" +CCS_CONF_TEMP_FILE="/home/ccs/contrib/docker/caldavd.plist.template" # It is important that this dir is world-writable, # /tmp usually is -CONF_FILE="/tmp/caldavd.plist" +CCS_CONF_FILE="/tmp/caldavd.plist" # Replace any env variable as they come from docker run -envsubst < $TEMP_FILE > $CONF_FILE +envsubst < $CCS_CONF_TEMP_FILE > $CCS_CONF_FILE # Run caldavd, no daemonize, log to stdout -caldavd -X -L -f $CONF_FILE +caldavd -X -L -f $CCS_CONF_FILE From 651bd7349faa1abb5200f12956c8591c442f3d79 Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Sun, 15 Apr 2018 10:55:27 +0200 Subject: [PATCH 10/19] enabling dynamic /etc/passwd --- Dockerfile | 7 ++++--- contrib/docker/docker_cmd.sh | 12 ++---------- contrib/docker/passwd.template | 23 ----------------------- 3 files changed, 6 insertions(+), 36 deletions(-) delete mode 100644 contrib/docker/passwd.template diff --git a/Dockerfile b/Dockerfile index 2bb2a7db8..f0f02b4c8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,7 @@ LABEL maintainer = "giorgio.azzinnaro@gmail.com" RUN apt-get update && \ apt-get -y install build-essential \ python-setuptools python-pip python-dev \ - git curl gettext-base libnss-wrapper \ + git curl gettext-base \ libssl-dev libreadline6-dev libkrb5-dev libffi-dev \ libldap2-dev libsasl2-dev zlib1g-dev @@ -24,8 +24,9 @@ WORKDIR /home/ccs RUN pip install -r requirements-default.txt # Create all runtime directories and ensure right permissions for OC -RUN mkdir -p /var/db/caldavd /var/log/caldavd /var/run/caldavd && \ - chmod -R g+rwX /home/ccs /var/db/caldavd /var/log/caldavd /var/run/caldavd +RUN mkdir -p /var/db/caldavd /var/log/caldavd /var/run/caldavd && \ + chmod -R g+rwX /home/ccs /var/db/caldavd /var/log/caldavd /var/run/caldavd && \ + chmod g=u /etc/passwd # TODO Check if everything is in this dir VOLUME [ "/var/db/caldavd" ] diff --git a/contrib/docker/docker_cmd.sh b/contrib/docker/docker_cmd.sh index b582c7cf8..050788d19 100755 --- a/contrib/docker/docker_cmd.sh +++ b/contrib/docker/docker_cmd.sh @@ -2,16 +2,8 @@ # This is because OpenShift runs with random UIDs, # and ccs expects the UID to be in /etc/passwd -PASSWD_TEMP_FILE="/home/ccs/contrib/docker/passwd.template" -PASSWD_FILE="/tmp/passwd" - -export USER_ID=$(id -u) -export GROUP_ID=$(id -g) -envsubst < $PASSWD_TEMP_FILE > $PASSWD_FILE - -export LD_PRELOAD=/usr/lib/libnss_wrapper.so -export NSS_WRAPPER_PASSWD=$PASSWD_FILE -export NSS_WRAPPER_GROUP=/etc/group +# Must be done at runtime because of the dynamic UID +echo "ccs:x:$(id -u):$(id -g):Calendar and Contacts Server:/home/ccs:/bin/bash" >> /etc/passwd # Just get our conf file CCS_CONF_TEMP_FILE="/home/ccs/contrib/docker/caldavd.plist.template" diff --git a/contrib/docker/passwd.template b/contrib/docker/passwd.template deleted file mode 100644 index b6c73d343..000000000 --- a/contrib/docker/passwd.template +++ /dev/null @@ -1,23 +0,0 @@ -root:x:0:0:root:/root:/bin/bash -daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin -bin:x:2:2:bin:/bin:/usr/sbin/nologin -sys:x:3:3:sys:/dev:/usr/sbin/nologin -sync:x:4:65534:sync:/bin:/bin/sync -games:x:5:60:games:/usr/games:/usr/sbin/nologin -man:x:6:12:man:/var/cache/man:/usr/sbin/nologin -lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin -mail:x:8:8:mail:/var/mail:/usr/sbin/nologin -news:x:9:9:news:/var/spool/news:/usr/sbin/nologin -uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin -proxy:x:13:13:proxy:/bin:/usr/sbin/nologin -www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin -backup:x:34:34:backup:/var/backups:/usr/sbin/nologin -list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin -irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin -gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin -nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin -systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false -systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false -systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false -systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false -calendarserver:x:${USER_ID}:${GROUP_ID}:Calendar and Contacts Server:${HOME}:/bin/bash From 78732d4495bccc7ea51d846e8a0215bcb6bce004 Mon Sep 17 00:00:00 2001 From: Marcel Schoengens Date: Thu, 3 May 2018 10:04:17 +0200 Subject: [PATCH 11/19] Created Docker Compose file and modified Dockerfile to work without LDAP support. --- Dockerfile | 54 - contrib/docker_compose/Dockerfile | 53 + contrib/docker_compose/caldavd.plist.template | 2292 +++++++++++++++++ contrib/docker_compose/docker-compose.yml | 78 + contrib/docker_compose/docker_cmd.sh | 43 + 5 files changed, 2466 insertions(+), 54 deletions(-) delete mode 100644 Dockerfile create mode 100644 contrib/docker_compose/Dockerfile create mode 100644 contrib/docker_compose/caldavd.plist.template create mode 100644 contrib/docker_compose/docker-compose.yml create mode 100644 contrib/docker_compose/docker_cmd.sh diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index f0f02b4c8..000000000 --- a/Dockerfile +++ /dev/null @@ -1,54 +0,0 @@ -FROM ubuntu:16.04 - -LABEL maintainer = "giorgio.azzinnaro@gmail.com" \ - io.openshift.tags = caldavd,ccs \ - io.openshift.wants = memcached,postgres \ - io.k8s.description = "Calendar and Contacts Server is a CalDAV implementation" \ - io.openshift.expose-services = 8080:http - -# Straight from CCS GitHub install guide -# except for gettext-base, which we need for "envsubst" -RUN apt-get update && \ - apt-get -y install build-essential \ - python-setuptools python-pip python-dev \ - git curl gettext-base \ - libssl-dev libreadline6-dev libkrb5-dev libffi-dev \ - libldap2-dev libsasl2-dev zlib1g-dev - -# All of the source code is in here -ADD . /home/ccs - -WORKDIR /home/ccs - -# Dependencies are retrieved and CCS installed in /usr/local -RUN pip install -r requirements-default.txt - -# Create all runtime directories and ensure right permissions for OC -RUN mkdir -p /var/db/caldavd /var/log/caldavd /var/run/caldavd && \ - chmod -R g+rwX /home/ccs /var/db/caldavd /var/log/caldavd /var/run/caldavd && \ - chmod g=u /etc/passwd - -# TODO Check if everything is in this dir -VOLUME [ "/var/db/caldavd" ] - -# This can be edited in docker/caldavd.plist.template > HTTPPort -EXPOSE 8080 - -# Some sensible defaults for config -ENV POSTGRES_HOST tcp:postgres:5432 -ENV POSTGRES_DB postgres -ENV POSTGRES_USER postgres -ENV POSTGRES_PASS password -ENV MEMCACHED_HOST memcached -ENV MEMCACHED_PORT 11211 -ENV LDAP_URI ldap://openldap -ENV LDAP_DN cn=admin,dc=example,dc=org -ENV LDAP_PASS admin - -# To avoid errors with OpenShift, could be any -USER 1000 - -# This entry point simply creates /etc/caldavd/caldavd.plist, -# using the given ENV as placeholders, -# and then runs `caldavd -X -L` -CMD [ "/home/ccs/contrib/docker/docker_cmd.sh" ] \ No newline at end of file diff --git a/contrib/docker_compose/Dockerfile b/contrib/docker_compose/Dockerfile new file mode 100644 index 000000000..7fe4c6b7b --- /dev/null +++ b/contrib/docker_compose/Dockerfile @@ -0,0 +1,53 @@ +FROM ubuntu:16.04 + +ENV VERSION "9.2" + +RUN apt-get update \ + && apt-get -y install build-essential \ + python-setuptools python-pip python-dev \ + git curl gettext-base wget postgresql-client \ + libssl-dev libreadline6-dev libkrb5-dev libffi-dev \ + libldap2-dev libsasl2-dev zlib1g-dev \ + && apt-get purge -y --auto-remove \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /opt + +RUN git clone https://github.com/apple/ccs-calendarserver.git ccs \ + && cd ccs \ + && git checkout CalendarServer-$VERSION + +WORKDIR /opt/ccs + +# Dependencies are retrieved and CCS installed in /usr/local +RUN pip install -r requirements-default.txt + +ADD docker_cmd.sh bin +ADD caldavd.plist.template . + +RUN useradd -ms /bin/bash ccs \ + && mkdir -p /var/db/caldavd /var/log/caldavd /var/run/caldavd /etc/caldavd /opt/ccs/src/twextpy/twext/python/__pycache__/ \ + && chown root:ccs /etc/caldavd /var/log/caldavd /var/run/caldavd /opt/ccs/src/twextpy/twext/python/__pycache__/ \ + && chown ccs:ccs /var/db/caldavd \ + && chmod -R g+rwX /opt/ccs /var/db/caldavd /var/log/caldavd /var/run/caldavd /etc/caldavd /opt/ccs/src/twextpy/twext/python/__pycache__/ \ + && chmod g=u /etc/passwd \ + && chmod +x /opt/ccs/bin/docker_cmd.sh + +RUN apt-get update && apt-get -y install emacs-nox iputils-ping telnet + +VOLUME [ "/var/db/caldavd", "/etc/caldavd" ] + +EXPOSE 8080 + +# Some sensible defaults for config +ENV POSTGRES_HOST tcp:postgres:5432 +ENV POSTGRES_DB postgres +ENV POSTGRES_USER postgres +ENV POSTGRES_PASS password +ENV MEMCACHED_HOST memcached +ENV MEMCACHED_PORT 11211 + +USER ccs + +# This entry point starts the server and creates the config files (in case they do not already exist) +CMD [ "/opt/ccs/bin/docker_cmd.sh" ] \ No newline at end of file diff --git a/contrib/docker_compose/caldavd.plist.template b/contrib/docker_compose/caldavd.plist.template new file mode 100644 index 000000000..58647e47a --- /dev/null +++ b/contrib/docker_compose/caldavd.plist.template @@ -0,0 +1,2292 @@ + + + + + + + + + + + ServerHostName + + + + + HTTPPort + 8080 + + + SSLPort + 0 + + + EnableSSL + + + + BehindTLSProxy + + + + RedirectHTTPToHTTPS + + + + SSLMethod + SSLv23_METHOD + + SSLCiphers + RC4-SHA:HIGH:!ADH + + + StrictTransportSecuritySeconds + 604800 + + + + SocketFiles + + Enabled + + + + Secured + secured.sock + + + Unsecured + unsecured.sock + + Owner + + + Group + + + Permissions + 504 + + + SocketRoot + /tmp/calendarserver + + + BindAddresses + + + + + BindHTTPPorts + + + + + BindSSLPorts + + + + + InheritFDs + + + + + InheritSSLFDs + + + + + UseMetaFD + + + + MetaFD + 0 + + + + + UseDatabase + + + + DBType + postgres + + + DBFeatures + + skip-locked + + + + + + + DatabaseConnection + + + endpoint + $POSTGRES_HOST + + + + database + $POSTGRES_DB + + + + user + $POSTGRES_USER + + + + password + $POSTGRES_PASS + + + + ssl + + + + + SharedConnectionPool + + + + DBAMPFD + 0 + + + FailIfUpgradeNeeded + + + + CheckExistingSchema + + + + UpgradeHomePrefix + + + + TransactionTimeoutSeconds + 300 + + + TransactionHTTPRetrySeconds + 300 + + + + WorkQueue + + + queuePollInterval + 0.1 + + + queueOverdueTimeout + 300 + + + queuePollingBackoff + + + 60 + 60 + + + 5 + 1 + + + + + overloadLevel + 95 + + + highPriorityLevel + 80 + + + mediumPriorityLevel + 50 + + + rowLimit + 1 + + + failureRescheduleInterval + 60 + + + lockRescheduleInterval + 60 + + + workParameters + + + + + + + + EnableCalDAV + + + + EnableCardDAV + + + + MigrationOnly + + + + + + ServerRoot + /var/db/caldavd + + + DataRoot + Data + + + DatabaseRoot + Database + + + AttachmentsRoot + Attachments + + + DocumentRoot + Documents + + + ConfigRoot + Config + + + LogRoot + /var/log/caldavd + + + RunRoot + /var/run/caldavd + + + WebCalendarRoot + /Applications/Server.app/Contents/ServerRoot/usr/share/collabd/webcal/public + + + + + + UserQuota + 104857600 + + + MaximumAttachmentSize + 10485760 + + + MaximumAttachmentsPerInstance + 5 + + + + MaxCollectionsPerHome + 50 + + + MaxResourcesPerCollection + 10000 + + + MaxResourceSize + 1048576 + + + MaxAttendeesPerInstance + 100 + + + MaxAllowedInstances + 3000 + + + WebCalendarAuthPath + + + + Aliases + + + + + + + + DirectoryService + + type + twistedcaldav.directory.xmlfile.XMLDirectoryService + + params + + + xmlFile + /etc/caldavd/accounts.xml + recordTypes + + users + groups + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DirectoryRealmName + + + + DirectoryFilterStartsWith + + + + + ResourceService + + Enabled + + + type + xml + + params + + recordTypes + + locations + resources + addresses + + + xmlFile + resources.xml + + + + + + AugmentService + + type + xml + + params + + xmlFiles + + + + statSeconds + 15 + + + + + + + ProxyLoadFromFile + + + + + + AdminPrincipals + + + + + ReadPrincipals + + + + + EnableProxyPrincipals + + + + + + EnableAnonymousReadRoot + + + + EnableAnonymousReadNav + + + + EnablePrincipalListings + + + + EnableMonolithicCalendars + + + + + + RejectClients + + + + + + Authentication + + + Basic + + Enabled + + + + AllowedOverWireUnencrypted + + + + + Digest + + Enabled + + + Algorithm + md5 + + Qop + + + + AllowedOverWireUnencrypted + + + + + Kerberos + + Enabled + + + ServicePrincipal + + + + AllowedOverWireUnencrypted + + + + + ClientCertificate + + Enabled + + + + AllowedOverWireUnencrypted + + + + Required + + + + CAFiles + + + + + SendCAsToClient + + + + Wiki + + Enabled + + + Cookie + cc.collabd_session_guid + + EndpointDescriptor + unix:path=/var/run/collabd + + + + + + + AccessLogFile + access.log + + + ErrorLogFile + error.log + + + AgentLogFile + agent.log + + + UtilityLogFile + utility.log + + + ErrorLogEnabled + + + + ErrorLogRotateMB + 10 + + + ErrorLogMaxRotatedFiles + 5 + + + ErrorLogRotateOnStart + + + PIDFile + caldavd.pid + + RotateAccessLog + + + EnableExtendedAccessLog + + + EnableExtendedTimingAccessLog + + + + DefaultLogLevel + + + + LogLevels + + + + + LogID + + + AccountingCategories + + + HTTP + + + + iTIP + + + + iTIP-VFREEBUSY + + + + Implicit Errors + + + + AutoScheduling + + + + iSchedule + + + + xPod + + + + Invalid Instance + + + + migration + + + + AccountingPrincipals + + + + + AccountingLogRoot + accounting + + Stats + + EnableUnixStatsSocket + + + UnixStatsSocket + caldavd-stats.sock + + EnableTCPStatsSocket + + + TCPStatsPort + 8100 + + + LogDatabase + + LabelsInSQL + + + Statistics + + + StatisticsLogFile + sqlstats.log + + SQLStatements + + + TransactionWaitSeconds + 0 + + + + + + SSLCertificate + + + + SSLPrivateKey + + + + SSLAuthorityChain + + + SSLPassPhraseDialog + /etc/apache2/getsslpassphrase + + SSLCertAdmin + /Applications/Server.app/Contents/ServerRoot/usr/sbin/certadmin + + + SSLKeychainIdentity + + + + + + UserName + + + GroupName + + + + ProcessType + Combined + + MultiProcess + + ProcessCount + 0 + + MinProcessCount + 2 + + PerCPU + 1 + + PerGB + 1 + + StaggeredStartup + + Enabled + + + Interval + 15 + + + + + MemoryLimiter + + Enabled + + + + Seconds + 60 + + + Bytes + 2147483648 + + + ResidentOnly + + + + + EnableSACLs + + + + EnableReadOnlyServer + + + + + + EnableAddMember + + + + EnableSyncReport + + + + EnableSyncReportHome + + + + EnableConfigSyncToken + + + + EnableWellKnown + + + + EnableCalendarQueryExtended + + + + EnableManagedAttachments + + + + EnableServerInfo + + + + + + EnableJSONData + + + + + + EnableDropBox + + + + EnablePrivateEvents + + + + EnableTimezoneService + + + + TimezoneService + + + Enabled + + + + URI + /stdtimezones + + + Mode + primary + + + BasePath + + + + XMLInfoPath + + + + PrettyPrintJSON + + + SecondaryService + + + + Host + + + + URI + + + UpdateIntervalMinutes + 1440 + + + + + EnableTimezonesByReference + + + + UsePackageTimezones + + + + EnableBatchUpload + + + + MaxResourcesBatchUpload + 100 + + + MaxBytesBatchUpload + 10485760 + + Sharing + + + Enabled + + + + AllowExternalUsers + + + Calendars + + + Enabled + + + IgnorePerUserProperties + + X-APPLE-STRUCTURED-LOCATION + + + CollectionProperties + + Shadowable + + {urn:ietf:params:xml:ns:caldav}calendar-description + + + ProxyOverride + + {urn:ietf:params:xml:ns:caldav}calendar-description + {com.apple.ical:}calendarcolor + {http://apple.com/ns/ical/}calendar-color + {http://apple.com/ns/ical/}calendar-order + + + Global + + + + + Groups + + + Enabled + + + ReconciliationDelaySeconds + 5 + + + + AddressBooks + + + Enabled + + + CollectionProperties + + Shadowable + + {urn:ietf:params:xml:ns:carddav}addressbook-description + + + ProxyOverride + + + + Global + + + + + Groups + + + Enabled + + + + + + + RestrictCalendarsToOneComponentType + + + + SupportedComponents + + VEVENT + VTODO + + + + EnableTrashCollection + + + + ExposeTrashCollection + + + + ParallelUpgrades + + + + MergeUpgrades + + + + EnableDefaultAlarms + + + + RemoveDuplicateAlarms + + + + RemoveDuplicatePrivateComments + + + HostedStatus + + + Enabled + + + Parameter + X-APPLE-HOSTED-STATUS + + Values + + local + + + external + EXTERNAL + + + + RevisionCleanup + + Enabled + + + + SyncTokenLifetimeDays + 14.0 + + + CleanupPeriodDays + 2.0 + + + InboxCleanup + + Enabled + + + + ItemLifetimeDays + 14.0 + + + CleanupPeriodDays + 2.0 + + + StartDelaySeconds + 300 + + + StaggerSeconds + 0.5 + + + InboxRemoveWorkThreshold + 5 + + + RemovalStaggerSeconds + 0.5 + + + + DirectoryAddressBook + + Enabled + + + type + opendirectory + + params + + queryPeopleRecords + + + peopleNode + /Search/Contacts + + queryUserRecords + + + userNode + /Search/Contacts + + maxDSQueryRecords + 0 + + queryDSLocal + + + ignoreSystemRecords + + + dsLocalCacheTimeout + 30 + + liveQuery + + + fakeETag + + + cacheQuery + + + cacheTimeout + 30 + + standardizeSyntheticUIDs + + + addDSAttrXProperties + + + appleInternalServer + + + additionalAttributes + + + + allowedAttributes + + + + + name + directory + + MaxQueryResults + 1000 + + + + EnableSearchAddressBook + + + + AnonymousDirectoryAddressBookAccess + + + + + + EnableWebAdmin + + + + EnableControlAPI + + + + + Scheduling + + CalDAV + + + EmailDomain + + + + HTTPDomain + + + + AddressPatterns + + + + + OldDraftCompatibility + + + + ScheduleTagCompatibility + + + + EnablePrivateComments + + + + PerAttendeeProperties + + X-APPLE-NEEDS-REPLY + X-APPLE-TRAVEL-DURATION + X-APPLE-TRAVEL-START + X-APPLE-TRAVEL-RETURN-DURATION + X-APPLE-TRAVEL-RETURN + + + + OrganizerPublicProperties + + X-APPLE-DROPBOX + X-APPLE-STRUCTURED-LOCATION + + + + OrganizerPublicParameters + + + + + AttendeePublicProperties + + + + + AttendeePublicParameters + + + + + iSchedule + + + Enabled + + + + AddressPatterns + + + + + RemoteServers + remoteservers.xml + + + SerialNumber + 1 + + + DNSDebug + + + + DKIM + + + Enabled + + + + Domain + + + + KeySelector + ischedule + + + SignatureAlgorithm + rsa-sha256 + + + UseDNSKey + + + + UseHTTPKey + + + + UsePrivateExchangeKey + + + + ExpireSeconds + 3600 + + + PrivateKeyFile + + + + PublicKeyFile + + + + PrivateExchanges + + + + ProtocolDebug + + + + + iMIP + + + Enabled + + + Sending + + + Server + + + + Port + 587 + + + Address + + + UseSSL + + + + Username + + + + Password + + + + SuppressionDays + 7 + + + Receiving + + + Server + + + + Port + 0 + + UseSSL + + + + Type + + + + PollingSeconds + 30 + + + Username + + + + Password + + + + + AddressPatterns + + + + + MailTemplatesDirectory + /Applications/Server.app/Contents/ServerRoot/usr/share/caldavd/share/email_templates + + + MailIconsDirectory + /Applications/Server.app/Contents/ServerRoot/usr/share/caldavd/share/date_icons + + + InvitationDaysToLive + 90 + + + Options + + + AllowGroupAsOrganizer + + + + AllowLocationAsOrganizer + + + + AllowResourceAsOrganizer + + + + AllowLocationWithoutOrganizer + + + + AllowResourceWithoutOrganizer + + + + TrackUnscheduledLocationData + + + + TrackUnscheduledResourceData + + + + FakeResourceLocationEmail + + + + LimitFreeBusyAttendees + 30 + + + AttendeeRefreshBatch + 5 + + + AttendeeRefreshCountLimit + 50 + + + UIDLockTimeoutSeconds + 60 + + + UIDLockExpirySeconds + 300 + + + PrincipalHostAliases + + + + + TimestampAttendeePartStatChanges + + + + DelegeteRichFreeBusy + + + + RoomResourceRichFreeBusy + + + AutoSchedule + + + Enabled + + + + Always + + + + AllowUsers + + + + DefaultMode + automatic + + + FutureFreeBusyDays + 1095 + + + WorkQueues + + + Enabled + + + + RequestDelaySeconds + 5 + + + ReplyDelaySeconds + 1 + + + AutoReplyDelaySeconds + 5 + + + AttendeeRefreshBatchDelaySeconds + 5 + + + AttendeeRefreshBatchIntervalSeconds + 5 + + + TemporaryFailureDelay + 60 + + + MaxTemporaryFailures + 10 + + + + + Splitting + + + Enabled + + + + Size + 102400 + + + PastDays + 14 + + + Delay + 60 + + + + + FreeBusyURL + + + Enabled + + + + TimePeriod + 14 + + + AnonymousAccess + + + + + + Notifications + + Enabled + + + CoalesceSeconds + 3 + + Services + + APNS + + Enabled + + + SubscriptionURL + apns + + + SubscriptionRefreshIntervalSeconds + 172800 + + + SubscriptionPurgeIntervalSeconds + 43200 + + + SubscriptionPurgeSeconds + 1209600 + + ProviderHost + gateway.push.apple.com + + ProviderPort + 2195 + + FeedbackHost + feedback.push.apple.com + + FeedbackPort + 2196 + + + FeedbackUpdateSeconds + 28800 + + Environment + PRODUCTION + + EnableStaggering + + + StaggerSeconds + 3 + + CalDAV + + Enabled + + + CertificatePath + Certificates/apns:com.apple.calendar.cert.pem + + PrivateKeyPath + Certificates/apns:com.apple.calendar.key.pem + + AuthorityChainPath + Certificates/apns:com.apple.calendar.chain.pem + + Passphrase + + + KeychainIdentity + apns:com.apple.calendar + + Topic + + + + CardDAV + + Enabled + + + CertificatePath + Certificates/apns:com.apple.contact.cert.pem + + PrivateKeyPath + Certificates/apns:com.apple.contact.key.pem + + AuthorityChainPath + Certificates/apns:com.apple.contact.chain.pem + + Passphrase + + + KeychainIdentity + apns:com.apple.contact + + Topic + + + + + AMP + + Enabled + + + Port + 62311 + + EnableStaggering + + + StaggerSeconds + 3 + + + + + DirectoryProxy + + Enabled + + + SocketPath + directory-proxy.sock + + InSidecarCachingSeconds + 120 + + + DirectoryCaching + + + CachingSeconds + 60 + + NegativeCachingEnabled + + + + LookupsBetweenPurges + 10000 + + + + + Servers + + + Enabled + + + + ConfigFile + localservers.xml + + + MaxClients + 5 + + + InboxName + podding + + + ConduitName + conduit + + + + + + MaxRequests + 3 + + MaxAccepts + 1 + + + MaxDBConnectionsPerPool + 10 + + ListenBacklog + 2024 + + + IncomingDataTimeOut + 60 + + + PipelineIdleTimeOut + 15 + + + IdleConnectionTimeOut + 360 + + + CloseConnectionTimeOut + 15 + + UIDReservationTimeOut + 1800 + + MaxMultigetWithDataHrefs + 5000 + + MaxQueryWithDataResults + 1000 + + + MaxPrincipalSearchReportResults + 500 + + + PrincipalSearchReportTimeout + 10 + + + + ClientFixes + + ForceAttendeeTRANSP + + iOS/8\\.0(\\..*)? + iOS/8\\.1(\\..*)? + iOS/8\\.2(\\..*)? + + + + + + Localization + + TranslationsDirectory + /Applications/Server.app/Contents/ServerRoot/usr/share/caldavd/share/translations + + + LocalesDirectory + locales + + Language + + + + + + + Twisted + + reactor + select + + + + umask + 18 + + + ControlPort + 0 + + + ControlSocket + caldavd.sock + + + ResponseCompression + + + + HTTPRetryAfter + 180 + + + Profiling + + Enabled + + + BaseDirectory + /tmp/stats + + + Memcached + + MaxClients + 5 + + Pools + + Default + + + MemcacheSocket + + + ClientEnabled + + + + ServerEnabled + + + BindAddress + $MEMCACHED_HOST + + + Port + $MEMCACHED_PORT + + + + HandleCacheTypes + + Default + + + + + + + + memcached + memcached + + + MaxMemory + 0 + + Options + + + + ProxyDBKeyNormalization + + + + Postgres + + DatabaseName + caldav + + ClusterName + cluster + + LogFile + postgres.log + + LogRotation + + + SocketDirectory + + + SocketName + + + ListenAddresses + + + + + TxnTimeoutSeconds + 30 + + + SharedBuffers + 0 + + + MaxConnections + 0 + + + ExtraConnections + 3 + + BuffersToConnectionsRatio + 1.5 + + Options + + -c standard_conforming_strings=on + + + + Ctl + pg_ctl + + + Init + initdb + + + QueryCaching + + Enabled + + + MemcachedPool + Default + + ExpireSeconds + 3600 + + + GroupCaching + + Enabled + + + UpdateSeconds + 300 + + UseDirectoryBasedDelegates + + + InitialSchedulingDelaySeconds + 10 + + BatchSize + 100 + + BatchSchedulingIntervalSeconds + 2 + + + GroupAttendees + + Enabled + + + ReconciliationDelaySeconds + 5 + + + AutoUpdateSecondsFromNow + 3600 + + + AutomaticPurging + + Enabled + + + + PollingIntervalSeconds + 604800 + + + CheckStaggerSeconds + 0 + + + PurgeIntervalSeconds + 604800 + + HomePurgeDelaySeconds + 60 + + + GroupPurgeIntervalSeconds + 604800 + + + Manhole + + Enabled + + + + UseSSH + + + + StartingPortNumber + 5000 + + + DPSPortNumber + 4999 + + + PasswordFilePath + + + + sshKeyName + manhole.key + + sshKeySize + 4096 + + + EnableKeepAlive + + + EnableResponseCache + + + + ResponseCacheTimeout + 30 + + EnableFreeBusyCache + + + FreeBusyCacheDaysBack + 7 + + FreeBusyCacheDaysForward + 84 + + FreeBusyIndexLowerLimitDays + 365 + + FreeBusyIndexExpandAheadDays + 365 + + FreeBusyIndexExpandMaxDays + 1825 + + FreeBusyIndexDelayedExpand + + + FreeBusyIndexSmartUpdate + + + + RootResourcePropStoreClass + txweb2.dav.xattrprops.xattrPropertyStore + + + UtilityServiceClass + + + + MigratedInboxDaysCutoff + 60 + + + DefaultTimezone + + + + AgentInactivityTimeoutSeconds + 300 + + + ServiceDisablingProgram + + + + AlertPostingProgram + + + + + + ImportConfig + + + + Includes + + + + + WritableConfigFile + + + diff --git a/contrib/docker_compose/docker-compose.yml b/contrib/docker_compose/docker-compose.yml new file mode 100644 index 000000000..2bcc1ebea --- /dev/null +++ b/contrib/docker_compose/docker-compose.yml @@ -0,0 +1,78 @@ +version: "3.4" + +services: + ccs: + image: ccs + restart: always + environment: + VIRTUAL_HOST: "127.0.0.1" + #LETSENCRYPT_HOST: "example.com" + #LETSENCRYPT_EMAIL: "mail@example.com" + POSTGRES_HOST: 'tcp:postgres:5432' + POSTGRES_DB: ccs + POSTGRES_USER: caldavd + POSTGRES_PASS: test1234 + volumes: + - ccsdata:/var/db/caldavd + - ccsconf:/etc/caldavd + networks: + - ccsnet + - proxynet + depends_on: + - postgres + - memcached + postgres: + image: postgres + restart: always + environment: + POSTGRES_DB: ccs + POSTGRES_USER: caldavd + POSTGRES_PASSWORD: test1234 + volumes: + - "dbdata:/var/lib/postgresql/data" + restart: always + networks: + - ccsnet + memcached: + image: memcached:1.5-alpine + networks: + - ccsnet + proxy: + image: jwilder/nginx-proxy:alpine + restart: always + labels: + - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy" + volumes: + - "proxycerts:/etc/nginx/certs:ro" + - "proxyvhosts:/etc/nginx/vhost.d" + - "proxyhtml:/usr/share/nginx/html" + - "/var/run/docker.sock:/tmp/docker.sock:ro" + ports: + - 80:80 + - 443:443 + networks: + - proxynet + letsencrypt: + image: jrcs/letsencrypt-nginx-proxy-companion + restart: always + environment: + NGINX_PROXY_CONTAINER: proxy + volumes: + - "/var/run/docker.sock:/var/run/docker.sock:ro" + - "proxycerts:/etc/nginx/certs" + - "proxyvhosts:/etc/nginx/vhost.d" + - "proxyhtml:/usr/share/nginx/html" + depends_on: + - proxy + +volumes: + dbdata: + ccsdata: + ccsconf: + proxycerts: + proxyvhosts: + proxyhtml: + +networks: + ccsnet: + proxynet: \ No newline at end of file diff --git a/contrib/docker_compose/docker_cmd.sh b/contrib/docker_compose/docker_cmd.sh new file mode 100644 index 000000000..c3fabb11e --- /dev/null +++ b/contrib/docker_compose/docker_cmd.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +# echo "ccs:x:$(id -u):$(id -g):Calendar and Contacts Server:/opt/ccs:/bin/bash" >> /etc/passwd + +# Just get our conf file +CCS_CONF_TEMP_FILE="/opt/ccs/caldavd.plist.template" + +# It is important that this dir is world-writable, +# /tmp usually is +CCS_CONF_FILE="/etc/caldavd/caldavd.plist" +CCS_AUTH_FILE="/etc/caldavd/accounts.xml" + +# create SQL tables on first run +echo $(awk -F: '{print $2":"$3}' <<< $POSTGRES_HOST):$POSTGRES_DB:$POSTGRES_USER:$POSTGRES_PASS > ~/.pgpass +chmod 600 ~/.pgpass + +# wait for postgres to be available +export PGHOST=$(awk -F: '{print $2}' <<< $POSTGRES_HOST) +until psql -h $PGHOST -U $POSTGRES_USER $POSTGRES_DB -c '\q'; do + >&2 echo "Postgres is unavailable - sleeping" + sleep 1 +done + +TD=$(psql -h $PGHOST -U $POSTGRES_USER $POSTGRES_DB <<< '\dt') + +if [ "$TD" = "No relations found." ]; then + psql -h $PGHOST -U $POSTGRES_USER $POSTGRES_DB < /opt/ccs/txdav/common/datastore/sql_schema/current.sql +fi + +# create config file on first run +if [ ! -f $CCS_CONF_FILE ]; then + envsubst < $CCS_CONF_TEMP_FILE > $CCS_CONF_FILE +fi + +# create auth file if not available +if [ ! -f $CCS_AUTH_FILE ]; then + cp /opt/ccs/conf/auth/accounts.xml $CCS_AUTH_FILE + cp /opt/ccs/conf/auth/*.dtd /etc/caldavd +fi + +# Run caldavd, no daemonize, log to stdout +caldavd -X -L -f $CCS_CONF_FILE + From 37a0f00de6201580beaffb3444b7b483efa59866 Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Mon, 14 May 2018 09:55:59 +0200 Subject: [PATCH 12/19] docker_entrypoint.sh should be executable --- contrib/docker/docker_entrypoint.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 contrib/docker/docker_entrypoint.sh diff --git a/contrib/docker/docker_entrypoint.sh b/contrib/docker/docker_entrypoint.sh old mode 100644 new mode 100755 From 029c3adefb6a9781b32902a3f64f207132a1be38 Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Mon, 14 May 2018 10:33:06 +0200 Subject: [PATCH 13/19] removed base conf; envsubst user conf; refactoring --- Dockerfile | 35 ++++-- contrib/docker/caldavd.base.plist | 82 ------------- contrib/docker/caldavd.envsubst.plist | 160 ++++++++++---------------- contrib/docker/docker-compose.yml | 49 ++++++++ contrib/docker/docker_entrypoint.sh | 8 ++ 5 files changed, 143 insertions(+), 191 deletions(-) delete mode 100644 contrib/docker/caldavd.base.plist create mode 100644 contrib/docker/docker-compose.yml diff --git a/Dockerfile b/Dockerfile index 520912383..6c6c6b4e2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,12 +8,22 @@ LABEL maintainer = "giorgio.azzinnaro@gmail.com" # Straight from CCS GitHub install guide # except for gettext-base, which we need for "envsubst" -RUN apt-get update && \ - apt-get -y install build-essential \ - python-setuptools python-pip python-dev \ - git curl gettext-base \ - libssl-dev libreadline6-dev libkrb5-dev libffi-dev \ - libldap2-dev libsasl2-dev zlib1g-dev +RUN apt-get update && \ + apt-get -y install \ + build-essential \ + curl \ + gettext-base \ + git \ + libffi-dev \ + libkrb5-dev \ + libldap2-dev \ + libreadline6-dev \ + libsasl2-dev \ + libssl-dev \ + python-dev \ + python-pip \ + python-setuptools \ + zlib1g-dev # All of the source code is in here ADD . /home/ccs @@ -24,9 +34,16 @@ WORKDIR /home/ccs RUN pip install -r requirements-default.txt # Create all runtime directories and ensure right permissions for OC -RUN mkdir -p /var/db/caldavd /var/log/caldavd /var/run/caldavd && \ - chmod -R g+rwX /home/ccs /var/db/caldavd /var/log/caldavd /var/run/caldavd && \ - chmod g=u /etc/passwd +RUN mkdir -p /var/db/caldavd \ + /var/log/caldavd \ + /var/run/caldavd \ + /etc/caldavd && \ + chmod -R g+rwX /home/ccs \ + /var/db/caldavd \ + /var/log/caldavd \ + /var/run/caldavd \ + /etc/caldavd && \ + chmod g=u /etc/passwd # TODO Check if everything is in this dir VOLUME [ "/var/db/caldavd" ] diff --git a/contrib/docker/caldavd.base.plist b/contrib/docker/caldavd.base.plist deleted file mode 100644 index 1e10de07b..000000000 --- a/contrib/docker/caldavd.base.plist +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - HTTPPort - 8080 - - - UseDatabase - - - - DBType - postgres - - - DBFeatures - - skip-locked - - - - FailIfUpgradeNeeded - - - - CheckExistingSchema - - - - - - ServerRoot - /var/db/caldavd - - - ConfigRoot - /etc/caldavd - - - diff --git a/contrib/docker/caldavd.envsubst.plist b/contrib/docker/caldavd.envsubst.plist index bb672fc14..974d91bd4 100644 --- a/contrib/docker/caldavd.envsubst.plist +++ b/contrib/docker/caldavd.envsubst.plist @@ -36,6 +36,66 @@ + + + HTTPPort + 8080 + + + UseDatabase + + + + DBType + postgres + + + DBFeatures + + skip-locked + + + + FailIfUpgradeNeeded + + + + CheckExistingSchema + + + + + + ServerRoot + /var/db/caldavd + + + ConfigRoot + /etc/caldavd + + + + + Includes + + /etc/caldavd/caldavd.ext.plist + /etc/caldavd/caldavd.writable.plist + + + + WritableConfigFile + /etc/caldavd/caldavd.writable.plist + DatabaseConnection @@ -64,86 +124,6 @@ - - - - DirectoryService - - type - xml - - params - - - xmlFile - /etc/caldavd/accounts.xml - recordTypes - - users - groups - - - - - DirectoryRealmName - - - - DirectoryFilterStartsWith - - - - - ResourceService - - Enabled - - - type - xml - - params - - recordTypes - - locations - resources - addresses - - - xmlFile - resources.xml - - - - - - AugmentService - - type - xml - - params - - xmlFiles - - - - statSeconds - 15 - - - Memcached MaxClients @@ -203,25 +183,5 @@ ProxyDBKeyNormalization - - - - - ImportConfig - /home/ccs/contrib/caldavd.base.plist - - - Includes - - /etc/caldavd/caldavd.ext.plist - /etc/caldavd/caldavd.writable.plist - - - - WritableConfigFile - /etc/caldavd/caldavd.writable.plist diff --git a/contrib/docker/docker-compose.yml b/contrib/docker/docker-compose.yml new file mode 100644 index 000000000..9d479cbc9 --- /dev/null +++ b/contrib/docker/docker-compose.yml @@ -0,0 +1,49 @@ +version: "3.4" + +services: + ccs: + image: giorgioazzinnaro/ccs-calendarserver + restart: always + environment: + POSTGRES_HOST: 'tcp:postgres:5432' + POSTGRES_DB: ccs + POSTGRES_USER: caldavd + POSTGRES_PASS: test1234 + MEMCACHED_HOST: memcached + MEMCACHED_PORT: 11211 + volumes: + - ccsdata:/var/db/caldavd + - ccsconf:/etc/caldavd + networks: + - ccsnet + depends_on: + - postgres + - memcached + + postgres: + image: postgres + restart: always + environment: + POSTGRES_DB: ccs + POSTGRES_USER: caldavd + POSTGRES_PASSWORD: test1234 + volumes: + - "postgresdata:/var/lib/postgresql/data" + restart: always + networks: + - ccsnet + + memcached: + image: memcached:1.5 + networks: + - ccsnet + + +volumes: + postgresdata: + ccsdata: + ccsconf: + + +networks: + ccsnet: \ No newline at end of file diff --git a/contrib/docker/docker_entrypoint.sh b/contrib/docker/docker_entrypoint.sh index b52dbe6af..1feca6f14 100755 --- a/contrib/docker/docker_entrypoint.sh +++ b/contrib/docker/docker_entrypoint.sh @@ -13,7 +13,15 @@ CCS_CONF_TEMP_FILE="/home/ccs/contrib/docker/caldavd.envsubst.plist" # /tmp usually is export CCS_CONF_FILE="/tmp/caldavd.plist" +# This file may be added by the user in a volume +CCS_USER_CONF_FILE="/etc/caldavd/caldavd.ext.plist" + # Replace any env variable as they come from docker run envsubst < $CCS_CONF_TEMP_FILE > $CCS_CONF_FILE +# Replace env variables in user defined config if exists +if [ -f $CCS_USER_CONF_FILE ]; then + envsubst < $CCS_USER_CONF_FILE > $CCS_USER_CONF_FILE +fi + exec "$@" From 6f8e30788441fcec85911df6fa0de6e4f50c94aa Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Mon, 14 May 2018 14:23:29 +0200 Subject: [PATCH 14/19] correcting CMD config file --- Dockerfile | 2 +- contrib/docker/docker-compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6c6c6b4e2..fb9bfdfe8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -69,4 +69,4 @@ USER 1000 # This entry point simply creates /tmp/caldavd.plist, # using the given ENV as placeholders ENTRYPOINT [ "/home/ccs/contrib/docker/docker_entrypoint.sh" ] -CMD [ "caldavd", "-X", "-L", "-f", "$CCS_CONF_FILE" ] \ No newline at end of file +CMD [ "caldavd", "-X", "-L", "-f", "/tmp/caldavd.plist" ] \ No newline at end of file diff --git a/contrib/docker/docker-compose.yml b/contrib/docker/docker-compose.yml index 9d479cbc9..f4ace2f9b 100644 --- a/contrib/docker/docker-compose.yml +++ b/contrib/docker/docker-compose.yml @@ -1,4 +1,4 @@ -version: "3.4" +version: "3" services: ccs: From 0b91db0644ed7bb93ee2fcdc910e72e5cd85dbc9 Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Mon, 14 May 2018 15:03:00 +0200 Subject: [PATCH 15/19] config file in docker compose for sql init --- contrib/docker/docker-compose.yml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/contrib/docker/docker-compose.yml b/contrib/docker/docker-compose.yml index f4ace2f9b..ed52f9dc0 100644 --- a/contrib/docker/docker-compose.yml +++ b/contrib/docker/docker-compose.yml @@ -1,9 +1,12 @@ -version: "3" +version: "3.3" + +configs: + sql_seed: + file: ../../txdav/common/datastore/sql_schema/current.sql services: ccs: image: giorgioazzinnaro/ccs-calendarserver - restart: always environment: POSTGRES_HOST: 'tcp:postgres:5432' POSTGRES_DB: ccs @@ -16,9 +19,12 @@ services: - ccsconf:/etc/caldavd networks: - ccsnet + ports: + - "8080:8080" depends_on: - postgres - memcached + restart: always postgres: image: postgres @@ -29,7 +35,9 @@ services: POSTGRES_PASSWORD: test1234 volumes: - "postgresdata:/var/lib/postgresql/data" - restart: always + configs: + - source: sql_seed + target: /docker-entrypoint-initdb.d/ccs.sql networks: - ccsnet From 227b59b0f76afc23709fea09a1c86a96117e8063 Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Mon, 14 May 2018 15:11:03 +0200 Subject: [PATCH 16/19] docs --- contrib/docker/README.md | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/contrib/docker/README.md b/contrib/docker/README.md index 0ecce84a1..162b1525e 100644 --- a/contrib/docker/README.md +++ b/contrib/docker/README.md @@ -8,11 +8,26 @@ It uses `setup.py` and expects external __Postgres__ and __Memcached__. __Postgres__ schema must be manually defined during the first run, using [current.sql](https://github.com/apple/ccs-calendarserver/blob/master/txdav/common/datastore/sql_schema/current.sql). +What is being done in our `docker-compose.yml` is adding the SQL file in +`/docker-entrypoint-initdb.d` as suggested +[here](https://hub.docker.com/_/postgres/), at chapter: +*How to extend this image*. + +## Running + +### Docker Swarm +```bash +$ docker stack deploy -c docker-compose.yml ccs-stack +``` + +### K8s / OpenShift +__TODO__ + ## Configuration Configuration of CCS is done in multiple layers: -1. `caldavd.base.plist`, is added as is to the image. Is not to be used alone: it is imported by: -2. `caldavd.envsubst.plist`, on which env variable are replaced by `docker_entrypoint.sh`. This takes care of loading: -3. `/etc/caldavd/caldavd.ext.plist`, which may be added via a *VOLUME*. \ No newline at end of file +1. `caldavd.envsubst.plist`, on which env variable are replaced by `docker_entrypoint.sh`. This takes care of loading: +2. `/etc/caldavd/caldavd.ext.plist`, which may be added via a *VOLUME*, envsubst is applied. +3. `/etc/caldavd/caldavd.writable.plist`, as a writable config file is required by CCS \ No newline at end of file From 1ff7cd95df0d25ed0cccf6b667e51e899631c0b6 Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Sun, 10 Jun 2018 10:58:46 +0200 Subject: [PATCH 17/19] setting up an example config for directory with xml --- contrib/docker/README.md | 15 ++++- contrib/docker/docker_entrypoint.sh | 10 +++- contrib/docker/samples/xml/conf/accounts.xml | 38 ++++++++++++ .../docker/samples/xml/conf/caldavd.ext.plist | 46 +++++++++++++++ contrib/docker/samples/xml/docker-compose.yml | 58 +++++++++++++++++++ 5 files changed, 162 insertions(+), 5 deletions(-) create mode 100644 contrib/docker/samples/xml/conf/accounts.xml create mode 100644 contrib/docker/samples/xml/conf/caldavd.ext.plist create mode 100644 contrib/docker/samples/xml/docker-compose.yml diff --git a/contrib/docker/README.md b/contrib/docker/README.md index 162b1525e..662ad8aa3 100644 --- a/contrib/docker/README.md +++ b/contrib/docker/README.md @@ -29,5 +29,16 @@ __TODO__ Configuration of CCS is done in multiple layers: 1. `caldavd.envsubst.plist`, on which env variable are replaced by `docker_entrypoint.sh`. This takes care of loading: -2. `/etc/caldavd/caldavd.ext.plist`, which may be added via a *VOLUME*, envsubst is applied. -3. `/etc/caldavd/caldavd.writable.plist`, as a writable config file is required by CCS \ No newline at end of file +2. `/etc/caldavd/caldavd.ext.plist`, which may be added via a *VOLUME*, envsubst is __NOT__ applied to this. +3. `/etc/caldavd/caldavd.writable.plist`, as a writable config file is required by CCS. + + +### XML example +In `contrib/docker/samples/xml` is a sample Docker stack where +XML is used to define accounts. + +### LDAP example +__TODO__ + +In `contrib/docker/samples/ldap` a stack with Apache DS is defined +to test getting resources via LDAP. \ No newline at end of file diff --git a/contrib/docker/docker_entrypoint.sh b/contrib/docker/docker_entrypoint.sh index 1feca6f14..73d384049 100755 --- a/contrib/docker/docker_entrypoint.sh +++ b/contrib/docker/docker_entrypoint.sh @@ -19,9 +19,13 @@ CCS_USER_CONF_FILE="/etc/caldavd/caldavd.ext.plist" # Replace any env variable as they come from docker run envsubst < $CCS_CONF_TEMP_FILE > $CCS_CONF_FILE +# Doesn't work in-place, +# doesn't make much sense to have either: +# as the user is already defining their config... +# # Replace env variables in user defined config if exists -if [ -f $CCS_USER_CONF_FILE ]; then - envsubst < $CCS_USER_CONF_FILE > $CCS_USER_CONF_FILE -fi +# if [ -f $CCS_USER_CONF_FILE ]; then +# envsubst < $CCS_USER_CONF_FILE > $CCS_USER_CONF_FILE +# fi exec "$@" diff --git a/contrib/docker/samples/xml/conf/accounts.xml b/contrib/docker/samples/xml/conf/accounts.xml new file mode 100644 index 000000000..8030f5863 --- /dev/null +++ b/contrib/docker/samples/xml/conf/accounts.xml @@ -0,0 +1,38 @@ + + + + + + + + + 0C8BDE62-E600-4696-83D3-8B5ECABDFD2E + 0C8BDE62-E600-4696-83D3-8B5ECABDFD2E + admin + admin + Super User + admin@example.com + + + 29B6C503-11DF-43EC-8CCA-40C7003149CE + 29B6C503-11DF-43EC-8CCA-40C7003149CE + test + test + Test User + test@example.com + + diff --git a/contrib/docker/samples/xml/conf/caldavd.ext.plist b/contrib/docker/samples/xml/conf/caldavd.ext.plist new file mode 100644 index 000000000..5b6d5353d --- /dev/null +++ b/contrib/docker/samples/xml/conf/caldavd.ext.plist @@ -0,0 +1,46 @@ + + + + + + + + + + + + DirectoryService + + type + xml + + params + + xmlFile + /etc/caldavd/accounts.xml + + + + + diff --git a/contrib/docker/samples/xml/docker-compose.yml b/contrib/docker/samples/xml/docker-compose.yml new file mode 100644 index 000000000..0ca3ab24c --- /dev/null +++ b/contrib/docker/samples/xml/docker-compose.yml @@ -0,0 +1,58 @@ + +version: "3.3" + +configs: + sql_seed: + file: ../../../../txdav/common/datastore/sql_schema/current.sql + +services: + ccs: + image: giorgioazzinnaro/ccs-calendarserver + environment: + POSTGRES_HOST: 'tcp:postgres:5432' + POSTGRES_DB: ccs + POSTGRES_USER: caldavd + POSTGRES_PASS: test1234 + MEMCACHED_HOST: memcached + MEMCACHED_PORT: 11211 + volumes: + - ccsdata:/var/db/caldavd + - ./conf:/etc/caldavd + networks: + - ccsnet + ports: + - "8080:8080" + depends_on: + - postgres + - memcached + restart: always + + postgres: + image: postgres + restart: always + environment: + POSTGRES_DB: ccs + POSTGRES_USER: caldavd + POSTGRES_PASSWORD: test1234 + volumes: + - "postgresdata:/var/lib/postgresql/data" + configs: + - source: sql_seed + target: /docker-entrypoint-initdb.d/ccs.sql + networks: + - ccsnet + + memcached: + image: memcached:1.5 + networks: + - ccsnet + + +volumes: + postgresdata: + ccsdata: + ccsconf: + + +networks: + ccsnet: \ No newline at end of file From 3a4c2c114eb5c496acc7a70066fd8d91606d8bb9 Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Sun, 10 Jun 2018 13:56:52 +0200 Subject: [PATCH 18/19] a full example based on original README.md --- .../docker/samples/xml/conf/accounts-test.xml | 1648 +++++++++++++++++ contrib/docker/samples/xml/conf/accounts.xml | 38 - .../docker/samples/xml/conf/augments-test.xml | 82 + .../docker/samples/xml/conf/caldavd.ext.plist | 84 +- .../docker/samples/xml/conf/proxies-test.xml | 120 ++ .../samples/xml/conf/resources-test.xml | 1253 +++++++++++++ 6 files changed, 3186 insertions(+), 39 deletions(-) create mode 100755 contrib/docker/samples/xml/conf/accounts-test.xml delete mode 100644 contrib/docker/samples/xml/conf/accounts.xml create mode 100644 contrib/docker/samples/xml/conf/augments-test.xml create mode 100644 contrib/docker/samples/xml/conf/proxies-test.xml create mode 100755 contrib/docker/samples/xml/conf/resources-test.xml diff --git a/contrib/docker/samples/xml/conf/accounts-test.xml b/contrib/docker/samples/xml/conf/accounts-test.xml new file mode 100755 index 000000000..d3f5afc5f --- /dev/null +++ b/contrib/docker/samples/xml/conf/accounts-test.xml @@ -0,0 +1,1648 @@ + + + + + + + + + 0C8BDE62-E600-4696-83D3-8B5ECABDFD2E + 0C8BDE62-E600-4696-83D3-8B5ECABDFD2E + admin + admin + Super User + admin@example.com + + + 29B6C503-11DF-43EC-8CCA-40C7003149CE + 29B6C503-11DF-43EC-8CCA-40C7003149CE + apprentice + apprentice + Apprentice Super User + apprentice@example.com + + + 860B3EE9-6D7C-4296-9639-E6B998074A78 + 860B3EE9-6D7C-4296-9639-E6B998074A78 + i18nuser + i18nuser + まだ + i18nuser@example.com + + + 10000000-0000-0000-0000-000000000001 + 10000000-0000-0000-0000-000000000001 + user01 + user01 + User 01 + user01@example.com + + + 10000000-0000-0000-0000-000000000002 + 10000000-0000-0000-0000-000000000002 + user02 + user02 + User 02 + user02@example.com + + + 10000000-0000-0000-0000-000000000003 + 10000000-0000-0000-0000-000000000003 + user03 + user03 + User 03 + user03@example.com + + + 10000000-0000-0000-0000-000000000004 + 10000000-0000-0000-0000-000000000004 + user04 + user04 + User 04 + user04@example.com + + + 10000000-0000-0000-0000-000000000005 + 10000000-0000-0000-0000-000000000005 + user05 + user05 + User 05 + user05@example.com + + + 10000000-0000-0000-0000-000000000006 + 10000000-0000-0000-0000-000000000006 + user06 + user06 + User 06 + user06@example.com + + + 10000000-0000-0000-0000-000000000007 + 10000000-0000-0000-0000-000000000007 + user07 + user07 + User 07 + user07@example.com + + + 10000000-0000-0000-0000-000000000008 + 10000000-0000-0000-0000-000000000008 + user08 + user08 + User 08 + user08@example.com + + + 10000000-0000-0000-0000-000000000009 + 10000000-0000-0000-0000-000000000009 + user09 + user09 + User 09 + user09@example.com + + + 10000000-0000-0000-0000-000000000010 + 10000000-0000-0000-0000-000000000010 + user10 + user10 + User 10 + user10@example.com + + + 10000000-0000-0000-0000-000000000011 + 10000000-0000-0000-0000-000000000011 + user11 + user11 + User 11 + user11@example.com + + + 10000000-0000-0000-0000-000000000012 + 10000000-0000-0000-0000-000000000012 + user12 + user12 + User 12 + user12@example.com + + + 10000000-0000-0000-0000-000000000013 + 10000000-0000-0000-0000-000000000013 + user13 + user13 + User 13 + user13@example.com + + + 10000000-0000-0000-0000-000000000014 + 10000000-0000-0000-0000-000000000014 + user14 + user14 + User 14 + user14@example.com + + + 10000000-0000-0000-0000-000000000015 + 10000000-0000-0000-0000-000000000015 + user15 + user15 + User 15 + user15@example.com + + + 10000000-0000-0000-0000-000000000016 + 10000000-0000-0000-0000-000000000016 + user16 + user16 + User 16 + user16@example.com + + + 10000000-0000-0000-0000-000000000017 + 10000000-0000-0000-0000-000000000017 + user17 + user17 + User 17 + user17@example.com + + + 10000000-0000-0000-0000-000000000018 + 10000000-0000-0000-0000-000000000018 + user18 + user18 + User 18 + user18@example.com + + + 10000000-0000-0000-0000-000000000019 + 10000000-0000-0000-0000-000000000019 + user19 + user19 + User 19 + user19@example.com + + + 10000000-0000-0000-0000-000000000020 + 10000000-0000-0000-0000-000000000020 + user20 + user20 + User 20 + user20@example.com + + + 10000000-0000-0000-0000-000000000021 + 10000000-0000-0000-0000-000000000021 + user21 + user21 + User 21 + user21@example.com + + + 10000000-0000-0000-0000-000000000022 + 10000000-0000-0000-0000-000000000022 + user22 + user22 + User 22 + user22@example.com + + + 10000000-0000-0000-0000-000000000023 + 10000000-0000-0000-0000-000000000023 + user23 + user23 + User 23 + user23@example.com + + + 10000000-0000-0000-0000-000000000024 + 10000000-0000-0000-0000-000000000024 + user24 + user24 + User 24 + user24@example.com + + + 10000000-0000-0000-0000-000000000025 + 10000000-0000-0000-0000-000000000025 + user25 + user25 + User 25 + user25@example.com + + + 10000000-0000-0000-0000-000000000026 + 10000000-0000-0000-0000-000000000026 + user26 + user26 + User 26 + user26@example.com + + + 10000000-0000-0000-0000-000000000027 + 10000000-0000-0000-0000-000000000027 + user27 + user27 + User 27 + user27@example.com + + + 10000000-0000-0000-0000-000000000028 + 10000000-0000-0000-0000-000000000028 + user28 + user28 + User 28 + user28@example.com + + + 10000000-0000-0000-0000-000000000029 + 10000000-0000-0000-0000-000000000029 + user29 + user29 + User 29 + user29@example.com + + + 10000000-0000-0000-0000-000000000030 + 10000000-0000-0000-0000-000000000030 + user30 + user30 + User 30 + user30@example.com + + + 10000000-0000-0000-0000-000000000031 + 10000000-0000-0000-0000-000000000031 + user31 + user31 + User 31 + user31@example.com + + + 10000000-0000-0000-0000-000000000032 + 10000000-0000-0000-0000-000000000032 + user32 + user32 + User 32 + user32@example.com + + + 10000000-0000-0000-0000-000000000033 + 10000000-0000-0000-0000-000000000033 + user33 + user33 + User 33 + user33@example.com + + + 10000000-0000-0000-0000-000000000034 + 10000000-0000-0000-0000-000000000034 + user34 + user34 + User 34 + user34@example.com + + + 10000000-0000-0000-0000-000000000035 + 10000000-0000-0000-0000-000000000035 + user35 + user35 + User 35 + user35@example.com + + + 10000000-0000-0000-0000-000000000036 + 10000000-0000-0000-0000-000000000036 + user36 + user36 + User 36 + user36@example.com + + + 10000000-0000-0000-0000-000000000037 + 10000000-0000-0000-0000-000000000037 + user37 + user37 + User 37 + user37@example.com + + + 10000000-0000-0000-0000-000000000038 + 10000000-0000-0000-0000-000000000038 + user38 + user38 + User 38 + user38@example.com + + + 10000000-0000-0000-0000-000000000039 + 10000000-0000-0000-0000-000000000039 + user39 + user39 + User 39 + user39@example.com + + + 10000000-0000-0000-0000-000000000040 + 10000000-0000-0000-0000-000000000040 + user40 + user40 + User 40 + user40@example.com + + + 10000000-0000-0000-0000-000000000041 + 10000000-0000-0000-0000-000000000041 + user41 + user41 + User 41 + user41@example.com + + + 10000000-0000-0000-0000-000000000042 + 10000000-0000-0000-0000-000000000042 + user42 + user42 + User 42 + user42@example.com + + + 10000000-0000-0000-0000-000000000043 + 10000000-0000-0000-0000-000000000043 + user43 + user43 + User 43 + user43@example.com + + + 10000000-0000-0000-0000-000000000044 + 10000000-0000-0000-0000-000000000044 + user44 + user44 + User 44 + user44@example.com + + + 10000000-0000-0000-0000-000000000045 + 10000000-0000-0000-0000-000000000045 + user45 + user45 + User 45 + user45@example.com + + + 10000000-0000-0000-0000-000000000046 + 10000000-0000-0000-0000-000000000046 + user46 + user46 + User 46 + user46@example.com + + + 10000000-0000-0000-0000-000000000047 + 10000000-0000-0000-0000-000000000047 + user47 + user47 + User 47 + user47@example.com + + + 10000000-0000-0000-0000-000000000048 + 10000000-0000-0000-0000-000000000048 + user48 + user48 + User 48 + user48@example.com + + + 10000000-0000-0000-0000-000000000049 + 10000000-0000-0000-0000-000000000049 + user49 + user49 + User 49 + user49@example.com + + + 10000000-0000-0000-0000-000000000050 + 10000000-0000-0000-0000-000000000050 + user50 + user50 + User 50 + user50@example.com + + + 10000000-0000-0000-0000-000000000051 + 10000000-0000-0000-0000-000000000051 + user51 + user51 + User 51 + user51@example.com + + + 10000000-0000-0000-0000-000000000052 + 10000000-0000-0000-0000-000000000052 + user52 + user52 + User 52 + user52@example.com + + + 10000000-0000-0000-0000-000000000053 + 10000000-0000-0000-0000-000000000053 + user53 + user53 + User 53 + user53@example.com + + + 10000000-0000-0000-0000-000000000054 + 10000000-0000-0000-0000-000000000054 + user54 + user54 + User 54 + user54@example.com + + + 10000000-0000-0000-0000-000000000055 + 10000000-0000-0000-0000-000000000055 + user55 + user55 + User 55 + user55@example.com + + + 10000000-0000-0000-0000-000000000056 + 10000000-0000-0000-0000-000000000056 + user56 + user56 + User 56 + user56@example.com + + + 10000000-0000-0000-0000-000000000057 + 10000000-0000-0000-0000-000000000057 + user57 + user57 + User 57 + user57@example.com + + + 10000000-0000-0000-0000-000000000058 + 10000000-0000-0000-0000-000000000058 + user58 + user58 + User 58 + user58@example.com + + + 10000000-0000-0000-0000-000000000059 + 10000000-0000-0000-0000-000000000059 + user59 + user59 + User 59 + user59@example.com + + + 10000000-0000-0000-0000-000000000060 + 10000000-0000-0000-0000-000000000060 + user60 + user60 + User 60 + user60@example.com + + + 10000000-0000-0000-0000-000000000061 + 10000000-0000-0000-0000-000000000061 + user61 + user61 + User 61 + user61@example.com + + + 10000000-0000-0000-0000-000000000062 + 10000000-0000-0000-0000-000000000062 + user62 + user62 + User 62 + user62@example.com + + + 10000000-0000-0000-0000-000000000063 + 10000000-0000-0000-0000-000000000063 + user63 + user63 + User 63 + user63@example.com + + + 10000000-0000-0000-0000-000000000064 + 10000000-0000-0000-0000-000000000064 + user64 + user64 + User 64 + user64@example.com + + + 10000000-0000-0000-0000-000000000065 + 10000000-0000-0000-0000-000000000065 + user65 + user65 + User 65 + user65@example.com + + + 10000000-0000-0000-0000-000000000066 + 10000000-0000-0000-0000-000000000066 + user66 + user66 + User 66 + user66@example.com + + + 10000000-0000-0000-0000-000000000067 + 10000000-0000-0000-0000-000000000067 + user67 + user67 + User 67 + user67@example.com + + + 10000000-0000-0000-0000-000000000068 + 10000000-0000-0000-0000-000000000068 + user68 + user68 + User 68 + user68@example.com + + + 10000000-0000-0000-0000-000000000069 + 10000000-0000-0000-0000-000000000069 + user69 + user69 + User 69 + user69@example.com + + + 10000000-0000-0000-0000-000000000070 + 10000000-0000-0000-0000-000000000070 + user70 + user70 + User 70 + user70@example.com + + + 10000000-0000-0000-0000-000000000071 + 10000000-0000-0000-0000-000000000071 + user71 + user71 + User 71 + user71@example.com + + + 10000000-0000-0000-0000-000000000072 + 10000000-0000-0000-0000-000000000072 + user72 + user72 + User 72 + user72@example.com + + + 10000000-0000-0000-0000-000000000073 + 10000000-0000-0000-0000-000000000073 + user73 + user73 + User 73 + user73@example.com + + + 10000000-0000-0000-0000-000000000074 + 10000000-0000-0000-0000-000000000074 + user74 + user74 + User 74 + user74@example.com + + + 10000000-0000-0000-0000-000000000075 + 10000000-0000-0000-0000-000000000075 + user75 + user75 + User 75 + user75@example.com + + + 10000000-0000-0000-0000-000000000076 + 10000000-0000-0000-0000-000000000076 + user76 + user76 + User 76 + user76@example.com + + + 10000000-0000-0000-0000-000000000077 + 10000000-0000-0000-0000-000000000077 + user77 + user77 + User 77 + user77@example.com + + + 10000000-0000-0000-0000-000000000078 + 10000000-0000-0000-0000-000000000078 + user78 + user78 + User 78 + user78@example.com + + + 10000000-0000-0000-0000-000000000079 + 10000000-0000-0000-0000-000000000079 + user79 + user79 + User 79 + user79@example.com + + + 10000000-0000-0000-0000-000000000080 + 10000000-0000-0000-0000-000000000080 + user80 + user80 + User 80 + user80@example.com + + + 10000000-0000-0000-0000-000000000081 + 10000000-0000-0000-0000-000000000081 + user81 + user81 + User 81 + user81@example.com + + + 10000000-0000-0000-0000-000000000082 + 10000000-0000-0000-0000-000000000082 + user82 + user82 + User 82 + user82@example.com + + + 10000000-0000-0000-0000-000000000083 + 10000000-0000-0000-0000-000000000083 + user83 + user83 + User 83 + user83@example.com + + + 10000000-0000-0000-0000-000000000084 + 10000000-0000-0000-0000-000000000084 + user84 + user84 + User 84 + user84@example.com + + + 10000000-0000-0000-0000-000000000085 + 10000000-0000-0000-0000-000000000085 + user85 + user85 + User 85 + user85@example.com + + + 10000000-0000-0000-0000-000000000086 + 10000000-0000-0000-0000-000000000086 + user86 + user86 + User 86 + user86@example.com + + + 10000000-0000-0000-0000-000000000087 + 10000000-0000-0000-0000-000000000087 + user87 + user87 + User 87 + user87@example.com + + + 10000000-0000-0000-0000-000000000088 + 10000000-0000-0000-0000-000000000088 + user88 + user88 + User 88 + user88@example.com + + + 10000000-0000-0000-0000-000000000089 + 10000000-0000-0000-0000-000000000089 + user89 + user89 + User 89 + user89@example.com + + + 10000000-0000-0000-0000-000000000090 + 10000000-0000-0000-0000-000000000090 + user90 + user90 + User 90 + user90@example.com + + + 10000000-0000-0000-0000-000000000091 + 10000000-0000-0000-0000-000000000091 + user91 + user91 + User 91 + user91@example.com + + + 10000000-0000-0000-0000-000000000092 + 10000000-0000-0000-0000-000000000092 + user92 + user92 + User 92 + user92@example.com + + + 10000000-0000-0000-0000-000000000093 + 10000000-0000-0000-0000-000000000093 + user93 + user93 + User 93 + user93@example.com + + + 10000000-0000-0000-0000-000000000094 + 10000000-0000-0000-0000-000000000094 + user94 + user94 + User 94 + user94@example.com + + + 10000000-0000-0000-0000-000000000095 + 10000000-0000-0000-0000-000000000095 + user95 + user95 + User 95 + user95@example.com + + + 10000000-0000-0000-0000-000000000096 + 10000000-0000-0000-0000-000000000096 + user96 + user96 + User 96 + user96@example.com + + + 10000000-0000-0000-0000-000000000097 + 10000000-0000-0000-0000-000000000097 + user97 + user97 + User 97 + user97@example.com + + + 10000000-0000-0000-0000-000000000098 + 10000000-0000-0000-0000-000000000098 + user98 + user98 + User 98 + user98@example.com + + + 10000000-0000-0000-0000-000000000099 + 10000000-0000-0000-0000-000000000099 + user99 + user99 + User 99 + user99@example.com + + + 10000000-0000-0000-0000-000000000100 + 10000000-0000-0000-0000-000000000100 + user100 + user100 + User 100 + user100@example.com + + + 10000000-0000-0000-0000-000000000101 + 10000000-0000-0000-0000-000000000101 + user101 + user101 + User 101 + user101@example.com + + + 50000000-0000-0000-0000-000000000001 + 50000000-0000-0000-0000-000000000001 + public01 + public01 + Public 01 + public01@example.com + + + 50000000-0000-0000-0000-000000000002 + 50000000-0000-0000-0000-000000000002 + public02 + public02 + Public 02 + public02@example.com + + + 50000000-0000-0000-0000-000000000003 + 50000000-0000-0000-0000-000000000003 + public03 + public03 + Public 03 + public03@example.com + + + 50000000-0000-0000-0000-000000000004 + 50000000-0000-0000-0000-000000000004 + public04 + public04 + Public 04 + public04@example.com + + + 50000000-0000-0000-0000-000000000005 + 50000000-0000-0000-0000-000000000005 + public05 + public05 + Public 05 + public05@example.com + + + 50000000-0000-0000-0000-000000000006 + 50000000-0000-0000-0000-000000000006 + public06 + public06 + Public 06 + public06@example.com + + + 50000000-0000-0000-0000-000000000007 + 50000000-0000-0000-0000-000000000007 + public07 + public07 + Public 07 + public07@example.com + + + 50000000-0000-0000-0000-000000000008 + 50000000-0000-0000-0000-000000000008 + public08 + public08 + Public 08 + public08@example.com + + + 50000000-0000-0000-0000-000000000009 + 50000000-0000-0000-0000-000000000009 + public09 + public09 + Public 09 + public09@example.com + + + 50000000-0000-0000-0000-000000000010 + 50000000-0000-0000-0000-000000000010 + public10 + public10 + Public 10 + public10@example.com + + + 20000000-0000-0000-0000-000000000001 + 20000000-0000-0000-0000-000000000001 + group01 + Group 01 + group01@example.com + 10000000-0000-0000-0000-000000000001 + + + 20000000-0000-0000-0000-000000000002 + 20000000-0000-0000-0000-000000000002 + group02 + Group 02 + group02@example.com + 10000000-0000-0000-0000-000000000006 + 10000000-0000-0000-0000-000000000007 + + + 20000000-0000-0000-0000-000000000003 + 20000000-0000-0000-0000-000000000003 + group03 + Group 03 + group03@example.com + 10000000-0000-0000-0000-000000000008 + 10000000-0000-0000-0000-000000000009 + + + 20000000-0000-0000-0000-000000000004 + 20000000-0000-0000-0000-000000000004 + group04 + Group 04 + group04@example.com + 20000000-0000-0000-0000-000000000002 + 20000000-0000-0000-0000-000000000003 + 10000000-0000-0000-0000-000000000010 + + + 20000000-0000-0000-0000-000000000005 + 20000000-0000-0000-0000-000000000005 + group05 + Group 05 + group05@example.com + 20000000-0000-0000-0000-000000000006 + 10000000-0000-0000-0000-000000000020 + + + 20000000-0000-0000-0000-000000000006 + 20000000-0000-0000-0000-000000000006 + group06 + Group 06 + group06@example.com + 10000000-0000-0000-0000-000000000021 + + + 20000000-0000-0000-0000-000000000007 + 20000000-0000-0000-0000-000000000007 + group07 + Group 07 + group07@example.com + 10000000-0000-0000-0000-000000000022 + 10000000-0000-0000-0000-000000000023 + 10000000-0000-0000-0000-000000000024 + + + 20000000-0000-0000-0000-000000000008 + 20000000-0000-0000-0000-000000000008 + group08 + Group 08 + group08@example.com + + + 20000000-0000-0000-0000-000000000009 + 20000000-0000-0000-0000-000000000009 + group09 + Group 09 + group09@example.com + + + 20000000-0000-0000-0000-000000000010 + 20000000-0000-0000-0000-000000000010 + group10 + Group 10 + group10@example.com + + + 20000000-0000-0000-0000-000000000011 + 20000000-0000-0000-0000-000000000011 + group11 + Group 11 + group11@example.com + + + 20000000-0000-0000-0000-000000000012 + 20000000-0000-0000-0000-000000000012 + group12 + Group 12 + group12@example.com + + + 20000000-0000-0000-0000-000000000013 + 20000000-0000-0000-0000-000000000013 + group13 + Group 13 + group13@example.com + + + 20000000-0000-0000-0000-000000000014 + 20000000-0000-0000-0000-000000000014 + group14 + Group 14 + group14@example.com + + + 20000000-0000-0000-0000-000000000015 + 20000000-0000-0000-0000-000000000015 + group15 + Group 15 + group15@example.com + + + 20000000-0000-0000-0000-000000000016 + 20000000-0000-0000-0000-000000000016 + group16 + Group 16 + group16@example.com + + + 20000000-0000-0000-0000-000000000017 + 20000000-0000-0000-0000-000000000017 + group17 + Group 17 + group17@example.com + + + 20000000-0000-0000-0000-000000000018 + 20000000-0000-0000-0000-000000000018 + group18 + Group 18 + group18@example.com + + + 20000000-0000-0000-0000-000000000019 + 20000000-0000-0000-0000-000000000019 + group19 + Group 19 + group19@example.com + + + 20000000-0000-0000-0000-000000000020 + 20000000-0000-0000-0000-000000000020 + group20 + Group 20 + group20@example.com + + + 20000000-0000-0000-0000-000000000021 + 20000000-0000-0000-0000-000000000021 + group21 + Group 21 + group21@example.com + + + 20000000-0000-0000-0000-000000000022 + 20000000-0000-0000-0000-000000000022 + group22 + Group 22 + group22@example.com + + + 20000000-0000-0000-0000-000000000023 + 20000000-0000-0000-0000-000000000023 + group23 + Group 23 + group23@example.com + + + 20000000-0000-0000-0000-000000000024 + 20000000-0000-0000-0000-000000000024 + group24 + Group 24 + group24@example.com + + + 20000000-0000-0000-0000-000000000025 + 20000000-0000-0000-0000-000000000025 + group25 + Group 25 + group25@example.com + + + 20000000-0000-0000-0000-000000000026 + 20000000-0000-0000-0000-000000000026 + group26 + Group 26 + group26@example.com + + + 20000000-0000-0000-0000-000000000027 + 20000000-0000-0000-0000-000000000027 + group27 + Group 27 + group27@example.com + + + 20000000-0000-0000-0000-000000000028 + 20000000-0000-0000-0000-000000000028 + group28 + Group 28 + group28@example.com + + + 20000000-0000-0000-0000-000000000029 + 20000000-0000-0000-0000-000000000029 + group29 + Group 29 + group29@example.com + + + 20000000-0000-0000-0000-000000000030 + 20000000-0000-0000-0000-000000000030 + group30 + Group 30 + group30@example.com + + + 20000000-0000-0000-0000-000000000031 + 20000000-0000-0000-0000-000000000031 + group31 + Group 31 + group31@example.com + + + 20000000-0000-0000-0000-000000000032 + 20000000-0000-0000-0000-000000000032 + group32 + Group 32 + group32@example.com + + + 20000000-0000-0000-0000-000000000033 + 20000000-0000-0000-0000-000000000033 + group33 + Group 33 + group33@example.com + + + 20000000-0000-0000-0000-000000000034 + 20000000-0000-0000-0000-000000000034 + group34 + Group 34 + group34@example.com + + + 20000000-0000-0000-0000-000000000035 + 20000000-0000-0000-0000-000000000035 + group35 + Group 35 + group35@example.com + + + 20000000-0000-0000-0000-000000000036 + 20000000-0000-0000-0000-000000000036 + group36 + Group 36 + group36@example.com + + + 20000000-0000-0000-0000-000000000037 + 20000000-0000-0000-0000-000000000037 + group37 + Group 37 + group37@example.com + + + 20000000-0000-0000-0000-000000000038 + 20000000-0000-0000-0000-000000000038 + group38 + Group 38 + group38@example.com + + + 20000000-0000-0000-0000-000000000039 + 20000000-0000-0000-0000-000000000039 + group39 + Group 39 + group39@example.com + + + 20000000-0000-0000-0000-000000000040 + 20000000-0000-0000-0000-000000000040 + group40 + Group 40 + group40@example.com + + + 20000000-0000-0000-0000-000000000041 + 20000000-0000-0000-0000-000000000041 + group41 + Group 41 + group41@example.com + + + 20000000-0000-0000-0000-000000000042 + 20000000-0000-0000-0000-000000000042 + group42 + Group 42 + group42@example.com + + + 20000000-0000-0000-0000-000000000043 + 20000000-0000-0000-0000-000000000043 + group43 + Group 43 + group43@example.com + + + 20000000-0000-0000-0000-000000000044 + 20000000-0000-0000-0000-000000000044 + group44 + Group 44 + group44@example.com + + + 20000000-0000-0000-0000-000000000045 + 20000000-0000-0000-0000-000000000045 + group45 + Group 45 + group45@example.com + + + 20000000-0000-0000-0000-000000000046 + 20000000-0000-0000-0000-000000000046 + group46 + Group 46 + group46@example.com + + + 20000000-0000-0000-0000-000000000047 + 20000000-0000-0000-0000-000000000047 + group47 + Group 47 + group47@example.com + + + 20000000-0000-0000-0000-000000000048 + 20000000-0000-0000-0000-000000000048 + group48 + Group 48 + group48@example.com + + + 20000000-0000-0000-0000-000000000049 + 20000000-0000-0000-0000-000000000049 + group49 + Group 49 + group49@example.com + + + 20000000-0000-0000-0000-000000000050 + 20000000-0000-0000-0000-000000000050 + group50 + Group 50 + group50@example.com + + + 20000000-0000-0000-0000-000000000051 + 20000000-0000-0000-0000-000000000051 + group51 + Group 51 + group51@example.com + + + 20000000-0000-0000-0000-000000000052 + 20000000-0000-0000-0000-000000000052 + group52 + Group 52 + group52@example.com + + + 20000000-0000-0000-0000-000000000053 + 20000000-0000-0000-0000-000000000053 + group53 + Group 53 + group53@example.com + + + 20000000-0000-0000-0000-000000000054 + 20000000-0000-0000-0000-000000000054 + group54 + Group 54 + group54@example.com + + + 20000000-0000-0000-0000-000000000055 + 20000000-0000-0000-0000-000000000055 + group55 + Group 55 + group55@example.com + + + 20000000-0000-0000-0000-000000000056 + 20000000-0000-0000-0000-000000000056 + group56 + Group 56 + group56@example.com + + + 20000000-0000-0000-0000-000000000057 + 20000000-0000-0000-0000-000000000057 + group57 + Group 57 + group57@example.com + + + 20000000-0000-0000-0000-000000000058 + 20000000-0000-0000-0000-000000000058 + group58 + Group 58 + group58@example.com + + + 20000000-0000-0000-0000-000000000059 + 20000000-0000-0000-0000-000000000059 + group59 + Group 59 + group59@example.com + + + 20000000-0000-0000-0000-000000000060 + 20000000-0000-0000-0000-000000000060 + group60 + Group 60 + group60@example.com + + + 20000000-0000-0000-0000-000000000061 + 20000000-0000-0000-0000-000000000061 + group61 + Group 61 + group61@example.com + + + 20000000-0000-0000-0000-000000000062 + 20000000-0000-0000-0000-000000000062 + group62 + Group 62 + group62@example.com + + + 20000000-0000-0000-0000-000000000063 + 20000000-0000-0000-0000-000000000063 + group63 + Group 63 + group63@example.com + + + 20000000-0000-0000-0000-000000000064 + 20000000-0000-0000-0000-000000000064 + group64 + Group 64 + group64@example.com + + + 20000000-0000-0000-0000-000000000065 + 20000000-0000-0000-0000-000000000065 + group65 + Group 65 + group65@example.com + + + 20000000-0000-0000-0000-000000000066 + 20000000-0000-0000-0000-000000000066 + group66 + Group 66 + group66@example.com + + + 20000000-0000-0000-0000-000000000067 + 20000000-0000-0000-0000-000000000067 + group67 + Group 67 + group67@example.com + + + 20000000-0000-0000-0000-000000000068 + 20000000-0000-0000-0000-000000000068 + group68 + Group 68 + group68@example.com + + + 20000000-0000-0000-0000-000000000069 + 20000000-0000-0000-0000-000000000069 + group69 + Group 69 + group69@example.com + + + 20000000-0000-0000-0000-000000000070 + 20000000-0000-0000-0000-000000000070 + group70 + Group 70 + group70@example.com + + + 20000000-0000-0000-0000-000000000071 + 20000000-0000-0000-0000-000000000071 + group71 + Group 71 + group71@example.com + + + 20000000-0000-0000-0000-000000000072 + 20000000-0000-0000-0000-000000000072 + group72 + Group 72 + group72@example.com + + + 20000000-0000-0000-0000-000000000073 + 20000000-0000-0000-0000-000000000073 + group73 + Group 73 + group73@example.com + + + 20000000-0000-0000-0000-000000000074 + 20000000-0000-0000-0000-000000000074 + group74 + Group 74 + group74@example.com + + + 20000000-0000-0000-0000-000000000075 + 20000000-0000-0000-0000-000000000075 + group75 + Group 75 + group75@example.com + + + 20000000-0000-0000-0000-000000000076 + 20000000-0000-0000-0000-000000000076 + group76 + Group 76 + group76@example.com + + + 20000000-0000-0000-0000-000000000077 + 20000000-0000-0000-0000-000000000077 + group77 + Group 77 + group77@example.com + + + 20000000-0000-0000-0000-000000000078 + 20000000-0000-0000-0000-000000000078 + group78 + Group 78 + group78@example.com + + + 20000000-0000-0000-0000-000000000079 + 20000000-0000-0000-0000-000000000079 + group79 + Group 79 + group79@example.com + + + 20000000-0000-0000-0000-000000000080 + 20000000-0000-0000-0000-000000000080 + group80 + Group 80 + group80@example.com + + + 20000000-0000-0000-0000-000000000081 + 20000000-0000-0000-0000-000000000081 + group81 + Group 81 + group81@example.com + + + 20000000-0000-0000-0000-000000000082 + 20000000-0000-0000-0000-000000000082 + group82 + Group 82 + group82@example.com + + + 20000000-0000-0000-0000-000000000083 + 20000000-0000-0000-0000-000000000083 + group83 + Group 83 + group83@example.com + + + 20000000-0000-0000-0000-000000000084 + 20000000-0000-0000-0000-000000000084 + group84 + Group 84 + group84@example.com + + + 20000000-0000-0000-0000-000000000085 + 20000000-0000-0000-0000-000000000085 + group85 + Group 85 + group85@example.com + + + 20000000-0000-0000-0000-000000000086 + 20000000-0000-0000-0000-000000000086 + group86 + Group 86 + group86@example.com + + + 20000000-0000-0000-0000-000000000087 + 20000000-0000-0000-0000-000000000087 + group87 + Group 87 + group87@example.com + + + 20000000-0000-0000-0000-000000000088 + 20000000-0000-0000-0000-000000000088 + group88 + Group 88 + group88@example.com + + + 20000000-0000-0000-0000-000000000089 + 20000000-0000-0000-0000-000000000089 + group89 + Group 89 + group89@example.com + + + 20000000-0000-0000-0000-000000000090 + 20000000-0000-0000-0000-000000000090 + group90 + Group 90 + group90@example.com + + + 20000000-0000-0000-0000-000000000091 + 20000000-0000-0000-0000-000000000091 + group91 + Group 91 + group91@example.com + + + 20000000-0000-0000-0000-000000000092 + 20000000-0000-0000-0000-000000000092 + group92 + Group 92 + group92@example.com + + + 20000000-0000-0000-0000-000000000093 + 20000000-0000-0000-0000-000000000093 + group93 + Group 93 + group93@example.com + + + 20000000-0000-0000-0000-000000000094 + 20000000-0000-0000-0000-000000000094 + group94 + Group 94 + group94@example.com + + + 20000000-0000-0000-0000-000000000095 + 20000000-0000-0000-0000-000000000095 + group95 + Group 95 + group95@example.com + + + 20000000-0000-0000-0000-000000000096 + 20000000-0000-0000-0000-000000000096 + group96 + Group 96 + group96@example.com + + + 20000000-0000-0000-0000-000000000097 + 20000000-0000-0000-0000-000000000097 + group97 + Group 97 + group97@example.com + + + 20000000-0000-0000-0000-000000000098 + 20000000-0000-0000-0000-000000000098 + group98 + Group 98 + group98@example.com + + + 20000000-0000-0000-0000-000000000099 + 20000000-0000-0000-0000-000000000099 + group99 + Group 99 + group99@example.com + + + 20000000-0000-0000-0000-000000000100 + 20000000-0000-0000-0000-000000000100 + group100 + Group 100 + group100@example.com + + diff --git a/contrib/docker/samples/xml/conf/accounts.xml b/contrib/docker/samples/xml/conf/accounts.xml deleted file mode 100644 index 8030f5863..000000000 --- a/contrib/docker/samples/xml/conf/accounts.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - 0C8BDE62-E600-4696-83D3-8B5ECABDFD2E - 0C8BDE62-E600-4696-83D3-8B5ECABDFD2E - admin - admin - Super User - admin@example.com - - - 29B6C503-11DF-43EC-8CCA-40C7003149CE - 29B6C503-11DF-43EC-8CCA-40C7003149CE - test - test - Test User - test@example.com - - diff --git a/contrib/docker/samples/xml/conf/augments-test.xml b/contrib/docker/samples/xml/conf/augments-test.xml new file mode 100644 index 000000000..bd579e825 --- /dev/null +++ b/contrib/docker/samples/xml/conf/augments-test.xml @@ -0,0 +1,82 @@ + + + + + + + + + Default + true + true + + + Location-Default + true + true + automatic + + + Resource-Default + true + true + automatic + + + 40000000-0000-0000-0000-000000000005 + true + true + none + + + 40000000-0000-0000-0000-000000000006 + true + true + accept-always + + + 40000000-0000-0000-0000-000000000007 + true + true + decline-always + + + 40000000-0000-0000-0000-000000000008 + true + true + accept-if-free + + + 40000000-0000-0000-0000-000000000009 + true + true + decline-if-busy + + + 40000000-0000-0000-0000-000000000010 + true + true + automatic + + + 40000000-0000-0000-0000-000000000011 + true + true + decline-always + 20000000-0000-0000-0000-000000000001 + + diff --git a/contrib/docker/samples/xml/conf/caldavd.ext.plist b/contrib/docker/samples/xml/conf/caldavd.ext.plist index 5b6d5353d..c0e26ef1c 100644 --- a/contrib/docker/samples/xml/conf/caldavd.ext.plist +++ b/contrib/docker/samples/xml/conf/caldavd.ext.plist @@ -38,9 +38,91 @@ params xmlFile - /etc/caldavd/accounts.xml + /etc/caldavd/accounts-test.xml + + DirectoryRealmName + Test Realm + + + ResourceService + + Enabled + + type + xml + + params + + xmlFile + /etc/caldavd/resources-test.xml + + + + + AugmentService + + type + xml + + params + + xmlFiles + + /etc/caldavd/augments-test.xml + + + + + ProxyLoadFromFile + /etc/caldavd/proxies-test.xml + + + + + + AdminPrincipals + + /principals/__uids__/0C8BDE62-E600-4696-83D3-8B5ECABDFD2E/ + + + + ReadPrincipals + + + + + + EnableProxyPrincipals + + + + + + + EnableAnonymousReadRoot + + + + EnableAnonymousReadNav + + + + EnablePrincipalListings + + + + EnableMonolithicCalendars + + diff --git a/contrib/docker/samples/xml/conf/proxies-test.xml b/contrib/docker/samples/xml/conf/proxies-test.xml new file mode 100644 index 000000000..05fe0f05a --- /dev/null +++ b/contrib/docker/samples/xml/conf/proxies-test.xml @@ -0,0 +1,120 @@ + + + + + + + + + 40000000-0000-0000-0000-000000000001 + + 10000000-0000-0000-0000-000000000001 + + + 10000000-0000-0000-0000-000000000003 + + + + 40000000-0000-0000-0000-000000000002 + + 10000000-0000-0000-0000-000000000001 + + + 10000000-0000-0000-0000-000000000003 + + + + 40000000-0000-0000-0000-000000000003 + + 10000000-0000-0000-0000-000000000001 + + + 10000000-0000-0000-0000-000000000003 + + + + 40000000-0000-0000-0000-000000000004 + + 10000000-0000-0000-0000-000000000001 + + + 10000000-0000-0000-0000-000000000003 + + + + 40000000-0000-0000-0000-000000000005 + + 10000000-0000-0000-0000-000000000001 + + + 10000000-0000-0000-0000-000000000003 + + + + 40000000-0000-0000-0000-000000000006 + + 10000000-0000-0000-0000-000000000001 + + + 10000000-0000-0000-0000-000000000003 + + + + 40000000-0000-0000-0000-000000000007 + + 10000000-0000-0000-0000-000000000001 + + + 10000000-0000-0000-0000-000000000003 + + + + 40000000-0000-0000-0000-000000000008 + + 10000000-0000-0000-0000-000000000001 + + + 10000000-0000-0000-0000-000000000003 + + + + 40000000-0000-0000-0000-000000000009 + + 10000000-0000-0000-0000-000000000001 + + + 10000000-0000-0000-0000-000000000003 + + + + 40000000-0000-0000-0000-000000000010 + + 10000000-0000-0000-0000-000000000001 + + + 10000000-0000-0000-0000-000000000003 + + + + delegatedroom + + 20000000-0000-0000-0000-000000000005 + + + + + diff --git a/contrib/docker/samples/xml/conf/resources-test.xml b/contrib/docker/samples/xml/conf/resources-test.xml new file mode 100755 index 000000000..a7edc2ea3 --- /dev/null +++ b/contrib/docker/samples/xml/conf/resources-test.xml @@ -0,0 +1,1253 @@ + + + + + + + + + pretend + pretend + Pretend Conference Room + il1 + + + il1 + il1 + IL1 + 1 Infinite Loop, Cupertino, CA 95014 + geo:37.331741,-122.030333 + + + fantastic + fantastic + Fantastic Conference Room + il2 + + + il2 + il2 + IL2 + 2 Infinite Loop, Cupertino, CA 95014 + geo:37.332633,-122.030502 + + + delegatedroom + delegatedroom + Delegated Conference Room + + + 30000000-0000-0000-0000-000000000001 + 30000000-0000-0000-0000-000000000001 + location01 + Location 01 + + + 30000000-0000-0000-0000-000000000002 + 30000000-0000-0000-0000-000000000002 + location02 + Location 02 + + + 30000000-0000-0000-0000-000000000003 + 30000000-0000-0000-0000-000000000003 + location03 + Location 03 + + + 30000000-0000-0000-0000-000000000004 + 30000000-0000-0000-0000-000000000004 + location04 + Location 04 + + + 30000000-0000-0000-0000-000000000005 + 30000000-0000-0000-0000-000000000005 + location05 + Location 05 + + + 30000000-0000-0000-0000-000000000006 + 30000000-0000-0000-0000-000000000006 + location06 + Location 06 + + + 30000000-0000-0000-0000-000000000007 + 30000000-0000-0000-0000-000000000007 + location07 + Location 07 + + + 30000000-0000-0000-0000-000000000008 + 30000000-0000-0000-0000-000000000008 + location08 + Location 08 + + + 30000000-0000-0000-0000-000000000009 + 30000000-0000-0000-0000-000000000009 + location09 + Location 09 + + + 30000000-0000-0000-0000-000000000010 + 30000000-0000-0000-0000-000000000010 + location10 + Location 10 + + + 30000000-0000-0000-0000-000000000011 + 30000000-0000-0000-0000-000000000011 + location11 + Location 11 + + + 30000000-0000-0000-0000-000000000012 + 30000000-0000-0000-0000-000000000012 + location12 + Location 12 + + + 30000000-0000-0000-0000-000000000013 + 30000000-0000-0000-0000-000000000013 + location13 + Location 13 + + + 30000000-0000-0000-0000-000000000014 + 30000000-0000-0000-0000-000000000014 + location14 + Location 14 + + + 30000000-0000-0000-0000-000000000015 + 30000000-0000-0000-0000-000000000015 + location15 + Location 15 + + + 30000000-0000-0000-0000-000000000016 + 30000000-0000-0000-0000-000000000016 + location16 + Location 16 + + + 30000000-0000-0000-0000-000000000017 + 30000000-0000-0000-0000-000000000017 + location17 + Location 17 + + + 30000000-0000-0000-0000-000000000018 + 30000000-0000-0000-0000-000000000018 + location18 + Location 18 + + + 30000000-0000-0000-0000-000000000019 + 30000000-0000-0000-0000-000000000019 + location19 + Location 19 + + + 30000000-0000-0000-0000-000000000020 + 30000000-0000-0000-0000-000000000020 + location20 + Location 20 + + + 30000000-0000-0000-0000-000000000021 + 30000000-0000-0000-0000-000000000021 + location21 + Location 21 + + + 30000000-0000-0000-0000-000000000022 + 30000000-0000-0000-0000-000000000022 + location22 + Location 22 + + + 30000000-0000-0000-0000-000000000023 + 30000000-0000-0000-0000-000000000023 + location23 + Location 23 + + + 30000000-0000-0000-0000-000000000024 + 30000000-0000-0000-0000-000000000024 + location24 + Location 24 + + + 30000000-0000-0000-0000-000000000025 + 30000000-0000-0000-0000-000000000025 + location25 + Location 25 + + + 30000000-0000-0000-0000-000000000026 + 30000000-0000-0000-0000-000000000026 + location26 + Location 26 + + + 30000000-0000-0000-0000-000000000027 + 30000000-0000-0000-0000-000000000027 + location27 + Location 27 + + + 30000000-0000-0000-0000-000000000028 + 30000000-0000-0000-0000-000000000028 + location28 + Location 28 + + + 30000000-0000-0000-0000-000000000029 + 30000000-0000-0000-0000-000000000029 + location29 + Location 29 + + + 30000000-0000-0000-0000-000000000030 + 30000000-0000-0000-0000-000000000030 + location30 + Location 30 + + + 30000000-0000-0000-0000-000000000031 + 30000000-0000-0000-0000-000000000031 + location31 + Location 31 + + + 30000000-0000-0000-0000-000000000032 + 30000000-0000-0000-0000-000000000032 + location32 + Location 32 + + + 30000000-0000-0000-0000-000000000033 + 30000000-0000-0000-0000-000000000033 + location33 + Location 33 + + + 30000000-0000-0000-0000-000000000034 + 30000000-0000-0000-0000-000000000034 + location34 + Location 34 + + + 30000000-0000-0000-0000-000000000035 + 30000000-0000-0000-0000-000000000035 + location35 + Location 35 + + + 30000000-0000-0000-0000-000000000036 + 30000000-0000-0000-0000-000000000036 + location36 + Location 36 + + + 30000000-0000-0000-0000-000000000037 + 30000000-0000-0000-0000-000000000037 + location37 + Location 37 + + + 30000000-0000-0000-0000-000000000038 + 30000000-0000-0000-0000-000000000038 + location38 + Location 38 + + + 30000000-0000-0000-0000-000000000039 + 30000000-0000-0000-0000-000000000039 + location39 + Location 39 + + + 30000000-0000-0000-0000-000000000040 + 30000000-0000-0000-0000-000000000040 + location40 + Location 40 + + + 30000000-0000-0000-0000-000000000041 + 30000000-0000-0000-0000-000000000041 + location41 + Location 41 + + + 30000000-0000-0000-0000-000000000042 + 30000000-0000-0000-0000-000000000042 + location42 + Location 42 + + + 30000000-0000-0000-0000-000000000043 + 30000000-0000-0000-0000-000000000043 + location43 + Location 43 + + + 30000000-0000-0000-0000-000000000044 + 30000000-0000-0000-0000-000000000044 + location44 + Location 44 + + + 30000000-0000-0000-0000-000000000045 + 30000000-0000-0000-0000-000000000045 + location45 + Location 45 + + + 30000000-0000-0000-0000-000000000046 + 30000000-0000-0000-0000-000000000046 + location46 + Location 46 + + + 30000000-0000-0000-0000-000000000047 + 30000000-0000-0000-0000-000000000047 + location47 + Location 47 + + + 30000000-0000-0000-0000-000000000048 + 30000000-0000-0000-0000-000000000048 + location48 + Location 48 + + + 30000000-0000-0000-0000-000000000049 + 30000000-0000-0000-0000-000000000049 + location49 + Location 49 + + + 30000000-0000-0000-0000-000000000050 + 30000000-0000-0000-0000-000000000050 + location50 + Location 50 + + + 30000000-0000-0000-0000-000000000051 + 30000000-0000-0000-0000-000000000051 + location51 + Location 51 + + + 30000000-0000-0000-0000-000000000052 + 30000000-0000-0000-0000-000000000052 + location52 + Location 52 + + + 30000000-0000-0000-0000-000000000053 + 30000000-0000-0000-0000-000000000053 + location53 + Location 53 + + + 30000000-0000-0000-0000-000000000054 + 30000000-0000-0000-0000-000000000054 + location54 + Location 54 + + + 30000000-0000-0000-0000-000000000055 + 30000000-0000-0000-0000-000000000055 + location55 + Location 55 + + + 30000000-0000-0000-0000-000000000056 + 30000000-0000-0000-0000-000000000056 + location56 + Location 56 + + + 30000000-0000-0000-0000-000000000057 + 30000000-0000-0000-0000-000000000057 + location57 + Location 57 + + + 30000000-0000-0000-0000-000000000058 + 30000000-0000-0000-0000-000000000058 + location58 + Location 58 + + + 30000000-0000-0000-0000-000000000059 + 30000000-0000-0000-0000-000000000059 + location59 + Location 59 + + + 30000000-0000-0000-0000-000000000060 + 30000000-0000-0000-0000-000000000060 + location60 + Location 60 + + + 30000000-0000-0000-0000-000000000061 + 30000000-0000-0000-0000-000000000061 + location61 + Location 61 + + + 30000000-0000-0000-0000-000000000062 + 30000000-0000-0000-0000-000000000062 + location62 + Location 62 + + + 30000000-0000-0000-0000-000000000063 + 30000000-0000-0000-0000-000000000063 + location63 + Location 63 + + + 30000000-0000-0000-0000-000000000064 + 30000000-0000-0000-0000-000000000064 + location64 + Location 64 + + + 30000000-0000-0000-0000-000000000065 + 30000000-0000-0000-0000-000000000065 + location65 + Location 65 + + + 30000000-0000-0000-0000-000000000066 + 30000000-0000-0000-0000-000000000066 + location66 + Location 66 + + + 30000000-0000-0000-0000-000000000067 + 30000000-0000-0000-0000-000000000067 + location67 + Location 67 + + + 30000000-0000-0000-0000-000000000068 + 30000000-0000-0000-0000-000000000068 + location68 + Location 68 + + + 30000000-0000-0000-0000-000000000069 + 30000000-0000-0000-0000-000000000069 + location69 + Location 69 + + + 30000000-0000-0000-0000-000000000070 + 30000000-0000-0000-0000-000000000070 + location70 + Location 70 + + + 30000000-0000-0000-0000-000000000071 + 30000000-0000-0000-0000-000000000071 + location71 + Location 71 + + + 30000000-0000-0000-0000-000000000072 + 30000000-0000-0000-0000-000000000072 + location72 + Location 72 + + + 30000000-0000-0000-0000-000000000073 + 30000000-0000-0000-0000-000000000073 + location73 + Location 73 + + + 30000000-0000-0000-0000-000000000074 + 30000000-0000-0000-0000-000000000074 + location74 + Location 74 + + + 30000000-0000-0000-0000-000000000075 + 30000000-0000-0000-0000-000000000075 + location75 + Location 75 + + + 30000000-0000-0000-0000-000000000076 + 30000000-0000-0000-0000-000000000076 + location76 + Location 76 + + + 30000000-0000-0000-0000-000000000077 + 30000000-0000-0000-0000-000000000077 + location77 + Location 77 + + + 30000000-0000-0000-0000-000000000078 + 30000000-0000-0000-0000-000000000078 + location78 + Location 78 + + + 30000000-0000-0000-0000-000000000079 + 30000000-0000-0000-0000-000000000079 + location79 + Location 79 + + + 30000000-0000-0000-0000-000000000080 + 30000000-0000-0000-0000-000000000080 + location80 + Location 80 + + + 30000000-0000-0000-0000-000000000081 + 30000000-0000-0000-0000-000000000081 + location81 + Location 81 + + + 30000000-0000-0000-0000-000000000082 + 30000000-0000-0000-0000-000000000082 + location82 + Location 82 + + + 30000000-0000-0000-0000-000000000083 + 30000000-0000-0000-0000-000000000083 + location83 + Location 83 + + + 30000000-0000-0000-0000-000000000084 + 30000000-0000-0000-0000-000000000084 + location84 + Location 84 + + + 30000000-0000-0000-0000-000000000085 + 30000000-0000-0000-0000-000000000085 + location85 + Location 85 + + + 30000000-0000-0000-0000-000000000086 + 30000000-0000-0000-0000-000000000086 + location86 + Location 86 + + + 30000000-0000-0000-0000-000000000087 + 30000000-0000-0000-0000-000000000087 + location87 + Location 87 + + + 30000000-0000-0000-0000-000000000088 + 30000000-0000-0000-0000-000000000088 + location88 + Location 88 + + + 30000000-0000-0000-0000-000000000089 + 30000000-0000-0000-0000-000000000089 + location89 + Location 89 + + + 30000000-0000-0000-0000-000000000090 + 30000000-0000-0000-0000-000000000090 + location90 + Location 90 + + + 30000000-0000-0000-0000-000000000091 + 30000000-0000-0000-0000-000000000091 + location91 + Location 91 + + + 30000000-0000-0000-0000-000000000092 + 30000000-0000-0000-0000-000000000092 + location92 + Location 92 + + + 30000000-0000-0000-0000-000000000093 + 30000000-0000-0000-0000-000000000093 + location93 + Location 93 + + + 30000000-0000-0000-0000-000000000094 + 30000000-0000-0000-0000-000000000094 + location94 + Location 94 + + + 30000000-0000-0000-0000-000000000095 + 30000000-0000-0000-0000-000000000095 + location95 + Location 95 + + + 30000000-0000-0000-0000-000000000096 + 30000000-0000-0000-0000-000000000096 + location96 + Location 96 + + + 30000000-0000-0000-0000-000000000097 + 30000000-0000-0000-0000-000000000097 + location97 + Location 97 + + + 30000000-0000-0000-0000-000000000098 + 30000000-0000-0000-0000-000000000098 + location98 + Location 98 + + + 30000000-0000-0000-0000-000000000099 + 30000000-0000-0000-0000-000000000099 + location99 + Location 99 + + + 30000000-0000-0000-0000-000000000100 + 30000000-0000-0000-0000-000000000100 + location100 + Location 100 + + + 40000000-0000-0000-0000-000000000001 + 40000000-0000-0000-0000-000000000001 + resource01 + Resource 01 + + + 40000000-0000-0000-0000-000000000002 + 40000000-0000-0000-0000-000000000002 + resource02 + Resource 02 + + + 40000000-0000-0000-0000-000000000003 + 40000000-0000-0000-0000-000000000003 + resource03 + Resource 03 + + + 40000000-0000-0000-0000-000000000004 + 40000000-0000-0000-0000-000000000004 + resource04 + Resource 04 + + + 40000000-0000-0000-0000-000000000005 + 40000000-0000-0000-0000-000000000005 + resource05 + Resource 05 + + + 40000000-0000-0000-0000-000000000006 + 40000000-0000-0000-0000-000000000006 + resource06 + Resource 06 + + + 40000000-0000-0000-0000-000000000007 + 40000000-0000-0000-0000-000000000007 + resource07 + Resource 07 + + + 40000000-0000-0000-0000-000000000008 + 40000000-0000-0000-0000-000000000008 + resource08 + Resource 08 + + + 40000000-0000-0000-0000-000000000009 + 40000000-0000-0000-0000-000000000009 + resource09 + Resource 09 + + + 40000000-0000-0000-0000-000000000010 + 40000000-0000-0000-0000-000000000010 + resource10 + Resource 10 + + + 40000000-0000-0000-0000-000000000011 + 40000000-0000-0000-0000-000000000011 + resource11 + Resource 11 + + + 40000000-0000-0000-0000-000000000012 + 40000000-0000-0000-0000-000000000012 + resource12 + Resource 12 + + + 40000000-0000-0000-0000-000000000013 + 40000000-0000-0000-0000-000000000013 + resource13 + Resource 13 + + + 40000000-0000-0000-0000-000000000014 + 40000000-0000-0000-0000-000000000014 + resource14 + Resource 14 + + + 40000000-0000-0000-0000-000000000015 + 40000000-0000-0000-0000-000000000015 + resource15 + Resource 15 + + + 40000000-0000-0000-0000-000000000016 + 40000000-0000-0000-0000-000000000016 + resource16 + Resource 16 + + + 40000000-0000-0000-0000-000000000017 + 40000000-0000-0000-0000-000000000017 + resource17 + Resource 17 + + + 40000000-0000-0000-0000-000000000018 + 40000000-0000-0000-0000-000000000018 + resource18 + Resource 18 + + + 40000000-0000-0000-0000-000000000019 + 40000000-0000-0000-0000-000000000019 + resource19 + Resource 19 + + + 40000000-0000-0000-0000-000000000020 + 40000000-0000-0000-0000-000000000020 + resource20 + Resource 20 + + + 40000000-0000-0000-0000-000000000021 + 40000000-0000-0000-0000-000000000021 + resource21 + Resource 21 + + + 40000000-0000-0000-0000-000000000022 + 40000000-0000-0000-0000-000000000022 + resource22 + Resource 22 + + + 40000000-0000-0000-0000-000000000023 + 40000000-0000-0000-0000-000000000023 + resource23 + Resource 23 + + + 40000000-0000-0000-0000-000000000024 + 40000000-0000-0000-0000-000000000024 + resource24 + Resource 24 + + + 40000000-0000-0000-0000-000000000025 + 40000000-0000-0000-0000-000000000025 + resource25 + Resource 25 + + + 40000000-0000-0000-0000-000000000026 + 40000000-0000-0000-0000-000000000026 + resource26 + Resource 26 + + + 40000000-0000-0000-0000-000000000027 + 40000000-0000-0000-0000-000000000027 + resource27 + Resource 27 + + + 40000000-0000-0000-0000-000000000028 + 40000000-0000-0000-0000-000000000028 + resource28 + Resource 28 + + + 40000000-0000-0000-0000-000000000029 + 40000000-0000-0000-0000-000000000029 + resource29 + Resource 29 + + + 40000000-0000-0000-0000-000000000030 + 40000000-0000-0000-0000-000000000030 + resource30 + Resource 30 + + + 40000000-0000-0000-0000-000000000031 + 40000000-0000-0000-0000-000000000031 + resource31 + Resource 31 + + + 40000000-0000-0000-0000-000000000032 + 40000000-0000-0000-0000-000000000032 + resource32 + Resource 32 + + + 40000000-0000-0000-0000-000000000033 + 40000000-0000-0000-0000-000000000033 + resource33 + Resource 33 + + + 40000000-0000-0000-0000-000000000034 + 40000000-0000-0000-0000-000000000034 + resource34 + Resource 34 + + + 40000000-0000-0000-0000-000000000035 + 40000000-0000-0000-0000-000000000035 + resource35 + Resource 35 + + + 40000000-0000-0000-0000-000000000036 + 40000000-0000-0000-0000-000000000036 + resource36 + Resource 36 + + + 40000000-0000-0000-0000-000000000037 + 40000000-0000-0000-0000-000000000037 + resource37 + Resource 37 + + + 40000000-0000-0000-0000-000000000038 + 40000000-0000-0000-0000-000000000038 + resource38 + Resource 38 + + + 40000000-0000-0000-0000-000000000039 + 40000000-0000-0000-0000-000000000039 + resource39 + Resource 39 + + + 40000000-0000-0000-0000-000000000040 + 40000000-0000-0000-0000-000000000040 + resource40 + Resource 40 + + + 40000000-0000-0000-0000-000000000041 + 40000000-0000-0000-0000-000000000041 + resource41 + Resource 41 + + + 40000000-0000-0000-0000-000000000042 + 40000000-0000-0000-0000-000000000042 + resource42 + Resource 42 + + + 40000000-0000-0000-0000-000000000043 + 40000000-0000-0000-0000-000000000043 + resource43 + Resource 43 + + + 40000000-0000-0000-0000-000000000044 + 40000000-0000-0000-0000-000000000044 + resource44 + Resource 44 + + + 40000000-0000-0000-0000-000000000045 + 40000000-0000-0000-0000-000000000045 + resource45 + Resource 45 + + + 40000000-0000-0000-0000-000000000046 + 40000000-0000-0000-0000-000000000046 + resource46 + Resource 46 + + + 40000000-0000-0000-0000-000000000047 + 40000000-0000-0000-0000-000000000047 + resource47 + Resource 47 + + + 40000000-0000-0000-0000-000000000048 + 40000000-0000-0000-0000-000000000048 + resource48 + Resource 48 + + + 40000000-0000-0000-0000-000000000049 + 40000000-0000-0000-0000-000000000049 + resource49 + Resource 49 + + + 40000000-0000-0000-0000-000000000050 + 40000000-0000-0000-0000-000000000050 + resource50 + Resource 50 + + + 40000000-0000-0000-0000-000000000051 + 40000000-0000-0000-0000-000000000051 + resource51 + Resource 51 + + + 40000000-0000-0000-0000-000000000052 + 40000000-0000-0000-0000-000000000052 + resource52 + Resource 52 + + + 40000000-0000-0000-0000-000000000053 + 40000000-0000-0000-0000-000000000053 + resource53 + Resource 53 + + + 40000000-0000-0000-0000-000000000054 + 40000000-0000-0000-0000-000000000054 + resource54 + Resource 54 + + + 40000000-0000-0000-0000-000000000055 + 40000000-0000-0000-0000-000000000055 + resource55 + Resource 55 + + + 40000000-0000-0000-0000-000000000056 + 40000000-0000-0000-0000-000000000056 + resource56 + Resource 56 + + + 40000000-0000-0000-0000-000000000057 + 40000000-0000-0000-0000-000000000057 + resource57 + Resource 57 + + + 40000000-0000-0000-0000-000000000058 + 40000000-0000-0000-0000-000000000058 + resource58 + Resource 58 + + + 40000000-0000-0000-0000-000000000059 + 40000000-0000-0000-0000-000000000059 + resource59 + Resource 59 + + + 40000000-0000-0000-0000-000000000060 + 40000000-0000-0000-0000-000000000060 + resource60 + Resource 60 + + + 40000000-0000-0000-0000-000000000061 + 40000000-0000-0000-0000-000000000061 + resource61 + Resource 61 + + + 40000000-0000-0000-0000-000000000062 + 40000000-0000-0000-0000-000000000062 + resource62 + Resource 62 + + + 40000000-0000-0000-0000-000000000063 + 40000000-0000-0000-0000-000000000063 + resource63 + Resource 63 + + + 40000000-0000-0000-0000-000000000064 + 40000000-0000-0000-0000-000000000064 + resource64 + Resource 64 + + + 40000000-0000-0000-0000-000000000065 + 40000000-0000-0000-0000-000000000065 + resource65 + Resource 65 + + + 40000000-0000-0000-0000-000000000066 + 40000000-0000-0000-0000-000000000066 + resource66 + Resource 66 + + + 40000000-0000-0000-0000-000000000067 + 40000000-0000-0000-0000-000000000067 + resource67 + Resource 67 + + + 40000000-0000-0000-0000-000000000068 + 40000000-0000-0000-0000-000000000068 + resource68 + Resource 68 + + + 40000000-0000-0000-0000-000000000069 + 40000000-0000-0000-0000-000000000069 + resource69 + Resource 69 + + + 40000000-0000-0000-0000-000000000070 + 40000000-0000-0000-0000-000000000070 + resource70 + Resource 70 + + + 40000000-0000-0000-0000-000000000071 + 40000000-0000-0000-0000-000000000071 + resource71 + Resource 71 + + + 40000000-0000-0000-0000-000000000072 + 40000000-0000-0000-0000-000000000072 + resource72 + Resource 72 + + + 40000000-0000-0000-0000-000000000073 + 40000000-0000-0000-0000-000000000073 + resource73 + Resource 73 + + + 40000000-0000-0000-0000-000000000074 + 40000000-0000-0000-0000-000000000074 + resource74 + Resource 74 + + + 40000000-0000-0000-0000-000000000075 + 40000000-0000-0000-0000-000000000075 + resource75 + Resource 75 + + + 40000000-0000-0000-0000-000000000076 + 40000000-0000-0000-0000-000000000076 + resource76 + Resource 76 + + + 40000000-0000-0000-0000-000000000077 + 40000000-0000-0000-0000-000000000077 + resource77 + Resource 77 + + + 40000000-0000-0000-0000-000000000078 + 40000000-0000-0000-0000-000000000078 + resource78 + Resource 78 + + + 40000000-0000-0000-0000-000000000079 + 40000000-0000-0000-0000-000000000079 + resource79 + Resource 79 + + + 40000000-0000-0000-0000-000000000080 + 40000000-0000-0000-0000-000000000080 + resource80 + Resource 80 + + + 40000000-0000-0000-0000-000000000081 + 40000000-0000-0000-0000-000000000081 + resource81 + Resource 81 + + + 40000000-0000-0000-0000-000000000082 + 40000000-0000-0000-0000-000000000082 + resource82 + Resource 82 + + + 40000000-0000-0000-0000-000000000083 + 40000000-0000-0000-0000-000000000083 + resource83 + Resource 83 + + + 40000000-0000-0000-0000-000000000084 + 40000000-0000-0000-0000-000000000084 + resource84 + Resource 84 + + + 40000000-0000-0000-0000-000000000085 + 40000000-0000-0000-0000-000000000085 + resource85 + Resource 85 + + + 40000000-0000-0000-0000-000000000086 + 40000000-0000-0000-0000-000000000086 + resource86 + Resource 86 + + + 40000000-0000-0000-0000-000000000087 + 40000000-0000-0000-0000-000000000087 + resource87 + Resource 87 + + + 40000000-0000-0000-0000-000000000088 + 40000000-0000-0000-0000-000000000088 + resource88 + Resource 88 + + + 40000000-0000-0000-0000-000000000089 + 40000000-0000-0000-0000-000000000089 + resource89 + Resource 89 + + + 40000000-0000-0000-0000-000000000090 + 40000000-0000-0000-0000-000000000090 + resource90 + Resource 90 + + + 40000000-0000-0000-0000-000000000091 + 40000000-0000-0000-0000-000000000091 + resource91 + Resource 91 + + + 40000000-0000-0000-0000-000000000092 + 40000000-0000-0000-0000-000000000092 + resource92 + Resource 92 + + + 40000000-0000-0000-0000-000000000093 + 40000000-0000-0000-0000-000000000093 + resource93 + Resource 93 + + + 40000000-0000-0000-0000-000000000094 + 40000000-0000-0000-0000-000000000094 + resource94 + Resource 94 + + + 40000000-0000-0000-0000-000000000095 + 40000000-0000-0000-0000-000000000095 + resource95 + Resource 95 + + + 40000000-0000-0000-0000-000000000096 + 40000000-0000-0000-0000-000000000096 + resource96 + Resource 96 + + + 40000000-0000-0000-0000-000000000097 + 40000000-0000-0000-0000-000000000097 + resource97 + Resource 97 + + + 40000000-0000-0000-0000-000000000098 + 40000000-0000-0000-0000-000000000098 + resource98 + Resource 98 + + + 40000000-0000-0000-0000-000000000099 + 40000000-0000-0000-0000-000000000099 + resource99 + Resource 99 + + + 40000000-0000-0000-0000-000000000100 + 40000000-0000-0000-0000-000000000100 + resource100 + Resource 100 + + From c8377aa8b086dd6d0fbf91c14acec03701b6814f Mon Sep 17 00:00:00 2001 From: Giorgio Azzinnaro Date: Sun, 10 Jun 2018 14:08:38 +0200 Subject: [PATCH 19/19] some basic documentation on root README --- README.rst | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.rst b/README.rst index 5ad203ce3..c0f187dba 100644 --- a/README.rst +++ b/README.rst @@ -87,3 +87,16 @@ Start the server using the bin/run script, and use the -n option to bypass depen Starting server... The server should then start up and bind to port 8008 for HTTP and 8443 for HTTPS. You should then be able to connect to the server using your web browser (eg. Safari, Firefox) or with a CalDAV client (eg. Calendar). + + +========================== +Docker +========================== + +A Dockerfile is provided to build an image that may be run in production. +An example docker-compose file is provided in contrib/docker. + +PostgreSQL and Memcached are required as external services. + +Configuration may be altered to make use of an LDAP server, +or XML files, as noted above. \ No newline at end of file