docker fix for missing service files

pull/27/head
accius 4 days ago
parent 4d7bd7a92a
commit d90bc2cbe0

@ -25,20 +25,27 @@ RUN curl -L -o ITURHFProp "https://github.com/ITU-R-Study-Group-3/ITU-R-HF/relea
# Download source to get Data files
RUN curl -L -o source.tar.gz "https://github.com/ITU-R-Study-Group-3/ITU-R-HF/archive/refs/tags/v14.3.tar.gz" \
&& tar -xzf source.tar.gz \
&& echo "=== Top level ===" && ls -la ITU-R-HF-14.3/ \
&& echo "=== Finding Data ===" && find ITU-R-HF-14.3 -type d -name "Data" \
&& echo "=== Finding IonMap ===" && find ITU-R-HF-14.3 -type d -name "IonMap"
&& echo "=== Finding all Data directories ===" \
&& find ITU-R-HF-14.3 -type d -name "Data" \
&& echo "=== Finding ionos files ===" \
&& find ITU-R-HF-14.3 -name "ionos*.bin" \
&& echo "=== Finding ant files ===" \
&& find ITU-R-HF-14.3 -name "*.ant" \
&& echo "=== Finding COEFF files ===" \
&& find ITU-R-HF-14.3 -name "COEFF*.BIN" | head -5
# Move Data directories - try multiple possible locations
RUN if [ -d "ITU-R-HF-14.3/P533/Data" ]; then cp -r ITU-R-HF-14.3/P533/Data .; \
elif [ -d "ITU-R-HF-14.3/Data" ]; then cp -r ITU-R-HF-14.3/Data .; \
else echo "ERROR: Data not found!" && exit 1; fi
# IonMap might be inside P533 or at root level
RUN if [ -d "ITU-R-HF-14.3/P533/IonMap" ]; then cp -r ITU-R-HF-14.3/P533/IonMap .; \
elif [ -d "ITU-R-HF-14.3/IonMap" ]; then cp -r ITU-R-HF-14.3/IonMap .; \
elif [ -d "ITU-R-HF-14.3/P533/Src/IonMap" ]; then cp -r ITU-R-HF-14.3/P533/Src/IonMap .; \
else echo "WARNING: IonMap not found, checking if embedded in Data..." && ls -la Data/; fi
# Create Data directory and copy ALL required files from various locations
RUN mkdir -p Data \
&& echo "=== Copying COEFF files ===" \
&& find ITU-R-HF-14.3 -name "COEFF*.BIN" -exec cp {} Data/ \; \
&& find ITU-R-HF-14.3 -name "COEFF*.txt" -exec cp {} Data/ \; \
&& echo "=== Copying ionos files ===" \
&& find ITU-R-HF-14.3 -name "ionos*.bin" -exec cp {} Data/ \; \
&& echo "=== Copying antenna files ===" \
&& find ITU-R-HF-14.3 -name "*.ant" -exec cp {} Data/ \; \
&& echo "=== Copying any other data files ===" \
&& find ITU-R-HF-14.3 -name "P372*.txt" -exec cp {} Data/ \; 2>/dev/null || true \
&& find ITU-R-HF-14.3 -name "*.csv" -exec cp {} Data/ \; 2>/dev/null || true
# Cleanup
RUN rm -rf ITU-R-HF-14.3 source.tar.gz
@ -46,10 +53,9 @@ RUN rm -rf ITU-R-HF-14.3 source.tar.gz
# Set library path so ITURHFProp can find shared libs
ENV LD_LIBRARY_PATH=/opt/iturhfprop:$LD_LIBRARY_PATH
# Verify installation
# Verify installation - show all files in Data
RUN echo "=== Binary files ===" && ls -la /opt/iturhfprop/*.so /opt/iturhfprop/ITURHFProp \
&& echo "=== Data directory ===" && ls /opt/iturhfprop/Data/ | head -10 \
&& echo "=== IonMap directory ===" && ls /opt/iturhfprop/IonMap/ | head -5
&& echo "=== Data directory contents ===" && ls -la /opt/iturhfprop/Data/
# Set up the API service
WORKDIR /app

@ -77,12 +77,10 @@ function generateInputFile(params) {
// Format frequencies
const freqList = frequencies.map(f => f.toFixed(3)).join(' ');
// ITURHFProp input file format
const input = `PathName "OpenHamClock Prediction"
PathTXName "TX"
// ITURHFProp input file format - minimal version without external antenna files
const input = `PathName "OpenHamClock"
Path.L_tx.lat ${txLat.toFixed(4)}
Path.L_tx.lng ${txLon.toFixed(4)}
PathRXName "RX"
Path.L_rx.lat ${rxLat.toFixed(4)}
Path.L_rx.lng ${rxLon.toFixed(4)}
Path.year ${year}
@ -97,12 +95,6 @@ Path.Relr ${requiredReliability}
Path.ManMadeNoise ${manMadeNoise}
Path.Modulation ANALOG
Path.SorL SHORTPATH
TXAntFilePath ${ITURHFPROP_DATA}/Data/Isotropic.ant
RXAntFilePath ${ITURHFPROP_DATA}/Data/Isotropic.ant
TXAnt.Alt 0.0
TXAnt.Gain ${txGain.toFixed(1)}
RXAnt.Alt 0.0
RXAnt.Gain ${rxGain.toFixed(1)}
DataFilePath ${ITURHFPROP_DATA}/Data/
`;
@ -263,14 +255,16 @@ app.get('/api/health', (req, res) => {
const binaryExists = fs.existsSync(ITURHFPROP_PATH);
const dataExists = fs.existsSync(ITURHFPROP_DATA);
const dataSubExists = fs.existsSync(ITURHFPROP_DATA + '/Data');
const ionMapExists = fs.existsSync(ITURHFPROP_DATA + '/IonMap');
// Check for shared libraries
const libp533Exists = fs.existsSync('/opt/iturhfprop/libp533.so');
const libp372Exists = fs.existsSync('/opt/iturhfprop/libp372.so');
// Check for ionospheric data (ionos12.bin in Data folder)
const ionosDataExists = fs.existsSync(ITURHFPROP_DATA + '/Data/ionos12.bin');
res.json({
status: binaryExists && dataSubExists && ionMapExists && libp533Exists ? 'healthy' : 'degraded',
status: binaryExists && dataSubExists && libp533Exists && ionosDataExists ? 'healthy' : 'degraded',
service: 'iturhfprop',
version: '1.0.0',
engine: 'ITURHFProp (ITU-R P.533-14)',
@ -278,7 +272,7 @@ app.get('/api/health', (req, res) => {
libp533: libp533Exists ? 'found' : 'missing',
libp372: libp372Exists ? 'found' : 'missing',
dataDir: dataSubExists ? 'found' : 'missing',
ionMapDir: ionMapExists ? 'found' : 'missing',
ionosData: ionosDataExists ? 'found' : 'missing',
paths: {
binary: ITURHFPROP_PATH,
data: ITURHFPROP_DATA
@ -321,17 +315,18 @@ app.get('/api/diag', async (req, res) => {
// Check data files
try {
const dataFiles = fs.readdirSync(ITURHFPROP_DATA + '/Data').slice(0, 10);
const dataFiles = fs.readdirSync(ITURHFPROP_DATA + '/Data').slice(0, 15);
results.data.dataDir = dataFiles;
} catch (e) {
results.data.dataDir = { error: e.message };
}
// Check for ionospheric data
try {
const ionFiles = fs.readdirSync(ITURHFPROP_DATA + '/IonMap').slice(0, 5);
results.data.ionMapDir = ionFiles;
const ionosExists = fs.existsSync(ITURHFPROP_DATA + '/Data/ionos12.bin');
results.data.ionosData = ionosExists ? 'found' : 'missing';
} catch (e) {
results.data.ionMapDir = { error: e.message };
results.data.ionosData = { error: e.message };
}
// Try running ldd on the binary

Loading…
Cancel
Save

Powered by TurnKey Linux.