Last active
March 12, 2016 17:14
-
-
Save leon-anavi/21bd9c86b8403a6ee3eb to your computer and use it in GitHub Desktop.
meta-ivi-rvi-sota-client
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 977565729c235e93c9cf65c3b1342a5e278ce73d Mon Sep 17 00:00:00 2001 | |
From: Leon Anavi <[email protected]> | |
Date: Sat, 12 Mar 2016 11:39:26 +0200 | |
Subject: [PATCH] rvi-sota-client_git: add RVI SOTA client | |
Build and deploy sota_client and a systemd service. | |
Fix run.sh and force sota_client to listen anywhere instead | |
of possible unknown host sota-client if SOTA_CLIENT_ADDR | |
is not set. Use crate dbus-rs version 0.1.2 with fixed | |
casts of c_char raw pointers for ARM. The recipe depends | |
on meta-rust. | |
Signed-off-by: Leon Anavi <[email protected]> | |
--- | |
...ast-correctly-c_char-raw-pointers-for-ARM.patch | 146 +++++++++++++++++++++ | |
...en-anywhere-if-SOTA_CLIENT_ADDR-is-not-se.patch | 32 +++++ | |
.../rvi-sota-client/rvi-sota-client.service | 9 ++ | |
.../rvi-sota-client/rvi-sota-client_git.bb | 46 +++++++ | |
4 files changed, 233 insertions(+) | |
create mode 100644 meta-ivi/recipes-sota/rvi-sota-client/files/dbus-rs/0001-Cast-correctly-c_char-raw-pointers-for-ARM.patch | |
create mode 100644 meta-ivi/recipes-sota/rvi-sota-client/rvi-sota-client/0001-run.sh-Listen-anywhere-if-SOTA_CLIENT_ADDR-is-not-se.patch | |
create mode 100644 meta-ivi/recipes-sota/rvi-sota-client/rvi-sota-client/rvi-sota-client.service | |
create mode 100644 meta-ivi/recipes-sota/rvi-sota-client/rvi-sota-client_git.bb | |
diff --git a/meta-ivi/recipes-sota/rvi-sota-client/files/dbus-rs/0001-Cast-correctly-c_char-raw-pointers-for-ARM.patch b/meta-ivi/recipes-sota/rvi-sota-client/files/dbus-rs/0001-Cast-correctly-c_char-raw-pointers-for-ARM.patch | |
new file mode 100644 | |
index 0000000..2d3dbed | |
--- /dev/null | |
+++ b/meta-ivi/recipes-sota/rvi-sota-client/files/dbus-rs/0001-Cast-correctly-c_char-raw-pointers-for-ARM.patch | |
@@ -0,0 +1,146 @@ | |
+From 768202d3223813e71848758ecafcfeab276d9101 Mon Sep 17 00:00:00 2001 | |
+From: Leon Anavi <[email protected]> | |
+Date: Sat, 12 Mar 2016 17:52:02 +0200 | |
+Subject: [PATCH] Cast correctly c_char raw pointers for ARM | |
+ | |
+Fix the build of crate dbus-rs (version 0.1.2) for ARM | |
+with correct casts of c_char raw pointers. | |
+ | |
+Signed-off-by: Leon Anavi <[email protected]> | |
+--- | |
+ src/lib.rs | 18 +++++++++--------- | |
+ src/message.rs | 10 +++++----- | |
+ 2 files changed, 14 insertions(+), 14 deletions(-) | |
+ | |
+diff --git a/src/lib.rs b/src/lib.rs | |
+index aac9c0f..8134dc4 100644 | |
+--- a/src/lib.rs | |
++++ b/src/lib.rs | |
+@@ -60,7 +60,7 @@ unsafe impl Send for Error {} | |
+ | |
+ fn c_str_to_slice(c: & *const libc::c_char) -> Option<&str> { | |
+ if *c == ptr::null() { None } | |
+- else { std::str::from_utf8( unsafe { CStr::from_ptr(*c).to_bytes() }).ok() } | |
++ else { std::str::from_utf8( unsafe { CStr::from_ptr(*c as *const _).to_bytes() }).ok() } | |
+ } | |
+ | |
+ fn to_c_str(n: &str) -> CString { CString::new(n.as_bytes()).unwrap() } | |
+@@ -72,7 +72,7 @@ impl Error { | |
+ let m = to_c_str(&message.replace("%","%%")); | |
+ let mut e = Error::empty(); | |
+ | |
+- unsafe { ffi::dbus_set_error(e.get_mut(), n.as_ptr(), m.as_ptr()) }; | |
++ unsafe { ffi::dbus_set_error(e.get_mut(), n.as_ptr() as *const _, m.as_ptr() as *const _) }; | |
+ e | |
+ } | |
+ | |
+@@ -272,21 +272,21 @@ impl Connection { | |
+ }; | |
+ let r = unsafe { | |
+ let user_data: *mut libc::c_void = std::mem::transmute(&*self.i); | |
+- ffi::dbus_connection_try_register_object_path(self.conn(), p.as_ptr(), &vtable, user_data, e.get_mut()) | |
++ ffi::dbus_connection_try_register_object_path(self.conn(), p.as_ptr() as *const _, &vtable, user_data, e.get_mut()) | |
+ }; | |
+ if r == 0 { Err(e) } else { Ok(()) } | |
+ } | |
+ | |
+ pub fn unregister_object_path(&self, path: &str) { | |
+ let p = to_c_str(path); | |
+- let r = unsafe { ffi::dbus_connection_unregister_object_path(self.conn(), p.as_ptr()) }; | |
++ let r = unsafe { ffi::dbus_connection_unregister_object_path(self.conn(), p.as_ptr() as *const _) }; | |
+ if r == 0 { panic!("Out of memory"); } | |
+ } | |
+ | |
+ pub fn list_registered_object_paths(&self, path: &str) -> Vec<String> { | |
+ let p = to_c_str(path); | |
+ let mut clist: *mut *mut libc::c_char = ptr::null_mut(); | |
+- let r = unsafe { ffi::dbus_connection_list_registered(self.conn(), p.as_ptr(), &mut clist) }; | |
++ let r = unsafe { ffi::dbus_connection_list_registered(self.conn(), p.as_ptr() as *const _, &mut clist) }; | |
+ if r == 0 { panic!("Out of memory"); } | |
+ let mut v = Vec::new(); | |
+ let mut i = 0; | |
+@@ -306,28 +306,28 @@ impl Connection { | |
+ pub fn register_name(&self, name: &str, flags: u32) -> Result<RequestNameReply, Error> { | |
+ let mut e = Error::empty(); | |
+ let n = to_c_str(name); | |
+- let r = unsafe { ffi::dbus_bus_request_name(self.conn(), n.as_ptr(), flags, e.get_mut()) }; | |
++ let r = unsafe { ffi::dbus_bus_request_name(self.conn(), n.as_ptr() as *const _, flags, e.get_mut()) }; | |
+ if r == -1 { Err(e) } else { Ok(unsafe { std::mem::transmute(r) }) } | |
+ } | |
+ | |
+ pub fn release_name(&self, name: &str) -> Result<ReleaseNameReply, Error> { | |
+ let mut e = Error::empty(); | |
+ let n = to_c_str(name); | |
+- let r = unsafe { ffi::dbus_bus_release_name(self.conn(), n.as_ptr(), e.get_mut()) }; | |
++ let r = unsafe { ffi::dbus_bus_release_name(self.conn(), n.as_ptr() as *const _, e.get_mut()) }; | |
+ if r == -1 { Err(e) } else { Ok(unsafe { std::mem::transmute(r) }) } | |
+ } | |
+ | |
+ pub fn add_match(&self, rule: &str) -> Result<(), Error> { | |
+ let mut e = Error::empty(); | |
+ let n = to_c_str(rule); | |
+- unsafe { ffi::dbus_bus_add_match(self.conn(), n.as_ptr(), e.get_mut()) }; | |
++ unsafe { ffi::dbus_bus_add_match(self.conn(), n.as_ptr() as *const _, e.get_mut()) }; | |
+ if e.name().is_some() { Err(e) } else { Ok(()) } | |
+ } | |
+ | |
+ pub fn remove_match(&self, rule: &str) -> Result<(), Error> { | |
+ let mut e = Error::empty(); | |
+ let n = to_c_str(rule); | |
+- unsafe { ffi::dbus_bus_remove_match(self.conn(), n.as_ptr(), e.get_mut()) }; | |
++ unsafe { ffi::dbus_bus_remove_match(self.conn(), n.as_ptr() as *const _, e.get_mut()) }; | |
+ if e.name().is_some() { Err(e) } else { Ok(()) } | |
+ } | |
+ | |
+diff --git a/src/message.rs b/src/message.rs | |
+index 23871f8..e3dd021 100644 | |
+--- a/src/message.rs | |
++++ b/src/message.rs | |
+@@ -126,7 +126,7 @@ fn iter_append_array(i: &mut ffi::DBusMessageIter, a: &[MessageItem], t: TypeSig | |
+ let mut subiter = new_dbus_message_iter(); | |
+ let atype = to_c_str(&t); | |
+ | |
+- assert!(unsafe { ffi::dbus_message_iter_open_container(i, ffi::DBUS_TYPE_ARRAY, atype.as_ptr(), &mut subiter) } != 0); | |
++ assert!(unsafe { ffi::dbus_message_iter_open_container(i, ffi::DBUS_TYPE_ARRAY, atype.as_ptr() as *const _, &mut subiter) } != 0); | |
+ for item in a.iter() { | |
+ // assert!(item.type_sig() == t); | |
+ item.iter_append(&mut subiter); | |
+@@ -148,7 +148,7 @@ fn iter_append_struct(i: &mut ffi::DBusMessageIter, a: &[MessageItem]) { | |
+ fn iter_append_variant(i: &mut ffi::DBusMessageIter, a: &MessageItem) { | |
+ let mut subiter = new_dbus_message_iter(); | |
+ let atype = to_c_str(&format!("{}", a.array_type() as u8 as char)); | |
+- assert!(unsafe { ffi::dbus_message_iter_open_container(i, ffi::DBUS_TYPE_VARIANT, atype.as_ptr(), &mut subiter) } != 0); | |
++ assert!(unsafe { ffi::dbus_message_iter_open_container(i, ffi::DBUS_TYPE_VARIANT, atype.as_ptr() as *const _, &mut subiter) } != 0); | |
+ a.iter_append(&mut subiter); | |
+ assert!(unsafe { ffi::dbus_message_iter_close_container(i, &mut subiter) } != 0); | |
+ } | |
+@@ -481,7 +481,7 @@ impl Message { | |
+ init_dbus(); | |
+ let (d, p, i, m) = (to_c_str(destination), to_c_str(path), to_c_str(iface), to_c_str(method)); | |
+ let ptr = unsafe { | |
+- ffi::dbus_message_new_method_call(d.as_ptr(), p.as_ptr(), i.as_ptr(), m.as_ptr()) | |
++ ffi::dbus_message_new_method_call(d.as_ptr() as *const _, p.as_ptr() as *const _, i.as_ptr() as *const _, m.as_ptr() as *const _) | |
+ }; | |
+ if ptr == ptr::null_mut() { None } else { Some(Message { msg: ptr} ) } | |
+ } | |
+@@ -490,7 +490,7 @@ impl Message { | |
+ init_dbus(); | |
+ let (p, i, m) = (to_c_str(path), to_c_str(iface), to_c_str(method)); | |
+ let ptr = unsafe { | |
+- ffi::dbus_message_new_signal(p.as_ptr(), i.as_ptr(), m.as_ptr()) | |
++ ffi::dbus_message_new_signal(p.as_ptr() as *const _, i.as_ptr() as *const _, m.as_ptr() as *const _) | |
+ }; | |
+ if ptr == ptr::null_mut() { None } else { Some(Message { msg: ptr} ) } | |
+ } | |
+@@ -502,7 +502,7 @@ impl Message { | |
+ | |
+ pub fn new_error(m: &Message, error_name: &str, error_message: &str) -> Option<Message> { | |
+ let (en, em) = (to_c_str(error_name), to_c_str(error_message)); | |
+- let ptr = unsafe { ffi::dbus_message_new_error(m.msg, en.as_ptr(), em.as_ptr()) }; | |
++ let ptr = unsafe { ffi::dbus_message_new_error(m.msg, en.as_ptr() as *const _, em.as_ptr() as *const _) }; | |
+ if ptr == ptr::null_mut() { None } else { Some(Message { msg: ptr} ) } | |
+ } | |
+ | |
+-- | |
+2.1.4 | |
+ | |
diff --git a/meta-ivi/recipes-sota/rvi-sota-client/rvi-sota-client/0001-run.sh-Listen-anywhere-if-SOTA_CLIENT_ADDR-is-not-se.patch b/meta-ivi/recipes-sota/rvi-sota-client/rvi-sota-client/0001-run.sh-Listen-anywhere-if-SOTA_CLIENT_ADDR-is-not-se.patch | |
new file mode 100644 | |
index 0000000..78017dd | |
--- /dev/null | |
+++ b/meta-ivi/recipes-sota/rvi-sota-client/rvi-sota-client/0001-run.sh-Listen-anywhere-if-SOTA_CLIENT_ADDR-is-not-se.patch | |
@@ -0,0 +1,32 @@ | |
+From d24c8daad6af49fa9851f6658086cd017bd4d548 Mon Sep 17 00:00:00 2001 | |
+From: Leon Anavi <[email protected]> | |
+Date: Sat, 12 Mar 2016 17:16:04 +0200 | |
+Subject: [PATCH] run.sh: Listen anywhere if SOTA_CLIENT_ADDR is not set | |
+ | |
+Force sota_client to listen anywhere instead of | |
+on the possibly unknown host sota-client if | |
+SOTA_CLIENT_ADDR is not set. | |
+ | |
+Signed-off-by: Leon Anavi <[email protected]> | |
+--- | |
+ docker/run.sh | 4 ++-- | |
+ 1 file changed, 2 insertions(+), 2 deletions(-) | |
+ | |
+diff --git a/docker/run.sh b/docker/run.sh | |
+index 995ac8b..250ca82 100755 | |
+--- a/docker/run.sh | |
++++ b/docker/run.sh | |
+@@ -9,8 +9,8 @@ export DBUS_SESSION_BUS_ADDRESS | |
+ export DBUS_SESSION_BUS_PID | |
+ | |
+ LOGLEVEL=${LOGLEVEL:-"info"} | |
+-SOTA_CLIENT="${SOTA_CLIENT_ADDR:-sota-client}:${SOTA_CLIENT_PORT:-9080}" | |
++SOTA_CLIENT="${SOTA_CLIENT_ADDR:-0.0.0.0}:${SOTA_CLIENT_PORT:-9080}" | |
+ RVI="${RVI:-http://rvi-client:8901}" | |
+ | |
+ export RUST_LOG=${RUST_LOG:-"sota_client=$LOGLEVEL"} | |
+-/bin/sota_client -c /var/sota/client.toml -r "$RVI" -e "$SOTA_CLIENT" | |
++/usr/bin/sota_client -c /var/sota/client.toml -r "$RVI" -e "$SOTA_CLIENT" | |
+-- | |
+2.1.4 | |
+ | |
diff --git a/meta-ivi/recipes-sota/rvi-sota-client/rvi-sota-client/rvi-sota-client.service b/meta-ivi/recipes-sota/rvi-sota-client/rvi-sota-client/rvi-sota-client.service | |
new file mode 100644 | |
index 0000000..d99f9d6 | |
--- /dev/null | |
+++ b/meta-ivi/recipes-sota/rvi-sota-client/rvi-sota-client/rvi-sota-client.service | |
@@ -0,0 +1,9 @@ | |
+[Unit] | |
+Description=RVI SOTA Client | |
+ | |
+[Service] | |
+User=root | |
+ExecStart=/usr/bin/run.sh | |
+ | |
+[Install] | |
+WantedBy=multi-user.target | |
diff --git a/meta-ivi/recipes-sota/rvi-sota-client/rvi-sota-client_git.bb b/meta-ivi/recipes-sota/rvi-sota-client/rvi-sota-client_git.bb | |
new file mode 100644 | |
index 0000000..07386bf | |
--- /dev/null | |
+++ b/meta-ivi/recipes-sota/rvi-sota-client/rvi-sota-client_git.bb | |
@@ -0,0 +1,46 @@ | |
+DESCRIPTION = "SOTA Reference Implementation project - Client" | |
+HOMEPAGE = "https://github.com/advancedtelematic/rvi_sota_client" | |
+LICENSE = "MPL-2.0" | |
+ | |
+inherit cargo systemd | |
+ | |
+SRC_URI = "git://github.com/advancedtelematic/rvi_sota_client.git;protocol=https \ | |
+ file://rvi-sota-client.service \ | |
+ file://0001-run.sh-Listen-anywhere-if-SOTA_CLIENT_ADDR-is-not-se.patch \ | |
+ " | |
+SRCREV="57e803803691acab8e443f1631767edaec9da10f" | |
+LIC_FILES_CHKSUM="file://LICENSE;md5=65d26fcc2f35ea6a181ac777e42db1ea" | |
+ | |
+S = "${WORKDIR}/git" | |
+ | |
+BBCLASSEXTEND = "native" | |
+ | |
+DEPENDS += "dbus" | |
+RDEPENDS_${PN} += "dbus-lib libcrypto libssl" | |
+ | |
+SYSTEMD_SERVICE_${PN} = "rvi-sota-client.service" | |
+ | |
+do_install_append() { | |
+ install -m 0755 -p -D ${S}/docker/client.toml ${D}/var/sota/client.toml | |
+ install -m 0755 -p -D ${S}/docker/run.sh ${D}${prefix}/bin/run.sh | |
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then | |
+ install -p -D ${WORKDIR}/rvi-sota-client.service ${D}${systemd_unitdir}/system/rvi-sota-client.service | |
+ fi | |
+} | |
+ | |
+FILES_${PN} += "/var/sota/" | |
+FILES_${PN} += "/var/sota/client.toml" | |
+FILES_${PN} += "${prefix}/bin/" | |
+FILES_${PN} += "${prefix}/bin/run.sh" | |
+ | |
+## dbus-rs | |
+SRC_URI += "\ | |
+ git://github.com/diwic/dbus-rs.git;protocol=https;name=dbus-rs;destsuffix=dbus-rs \ | |
+ file://dbus-rs/0001-Cast-correctly-c_char-raw-pointers-for-ARM.patch;patchdir=../dbus-rs \ | |
+" | |
+ | |
+# 0.1.2 | |
+SRCREV_dbus-rs = "c2c4c98adcf9949992ac5b0050bf17afe10868c9" | |
+ | |
+SRCREV_FORMAT .= "_dbus-rs" | |
+EXTRA_OECARGO_PATHS += "${WORKDIR}/dbus-rs" | |
-- | |
2.1.4 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment