Seeking Guidance on Customizing Opencast Admin Dashboard and Media Module within Docker Container

66 views
Skip to first unread message

Gedion Daniel

unread,
Mar 20, 2024, 5:39:14 AM3/20/24
to Opencast Users
Hello everyone,

I've successfully installed Opencast using Docker. Now, I'm looking to customize the admin dashboard and media module by incorporating our logo and name. However, within the Docker container, the directory structure is different, and I can't find an index.html or any other relevant files to edit for the user interface with custom data.

Here's a glimpse inside the container:

root@841aedd88e35:/opencast# ls
bin  data  deploy  docker  docs  etc  instances  lib  LICENSE  NOTICES  README.md  system

As you can see, there's no index.html file present. Can anyone guide me on how to proceed with editing the UI in this scenario? Any help would be greatly appreciated.

Thank you!

Matthias Neugebauer

unread,
Mar 20, 2024, 6:13:29 AM3/20/24
to us...@opencast.org
Hi Gedion,

As we already said, there is no index.html that is stored directly in the filesystem. This is also the case for non-container installations; there is no difference between the directory structures. Frontend assets are stored in JARs in the system folder. I think for the media module there is an option to set the logo.

There is no support for changing the logo/name in the Admin UI. You have to either:

1. Change the source and compile Opencast yourself
2. Somehow change the content within the correct JARs
3. Have a config in the web server that serves an alternative file for logo etc.

– Matthias

---

shio solutions GmbH
Hafenweg 11a
48155 Münster

E-Mail: mtn...@shio.solutions
Fon: +49 251 97007987

Geschäftsführer: Matthias Neugebauer
Handelsregister: Amtsgericht Münster HRB 21404
Sitz: Münster
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to users+un...@opencast.org.

Gedion Daniel

unread,
Mar 20, 2024, 6:35:34 AM3/20/24
to us...@opencast.org
Screenshot from 2024-03-20 11-28-15.png
I'm trying to personalize Opencast by replacing its name and colors with our own. so which configuration file within the system folder that I should edit to achieve this customization?

To unsubscribe from this topic, visit https://groups.google.com/a/opencast.org/d/topic/users/Ajls5plBvuw/unsubscribe.
To unsubscribe from this group and all its topics, send an email to users+un...@opencast.org.

Gedion Daniel

unread,
Mar 20, 2024, 7:05:35 AM3/20/24
to us...@opencast.org
root@72a3736e0c02:/opencast/system# ls
com  commons-codec  commons-collections  commons-fileupload  commons-io  commons-lang  jakarta  javax  joda-time  org

which .jar file contain the opencast name and background color?

On Wed, Mar 20, 2024 at 11:13 AM Matthias Neugebauer <mtn...@shio.solutions> wrote:
To unsubscribe from this topic, visit https://groups.google.com/a/opencast.org/d/topic/users/Ajls5plBvuw/unsubscribe.
To unsubscribe from this group and all its topics, send an email to users+un...@opencast.org.

Dietmar Zenker

unread,
Mar 20, 2024, 7:12:18 AM3/20/24
to Opencast Users, gediond...@gmail.com
Hi,

check opencast-admin-ui-frontend-1x.y.jar: inside you will find a folder "webapp". In "img" is the logo svg, in styles the css.

Greetings,
Dietmar



Gedion Daniel

unread,
Mar 20, 2024, 7:19:54 AM3/20/24
to us...@opencast.org

In which folder should I look? There are numerous files within:

com  commons-codec  commons-collections  commons-fileupload  commons-io  commons-lang  jakarta  javax  joda-time  org

Best,

Gedion


Gedion Daniel

unread,
Mar 20, 2024, 8:13:19 AM3/20/24
to us...@opencast.org
Thanks I have found it!

Gedion Daniel

unread,
Mar 20, 2024, 8:31:28 AM3/20/24
to us...@opencast.org
how can i edit the jar files and what are the steps i should take first because i am inside the container.

Best,
Gedion

On Wed, Mar 20, 2024 at 12:12 PM Dietmar Zenker <dzenk...@online.de> wrote:

Gedion Daniel

unread,
Mar 20, 2024, 8:44:48 AM3/20/24
to us...@opencast.org
I'm encountering a significant issue where events scheduled in Opencast are not being saved to the database. I've configured Opencast to utilize an external MariaDB database, and the logs indicate that the connection is established without errors. However, upon scheduling a new event and restarting the container, the scheduled data will get lost. I've been stuck on this problem for a week now and could use some assistance. Could you please advise on where Opencast is saving this data or suggest potential solutions?

Best,
Gedion

Katrin Ihler

unread,
Mar 20, 2024, 9:33:32 AM3/20/24
to us...@opencast.org

Get lost as in no longer showing in the table in the Admin UI? That is fed by an Elasticsearch. Other people can say more about the way the container works, but my assumption would be that this might not keep its state between restarts?

Also the docker images are currently mainly used for testing afaik and not necessarily production-ready.

Cheers,

Katrin

To unsubscribe from this group and stop receiving emails from it, send an email to users+un...@opencast.org.
-- 
ELAN e.V.
Karlstr. 23
D-26123 Oldeburg

elan-ev.de

Matthias Neugebauer

unread,
Mar 20, 2024, 10:02:14 AM3/20/24
to Opencast Users
__The container images are production ready and many use them__

I’m always saying, that the docker-compose examples are more for (local) testing, but I hear people use them in prod as well. I think that you probably want to change way more config options and then you probably want to mount config files in. Maybe I need to add an example for that (apart from documentation which was already pointed out in the previous thread).

Regarding data loss: we can’t really help if you don’t show us the configuration you used. In general, using containers you have to make sure that state is stored outside of the root container filesystem. Otherwise, when the container gets deleted state is deleted as well.

Best regards
Matthias

---

shio solutions GmbH
Hafenweg 11a
48155 Münster

E-Mail: mtn...@shio.solutions
Fon: +49 251 97007987

Geschäftsführer: Matthias Neugebauer
Handelsregister: Amtsgericht Münster HRB 21404
Sitz: Münster

Gedion Daniel

unread,
Mar 20, 2024, 10:17:24 AM3/20/24
to us...@opencast.org
Below is the docker-compose.yml file with MariaDB configuration, and I've also edited the etc/custom.properties file for database configuration. 

Now, I'm wondering: where does Opencast save its scheduled event data within the container? I plan to map this location to host environment to keep the data even after the docker restart


root@MNOpenCast opencast # cat docker-compose.yml
# Copyright 2016 The University of Münster eLectures Team All rights reserved.
#
# Licensed under the Educational Community License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
#     http://opensource.org/licenses/ECL-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

version: "3"

volumes:
  opensearch: {}
  data: {}
  pyca: {}

services:
  opensearch:
    image: opensearchproject/opensearch:1
    environment:
      discovery.type: single-node
      bootstrap.memory_lock: 'true'
      OPENSEARCH_JAVA_OPTS: -Xms128m -Xmx512m
      DISABLE_INSTALL_DEMO_CONFIG: 'true'
      DISABLE_SECURITY_PLUGIN: 'true'
    volumes:
      - opensearch:/usr/share/opensearch/data

  opencast:
    image: quay.io/opencast/allinone:15.1
    environment:
      ORG_OPENCASTPROJECT_SERVER_URL: http://192.168.60.230:8080
      ORG_OPENCASTPROJECT_DOWNLOAD_URL: http://192.168.60.230:8080/static
      ORG_OPENCASTPROJECT_SECURITY_ADMIN_USER: admin
      ORG_OPENCASTPROJECT_SECURITY_ADMIN_PASS: opencast
      ORG_OPENCASTPROJECT_SECURITY_DIGEST_USER: opencast_system_account
      ORG_OPENCASTPROJECT_SECURITY_DIGEST_PASS: CHANGE_ME
      ORG_OPENCASTPROJECT_DB_VENDOR: MariaDB
      ORG_OPENCASTPROJECT_DB_JDBC_URL: jdbc:mariadb://192.168.60.230:3306/opencast?useMysqlMetadata=true
      ORG_OPENCASTPROJECT_DB_JDBC_USER: opencast
      ORG_OPENCASTPROJECT_DB_JDBC_PASS: opencast
      ELASTICSEARCH_SERVER_HOST: opensearch
    ports:
      - "8080:8080"
    volumes:
      - /data/service/opencast/data:/data
      - /data/service/opencast/etc:/opencast/etc
      - /data/service/opencast/archive:/archive
      #- /data/service/opencast:/opencast/system

  pyca-schedule:
    command: schedule
    image: quay.io/opencast/pyca
    restart: always
    volumes:
      - ./assets/pyca.conf:/etc/pyca/pyca.conf:ro
      - /data/service/opencast/pyca:/var/lib/pyca
      - /data/service/opencast/recordings:/recordings

  pyca-ingest:
    command: ingest
    image: quay.io/opencast/pyca
    restart: always
    volumes:
      - ./assets/pyca.conf:/etc/pyca/pyca.conf:ro
      - /data/service/opencast/pyca:/var/lib/pyca
      - /data/service/opencast/recordings:/recordings

  pyca-capture:
    command: capture
    image: quay.io/opencast/pyca
    restart: always
    volumes:
      - ./assets/pyca.conf:/etc/pyca/pyca.conf:ro
      - /data/service/opencast/pyca:/var/lib/pyca
      - /data/service/opencast/recordings:/recordings

  pyca-agentstate:
    command: agentstate
    image: quay.io/opencast/pyca
    restart: always
    volumes:
      - ./assets/pyca.conf:/etc/pyca/pyca.conf:ro
      - /data/service/opencast/pyca:/var/lib/pyca
      - /data/service/opencast/recordings:/recordings

  pyca-ui:
    entrypoint: ["gunicorn", "--config=/etc/pyca/gunicorn.conf.py", "pyca.ui:app"]
    image: quay.io/opencast/pyca
    restart: always
    volumes:
      - ./assets/pyca.conf:/etc/pyca/pyca.conf:ro
      - /data/service/opencast/pyca:/var/lib/pyca
      - /data/service/opencast/recordings:/recordings
    ports:
      - "8000:8000"

Matthias Neugebauer

unread,
Mar 20, 2024, 11:17:30 AM3/20/24
to us...@opencast.org
You mount config files to /opencast/etc (as I already said in the older thread, please use /etc/opencast). Env variables might therefore be ignored. More importantly, we still have no clue what you changed in the config files.

/archive is not used in the default config. Did you change paths?

If you only change the DB config in custom.properties, you don’t need to edit this file yourself. You already set the correct env variables.

Best regards
Matthias

---

shio solutions GmbH
Hafenweg 11a
48155 Münster

E-Mail: mtn...@shio.solutions
Fon: +49 251 97007987

Geschäftsführer: Matthias Neugebauer
Handelsregister: Amtsgericht Münster HRB 21404
Sitz: Münster

Gedion Daniel

unread,
Mar 20, 2024, 11:30:55 AM3/20/24
to us...@opencast.org
- /data/service/opencast/etc:/etc/opencast ( I updated like this)

/archive is not used in the default config. Did you change paths?  NO

This is what i edit inside custom.properties

######### DATABASE #########

# Relational Database configuration.
# By default, Opencast uses an embedded H2 database.
# Use a standalone database server for production systems.

# Opencast comes with the jdbc drivers for MariaDB (org.mariadb.jdbc.Driver) and PostgreSQL (org.postgresql.Driver).
# To add other jdbcDrivers to the Opencast runtime, rebuild the db module with your desired drivers.
org.opencastproject.db.jdbc.driver=org.mariadb.jdbc.Driver

# The jdbc connection url, username, and password
# Defaults:
#  .url=jdbc:h2:${org.opencastproject.storage.dir}/db
#  .user=sa
#  .pass=sa
org.opencastproject.db.jdbc.url=jdbc:mariadb://192.168.60.230:3306/opencast?useMysqlMetadata=true
org.opencastproject.db.jdbc.user=opencast
org.opencastproject.db.jdbc.pass=opencast

# The jdbc connection pool properties. See https://mchange.com/projects/c3p0/#basic_pool_configuration
# max.idle.time should be lower than the database server idle connection timeout duration (wait_timeout for MariaDB)
#org.opencastproject.db.jdbc.pool.max.size=15
#org.opencastproject.db.jdbc.pool.min.size=3
#org.opencastproject.db.jdbc.pool.acquire.increment=3
#org.opencastproject.db.jdbc.pool.max.statements=0
#org.opencastproject.db.jdbc.pool.login.timeout=1000
#org.opencastproject.db.jdbc.pool.max.idle.time=3600
#org.opencastproject.db.jdbc.pool.max.connection.age=0


Gedion Daniel

unread,
Mar 21, 2024, 4:57:17 AM3/21/24
to us...@opencast.org
Hi,

If I modify the JAR files to add a custom logo and css changes, will these changes persist through upgrades? If not, what is the general approach to editing and maintaining changes across different versions?

Best,
Gedion

On Wed, Mar 20, 2024 at 12:12 PM Dietmar Zenker <dzenk...@online.de> wrote:

Gedion Daniel

unread,
Mar 21, 2024, 10:09:35 AM3/21/24
to us...@opencast.org
Could someone please provide an answer???

Mathieu Domingo

unread,
Mar 21, 2024, 11:38:16 AM3/21/24
to us...@opencast.org
Hello,

I didn't change the opencast code, but I suppose you should use git to clone their code, then you will be able to do your changes.
After that you can use git to regularly pull their code to stay up to date (probably better to rebase instead of merge to keep your changes over theirs in the git graph).

To unsubscribe from this group and stop receiving emails from it, send an email to users+un...@opencast.org.

Gedion Daniel

unread,
Mar 22, 2024, 4:18:25 AM3/22/24
to us...@opencast.org
Screenshot from 2024-03-21 15-27-06.png
As previously mentioned, after restarting Docker, the scheduling information disappears. Although I've connected Opencast to an external MariaDB database, I'm unsure where the data is being stored. Could someone please provide guidance on this matter?
Which configuration file should I check or edit??

Gedion Daniel

unread,
Mar 22, 2024, 7:34:35 AM3/22/24
to us...@opencast.org
After modifying the JAR files, I encountered the following error:
how can I solve this problem?



Try to connect to Elasticsearch (3/25) SUCCEEDED
Run opencast_main_start
org.apache.karaf.features.internal.util.MultiException: Error:
Unable to create resource for bundle mvn:org.opencastproject/opencast-admin-ui-frontend/15.1
at org.apache.karaf.features.internal.download.impl.MavenDownloadManager$MavenDownloader.<init>(MavenDownloadManager.java:91)
at org.apache.karaf.features.internal.download.impl.MavenDownloadManager.createDownloader(MavenDownloadManager.java:72)
at org.apache.karaf.features.internal.region.Subsystem.downloadBundles(Subsystem.java:474)
at org.apache.karaf.features.internal.region.Subsystem.downloadBundles(Subsystem.java:469)
at org.apache.karaf.features.internal.region.SubsystemResolver.resolve(SubsystemResolver.java:223)
at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:399)
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1069)
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:1004)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)
Suppressed: java.lang.Exception: Unable to create resource for bundle mvn:org.opencastproject/opencast-admin-ui-frontend/15.1
at org.apache.karaf.features.internal.region.Subsystem.createResource(Subsystem.java:837)
at org.apache.karaf.features.internal.region.Subsystem.lambda$downloadBundles$1(Subsystem.java:516)
at org.apache.karaf.features.internal.download.impl.MavenDownloadManager$MavenDownloader.lambda$download$0(MavenDownloadManager.java:138)
at org.apache.karaf.features.internal.download.impl.DefaultFuture.notifyListener(DefaultFuture.java:350)
at org.apache.karaf.features.internal.download.impl.DefaultFuture.notifyListeners(DefaultFuture.java:335)
at org.apache.karaf.features.internal.download.impl.DefaultFuture.setValue(DefaultFuture.java:259)
at org.apache.karaf.features.internal.download.impl.AbstractDownloadTask.setFile(AbstractDownloadTask.java:61)
at org.apache.karaf.features.internal.download.impl.AbstractRetryableDownloadTask.run(AbstractRetryableDownloadTask.java:61)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
... 3 more
Caused by: org.osgi.framework.BundleException: Unable to build resource for mvn:org.opencastproject/opencast-admin-ui-frontend/15.1: Unsupported 'Bundle-ManifestVersion' value: 1
at org.apache.felix.utils.resource.ResourceBuilder.build(ResourceBuilder.java:82)
at org.apache.felix.utils.resource.ResourceBuilder.build(ResourceBuilder.java:71)
at org.apache.karaf.features.internal.region.Subsystem.createResource(Subsystem.java:835)
... 13 more
Caused by: org.osgi.framework.BundleException: Unsupported 'Bundle-ManifestVersion' value: 1
at org.apache.felix.utils.resource.ResourceBuilder.doBuild(ResourceBuilder.java:90)
at org.apache.felix.utils.resource.ResourceBuilder.build(ResourceBuilder.java:80)
... 15 more
2024-03-22T11:15:45,923 | ERROR | (BootFeaturesInstaller:122) - Error installing boot features
org.apache.karaf.features.internal.util.MultiException: Error:
Unable to create resource for bundle mvn:org.opencastproject/opencast-admin-ui-frontend/15.1
at org.apache.karaf.features.internal.download.impl.MavenDownloadManager$MavenDownloader.<init>(MavenDownloadManager.java:91) ~[?:?]
at org.apache.karaf.features.internal.download.impl.MavenDownloadManager.createDownloader(MavenDownloadManager.java:72) ~[?:?]
at org.apache.karaf.features.internal.region.Subsystem.downloadBundles(Subsystem.java:474) ~[?:?]
at org.apache.karaf.features.internal.region.Subsystem.downloadBundles(Subsystem.java:469) ~[?:?]
at org.apache.karaf.features.internal.region.SubsystemResolver.resolve(SubsystemResolver.java:223) ~[?:?]
at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:399) ~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1069) ~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:1004) ~[?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
at java.lang.Thread.run(Thread.java:840) [?:?]
Suppressed: java.lang.Exception: Unable to create resource for bundle mvn:org.opencastproject/opencast-admin-ui-frontend/15.1
at org.apache.karaf.features.internal.region.Subsystem.createResource(Subsystem.java:837) ~[?:?]
at org.apache.karaf.features.internal.region.Subsystem.lambda$downloadBundles$1(Subsystem.java:516) ~[?:?]
at org.apache.karaf.features.internal.download.impl.MavenDownloadManager$MavenDownloader.lambda$download$0(MavenDownloadManager.java:138) ~[?:?]
at org.apache.karaf.features.internal.download.impl.DefaultFuture.notifyListener(DefaultFuture.java:350) ~[?:?]
at org.apache.karaf.features.internal.download.impl.DefaultFuture.notifyListeners(DefaultFuture.java:335) ~[?:?]
at org.apache.karaf.features.internal.download.impl.DefaultFuture.setValue(DefaultFuture.java:259) ~[?:?]
at org.apache.karaf.features.internal.download.impl.AbstractDownloadTask.setFile(AbstractDownloadTask.java:61) ~[?:?]
at org.apache.karaf.features.internal.download.impl.AbstractRetryableDownloadTask.run(AbstractRetryableDownloadTask.java:61) ~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
at java.lang.Thread.run(Thread.java:840) [?:?]
Caused by: org.osgi.framework.BundleException: Unable to build resource for mvn:org.opencastproject/opencast-admin-ui-frontend/15.1: Unsupported 'Bundle-ManifestVersion' value: 1
at org.apache.felix.utils.resource.ResourceBuilder.build(ResourceBuilder.java:82) ~[?:?]
at org.apache.felix.utils.resource.ResourceBuilder.build(ResourceBuilder.java:71) ~[?:?]
at org.apache.karaf.features.internal.region.Subsystem.createResource(Subsystem.java:835) ~[?:?]
... 13 more
Caused by: org.osgi.framework.BundleException: Unsupported 'Bundle-ManifestVersion' value: 1
at org.apache.felix.utils.resource.ResourceBuilder.doBuild(ResourceBuilder.java:90) ~[?:?]
at org.apache.felix.utils.resource.ResourceBuilder.build(ResourceBuilder.java:80) ~[?:?]
at org.apache.felix.utils.resource.ResourceBuilder.build(ResourceBuilder.java:71) ~[?:?]
at org.apache.karaf.features.internal.region.Subsystem.createResource(Subsystem.java:835) ~[?:?]
... 13 more
Reply all
Reply to author
Forward
0 new messages