mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2024-12-12 10:04:14 +02:00
Use a prebuilt s3 server container for documentation and tests.
This commit is contained in:
parent
350b30fa49
commit
d55e609959
@ -227,6 +227,7 @@ sub execute
|
||||
$oCommand,
|
||||
$iIndent,
|
||||
$bCache,
|
||||
$bShow,
|
||||
) =
|
||||
logDebugParam
|
||||
(
|
||||
@ -234,8 +235,9 @@ sub execute
|
||||
{name => 'oSection'},
|
||||
{name => 'strHostName'},
|
||||
{name => 'oCommand'},
|
||||
{name => 'iIndent', default => 1},
|
||||
{name => 'bCache', default => true},
|
||||
{name => 'iIndent', optional => true, default => 1},
|
||||
{name => 'bCache', optional => true, default => true},
|
||||
{name => 'bShow', optional => true, default => true},
|
||||
);
|
||||
|
||||
# Working variables
|
||||
@ -243,7 +245,7 @@ sub execute
|
||||
my $strCommand = join("\n", @{$$hCacheKey{cmd}});
|
||||
my $strOutput;
|
||||
|
||||
if (!$oCommand->paramTest('show', 'n') && $self->{bExe} && $self->isRequired($oSection))
|
||||
if ($bShow && $self->{bExe} && $self->isRequired($oSection))
|
||||
{
|
||||
# Make sure that no lines are greater than 80 chars
|
||||
foreach my $strLine (split("\n", $strCommand))
|
||||
@ -624,7 +626,7 @@ sub backrestConfig
|
||||
my $oConfigClean = dclone($self->{config}{$strHostName}{$$hCacheKey{file}});
|
||||
delete($$oConfigClean{&CFGDEF_SECTION_GLOBAL}{&CFGOPT_LOG_LEVEL_STDERR});
|
||||
delete($$oConfigClean{&CFGDEF_SECTION_GLOBAL}{&CFGOPT_LOG_TIMESTAMP});
|
||||
delete($$oConfigClean{&CFGDEF_SECTION_GLOBAL}{&CFGOPT_REPO_S3_VERIFY_SSL});
|
||||
delete($$oConfigClean{&CFGDEF_SECTION_GLOBAL}{'repo1-s3-verify-ssl'});
|
||||
|
||||
if (keys(%{$$oConfigClean{&CFGDEF_SECTION_GLOBAL}}) == 0)
|
||||
{
|
||||
@ -1050,7 +1052,8 @@ sub sectionChildProcess
|
||||
# Execute initialize commands
|
||||
foreach my $oExecute ($oChild->nodeList('execute', false))
|
||||
{
|
||||
$self->execute($oSection, $$hCacheKey{name}, $oExecute, $iDepth + 1, false);
|
||||
$self->execute(
|
||||
$oSection, $$hCacheKey{name}, $oExecute, {iIndent => $iDepth + 1, bCache => false, bShow => false});
|
||||
}
|
||||
|
||||
$self->cachePush($strCacheType, $hCacheKey, $hCacheValue);
|
||||
|
@ -287,25 +287,30 @@ sub sectionProcess
|
||||
# Execute a command
|
||||
if ($oChild->nameGet() eq 'execute-list')
|
||||
{
|
||||
my $oSectionBodyExecute = $oSectionBodyElement->addNew(HTML_DIV, "execute");
|
||||
my $bShow = $oChild->paramTest('show', 'n') ? false : true;
|
||||
my $oExecuteBodyElement;
|
||||
my $bFirst = true;
|
||||
my $strHostName = $self->{oManifest}->variableReplace($oChild->paramGet('host'));
|
||||
|
||||
$oSectionBodyExecute->
|
||||
addNew(HTML_DIV, "execute-title",
|
||||
{strContent => "<span class=\"host\">${strHostName}</span> <b>⇒</b> " .
|
||||
$self->processText($oChild->nodeGet('title')->textGet())});
|
||||
|
||||
my $oExecuteBodyElement = $oSectionBodyExecute->addNew(HTML_DIV, "execute-body");
|
||||
if ($bShow)
|
||||
{
|
||||
my $oSectionBodyExecute = $oSectionBodyElement->addNew(HTML_DIV, "execute");
|
||||
$oSectionBodyExecute->
|
||||
addNew(HTML_DIV, "execute-title",
|
||||
{strContent => "<span class=\"host\">${strHostName}</span> <b>⇒</b> " .
|
||||
$self->processText($oChild->nodeGet('title')->textGet())});
|
||||
$oExecuteBodyElement = $oSectionBodyExecute->addNew(HTML_DIV, "execute-body");
|
||||
}
|
||||
|
||||
foreach my $oExecute ($oChild->nodeList('execute'))
|
||||
{
|
||||
my $bExeShow = !$oExecute->paramTest('show', 'n');
|
||||
my $bExeExpectedError = defined($oExecute->paramGet('err-expect', false));
|
||||
|
||||
my ($strCommand, $strOutput) = $self->execute($oSection, $strHostName, $oExecute, $iDepth + 3);
|
||||
my ($strCommand, $strOutput) = $self->execute(
|
||||
$oSection, $strHostName, $oExecute, {iIndent => $iDepth + 3, bShow => $bShow && $bExeShow});
|
||||
|
||||
if ($bExeShow)
|
||||
if ($bShow && $bExeShow)
|
||||
{
|
||||
# Add continuation chars and proper spacing
|
||||
$strCommand =~ s/\n/\n /smg;
|
||||
|
@ -160,20 +160,24 @@ sub sectionProcess
|
||||
# Execute a command
|
||||
if ($oChild->nameGet() eq 'execute-list')
|
||||
{
|
||||
my $bShow = $oChild->paramTest('show', 'n') ? false : true;
|
||||
my $strHostName = $self->{oManifest}->variableReplace($oChild->paramGet('host'));
|
||||
|
||||
$strLatex .=
|
||||
"\n\\begin\{lstlisting\}[title=\{\\textnormal{\\textbf\{${strHostName}}} --- " .
|
||||
$self->processText($oChild->nodeGet('title')->textGet()) . "}]\n";
|
||||
if ($bShow)
|
||||
{
|
||||
$strLatex .=
|
||||
"\n\\begin\{lstlisting\}[title=\{\\textnormal{\\textbf\{${strHostName}}} --- " .
|
||||
$self->processText($oChild->nodeGet('title')->textGet()) . "}]\n";
|
||||
}
|
||||
|
||||
foreach my $oExecute ($oChild->nodeList('execute'))
|
||||
{
|
||||
my $bExeShow = !$oExecute->paramTest('show', 'n');
|
||||
my ($strCommand, $strOutput) = $self->execute($oSection,
|
||||
$self->{oManifest}->variableReplace($oChild->paramGet('host')),
|
||||
$oExecute, $iDepth + 3);
|
||||
my ($strCommand, $strOutput) = $self->execute(
|
||||
$oSection, $self->{oManifest}->variableReplace($oChild->paramGet('host')), $oExecute,
|
||||
{iIndent => $iDepth + 3, bShow => $bShow && $bExeShow});
|
||||
|
||||
if ($bExeShow)
|
||||
if ($bShow && $bExeShow)
|
||||
{
|
||||
$strLatex .= "${strCommand}\n";
|
||||
|
||||
@ -184,8 +188,11 @@ sub sectionProcess
|
||||
}
|
||||
}
|
||||
|
||||
$strLatex .=
|
||||
"\\end{lstlisting}\n";
|
||||
if ($bShow)
|
||||
{
|
||||
$strLatex .=
|
||||
"\\end{lstlisting}\n";
|
||||
}
|
||||
}
|
||||
# Add code block
|
||||
elsif ($oChild->nameGet() eq 'code-block')
|
||||
|
@ -57,6 +57,7 @@
|
||||
<!ELEMENT execute-list (title, execute+)>
|
||||
<!ATTLIST execute-list host CDATA #REQUIRED>
|
||||
<!ATTLIST execute-list keyword CDATA "">
|
||||
<!ATTLIST execute-list show CDATA "">
|
||||
<!ELEMENT execute (exe-cmd, exe-cmd-extra?, exe-user?, exe-var?, exe-retry?, exe-output?, (exe-highlight-type?, exe-highlight)?,
|
||||
exe-err-expect?, exe-err-suppress?, exe-err-suppress-stderr?)>
|
||||
<!ATTLIST execute keyword CDATA "">
|
||||
|
@ -46,11 +46,11 @@
|
||||
<release-doc-list>
|
||||
<release-development-list>
|
||||
<release-item>
|
||||
<p>Build containers from scratch for more accurate testing.</p>
|
||||
<p>Build containers from scratch for more accurate testing. Use a prebuilt s3 server container.</p>
|
||||
</release-item>
|
||||
|
||||
<release-item>
|
||||
<p>Document generator improvements. Allow parameters to be passed when a container is created. Allow <file>/etc/hosts</file> update to be skipped (for containers without bash). Allow environment load to be skipped. Allow bash wrapping to be skipped. Allow forcing a command to run as a user without sudo.</p>
|
||||
<p>Document generator improvements. Allow parameters to be passed when a container is created. Allow <file>/etc/hosts</file> update to be skipped (for containers without bash). Allow environment load to be skipped. Allow bash wrapping to be skipped. Allow forcing a command to run as a user without sudo. Allow an entire execute list to be hidden.</p>
|
||||
</release-item>
|
||||
</release-development-list>
|
||||
</release-doc-list>
|
||||
|
@ -241,16 +241,16 @@
|
||||
|
||||
<!-- ======================================================================================================================= -->
|
||||
<block-define id="host-install">
|
||||
<execute-list keyword="default" host="{[host-install-host]}">
|
||||
<execute-list keyword="default" host="{[host-install-host]}" show="n">
|
||||
<title>Update apt repository and install packages</title>
|
||||
|
||||
<!-- Fix root tty -->
|
||||
<execute user="root" user-force="y" load-env="n" show="n">
|
||||
<execute user="root" user-force="y" load-env="n">
|
||||
<exe-cmd>sed -i 's/^mesg n/tty -s \&\& mesg n/g' /root/.profile</exe-cmd>
|
||||
</execute>
|
||||
|
||||
<!-- Suppress dpkg interactive output -->
|
||||
<execute user="root" user-force="y" show="n">
|
||||
<execute user="root" user-force="y">
|
||||
<exe-cmd>rm /etc/apt/apt.conf.d/70debconf</exe-cmd>
|
||||
</execute>
|
||||
|
||||
@ -260,7 +260,7 @@
|
||||
</execute>
|
||||
|
||||
<!-- Create an ssh key for root so all hosts can ssh to each other as root -->
|
||||
<execute user="root" user-force="y" show="n">
|
||||
<execute user="root" user-force="y">
|
||||
<exe-cmd>{[ssh-key-install]}</exe-cmd>
|
||||
</execute>
|
||||
|
||||
@ -276,19 +276,19 @@
|
||||
</execute>
|
||||
|
||||
<!-- add doc user -->
|
||||
<execute user="root" user-force="y" show="n">
|
||||
<execute user="root" user-force="y">
|
||||
<exe-cmd>adduser --disabled-password --gecos "" {[host-user]}</exe-cmd>
|
||||
</execute>
|
||||
<execute user="root" user-force="y" show="n">
|
||||
<execute user="root" user-force="y">
|
||||
<exe-cmd>echo '%{[host-user]} ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers</exe-cmd>
|
||||
</execute>
|
||||
</execute-list>
|
||||
|
||||
<execute-list keyword="co6" host="{[host-install-host]}">
|
||||
<execute-list keyword="co6" host="{[host-install-host]}" show="n">
|
||||
<title>Update yum repository and install packages</title>
|
||||
|
||||
<!-- Create an ssh key for root so all hosts can ssh to each other as root -->
|
||||
<execute user="root" user-force="y" show="n">
|
||||
<execute user="root" user-force="y">
|
||||
<exe-cmd>{[ssh-key-install]}</exe-cmd>
|
||||
</execute>
|
||||
|
||||
@ -299,10 +299,10 @@
|
||||
</execute>
|
||||
|
||||
<!-- add doc user -->
|
||||
<execute user="root" user-force="y" show="n">
|
||||
<execute user="root" user-force="y">
|
||||
<exe-cmd>adduser -n {[host-user]}</exe-cmd>
|
||||
</execute>
|
||||
<execute user="root" user-force="y" show="n">
|
||||
<execute user="root" user-force="y">
|
||||
<exe-cmd>echo '{[host-user]} ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/{[host-user]}</exe-cmd>
|
||||
</execute>
|
||||
|
||||
@ -591,65 +591,10 @@
|
||||
<title>Installation</title>
|
||||
|
||||
<!-- Create S3 server first to allow it time to boot before being used -->
|
||||
<host-add id="{[host-s3-id]}" name="{[host-s3]}" user="root" image="ubuntu:16.04" os="{[host-os]}">
|
||||
<!-- Suppress dpkg interactive output -->
|
||||
<execute user="root" user-force="y" load-env="n" show="n">
|
||||
<exe-cmd>rm /etc/apt/apt.conf.d/70debconf</exe-cmd>
|
||||
</execute>
|
||||
|
||||
<!-- Install OpenSSL -->
|
||||
<execute user="root" user-force="y" load-env="n" show="n">
|
||||
<exe-cmd>
|
||||
apt-get update &&
|
||||
apt-get -y install build-essential openssl wget git 2>&1
|
||||
</exe-cmd>
|
||||
</execute>
|
||||
|
||||
<!-- Create self-signed cert -->
|
||||
<execute user="root" user-force="y" load-env="n" show="n">
|
||||
<exe-cmd>
|
||||
mkdir -p -m 755 /etc/fake-cert &&
|
||||
cd /etc/fake-cert &&
|
||||
openssl genrsa -out ca.key 2048 2>&1 &&
|
||||
openssl req -new -x509 -extensions v3_ca -key ca.key -out ca.crt -days 99999
|
||||
-subj "/C=US/ST=Country/L=City/O=Organization/CN=pgbackrest.org" 2>&1 &&
|
||||
openssl genrsa -out server.key 2048 2>&1 &&
|
||||
openssl req -new -key server.key -out server.csr
|
||||
-subj "/C=US/ST=Country/L=City/O=Organization/CN=*.pgbackrest.org" 2>&1 &&
|
||||
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 99999
|
||||
-sha256 2>&1 &&
|
||||
chmod 644 /etc/fake-cert/*
|
||||
</exe-cmd>
|
||||
</execute>
|
||||
|
||||
<!-- Install node.js -->
|
||||
<execute user="root" user-force="y" load-env="n" show="n">
|
||||
<exe-cmd>
|
||||
wget -q -O /root/nodejs.sh https://deb.nodesource.com/setup_6.x &&
|
||||
bash /root/nodejs.sh &&
|
||||
apt-get install -y nodejs
|
||||
</exe-cmd>
|
||||
</execute>
|
||||
|
||||
<!-- Install ScalityS3 -->
|
||||
<execute user="root" user-force="y" load-env="n" show="n">
|
||||
<exe-cmd>
|
||||
wget -q -O /root/scalitys3.tar.gz https://github.com/scality/S3/archive/GA6.4.2.1.tar.gz &&
|
||||
mkdir /root/scalitys3 &&
|
||||
tar -C /root/scalitys3 --strip-components 1 -xvf /root/scalitys3.tar.gz &&
|
||||
cd /root/scalitys3 &&
|
||||
npm install 2>&1 &&
|
||||
sed -i "0,/,/s//,\n \"certFilePaths\":{\"key\":\"\/etc\/fake\-cert\/server.key\",\"cert\":\"\/etc\/fake\-cert\/server.crt\",\"ca\":\"\/etc\/fake\-cert\/ca.crt\"},/"
|
||||
./config.json &&
|
||||
sed -i "s/ort\"\: 8000/ort\"\: 443/" ./config.json
|
||||
</exe-cmd>
|
||||
</execute>
|
||||
|
||||
<!-- Run ScalityS3 -->
|
||||
<execute user="root" user-force="y" load-env="n" bash-wrap="n" show="n">
|
||||
<exe-cmd>
|
||||
nohup npm start --prefix /root/scalitys3 &
|
||||
</exe-cmd>
|
||||
<host-add id="{[host-s3-id]}" name="{[host-s3]}" user="root" image="pgbackrest/test:s3-server-20180612A" os="{[host-os]}">
|
||||
<!-- Set host entries to redirect AWS to local s3 server -->
|
||||
<execute user="root" user-force="y">
|
||||
<exe-cmd>echo "{[host-s3-ip]} demo-bucket.s3.amazonaws.com s3.amazonaws.com" | tee -a /etc/hosts</exe-cmd>
|
||||
</execute>
|
||||
</host-add>
|
||||
|
||||
@ -1897,6 +1842,14 @@
|
||||
|
||||
<p><backrest/> supports storing repositories in <proper>Amazon S3</proper>. The bucket used to store the repository must be created in advance &mdash; <backrest/> will not do it automatically.</p>
|
||||
|
||||
<execute-list host="{[host-s3]}" show="n">
|
||||
<title>Create the bucket</title>
|
||||
|
||||
<execute show='n'>
|
||||
<exe-cmd>aws s3 --no-verify-ssl mb s3://demo-bucket 2>&1</exe-cmd>
|
||||
</execute>
|
||||
</execute-list>
|
||||
|
||||
<backrest-config host="{[host-pg1]}" show="n" file="{[backrest-config-demo]}">
|
||||
<title>Clear the cipher settings</title>
|
||||
|
||||
@ -1924,49 +1877,9 @@
|
||||
<execute-list host="{[host-pg1]}">
|
||||
<title>Create the stanza</title>
|
||||
|
||||
<!-- Install AWS CLI -->
|
||||
<execute keyword="default" user="root" show='n'>
|
||||
<exe-cmd>apt-get -y install python 2>&1</exe-cmd>
|
||||
</execute>
|
||||
<execute keyword="co6" user="root" show='n'>
|
||||
<exe-cmd>yum -y install epel-release 2>&1</exe-cmd>
|
||||
</execute>
|
||||
<execute keyword="co6" user="root" show='n'>
|
||||
<exe-cmd>yum -y install python-pip 2>&1</exe-cmd>
|
||||
</execute>
|
||||
<execute keyword="default" user="root" show='n'>
|
||||
<exe-cmd>
|
||||
wget -q --no-check-certificate -O /root/get-pip.py
|
||||
https://bootstrap.pypa.io/get-pip.py
|
||||
</exe-cmd>
|
||||
</execute>
|
||||
<execute keyword="default" user="root" show='n'>
|
||||
<exe-cmd>-H python /root/get-pip.py</exe-cmd>
|
||||
</execute>
|
||||
<execute keyword="co6" user="root" show='n'>
|
||||
<exe-cmd>pip install {[dash]}-upgrade {[dash]}-no-cache-dir pip==9.0.3 2>&1</exe-cmd>
|
||||
</execute>
|
||||
<execute user="root" show='n'>
|
||||
<exe-cmd>-H pip install --upgrade awscli 2>&1</exe-cmd>
|
||||
</execute>
|
||||
<execute show='n'>
|
||||
<exe-cmd>aws configure set region us-east-1</exe-cmd>
|
||||
</execute>
|
||||
<execute show='n'>
|
||||
<exe-cmd>aws configure set aws_access_key_id accessKey1</exe-cmd>
|
||||
</execute>
|
||||
<execute show='n'>
|
||||
<exe-cmd>aws configure set aws_secret_access_key verySecretKey1</exe-cmd>
|
||||
</execute>
|
||||
|
||||
<!-- Set host entries to redirect AWS to local s3 server -->
|
||||
<execute user="root" show='n'>
|
||||
<exe-cmd>echo "{[host-s3-ip]} demo-bucket.s3.amazonaws.com s3.amazonaws.com" |
|
||||
sudo tee -a /etc/hosts</exe-cmd>
|
||||
</execute>
|
||||
|
||||
<execute show='n'>
|
||||
<exe-cmd>aws s3 --no-verify-ssl mb s3://demo-bucket 2>&1</exe-cmd>
|
||||
<execute user="root" user-force="y" show="n">
|
||||
<exe-cmd>echo "{[host-s3-ip]} demo-bucket.s3.amazonaws.com s3.amazonaws.com" | tee -a /etc/hosts</exe-cmd>
|
||||
</execute>
|
||||
|
||||
<execute user="postgres" output="y">
|
||||
|
50
test/docker/s3-server.docker
Normal file
50
test/docker/s3-server.docker
Normal file
@ -0,0 +1,50 @@
|
||||
# S3 Server used for testing and documentation
|
||||
# docker build -f s3-server.docker -t pgbackrest/test:s3-server-20180612A .
|
||||
FROM ubuntu:18.04
|
||||
|
||||
# Suppress dpkg interactive output
|
||||
RUN rm /etc/apt/apt.conf.d/70debconf && \
|
||||
|
||||
# Install base packages
|
||||
apt-get update && \
|
||||
apt-get -y install build-essential openssl wget git python-pip && \
|
||||
|
||||
# Fix root tty
|
||||
sed -i 's/^mesg n/tty -s \&\& mesg n/g' /root/.profile && \
|
||||
|
||||
# Generate fake certs
|
||||
mkdir -p -m 755 /etc/fake-cert && \
|
||||
cd /etc/fake-cert && \
|
||||
openssl genrsa -out ca.key 2048 && \
|
||||
openssl req -new -x509 -extensions v3_ca -key ca.key -out ca.crt -days 99999 \
|
||||
-subj "/C=US/ST=Country/L=City/O=Organization/CN=pgbackrest.org" && \
|
||||
openssl genrsa -out server.key 2048 && \
|
||||
openssl req -new -key server.key -out server.csr \
|
||||
-subj "/C=US/ST=Country/L=City/O=Organization/CN=*.pgbackrest.org" && \
|
||||
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 99999 \
|
||||
-sha256 && \
|
||||
chmod 644 /etc/fake-cert/* && \
|
||||
|
||||
# Install AWS CLI
|
||||
pip install --upgrade awscli && \
|
||||
aws configure set region us-east-1 && \
|
||||
aws configure set aws_access_key_id accessKey1 && \
|
||||
aws configure set aws_secret_access_key verySecretKey1 && \
|
||||
|
||||
# Install node.js
|
||||
wget -O /root/nodejs.sh https://deb.nodesource.com/setup_6.x && \
|
||||
bash /root/nodejs.sh && \
|
||||
apt-get install -y nodejs npm && \
|
||||
|
||||
# Install Scality S3
|
||||
wget -O /root/scalitys3.tar.gz https://github.com/scality/S3/archive/GA6.4.2.1.tar.gz && \
|
||||
mkdir /root/scalitys3 && \
|
||||
tar -C /root/scalitys3 --strip-components 1 -xvf /root/scalitys3.tar.gz && \
|
||||
cd /root/scalitys3 && \
|
||||
npm install && \
|
||||
sed -i "0,/,/s//,\n \"certFilePaths\":{\"key\":\"\/etc\/fake\-cert\/server.key\",\"cert\":\"\/etc\/fake\-cert\/server.crt\",\"ca\":\"\/etc\/fake\-cert\/ca.crt\"},/" \
|
||||
./config.json && \
|
||||
sed -i "s/ort\"\: 8000/ort\"\: 443/" ./config.json
|
||||
|
||||
# Start SSH when container starts
|
||||
ENTRYPOINT npm start --prefix /root/scalitys3
|
@ -69,6 +69,11 @@ use constant CERT_FAKE_SERVER_KEY => CERT_FAKE
|
||||
####################################################################################################################################
|
||||
use constant CONTAINER_DEBUG => false;
|
||||
|
||||
####################################################################################################################################
|
||||
# Container Debug - speeds container debugging by splitting each section into a separate intermediate container
|
||||
####################################################################################################################################
|
||||
use constant CONTAINER_S3_SERVER_TAG => 's3-server-20180612A';
|
||||
|
||||
####################################################################################################################################
|
||||
# Generate Devel::Cover package name
|
||||
####################################################################################################################################
|
||||
@ -631,19 +636,8 @@ sub containerBuild
|
||||
}
|
||||
else
|
||||
{
|
||||
$strImageParent = $oVm->{&VM_U18}{&VM_IMAGE};
|
||||
|
||||
$strScript = sectionHeader() .
|
||||
"# Install required packages\n" .
|
||||
" apt-get update && \\\n" .
|
||||
" apt-get install -y wget git gnupg";
|
||||
|
||||
$strScript .= certSetup();
|
||||
$strScript .= s3ServerSetup(VM_U18);
|
||||
|
||||
$strScript .= sectionHeader() .
|
||||
"# Fix root tty\n" .
|
||||
" echo 'tty -s && mesg n || true' > /root/.profile";
|
||||
$strImageParent = containerRepo() . ':' . CONTAINER_S3_SERVER_TAG;
|
||||
$strScript = '';
|
||||
}
|
||||
|
||||
$strScript .= "\n\nENTRYPOINT npm start --prefix /root/scalitys3";
|
||||
|
Loading…
Reference in New Issue
Block a user