first commit
This commit is contained in:
11
Dockerfile
Normal file
11
Dockerfile
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
FROM python:3.11-slim
|
||||||
|
|
||||||
|
WORKDIR /usr/src/app
|
||||||
|
|
||||||
|
COPY requirements.txt ./
|
||||||
|
RUN apt-get update -y && apt-get install -y tk tcl
|
||||||
|
RUN pip install --force-reinstall -r requirements.txt
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
CMD [ "python", "./Shannon.py" ]
|
||||||
12
Dockerfile.save
Normal file
12
Dockerfile.save
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
FROM python:3.11-slim
|
||||||
|
|
||||||
|
WORKDIR /usr/src/app
|
||||||
|
|
||||||
|
COPY requirements.txt ./
|
||||||
|
echo "http://nova.clouds.archive.ubuntu.com/ubuntu jammy/main amd64 Packages" >
|
||||||
|
RUN apt install tk/jammy
|
||||||
|
RUN pip install --force-reinstall -r requirements.txt
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
CMD [ "python", "./Shannon.py" ]
|
||||||
8199
PySimpleGUIWeb.py
Normal file
8199
PySimpleGUIWeb.py
Normal file
File diff suppressed because it is too large
Load Diff
18
README.md
Normal file
18
README.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Shannon-for-Dummies
|
||||||
|
|
||||||
|
Educational application
|
||||||
|
|
||||||
|
Exploration from Claude's Shannon initial theory to its practical application to satellite communications.
|
||||||
|
|
||||||
|
The application is using PysimpleGUI / PySimpleGUIWeb and runs either in local windows or in web pages.
|
||||||
|
|
||||||
|
The Web version via localhost is fully functional although not as convenient as the windowed version (only 1 plot open).
|
||||||
|
The look of the web version differs significantly from the local version (PySimpleGUIWeb is still beta).
|
||||||
|
|
||||||
|
The Web version in remote does work for a single user (all users connected can send commands but see the same page).
|
||||||
|
This mode is experimental and doesn't behave as a web server : users are not managed, the app closes when the user closes the window ...
|
||||||
|
|
||||||
|
The value of the application is essentially in the background information accessed by clicking labels of all inputs / outputs.
|
||||||
|
|
||||||
|
A Knowledge DB is coupled to the application for collaborative contributions on the subject opening technical discussions. At this stage the DB is local.
|
||||||
|
|
||||||
BIN
Satellite.png
Normal file
BIN
Satellite.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
BIN
Shannon.png
Normal file
BIN
Shannon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 122 KiB |
1028
Shannon.py
Normal file
1028
Shannon.py
Normal file
File diff suppressed because it is too large
Load Diff
1024
Shannon.py.save
Normal file
1024
Shannon.py.save
Normal file
File diff suppressed because it is too large
Load Diff
330
Shannon_Dict.py
Normal file
330
Shannon_Dict.py
Normal file
@@ -0,0 +1,330 @@
|
|||||||
|
|
||||||
|
Help={'-iCNR-':'Reference C/N [dB]\n\nReference Carrier to Noise Ratio in decibels : 10 log (C/N), where C is the '
|
||||||
|
'Carrier\'s power and N is the Noise\'s Power, both are measured in the reference '
|
||||||
|
'Channel Bandwidth.\n\nThe Carrier\'s power if often named Signal\'s Power and the Carrier to Noise Ratio'
|
||||||
|
' is often named Signal to Noise Ratio.',
|
||||||
|
'-iBW-':'Reference BW [MHz]\n\nReference Channel Bandwidth, this is a key parameter of the communication channel.'
|
||||||
|
'\n\nThis bandwidth is usually a degree of freedom of the system design, eventually constrained by technological'
|
||||||
|
' constraints and various kind of frequency usage regulations.',
|
||||||
|
'-iC_N0-':'Carrier Power to Noise Power Density Ratio : C/N\N{SUBSCRIPT ZERO}\n\nCarrier\'s power (in Watts) '
|
||||||
|
'divided by the Noise Spectral Power Density (in Watts per MHz), the result\'s units are MHz.',
|
||||||
|
'-iBRinf-':'Theoretical BR at infinite BW : 1.44 C/N\N{SUBSCRIPT ZERO}\n\nBit Rate theoretically achievable when '
|
||||||
|
'the signal occupies an infinite Bandwidth, this value is a useful asympotical limit.',
|
||||||
|
'-iBRunit-':'Theoretical BR at Spectral Efficiency = 1 : C/N\N{SUBSCRIPT ZERO}\n\nBit Rate theoretically '
|
||||||
|
'achievable at a Spectral Efficiency = 1 : Bit Rate in Mbps = Bandwith in MHz.'
|
||||||
|
'\n\nThe corresponding value, deduced from the Shannon\'s formula is given by C/N\N{SUBSCRIPT ZERO}.',
|
||||||
|
'-iBRbw-':'Theoretical BR at Reference (BW,C/N)\n\nBit Rate theoretically achievable when the Bandwidth is '
|
||||||
|
'constrained to the given reference value.',
|
||||||
|
'-iCNRlin-':'C / N = C / (N\N{SUBSCRIPT ZERO}.B)\n\nReference Carrier to Noise Ratio (or Signal to Noise Ratio).'
|
||||||
|
' The C/N Ratio or CNR is usually given in dBs or 10 log (C/N). '
|
||||||
|
'\n\nAlthough the logarithm is convenient for many evaluations (multiplications become additions), '
|
||||||
|
'it\'s also good to consider the ratio itself (named here Linear '
|
||||||
|
'Format) to get some physical sense of the power ratio.'
|
||||||
|
'\n\nThe Carrier to Noise Ratio in linear format, is the value used in the Shannon\'s formula.',
|
||||||
|
'-iBRmul-':'Bit Rate Increase Factor\n\nBit Rate multiplying factor achieved when the Bandwidth and the Power '
|
||||||
|
'and multiplied by a given set of values.',
|
||||||
|
'-iCmul-':'Power Increase Factor\n\nArbitrary multiplying factor applied to the Carrier\'s Power, for '
|
||||||
|
'sensitivity analysis.',
|
||||||
|
'-iBWmul-':'BW Increase Factor\n\nArbitrary multiplying factor applied to the Carrier\'s Bandwidth, for '
|
||||||
|
'sensitivity analysis.',
|
||||||
|
'-CRC-':'Cyclic Redundancy Check of the input parameters, for changes identification purposes.\n\n'
|
||||||
|
'https://en.wikipedia.org/wiki/Cyclic_redundancy_check',
|
||||||
|
'Advanced': 'The model assumes that the communication channel is \"AWGN\", just Adding White Gaussian Noise to '
|
||||||
|
'the signal. This noise is supposed to be random and white which means that noise at a given time is '
|
||||||
|
'independent of noise at any other time, this implies that the noise has a flat and infinite spectrum.'
|
||||||
|
'This noise is also supposed to be Gaussian which means that its probability density function follows a '
|
||||||
|
'Gaussian law, with a variance associated to the Noise\'s power.\n\n'
|
||||||
|
'Although these assumptions seem very strong, they are quite accurately matching the cases of interest. '
|
||||||
|
'Many impairments are actually non linear and/or non additive, but just combining equivalent C/N of all '
|
||||||
|
'impairments as if they were fully AWGN is in most of the cases very accurate.'
|
||||||
|
'The reason for that is that the sum of random variables of unknown laws always tend to Gaussian and that '
|
||||||
|
'in most systems, thermal noise is dominating, is actually white and gaussian and is whitening the rest.\n\n'
|
||||||
|
'The tool accepts lists of comma separated CNRs which will be combined in that way. \n\n'
|
||||||
|
'In satellite systems, the noise is mainly coming from the electronics of the radio front end, the ground '
|
||||||
|
'seen by the antenna, the stars and the atmospheric attenuator. In case of rain, the signal is punished twice '
|
||||||
|
': the attenuation makes it weaker and the rain attenuator generates noise added to the overall noise.\n\n'
|
||||||
|
'Overall the Shannon Limit is a pretty convenient tool to predict the real performances of communication '
|
||||||
|
'systems and even more importantly to get a sense of the role of the key design parameters.',
|
||||||
|
'-iShannon-':'The Shannon Limit allows to evaluate the theoretical capacity achievable over a communication '
|
||||||
|
'channel.\n\nAs a true genius, Claude Shannon has funded the communication theory, the information theory '
|
||||||
|
'and more (click the Wikipedia button for more info).\n\nThis equation is fundamental for the evaluation of '
|
||||||
|
'communication systems. It is an apparently simple but extremely powerful tool to guide communication systems\''
|
||||||
|
' designs.\n\nThis equation tells us what is achievable, not how to achieve it. It took almost 50 years to '
|
||||||
|
'approach this limit with the invention of Turbo codes.\n\nIn the satellite domain, DVB-S2x, using LDPC codes '
|
||||||
|
'iteratively decoded (Turbo-Like), is only 1 dB away from this limit.',
|
||||||
|
'Help': 'Recommendations for using the tool\n\nThe first purpose of the tool is educational, allowing people to '
|
||||||
|
'better understand the physics of communications and the role of key parameters.\n\n'
|
||||||
|
'The user should try multiple values in all the fields one per one, explore the graphs and try to '
|
||||||
|
'understand the underlying physics.\n\n'
|
||||||
|
'The units for the different figures are as explicit as possible to facilitate the exploration.\n\n'
|
||||||
|
'All labels can be \"clicked\" to get information about associated item. All values (including this text)'
|
||||||
|
' can be copy/pasted for further usage.'
|
||||||
|
}
|
||||||
|
|
||||||
|
Help2={'-iFreq-':'Frequency [GHz]\n\nFrequency of the electromagnetic wave supporting the communication in GHz '
|
||||||
|
'(billions of cycles per second).\n\nFor satellite downlink (satellite to terminal), frequency bands '
|
||||||
|
'and frequencies are typically : L : 1.5 GHz , S : 2.2 GHz , C : 4 GHz , Ku : 12 GHz, Ka : 19 GHz, '
|
||||||
|
'Q : 40 GHz',
|
||||||
|
'-iSatAlt-':'Satellite Altitude [km]\n\nThe position of the satellite is expressed in latitude, longitude, '
|
||||||
|
'altitude. The program doesnt simulate the orbit, any satellite coordinates can be used. '
|
||||||
|
'A GEO satellite has a latitude of zero degrees and an altitude of 35786 km. LEO satellites '
|
||||||
|
'have an altitude lower than 2000 km. MEO\'s altitudes are between LEO and GEO : the O3B '
|
||||||
|
'constellation\'s altitude is 8063 km',
|
||||||
|
'-iSatLatLong-':'Satellite Latitude and Longitude [\N{DEGREE SIGN}]\n\nThe position of the satellite is '
|
||||||
|
'expressed in latitude, longitude, altitude. The program doesnt simulate the orbit, any '
|
||||||
|
'satellite coordinates can be used. A GEO satellite has a latitude of zero degrees and an '
|
||||||
|
'altitude of 35786 km. LEO satellites have an altitude lower than 2000 km. MEO\'s altitudes are'
|
||||||
|
' between LEO and GEO : the O3B constellation\'s altitude is 8063 km',
|
||||||
|
'-iGSLatLong-':'Ground Station Latitude and Longitude [\N{DEGREE SIGN}]\n\nThe position of the ground station '
|
||||||
|
'is expressed in latitude, longitude (the ground station is assumed to be at the surface of '
|
||||||
|
'the earth).\n\nThe position of the ground station is affecting the link availability due to'
|
||||||
|
' the differences in weather statistics at different locations on earth (tropical regions have '
|
||||||
|
'very heavy rains attenuating dramatically signals at high frequencies). It is also impacting '
|
||||||
|
'the elevation angle at which the satellite is seen and thus the length of the path in the rain.'
|
||||||
|
'\n\nThe position of the ground station is also impacting the overall path length and thus the '
|
||||||
|
'path dispersion loss.\n\nUseful link to find coordinates of interest : '
|
||||||
|
'https://www.gps-coordinates.net',
|
||||||
|
'-iAvail-':'Desired Link Availability [%]\n\nThe link availability in percentage of the time is a key '
|
||||||
|
'performance indicator for satellite communications.\n\nIn this program the only cause of '
|
||||||
|
'unavailability modelled in a probabilistic way is the attenuation caused by the atmosphere. A high '
|
||||||
|
'desired link availability corresponds to a high signal attenuation : only rare and severe weather '
|
||||||
|
'events exceeding this attenuation can interrupt the link.\n\nFor example for an availability of'
|
||||||
|
'99.9%, the attenuation considered in the link sizing is only exceeded for 0.1% of the time.',
|
||||||
|
'-iPathLength-':'Path Length [km] @ Elevation [\N{DEGREE SIGN}]\n\nDistance in kilometers from the satellite '
|
||||||
|
'to the ground station and elevation angle at which the satellite is seen. The actual distance'
|
||||||
|
' depends on the satellite\'s altitude and on the relative positions of the satellite and the '
|
||||||
|
'ground station.\n\nThe minimum path length is the satellite altitude, achieved when the ground'
|
||||||
|
' station is under the satellite (elevation = 90\N{DEGREE SIGN}).\n\nA negative elevation '
|
||||||
|
'implies that the satellite is not visible (beyond the horizon).',
|
||||||
|
'-iAtmLoss-':'Overall Atmospheric Attenuation [dB]\n\nThe Atmosphere is affecting radio wave propagation '
|
||||||
|
'with a signal attenuation caused by rain precipitations and clouds, by scintillation and '
|
||||||
|
'multi path effects, by sand and dust storms and also by atmospheric gases. \n\n'
|
||||||
|
'Simply speaking, the attenuation is increasing with the rain intensity and with the signal '
|
||||||
|
'frequency. C band is almost unaffected, Ku band is significantly affected, Ka band is severely '
|
||||||
|
'affected, Q band is dramatically affected\n\nThe overall attenuation depends on the actual '
|
||||||
|
'geographical location and on actual weather events. By nature, it is is thus statistical '
|
||||||
|
'(considering the past) or probabilistic (considering the future).\n\nAll effects included, '
|
||||||
|
'here are typical attenuation figures exceeded for 0.1% of the time in Europe from the GEO orbit '
|
||||||
|
': Ku: 2.5 dB, Ka: 6.9 dB, 22 dB \n\n'
|
||||||
|
'The program uses ITU-Rpy, python implementation of the ITU-R P Recommendations: '
|
||||||
|
'https://itu-rpy.readthedocs.io/en/latest/index.html',
|
||||||
|
'-iHPA-':'HPA Power at operating point [W]\n\nPower of the High Power Amplifier used as a last stage of '
|
||||||
|
'amplification in the satellite payload.'
|
||||||
|
'The value in watts is the value at operating point and for the carrier of interest.\n\n'
|
||||||
|
'Some satellites operate their HPAs at saturation in single carrier mode (typical DTH case).'
|
||||||
|
'Other satellites operate in multicarrier mode and reduced power (3dB Output Back Off is typical '
|
||||||
|
'for satellites serving VSATs)',
|
||||||
|
'-iSBeam-':'Satellite Half Power Beam Diameter [\N{DEGREE SIGN}]\n\nBeam diameter expressed as an angle at '
|
||||||
|
'satellite level. The power radiated at the edge of this beam is half of the power radiated at '
|
||||||
|
'the peak of the beam (on-axis value).\n\n'
|
||||||
|
'The beam evaluated is a basic one with simple illumination of a parabolic reflector\n\n'
|
||||||
|
'Typical beam size : 0.4-1.4 degrees for GEO HTS satellites, 3..6 degrees for GEO DTH satellites.',
|
||||||
|
'-iGOff-': 'Gain Offset from Peak [dB]\n\nThis offset allows to simulate terminals which are not all at '
|
||||||
|
'the beam peak. A 3 dB value would simulate a worst case position in a 3dB beam, typical approach '
|
||||||
|
'used in DTH. In single feed per beam HTS, a 1 dB value would give a typical median performance.'
|
||||||
|
'If you know the EIRP you have, the best is to iterate this value to get this EIRP '
|
||||||
|
'(the process will allow you to get a feeling of the tradeoff power / footprint size / EIRP. ',
|
||||||
|
'-iLoss-':'Output Section Losses [dB]\n\nLoss of signal\'s power in the path connecting the HPA to the '
|
||||||
|
'antenna. This loss is associated with filters, waveguide sections, switches ...\n\n'
|
||||||
|
'Typical value : 2.5 dB for large classical satellites, 1 dB for active antennas with HPAs close to '
|
||||||
|
'the feeds. If the power value is given at antenna level, the value should just be set to zero.',
|
||||||
|
'-iSCIR-':'Satellite C/I [dB]\n\nEffect of signal impairments associated with satellite implementation,'
|
||||||
|
'expressed as a signal to impairment noise ratio to be combined with the intrinsic Signal to Noise '
|
||||||
|
'Ratio affecting the link. Typical impairments are : intermodulation in the HPA, filtering effects, '
|
||||||
|
'oscillator\'s phase noise ...\n\n'
|
||||||
|
'The tool supports comma separated lists of C/I or C/N values expressed in dB. In addition to '
|
||||||
|
'satellites impairments, one can use this feature to also simulate infrastructure C/N, uplink C/N, '
|
||||||
|
'uplink interferences ...',
|
||||||
|
'-iOPow-':'Output Power [W]\n\nThe output power in watts at antenna output is associated with the useful '
|
||||||
|
'signal carrying user\'s information. It is also common to express this value in dBs (dBs transform '
|
||||||
|
'multiplications in additions, easier for human computation. Nevertheless, reasoning in watts tells '
|
||||||
|
'more about the physics.',
|
||||||
|
'-iSGain-':'Satellite Antenna Gain \n\nAn antenna concentrating the signal in the direction of the users is '
|
||||||
|
'almost always required to compensate for the path loss associated with the distance from the '
|
||||||
|
'satellite to the terminal.\n\nThe antenna gain is the ratio between the signal radiated '
|
||||||
|
'on the axis of the antenna (direction of maximum radiation) and the signal radiated by an '
|
||||||
|
'antenna radiating equally in all directions (for the same input power).\n\n'
|
||||||
|
'Antenna gains are without units but can be expressed in dB for convenience : dBi = dB relative to'
|
||||||
|
' isotropic antenna (antenna radiating equally in all directions)',
|
||||||
|
'-iEIRP-':'Equivalent Isotropic Radiated Power\n\nThe product Power x Gain expressed in Watts is a convenient '
|
||||||
|
'characterisation of the satellite radiation capability. It does correspond to the power which would '
|
||||||
|
'be required for an isotropic antenna radiating in the same way in the direction of the antenna '
|
||||||
|
'considered.\n\nThere is no "power creation" of course : for the directive antenna, the integral of '
|
||||||
|
'the radiated signal over a sphere centered on the antenna is at best equal to the input power '
|
||||||
|
'(lossless antenna).\n\n'
|
||||||
|
'As the value in watts is usually pretty big, a value in dBW is more convenient '
|
||||||
|
'for practical human computations.',
|
||||||
|
'-iPLoss-':'Path Dispersion Loss\n\nAssuming communication in free space (thus also in the vacuum), '
|
||||||
|
'this figure characterises the effect'
|
||||||
|
' of the distance from the satellite to the terminal. It gives an attenuation equivalent to the '
|
||||||
|
'inverse ratio of the power reaching one square meter at the terminal side and the equivalent '
|
||||||
|
'isotropic radiated power at satellite level.\n\n'
|
||||||
|
'This simply equals the surface in square meters of a sphere with a radius equal to the path length.'
|
||||||
|
'This attenuation is pretty big and is thus more humanly manageable in dB m\N{SUPERSCRIPT TWO}.\n\n'
|
||||||
|
'As the the vacuum is lossless, this "attenuation" is simply associated with the fact that only '
|
||||||
|
'a marginal fraction of the power radiated is captured in one square meter at destination, '
|
||||||
|
'the rest is going somewhere else.',
|
||||||
|
'-iPFD-':'Power Flux Density\n\nSignal power per square meter at the terminal side. '
|
||||||
|
'The actual power captured by the terminal is given by this value multiplied by the effective surface '
|
||||||
|
'of the terminal\'s antenna.\n\nNote that if the surface of antenna is not perpendicular to the '
|
||||||
|
'propagation direction of the radio wave, the effective surface presented to the wave is reduced '
|
||||||
|
'and less power is captured.',
|
||||||
|
'-iCPE-':'Customer Antenna Size [m]\n\nSize of the terminal antenna. A basic parabolic antenna with state of '
|
||||||
|
'the art efficiency is assumed.\n\n'
|
||||||
|
'The main source of noise is in general the terminal\'s radio front end'
|
||||||
|
' attached to the antenna. A state of the art Noise Temperature of 80K is assumed for this front end.',
|
||||||
|
'-iCPE_T-':'Noise Temperature [K]\n\nTotal Receiver\'s Clear Sky Noise Temperature. It includes all noise '
|
||||||
|
'temperature\'s contributors : receiver, sky, ground seen by the antenna... Antenna catalogs often '
|
||||||
|
'provide this value, the proposed default of 120K is a reasonable typical value. The computation '
|
||||||
|
'under rain fade conditions assumes 40K is affected by rain attenuation and the rest is not. ',
|
||||||
|
'-iCGain-':'Customer Antenna Effective Area and G/T\n\nThe effective area in square meters is expressing the '
|
||||||
|
'capability of the terminal to capture the Power Flux Density '
|
||||||
|
'(the multiplication of both give the power captured). The effective area is typically 60% of the '
|
||||||
|
'physical surface of the antenna\'s aperture.'
|
||||||
|
'This capability can also be equivalently expressed as a gain as it\'s the case for the satellite '
|
||||||
|
'antenna.\n\nThe figure of merit of a receive antenna is best expressed as the G/T ratio, '
|
||||||
|
'ratio between antenna gain and the total Noise temperature in Kelvins. The noise is mainly coming '
|
||||||
|
'from the electronics of the radio front end, the ground seen by the antenna, the stars and the '
|
||||||
|
'atmospheric attenuator.\n\nIn case of rain, the signal is punished twice : the '
|
||||||
|
'attenuation makes it weaker and the rain attenuator generates noise added to the overall noise.\n\n'
|
||||||
|
'The noise power density N\N{SUBSCRIPT ZERO} is derived from the noise temperature with a very '
|
||||||
|
'simple formula : N\N{SUBSCRIPT ZERO}=kTB (k being the Boltzmann constant), '
|
||||||
|
'the G/T leads easily to the key overall link figure of merit C/N\N{SUBSCRIPT ZERO}.',
|
||||||
|
'-iRXPow-':'RX Power at Antenna Output\n\nPower at receiver\'s antenna output before amplification. '
|
||||||
|
'This power is extremely small and can only be exploited after strong amplification.\n\n'
|
||||||
|
'As the main source of noise is in general coming from this amplification, the first amplification '
|
||||||
|
'stage has to be a Low Noise Amplifier.\n\nThis power is "C" in the Shannon\'s equation.',
|
||||||
|
'-iN0-' : 'Noise Power Density Antenna Output\n\nNoise Spectral Power Density of the radio front end under '
|
||||||
|
'actual link conditions (in Watts per MHz). '
|
||||||
|
'This PSD is N\N{SUBSCRIPT ZERO} in the Shannon\'s equation',
|
||||||
|
'-iBRinf-':'Bit Rate at infinite Bandwidth\n\nBit Rate theoretically achievable when the signal occupies an '
|
||||||
|
'infinite Bandwidth, this value is a useful asymptotic limit. The corresponding value, deduced '
|
||||||
|
'from the Shannon\'s formula is given by 1.443 C/N\N{SUBSCRIPT ZERO}\n\nThis bit rate is an '
|
||||||
|
'asymptotic value and is thus never achieved in practice.',
|
||||||
|
'-iBRhalf-':'Bit Rate at Spectral Efficiency=1/2\n\nBit Rate theoretically achievable at a Spectral Efficiency '
|
||||||
|
'= 1/2. The corresponding value, deduced from the Shannon\'s formula is given by 1.207 '
|
||||||
|
'C/N\N{SUBSCRIPT ZERO}\n\nThis operating point is bandwidth intensive ( bandwidth = 2 x bit rate). '
|
||||||
|
'Practical systems allow this operating point ( DVB-S2\'s QPSK 1/4 )',
|
||||||
|
'-iBRUnit-':'Bit Rate at Spectral Efficiency=1\n\nBit Rate theoretically achievable at a Spectral Efficiency '
|
||||||
|
'= 1. The corresponding value, deduced from the Shannon\'s formula is given by '
|
||||||
|
'C/N\N{SUBSCRIPT ZERO}.\n\nThis data point has remarkable attributes : bandwidth = bit rate and '
|
||||||
|
'C/N = 1 (equivalent to 0 dB), which means Noise Power = Signal Power.',
|
||||||
|
'-iBRdouble-':'Bit Rate at Spectral Efficiency=2\n\nBit Rate theoretically achievable at a Spectral Efficiency '
|
||||||
|
'= 1. The corresponding value, deduced from the Shannon\'s formula is given by '
|
||||||
|
'0.667 C/N\N{SUBSCRIPT ZERO}.\n\nThis operating point is relatively bandwidth efficient '
|
||||||
|
'( bandwidth = 0.5 x bit rate) and is often considered as a typical setting.',
|
||||||
|
'-iBW-':'Available Bandwidth [MHz]\n\nBandwith occupied by the communication channel. This bandwidth is usually'
|
||||||
|
' a degree of freedom of the system design, eventually constrained by technological constraints and '
|
||||||
|
'various kind of frequency usage regulations. Interestingly this parameter is also often mentally '
|
||||||
|
'constrained by past usages which were driven by technological constraints at that time.',
|
||||||
|
'-iRO-':'Nyquist Filter Rolloff [%]\n\n'
|
||||||
|
'To pass a limited bandwidth channel symbol have to be mapped on pulses, "filtered" to limit the '
|
||||||
|
'Bandwidth occupied. Theoretically, filtering can be "brickwall", one symbol per second passing in '
|
||||||
|
'1 Hertz. Practically, an excess of bandwidth is required, also called "Roll-Off of the filter.\n\n'
|
||||||
|
'The filter used is designed to respect the symmetry condition expressed in the Nyquist Criterion '
|
||||||
|
'avoiding inter-symbol interferences. Such a filter is called a Nyquist Filter. '
|
||||||
|
'and the mimimum theoretical bandwidth (Roll-Off = zero) is called Nyquist Bandwidth.\n\n'
|
||||||
|
'The Roll-Off or Excess of Bandwidth is usually expressed as a percentage of the Nyquist Bandwidth.',
|
||||||
|
'-iCIR-':'Receiver\'s C/I [dB]\n\nEffect of signal impairment associated with terminal implementation, '
|
||||||
|
'expressed as a signal to noise ratio to be combined with the intrinsic Signal to Noise Ratio affecting'
|
||||||
|
' the link.\n\nImpairments are multiple : Phase Noise of the radio front end, Quantization Noise of the'
|
||||||
|
' receiver\'s Analog to Digital Conversion, effect of imperfect synchronisation ...\n\n'
|
||||||
|
'The tool supports comma separated lists of C/I or C/N values expressed in dB. In addition to the '
|
||||||
|
'overall receiver\'s impairments, one can use this feature to simulate more details : downlink '
|
||||||
|
'interferences, LNB\'s phase noise, impairment of signal distribution ...\n\nNote that signal '
|
||||||
|
'impairments associated with the satellite and the receiver are combined together with the link '
|
||||||
|
'noise to evaluate the practical bit rate.',
|
||||||
|
'-iPenalty-':'Implementation Penalty vs theory [dB]\n\nTurbo and Turbo-like Codes are known for getting '
|
||||||
|
'"almost Shannon" performances. There are however still some implementation taxes '
|
||||||
|
': codes always have a residual bit error rate, making it very low requires some CNR margin.\n\n'
|
||||||
|
'Other practical aspects also cost signal\'s energy like time and frequency synchronisation, '
|
||||||
|
'physical layer framing...\n\nDVB-S2x, using LDPC codes and modern modulation related features '
|
||||||
|
'is typically 1 dB away of the Shannon Limit in Quasi Error Free operation. Real systems also have'
|
||||||
|
' to take margins, considering a reasonable value of 0.5 dB, a total penalty of 1.5 dB can be '
|
||||||
|
'considered as typical.\n\n'
|
||||||
|
'Original Turbo codes designed with higher residual bit error rates can get much closer '
|
||||||
|
'to the Shannon Limit. ',
|
||||||
|
'-iOH-':'Higher Layers Overhead [%]\n\nThe practical usage of information bits is based on a breakdown '
|
||||||
|
'in multiple communications layers, all spending bits for the logistics of carrying user bits.'
|
||||||
|
'For example, the process of encapsulation of IP datagrams on a DVB-S2x physical layer using'
|
||||||
|
' the GSE standard costs a few percents of net bit rate, spent in framing structures, integrity '
|
||||||
|
'control bits ...\n\n'
|
||||||
|
'In a modern efficient satellite forward communication system the overhead to IP costs typically 5%',
|
||||||
|
'-iNBW-':'Nyquist Bandwidth\n\nThe modulated carrier is passing bits in groups mapped on modulation symbols.'
|
||||||
|
'Satellite modulation schemes typically map from 1 to 8 bits on each symbol passing though the channel.'
|
||||||
|
'The Bit Rate is directly linked to the symbol rate, the number of symbols per second passing '
|
||||||
|
'the channel ( BR = SR . Number of Bits per Symbol ).\n\n'
|
||||||
|
'To pass a bandwidth limited channel, symbols have to be mapped on pulses "filtered" to limit the '
|
||||||
|
'bandwidth. Theoretically, filtering can be "brickwall", one symbol per second passing in 1 Hertz.'
|
||||||
|
'Practically, an excess of bandwidth is required, also called "Roll-Off of the filter. '
|
||||||
|
'The filter used is also designed to respect the symmetry condition expressed in the Nyquist Criterion '
|
||||||
|
'avoiding inter-symbol interferences. Such a filter is thus called Nyquist Filter '
|
||||||
|
'and the minimum theoretical bandwidth (Roll-Off = zero) is called Nyquist Bandwidth.',
|
||||||
|
'-iCNRbw-':'Signal to Noise Ratio in Available BW\n\n Ratio of the Signal Power and the Noise Power Captured '
|
||||||
|
' in the available bandwidth.',
|
||||||
|
'-iCNRnyq-':'Signal to Noise Ratio in Nyquist BW\n\nRatio of the Signal Power and the Noise Power Captured '
|
||||||
|
' in the Nyquist Bandwidth = Available Bandwidth / ( 1 + Roll-Off).',
|
||||||
|
'-iCNRrcv-':'Signal to Noise Ratio at Receiver Output\n\nRatio of the Signal Power and the total Noise Power'
|
||||||
|
' captured along the complete communication chain (at receiver ouptut). This ratio is the relevant one'
|
||||||
|
' for real-life performance evaluation. It is computed by combining the Signal to Noise in the Nyquist '
|
||||||
|
'Bandwidth, the Receiver\'s C/I and the Satellite\'s C/I. Note that these 2 items are themselves '
|
||||||
|
'resulting of many items which can be detailed as comma separated lists.',
|
||||||
|
'-iBRbw-':'Theoretical Bit Rate in Available BW\n\nBit Rate theoretically achieved with zero Roll-Off in '
|
||||||
|
'the available bandwidth. This bit rate is given by a direct application of the Shannon Limit. '
|
||||||
|
'The normalized bit rate expressed as a percentage of the bit rate at infinite bandwidth is also given '
|
||||||
|
'as well as the spectral efficiency of the available bandwidth.',
|
||||||
|
'-iBRnyq-':'Theoretical Bit Rate in Nyquist BW\n\nBit Rate theoretically achieved in '
|
||||||
|
'the Nyquist bandwidth (after having removed the Nyquist Roll-Off from the available Bandwidth).'
|
||||||
|
'This bit rate is given by a direct application of the Shannon Limit.\n\nThe normalized bit rate '
|
||||||
|
'expressed as a percentage of the bit rate at infinite bandwidth is also given as well as the spectral '
|
||||||
|
'efficiency of the available bandwidth.\n\nThe efficiency in bit per symbol is also given and does '
|
||||||
|
'correspond to the classical spectral efficiency in the Nyquist bandwidth.',
|
||||||
|
'-iBRrcv-':'Practical Physcial Layer Bit Rate\n\n Practical Bit Rate achieved using real-world conditions. '
|
||||||
|
'This bit rate is evaluated by using the "all degradations included" signal to noise ratio'
|
||||||
|
'in the Shannon\'s formula.'
|
||||||
|
'This bit rate does correspond to the user bits of the Physical Layer Frames.',
|
||||||
|
'-iBRhigh-':'Practical Higher Layers Bit Rate\n\nPractical Bit Rate achieved using real-world modulation '
|
||||||
|
'and coding and modern encapsulation methods of higher layers strcutures.\n\nThis Bit Rate does '
|
||||||
|
'typically correspond to the user bits of the IP datagrams',
|
||||||
|
'-Satellite-':'The evaluation is decomposed in 3 sections:\n\n'
|
||||||
|
'1. The satellite link : satellite transmitter and path to the receiver\'s location with '
|
||||||
|
'associated key characteristics \n\n'
|
||||||
|
'2. The radio front end : antenna and amplification unit capturing as much signal as possible '
|
||||||
|
'and as little noise as possible\n\n'
|
||||||
|
'3. The base-band processing unit : unit extracting from a modulated carrier the useful '
|
||||||
|
'information bits.'
|
||||||
|
' All key functions are usually performed via digital signal processing : Nyquist filtering, '
|
||||||
|
'synchronisation, demodulation, error correction, higher layer "decapsulation"...\n\n'
|
||||||
|
'All fields are initially filled with meaningful values, you should start the exploration by '
|
||||||
|
'changing the straightforward parameters and keep the intimidating figures unchanged. '
|
||||||
|
'All parameters are "clickable" for getting associated background information.',
|
||||||
|
'-CRC1-': 'Cyclic Redundancy Check of the input parameters, for changes identification purposes.',
|
||||||
|
'-CRC2-': 'Cyclic Redundancy Check of the input parameters, for changes identification purposes.',
|
||||||
|
'-CRC3-': 'Cyclic Redundancy Check of the input parameters, for changes identification purposes.',
|
||||||
|
'Advanced': 'The Shannon Limit is a very powerful tool to analyse communication systems\' design, trade offs.'
|
||||||
|
'All capacity evaluations in this tool are based on direct application of this formula taking '
|
||||||
|
'into account real world impairments via signal to noise combinations. With this approach, '
|
||||||
|
'using the overall C/N evaluated for a practical communication link gives a good estimate of the '
|
||||||
|
'capacity achievable.\n\nApplying in addition the known average penalty of real modulation and '
|
||||||
|
'coding schemes makes it accurate enough for initial systems evaluations.\n\nThe analytic formulas '
|
||||||
|
'derived from the Shannon Limit for given spectral efficiencies are also of great help to drive '
|
||||||
|
'the thinking in practical trade-offs.\n\n'
|
||||||
|
'Additional useful links for people interested in a theoretical immersion :'
|
||||||
|
'https://en.wikipedia.org/wiki/Nyquist_ISI_criterion\n'
|
||||||
|
'https://en.wikipedia.org/wiki/Error_correction_code#Forward_error_correction\n'
|
||||||
|
'https://en.wikipedia.org/wiki/Viterbi_decoder\n'
|
||||||
|
'https://en.wikipedia.org/wiki/Turbo_code\n'
|
||||||
|
'https://en.wikipedia.org/wiki/DVB-S2\n'
|
||||||
|
'https://en.wikipedia.org/wiki/OSI_model\n',
|
||||||
|
'Help':'Recommendations for using the tool\n\nThe first purpose of the tool is educational, allowing people to '
|
||||||
|
'better understand the physics of communications and the role of key parameters\n\n'
|
||||||
|
'All labels can be \"clicked\" to get information about associated item. All values '
|
||||||
|
'(including this text) can be copy/pasted for further usage.\n\n'
|
||||||
|
'The user should try multiple values in the fields one per one (starting from the least intimidating), '
|
||||||
|
'explore the graphs and try to understand the underlying physics.\n\n'
|
||||||
|
'The units for the different figures are as explicit as possible to facilitate the exploration.\n\n'
|
||||||
|
'Despite the simplicity of the approach, the tool can also be useful to do a quick analysis of a '
|
||||||
|
'communication link with a first order approach, avoiding the trap of the illusion of precision.\n\n'
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
BIN
Shannon_Real.db
Normal file
BIN
Shannon_Real.db
Normal file
Binary file not shown.
BIN
Shannon_Theory.db
Normal file
BIN
Shannon_Theory.db
Normal file
Binary file not shown.
2
command.txt
Normal file
2
command.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
docker build -t my-python-app .
|
||||||
|
docker run -it --rm --name my-running-app --network=nginx-proxy --env VIRTUAL_HOST=shannon.antopoid.com --env LETSENCRYPT_HOST=shannon.antopoid.com --env LETSENCRYPT_EMAIL=poidevin.freeboxos.fr@gmail.com my-python-app
|
||||||
18
docker-compose.yml
Normal file
18
docker-compose.yml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
version: '3.1'
|
||||||
|
services:
|
||||||
|
python:
|
||||||
|
image: python.slim:latest
|
||||||
|
container_name: python
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
- VIRTUAL_HOST=shannon.antopoid.com
|
||||||
|
- LETSENCRYPT_HOST=shannon.antopoid.com
|
||||||
|
- LETSENCRYPT_EMAIL=poidevin.freeboxos.fr@gmail.com
|
||||||
|
ports:
|
||||||
|
- 8888:8080
|
||||||
|
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
external:
|
||||||
|
name: nginx-proxy
|
||||||
|
|
||||||
25
requirements.txt
Normal file
25
requirements.txt
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
HTMLParser
|
||||||
|
tk-tools==0.16.0
|
||||||
|
Flask==1.1.2
|
||||||
|
Jinja2==3.0.3
|
||||||
|
MarkupSafe==2.0.1
|
||||||
|
astropy==5.3
|
||||||
|
certifi==2021.10.8
|
||||||
|
cycler==0.11.0
|
||||||
|
fonttools==4.28.5
|
||||||
|
itur==0.3.3
|
||||||
|
kiwisolver==1.4.4
|
||||||
|
matplotlib==3.7.2
|
||||||
|
numpy==1.25
|
||||||
|
packaging==21.3
|
||||||
|
Pillow==10.0.0
|
||||||
|
pyerfa==2.0.0.3
|
||||||
|
pyparsing==3.0.6
|
||||||
|
pyproj==3.6.0
|
||||||
|
remi==2021.3.2
|
||||||
|
PySimpleGUI==4.60.5
|
||||||
|
python-dateutil==2.8.2
|
||||||
|
PyYAML==6.0
|
||||||
|
scipy==1.11.1
|
||||||
|
six==1.16.0
|
||||||
|
|
||||||
505
slim.report.json
Normal file
505
slim.report.json
Normal file
@@ -0,0 +1,505 @@
|
|||||||
|
{
|
||||||
|
"version": "1.1",
|
||||||
|
"engine": "linux|Transformer|1.40.4|d310b07567dc90763f5f27f94c618f057295b55d|2023-08-26_01:39:22AM",
|
||||||
|
"containerized": false,
|
||||||
|
"host_distro": {
|
||||||
|
"name": "Ubuntu",
|
||||||
|
"version": "22.04",
|
||||||
|
"display_name": "Ubuntu 22.04.3 LTS"
|
||||||
|
},
|
||||||
|
"type": "build",
|
||||||
|
"state": "done",
|
||||||
|
"target_reference": "python:latest",
|
||||||
|
"system": {
|
||||||
|
"type": "",
|
||||||
|
"release": "",
|
||||||
|
"distro": {
|
||||||
|
"name": "",
|
||||||
|
"version": "",
|
||||||
|
"display_name": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source_image": {
|
||||||
|
"identity": {
|
||||||
|
"id": "sha256:e13fe79153bbf089fb6bac4fc8710eae318c6aa124a1ba4aa609e1e136496543",
|
||||||
|
"tags": [
|
||||||
|
"latest"
|
||||||
|
],
|
||||||
|
"names": [
|
||||||
|
"python:latest"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"size": 1020536111,
|
||||||
|
"size_human": "1.0 GB",
|
||||||
|
"create_time": "2023-07-16T18:27:16Z",
|
||||||
|
"docker_version": "20.10.21",
|
||||||
|
"architecture": "amd64",
|
||||||
|
"os": "linux",
|
||||||
|
"env_vars": [
|
||||||
|
"PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
||||||
|
"LANG=C.UTF-8",
|
||||||
|
"GPG_KEY=A035C8C19219BA821ECEA86B64E628F8D684696D",
|
||||||
|
"PYTHON_VERSION=3.11.4",
|
||||||
|
"PYTHON_PIP_VERSION=23.1.2",
|
||||||
|
"PYTHON_SETUPTOOLS_VERSION=65.5.1",
|
||||||
|
"PYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/0d8570dc44796f4369b652222cf176b3db6ac70e/public/get-pip.py",
|
||||||
|
"PYTHON_GET_PIP_SHA256=96461deced5c2a487ddc65207ec5a9cffeca0d34e7af7ea1afc470ff0d746207"
|
||||||
|
],
|
||||||
|
"container_entry": {
|
||||||
|
"exe_path": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"minified_image_size": 267206999,
|
||||||
|
"minified_image_size_human": "267 MB",
|
||||||
|
"minified_image": "python.slim",
|
||||||
|
"minified_image_has_data": true,
|
||||||
|
"minified_by": 3.8192716314290855,
|
||||||
|
"artifact_location": "/tmp/slim-state/.slim-state/images/e13fe79153bbf089fb6bac4fc8710eae318c6aa124a1ba4aa609e1e136496543/artifacts",
|
||||||
|
"container_report_name": "creport.json",
|
||||||
|
"seccomp_profile_name": "python-seccomp.json",
|
||||||
|
"apparmor_profile_name": "python-apparmor-profile",
|
||||||
|
"image_stack": [
|
||||||
|
{
|
||||||
|
"is_top_image": true,
|
||||||
|
"id": "sha256:e13fe79153bbf089fb6bac4fc8710eae318c6aa124a1ba4aa609e1e136496543",
|
||||||
|
"full_name": "python:latest",
|
||||||
|
"repo_name": "python",
|
||||||
|
"version_tag": "latest",
|
||||||
|
"raw_tags": [
|
||||||
|
"python:latest"
|
||||||
|
],
|
||||||
|
"create_time": "2023-07-16T18:27:16Z",
|
||||||
|
"new_size": 1020536111,
|
||||||
|
"new_size_human": "1.0 GB",
|
||||||
|
"instructions": [
|
||||||
|
{
|
||||||
|
"type": "ADD",
|
||||||
|
"time": "2023-07-04T01:19:58Z",
|
||||||
|
"is_nop": true,
|
||||||
|
"local_image_exists": false,
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 74759018,
|
||||||
|
"size_human": "75 MB",
|
||||||
|
"params": "file:bd80a4461150784e5f2f5a1faa720cc347ad3e30ee0969adbfad574c316f5aef in /",
|
||||||
|
"command_snippet": "ADD file:bd80a4461150784e5f2f5a1faa720cc347a...",
|
||||||
|
"command_all": "ADD file:bd80a4461150784e5f2f5a1faa720cc347ad3e30ee0969adbfad574c316f5aef /",
|
||||||
|
"target": "/",
|
||||||
|
"source_type": "file",
|
||||||
|
"inst_set_time_bucket": "2023-07-04T01:15:00Z",
|
||||||
|
"inst_set_time_index": 1,
|
||||||
|
"inst_set_time_reverse_index": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "CMD",
|
||||||
|
"time": "2023-07-04T01:19:58Z",
|
||||||
|
"is_nop": true,
|
||||||
|
"is_exec_form": true,
|
||||||
|
"local_image_exists": false,
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 0,
|
||||||
|
"params": "[\"bash\"]\n",
|
||||||
|
"command_snippet": "CMD [\"bash\"]\n",
|
||||||
|
"command_all": "CMD [\"bash\"]\n",
|
||||||
|
"inst_set_time_bucket": "2023-07-04T01:15:00Z",
|
||||||
|
"inst_set_time_index": 1,
|
||||||
|
"inst_set_time_reverse_index": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ENV",
|
||||||
|
"time": "2023-06-13T17:45:16Z",
|
||||||
|
"is_nop": false,
|
||||||
|
"local_image_exists": false,
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 0,
|
||||||
|
"params": "PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
||||||
|
"command_snippet": "ENV PATH=/usr/local/bin:/usr/local/sbin:/usr...",
|
||||||
|
"command_all": "ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
||||||
|
"comment": "buildkit.dockerfile.v0",
|
||||||
|
"is_buildkit_instruction": true,
|
||||||
|
"inst_set_time_bucket": "2023-06-13T17:45:00Z",
|
||||||
|
"inst_set_time_index": 0,
|
||||||
|
"inst_set_time_reverse_index": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ENV",
|
||||||
|
"time": "2023-06-13T17:45:16Z",
|
||||||
|
"is_nop": false,
|
||||||
|
"local_image_exists": false,
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 0,
|
||||||
|
"params": "LANG=C.UTF-8",
|
||||||
|
"command_snippet": "ENV LANG=C.UTF-8",
|
||||||
|
"command_all": "ENV LANG=C.UTF-8",
|
||||||
|
"comment": "buildkit.dockerfile.v0",
|
||||||
|
"is_buildkit_instruction": true,
|
||||||
|
"inst_set_time_bucket": "2023-06-13T17:45:00Z",
|
||||||
|
"inst_set_time_index": 0,
|
||||||
|
"inst_set_time_reverse_index": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "RUN",
|
||||||
|
"time": "2023-06-13T17:45:16Z",
|
||||||
|
"is_nop": false,
|
||||||
|
"local_image_exists": false,
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 9214160,
|
||||||
|
"size_human": "9.2 MB",
|
||||||
|
"command_snippet": "RUN set -eux; \tapt-get update; \tapt-get inst...",
|
||||||
|
"command_all": "RUN set -eux; \tapt-get update; \tapt-get install -y --no-install-recommends \t\tca-certificates \t\tnetbase \t\ttzdata \t; \trm -rf /var/lib/apt/lists/*",
|
||||||
|
"system_commands": [
|
||||||
|
"set -eux",
|
||||||
|
"apt-get update",
|
||||||
|
"apt-get install -y --no-install-recommends ca-certificates netbase tzdata",
|
||||||
|
"rm -rf /var/lib/apt/lists/*"
|
||||||
|
],
|
||||||
|
"comment": "buildkit.dockerfile.v0",
|
||||||
|
"is_buildkit_instruction": true,
|
||||||
|
"inst_set_time_bucket": "2023-06-13T17:45:00Z",
|
||||||
|
"inst_set_time_index": 0,
|
||||||
|
"inst_set_time_reverse_index": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ENV",
|
||||||
|
"time": "2023-06-13T17:45:16Z",
|
||||||
|
"is_nop": false,
|
||||||
|
"local_image_exists": false,
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 0,
|
||||||
|
"params": "GPG_KEY=A035C8C19219BA821ECEA86B64E628F8D684696D",
|
||||||
|
"command_snippet": "ENV GPG_KEY=A035C8C19219BA821ECEA86B64E628F8...",
|
||||||
|
"command_all": "ENV GPG_KEY=A035C8C19219BA821ECEA86B64E628F8D684696D",
|
||||||
|
"comment": "buildkit.dockerfile.v0",
|
||||||
|
"is_buildkit_instruction": true,
|
||||||
|
"inst_set_time_bucket": "2023-06-13T17:45:00Z",
|
||||||
|
"inst_set_time_index": 0,
|
||||||
|
"inst_set_time_reverse_index": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ENV",
|
||||||
|
"time": "2023-06-13T17:45:16Z",
|
||||||
|
"is_nop": false,
|
||||||
|
"local_image_exists": false,
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 0,
|
||||||
|
"params": "PYTHON_VERSION=3.11.4",
|
||||||
|
"command_snippet": "ENV PYTHON_VERSION=3.11.4",
|
||||||
|
"command_all": "ENV PYTHON_VERSION=3.11.4",
|
||||||
|
"comment": "buildkit.dockerfile.v0",
|
||||||
|
"is_buildkit_instruction": true,
|
||||||
|
"inst_set_time_bucket": "2023-06-13T17:45:00Z",
|
||||||
|
"inst_set_time_index": 0,
|
||||||
|
"inst_set_time_reverse_index": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "RUN",
|
||||||
|
"time": "2023-06-13T17:45:16Z",
|
||||||
|
"is_nop": false,
|
||||||
|
"local_image_exists": false,
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 53218187,
|
||||||
|
"size_human": "53 MB",
|
||||||
|
"command_snippet": "RUN set -eux; \t\tsavedAptMark=\"$(apt-mark sho...",
|
||||||
|
"command_all": "RUN set -eux; \t\tsavedAptMark=\"$(apt-mark showmanual)\"; \tapt-get update; \tapt-get install -y --no-install-recommends \t\tdpkg-dev \t\tgcc \t\tgnupg \t\tlibbluetooth-dev \t\tlibbz2-dev \t\tlibc6-dev \t\tlibdb-dev \t\tlibexpat1-dev \t\tlibffi-dev \t\tlibgdbm-dev \t\tliblzma-dev \t\tlibncursesw5-dev \t\tlibreadline-dev \t\tlibsqlite3-dev \t\tlibssl-dev \t\tmake \t\ttk-dev \t\tuuid-dev \t\twget \t\txz-utils \t\tzlib1g-dev \t; \t\twget -O python.tar.xz \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz\"; \twget -O python.tar.xz.asc \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc\"; \tGNUPGHOME=\"$(mktemp -d)\"; export GNUPGHOME; \tgpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \"$GPG_KEY\"; \tgpg --batch --verify python.tar.xz.asc python.tar.xz; \tgpgconf --kill all; \trm -rf \"$GNUPGHOME\" python.tar.xz.asc; \tmkdir -p /usr/src/python; \ttar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; \trm python.tar.xz; \t\tcd /usr/src/python; \tgnuArch=\"$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)\"; \t./configure \t\t--build=\"$gnuArch\" \t\t--enable-loadable-sqlite-extensions \t\t--enable-optimizations \t\t--enable-option-checking=fatal \t\t--enable-shared \t\t--with-lto \t\t--with-system-expat \t\t--without-ensurepip \t; \tnproc=\"$(nproc)\"; \tEXTRA_CFLAGS=\"$(dpkg-buildflags --get CFLAGS)\"; \tLDFLAGS=\"$(dpkg-buildflags --get LDFLAGS)\"; \tLDFLAGS=\"${LDFLAGS:--Wl},--strip-all\"; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:-}\" \t\t\"PROFILE_TASK=${PROFILE_TASK:-}\" \t; \trm python; \tmake -j \"$nproc\" \t\t\"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \t\t\"LDFLAGS=${LDFLAGS:--Wl},-rpath='\\$\\$ORIGIN/../lib'\" \t\t\"PROFILE_TASK=${PROFILE_TASK:-}\" \t\tpython \t; \tmake install; \t\tcd /; \trm -rf /usr/src/python; \t\tfind /usr/local -depth \t\t\\( \t\t\t\\( -type d -a \\( -name test -o -name tests -o -name idle_test \\) \\) \t\t\t-o \\( -type f -a \\( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \\) \\) \t\t\\) -exec rm -rf '{}' + \t; \t\tldconfig; \t\tapt-mark auto '.*' > /dev/null; \tapt-mark manual $savedAptMark; \tfind /usr/local -type f -executable -not \\( -name '*tkinter*' \\) -exec ldd '{}' ';' \t\t| awk '/=>/ { so = $(NF-1); if (index(so, \"/usr/local/\") == 1) { next }; gsub(\"^/(usr/)?\", \"\", so); print so }' \t\t| sort -u \t\t| xargs -r dpkg-query --search \t\t| cut -d: -f1 \t\t| sort -u \t\t| xargs -r apt-mark manual \t; \tapt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \trm -rf /var/lib/apt/lists/*; \t\tpython3 --version",
|
||||||
|
"system_commands": [
|
||||||
|
"set -eux",
|
||||||
|
"savedAptMark=\"$(apt-mark showmanual)\"",
|
||||||
|
"apt-get update",
|
||||||
|
"apt-get install -y --no-install-recommends dpkg-dev gcc gnupg libbluetooth-dev libbz2-dev libc6-dev libdb-dev libexpat1-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libreadline-dev libsqlite3-dev libssl-dev make tk-dev uuid-dev wget xz-utils zlib1g-dev",
|
||||||
|
"wget -O python.tar.xz \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz\"",
|
||||||
|
"wget -O python.tar.xz.asc \"https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc\"",
|
||||||
|
"GNUPGHOME=\"$(mktemp -d)\"",
|
||||||
|
"export GNUPGHOME",
|
||||||
|
"gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \"$GPG_KEY\"",
|
||||||
|
"gpg --batch --verify python.tar.xz.asc python.tar.xz",
|
||||||
|
"gpgconf --kill all",
|
||||||
|
"rm -rf \"$GNUPGHOME\" python.tar.xz.asc",
|
||||||
|
"mkdir -p /usr/src/python",
|
||||||
|
"tar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz",
|
||||||
|
"rm python.tar.xz",
|
||||||
|
"cd /usr/src/python",
|
||||||
|
"gnuArch=\"$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)\"",
|
||||||
|
"./configure --build=\"$gnuArch\" --enable-loadable-sqlite-extensions --enable-optimizations --enable-option-checking=fatal --enable-shared --with-lto --with-system-expat --without-ensurepip",
|
||||||
|
"nproc=\"$(nproc)\"",
|
||||||
|
"EXTRA_CFLAGS=\"$(dpkg-buildflags --get CFLAGS)\"",
|
||||||
|
"LDFLAGS=\"$(dpkg-buildflags --get LDFLAGS)\"",
|
||||||
|
"LDFLAGS=\"${LDFLAGS:--Wl},--strip-all\"",
|
||||||
|
"make -j \"$nproc\" \"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \"LDFLAGS=${LDFLAGS:-}\" \"PROFILE_TASK=${PROFILE_TASK:-}\"",
|
||||||
|
"rm python",
|
||||||
|
"make -j \"$nproc\" \"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}\" \"LDFLAGS=${LDFLAGS:--Wl},-rpath='$$ORIGIN/../lib'\" \"PROFILE_TASK=${PROFILE_TASK:-}\" python",
|
||||||
|
"make install",
|
||||||
|
"cd /",
|
||||||
|
"rm -rf /usr/src/python",
|
||||||
|
"find /usr/local -depth ( ( -type d -a ( -name test -o -name tests -o -name idle_test ) ) -o ( -type f -a ( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' ) ) ) -exec rm -rf '{}' +",
|
||||||
|
"ldconfig",
|
||||||
|
"apt-mark auto '.*' > /dev/null",
|
||||||
|
"apt-mark manual $savedAptMark",
|
||||||
|
"find /usr/local -type f -executable -not ( -name '*tkinter*' ) -exec ldd '{}' '",
|
||||||
|
"' | awk '/=>/ { so = $(NF-1)",
|
||||||
|
"if (index(so, \"/usr/local/\") == 1) { next }",
|
||||||
|
"gsub(\"^/(usr/)?\", \"\", so)",
|
||||||
|
"print so }' | sort -u | xargs -r dpkg-query --search | cut -d: -f1 | sort -u | xargs -r apt-mark manual",
|
||||||
|
"apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false",
|
||||||
|
"rm -rf /var/lib/apt/lists/*",
|
||||||
|
"python3 --version"
|
||||||
|
],
|
||||||
|
"comment": "buildkit.dockerfile.v0",
|
||||||
|
"is_buildkit_instruction": true,
|
||||||
|
"inst_set_time_bucket": "2023-06-13T17:45:00Z",
|
||||||
|
"inst_set_time_index": 0,
|
||||||
|
"inst_set_time_reverse_index": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "RUN",
|
||||||
|
"time": "2023-06-13T17:45:16Z",
|
||||||
|
"is_nop": false,
|
||||||
|
"local_image_exists": false,
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 32,
|
||||||
|
"size_human": "32 B",
|
||||||
|
"command_snippet": "RUN set -eux; \tfor src in idle3 pydoc3 pytho...",
|
||||||
|
"command_all": "RUN set -eux; \tfor src in idle3 pydoc3 python3 python3-config; do \t\tdst=\"$(echo \"$src\" | tr -d 3)\"; \t\t[ -s \"/usr/local/bin/$src\" ]; \t\t[ ! -e \"/usr/local/bin/$dst\" ]; \t\tln -svT \"$src\" \"/usr/local/bin/$dst\"; \tdone",
|
||||||
|
"system_commands": [
|
||||||
|
"set -eux",
|
||||||
|
"for src in idle3 pydoc3 python3 python3-config",
|
||||||
|
"do dst=\"$(echo \"$src\" | tr -d 3)\"",
|
||||||
|
"[ -s \"/usr/local/bin/$src\" ]",
|
||||||
|
"[ ! -e \"/usr/local/bin/$dst\" ]",
|
||||||
|
"ln -svT \"$src\" \"/usr/local/bin/$dst\"",
|
||||||
|
"done"
|
||||||
|
],
|
||||||
|
"comment": "buildkit.dockerfile.v0",
|
||||||
|
"is_buildkit_instruction": true,
|
||||||
|
"inst_set_time_bucket": "2023-06-13T17:45:00Z",
|
||||||
|
"inst_set_time_index": 0,
|
||||||
|
"inst_set_time_reverse_index": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ENV",
|
||||||
|
"time": "2023-06-13T17:45:16Z",
|
||||||
|
"is_nop": false,
|
||||||
|
"local_image_exists": false,
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 0,
|
||||||
|
"params": "PYTHON_PIP_VERSION=23.1.2",
|
||||||
|
"command_snippet": "ENV PYTHON_PIP_VERSION=23.1.2",
|
||||||
|
"command_all": "ENV PYTHON_PIP_VERSION=23.1.2",
|
||||||
|
"comment": "buildkit.dockerfile.v0",
|
||||||
|
"is_buildkit_instruction": true,
|
||||||
|
"inst_set_time_bucket": "2023-06-13T17:45:00Z",
|
||||||
|
"inst_set_time_index": 0,
|
||||||
|
"inst_set_time_reverse_index": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ENV",
|
||||||
|
"time": "2023-06-13T17:45:16Z",
|
||||||
|
"is_nop": false,
|
||||||
|
"local_image_exists": false,
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 0,
|
||||||
|
"params": "PYTHON_SETUPTOOLS_VERSION=65.5.1",
|
||||||
|
"command_snippet": "ENV PYTHON_SETUPTOOLS_VERSION=65.5.1",
|
||||||
|
"command_all": "ENV PYTHON_SETUPTOOLS_VERSION=65.5.1",
|
||||||
|
"comment": "buildkit.dockerfile.v0",
|
||||||
|
"is_buildkit_instruction": true,
|
||||||
|
"inst_set_time_bucket": "2023-06-13T17:45:00Z",
|
||||||
|
"inst_set_time_index": 0,
|
||||||
|
"inst_set_time_reverse_index": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ENV",
|
||||||
|
"time": "2023-06-13T17:45:16Z",
|
||||||
|
"is_nop": false,
|
||||||
|
"local_image_exists": false,
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 0,
|
||||||
|
"params": "PYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/0d8570dc44796f4369b652222cf176b3db6ac70e/public/get-pip.py",
|
||||||
|
"command_snippet": "ENV PYTHON_GET_PIP_URL=https://github.com/py...",
|
||||||
|
"command_all": "ENV PYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/0d8570dc44796f4369b652222cf176b3db6ac70e/public/get-pip.py",
|
||||||
|
"comment": "buildkit.dockerfile.v0",
|
||||||
|
"is_buildkit_instruction": true,
|
||||||
|
"inst_set_time_bucket": "2023-06-13T17:45:00Z",
|
||||||
|
"inst_set_time_index": 0,
|
||||||
|
"inst_set_time_reverse_index": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ENV",
|
||||||
|
"time": "2023-06-13T17:45:16Z",
|
||||||
|
"is_nop": false,
|
||||||
|
"local_image_exists": false,
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 0,
|
||||||
|
"params": "PYTHON_GET_PIP_SHA256=96461deced5c2a487ddc65207ec5a9cffeca0d34e7af7ea1afc470ff0d746207",
|
||||||
|
"command_snippet": "ENV PYTHON_GET_PIP_SHA256=96461deced5c2a487d...",
|
||||||
|
"command_all": "ENV PYTHON_GET_PIP_SHA256=96461deced5c2a487ddc65207ec5a9cffeca0d34e7af7ea1afc470ff0d746207",
|
||||||
|
"comment": "buildkit.dockerfile.v0",
|
||||||
|
"is_buildkit_instruction": true,
|
||||||
|
"inst_set_time_bucket": "2023-06-13T17:45:00Z",
|
||||||
|
"inst_set_time_index": 0,
|
||||||
|
"inst_set_time_reverse_index": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "RUN",
|
||||||
|
"time": "2023-06-13T17:45:16Z",
|
||||||
|
"is_nop": false,
|
||||||
|
"local_image_exists": false,
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 12240418,
|
||||||
|
"size_human": "12 MB",
|
||||||
|
"command_snippet": "RUN set -eux; \t\tsavedAptMark=\"$(apt-mark sho...",
|
||||||
|
"command_all": "RUN set -eux; \t\tsavedAptMark=\"$(apt-mark showmanual)\"; \tapt-get update; \tapt-get install -y --no-install-recommends wget; \t\twget -O get-pip.py \"$PYTHON_GET_PIP_URL\"; \techo \"$PYTHON_GET_PIP_SHA256 *get-pip.py\" | sha256sum -c -; \t\tapt-mark auto '.*' > /dev/null; \t[ -z \"$savedAptMark\" ] || apt-mark manual $savedAptMark > /dev/null; \tapt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \trm -rf /var/lib/apt/lists/*; \t\texport PYTHONDONTWRITEBYTECODE=1; \t\tpython get-pip.py \t\t--disable-pip-version-check \t\t--no-cache-dir \t\t--no-compile \t\t\"pip==$PYTHON_PIP_VERSION\" \t\t\"setuptools==$PYTHON_SETUPTOOLS_VERSION\" \t; \trm -f get-pip.py; \t\tpip --version",
|
||||||
|
"system_commands": [
|
||||||
|
"set -eux",
|
||||||
|
"savedAptMark=\"$(apt-mark showmanual)\"",
|
||||||
|
"apt-get update",
|
||||||
|
"apt-get install -y --no-install-recommends wget",
|
||||||
|
"wget -O get-pip.py \"$PYTHON_GET_PIP_URL\"",
|
||||||
|
"echo \"$PYTHON_GET_PIP_SHA256 *get-pip.py\" | sha256sum -c -",
|
||||||
|
"apt-mark auto '.*' > /dev/null",
|
||||||
|
"[ -z \"$savedAptMark\" ] || apt-mark manual $savedAptMark > /dev/null",
|
||||||
|
"apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false",
|
||||||
|
"rm -rf /var/lib/apt/lists/*",
|
||||||
|
"export PYTHONDONTWRITEBYTECODE=1",
|
||||||
|
"python get-pip.py --disable-pip-version-check --no-cache-dir --no-compile \"pip==$PYTHON_PIP_VERSION\" \"setuptools==$PYTHON_SETUPTOOLS_VERSION\"",
|
||||||
|
"rm -f get-pip.py",
|
||||||
|
"pip --version"
|
||||||
|
],
|
||||||
|
"comment": "buildkit.dockerfile.v0",
|
||||||
|
"is_buildkit_instruction": true,
|
||||||
|
"inst_set_time_bucket": "2023-06-13T17:45:00Z",
|
||||||
|
"inst_set_time_index": 0,
|
||||||
|
"inst_set_time_reverse_index": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "CMD",
|
||||||
|
"time": "2023-06-13T17:45:16Z",
|
||||||
|
"is_nop": false,
|
||||||
|
"is_exec_form": true,
|
||||||
|
"local_image_exists": true,
|
||||||
|
"intermediate_image_id": "sha256:be2470db10f711ec941d24bc9a489dd457b6000b624ee251e19a445ad9f38839",
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 0,
|
||||||
|
"params": "[\"python3\"]\n",
|
||||||
|
"command_snippet": "CMD [\"python3\"]\n",
|
||||||
|
"command_all": "CMD [\"python3\"]\n",
|
||||||
|
"comment": "buildkit.dockerfile.v0",
|
||||||
|
"is_buildkit_instruction": true,
|
||||||
|
"inst_set_time_bucket": "2023-06-13T17:45:00Z",
|
||||||
|
"inst_set_time_index": 0,
|
||||||
|
"inst_set_time_reverse_index": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "WORKDIR",
|
||||||
|
"time": "2023-07-06T15:08:21Z",
|
||||||
|
"is_nop": true,
|
||||||
|
"local_image_exists": true,
|
||||||
|
"intermediate_image_id": "sha256:ad187361307c8e838bb1f0a48b91e97d83d7aea811827b4d2bab393284f739e0",
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 0,
|
||||||
|
"params": "/usr/src/app",
|
||||||
|
"command_snippet": "WORKDIR /usr/src/app",
|
||||||
|
"command_all": "WORKDIR /usr/src/app",
|
||||||
|
"system_commands": [
|
||||||
|
"mkdir -p /usr/src/app"
|
||||||
|
],
|
||||||
|
"inst_set_time_bucket": "2023-07-06T15:00:00Z",
|
||||||
|
"inst_set_time_index": 2,
|
||||||
|
"inst_set_time_reverse_index": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "COPY",
|
||||||
|
"time": "2023-07-12T20:36:09Z",
|
||||||
|
"is_nop": true,
|
||||||
|
"local_image_exists": true,
|
||||||
|
"intermediate_image_id": "sha256:a1b245cb980c1ac2c038a60bbe84fb8c65a1be6aedce32e15f29a53e4ea8e364",
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 398,
|
||||||
|
"size_human": "398 B",
|
||||||
|
"params": "file:1383fead6d13fe1a3d2822aaafeadc3c38b2cfeea627e71b14c63805820e09a2 in ./",
|
||||||
|
"command_snippet": "COPY file:1383fead6d13fe1a3d2822aaafeadc3c38...",
|
||||||
|
"command_all": "COPY file:1383fead6d13fe1a3d2822aaafeadc3c38b2cfeea627e71b14c63805820e09a2 ./",
|
||||||
|
"target": "./",
|
||||||
|
"source_type": "file",
|
||||||
|
"inst_set_time_bucket": "2023-07-12T20:30:00Z",
|
||||||
|
"inst_set_time_index": 3,
|
||||||
|
"inst_set_time_reverse_index": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "RUN",
|
||||||
|
"time": "2023-07-16T18:25:45Z",
|
||||||
|
"is_nop": false,
|
||||||
|
"local_image_exists": true,
|
||||||
|
"intermediate_image_id": "sha256:0bffdc8daa291358931fff5ca204342be123ed040aa8352657c0a97dc0da7a1b",
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 36428885,
|
||||||
|
"size_human": "36 MB",
|
||||||
|
"command_snippet": "RUN apt-get update -y && \\\n\tapt-get install ...",
|
||||||
|
"command_all": "RUN apt-get update -y && \\\n\tapt-get install -y tk tcl",
|
||||||
|
"system_commands": [
|
||||||
|
"apt-get update -y",
|
||||||
|
"apt-get install -y tk tcl"
|
||||||
|
],
|
||||||
|
"inst_set_time_bucket": "2023-07-16T18:15:00Z",
|
||||||
|
"inst_set_time_index": 4,
|
||||||
|
"inst_set_time_reverse_index": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "RUN",
|
||||||
|
"time": "2023-07-16T18:27:15Z",
|
||||||
|
"is_nop": false,
|
||||||
|
"local_image_exists": true,
|
||||||
|
"intermediate_image_id": "sha256:1087081f44d63fc4d50ed96db8ee05d9ec956c1dbbcd8b125511ced95b4c1d7e",
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 833949399,
|
||||||
|
"size_human": "834 MB",
|
||||||
|
"command_snippet": "RUN pip install --force-reinstall -r require...",
|
||||||
|
"command_all": "RUN pip install --force-reinstall -r requirements.txt",
|
||||||
|
"system_commands": [
|
||||||
|
"pip install --force-reinstall -r requirements.txt"
|
||||||
|
],
|
||||||
|
"inst_set_time_bucket": "2023-07-16T18:15:00Z",
|
||||||
|
"inst_set_time_index": 4,
|
||||||
|
"inst_set_time_reverse_index": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "COPY",
|
||||||
|
"time": "2023-07-16T18:27:16Z",
|
||||||
|
"is_nop": true,
|
||||||
|
"local_image_exists": true,
|
||||||
|
"intermediate_image_id": "sha256:7ae91476369b98ce3f0ec518e591385fdde2a0631944b93cb5672850c27086d5",
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 725614,
|
||||||
|
"size_human": "726 kB",
|
||||||
|
"params": "dir:c64af32925ea67cdf709617fb045107117c1bc58e9add8805e4e31a29cdfbc91 in .",
|
||||||
|
"command_snippet": "COPY dir:c64af32925ea67cdf709617fb045107117c...",
|
||||||
|
"command_all": "COPY dir:c64af32925ea67cdf709617fb045107117c1bc58e9add8805e4e31a29cdfbc91 .",
|
||||||
|
"target": ".",
|
||||||
|
"source_type": "dir",
|
||||||
|
"inst_set_time_bucket": "2023-07-16T18:15:00Z",
|
||||||
|
"inst_set_time_index": 4,
|
||||||
|
"inst_set_time_reverse_index": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "CMD",
|
||||||
|
"time": "2023-07-16T18:27:16Z",
|
||||||
|
"is_last_instruction": true,
|
||||||
|
"is_nop": true,
|
||||||
|
"is_exec_form": true,
|
||||||
|
"local_image_exists": true,
|
||||||
|
"layer_index": 0,
|
||||||
|
"size": 0,
|
||||||
|
"params": "[\"python\",\"./Shannon.py\"]\n",
|
||||||
|
"command_snippet": "CMD [\"python\",\"./Shannon.py\"]\n",
|
||||||
|
"command_all": "CMD [\"python\",\"./Shannon.py\"]\n",
|
||||||
|
"raw_tags": [
|
||||||
|
"python:latest"
|
||||||
|
],
|
||||||
|
"inst_set_time_bucket": "2023-07-16T18:15:00Z",
|
||||||
|
"inst_set_time_index": 4,
|
||||||
|
"inst_set_time_reverse_index": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"image_created": true,
|
||||||
|
"image_build_engine": "internal"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user