###########################################################################
-# Copyright 2015, 2016, 2017 IoT.bzh
+# Copyright 2017 IoT.bzh
#
# author: José Bollo <jose.bollo@iot.bzh>
#
# limitations under the License.
###########################################################################
-cmake_minimum_required(VERSION 2.8)
-
-configure_file(afm-unit.conf.in afm-unit.conf)
-configure_file(afm-unit-debug.conf.in afm-unit-debug.conf)
-configure_file(afm-system-daemon.service.in afm-system-daemon.service)
-configure_file(afm-system-daemon.socket.in afm-system-daemon.socket)
-configure_file(afm-user-daemon.service.in afm-user-daemon.service)
-
-if(NOT USE_SDK)
- set(SYSCONFDIR_DBUS_SYSTEM ${CMAKE_INSTALL_SYSCONFDIR}/dbus-1/system.d CACHE STRING "Path to dbus system configuration files")
- set(SYSCONFDIR_DBUS_USER ${CMAKE_INSTALL_SYSCONFDIR}/dbus-1/session.d CACHE STRING "Path to dbus session configuration files")
- set(UNITDIR_SYSTEM ${CMAKE_INSTALL_LIBDIR}/systemd/system CACHE STRING "Path to systemd system unit files")
- set(UNITDIR_USER ${CMAKE_INSTALL_LIBDIR}/systemd/user CACHE STRING "Path to systemd system unit files")
-
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/afm-system-daemon.conf DESTINATION ${SYSCONFDIR_DBUS_SYSTEM})
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/afm-system-daemon.service DESTINATION ${UNITDIR_SYSTEM})
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/afm-system-daemon.socket DESTINATION ${UNITDIR_SYSTEM})
- install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/afm-user-daemon.conf DESTINATION ${SYSCONFDIR_DBUS_USER})
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/afm-user-daemon.service DESTINATION ${UNITDIR_USER})
- install(DIRECTORY DESTINATION ${afm_confdir}/unit.env.d)
-
- if(AGL_DEVEL)
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/afm-unit-debug.conf DESTINATION ${afm_confdir} RENAME afm-unit.conf)
- else()
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/afm-unit.conf DESTINATION ${afm_confdir})
- endif()
-endif()
+add_subdirectory(unit)
+add_subdirectory(system)
+add_subdirectory(user)
--- /dev/null
+###########################################################################
+# Copyright 2015, 2016, 2017 IoT.bzh
+#
+# author: José Bollo <jose.bollo@iot.bzh>
+#
+# Licensed under the Apache 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://www.apache.org/licenses/LICENSE-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.
+###########################################################################
+
+cmake_minimum_required(VERSION 2.8)
+
+configure_file(afm-system-daemon.service.in afm-system-daemon.service)
+configure_file(afm-system-daemon.socket.in afm-system-daemon.socket)
+
+if(NOT USE_SDK)
+ set(SYSCONFDIR_DBUS_SYSTEM ${CMAKE_INSTALL_SYSCONFDIR}/dbus-1/system.d CACHE STRING "Path to dbus system configuration files")
+ set(UNITDIR_SYSTEM ${CMAKE_INSTALL_LIBDIR}/systemd/system CACHE STRING "Path to systemd system unit files")
+
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/afm-system-daemon.conf DESTINATION ${SYSCONFDIR_DBUS_SYSTEM})
+ install(
+ FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/afm-system-daemon.service
+ ${CMAKE_CURRENT_BINARY_DIR}/afm-system-daemon.socket
+ ${CMAKE_CURRENT_SOURCE_DIR}/afm-system-daemon.conf
+ ${CMAKE_CURRENT_SOURCE_DIR}/afm-user-session@.service
+ ${CMAKE_CURRENT_SOURCE_DIR}/afm-user-session@.target
+ ${CMAKE_CURRENT_SOURCE_DIR}/afm-user-setup@.path
+ ${CMAKE_CURRENT_SOURCE_DIR}/afm-user-setup@.service
+ DESTINATION
+ ${UNITDIR_SYSTEM}
+ )
+endif()
+
SmackLabel=*
ListenStream=/run/afm/apis/ws/afm-main
FileDescriptorName=afm-main
-SocketUser=afm
-SocketGroup=afm
Service=afm-system-daemon.service
--- /dev/null
+[Unit]
+Description=Starts the session of afm user %i
+After=systemd-user-sessions.service
+Wants=afm-user-setup@%i.service
+Before=afm-user-setup@%i.service
+Wants=afm-user-session@%i.target
+Before=afm-user-session@%i.target
+[Service]
+PAMName=agl-user-session
+User=%i
+Type=simple
+ExecStartPre=/bin/echo START afm-user-session@%i
+ExecStart=/bin/sleep 2147483648
+ExecStop=/bin/echo STOP afm-user-session@%i
+RemainAfterExit=yes
--- /dev/null
+[Unit]
+After=afm-user-session@%i.service
+After=afm-user-setup@%i.service
--- /dev/null
+[Unit]
+DefaultDependencies=false
+[Path]
+PathExists=/run/user/%i/wayland-0
+PathExists=/run/user/%i/afm-user-started
+
+
--- /dev/null
+[Unit]
+Description=Starts the session of afm user %i
+Requires=afm-user-setup@%i.path
+After=afm-user-setup@%i.path
+After=afm-user-session@%i.service
+Before=afm-user-session@%i.target
+After=user@%i.service
+[Service]
+User=%i
+ExecStartPre=/bin/echo USER SETUP %i
+ExecStartPre=/bin/systemctl status
+ExecStart=/bin/rm /run/user/%i/afm-user-started
+
+
--- /dev/null
+###########################################################################
+# Copyright 2015, 2016, 2017 IoT.bzh
+#
+# author: José Bollo <jose.bollo@iot.bzh>
+#
+# Licensed under the Apache 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://www.apache.org/licenses/LICENSE-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.
+###########################################################################
+
+cmake_minimum_required(VERSION 2.8)
+
+if(AGL_DEVEL)
+ configure_file(afm-unit-debug.conf.in afm-unit.conf)
+else()
+ configure_file(afm-unit.conf.in afm-unit.conf)
+endif()
+
+if(NOT USE_SDK)
+ install(DIRECTORY DESTINATION ${afm_confdir}/unit.env.d)
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/afm-unit.conf DESTINATION ${afm_confdir})
+endif()
+
%begin systemd-unit
# auto generated by wgtpkg-unit for {{:id}} version {{:version}} target {{:#target}} of {{:idaver}}
%nl
+%systemd-unit system
+%systemd-unit service afm-{{#required-permission.urn:AGL:permission::public:hidden}}service{{/required-permission.urn:AGL:permission::public:hidden}}{{^required-permission.urn:AGL:permission::public:hidden}}appli{{/required-permission.urn:AGL:permission::public:hidden}}-{{:id}}--{{:ver}}--{{:#target}}@
[Unit]
Description={{description}}
X-AFM-description={{description}}
X-AFM--wgtdir={{:#metadata.install-dir}}
X-AFM--workdir=/home/%i/app-data/{{:id}}
%nl
-Wants=sockets.target
+Wants=afm-user-session@%i.target
+After=afm-user-setup@%i.service
# Adds check to smack
ConditionSecurity=smack
%nl
EnvironmentFile=-@afm_confdir@/unit.env.d/*
SmackProcessLabel=User::App::{{:id}}
SuccessExitStatus=0 SIGKILL
-#PAMName=su
User=%i
Slice=user-%i.slice
#CapabilityBoundingSet=
; Needed to enable debug
Environment=AFM_ID={{idaver}}{{^#target=main}}@{{:#target}}{{/#target=main}}
EnvironmentFile=-/var/run/afm-debug/{{idaver}}{{^#target=main}}@{{:#target}}{{/#target=main}}.env
-%systemd-unit system
-%systemd-unit service afm-{{#required-permission.urn:AGL:permission::public:hidden}}service{{/required-permission.urn:AGL:permission::public:hidden}}{{^required-permission.urn:AGL:permission::public:hidden}}appli{{/required-permission.urn:AGL:permission::public:hidden}}-{{:id}}--{{:ver}}--{{:#target}}@
SyslogIdentifier=afbd-{{idaver}}{{^#target=main}}@{{:#target}}{{/#target=main}}
StandardInput=null
StandardOutput=journal
; auto start
;---------------------------------------------------------------------------------
[Install]
-WantedBy=default.target
-%systemd-unit wanted-by agl-user-session@.service
+WantedBy=agl-user-session@.target
+%systemd-unit wanted-by agl-user-session@.target
{{/required-permission.urn:AGL:permission::system:run-by-default}}
%end systemd-unit
;---------------------------------------------------------------------------------
# auto generated by wgtpkg-unit for {{:id}} version {{:version}} target {{:#target}} of {{:idaver}}
%systemd-unit system
%systemd-unit socket afm-api-ws-{{name}}@
+[Unit]
+Description=Provides api {{name}} for user %i
+After=afm-user-setup@%i.service
[Socket]
SmackLabel=*
ListenStream=/run/user/%i/apis/ws/{{name}}
Service=afm-{{#required-permission.urn:AGL:permission::public:hidden}}service{{/required-permission.urn:AGL:permission::public:hidden}}{{^required-permission.urn:AGL:permission::public:hidden}}appli{{/required-permission.urn:AGL:permission::public:hidden}}-{{:id}}--{{:ver}}--{{:#target}}@%i.service
%nl
[Install]
-WantedBy=sockets.target
-%systemd-unit wanted-by agl-user-session@.service
+WantedBy=agl-user-session@.target
+%systemd-unit wanted-by agl-user-session@.target
%end systemd-unit
{{/value=ws|auto}}
{{/provided-api}}
%begin systemd-unit
# auto generated by wgtpkg-unit for {{:id}} version {{:version}} target {{:#target}} of {{:idaver}}
%nl
+%systemd-unit system
+%systemd-unit service afm-{{#required-permission.urn:AGL:permission::public:hidden}}service{{/required-permission.urn:AGL:permission::public:hidden}}{{^required-permission.urn:AGL:permission::public:hidden}}appli{{/required-permission.urn:AGL:permission::public:hidden}}-{{:id}}--{{:ver}}--{{:#target}}@
[Unit]
Description={{description}}
X-AFM-description={{description}}
X-AFM--wgtdir={{:#metadata.install-dir}}
X-AFM--workdir=/home/%i/app-data/{{:id}}
%nl
-Wants=sockets.target
+Wants=afm-user-session@%i.target
+After=afm-user-setup@%i.service
# Adds check to smack
ConditionSecurity=smack
%nl
EnvironmentFile=-@afm_confdir@/unit.env.d/*
SmackProcessLabel=User::App::{{:id}}
SuccessExitStatus=0 SIGKILL
-#PAMName=su
User=%i
Slice=user-%i.slice
#CapabilityBoundingSet=
Environment=XDG_RUNTIME_DIR=/run/user/%i
Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%i/bus
Environment=LD_LIBRARY_PATH=$ORIGIN/lib
-%systemd-unit system
-%systemd-unit service afm-{{#required-permission.urn:AGL:permission::public:hidden}}service{{/required-permission.urn:AGL:permission::public:hidden}}{{^required-permission.urn:AGL:permission::public:hidden}}appli{{/required-permission.urn:AGL:permission::public:hidden}}-{{:id}}--{{:ver}}--{{:#target}}@
SyslogIdentifier=afbd-{{idaver}}{{^#target=main}}@{{:#target}}{{/#target=main}}
StandardInput=null
StandardOutput=journal
; auto start
;---------------------------------------------------------------------------------
[Install]
-WantedBy=default.target
-%systemd-unit wanted-by agl-user-session@.service
+WantedBy=agl-user-session@.target
+%systemd-unit wanted-by agl-user-session@.target
{{/required-permission.urn:AGL:permission::system:run-by-default}}
%end systemd-unit
;---------------------------------------------------------------------------------
# auto generated by wgtpkg-unit for {{:id}} version {{:version}} target {{:#target}} of {{:idaver}}
%systemd-unit system
%systemd-unit socket afm-api-ws-{{name}}@
+[Unit]
+Description=Provides api {{name}} for user %i
+After=afm-user-setup@%i.service
[Socket]
SmackLabel=*
ListenStream=/run/user/%i/apis/ws/{{name}}
Service=afm-{{#required-permission.urn:AGL:permission::public:hidden}}service{{/required-permission.urn:AGL:permission::public:hidden}}{{^required-permission.urn:AGL:permission::public:hidden}}appli{{/required-permission.urn:AGL:permission::public:hidden}}-{{:id}}--{{:ver}}--{{:#target}}@%i.service
%nl
[Install]
-WantedBy=sockets.target
-%systemd-unit wanted-by agl-user-session@.service
+WantedBy=agl-user-session@.target
+%systemd-unit wanted-by agl-user-session@.target
%end systemd-unit
{{/value=ws|auto}}
{{/provided-api}}
%systemd-unit system
%systemd-unit socket afm-api-ws-{{name}}@
+[Unit]
+Description=Provides api {{name}} for user %i
+After=afm-user-setup@%i.service
[Socket]
SmackLabel=*
%nl
[Install]
-WantedBy=sockets.target
-%systemd-unit wanted-by agl-user-session@.service
+WantedBy=agl-user-session@.target
+%systemd-unit wanted-by agl-user-session@.target
%end systemd-unit
# auto generated by wgtpkg-unit for {{:id}} version {{:version}} target {{:#target}} of {{:idaver}}
%nl
+%systemd-unit system
+%systemd-unit service UNIT_NAME_BASE
+
[Unit]
Description={{description}}
X-AFM-description={{description}}
X-AFM--workdir=APP_DATA_DIR/{{:id}}
%nl
-Wants=sockets.target
+Wants=afm-user-session@%i.target
+After=afm-user-setup@%i.service
# Adds check to smack
ConditionSecurity=smack
SmackProcessLabel=User::App::{{:id}}
SuccessExitStatus=0 SIGKILL
-#PAMName=su
User=%i
Slice=user-%i.slice
EnvironmentFile=-/var/run/afm-debug/TARGET.env
ENDIF
-%systemd-unit system
-%systemd-unit service UNIT_NAME_BASE
-
SyslogIdentifier=afbd-TARGET
StandardInput=null
StandardOutput=journal
; auto start
;---------------------------------------------------------------------------------
[Install]
-WantedBy=default.target
-%systemd-unit wanted-by agl-user-session@.service
+WantedBy=agl-user-session@.target
+%systemd-unit wanted-by agl-user-session@.target
ENDIF
%end systemd-unit
--- /dev/null
+###########################################################################
+# Copyright 2015, 2016, 2017 IoT.bzh
+#
+# author: José Bollo <jose.bollo@iot.bzh>
+#
+# Licensed under the Apache 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://www.apache.org/licenses/LICENSE-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.
+###########################################################################
+
+cmake_minimum_required(VERSION 2.8)
+
+configure_file(afm-user-daemon.service.in afm-user-daemon.service)
+
+if(NOT USE_SDK)
+ set(SYSCONFDIR_DBUS_USER ${CMAKE_INSTALL_SYSCONFDIR}/dbus-1/session.d CACHE STRING "Path to dbus session configuration files")
+ set(UNITDIR_USER ${CMAKE_INSTALL_LIBDIR}/systemd/user CACHE STRING "Path to systemd system unit files")
+
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/afm-user-daemon.conf DESTINATION ${SYSCONFDIR_DBUS_USER})
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/afm-user-daemon.service DESTINATION ${UNITDIR_USER})
+ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/afm-user-start.service DESTINATION ${UNITDIR_USER})
+endif()
+
--- /dev/null
+[Unit]
+Description=start mark of afm user
+
+[Service]
+Type=oneshot
+ExecStart=/bin/touch %t/afm-user-started
+
+
json = afb_req_json(req);
if (wrap_json_unpack(json, "i", runid)
- && wrap_json_unpack(json, "{si}", "runid", runid)) {
+ && wrap_json_unpack(json, "{si}", _runid_, runid)) {
INFO("bad request method %s: %s", method,
json_object_to_json_string(json));
bad_request(req);