Fedora 25 webRTC script?

Since Iā€™m a mere User rather than a Programmer I amazed myself at being able to successfully compile and install a working webRTC server earlier today! The instructions at https://nextcloud.com/webrtc/ (although a bit outdated now) were invaluable. However, where I am having difficulties is properly creating and installing a systemd script to get the server running upon system startup.

Iā€™ve followed certain other links but they led to instructions which were written with the assumption that the reader would have the requisite skills to fill-in the missing instruction blanks. This has left me scratching my head and coming to the Community, hoping for a hand-out! With this in mind, I humbly ask: Could someone please post detailed instructions on how to do the above? May I further ask that in so doing, would you please assume that youā€™re writing said instructions for your computer-illiterate granny?

According to the docs, the server is started by ā€˜spreed-webrtc-serverā€™ command. Then you just need to write a simple systemd unit around it:
https://www.freedesktop.org/software/systemd/man/systemd.unit.html

ā€¦ā€œThen you just need to write a simple systemd unit aroundā€ā€¦

Thanks for your input, Jiri. Alas, unless Granny codes in between bouts of knitting and making strawberry jam, I think that sheā€™ll be floundering in such a sea of appreciated but much-too-general instructions :frowning:

Since running the webrtc server is such a fundamental aspect of this great app, it would be nice if the spreedme devs could complete their otherwise excellent instructions with a nice little ā€œsystemd unitā€ example with full directionsā€¦ :wink:

Hereā€™s our official Spreed WebRTC systemd script:

Simply move it into the /etc/systemd/system/ directory and run systemctl enable spreed-webrtc.service
Make sure to update /usr/sbin/spreed-webrtc-server to the location of your Spreed WebRTC binary and also create a /etc/default/spreed-webrtc file based on this content: https://github.com/spreedbox-packaging/spreed-webrtc-debian/blob/ubuntu/trusty/debian/spreed-webrtc.default
(Again, make sure to update the paths wherever applicable.

1 Like

Granny is a happy camper. Thanks, Leon :smiley:

Hey leon,

I tried to follow your steps but donā€™t get the service to run. I did the following:

	/etc/systemd/system/spreed.service
		[Unit]
		Description=Spreed WebRTC server
		After=network.target

		[Service]
		Type=simple
		EnvironmentFile=/etc/default/spreed
		# TODO: These values should come from the EnvironmentFile.
		Environment=GOMAXPROCS=1
		LimitNOFILE=1024
		User=spreed
		Group=www-data
		PermissionsStartOnly=true
		ExecStart=/usr/sbin/spreed -c ${WEBRTC_CONF} -l ${WEBRTC_LOG} ${WEBRTC_ARGS}
		Restart=on-failure

		[Install]
		WantedBy=multi-user.target
	/etc/default/spreed
		# Defaults for spreed-webrtc initscripts
		WEBRTC_USER='spreed'
		WEBRTC_GROUP='www-data'
		WEBRTC_CONF='/etc/spreed/server.conf'
		WEBRTC_LOG='/var/log/spreed.log'
		WEBRTC_ARGS=""
		WEBRTC_RUN_DIR='/var/run/spreed/'
		WEBRTC_PID="${WEBRTC_RUN_DIR}/server.pid"
		WEBRTC_GOMAXPROCS=1
		WEBRTC_NOFILE=1024
	ln -s /etc/spreed/spreed-webrtc-server /usr/sbin/spreed
	service spreed start

But the syslog gives me the following error around several others, telling me that the service start failed:

	systemd[21615]: Failed at step USER spawning /usr/sbin/spreed: No such process

It works, if I just start /usr/sbin/spreed in the terminal. Does the link/file in /usr/sbin/ have to look different than a simple symlink? Also I shortened some file/folder names and therefore the links/arguments. But as starting the server in terminal works fine, that should not be the problem?

@MichaIng it fails because it canā€™t find a spreed user, so try creating one and restart the service: https://github.com/spreedbox-packaging/spreed-webrtc-debian/blob/ubuntu/trusty/debian/spreed-webrtc.preinst#L26

1 Like

Hmm, after managing to create the user, give him the necessary rights, I got the server at least to the point, that it already starts logging. But sadly it logs the following error:

Unable to find client. Path correct and compiled css?

Any idea what the problem is? I am impressed how much to tinker, to just realize an autorun :D. Maybe I should stay at running the server as my own user in screen :smiley: .

Please try adding root = /usr/share/spreed-webrtc-server/www to the [http] section of Spreed WebRTC. Like here: https://github.com/strukturag/nextcloud-spreedme/blob/develop/doc/spreed-webrtc-minimal-config.txt (but uncomment the root = line)

Sadly no change :frowning:

Iā€™m sorry, I was a bit too hasty. root needs to point to the www folder of your Spreed WebRTC installation. So root = /usr/share/spreed-webrtc-server/www is just an example if your installation resides at that path.

Okay got it now by pointing ā€œrootā€ to my ā€œ/etc/spreedā€ path, so the base path where the spreed server was extracted to. Thank you for your help. I will write some step-by-step guide about how to configure the autorun with creating the spreed user for it etc. for less experienced linux users :slight_smile: .

Actually which files/folders in the ā€œrootā€ directory need to be owned/readable/executable etc. by the spreed user? For security reasons I would just chown what is really necessary and leave as much as possible owned by root. I mean I donā€™t know how much is really possible through a system user without pw like this, but for in case ;).

ā‚¬: Guide is done, I guess this topic could be closed as TO was already satisfied and further discussion about systemd unit/autorun should be made in guide topic: [Spreed.ME] Howto autorun "spreed-webrtc-server" step-by-step

Only the installed spreed-webrtc-server binary needs to be executable.
Nothing needs to be writable (havenā€™t tried it, should work).
All files need to be readable.

Okay thank you very much. I will try it now.

ā‚¬: Got the following:

  • To make it simpler/cleaner I removed the following from environment file, as they are not used and therefore {$WEBRTC_ARGS} from the exec command of service file or course.

    WEBRTC_ARGS="ā€œ
    WEBRTC_RUN_DIR=ā€™/var/run/spreed/'
    WEBRTC_PID=ā€${WEBRTC_RUN_DIR}/server.pid"

  • I am wondering which run directory is used by default, as there is non given in your ā€œExecStartā€ above?

  • I tried to chown the server directory back to root:root, chmod -R 744 everything and the \bin\spreed-webrtc-server to 755. But got permissions error. Then I 755ed also the \spreed-webrtc-server (binary in main directory), thought this might be executed by the one inside \bin also or something. But still permissions error. I also thought the folders itself /spreed-webrtc-master and /bin might be necessary to be executable, and at least the error moved to my spreed.log (instead of syslog), giving the ā€œUnable to find client. Path correct and compiled css?ā€ error again. Finally I chmod -R 755 the whole server directory again and it worked.
    => So I guess at least there are some more files beside the binaries that need to be executable.

ā‚¬ā‚¬: I also had a look at the service and environment files. I guess it is common beautiful way to use environment files to the service values. Also it is possible to adjust them there without the ā€œsystemctl daemon-reloadā€ hint. As every value given in the service file is also listed as default, I guess everything could be changed to ${WEBRTC_ā€¦} right? "Environment=1" lets the EnvironmentFile be used?

  • So to make it more simple on the other hand, it would be also possible to not use and erase the environment file and just write out the config + log files directly inside the service file, right?

Sorry for asking so much question, I just try to understand how all of this is working :stuck_out_tongue:.