fix: docker (#162 #167)

This commit is contained in:
lollipopkit
2023-11-20 00:28:17 -06:00
parent 4153713ce7
commit f093853d21
6 changed files with 73 additions and 61 deletions

View File

@@ -586,7 +586,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 643; CURRENT_PROJECT_VERSION = 644;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -596,7 +596,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.643; MARKETING_VERSION = 1.0.644;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -720,7 +720,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 643; CURRENT_PROJECT_VERSION = 644;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -730,7 +730,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.643; MARKETING_VERSION = 1.0.644;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -748,7 +748,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 643; CURRENT_PROJECT_VERSION = 644;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -758,7 +758,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.643; MARKETING_VERSION = 1.0.644;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -779,7 +779,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 643; CURRENT_PROJECT_VERSION = 644;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -792,7 +792,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.0.643; MARKETING_VERSION = 1.0.644;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
@@ -818,7 +818,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 643; CURRENT_PROJECT_VERSION = 644;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -831,7 +831,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.0.643; MARKETING_VERSION = 1.0.644;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
@@ -854,7 +854,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 643; CURRENT_PROJECT_VERSION = 644;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -867,7 +867,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.0.643; MARKETING_VERSION = 1.0.644;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
@@ -890,7 +890,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 643; CURRENT_PROJECT_VERSION = 644;
DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -902,7 +902,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.643; MARKETING_VERSION = 1.0.644;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
@@ -931,7 +931,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 643; CURRENT_PROJECT_VERSION = 644;
DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -943,7 +943,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.643; MARKETING_VERSION = 1.0.644;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
PRODUCT_NAME = ServerBox; PRODUCT_NAME = ServerBox;
@@ -969,7 +969,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 643; CURRENT_PROJECT_VERSION = 644;
DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -981,7 +981,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.643; MARKETING_VERSION = 1.0.644;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
PRODUCT_NAME = ServerBox; PRODUCT_NAME = ServerBox;

View File

@@ -9,7 +9,7 @@ const _homeVar = '\$HOME';
enum ShellFunc { enum ShellFunc {
status, status,
docker, //docker,
process, process,
shutdown, shutdown,
reboot, reboot,
@@ -45,8 +45,8 @@ chmod +x $_installShellPath
switch (this) { switch (this) {
case ShellFunc.status: case ShellFunc.status:
return 's'; return 's';
case ShellFunc.docker: // case ShellFunc.docker:
return 'd'; // return 'd';
case ShellFunc.process: case ShellFunc.process:
return 'p'; return 'p';
case ShellFunc.shutdown: case ShellFunc.shutdown:
@@ -64,10 +64,10 @@ chmod +x $_installShellPath
switch (this) { switch (this) {
case ShellFunc.status: case ShellFunc.status:
return 'status'; return 'status';
case ShellFunc.docker: // case ShellFunc.docker:
// `dockeR` -> avoid conflict with `docker` command // // `dockeR` -> avoid conflict with `docker` command
// 以防止循环递归 // // 以防止循环递归
return 'dockeR'; // return 'dockeR';
case ShellFunc.process: case ShellFunc.process:
return 'process'; return 'process';
case ShellFunc.shutdown: case ShellFunc.shutdown:
@@ -88,14 +88,14 @@ if [ "\$macSign" = "" ] && [ "\$bsdSign" = "" ]; then
else else
\t${_bsdStatusCmd.join(_cmdDivider)} \t${_bsdStatusCmd.join(_cmdDivider)}
fi'''; fi''';
case ShellFunc.docker: // case ShellFunc.docker:
return ''' // return '''
result=\$(docker version 2>&1 | grep "permission denied") // result=\$(docker version 2>&1 | grep "permission denied")
if [ "\$result" != "" ]; then // if [ "\$result" != "" ]; then
\t${_dockerCmds.join(_cmdDivider)} // \t${_dockerCmds.join(_cmdDivider)}
else // else
\t${_dockerCmds.map((e) => "sudo -S $e").join(_cmdDivider)} // \t${_dockerCmds.map((e) => "sudo -S $e").join(_cmdDivider)}
fi'''; // fi''';
case ShellFunc.process: case ShellFunc.process:
return ''' return '''
if [ "\$macSign" = "" ] && [ "\$bsdSign" = "" ]; then if [ "\$macSign" = "" ] && [ "\$bsdSign" = "" ]; then
@@ -225,14 +225,22 @@ enum DockerCmdType {
//stats, //stats,
images, images,
; ;
String get exec {
switch (this) {
case DockerCmdType.version:
return 'docker version';
case DockerCmdType.ps:
return 'docker ps -a';
// case DockerCmdType.stats:
// return 'docker stats --no-stream';
case DockerCmdType.images:
return 'docker image ls';
}
} }
const _dockerCmds = [ static final execAll = values.map((e) => e.exec).join(_cmdDivider);
'docker version', }
'docker ps -a',
//'docker stats --no-stream',
'docker image ls',
];
enum BSDStatusCmdType { enum BSDStatusCmdType {
echo, echo,

View File

@@ -48,8 +48,8 @@ class DockerProvider extends ChangeNotifier {
Future<void> refresh() async { Future<void> refresh() async {
var raw = ''; var raw = '';
await client!.execWithPwd( await client?.execWithPwd(
ShellFunc.docker.exec, _wrap(DockerCmdType.execAll),
context: context, context: context,
onStdout: (data, _) => raw = '$raw$data', onStdout: (data, _) => raw = '$raw$data',
); );
@@ -171,13 +171,16 @@ class DockerProvider extends ChangeNotifier {
return null; return null;
} }
// judge whether to use DOCKER_HOST // wrap cmd with `docker host & sudo`
String _wrap(String cmd) { String _wrap(String cmd) {
final dockerHost = Stores.docker.fetch(hostId!); final dockerHost = Stores.docker.fetch(hostId!);
cmd = 'export LANG=en_US.UTF-8 && $cmd';
if (dockerHost == null || dockerHost.isEmpty) { if (dockerHost == null || dockerHost.isEmpty) {
return cmd; if (userName != 'root') {
return 'sudo $cmd';
} }
return 'export DOCKER_HOST=$dockerHost && $cmd'; } else {
cmd = 'export DOCKER_HOST=$dockerHost && $cmd';
}
return 'export LANG=en_US.UTF-8 && $cmd';
} }
} }

View File

@@ -2,9 +2,9 @@
class BuildData { class BuildData {
static const String name = "ServerBox"; static const String name = "ServerBox";
static const int build = 643; static const int build = 644;
static const String engine = "3.16.0"; static const String engine = "3.16.0";
static const String buildAt = "2023-11-19 14:47:41"; static const String buildAt = "2023-11-20 11:49:47";
static const int modifications = 1; static const int modifications = 4;
static const int script = 26; static const int script = 26;
} }

View File

@@ -355,7 +355,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
Widget _buildMoreBtn(DockerPsItem dItem) { Widget _buildMoreBtn(DockerPsItem dItem) {
return PopupMenu( return PopupMenu(
items: DockerMenuType.items(dItem.running).map((e) => e.widget).toList(), items: DockerMenuType.items(dItem.running).map((e) => e.widget).toList(),
onSelected: (DockerMenuType item) async { onSelected: (item) async {
switch (item) { switch (item) {
case DockerMenuType.rm: case DockerMenuType.rm:
context.showRoundDialog( context.showRoundDialog(
@@ -464,7 +464,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
await context.showRoundDialog( await context.showRoundDialog(
title: Text(l10n.dockerEditHost), title: Text(l10n.dockerEditHost),
child: Input( child: Input(
maxLines: 1, maxLines: 2,
controller: ctrl, controller: ctrl,
onSubmitted: _onSaveDockerHost, onSubmitted: _onSaveDockerHost,
), ),

View File

@@ -126,7 +126,8 @@ class _ServerEditPageState extends State<ServerEditPage> {
'${l10n.delete} ${l10n.server}(${widget.spi!.name})', '${l10n.delete} ${l10n.server}(${widget.spi!.name})',
)), )),
UIs.height13, UIs.height13,
if (widget.spi?.server?.canViewDetails ?? false) Row( if (widget.spi?.server?.canViewDetails ?? false)
Row(
children: [ children: [
Checkbox( Checkbox(
value: delScripts, value: delScripts,