blob: 3560d3a5bb9c3a6c0f9a3ff0f4a917affc9ecd97 [file] [log] [blame]
#!/bin/sh
#
# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# Copies all logs, screen-shots, crash dumps to Downloads folder.
# Help information about script usage.
. /usr/share/misc/shflags
DEFINE_boolean delete $FLAGS_FALSE \
"To collect data and clear up folders"
DEFINE_boolean screenshots $FLAGS_FALSE \
"To also collect saved screenshots"
DEFINE_boolean profile_data $FLAGS_FALSE \
"To also collect profile web data and sync data"
FLAGS_HELP="USAGE: To collect logs and crash dumps: sh $0 [flags] \
\nCollected data is zipped to tar.bz2 file with timestamp in Downloads \
folder."
# Parse command line
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"
echo "Collecting logs for user"
home_dir=/home/chronos
# Creating folder to copy logs, screenshots and dumps.
if [ -z "$(ls -A /home/chronos/user)" ]; then
log_dir=${home_dir}/diagnostic_logs
tar_path=${home_dir}
echo "Create diagnostic logs folder in Downloads"
else
log_dir=${home_dir}/user/Downloads/diagnostic_logs
tar_path=${home_dir}/user/Downloads
echo "Create diagnostic logs folder in home"
fi
mkdir -p ${log_dir}
sudo rm -rf ${log_dir}/*
# Copying file with current timestamp and date.
date > ${log_dir}/timestamp.txt
echo "Copied current timestamp"
# Copying file with ping test result.
ping -c 5 google.com > ${log_dir}/ping_result.txt
echo "Copied ping test result"
# Run lsusb.
sudo lsusb -v > ${log_dir}/lsusb_output.txt &&
echo "Obtaining lsusb information"
# Copying lsb-release file.
sudo cp /etc/lsb-release ${log_dir}/lsb_release.txt &&
echo "Copied lsb-release file with version information"
# Copying Consent To Send Stats file for client id.
sudo cp "${home_dir}/Consent To Send Stats" \
${log_dir}/consent_to_send_stats.txt &&
echo "Copied Consent To Send Stats file with client id"
# Copying Local State file from /home/chronos.
sudo cp "${home_dir}/Local State" ${log_dir}/local_state.txt &&
echo "Copied Local State file"
# Get the xrand output
DISPLAY=:0.0 /usr/bin/xrandr --verbose > ${log_dir}/xrand_output.txt &&
echo "Dumped xrand output"
# Get modem status
/usr/bin/modem status > ${log_dir}/modem_status.txt &&
echo "Dumped modem status"
# Get trackpad user feedback
sudo /opt/google/touchpad/generate_userfeedback > \
${log_dir}/trackpad_feedback.dat &&
echo "Dumped touchpad feedback"
# Get touchscreen user feedback
sudo /opt/google/touchscreen/touchscreen_feedback > \
${log_dir}/touchscreen_feedback.dat &&
echo "Dumped touchscreen feedback"
# Get shill's service list
sudo /usr/bin/network_diagnostics --show-macs --flimflam > \
${log_dir}/shill_services_list.txt &&
echo "Dumped shill's service list"
# Get the network diagnostics
sudo /usr/bin/network_diagnostics > ${log_dir}/network_diagnostics.txt &&
echo "Dumped network_diagnostics"
# Copying mount-encrypted log
sudo cp /tmp/mount-encrypted.log ${log_dir} &&
echo "Copied mount encryption log"
# Copy the stateful partition permission map.
sudo ls -alR /mnt/stateful_partition/ > ${log_dir}/stateful.txt &&
echo "Copied list of entire stateful contents"
# List what is in the OEM folder
sudo ls -alR /opt/oem/ > ${log_dir}/oem.txt &&
echo "Copied list of oem folder contents"
# Copy startup_manifest.json.txt if it exists
if [ -e /opt/oem/etc/startup_manifest.json ]; then
cp /opt/oem/etc/startup_manifest.json ${log_dir}/startup_manifest.json.txt
fi
mkdir -p ${log_dir}/system_level_logs ${log_dir}/user_level_logs \
${log_dir}/crashdumps
# Copying all logs under /var/log/.
sudo cp -r /var/log/* ${log_dir}/system_level_logs &&
echo "Copied all system level logs from /var/log/"
sudo cp -r ${home_dir}/user/log/* ${log_dir}/user_level_logs &&
echo "Copied relevant user level logs"
# Adding extension .txt to all copied log files.
log_array="${log_dir}/system_level_logs/* ${log_dir}/user_level_logs/*"
for log_file in ${log_array}; do
if [ -f ${log_file} ] && [ ${log_file#*.txt} ]; then
sudo mv "${log_file}" "${log_file}.txt"
fi
done
# Copying crash dumps.
sudo cp -rf "/var/log/chrome/Crash Reports/" ${log_dir}/crashdumps/
spool_crash="/var/spool/crash/*"
home_crash="${home_dir}/user/crash/*"
if [ -e ${spool_crash} ]; then
sudo cp -rf ${spool_crash} ${log_dir}/crashdumps/ &&
echo "Copied system crash dumps"
fi
if [ -e ${home_crash} ]; then
sudo cp -rf ${home_crash} ${log_dir}/crashdumps/ &&
echo "Copied user crash dumps"
fi
# Dumping TPM token contents
pkcs11-tool -p 111111 -O --module libchaps.so \
> ${log_dir}/tpm_token_contents.txt 2>&1 && echo "Dumped TPM token contents"
# Dumping Cryptohomed/TPM ownership status
cryptohome --action=status > ${log_dir}/cryptohomed_status.txt 2>&1 &&
echo "Dumped cryptohomed status"
# Dumping Cryptohome PKCS11 status
cryptohome --action=pkcs11_token_status \
>> ${log_dir}/cryptohomed_status.txt 2>&1 &&
echo "Dumped cryptohomed pkcs11 status"
# Dumping firmware log if it exists
if [ -r /sys/firmware/log ]; then
cat /sys/firmware/log > ${log_dir}/firmware_log.txt
fi
# Dumping firmware event log
if [ -n "$(sudo mosys -t | grep -o eventlog)" ]; then
sudo mosys -k eventlog list > ${log_dir}/firmware_event_log.txt
fi
# Copy device and user policy data.
policy_dir="${log_dir}/policy_data/"
mkdir -p ${policy_dir}
device_policy="/var/lib/whitelist/"
users_policy="/home/root/*/session_manager/policy/"
if [ -e ${device_policy} ]; then
sudo cp -rf ${device_policy} ${policy_dir} &&
echo "Copied device whitelist"
fi
if [ -e ${users_policy} ]; then
sudo cp -rf ${users_policy} ${policy_dir} &&
echo "Copied user policy"
fi
# Copying screen-shots if flag --screenshots is specified.
if [ ${FLAGS_screenshots} -eq ${FLAGS_TRUE} ]; then
cp -f ${home_dir}/user/Downloads/screenshot* ${log_dir}/ &&
echo "Copied screen-shots"
fi
# Copying profile data if flag --profile_data is specified.
if [ ${FLAGS_profile_data} -eq ${FLAGS_TRUE} ]; then
cp -f "${home_dir}/user/Web Data" "${log_dir}/Web Data" &&
cp -rf "${home_dir}/user/Sync Data" "${log_dir}/Sync Data" &&
echo "Copied profile data"
fi
# Copying autotest results if they exist
if [ -d "/usr/local/autotest/results" ]; then
sudo rsync -a --exclude='*/sysinfo*' "/usr/local/autotest/results" \
"${log_dir}/autotest"
echo "Copied autotest results"
if [ ${FLAGS_delete} -eq ${FLAGS_TRUE} ]; then
rm -rf "/usr/local/autotest/results"
fi
fi
# If we have the synaptics touchpad driver grab those additional files
if [ -e "/opt/Synaptics/bin/syncontrol" ]; then
mkdir -p ${log_dir}/synaptic_touchpad
sudo rm /home/chronos/user/SynDiag*
# We can only query syncontrol if it is running
if [ -e "/var/run/dbus/synaptics_bus_socket" ]; then
DISPLAY=:0 /opt/Synaptics/bin/syncontrol diag
sudo cp /home/chronos/user/SynDiag* ${log_dir}/synaptic_touchpad
fi
fi
# Grabbing network profiles.
echo "Copying network profiles"
network_profiles_dir="${log_dir}/network_profiles"
mkdir -p ${network_profiles_dir}
for manager in shill; do
global_profile="/var/cache/${manager}/"
user_profile="/var/run/${manager}/user_profiles/chronos/"
for profile in ${global_profile} ${user_profile}; do
test -e "${profile}" && \
sudo cp -rf --parents "${profile}" "${network_profiles_dir}"
done
done
# Grabbing preserved memory.
if [ -e "/dev/pstore/console-ramoops" ]; then
echo "Copying preserved memory"
sudo cp /dev/pstore/console-ramoops "${log_dir}/console-ramoops.txt"
fi
# Compressing the log folder with all collected files.
currentdate=$(date +%m%d%y-%H%M%S)
sudo tar cjfP ${tar_path}/log-${currentdate}.tar.bz2 ${log_dir}/
sudo rm -rf ${log_dir}/
echo "Log files zipped to folder under ${tar_path}: log-${currentdate}.tar.bz2"
# Deleting logs, dumps, screenshots from original location with flag --delete.
if [ ${FLAGS_delete} -eq ${FLAGS_TRUE} ]; then
echo "Deleting all logs"
sudo rm -rf /var/log/* ${home_dir}/${chrome_log_path}
sudo rm -rf ${home_dir}/user/log/* ${home_dir}/user/${chrome_log_path}
echo "Deleting crash dumps"
sudo rm -rf "/var/log/chrome/Crash Reports/"
sudo rm -rf ${crash_array}
# Deleting screenshots with both --delete and --screenshots flags.
if [ ${FLAGS_screenshots} -eq ${FLAGS_TRUE} ]; then
echo "Deleting screen-shots"
sudo rm -rf ${home_dir}/user/Downloads/Screenshots/*
fi
# Reboot after deleting all files.
echo "Rebooting system after clean up in 1 minute"
sudo shutdown -r 1
else
echo "Logs and dumps are copied but not deleted."
echo "To clear all logs, run the script with --delete flag."
echo "For all flag options, run the script with --help or -h flag."
fi