forked from synit/synit
Compare commits
24 Commits
Author | SHA1 | Date |
---|---|---|
Tony Garnock-Jones | 6c8d679e81 | |
Tony Garnock-Jones | 23d72630c8 | |
Tony Garnock-Jones | b5816a3e59 | |
Tony Garnock-Jones | fc1be0badf | |
Tony Garnock-Jones | ed7fb0b676 | |
Tony Garnock-Jones | a2ecd8a4e4 | |
Tony Garnock-Jones | 253b667ad3 | |
Tony Garnock-Jones | b3adef390b | |
Tony Garnock-Jones | 1518937f3a | |
Tony Garnock-Jones | 0fdd5b9c37 | |
Tony Garnock-Jones | d1a1516ada | |
Tony Garnock-Jones | 39c3231de2 | |
Tony Garnock-Jones | 8c9325ffdc | |
Tony Garnock-Jones | 02a7b88946 | |
Tony Garnock-Jones | e1b9a01b66 | |
Tony Garnock-Jones | 167c5a249f | |
Tony Garnock-Jones | 601455350d | |
Tony Garnock-Jones | b92a320592 | |
Tony Garnock-Jones | 2e7f2e4bd0 | |
Emery Hemingway | 95d8039b1c | |
Tony Garnock-Jones | 69637cb27a | |
Tony Garnock-Jones | 59951e5fc0 | |
Tony Garnock-Jones | bedcaff29d | |
Tony Garnock-Jones | 4865354360 |
|
@ -48,7 +48,7 @@ project:
|
|||
- pmOS booting on cellphone to modified environment
|
||||
- Scripts for packaging of on-phone artifacts
|
||||
|
||||
7. Demo exercising phone infrastructure
|
||||
7. ✓✓ Demo exercising phone infrastructure
|
||||
|
||||
8. ✓✓ Dataspace Protocol specification
|
||||
- Draft specification of interaction protocols for secure
|
||||
|
@ -73,7 +73,7 @@ project:
|
|||
- Development of generic system-layer components
|
||||
- Development of mobile-phone-specific components
|
||||
|
||||
13. Demo exercising realised system layer
|
||||
13. ✓✓ Demo exercising realised system layer
|
||||
|
||||
14. Security & accessibility review
|
||||
- Security review of items 8, 9 and 12 would be most worthwhile.
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 17 KiB |
|
@ -0,0 +1,2 @@
|
|||
/packages
|
||||
/target
|
|
@ -80,17 +80,17 @@ veryclean: clean
|
|||
build-image: check-tools .build-image.$(ARCH)
|
||||
|
||||
.build-image.$(ARCH): $(KEYFILE)
|
||||
docker buildx build \
|
||||
--progress plain \
|
||||
docker build \
|
||||
$(DOCKER_BUILD_ARGS) \
|
||||
--pull \
|
||||
--platform=linux/$(DOCKER_ARCH) \
|
||||
-t synit-build:$(ARCH) .
|
||||
touch $@
|
||||
|
||||
.build-image.rust.$(ARCH): .build-image.$(ARCH)
|
||||
docker buildx build \
|
||||
--progress plain \
|
||||
docker build \
|
||||
$(DOCKER_BUILD_ARGS) \
|
||||
--pull \
|
||||
--platform=linux/$(DOCKER_ARCH) \
|
||||
-t synit-build-rust:$(ARCH) -f Dockerfile.rust .
|
||||
touch $@
|
||||
|
@ -105,12 +105,15 @@ $(KEYFILE):
|
|||
|
||||
check-tools:
|
||||
@rm -f .versions
|
||||
@preserves-tool --version >> .versions
|
||||
@rustc +nightly --version >> .versions
|
||||
@cross +nightly --version >> .versions
|
||||
@docker --version >> .versions
|
||||
@python3 --version >> .versions
|
||||
@git --version >> .versions
|
||||
@ssh -V >> .versions 2>&1
|
||||
@rsync --version | head -1 >> .versions
|
||||
@python3 --version >> .versions
|
||||
@rustc --version >> .versions
|
||||
@cargo --version >> .versions
|
||||
@make --version | head -1 >> .versions
|
||||
@docker --version >> .versions
|
||||
@cc --version | head -1 >> .versions
|
||||
@preserves-tool --version >> .versions
|
||||
@qemu-system-aarch64 --version | head -1 >> .versions
|
||||
@ls -la /proc/sys/fs/binfmt_misc/qemu-aarch64 >> .versions 2>&1 || true
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#!/bin/sh
|
||||
case $1 in
|
||||
aarch64) echo arm64;;
|
||||
x86_64) echo x86_64;;
|
||||
x86_64) echo amd64;;
|
||||
armv7) echo armhf;;
|
||||
*)
|
||||
echo 'ERROR: Unknown Alpine ARCH '"$1" >&2
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Maintainer: Tony Garnock-Jones <tonyg@leastfixedpoint.com>
|
||||
pkgname=preserves-schemas
|
||||
pkgver=0.6.3-r20220619
|
||||
pkgver=0.994.0-r20240301
|
||||
pkgrel=0
|
||||
pkgdesc="Shared Preserves Schema definitions"
|
||||
url="https://preserves.dev/"
|
||||
|
@ -20,5 +20,5 @@ package() {
|
|||
}
|
||||
|
||||
sha512sums="
|
||||
9fde41df7ca69252924da758eb7e7129fb83edb6a2dd9ec2d7115b17a8e390b9f30335393cdd4d06219a1b002fb04b4bd867a0bd8d80d18e1be85f857d5da3b0 preserves-0.6.3-r20220619.zip
|
||||
2f6a14ec262a8ed8120f0cfe4c6e7641dd5abd6e17a18cc3fb5f51c5d6a0801ac6ace53234a1b35a38452e24b59bf25b4c1697f56c2a7527c33867a1ad8e4248 preserves-0.994.0-r20240301.zip
|
||||
"
|
||||
|
|
|
@ -4,4 +4,4 @@ buildlog.*
|
|||
preserves-tool.aarch64
|
||||
preserves-tool.armv7
|
||||
preserves-tool.x86_64
|
||||
preserves/
|
||||
preserves-rs/
|
||||
|
|
|
@ -1,24 +1,21 @@
|
|||
# -*- makefile -*-
|
||||
|
||||
prepare: preserves miniclean
|
||||
echo nightly > preserves/implementations/rust/rust-toolchain
|
||||
$(MAKE) -C preserves/implementations/rust $(ARCH)-binary-release
|
||||
cp -p preserves/implementations/rust/target/$(ARCH)-*/release/preserves-tool \
|
||||
prepare: preserves-rs miniclean
|
||||
$(MAKE) -C preserves-rs $(ARCH)-binary-release
|
||||
cp -p preserves-rs/target/target.$(ARCH)/$(ARCH)-*/release/preserves-tool \
|
||||
preserves-tool.$(ARCH)
|
||||
(cd preserves/implementations/rust/preserves-tools && cargo metadata --format-version 1) \
|
||||
(cd preserves-rs/preserves-tools && cargo metadata --format-version 1) \
|
||||
| preserves-tool convert --output-format unquoted \
|
||||
--select '. "packages" / [. "name" = "preserves-tools"] . "version"' \
|
||||
> VERSION
|
||||
rm -f preserves/implementations/rust/rust-toolchain
|
||||
(cd preserves; ../../../gitversion) > GITVERSION
|
||||
(cd preserves-rs; ../../../gitversion) > GITVERSION
|
||||
|
||||
preserves:
|
||||
git clone https://gitlab.com/preserves/preserves
|
||||
preserves-rs:
|
||||
git clone https://gitlab.com/preserves/preserves-rs
|
||||
|
||||
miniclean:
|
||||
rm -f preserves-tool.$(ARCH)
|
||||
|
||||
clean: miniclean
|
||||
rm -rf preserves/implementations/rust/target
|
||||
rm -f preserves/implementations/rust/rust-toolchain
|
||||
rm -rf preserves-rs/target
|
||||
rm -f VERSION
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
# Maintainer: Tony Garnock-Jones <tonyg@leastfixedpoint.com>
|
||||
pkgname=py3-preserves
|
||||
_pyname=preserves
|
||||
pkgver=0.16.1
|
||||
pkgver=0.994.0
|
||||
pkgrel=0
|
||||
pkgdesc="Preserves serialization format"
|
||||
url="https://preserves.dev/"
|
||||
arch="noarch"
|
||||
license="Apache-2.0"
|
||||
depends="python3"
|
||||
makedepends="py3-setuptools py3-pip py3-wheel"
|
||||
makedepends="py3-setuptools py3-pip py3-wheel py3-build"
|
||||
_pypiprefix="${_pyname%${_pyname#?}}"
|
||||
source="https://files.pythonhosted.org/packages/source/$_pypiprefix/$_pyname/$_pyname-$pkgver.tar.gz"
|
||||
builddir="$srcdir/$_pyname-$pkgver"
|
||||
options="!check"
|
||||
|
||||
build() {
|
||||
python3 setup.py build
|
||||
python3 -m build
|
||||
}
|
||||
|
||||
package() {
|
||||
python3 setup.py install --prefix=/usr --root="$pkgdir"
|
||||
python3 -m pip install --prefix=/usr --root="$pkgdir" ./dist/preserves-$pkgver-*.whl
|
||||
}
|
||||
|
||||
sha512sums="
|
||||
4091fbdcff4c6a276248267d7af288aec035c88b0fd8295e48c3ee6fd1caca9071184ec8467bcc9e2685810e78db8151baabaaba4b5c0562d533af7039dd003e preserves-0.16.1.tar.gz
|
||||
1b4c65f61a85204d68dcf6568fc63511ac407af1606e4d7edf7adfa12c1cf3ab72e4e344ee9536f012fda1fe3cf22ca5e90db712e3621890d5723708f0c0ce80 preserves-0.994.0.tar.gz
|
||||
"
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
# Maintainer: Tony Garnock-Jones <tonyg@leastfixedpoint.com>
|
||||
pkgname=py3-syndicate
|
||||
_pyname=syndicate-py
|
||||
pkgver=0.8.5
|
||||
pkgver=0.16.0
|
||||
pkgrel=0
|
||||
pkgdesc="Syndicated Actor model for Python"
|
||||
url="https://syndicate-lang.org/"
|
||||
arch="noarch"
|
||||
license="GPL-3.0-or-later"
|
||||
depends="python3 py3-preserves py3-websockets"
|
||||
makedepends="py3-setuptools py3-pip py3-wheel"
|
||||
makedepends="py3-setuptools py3-pip py3-wheel py3-build"
|
||||
_pypiprefix="${_pyname%${_pyname#?}}"
|
||||
source="https://files.pythonhosted.org/packages/source/$_pypiprefix/$_pyname/$_pyname-$pkgver.tar.gz"
|
||||
builddir="$srcdir/$_pyname-$pkgver"
|
||||
options="!check"
|
||||
|
||||
build() {
|
||||
python3 setup.py build
|
||||
python3 -m build
|
||||
}
|
||||
|
||||
package() {
|
||||
python3 setup.py install --prefix=/usr --root="$pkgdir"
|
||||
python3 -m pip install --prefix=/usr --root="$pkgdir" ./dist/syndicate_py-$pkgver-*.whl
|
||||
}
|
||||
|
||||
sha512sums="
|
||||
34de54a53d6a8197b534a2b3982b501439f7a1b4e9befd19b60a01516a36ce0b8bf61681d4b4b798e6a17d8ece3ffcff0017c1858e5f5f8b43f8677e19b78d88 syndicate-py-0.8.5.tar.gz
|
||||
bc4298d9b7dce9fb7cfa0ae9490f7cb61dc9fcbd2d6cdf1396657645d20ff48fb342c64383ee58569d2cf2c630c9f0ffa781288b82f7d199ae3a4499a288b160 syndicate-py-0.16.0.tar.gz
|
||||
"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Maintainer: Tony Garnock-Jones <tonyg@leastfixedpoint.com>
|
||||
pkgname=syndicate-schemas
|
||||
pkgver=0.0.2-r20220206
|
||||
pkgver=0.4.0-r20240301
|
||||
pkgrel=1
|
||||
pkgdesc="Shared Syndicate Preserves Schema definitions"
|
||||
url="https://syndicate-lang.org/"
|
||||
|
@ -19,5 +19,5 @@ package() {
|
|||
}
|
||||
|
||||
sha512sums="
|
||||
9e23aae70aebcfc96b043a6bc437027a803f6eff78a8f2725cc50b0fa83a75e814c789fd05b6333bb1a31af396b984fbed82e37daf7f542d909cee4a052b5adc 0.0.2-r20220206.zip
|
||||
5669756bceec8c5283041f701016e413981894e268a8630ea32332a2529143242c190dd31425de18daa249c913f10402700c00dee07ab4ee92c13a5210c68853 0.4.0-r20240301.zip
|
||||
"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Contributor: Tony Garnock-Jones <tonyg@leastfixedpoint.com>
|
||||
# Maintainer: Tony Garnock-Jones <tonyg@leastfixedpoint.com>
|
||||
pkgname=syndicate-sh
|
||||
pkgver=0.0.1
|
||||
pkgver=0.0.3
|
||||
pkgrel=0
|
||||
pkgdesc="Syndicate connectivity shell support functions"
|
||||
url="https://syndicate-lang.org/"
|
||||
|
@ -25,5 +25,5 @@ package() {
|
|||
}
|
||||
|
||||
sha512sums="
|
||||
21abf6305b7e81ebe4d0175a8c0c5a6fb1a75422071dea49f5a923e2dc5de7b41a194b2ead38afe4076834d3f299d77cdd21e88c6f7c52816e691907c1a683d3 syndicate.sh
|
||||
ed6140f2ade11d8bd9f730efba28bacd9b517d9035dc890ab5c3cc85f3cd735aee8930e686b3e507291325384a377613c3b1b1f0ee395fbfa1e9fc1e6a86e407 syndicate.sh
|
||||
"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Contributor: Tony Garnock-Jones <tonyg@leastfixedpoint.com>
|
||||
# Maintainer: Tony Garnock-Jones <tonyg@leastfixedpoint.com>
|
||||
pkgname=synit-config
|
||||
pkgver=0.0.6$(cat GITVERSION)
|
||||
pkgver=0.0.8$(cat GITVERSION)
|
||||
pkgrel=0
|
||||
pkgdesc="synit system layer configuration"
|
||||
url="https://synit.org/"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; Sending <exec SOMECOMMAND RESTARTPOLICY> causes the command to be run.
|
||||
;
|
||||
# Sending <exec SOMECOMMAND RESTARTPOLICY> causes the command to be run.
|
||||
#
|
||||
?? <exec ?argv ?restartPolicy> [
|
||||
let ?id = timestamp
|
||||
let ?facet = facet
|
||||
|
@ -14,6 +14,6 @@
|
|||
? <service-state <daemon $d> failed> [$facet ! stop]
|
||||
]
|
||||
|
||||
; If the restart policy is not specified, it is defaulted to `on-error`.
|
||||
;
|
||||
# If the restart policy is not specified, it is defaulted to `on-error`.
|
||||
#
|
||||
?? <exec ?argv> ! <exec $argv on-error>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
; To "run" a milestone service,
|
||||
; - assert that it is both started and ready
|
||||
; - that's it!
|
||||
;
|
||||
# To "run" a milestone service,
|
||||
# - assert that it is both started and ready
|
||||
# - that's it!
|
||||
#
|
||||
? <run-service <milestone ?m>> [
|
||||
<service-state <milestone $m> started>
|
||||
<service-state <milestone $m> ready>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
; To the usual suite of service states we add `up`, meaning "either `ready` or `complete`".
|
||||
;
|
||||
# To the usual suite of service states we add `up`, meaning "either `ready` or `complete`".
|
||||
#
|
||||
? <service-state ?x ready> <service-state $x up>
|
||||
? <service-state ?x complete> <service-state $x up>
|
||||
|
|
|
@ -1,28 +1,28 @@
|
|||
; Attenuate `$config` by rewriting plain `require-service` assertions to `require-core-service`
|
||||
; assertions. Allow all other assertions through.
|
||||
;
|
||||
let ?sys = <* $config [
|
||||
# Attenuate `$config` by rewriting plain `require-service` assertions to `require-core-service`
|
||||
# assertions. Allow all other assertions through.
|
||||
#
|
||||
let ?sys = <* $config [<or [
|
||||
<rewrite <require-service ?s> <require-core-service $s>>
|
||||
<filter _>
|
||||
]>
|
||||
<accept _>
|
||||
]>]>
|
||||
|
||||
; Give meaning to `require-core-service`: it is an ordinary `require-service`, plus a
|
||||
; declaration that the `core` milestone depends on the service.
|
||||
;
|
||||
# Give meaning to `require-core-service`: it is an ordinary `require-service`, plus a
|
||||
# declaration that the `core` milestone depends on the service.
|
||||
#
|
||||
? <require-core-service ?s> [
|
||||
<depends-on <milestone core> <service-state $s up>>
|
||||
<require-service $s>
|
||||
]
|
||||
|
||||
; Load config in the `core` directory, using the wrapped `config` so that all plain services
|
||||
; required are changed to be *core* services.
|
||||
;
|
||||
# Load config in the `core` directory, using the wrapped `config` so that all plain services
|
||||
# required are changed to be *core* services.
|
||||
#
|
||||
<require-service <config-watcher "/etc/syndicate/core" {
|
||||
config: $sys
|
||||
gatekeeper: $gatekeeper
|
||||
log: $log
|
||||
}>>
|
||||
|
||||
; In addition, require the `core` milestone explicitly.
|
||||
;
|
||||
# In addition, require the `core` milestone explicitly.
|
||||
#
|
||||
<require-service <milestone core>>
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
; Attenuate `$config` by rewriting plain `require-service` assertions to
|
||||
; `require-basic-service` assertions. Allow all other assertions through.
|
||||
;
|
||||
let ?basic = <* $config [
|
||||
# Attenuate `$config` by rewriting plain `require-service` assertions to
|
||||
# `require-basic-service` assertions. Allow all other assertions through.
|
||||
#
|
||||
let ?basic = <* $config [<or [
|
||||
<rewrite <require-service ?s> <require-basic-service $s>>
|
||||
<filter _>
|
||||
]>
|
||||
<accept _>
|
||||
]>]>
|
||||
|
||||
; Give meaning to `require-basic-service`: it is an ordinary `require-service`, plus a
|
||||
; declaration that the service depends on the `core` milestone.
|
||||
;
|
||||
# Give meaning to `require-basic-service`: it is an ordinary `require-service`, plus a
|
||||
# declaration that the service depends on the `core` milestone.
|
||||
#
|
||||
? <require-basic-service ?s> [
|
||||
<depends-on $s <service-state <milestone core> up>>
|
||||
<require-service $s>
|
||||
]
|
||||
|
||||
; Once we see that the `core` milestone is ready, start processing the `services`
|
||||
; directory.
|
||||
;
|
||||
# Once we see that the `core` milestone is ready, start processing the `services`
|
||||
# directory.
|
||||
#
|
||||
? <service-state <milestone core> up> [
|
||||
<require-service <config-watcher "/etc/syndicate/services" {
|
||||
config: $basic
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
; Pinephone:
|
||||
# Pinephone:
|
||||
<require-service <qmi-wwan "/dev/cdc-wdm0">>
|
||||
|
||||
<depends-on <qmi-wwan "/dev/cdc-wdm0"> <service-state <daemon eg25-manager> up>>
|
||||
|
@ -7,7 +7,7 @@
|
|||
<depends-on <daemon eg25-manager> <service-state <daemon eg25-manager-monitor> up>>
|
||||
<daemon eg25-manager-monitor "/usr/lib/synit/eg25-manager-monitor">
|
||||
|
||||
; More generally:
|
||||
# More generally:
|
||||
|
||||
? <user-setting <mobile-data-enabled>> [
|
||||
? <user-setting <mobile-data-apn ?apn>> [
|
||||
|
@ -20,25 +20,25 @@
|
|||
|
||||
? <run-service <daemon <qmi-wwan-manager ?dev ?apn>>> [
|
||||
<daemon <qmi-wwan-manager $dev $apn> ["/usr/lib/synit/qmi-wwan-manager" $dev $apn]>
|
||||
; Occasionally qmi-wwan-manager complains on stderr about the link going away, but doesn't
|
||||
; terminate. Fortunately it doesn't seem to talk on stderr at all unless the link goes away,
|
||||
; so we interpret any stderr activity (!) as indication of a problem here.
|
||||
# Occasionally qmi-wwan-manager complains on stderr about the link going away, but doesn't
|
||||
# terminate. Fortunately it doesn't seem to talk on stderr at all unless the link goes away,
|
||||
# so we interpret any stderr activity (!) as indication of a problem here.
|
||||
$log ?? <log _ {
|
||||
service: <daemon <qmi-wwan-manager $dev $apn>>
|
||||
stream: stderr
|
||||
pid: ?pid
|
||||
}> [
|
||||
; We used to just do this:
|
||||
;
|
||||
; $config ! <restart-service <daemon <qmi-wwan-manager $dev $apn>>>
|
||||
;
|
||||
; ... but it immediately restarts the service, causing lots of pointless load and log spam.
|
||||
; TODO: make it so you can include an exit status in the restart request; something like
|
||||
; "restart immediately" vs "simulated normal termination" vs "simulated error termination",
|
||||
; triggering the appropriate supervisor behaviours.
|
||||
;
|
||||
; So instead we kill the qmicli program with a signal, which *does* trigger the supervisor
|
||||
; in the right way.
|
||||
# We used to just do this:
|
||||
#
|
||||
# $config ! <restart-service <daemon <qmi-wwan-manager $dev $apn>>>
|
||||
#
|
||||
# ... but it immediately restarts the service, causing lots of pointless load and log spam.
|
||||
# TODO: make it so you can include an exit status in the restart request; something like
|
||||
# "restart immediately" vs "simulated normal termination" vs "simulated error termination",
|
||||
# triggering the appropriate supervisor behaviours.
|
||||
#
|
||||
# So instead we kill the qmicli program with a signal, which *does* trigger the supervisor
|
||||
# in the right way.
|
||||
let ?pid = stringify $pid
|
||||
$config ! <exec ["kill", "-INT", $pid] never>
|
||||
]
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
]
|
||||
|
||||
? <run-service <daemon <udhcpc ?ifname>>> [
|
||||
; We use a custom script that gives mobile-data devices a sensible routing metric
|
||||
# We use a custom script that gives mobile-data devices a sensible routing metric
|
||||
<daemon <udhcpc $ifname> ["udhcpc" "-i" $ifname "-fR" "-s" "/usr/lib/synit/udhcpc.script"]>
|
||||
]
|
||||
|
||||
|
|
|
@ -30,5 +30,14 @@ mkdir -p /usr/local/etc/syndicate/services
|
|||
# particular we no longer want to run the DHCP server that PostmarketOS runs by default on
|
||||
# usb0. Instead we will be a DHCP client. (This was just easiest to set up.)
|
||||
killall unudhcpd || true
|
||||
# We also don't want the splash screen.
|
||||
killall pbsplash || true
|
||||
|
||||
# This tells Rust programs built with jemallocator to be very aggressive about keeping their
|
||||
# heaps small. Synit currently targets small machines. Without this, I have seen the system
|
||||
# syndicate-server take around 300MB of heap when doing not particularly much; with this, it
|
||||
# takes about 15MB in the same state. There is a performance penalty on being so aggressive
|
||||
# about heap size, but it's more important to stay small in this circumstance right now.
|
||||
export _RJEM_MALLOC_CONF="narenas:1,tcache:false,dirty_decay_ms:0,muzzy_decay_ms:0"
|
||||
|
||||
exec /sbin/synit-pid1
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
prepare: miniclean
|
||||
$(MAKE) -C ../../../synit-pid1 $(ARCH)-binary-release
|
||||
cp -p ../../../synit-pid1/target/$(ARCH)-*/release/synit-pid1 synit-pid1.$(ARCH)
|
||||
cp -p ../../../synit-pid1/target/target.$(ARCH)/$(ARCH)-*/release/synit-pid1 synit-pid1.$(ARCH)
|
||||
(cd ../../../synit-pid1 && cargo metadata --format-version 1) | \
|
||||
preserves-tool convert --output-format unquoted \
|
||||
--select '. "packages" / [. "name" = "synit-pid1"] . "version"' > VERSION
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
apk add ca-certificates openssl
|
||||
apk add ca-certificates openssl wget
|
||||
openssl s_client -showcerts -connect "$1":3127 </dev/null 2>/dev/null \
|
||||
| openssl x509 | tee /usr/local/share/ca-certificates/synit-squid-snakeoil.crt
|
||||
update-ca-certificates
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#!/bin/sh
|
||||
docker buildx build -t synit-squid "$(dirname "$0")"
|
||||
docker build -t synit-squid "$(dirname "$0")"
|
||||
docker run --rm --name fetch-squid-cert synit-squid cat /etc/ssl/certs/squid-ca.pem \
|
||||
> squid-ca.pem
|
||||
docker run -it --rm \
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
´³bundle·µ³ui„´³schema·³version‘³definitions·³Fill´³orµµ±fixed´³atom³Double„„µ±fill´³rec´³lit³fill„´³tupleµ´³named³weight´³atom³
SignedInteger„„´³named³rank´³atom³
SignedInteger„„„„„„„„³Root´³rec´³lit³root„´³tupleµ´³named³id´³refµ„³WidgetId„„´³named³order´³refµ„³SortKey„„„„„³Click´³rec´³lit³click„´³tupleµ´³named³widget´³refµ„³WidgetId„„„„„³Color´³rec´³lit³rgba„´³tupleµ´³named³red´³atom³Double„„´³named³green´³atom³Double„„´³named³blue´³atom³Double„„´³named³alpha´³atom³Double„„„„„³State´³rec´³lit³state„´³tupleµ´³named³widget´³refµ„³WidgetId„„´³named³key³any„´³named³value³any„„„„³Touch´³rec´³lit³touch„´³tupleµ´³named³widget´³refµ„³WidgetId„„´³named³touchId³any„„„„³Parent´³rec´³lit³parent„´³tupleµ´³named³id´³refµ„³WidgetId„„´³named³parentId´³refµ„³WidgetId„„´³named³order´³refµ„³SortKey„„„„„³Sizing´³rec´³lit³sizing„´³tupleµ´³named³ideal´³atom³Double„„´³named³stretch´³refµ„³Fill„„´³named³shrink´³refµ„³Fill„„„„„³Widget´³rec´³lit³widget„´³tupleµ´³named³id´³refµ„³WidgetId„„´³named³type´³refµ„³
|
||||
´³bundle·µ³ui„´³schema·³version°³definitions·³Fill´³orµµ±fixed´³atom³Double„„µ±fill´³rec´³lit³fill„´³tupleµ´³named³weight´³atom³
SignedInteger„„´³named³rank´³atom³
SignedInteger„„„„„„„„³Root´³rec´³lit³root„´³tupleµ´³named³id´³refµ„³WidgetId„„´³named³order´³refµ„³SortKey„„„„„³Click´³rec´³lit³click„´³tupleµ´³named³widget´³refµ„³WidgetId„„„„„³Color´³rec´³lit³rgba„´³tupleµ´³named³red´³atom³Double„„´³named³green´³atom³Double„„´³named³blue´³atom³Double„„´³named³alpha´³atom³Double„„„„„³State´³rec´³lit³state„´³tupleµ´³named³widget´³refµ„³WidgetId„„´³named³key³any„´³named³value³any„„„„³Touch´³rec´³lit³touch„´³tupleµ´³named³widget´³refµ„³WidgetId„„´³named³touchId³any„„„„³Parent´³rec´³lit³parent„´³tupleµ´³named³id´³refµ„³WidgetId„„´³named³parentId´³refµ„³WidgetId„„´³named³order´³refµ„³SortKey„„„„„³Sizing´³rec´³lit³sizing„´³tupleµ´³named³ideal´³atom³Double„„´³named³stretch´³refµ„³Fill„„´³named³shrink´³refµ„³Fill„„„„„³Widget´³rec´³lit³widget„´³tupleµ´³named³id´³refµ„³WidgetId„„´³named³type´³refµ„³
|
||||
WidgetType„„„„„³Window´³rec´³lit³window„´³tupleµ´³named³id´³refµ„³WidgetId„„´³named³space´³embedded³any„„„„„³BoxSize´³rec´³lit³box-size„´³tupleµ´³named³
|
||||
horizontal´³refµ„³Sizing„„´³named³vertical´³refµ„³Sizing„„„„„³SortKey´³orµµ±double´³atom³Double„„µ±string´³atom³String„„„„³LeafType´³orµµ±blank´³lit³blank„„µ±text´³lit³text„„µ±slider´³lit³slider„„µ±image´³lit³image„„µ±icon´³lit³icon„„„„³NodeType´³orµµ±column´³lit³column„„µ±row´³lit³row„„„„³WidgetId³any³ Attribute´³rec´³lit³ attribute„´³tupleµ´³named³id´³refµ„³WidgetId„„´³named³key´³atom³Symbol„„´³named³value³any„„„„³
|
||||
WidgetType´³orµµ±NodeType´³refµ„³NodeType„„µ±LeafType´³refµ„³LeafType„„„„³WindowTitle´³rec´³lit³window-title„´³tupleµ´³named³title´³atom³String„„„„„³WidgetInstance´³rec´³lit³widget-instance„´³tupleµ´³named³id´³refµ„³WidgetId„„´³named³instance´³embedded³any„„„„„³WindowCloseable´³rec´³lit³window-closeable„´³tupleµ„„„³VisibleScrollRange´³orµµ±none´³lit³none„„µ±visibleScrollRange´³rec´³lit³visible-scroll-range„´³tupleµ´³rec´³lit³min„´³tupleµ´³named³minId´³refµ„³WidgetId„„´³named³
|
||||
minSortKey´³refµ„³SortKey„„„„„´³rec´³lit³max„´³tupleµ´³named³maxId´³refµ„³WidgetId„„´³named³
|
||||
maxSortKey´³refµ„³SortKey„„„„„„„„„„„„³embeddedType€„„µ³mime„´³schema·³version‘³definitions·³Value´³rec´³lit³mime„´³tupleµ´³named³type´³atom³Symbol„„´³named³data´³atom³
|
||||
ByteString„„„„„„³embeddedType€„„µ³time„´³schema·³version‘³definitions·³Stamp´³rec´³lit³rfc3339„´³tupleµ´³named³value´³atom³String„„„„„„³embeddedType€„„µ³audio„´³schema·³version‘³definitions·³Sink´³orµµ±speaker´³lit³speaker„„µ±headset´³lit³headset„„µ±earpiece´³lit³earpiece„„„„³Source´³orµµ±speakerphone´³lit³speakerphone„„µ±headset´³lit³headset„„µ±handset´³lit³handset„„„„³Mapping´³rec´³lit³alsa-mapping„´³tupleµ´³named³abstract´³refµ„³Endpoint„„´³named³concrete´³atom³String„„„„„³Endpoint´³orµµ±source´³rec´³lit³source„´³tupleµ´³named³value´³refµ„³Source„„„„„„µ±sink´³rec´³lit³sink„´³tupleµ´³named³value´³refµ„³Sink„„„„„„„„³HeadsetSpeakerPresent´³rec´³lit³headset-speaker-present„´³tupleµ„„„³HeadsetMicrophonePresent´³rec´³lit³headset-microphone-present„´³tupleµ„„„„³embeddedType€„„µ³hayes„´³schema·³version‘³definitions·³Result´³rec´³lit³result„´³tupleµ´³named³text´³atom³String„„´³named³tag´³refµ„³MaybeString„„´³named³fields´³refµ„³MaybeStrings„„„„„³
|
||||
maxSortKey´³refµ„³SortKey„„„„„„„„„„„„³embeddedType€„„µ³mime„´³schema·³version°³definitions·³Value´³rec´³lit³mime„´³tupleµ´³named³type´³atom³Symbol„„´³named³data´³atom³
|
||||
ByteString„„„„„„³embeddedType€„„µ³time„´³schema·³version°³definitions·³Stamp´³rec´³lit³rfc3339„´³tupleµ´³named³value´³atom³String„„„„„„³embeddedType€„„µ³audio„´³schema·³version°³definitions·³Sink´³orµµ±speaker´³lit³speaker„„µ±headset´³lit³headset„„µ±earpiece´³lit³earpiece„„„„³Source´³orµµ±speakerphone´³lit³speakerphone„„µ±headset´³lit³headset„„µ±handset´³lit³handset„„„„³Mapping´³rec´³lit³alsa-mapping„´³tupleµ´³named³abstract´³refµ„³Endpoint„„´³named³concrete´³atom³String„„„„„³Endpoint´³orµµ±source´³rec´³lit³source„´³tupleµ´³named³value´³refµ„³Source„„„„„„µ±sink´³rec´³lit³sink„´³tupleµ´³named³value´³refµ„³Sink„„„„„„„„³HeadsetSpeakerPresent´³rec´³lit³headset-speaker-present„´³tupleµ„„„³HeadsetMicrophonePresent´³rec´³lit³headset-microphone-present„´³tupleµ„„„„³embeddedType€„„µ³hayes„´³schema·³version°³definitions·³Result´³rec´³lit³result„´³tupleµ´³named³text´³atom³String„„´³named³tag´³refµ„³MaybeString„„´³named³fields´³refµ„³MaybeStrings„„„„„³
|
||||
CommandRPC´³rec´³lit³execute-command„´³tupleµ´³named³commandText´³atom³String„„´³named³replyTo´³embedded´³refµ„³
CommandResult„„„„„„³MaybeString´³orµµ±present´³atom³String„„µ±absent´³lit€„„„„³CommandEvent´³rec´³lit³execute-command„´³tupleµ´³named³commandText´³atom³String„„„„„³MaybeStrings´³orµµ±present´³seqof´³atom³String„„„µ±absent´³lit€„„„„³ModemPresent´³rec´³lit³modem„´³tupleµ´³lit³hayes„´³named³
|
||||
devicePath´³atom³String„„´³named³ dataspace´³embedded´³refµ„³InternalProtocol„„„„„„³
CommandResult´³rec´³lit³command-result„´³tupleµ´³named³commandText´³atom³String„„´³named³results´³seqof´³refµ„³Result„„„´³named³finalResult´³atom³String„„„„„³InternalProtocol³any³UnsolicitedResultCode´³rec´³lit³unsolicited„´³tupleµ´³named³result´³refµ„³Result„„„„„„³embeddedType€„„µ³network„´³schema·³version‘³definitions·³Route´³rec´³lit³route„´³tupleµ´³named³
addressFamily´³refµ„³
AddressFamily„„´³named³destination´³refµ„³RouteDestination„„´³named³priority´³atom³
SignedInteger„„´³named³
typeOfService´³atom³
SignedInteger„„´³named³
interfaceName´³refµ„³RouteInterface„„´³named³gateway´³refµ„³Gateway„„„„„³Gateway´³orµµ±addr´³atom³String„„µ±none´³lit€„„„„³Hotspot´³rec´³lit³hotspot„´³tupleµ´³named³
interfaceName´³atom³String„„´³named³ssid´³atom³String„„´³named³authentication´³refµ„³WifiAuthentication„„„„„³ Interface´³rec´³lit³ interface„´³tupleµ´³named³name´³atom³String„„´³named³index´³atom³
SignedInteger„„´³named³type´³refµ„³
InterfaceType„„´³named³administrativeState´³refµ„³AdministrativeState„„´³named³operationalState´³refµ„³OperationalState„„´³named³carrier´³refµ„³CarrierState„„´³named³linkAddr´³atom³String„„„„„³CarrierState´³orµµ± noCarrier´³lit³
|
||||
devicePath´³atom³String„„´³named³ dataspace´³embedded´³refµ„³InternalProtocol„„„„„„³
CommandResult´³rec´³lit³command-result„´³tupleµ´³named³commandText´³atom³String„„´³named³results´³seqof´³refµ„³Result„„„´³named³finalResult´³atom³String„„„„„³InternalProtocol³any³UnsolicitedResultCode´³rec´³lit³unsolicited„´³tupleµ´³named³result´³refµ„³Result„„„„„„³embeddedType€„„µ³network„´³schema·³version°³definitions·³Route´³rec´³lit³route„´³tupleµ´³named³
addressFamily´³refµ„³
AddressFamily„„´³named³destination´³refµ„³RouteDestination„„´³named³priority´³atom³
SignedInteger„„´³named³
typeOfService´³atom³
SignedInteger„„´³named³
interfaceName´³refµ„³RouteInterface„„´³named³gateway´³refµ„³Gateway„„„„„³Gateway´³orµµ±addr´³atom³String„„µ±none´³lit€„„„„³Hotspot´³rec´³lit³hotspot„´³tupleµ´³named³
interfaceName´³atom³String„„´³named³ssid´³atom³String„„´³named³authentication´³refµ„³WifiAuthentication„„„„„³ Interface´³rec´³lit³ interface„´³tupleµ´³named³name´³atom³String„„´³named³index´³atom³
SignedInteger„„´³named³type´³refµ„³
InterfaceType„„´³named³administrativeState´³refµ„³AdministrativeState„„´³named³operationalState´³refµ„³OperationalState„„´³named³carrier´³refµ„³CarrierState„„´³named³linkAddr´³atom³String„„„„„³CarrierState´³orµµ± noCarrier´³lit³
|
||||
no-carrier„„µ±carrier´³lit³carrier„„„„³DefaultRoute´³rec´³lit³
default-route„´³tupleµ´³named³
addressFamily´³refµ„³
AddressFamily„„„„„³HotspotState´³rec´³lit³
hotspot-state„´³tupleµ´³named³
interfaceName´³atom³String„„´³named³ssid´³atom³String„„´³named³stationCount´³atom³
SignedInteger„„„„„³
AddressFamily´³orµµ±ipv4´³lit³ipv4„„µ±ipv6´³lit³ipv6„„µ±other´³atom³
SignedInteger„„„„³
InterfaceType´³orµµ±loopback´³lit³loopback„„µ±normal´³lit³normal„„µ±wireless´³lit³wireless„„„„³
MobileDataApn´³rec´³lit³mobile-data-apn„´³tupleµ´³named³apn´³atom³String„„„„„³RouteInterface´³orµµ±name´³atom³String„„µ±none´³lit€„„„„³WifiAssociation´³rec´³lit³wifi-association„´³tupleµ´³named³
interfaceName´³atom³String„„´³named³ssid´³atom³String„„´³named³state´³refµ„³WifiAssociationState„„„„„³OperationalState´³orµµ±unknown´³lit³unknown„„µ±down´³lit³down„„µ±lowerLayerDown´³lit³lower-layer-down„„µ±testing´³lit³testing„„µ±dormant´³lit³dormant„„µ±up´³lit³up„„„„³RouteDestination´³orµµ±default´³lit³default„„µ±prefix´³rec´³lit³prefix„´³tupleµ´³named³net´³atom³String„„´³named³bits´³atom³
SignedInteger„„„„„„„„³SavedWifiNetwork´³rec´³lit³saved-wifi-network„´³tupleµ´³named³ssid´³atom³String„„´³named³authentication´³refµ„³WifiAuthentication„„´³named³priority´³atom³Double„„„„„³MobileDataEnabled´³rec´³lit³mobile-data-enabled„´³tupleµ„„„³WifiAuthentication´³orµµ±open´³lit³open„„µ±psk´³rec´³lit³psk„´³tupleµ´³named³password´³atom³String„„„„„„µ±other³any„„„³AdministrativeState´³orµµ±unknown´³lit³unknown„„µ±down´³lit³down„„µ±up´³lit³up„„„„³SelectedWifiNetwork´³rec´³lit³selected-wifi-network„´³tupleµ´³named³
interfaceName´³atom³String„„´³named³ssid´³atom³String„„´³named³authentication´³refµ„³WifiAuthentication„„„„„³AvailableAccessPoint´³rec´³lit³available-ap„´³tupleµ´³named³
interfaceName´³atom³String„„´³named³ssid´³atom³String„„„„„³WifiAssociationState´³orµµ±
|
||||
inProgress´³lit³in-progress„„µ±ready´³lit³ready„„„„„³embeddedType€„„µ³ telephony„´³schema·³version‘³definitions·³CallId´³atom³
SignedInteger„³Address´³rec´³lit³address„´³tupleµ´³named³
|
||||
inProgress´³lit³in-progress„„µ±ready´³lit³ready„„„„„³embeddedType€„„µ³ telephony„´³schema·³version°³definitions·³CallId´³atom³
SignedInteger„³Address´³rec´³lit³address„´³tupleµ´³named³
|
||||
numberType´³refµ„³
|
||||
NumberType„„´³named³number´³atom³String„„„„„³CallType´³orµµ±voice´³lit³voice„„µ±data´³lit³data„„µ±fax´³lit³fax„„„„³ CallState´³orµµ±hold´³lit³hold„„µ±original´³lit³original„„µ±connect´³lit³connect„„µ±incoming´³lit³incoming„„µ±waiting´³lit³waiting„„µ±end´³lit³end„„µ±alerting´³lit³alerting„„„„³ PlaceCall´³rec´³lit³
|
||||
place-call„´³tupleµ´³named³
|
||||
|
@ -17,9 +17,9 @@ ActiveCall
|
|||
call-state„´³tupleµ´³named³callId´³refµ„³CallId„„´³named³ direction´³refµ„³
CallDirection„„´³named³type´³refµ„³CallType„„´³named³peer´³refµ„³Address„„´³named³state´³refµ„³ CallState„„„„„³
|
||||
AnswerCall´³rec´³lit³answer-call„´³tupleµ´³named³callId´³atom³
SignedInteger„„„„„³
|
||||
NumberType´³orµµ±unknown´³lit³unknown„„µ±
international´³lit³
international„„µ±national´³lit³national„„µ±gsm0338´³lit³gsm0338„„„„³PeerRinging´³rec´³lit³peer-ringing„´³tupleµ„„„³SmsDelivery´³rec´³lit³sms-delivery„´³tupleµ´³named³smsc´³refµ„³Address„„´³named³peer´³refµ„³Address„„´³named³ timestamp´³refµ³time„³Stamp„„´³named³body´³atom³String„„„„„³ModemPresent´³rec´³lit³modem„´³tupleµ´³named³type´³atom³Symbol„„´³named³
|
||||
devicePath´³atom³String„„´³named³ dataspace´³embedded³any„„„„„³PhoneRinging´³rec´³lit³
phone-ringing„´³tupleµ„„„³ReleaseCause´³orµµ±unassignedNumber´³lit³unassignedNumber„„µ±normal´³lit³normal„„µ±busy´³lit³busy„„µ±noUserResponding´³lit³noUserResponding„„µ±callRejected´³lit³callRejected„„µ±destinationOutOfOrder´³lit³destinationOutOfOrder„„µ±normalUnspecified´³lit³normalUnspecified„„µ±incompatibleDestination´³lit³incompatibleDestination„„„„³Speakerphone´³rec´³lit³speakerphone„´³tupleµ„„„³
CallDirection´³orµµ±mo´³lit³mo„„µ±mt´³lit³mt„„„„³CallIdSelector´³orµµ±specificCall´³atom³
SignedInteger„„µ±allCalls´³lit³all„„„„³CallInProgress´³rec´³lit³call-in-progress„´³tupleµ„„„³DisconnectCall´³rec´³lit³disconnect-call„´³tupleµ´³named³callId´³refµ„³CallIdSelector„„´³named³cause´³refµ„³ReleaseCause„„„„„³SmsTransmission´³rec´³lit³sms-transmission„´³tupleµ´³named³smsc´³refµ„³Address„„´³named³peer´³refµ„³Address„„´³named³body´³atom³String„„´³named³continuation´³embedded´³lit³ok„„„„„„„³embeddedType€„„µ³soundEffects„´³schema·³version‘³definitions·³
|
||||
AlertSound´³rec´³lit³alert-sound„´³tupleµ´³named³data´³refµ³mime„³Value„„„„„³ContinuousSound´³rec´³lit³continuous-sound„´³tupleµ´³named³data´³refµ³mime„³Value„„„„„³AlertSoundPlaying´³rec´³lit³alert-sound-playing„´³tupleµ„„„³ContinuousSoundPlaying´³rec´³lit³continuous-sound-playing„´³tupleµ„„„„³embeddedType€„„µ³userSettings„´³schema·³version‘³definitions·³Value´³rec´³lit³user-setting„´³tupleµ´³named³item³any„„„„³Action´³orµµ±assert´³rec´³lit³assert„´³tupleµ´³named³item³any„„„„„µ±retract´³rec´³lit³retract„´³tupleµ´³named³item³any„„„„„„„³
|
||||
CommandRPC´³rec´³lit³user-settings-command„´³tupleµ´³named³action´³refµ„³Action„„´³named³reply´³embedded´³refµ„³CommandReply„„„„„„³CommandEvent´³rec´³lit³user-settings-command„´³tupleµ´³named³action´³refµ„³Action„„„„„³CommandReply´³lit³done„„³embeddedType€„„µ³usersAndGroups„´³schema·³version‘³definitions·³Spec´³orµµ±userAccount´³lit³user„„µ±
systemAccount´³lit³system„„µ±id´³atom³
SignedInteger„„„„³Group´³rec´³lit³grent„´³tupleµ´³dict·³gid´³named³gid´³atom³
SignedInteger„„³name´³named³name´³atom³String„„„„„„„³Account´³rec´³lit³pwent„´³tupleµ´³dict·³gid´³named³gid´³atom³
SignedInteger„„³uid´³named³uid´³atom³
SignedInteger„„³home´³named³home´³atom³String„„³info´³named³info´³atom³String„„³name´³named³name´³atom³String„„³shell´³named³shell´³atom³String„„„„„„„³EnsureGroup´³rec´³lit³ensure-group„´³tupleµ´³named³name´³atom³String„„´³named³spec´³refµ„³Spec„„„„„³GroupMember´³rec´³lit³group-member„´³tupleµ´³named³uid´³atom³
SignedInteger„„´³named³gid´³atom³
SignedInteger„„„„„³
EnsureAccount´³rec´³lit³ensure-account„´³tupleµ´³named³name´³atom³String„„´³named³spec´³refµ„³Spec„„„„„„³embeddedType€„„µ³samsungGalaxyS7„´³schema·³version‘³definitions·³ FmtPacket´³rec´³lit³fmt„´³tupleµ´³named³body´³embedded³any„„„„„³ RfsPacket´³rec´³lit³rfs„´³tupleµ´³named³body´³embedded³any„„„„„³
|
||||
devicePath´³atom³String„„´³named³ dataspace´³embedded³any„„„„„³PhoneRinging´³rec´³lit³
phone-ringing„´³tupleµ„„„³ReleaseCause´³orµµ±unassignedNumber´³lit³unassignedNumber„„µ±normal´³lit³normal„„µ±busy´³lit³busy„„µ±noUserResponding´³lit³noUserResponding„„µ±callRejected´³lit³callRejected„„µ±destinationOutOfOrder´³lit³destinationOutOfOrder„„µ±normalUnspecified´³lit³normalUnspecified„„µ±incompatibleDestination´³lit³incompatibleDestination„„„„³Speakerphone´³rec´³lit³speakerphone„´³tupleµ„„„³
CallDirection´³orµµ±mo´³lit³mo„„µ±mt´³lit³mt„„„„³CallIdSelector´³orµµ±specificCall´³atom³
SignedInteger„„µ±allCalls´³lit³all„„„„³CallInProgress´³rec´³lit³call-in-progress„´³tupleµ„„„³DisconnectCall´³rec´³lit³disconnect-call„´³tupleµ´³named³callId´³refµ„³CallIdSelector„„´³named³cause´³refµ„³ReleaseCause„„„„„³SmsTransmission´³rec´³lit³sms-transmission„´³tupleµ´³named³smsc´³refµ„³Address„„´³named³peer´³refµ„³Address„„´³named³body´³atom³String„„´³named³continuation´³embedded´³lit³ok„„„„„„„³embeddedType€„„µ³soundEffects„´³schema·³version°³definitions·³
|
||||
AlertSound´³rec´³lit³alert-sound„´³tupleµ´³named³data´³refµ³mime„³Value„„„„„³ContinuousSound´³rec´³lit³continuous-sound„´³tupleµ´³named³data´³refµ³mime„³Value„„„„„³AlertSoundPlaying´³rec´³lit³alert-sound-playing„´³tupleµ„„„³ContinuousSoundPlaying´³rec´³lit³continuous-sound-playing„´³tupleµ„„„„³embeddedType€„„µ³userSettings„´³schema·³version°³definitions·³Value´³rec´³lit³user-setting„´³tupleµ´³named³item³any„„„„³Action´³orµµ±assert´³rec´³lit³assert„´³tupleµ´³named³item³any„„„„„µ±retract´³rec´³lit³retract„´³tupleµ´³named³item³any„„„„„„„³
|
||||
CommandRPC´³rec´³lit³user-settings-command„´³tupleµ´³named³action´³refµ„³Action„„´³named³reply´³embedded´³refµ„³CommandReply„„„„„„³CommandEvent´³rec´³lit³user-settings-command„´³tupleµ´³named³action´³refµ„³Action„„„„„³CommandReply´³lit³done„„³embeddedType€„„µ³usersAndGroups„´³schema·³version°³definitions·³Spec´³orµµ±userAccount´³lit³user„„µ±
systemAccount´³lit³system„„µ±id´³atom³
SignedInteger„„„„³Group´³rec´³lit³grent„´³tupleµ´³dict·³gid´³named³gid´³atom³
SignedInteger„„³name´³named³name´³atom³String„„„„„„„³Account´³rec´³lit³pwent„´³tupleµ´³dict·³gid´³named³gid´³atom³
SignedInteger„„³uid´³named³uid´³atom³
SignedInteger„„³home´³named³home´³atom³String„„³info´³named³info´³atom³String„„³name´³named³name´³atom³String„„³shell´³named³shell´³atom³String„„„„„„„³EnsureGroup´³rec´³lit³ensure-group„´³tupleµ´³named³name´³atom³String„„´³named³spec´³refµ„³Spec„„„„„³GroupMember´³rec´³lit³group-member„´³tupleµ´³named³uid´³atom³
SignedInteger„„´³named³gid´³atom³
SignedInteger„„„„„³
EnsureAccount´³rec´³lit³ensure-account„´³tupleµ´³named³name´³atom³String„„´³named³spec´³refµ„³Spec„„„„„„³embeddedType€„„µ³samsungGalaxyS7„´³schema·³version°³definitions·³ FmtPacket´³rec´³lit³fmt„´³tupleµ´³named³body´³embedded³any„„„„„³ RfsPacket´³rec´³lit³rfs„´³tupleµ´³named³body´³embedded³any„„„„„³
|
||||
CommandRPC´³rec´³lit³execute-command„´³tupleµ´³named³command´³refµ„³ FmtPacket„„´³named³replyTo´³embedded´³refµ„³ FmtPacket„„„„„„³ModemPacket´³orµµ±in´³rec´³lit³
|
||||
from-modem„´³tupleµ´³named³packet³any„„„„„µ±out´³rec´³lit³to-modem„´³tupleµ´³named³packet³any„„„„„„„³CommandEvent´³rec´³lit³execute-command„´³tupleµ´³named³command´³refµ„³ FmtPacket„„„„„³ModemPresent´³rec´³lit³modem„´³tupleµ´³lit³samsung-galaxy-s7„´³named³
|
||||
devicePath´³atom³String„„´³named³ dataspace´³embedded´³refµ„³InternalProtocol„„„„„„³InternalProtocol³any„³embeddedType€„„„„
|
|
@ -1,19 +1,19 @@
|
|||
version 1 .
|
||||
|
||||
; If headset present:
|
||||
; - ringing: speaker & headset
|
||||
; - notification: speaker & headset
|
||||
; - non-speakerphone call: headset
|
||||
; - speakerphone call: speaker
|
||||
; - music: headset
|
||||
;
|
||||
; If headset absent:
|
||||
; - ringing: speaker
|
||||
; - notification: speaker
|
||||
; - non-speakerphone call: earpiece
|
||||
; - speakerphone call: speaker
|
||||
; - music: speaker
|
||||
;
|
||||
# If headset present:
|
||||
# - ringing: speaker & headset
|
||||
# - notification: speaker & headset
|
||||
# - non-speakerphone call: headset
|
||||
# - speakerphone call: speaker
|
||||
# - music: headset
|
||||
#
|
||||
# If headset absent:
|
||||
# - ringing: speaker
|
||||
# - notification: speaker
|
||||
# - non-speakerphone call: earpiece
|
||||
# - speakerphone call: speaker
|
||||
# - music: speaker
|
||||
#
|
||||
.
|
||||
|
||||
Mapping = <alsa-mapping @abstract Endpoint @concrete string> .
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
version 1 .
|
||||
; Definitions for the internal workings of the Hayes modem driver.
|
||||
# Definitions for the internal workings of the Hayes modem driver.
|
||||
|
||||
; Assertion. Declares presence of a Hayes modem.
|
||||
ModemPresent = <modem =hayes @devicePath string @dataspace #!InternalProtocol> .
|
||||
# Assertion. Declares presence of a Hayes modem.
|
||||
ModemPresent = <modem =hayes @devicePath string @dataspace #:InternalProtocol> .
|
||||
|
||||
; TODO not yet properly specified
|
||||
# TODO not yet properly specified
|
||||
InternalProtocol = any .
|
||||
|
||||
; Message. Sent when the modem sends us a "URC", an Unsolicited Result Code.
|
||||
# Message. Sent when the modem sends us a "URC", an Unsolicited Result Code.
|
||||
UnsolicitedResultCode = <unsolicited @result Result> .
|
||||
|
||||
; Assertion. Asks the modem to execute the given command.
|
||||
CommandRPC = <execute-command @commandText string @replyTo #!CommandResult> .
|
||||
; Message. Asks the modem to execute the given command, but not to send back the reply.
|
||||
# Assertion. Asks the modem to execute the given command.
|
||||
CommandRPC = <execute-command @commandText string @replyTo #:CommandResult> .
|
||||
# Message. Asks the modem to execute the given command, but not to send back the reply.
|
||||
CommandEvent = <execute-command @commandText string> .
|
||||
|
||||
; Assertion. Describes the result of a command execution.
|
||||
# Assertion. Describes the result of a command execution.
|
||||
CommandResult = <command-result @commandText string @results [Result ...] @finalResult string> .
|
||||
|
||||
@<examples [
|
||||
|
|
|
@ -9,15 +9,15 @@ Interface = <interface
|
|||
@carrier CarrierState
|
||||
@linkAddr string> .
|
||||
|
||||
; This is synthetic information, based on somewhat ad-hoc heuristics. It'd be nice if there was
|
||||
; a better way to do this! Maybe someone can point me in the right direction!
|
||||
;
|
||||
# This is synthetic information, based on somewhat ad-hoc heuristics. It'd be nice if there was
|
||||
# a better way to do this! Maybe someone can point me in the right direction!
|
||||
#
|
||||
InterfaceType =
|
||||
/ ; `lo` and friends
|
||||
/ # `lo` and friends
|
||||
=loopback
|
||||
/ ; `eth0`, bridges, anything that isn't loopback and isn't wireless
|
||||
/ # `eth0`, bridges, anything that isn't loopback and isn't wireless
|
||||
=normal
|
||||
/ ; 'wlan0' and friends
|
||||
/ # 'wlan0' and friends
|
||||
=wireless
|
||||
.
|
||||
|
||||
|
@ -78,8 +78,8 @@ WifiAssociationState = @inProgress =in-progress / =ready .
|
|||
|
||||
HotspotState = <hotspot-state @interfaceName string @ssid string @stationCount int> .
|
||||
|
||||
;---------------------------------------------------------------------------
|
||||
; User settings
|
||||
# ---------------------------------------------------------------------------
|
||||
# User settings
|
||||
|
||||
MobileDataApn = <mobile-data-apn @apn string> .
|
||||
|
||||
|
@ -90,11 +90,11 @@ SavedWifiNetwork = <saved-wifi-network
|
|||
@authentication WifiAuthentication
|
||||
@priority double> .
|
||||
WifiAuthentication =
|
||||
/ ; No authentication necessary: open network
|
||||
/ # No authentication necessary: open network
|
||||
=open
|
||||
/ ; Pre-shared key (WPA2-PSK etc)
|
||||
/ # Pre-shared key (WPA2-PSK etc)
|
||||
<psk @password string>
|
||||
/ ; Other, not-yet-implemented
|
||||
/ # Other, not-yet-implemented
|
||||
@other any
|
||||
.
|
||||
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
version 1 .
|
||||
; Definitions for the internal workings of the Samsung Galaxy S7 modem driver.
|
||||
# Definitions for the internal workings of the Samsung Galaxy S7 modem driver.
|
||||
|
||||
; Assertion. Declares presence of a Hayes modem.
|
||||
ModemPresent = <modem =samsung-galaxy-s7 @devicePath string @dataspace #!InternalProtocol> .
|
||||
# Assertion. Declares presence of a Hayes modem.
|
||||
ModemPresent = <modem =samsung-galaxy-s7 @devicePath string @dataspace #:InternalProtocol> .
|
||||
|
||||
; TODO not yet properly specified
|
||||
# TODO not yet properly specified
|
||||
InternalProtocol = any .
|
||||
|
||||
ModemPacket = @in <from-modem @packet any> / @out <to-modem @packet any> .
|
||||
|
||||
; The bodies are instances of SamsungFmtMessage and SamsungRfsMessage, respectively.
|
||||
FmtPacket = <fmt @body #!any> .
|
||||
RfsPacket = <rfs @body #!any> .
|
||||
# The bodies are instances of SamsungFmtMessage and SamsungRfsMessage, respectively.
|
||||
FmtPacket = <fmt @body #:any> .
|
||||
RfsPacket = <rfs @body #:any> .
|
||||
|
||||
; Assertion. Asks the modem to execute the given command.
|
||||
CommandRPC = <execute-command @command FmtPacket @replyTo #!FmtPacket> .
|
||||
; Message. Asks the modem to execute the given command, but not to send back the reply.
|
||||
# Assertion. Asks the modem to execute the given command.
|
||||
CommandRPC = <execute-command @command FmtPacket @replyTo #:FmtPacket> .
|
||||
# Message. Asks the modem to execute the given command, but not to send back the reply.
|
||||
CommandEvent = <execute-command @command FmtPacket> .
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
version 1 .
|
||||
|
||||
; Assertion.
|
||||
# Assertion.
|
||||
ContinuousSound = <continuous-sound @data mime.Value> .
|
||||
; Assertion.
|
||||
# Assertion.
|
||||
ContinuousSoundPlaying = <continuous-sound-playing> .
|
||||
|
||||
; Message.
|
||||
# Message.
|
||||
AlertSound = <alert-sound @data mime.Value> .
|
||||
; Assertion.
|
||||
# Assertion.
|
||||
AlertSoundPlaying = <alert-sound-playing> .
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
version 1 .
|
||||
; Definitions for non-modem-hardware-specific telephony interactions.
|
||||
# Definitions for non-modem-hardware-specific telephony interactions.
|
||||
|
||||
ModemPresent = <modem @type symbol @devicePath string @dataspace #!any> .
|
||||
ModemPresent = <modem @type symbol @devicePath string @dataspace #:any> .
|
||||
|
||||
Address = <address @numberType NumberType @number string> .
|
||||
NumberType = =unknown / =international / =national / =gsm0338 .
|
||||
|
||||
; Assertion. Describes an ongoing call.
|
||||
# Assertion. Describes an ongoing call.
|
||||
ActiveCall = <call-state @callId CallId @direction CallDirection @type CallType @peer Address @state CallState> .
|
||||
CallId = int .
|
||||
CallDirection = =mo / =mt .
|
||||
CallType = =voice / =data / =fax .
|
||||
CallState = =hold / =original / =connect / =incoming / =waiting / =end / =alerting .
|
||||
|
||||
; Message. Triggers call answering.
|
||||
# Message. Triggers call answering.
|
||||
AnswerCall = <answer-call @callId int> .
|
||||
|
||||
; Message. Triggers call rejection or disconnection.
|
||||
# Message. Triggers call rejection or disconnection.
|
||||
DisconnectCall = <disconnect-call @callId CallIdSelector @cause ReleaseCause> .
|
||||
CallIdSelector = @specificCall int / @allCalls =all .
|
||||
ReleaseCause =
|
||||
|
@ -30,23 +30,23 @@ ReleaseCause =
|
|||
/ =incompatibleDestination
|
||||
.
|
||||
|
||||
; Message. Starts an outgoing call.
|
||||
# Message. Starts an outgoing call.
|
||||
PlaceCall = <place-call @devicePath string @peer Address> .
|
||||
|
||||
; Assertion. Some call is active - be it alerting, connected, ringing, etc.
|
||||
# Assertion. Some call is active - be it alerting, connected, ringing, etc.
|
||||
CallInProgress = <call-in-progress> .
|
||||
|
||||
; Assertion. An incoming call is signalling the user, asking for a decision about answer/reject/ignore.
|
||||
# Assertion. An incoming call is signalling the user, asking for a decision about answer/reject/ignore.
|
||||
PhoneRinging = <phone-ringing> .
|
||||
|
||||
; Assertion. A remote party's phone should be ringing.
|
||||
# Assertion. A remote party's phone should be ringing.
|
||||
PeerRinging = <peer-ringing> .
|
||||
|
||||
; Message. An incoming SMS has been received.
|
||||
# Message. An incoming SMS has been received.
|
||||
SmsDelivery = <sms-delivery @smsc Address @peer Address @timestamp time.Stamp @body string> .
|
||||
|
||||
; Assertion. An outgoing SMS should be transmitted.
|
||||
SmsTransmission = <sms-transmission @smsc Address @peer Address @body string @continuation #!=ok > .
|
||||
# Assertion. An outgoing SMS should be transmitted.
|
||||
SmsTransmission = <sms-transmission @smsc Address @peer Address @body string @continuation #:=ok > .
|
||||
|
||||
; Assertion. Enable speakerphone mode, if available.
|
||||
# Assertion. Enable speakerphone mode, if available.
|
||||
Speakerphone = <speakerphone> .
|
||||
|
|
|
@ -1,33 +1,33 @@
|
|||
version 1 .
|
||||
|
||||
; Assertion. Creates a space for Widget/Parent/Attribute assertions etc.
|
||||
Window = <window @id WidgetId @space #!any> .
|
||||
# Assertion. Creates a space for Widget/Parent/Attribute assertions etc.
|
||||
Window = <window @id WidgetId @space #:any> .
|
||||
|
||||
; Assertions, within the space created as part of a Window assertion.
|
||||
# Assertions, within the space created as part of a Window assertion.
|
||||
Widget = <widget @id WidgetId @type WidgetType> .
|
||||
Parent = <parent @id WidgetId @parentId WidgetId @order SortKey> .
|
||||
Root = <root @id WidgetId @order SortKey> .
|
||||
Attribute = <attribute @id WidgetId @key symbol @value any> .
|
||||
|
||||
; Assertion
|
||||
WidgetInstance = <widget-instance @id WidgetId @instance #!any> .
|
||||
# Assertion
|
||||
WidgetInstance = <widget-instance @id WidgetId @instance #:any> .
|
||||
|
||||
; Assertion
|
||||
# Assertion
|
||||
Touch = <touch @widget WidgetId @touchId any> .
|
||||
|
||||
; Message
|
||||
# Message
|
||||
Click = <click @widget WidgetId> .
|
||||
|
||||
; Assertion
|
||||
# Assertion
|
||||
State = <state @widget WidgetId @key any @value any> .
|
||||
|
||||
; Assertion. Marks the window as closeable.
|
||||
# Assertion. Marks the window as closeable.
|
||||
WindowCloseable = <window-closeable> .
|
||||
|
||||
; Assertion.
|
||||
# Assertion.
|
||||
WindowTitle = <window-title @title string> .
|
||||
|
||||
; Data types
|
||||
# Data types
|
||||
|
||||
WidgetId = any .
|
||||
SortKey = @double double / @string string .
|
||||
|
@ -49,12 +49,12 @@ LeafType =
|
|||
|
||||
Color = <rgba @red double @green double @blue double @alpha double> .
|
||||
|
||||
; Box-and-glue layout
|
||||
# Box-and-glue layout
|
||||
Fill = @fixed double / <fill @weight int @rank int> .
|
||||
Sizing = <sizing @ideal double @stretch Fill @shrink Fill> .
|
||||
BoxSize = <box-size @horizontal Sizing @vertical Sizing> .
|
||||
|
||||
; Scrollable panels
|
||||
# Scrollable panels
|
||||
VisibleScrollRange =
|
||||
/ =none
|
||||
/ @visibleScrollRange <visible-scroll-range
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
version 1 .
|
||||
|
||||
; Assertion.
|
||||
CommandRPC = <user-settings-command @action Action @reply #!CommandReply> .
|
||||
; Message.
|
||||
# Assertion.
|
||||
CommandRPC = <user-settings-command @action Action @reply #:CommandReply> .
|
||||
# Message.
|
||||
CommandEvent = <user-settings-command @action Action> .
|
||||
|
||||
CommandReply = =done .
|
||||
Action = <assert @item any> / <retract @item any> .
|
||||
|
||||
; Assertion.
|
||||
# Assertion.
|
||||
Value = <user-setting @item any> .
|
||||
|
|
|
@ -29,7 +29,8 @@ fi
|
|||
echo
|
||||
|
||||
cp synit-apk-key.pub /etc/apk/keys/.
|
||||
. /etc/deviceinfo
|
||||
[ -f /usr/share/deviceinfo/deviceinfo ] && . /usr/share/deviceinfo/deviceinfo
|
||||
[ -f /etc/deviceinfo ] && . /etc/deviceinfo
|
||||
ls packages/$deviceinfo_arch/
|
||||
|
||||
echo "Will use http_proxy=${http_proxy}"
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "synit-pid1"
|
||||
version = "0.0.1"
|
||||
version = "0.0.4"
|
||||
authors = ["Tony Garnock-Jones <tonyg@leastfixedpoint.com>"]
|
||||
edition = "2018"
|
||||
|
||||
|
@ -23,12 +23,10 @@ strip = true
|
|||
# syndicate-macros = { path = "localdev/syndicate-rs/syndicate-macros" }
|
||||
|
||||
[dependencies]
|
||||
syndicate = "0.23"
|
||||
syndicate-macros = "0.18"
|
||||
syndicate = "0.34"
|
||||
syndicate-macros = "0.27"
|
||||
|
||||
clap = "=3.0.0-beta.2"
|
||||
clap_generate = "=3.0.0-beta.2"
|
||||
clap_derive = "=3.0.0-beta.2"
|
||||
nix = "^0.22"
|
||||
tokio = { version = "1.10.0", features = ["process", "signal"] }
|
||||
tracing = "0.1.14"
|
||||
clap = { version = "4.5", features = ["derive"] }
|
||||
nix = { version = "0.28", features = ["reboot", "signal", "fs"] }
|
||||
tokio = { version = "1.36", features = ["process", "signal"] }
|
||||
tracing = "0.1.40"
|
||||
|
|
|
@ -4,18 +4,14 @@ all:
|
|||
x86_64-binary: x86_64-binary-release
|
||||
|
||||
x86_64-binary-release:
|
||||
cross build --target=x86_64-unknown-linux-musl --release --all-targets
|
||||
CARGO_TARGET_DIR=target/target.x86_64 cross build --target=x86_64-unknown-linux-musl --release --all-targets
|
||||
|
||||
armv7-binary: armv7-binary-release
|
||||
|
||||
armv7-binary-release:
|
||||
cross build --target=armv7-unknown-linux-musleabihf --release --all-targets
|
||||
|
||||
# Hack to workaround https://github.com/rust-embedded/cross/issues/598
|
||||
HACK_WORKAROUND_ISSUE_598=CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="-C link-arg=/usr/local/aarch64-linux-musl/lib/libc.a"
|
||||
CARGO_TARGET_DIR=target/target.armv7 cross build --target=armv7-unknown-linux-musleabihf --release --all-targets
|
||||
|
||||
aarch64-binary: aarch64-binary-release
|
||||
|
||||
aarch64-binary-release:
|
||||
$(HACK_WORKAROUND_ISSUE_598) \
|
||||
cross build --target=aarch64-unknown-linux-musl --release --all-targets
|
||||
CARGO_TARGET_DIR=target/target.aarch64 cross build --target=aarch64-unknown-linux-musl --release --all-targets
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
use clap::Clap;
|
||||
use clap::Parser;
|
||||
|
||||
use nix::sys::signal::{killpg, Signal};
|
||||
use nix::sys::reboot::{reboot, RebootMode};
|
||||
use nix::sys::signal::{kill, Signal, SigHandler};
|
||||
use nix::sys::wait;
|
||||
use nix::unistd;
|
||||
|
||||
use std::convert::TryInto;
|
||||
use std::io::Write;
|
||||
use std::sync::Arc;
|
||||
|
||||
use syndicate::actor::*;
|
||||
|
@ -17,13 +19,13 @@ use tokio::process;
|
|||
use tokio::select;
|
||||
use tokio::signal::unix::{signal, SignalKind};
|
||||
|
||||
#[derive(Clap, Clone, Debug)]
|
||||
#[clap(version)]
|
||||
#[derive(Parser, Clone, Debug)]
|
||||
#[command(version)]
|
||||
pub struct CommandLine {
|
||||
#[clap(long, default_value="/usr/bin/syndicate-server")]
|
||||
#[arg(long, default_value="/usr/bin/syndicate-server")]
|
||||
server_path: String,
|
||||
|
||||
#[clap(long, default_value="/sbin/synit-log")]
|
||||
#[arg(long, default_value="/sbin/synit-log")]
|
||||
log: String,
|
||||
}
|
||||
|
||||
|
@ -42,13 +44,24 @@ impl Pid1Listener {
|
|||
impl Entity<AnyValue> for Pid1Listener {
|
||||
}
|
||||
|
||||
async fn handle_sigchld_and_waitpid() -> Result<(), Box<dyn std::error::Error>> {
|
||||
fn ignore_signal(kind: SignalKind) -> ActorResult {
|
||||
let sig: Signal = kind.as_raw_value().try_into()?;
|
||||
unsafe { nix::sys::signal::signal(sig, SigHandler::SigIgn) }?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn handle_sigchld_and_waitpid() -> Result<RebootMode, ActorError> {
|
||||
// For now, we use Alpine's userland reboot, poweroff and halt tools.
|
||||
// These send SIGTERM, SIGUSR2 and SIGUSR1, respectively.
|
||||
|
||||
let mut sigchlds = signal(SignalKind::child())?;
|
||||
let mut sigints = signal(SignalKind::interrupt())?;
|
||||
let mut sigterms = signal(SignalKind::terminate())?;
|
||||
let mut sigusr2s = signal(SignalKind::user_defined2())?;
|
||||
let mut sigusr1s = signal(SignalKind::user_defined1())?;
|
||||
|
||||
tracing::info!("Awaiting signals...");
|
||||
loop {
|
||||
let next_step = loop {
|
||||
select! {
|
||||
_ = sigchlds.recv() => {
|
||||
loop {
|
||||
|
@ -70,26 +83,49 @@ async fn handle_sigchld_and_waitpid() -> Result<(), Box<dyn std::error::Error>>
|
|||
}
|
||||
_ = sigints.recv() => {
|
||||
tracing::debug!("Received SIGINT");
|
||||
let result = killpg(unistd::getpgrp(), Some(Signal::SIGINT));
|
||||
tracing::debug!("killpg result: {:?}", result);
|
||||
break;
|
||||
break RebootMode::RB_AUTOBOOT;
|
||||
}
|
||||
_ = sigterms.recv() => {
|
||||
tracing::debug!("Received SIGTERM");
|
||||
let result = killpg(unistd::getpgrp(), Some(Signal::SIGTERM));
|
||||
tracing::debug!("killpg result: {:?}", result);
|
||||
break;
|
||||
break RebootMode::RB_AUTOBOOT;
|
||||
}
|
||||
_ = sigusr2s.recv() => {
|
||||
tracing::debug!("Received SIGUSR2");
|
||||
break RebootMode::RB_POWER_OFF;
|
||||
}
|
||||
_ = sigusr1s.recv() => {
|
||||
tracing::debug!("Received SIGUSR1");
|
||||
break RebootMode::RB_HALT_SYSTEM;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Ok(())
|
||||
ignore_signal(SignalKind::interrupt())?;
|
||||
ignore_signal(SignalKind::terminate())?;
|
||||
ignore_signal(SignalKind::user_defined2())?;
|
||||
ignore_signal(SignalKind::user_defined1())?;
|
||||
|
||||
tracing::info!("Terminating, {:?}", next_step);
|
||||
|
||||
std::io::stdout().flush()?;
|
||||
std::io::stderr().flush()?;
|
||||
nix::unistd::sync();
|
||||
std::thread::sleep(std::time::Duration::from_millis(100));
|
||||
|
||||
nix::unistd::sync();
|
||||
let _ = kill(unistd::Pid::from_raw(-1), Some(Signal::SIGINT));
|
||||
// ^ ignore result! We're about to reboot anyway
|
||||
|
||||
nix::unistd::sync();
|
||||
Ok(next_step)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
async fn main() -> ActorResult {
|
||||
syndicate::convenient_logging()?;
|
||||
|
||||
tracing::info!("Startup with PID {}", unistd::getpid());
|
||||
|
||||
match unistd::setsid() {
|
||||
Ok(_pid) => tracing::info!("setsid(2): new session is {}", _pid),
|
||||
Err(e) => tracing::info!("setsid(2) failed: {:?}", &e),
|
||||
|
@ -141,7 +177,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||
Ok(())
|
||||
});
|
||||
|
||||
handle_sigchld_and_waitpid().await?;
|
||||
reboot(handle_sigchld_and_waitpid().await?)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue