fixes apt-update issue 100 where Suites changed, kills update sound t… (#422)

* fixes apt-update issue 100 where Suites changed, kills update sound thread, sets updating to false if synchronization fails

* cleans up code

* appmgr changes

* ui changes

* updates required appmgr in agent

* actually upgrade current version in appmgr
This commit is contained in:
Keagan McClelland
2021-08-23 14:30:08 -06:00
committed by GitHub
parent 18a069e6fd
commit 183f91859a
15 changed files with 65 additions and 30 deletions

View File

@@ -5,7 +5,7 @@ cabal-version: 1.12
-- see: https://github.com/sol/hpack -- see: https://github.com/sol/hpack
name: ambassador-agent name: ambassador-agent
version: 0.2.14 version: 0.2.16
build-type: Simple build-type: Simple
extra-source-files: extra-source-files:
./migrations/0.1.0::0.1.0 ./migrations/0.1.0::0.1.0
@@ -20,6 +20,8 @@ extra-source-files:
./migrations/0.2.11::0.2.12 ./migrations/0.2.11::0.2.12
./migrations/0.2.12::0.2.13 ./migrations/0.2.12::0.2.13
./migrations/0.2.13::0.2.14 ./migrations/0.2.13::0.2.14
./migrations/0.2.14::0.2.15
./migrations/0.2.15::0.2.16
./migrations/0.2.1::0.2.2 ./migrations/0.2.1::0.2.2
./migrations/0.2.2::0.2.3 ./migrations/0.2.2::0.2.3
./migrations/0.2.3::0.2.4 ./migrations/0.2.3::0.2.4

View File

@@ -33,5 +33,5 @@ database:
database: "start9_agent.sqlite3" database: "start9_agent.sqlite3"
poolsize: "_env:YESOD_SQLITE_POOLSIZE:10" poolsize: "_env:YESOD_SQLITE_POOLSIZE:10"
app-mgr-version-spec: "=0.2.15" app-mgr-version-spec: "=0.2.16"
#analytics: UA-YOURCODE #analytics: UA-YOURCODE

View File

@@ -0,0 +1 @@
SELECT TRUE;

View File

@@ -1,5 +1,5 @@
name: ambassador-agent name: ambassador-agent
version: 0.2.15 version: 0.2.16
default-extensions: default-extensions:
- NoImplicitPrelude - NoImplicitPrelude

View File

@@ -5,7 +5,9 @@
{-# LANGUAGE TupleSections #-} {-# LANGUAGE TupleSections #-}
module Lib.SelfUpdate where module Lib.SelfUpdate where
import Startlude hiding ( runReader ) import Startlude hiding ( handle
, runReader
)
import Control.Carrier.Error.Either import Control.Carrier.Error.Either
import Control.Lens import Control.Lens
@@ -29,6 +31,7 @@ import Lib.SystemPaths
import Lib.Types.Emver import Lib.Types.Emver
import Lib.WebServer import Lib.WebServer
import Settings import Settings
import UnliftIO.Exception ( handle )
youngAgentPort :: Word16 youngAgentPort :: Word16
youngAgentPort = 5960 youngAgentPort = 5960
@@ -191,18 +194,21 @@ runSyncOps syncOps = do
pure res pure res
synchronizeSystemState :: AgentCtx -> Version -> IO () synchronizeSystemState :: AgentCtx -> Version -> IO ()
synchronizeSystemState ctx _version = handle @SomeException cleanup $ flip runReaderT ctx $ do synchronizeSystemState ctx _version = handle @_ @SomeException cleanup $ flip runReaderT ctx $ do
(restartsAndRuns, mTid) <- case synchronizer of (restartsAndRuns, mTid) <- case synchronizer of
Synchronizer { synchronizerOperations } -> flip runStateT Nothing $ for synchronizerOperations $ \syncOp -> do Synchronizer { synchronizerOperations } -> flip runStateT Nothing $ for synchronizerOperations $ \syncOp -> do
shouldRun <- lift $ syncOpShouldRun syncOp shouldRun <- lift $ syncOpShouldRun syncOp
putStrLn @Text [i|Sync Op "#{syncOpName syncOp}" should run: #{shouldRun}|] putStrLn @Text [i|Sync Op "#{syncOpName syncOp}" should run: #{shouldRun}|]
when shouldRun $ do when shouldRun $ do
whenM (isNothing <$> get) $ do tid <- get >>= \case
tid <- liftIO . forkIO . forever $ playSong 300 updateInProgress *> threadDelay 20_000_000 Nothing -> do
put (Just tid) tid <- liftIO . forkIO . forever $ playSong 300 updateInProgress *> threadDelay 20_000_000
put (Just tid)
pure tid
Just tid -> pure tid
putStrLn @Text [i|Running Sync Op: #{syncOpName syncOp}|] putStrLn @Text [i|Running Sync Op: #{syncOpName syncOp}|]
setUpdate True setUpdate True
lift $ syncOpRun syncOp lift $ handle @_ @SomeException (\e -> lift $ killThread tid *> cleanup e) $ syncOpRun syncOp
pure $ (syncOpRequiresReboot syncOp, shouldRun) pure $ (syncOpRequiresReboot syncOp, shouldRun)
case mTid of case mTid of
Nothing -> pure () Nothing -> pure ()
@@ -222,5 +228,6 @@ synchronizeSystemState ctx _version = handle @SomeException cleanup $ flip runRe
void $ try @SomeException Sound.stop void $ try @SomeException Sound.stop
void $ try @SomeException Sound.unexport void $ try @SomeException Sound.unexport
let e' = InternalE $ show e let e' = InternalE $ show e
setUpdate False
flip runReaderT ctx $ cantFail $ failUpdate e' flip runReaderT ctx $ cantFail $ failUpdate e'

View File

@@ -102,12 +102,12 @@ parseKernelVersion = do
pure $ KernelVersion (Version (major', minor', patch', 0)) arch pure $ KernelVersion (Version (major', minor', patch', 0)) arch
synchronizer :: Synchronizer synchronizer :: Synchronizer
synchronizer = sync_0_2_15 synchronizer = sync_0_2_16
{-# INLINE synchronizer #-} {-# INLINE synchronizer #-}
sync_0_2_15 :: Synchronizer sync_0_2_16 :: Synchronizer
sync_0_2_15 = Synchronizer sync_0_2_16 = Synchronizer
"0.2.15" "0.2.16"
[ syncCreateAgentTmp [ syncCreateAgentTmp
, syncCreateSshDir , syncCreateSshDir
, syncRemoveAvahiSystemdDependency , syncRemoveAvahiSystemdDependency
@@ -180,7 +180,7 @@ syncFullUpgrade = SyncOp "Full Upgrade" check migrate True
Just (Done _ (KernelVersion (Version av) _)) -> if av < (4, 19, 118, 0) then pure True else pure False Just (Done _ (KernelVersion (Version av) _)) -> if av < (4, 19, 118, 0) then pure True else pure False
_ -> pure False _ -> pure False
migrate = liftIO . run $ do migrate = liftIO . run $ do
shell "apt-get update" shell "apt-get update --allow-releaseinfo-change"
shell "apt-get full-upgrade -y" shell "apt-get full-upgrade -y"
sync32BitKernel :: SyncOp sync32BitKernel :: SyncOp
@@ -205,7 +205,7 @@ syncInstallNginx = SyncOp "Install Nginx" check migrate False
where where
check = liftIO . run $ fmap isNothing (shell [i|which nginx || true|] $| conduit await) check = liftIO . run $ fmap isNothing (shell [i|which nginx || true|] $| conduit await)
migrate = liftIO . run $ do migrate = liftIO . run $ do
shell "apt-get update" shell "apt-get update --allow-releaseinfo-change"
shell "apt-get install nginx -y" shell "apt-get install nginx -y"
syncInstallEject :: SyncOp syncInstallEject :: SyncOp
@@ -213,7 +213,7 @@ syncInstallEject = SyncOp "Install Eject" check migrate False
where where
check = liftIO . run $ fmap isNothing (shell [i|which eject || true|] $| conduit await) check = liftIO . run $ fmap isNothing (shell [i|which eject || true|] $| conduit await)
migrate = liftIO . run $ do migrate = liftIO . run $ do
shell "apt-get update" shell "apt-get update --allow-releaseinfo-change"
shell "apt-get install eject -y" shell "apt-get install eject -y"
syncInstallDuplicity :: SyncOp syncInstallDuplicity :: SyncOp
@@ -221,7 +221,7 @@ syncInstallDuplicity = SyncOp "Install duplicity" check migrate False
where where
check = liftIO . run $ fmap isNothing (shell [i|which duplicity || true|] $| conduit await) check = liftIO . run $ fmap isNothing (shell [i|which duplicity || true|] $| conduit await)
migrate = liftIO . run $ do migrate = liftIO . run $ do
shell "apt-get update" shell "apt-get update --allow-releaseinfo-change"
shell "apt-get install -y duplicity" shell "apt-get install -y duplicity"
syncInstallExfatFuse :: SyncOp syncInstallExfatFuse :: SyncOp
@@ -234,7 +234,7 @@ syncInstallExfatFuse = SyncOp "Install exfat-fuse" check migrate False
ProcessException _ (ExitFailure 1) -> pure True ProcessException _ (ExitFailure 1) -> pure True
_ -> throwIO e _ -> throwIO e
migrate = liftIO . run $ do migrate = liftIO . run $ do
shell "apt-get update" shell "apt-get update --allow-releaseinfo-change"
shell "apt-get install -y exfat-fuse" shell "apt-get install -y exfat-fuse"
syncInstallExfatUtils :: SyncOp syncInstallExfatUtils :: SyncOp
@@ -247,7 +247,7 @@ syncInstallExfatUtils = SyncOp "Install exfat-utils" check migrate False
ProcessException _ (ExitFailure 1) -> pure True ProcessException _ (ExitFailure 1) -> pure True
_ -> throwIO e _ -> throwIO e
migrate = liftIO . run $ do migrate = liftIO . run $ do
shell "apt-get update" shell "apt-get update --allow-releaseinfo-change"
shell "apt-get install -y exfat-utils" shell "apt-get install -y exfat-utils"
syncInstallLibAvahi :: SyncOp syncInstallLibAvahi :: SyncOp
@@ -260,7 +260,7 @@ syncInstallLibAvahi = SyncOp "Install libavahi-client" check migrate False
ProcessException _ (ExitFailure 1) -> pure True ProcessException _ (ExitFailure 1) -> pure True
_ -> throwIO e _ -> throwIO e
migrate = liftIO . run $ do migrate = liftIO . run $ do
shell "apt-get update" shell "apt-get update --allow-releaseinfo-change"
shell "apt-get install -y libavahi-client3" shell "apt-get install -y libavahi-client3"
syncWriteConf :: Text -> ByteString -> SystemPath -> SyncOp syncWriteConf :: Text -> ByteString -> SystemPath -> SyncOp
@@ -598,7 +598,7 @@ syncUpgradeTor = SyncOp "Install Latest Tor" check migrate False
Just x -> x Just x -> x
pure $ compareTorVersions torVersion "0.3.5.15-1" == LT pure $ compareTorVersions torVersion "0.3.5.15-1" == LT
migrate = liftIO . run $ do migrate = liftIO . run $ do
shell "apt-get update" shell "apt-get update --allow-releaseinfo-change"
availVersions <- availVersions <-
(shell "apt-cache madison tor" $| shell "cut -d '|' -f2" $| shell "xargs" $| conduit consume) (shell "apt-cache madison tor" $| shell "cut -d '|' -f2" $| shell "xargs" $| conduit consume)
latest <- case lastMay $ sortBy compareTorVersions availVersions of latest <- case lastMay $ sortBy compareTorVersions availVersions of

2
appmgr/Cargo.lock generated
View File

@@ -43,7 +43,7 @@ checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1"
[[package]] [[package]]
name = "appmgr" name = "appmgr"
version = "0.2.15" version = "0.2.16"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"avahi-sys", "avahi-sys",

View File

@@ -2,7 +2,7 @@
authors = ["Aiden McClelland <me@drbonez.dev>"] authors = ["Aiden McClelland <me@drbonez.dev>"]
edition = "2018" edition = "2018"
name = "appmgr" name = "appmgr"
version = "0.2.15" version = "0.2.16"
[lib] [lib]
name = "appmgrlib" name = "appmgrlib"

View File

@@ -32,8 +32,9 @@ mod v0_2_12;
mod v0_2_13; mod v0_2_13;
mod v0_2_14; mod v0_2_14;
mod v0_2_15; mod v0_2_15;
mod v0_2_16;
pub use v0_2_15::Version as Current; pub use v0_2_16::Version as Current;
#[derive(serde::Serialize, serde::Deserialize)] #[derive(serde::Serialize, serde::Deserialize)]
#[serde(untagged)] #[serde(untagged)]
@@ -61,6 +62,7 @@ enum Version {
V0_2_13(Wrapper<v0_2_13::Version>), V0_2_13(Wrapper<v0_2_13::Version>),
V0_2_14(Wrapper<v0_2_14::Version>), V0_2_14(Wrapper<v0_2_14::Version>),
V0_2_15(Wrapper<v0_2_15::Version>), V0_2_15(Wrapper<v0_2_15::Version>),
V0_2_16(Wrapper<v0_2_16::Version>),
Other(emver::Version), Other(emver::Version),
} }
@@ -178,6 +180,7 @@ pub async fn init() -> Result<(), failure::Error> {
Version::V0_2_13(v) => v.0.migrate_to(&Current::new()).await?, Version::V0_2_13(v) => v.0.migrate_to(&Current::new()).await?,
Version::V0_2_14(v) => v.0.migrate_to(&Current::new()).await?, Version::V0_2_14(v) => v.0.migrate_to(&Current::new()).await?,
Version::V0_2_15(v) => v.0.migrate_to(&Current::new()).await?, Version::V0_2_15(v) => v.0.migrate_to(&Current::new()).await?,
Version::V0_2_16(v) => v.0.migrate_to(&Current::new()).await?,
Version::Other(_) => (), Version::Other(_) => (),
// TODO find some way to automate this? // TODO find some way to automate this?
} }
@@ -274,6 +277,7 @@ pub async fn self_update(requirement: emver::VersionRange) -> Result<(), Error>
Version::V0_2_13(v) => Current::new().migrate_to(&v.0).await?, Version::V0_2_13(v) => Current::new().migrate_to(&v.0).await?,
Version::V0_2_14(v) => Current::new().migrate_to(&v.0).await?, Version::V0_2_14(v) => Current::new().migrate_to(&v.0).await?,
Version::V0_2_15(v) => Current::new().migrate_to(&v.0).await?, Version::V0_2_15(v) => Current::new().migrate_to(&v.0).await?,
Version::V0_2_16(v) => Current::new().migrate_to(&v.0).await?,
Version::Other(_) => (), Version::Other(_) => (),
// TODO find some way to automate this? // TODO find some way to automate this?
}; };

View File

@@ -0,0 +1,21 @@
use super::*;
const V0_2_16: emver::Version = emver::Version::new(0, 2, 16, 0);
pub struct Version;
#[async_trait]
impl VersionT for Version {
type Previous = v0_2_15::Version;
fn new() -> Self {
Version
}
fn semver(&self) -> &'static emver::Version {
&V0_2_16
}
async fn up(&self) -> Result<(), Error> {
Ok(())
}
async fn down(&self) -> Result<(), Error> {
Ok(())
}
}

View File

@@ -1,6 +1,6 @@
manifest-version: 0 manifest-version: 0
app-id: start9-ambassador app-id: start9-ambassador
app-version: 0.2.15 app-version: 0.2.16
uri-rewrites: uri-rewrites:
- =/api -> http://{{start9-ambassador}}:5959/authenticate - =/api -> http://{{start9-ambassador}}:5959/authenticate
- /api/ -> http://{{start9-ambassador}}:5959/ - /api/ -> http://{{start9-ambassador}}:5959/

2
ui/package-lock.json generated
View File

@@ -1,6 +1,6 @@
{ {
"name": "embassy-ui", "name": "embassy-ui",
"version": "0.2.14", "version": "0.2.16",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {

View File

@@ -1,6 +1,6 @@
{ {
"name": "embassy-ui", "name": "embassy-ui",
"version": "0.2.15", "version": "0.2.16",
"description": "GUI for EmbassyOS", "description": "GUI for EmbassyOS",
"author": "Start9 Labs", "author": "Start9 Labs",
"homepage": "https://github.com/Start9Labs/embassy-ui", "homepage": "https://github.com/Start9Labs/embassy-ui",

View File

@@ -1,7 +1,7 @@
<ion-header> <ion-header>
<ion-toolbar> <ion-toolbar>
<ion-title > <ion-title >
<ion-label style="font-size: 20px;" class="ion-text-wrap">Welcome to 0.2.15!</ion-label> <ion-label style="font-size: 20px;" class="ion-text-wrap">Welcome to 0.2.16!</ion-label>
</ion-title> </ion-title>
</ion-toolbar> </ion-toolbar>
</ion-header> </ion-header>

View File

@@ -499,8 +499,8 @@ const mockApiNotifications: ReqRes.GetNotificationsRes = [
const mockApiServer: () => ReqRes.GetServerRes = () => ({ const mockApiServer: () => ReqRes.GetServerRes = () => ({
serverId: 'start9-mockxyzab', serverId: 'start9-mockxyzab',
name: 'Embassy:12345678', name: 'Embassy:12345678',
versionInstalled: '0.2.15', versionInstalled: '0.2.16',
versionLatest: '0.2.15', versionLatest: '0.2.16',
status: ServerStatus.RUNNING, status: ServerStatus.RUNNING,
alternativeRegistryUrl: 'beta-registry.start9labs.com', alternativeRegistryUrl: 'beta-registry.start9labs.com',
welcomeAck: true, welcomeAck: true,