Skip to content

Commit 84c2e7e

Browse files
committed
manufacturing-db: Discard extraneous EEPROM fields
1 parent ee085b8 commit 84c2e7e

3 files changed

Lines changed: 44 additions & 57 deletions

File tree

debian/postinst

Lines changed: 40 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,9 @@ MFG_DB_SCHEMA="id integer primary key,
145145
os_image_sha256 char(64) DEFAULT NULL,
146146
connect_registered integer DEFAULT NULL,
147147
connect_device_id varchar(255) DEFAULT NULL,
148-
eeprom_device varchar(64) DEFAULT NULL,
149148
eeprom_size integer DEFAULT NULL,
150-
eeprom_sha256 char(64) DEFAULT NULL,
151149
eeprom_jedec char(6) DEFAULT NULL,
152150
eeprom_unique_id varchar(32) DEFAULT NULL,
153-
eeprom_spi_speed integer DEFAULT NULL,
154151
bootloader_build_timestamp integer DEFAULT NULL,
155152
provision_ts timestamp default current_timestamp"
156153

@@ -164,35 +161,47 @@ if [ "$MFG_TABLE_EXISTS" -eq 0 ]; then
164161
# Table doesn't exist, create it
165162
sqlite3 "$MFG_DB_PATH" "CREATE TABLE devices($MFG_DB_SCHEMA);" > /dev/null 2>&1
166163
else
167-
# Table exists, check if migration is needed
168-
# Get current schema
169-
CURRENT_COLUMNS=$(sqlite3 "$MFG_DB_PATH" "PRAGMA table_info(devices);" | awk -F'|' '{print $2}' | tr '\n' ',')
170-
171-
# Check if any expected columns are missing
172-
for COL in id boardname serial eth_mac wifi_mac bt_mac mmc_size mmc_cid rpi_duid board_revision processor memory manufacturer secure jtag_locked eeprom_write_protected pubkey_programmed devkey_revoked signed_boot_enabled os_image_filename os_image_sha256 connect_registered connect_device_id eeprom_device eeprom_size eeprom_sha256 eeprom_jedec eeprom_unique_id eeprom_spi_speed bootloader_build_timestamp provision_ts; do
173-
if ! echo "$CURRENT_COLUMNS" | grep -q "$COL"; then
174-
echo "Migration needed: column $COL is missing from manufacturing.db devices table"
175-
176-
# Create a new table with correct schema
177-
sqlite3 "$MFG_DB_PATH" <<EOF
178-
CREATE TABLE devices_new($MFG_DB_SCHEMA);
179-
180-
-- Copy data from old table to new table
181-
INSERT INTO devices_new($(echo "$CURRENT_COLUMNS" | sed 's/,$//'))
182-
SELECT $(echo "$CURRENT_COLUMNS" | sed 's/,$//')
183-
FROM devices;
184-
185-
-- Drop old table
186-
DROP TABLE devices;
187-
188-
-- Rename new table to original name
189-
ALTER TABLE devices_new RENAME TO devices;
164+
# Table exists, check if migration is needed. The expected column set,
165+
# in schema order. Keep this in sync with MFG_DB_SCHEMA above.
166+
EXPECTED_COLS="id boardname serial eth_mac wifi_mac bt_mac mmc_size mmc_cid rpi_duid board_revision processor memory manufacturer secure jtag_locked eeprom_write_protected pubkey_programmed devkey_revoked signed_boot_enabled os_image_filename os_image_sha256 connect_registered connect_device_id eeprom_size eeprom_jedec eeprom_unique_id bootloader_build_timestamp provision_ts"
167+
168+
# Current columns, one per line.
169+
CURRENT_COLUMNS=$(sqlite3 "$MFG_DB_PATH" "PRAGMA table_info(devices);" | awk -F'|' '{print $2}')
170+
171+
# Migration is needed whenever the on-disk column set differs from the
172+
# expected set in either direction -- a missing column (added in this
173+
# release) or an extra column (dropped in this release).
174+
CURRENT_SORTED=$(printf '%s\n' $CURRENT_COLUMNS | sort)
175+
EXPECTED_SORTED=$(printf '%s\n' $EXPECTED_COLS | sort)
176+
177+
if [ "$CURRENT_SORTED" != "$EXPECTED_SORTED" ]; then
178+
echo "Migration needed: manufacturing.db devices schema differs from expected"
179+
180+
# Carry over only the columns present in BOTH the old and new schema.
181+
# Added columns are left at their DEFAULT; dropped columns (and their
182+
# data) are discarded.
183+
COMMON_COLS=""
184+
for COL in $EXPECTED_COLS; do
185+
if printf '%s\n' "$CURRENT_COLUMNS" | grep -qx "$COL"; then
186+
COMMON_COLS="${COMMON_COLS:+$COMMON_COLS,}$COL"
187+
fi
188+
done
189+
190+
sqlite3 "$MFG_DB_PATH" <<EOF
191+
CREATE TABLE devices_new($MFG_DB_SCHEMA);
192+
193+
-- Copy the intersection of old and new columns.
194+
INSERT INTO devices_new($COMMON_COLS)
195+
SELECT $COMMON_COLS
196+
FROM devices;
197+
198+
-- Replace the old table with the migrated one.
199+
DROP TABLE devices;
200+
ALTER TABLE devices_new RENAME TO devices;
190201
EOF
191-
192-
echo "Migration completed successfully for manufacturing.db"
193-
break
194-
fi
195-
done
202+
203+
echo "Migration completed successfully for manufacturing.db"
204+
fi
196205
fi
197206

198207
#DEBHELPER#

host-support/manufacturing-data

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -267,12 +267,9 @@ metadata_gather() {
267267
os_image_sha256 char(64) DEFAULT NULL,
268268
connect_registered integer DEFAULT NULL,
269269
connect_device_id varchar(255) DEFAULT NULL,
270-
eeprom_device varchar(64) DEFAULT NULL,
271270
eeprom_size integer DEFAULT NULL,
272-
eeprom_sha256 char(64) DEFAULT NULL,
273271
eeprom_jedec char(6) DEFAULT NULL,
274272
eeprom_unique_id varchar(32) DEFAULT NULL,
275-
eeprom_spi_speed integer DEFAULT NULL,
276273
bootloader_build_timestamp integer DEFAULT NULL,
277274
provision_ts timestamp default current_timestamp"
278275

@@ -344,12 +341,9 @@ metadata_gather() {
344341
*) echo "${v}" ;;
345342
esac
346343
}
347-
EEPROM_DEVICE=$(eeprom_value "eeprom-device")
348344
EEPROM_SIZE=$(eeprom_value "eeprom-size")
349-
EEPROM_SHA256=$(eeprom_value "eeprom-sha256")
350345
EEPROM_JEDEC=$(eeprom_value "eeprom-jedec")
351346
EEPROM_UNIQUE_ID=$(eeprom_value "eeprom-unique-id")
352-
EEPROM_SPI_SPEED=$(eeprom_value "eeprom-spi-speed")
353347
BOOTLOADER_BUILD_TS=$(eeprom_value "bootloader-build-timestamp")
354348

355349
# Integer columns: convert empty to literal NULL so the SQL is valid.
@@ -366,10 +360,7 @@ metadata_gather() {
366360
fi
367361
}
368362
EEPROM_SIZE_SQL=$(sql_int "${EEPROM_SIZE}")
369-
EEPROM_SPI_SPEED_SQL=$(sql_int "${EEPROM_SPI_SPEED}")
370363
BOOTLOADER_BUILD_TS_SQL=$(sql_int "${BOOTLOADER_BUILD_TS}")
371-
EEPROM_DEVICE_SQL=$(sql_str "${EEPROM_DEVICE}")
372-
EEPROM_SHA256_SQL=$(sql_str "${EEPROM_SHA256}")
373364
EEPROM_JEDEC_SQL=$(sql_str "${EEPROM_JEDEC}")
374365
EEPROM_UNIQUE_ID_SQL=$(sql_str "${EEPROM_UNIQUE_ID}")
375366

@@ -438,12 +429,9 @@ metadata_gather() {
438429
os_image_sha256, \
439430
connect_registered, \
440431
connect_device_id, \
441-
eeprom_device, \
442432
eeprom_size, \
443-
eeprom_sha256, \
444433
eeprom_jedec, \
445434
eeprom_unique_id, \
446-
eeprom_spi_speed, \
447435
bootloader_build_timestamp \
448436
) VALUES ( \
449437
'${BOARD_STR}', \
@@ -468,12 +456,9 @@ metadata_gather() {
468456
'${OS_IMAGE_SHA256}', \
469457
${CONNECT_REGISTERED_VALUE}, \
470458
'${CONNECT_DEVICE_ID_VALUE}', \
471-
${EEPROM_DEVICE_SQL}, \
472459
${EEPROM_SIZE_SQL}, \
473-
${EEPROM_SHA256_SQL}, \
474460
${EEPROM_JEDEC_SQL}, \
475461
${EEPROM_UNIQUE_ID_SQL}, \
476-
${EEPROM_SPI_SPEED_SQL}, \
477462
${BOOTLOADER_BUILD_TS_SQL} \
478463
);" > /dev/null 2>&1
479464

provisioner-service/src/views/manufacturing.csp

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -193,12 +193,9 @@
193193
<th scope="col">OS Image SHA256</th>
194194
<th scope="col">Connect Reg.</th>
195195
<th scope="col">Connect Identity ID</th>
196-
<th scope="col">EEPROM Device</th>
197196
<th scope="col">EEPROM Size</th>
198-
<th scope="col">EEPROM SHA256</th>
199197
<th scope="col">EEPROM JEDEC</th>
200198
<th scope="col">EEPROM Unique ID</th>
201-
<th scope="col">SPI Speed (Hz)</th>
202199
<th scope="col">Bootloader Build TS</th>
203200
</tr>
204201
</thead>
@@ -233,12 +230,9 @@
233230
<td style="font-family: monospace;">${escapeHtml(device.os_image_sha256)}</td>
234231
<td class="security-field">${formatSecurityField(device.connect_registered)}</td>
235232
<td>${escapeHtml(device.connect_device_id)}</td>
236-
<td>${escapeHtml(device.eeprom_device)}</td>
237233
<td>${escapeHtml(device.eeprom_size)}</td>
238-
<td style="font-family: monospace;">${escapeHtml(device.eeprom_sha256)}</td>
239234
<td style="font-family: monospace;">${escapeHtml(device.eeprom_jedec)}</td>
240235
<td style="font-family: monospace;">${escapeHtml(device.eeprom_unique_id)}</td>
241-
<td>${escapeHtml(device.eeprom_spi_speed)}</td>
242236
<td>${escapeHtml(device.bootloader_build_timestamp)}</td>
243237
</tr>
244238
`;
@@ -401,8 +395,8 @@
401395
'EEPROM WP (req.)','Pubkey Prog.','Devkey Revoked','Signed Boot',
402396
'OS Image Filename','OS Image SHA256',
403397
'Connect Reg.','Connect Device ID',
404-
'EEPROM Device','EEPROM Size','EEPROM SHA256','EEPROM JEDEC',
405-
'EEPROM Unique ID','SPI Speed (Hz)','Bootloader Build TS'
398+
'EEPROM Size','EEPROM JEDEC',
399+
'EEPROM Unique ID','Bootloader Build TS'
406400
];
407401

408402
const rows = [headers.map(csvEscape).join(',')];
@@ -421,9 +415,8 @@
421415
csvEscape(d.os_image_filename), csvEscape(d.os_image_sha256),
422416
csvEscape(securityLabel(d.connect_registered)),
423417
csvEscape(d.connect_device_id),
424-
csvEscape(d.eeprom_device), csvEscape(d.eeprom_size),
425-
csvEscape(d.eeprom_sha256), csvEscape(d.eeprom_jedec),
426-
csvEscape(d.eeprom_unique_id), csvEscape(d.eeprom_spi_speed),
418+
csvEscape(d.eeprom_size), csvEscape(d.eeprom_jedec),
419+
csvEscape(d.eeprom_unique_id),
427420
csvEscape(d.bootloader_build_timestamp)
428421
].join(','));
429422
});

0 commit comments

Comments
 (0)