Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[build_debian] Include checksum of ASIC config files in SONiC filesystem #3384

Merged
merged 9 commits into from
Sep 6, 2019
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions build_debian.sh
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,14 @@ build_number: ${BUILD_NUMBER:-0}
built_by: $USER@$BUILD_HOSTNAME
EOF

## Copy ASIC config checksum
python files/build_scripts/generate_asic_config_checksum.py
if [[ ! -f './asic_config_checksum' ]]; then
echo 'asic_config_checksum not found'
exit 1
fi
sudo cp asic_config_checksum $FILESYSTEM_ROOT/etc/sonic/asic_config_checksum

if [ -f sonic_debian_extension.sh ]; then
./sonic_debian_extension.sh $FILESYSTEM_ROOT $PLATFORM_DIR
fi
Expand Down
67 changes: 67 additions & 0 deletions files/build_scripts/generate_asic_config_checksum.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#!/usr/bin/env python

import syslog
import os
import hashlib

SYSLOG_IDENTIFIER = 'asic_config_checksum'

CHUNK_SIZE = 8192

CONFIG_FILES = {
os.path.abspath('./src/sonic-swss/swssconfig/sample/'): ['netbouncer.json', '00-copp.config.json']
}

OUTPUT_FILE = os.path.abspath('./asic_config_checksum')

def log_info(msg):
syslog.openlog(SYSLOG_IDENTIFIER)
syslog.syslog(syslog.LOG_INFO, msg)
syslog.closelog()

def log_error(msg):
syslog.openlog(SYSLOG_IDENTIFIER)
syslog.syslog(syslog.LOG_ERR, msg)
syslog.closelog()

def get_config_files():
'''
Gathers up ASIC config file names from the appropriately named 'sample'
directory in SWSS
'''
checksum_files = []
for path, files in CONFIG_FILES.items():
for file in files:
checksum_files.append(os.path.join(path, file))
return checksum_files

def generate_checksum(checksum_files):
'''
Iterates through all of the given ASIC config file, reads their contents,
and generates a checksum. NOTE: The checksum is performed in the order
provided. This function does NOT do any re-ordering of the files before
creating the checksum.
'''
checksum = hashlib.sha1()
for file in checksum_files:
daall marked this conversation as resolved.
Show resolved Hide resolved
try:
with open(file, 'r') as f:
for chunk in iter(lambda: f.read(CHUNK_SIZE), b""):
checksum.update(chunk)
except IOError as e:
log_error('Error processing ASIC config file ' + file + ':' + e.strerror)
return None

return checksum.hexdigest()

def main():
config_files = sorted(get_config_files())
checksum = generate_checksum(config_files)
if checksum == None:
exit(1)
pavel-shirshov marked this conversation as resolved.
Show resolved Hide resolved

with open(OUTPUT_FILE, 'w') as output:
output.write(checksum + '\n')

if __name__ == '__main__':
main()