Update Dockerfile and scripts for v1 layout compatibility, enhancing directory structure and credential handling. Adjust paths for executable and storage, and improve README documentation to reflect changes.

This commit is contained in:
2026-03-19 21:56:46 -04:00
parent fa2029b1cb
commit 2dee620e36
6 changed files with 111 additions and 36 deletions
+22 -23
View File
@@ -29,12 +29,12 @@ RUN make
# Stage 2: Runtime stage - Create minimal application container # Stage 2: Runtime stage - Create minimal application container
FROM ubuntu:latest FROM ubuntu:latest
# Build arguments for configurable credentials and paths # Build arguments for configurable credentials and paths (v1 VM layout)
ARG SSH_USERNAME=piscaladmin ARG SSH_USERNAME=piscaladmin
ARG SSH_PASSWORD=piscaladmin ARG SSH_PASSWORD=piscaladmin
ARG SSH_GROUP=piscaladmin ARG SSH_GROUP=piscaladmin
ARG STORAGE_PATH=/home/piscaladmin/LeafWeb_storage ARG STORAGE_PATH=/home/piscaladmin/LeafWeb_storage
ARG PISCAL_EXECUTABLE=/srv/piscal ARG PISCAL_EXECUTABLE=/home/piscaladmin/piscal_executable/piscal
# Install runtime dependencies only # Install runtime dependencies only
RUN set -xe \ RUN set -xe \
@@ -67,12 +67,13 @@ RUN set -xe \
RUN set -xe \ RUN set -xe \
&& mkdir /run/sshd && mkdir /run/sshd
# Ensure the job/workspace base under /srv is writable. # v1 VM layout: LeafWeb contains scripts + project directories
# The client uses `/srv/${PiscalDirectoryName}/input` and `PiscalDirectoryName` # Create LeafWeb (scripts and job dirs), piscal_executable, and storage
# can itself be prefixed with `LeafWeb/...`.
RUN set -xe \ RUN set -xe \
&& mkdir -p /srv/LeafWeb \ && mkdir -p /home/${SSH_USERNAME}/LeafWeb \
&& chown -R ${SSH_USERNAME}:${SSH_GROUP} /srv/LeafWeb && mkdir -p /home/${SSH_USERNAME}/piscal_executable \
&& chown -R ${SSH_USERNAME}:${SSH_GROUP} /home/${SSH_USERNAME}/LeafWeb \
&& chown -R ${SSH_USERNAME}:${SSH_GROUP} /home/${SSH_USERNAME}/piscal_executable
# Create storage directory structure with proper ownership # Create storage directory structure with proper ownership
RUN set -xe \ RUN set -xe \
@@ -80,25 +81,23 @@ RUN set -xe \
&& mkdir -p ${STORAGE_PATH}/output \ && mkdir -p ${STORAGE_PATH}/output \
&& chown -R ${SSH_USERNAME}:${SSH_GROUP} ${STORAGE_PATH} && chown -R ${SSH_USERNAME}:${SSH_GROUP} ${STORAGE_PATH}
# Copy compiled executable from builder stage # Copy compiled executable and scripts to staging dir (COPY can't use ARG in dest)
COPY --from=builder /build/leafres/testrun/piscal /srv/piscal COPY --from=builder /build/leafres/testrun/piscal /tmp/piscal
COPY piscal-manager/piscal_launcher.sh piscal-manager/piscal_manager.sh piscal-manager/subdir_year.sh piscal-manager/README.txt /tmp/leafweb/
# Copy piscal-manager scripts (excluding .cfg, we'll generate it) # Install to user's home (supports custom SSH_USERNAME)
COPY piscal-manager/*.sh /srv/
COPY piscal-manager/README.txt /srv/
# Generate piscal_launcher.cfg with build-time parameters
RUN set -xe \ RUN set -xe \
&& echo "piscal_executable=\"${PISCAL_EXECUTABLE}\"" > /srv/piscal_launcher.cfg \ && cp /tmp/piscal /home/${SSH_USERNAME}/piscal_executable/piscal \
&& echo "storage_directory=\"${STORAGE_PATH}\"" >> /srv/piscal_launcher.cfg \ && chown ${SSH_USERNAME}:${SSH_GROUP} /home/${SSH_USERNAME}/piscal_executable/piscal \
&& chown ${SSH_USERNAME}:${SSH_GROUP} /srv/piscal_launcher.cfg && cp /tmp/leafweb/* /home/${SSH_USERNAME}/LeafWeb/ \
&& echo "piscal_executable=\"${PISCAL_EXECUTABLE}\"" > /home/${SSH_USERNAME}/LeafWeb/piscal_launcher.cfg \
&& echo "storage_directory=\"${STORAGE_PATH}\"" >> /home/${SSH_USERNAME}/LeafWeb/piscal_launcher.cfg \
&& chown ${SSH_USERNAME}:${SSH_GROUP} /home/${SSH_USERNAME}/LeafWeb/* \
&& find /home/${SSH_USERNAME}/LeafWeb -name "*.sh" -type f -exec sed -i 's/\r$//' {} \; \
&& chmod +x /home/${SSH_USERNAME}/LeafWeb/*.sh || true \
&& rm -rf /tmp/piscal /tmp/leafweb
# Fix Windows line endings (CRLF -> LF) for scripts and make scripts executable WORKDIR /home/${SSH_USERNAME}/LeafWeb
RUN set -xe \
&& find /srv -name "*.sh" -type f -exec sed -i 's/\r$//' {} \; \
&& chmod +x /srv/*.sh || true
WORKDIR /srv
EXPOSE 22 EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"] CMD ["/usr/sbin/sshd", "-D"]
+16 -6
View File
@@ -64,16 +64,26 @@ The Dockerfile accepts these build arguments if you need to customize:
| `SSH_PASSWORD` | `piscaladmin` | SSH password for container access | | `SSH_PASSWORD` | `piscaladmin` | SSH password for container access |
| `SSH_GROUP` | `piscaladmin` | Primary group for SSH user | | `SSH_GROUP` | `piscaladmin` | Primary group for SSH user |
| `STORAGE_PATH` | `/home/piscaladmin/LeafWeb_storage` | Storage directory for PISCAL data | | `STORAGE_PATH` | `/home/piscaladmin/LeafWeb_storage` | Storage directory for PISCAL data |
| `PISCAL_EXECUTABLE` | `/srv/piscal` | Path to PISCAL executable | | `PISCAL_EXECUTABLE` | `/home/piscaladmin/piscal_executable/piscal` | Path to PISCAL executable |
### Storage Directory Structure ### v1 Directory Layout (VM-compatible)
The storage directory is automatically created with: The image uses the v1 layout expected by the LeafWeb client:
``` ```
/home/piscaladmin/LeafWeb_storage/ /home/piscaladmin/
├── input/ # Input files for processing ├── LeafWeb/ # Scripts + project directories
└── output/ # Results from PISCAL processing │ ├── piscal_launcher.cfg
│ ├── piscal_launcher.sh
│ ├── piscal_manager.sh
│ ├── subdir_year.sh
│ ├── README.txt
│ └── <project_name>/ # Job dirs (e.g. 280_CinnamomumbodinieriLévl)
├── LeafWeb_storage/
│ ├── input/
│ └── output/
└── piscal_executable/
└── piscal
``` ```
### Port Mapping ### Port Mapping
+59
View File
@@ -0,0 +1,59 @@
# v1 VM Deployment (LeafWeb Layout)
This branch configures PISCAL for deployment on a VM matching the layout used by `piscal.eastus.cloudapp.azure.com`, so the LeafWeb client can access jobs and storage at the expected paths.
## Directory Layout
```
/home/piscaladmin/
├── LeafWeb/ # Scripts + project directories
│ ├── piscal_launcher.cfg # Config (piscal_executable, storage paths)
│ ├── piscal_launcher.sh
│ ├── piscal_manager.sh
│ ├── subdir_year.sh
│ ├── README.txt
│ ├── 280_CinnamomumbodinieriLévl/ # Project dirs (input/, output/, run/, etc.)
│ ├── 311_AnnaAsaday3high/
│ └── ...
├── LeafWeb_storage/ # Shared storage for client
│ ├── input/
│ └── output/
├── piscal/ # Source (optional)
└── piscal_executable/ # Compiled binary
└── piscal
```
## Deployment
**Docker (recommended):** The Docker image uses this layout by default. See [README-Docker.md](README-Docker.md).
**Manual VM deployment:** Copy scripts to LeafWeb and the compiled `piscal` binary to `piscal_executable/`:
```bash
ssh piscaladmin@host 'mkdir -p ~/LeafWeb ~/piscal_executable ~/LeafWeb_storage/input ~/LeafWeb_storage/output'
scp piscal-manager/*.cfg piscal-manager/*.sh piscal-manager/README.txt piscaladmin@host:~/LeafWeb/
scp leafres/testrun/piscal piscaladmin@host:~/piscal_executable/
ssh piscaladmin@host 'chmod +x ~/LeafWeb/*.sh'
```
## Configuration
`piscal_launcher.cfg` uses VM paths:
- `piscal_executable="/home/piscaladmin/piscal_executable/piscal"`
- `storage_directory="/home/piscaladmin/LeafWeb_storage"`
Adjust if your VM uses different locations.
## Running Jobs
From `~/LeafWeb`:
```bash
cd ~/LeafWeb
./piscal_manager.sh -d 280_CinnamomumbodinieriLévl -s -p C3_photosynthesis_leafweb
./piscal_manager.sh -d 280_CinnamomumbodinieriLévl # status
./piscal_manager.sh -d 280_CinnamomumbodinieriLévl -c # cleanup
```
The `-d` argument is the project directory name (a subdir of LeafWeb).
+3 -1
View File
@@ -26,10 +26,12 @@ if ($LASTEXITCODE -eq 0) {
Write-Host " - piscal:latest" -ForegroundColor Green Write-Host " - piscal:latest" -ForegroundColor Green
Write-Host " - piscal:dev" -ForegroundColor Green Write-Host " - piscal:dev" -ForegroundColor Green
Write-Host "" Write-Host ""
Write-Host "Default credentials:" -ForegroundColor Cyan Write-Host "Default credentials (v1 layout):" -ForegroundColor Cyan
Write-Host " Username: piscaladmin" -ForegroundColor Cyan Write-Host " Username: piscaladmin" -ForegroundColor Cyan
Write-Host " Password: piscaladmin" -ForegroundColor Cyan Write-Host " Password: piscaladmin" -ForegroundColor Cyan
Write-Host " LeafWeb: /home/piscaladmin/LeafWeb (scripts + project dirs)" -ForegroundColor Cyan
Write-Host " Storage: /home/piscaladmin/LeafWeb_storage" -ForegroundColor Cyan Write-Host " Storage: /home/piscaladmin/LeafWeb_storage" -ForegroundColor Cyan
Write-Host " Executable: /home/piscaladmin/piscal_executable/piscal" -ForegroundColor Cyan
Write-Host "" Write-Host ""
Write-Host "To run: docker run -d -p 2222:22 --name piscal-server piscal:latest" -ForegroundColor Yellow Write-Host "To run: docker run -d -p 2222:22 --name piscal-server piscal:latest" -ForegroundColor Yellow
Write-Host "To SSH: ssh -p 2222 piscaladmin@localhost (password: piscaladmin)" -ForegroundColor Yellow Write-Host "To SSH: ssh -p 2222 piscaladmin@localhost (password: piscaladmin)" -ForegroundColor Yellow
+3 -1
View File
@@ -25,10 +25,12 @@ echo " - piscal:${VERSION}"
echo " - piscal:latest" echo " - piscal:latest"
echo " - piscal:dev" echo " - piscal:dev"
echo "" echo ""
echo "Default credentials:" echo "Default credentials (v1 layout):"
echo " Username: piscaladmin" echo " Username: piscaladmin"
echo " Password: piscaladmin" echo " Password: piscaladmin"
echo " LeafWeb: /home/piscaladmin/LeafWeb (scripts + project dirs)"
echo " Storage: /home/piscaladmin/LeafWeb_storage" echo " Storage: /home/piscaladmin/LeafWeb_storage"
echo " Executable: /home/piscaladmin/piscal_executable/piscal"
echo "" echo ""
echo "To run: docker run -d -p 2222:22 --name piscal-server piscal:latest" echo "To run: docker run -d -p 2222:22 --name piscal-server piscal:latest"
echo "To SSH: ssh -p 2222 piscaladmin@localhost (password: piscaladmin)" echo "To SSH: ssh -p 2222 piscaladmin@localhost (password: piscaladmin)"
+8 -5
View File
@@ -1,7 +1,10 @@
# NOTE: This file is for reference only when using non-Docker deployments. # v1 VM-compatible configuration
# For Docker builds, this file is generated dynamically at build time from # Deploy this file to /home/piscaladmin/LeafWeb/ alongside piscal_launcher.sh,
# Dockerfile ARG values (see Dockerfile). The Docker-generated version will # piscal_manager.sh, and subdir_year.sh. Project directories (e.g. 280_*,
# use the configured SSH_USERNAME and STORAGE_PATH build arguments. # 311_*) live as subdirs of LeafWeb.
#
# For Docker builds, this file is NOT used; the Dockerfile generates
# Docker builds generate this file in LeafWeb at build time.
piscal_executable="/srv/piscal" piscal_executable="/home/piscaladmin/piscal_executable/piscal"
storage_directory="/home/piscaladmin/LeafWeb_storage" storage_directory="/home/piscaladmin/LeafWeb_storage"