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 # 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" \ 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 \ && tar -xzf source.tar.gz \
&& echo "=== Top level ===" && ls -la ITU-R-HF-14.3/ \ && echo "=== Finding all Data directories ===" \
&& echo "=== Finding Data ===" && find ITU-R-HF-14.3 -type d -name "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 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 # Create Data directory and copy ALL required files from various locations
RUN if [ -d "ITU-R-HF-14.3/P533/Data" ]; then cp -r ITU-R-HF-14.3/P533/Data .; \ RUN mkdir -p Data \
elif [ -d "ITU-R-HF-14.3/Data" ]; then cp -r ITU-R-HF-14.3/Data .; \ && echo "=== Copying COEFF files ===" \
else echo "ERROR: Data not found!" && exit 1; fi && find ITU-R-HF-14.3 -name "COEFF*.BIN" -exec cp {} Data/ \; \
&& find ITU-R-HF-14.3 -name "COEFF*.txt" -exec cp {} Data/ \; \
# IonMap might be inside P533 or at root level && echo "=== Copying ionos files ===" \
RUN if [ -d "ITU-R-HF-14.3/P533/IonMap" ]; then cp -r ITU-R-HF-14.3/P533/IonMap .; \ && find ITU-R-HF-14.3 -name "ionos*.bin" -exec cp {} Data/ \; \
elif [ -d "ITU-R-HF-14.3/IonMap" ]; then cp -r ITU-R-HF-14.3/IonMap .; \ && echo "=== Copying antenna files ===" \
elif [ -d "ITU-R-HF-14.3/P533/Src/IonMap" ]; then cp -r ITU-R-HF-14.3/P533/Src/IonMap .; \ && find ITU-R-HF-14.3 -name "*.ant" -exec cp {} Data/ \; \
else echo "WARNING: IonMap not found, checking if embedded in Data..." && ls -la Data/; fi && 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 # Cleanup
RUN rm -rf ITU-R-HF-14.3 source.tar.gz 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 # Set library path so ITURHFProp can find shared libs
ENV LD_LIBRARY_PATH=/opt/iturhfprop:$LD_LIBRARY_PATH 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 \ RUN echo "=== Binary files ===" && ls -la /opt/iturhfprop/*.so /opt/iturhfprop/ITURHFProp \
&& echo "=== Data directory ===" && ls /opt/iturhfprop/Data/ | head -10 \ && echo "=== Data directory contents ===" && ls -la /opt/iturhfprop/Data/
&& echo "=== IonMap directory ===" && ls /opt/iturhfprop/IonMap/ | head -5
# Set up the API service # Set up the API service
WORKDIR /app WORKDIR /app

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

Loading…
Cancel
Save

Powered by TurnKey Linux.