#!/bin/bash
#com.cocolog-nifty.quicktimer.icefloe
# Microsoft Edgeのアップデート用
########################################
###管理者インストールしているか?チェック
USER_WHOAMI=$(/usr/bin/whoami)
/bin/echo "実行したユーザーは:$USER_WHOAMI"
if [ "$USER_WHOAMI" != "root" ]; then
/bin/echo "このスクリプトを実行するには管理者権限が必要です。"
/bin/echo "sudo で実行してください"
### path to me
SCRIPT_PATH="${BASH_SOURCE[0]}"
/bin/echo "/usr/bin/sudo \"$SCRIPT_PATH\""
/bin/echo "↑を実行してください"
exit 1
else
###実行しているユーザー名
CURRENT_USER=$(/bin/echo "$HOME" | /usr/bin/awk -F'/' '{print $NF}')
/bin/echo "実行ユーザー:" "$CURRENT_USER"
fi
###コンソールユーザー CONSOLE_USERはFinderでログインしていないと出ない
CONSOLE_USER=$(/bin/echo "show State:/Users/ConsoleUser" | /usr/sbin/scutil | /usr/bin/awk '/Name :/ { print $3 }')
if [ -z "$CONSOLE_USER" ]; then
/bin/echo "コンソールユーザーが無い=電源入れてログインウィンドウ状態"
else
/bin/echo "コンソールユーザー:" "$CONSOLE_USER"
fi
########################################
##OS
PLIST_PATH="/System/Library/CoreServices/SystemVersion.plist"
STR_OS_VER=$(/usr/bin/defaults read "$PLIST_PATH" ProductVersion)
/bin/echo "OS VERSION :" "$STR_OS_VER"
STR_MAJOR_VERSION="${STR_OS_VER%%.*}"
/bin/echo "STR_MAJOR_VERSION :" "$STR_MAJOR_VERSION"
STR_MINOR_VERSION="${STR_OS_VER#*.}"
/bin/echo "STR_MINOR_VERSION :" "$STR_MINOR_VERSION"
########################################
###ローカルのユーザーアカウントを取得
TEXT_RESULT=$(/usr/bin/dscl localhost -list /Local/Default/Users PrimaryGroupID | /usr/bin/awk '$2 == 20 { print $1 }')
###リストにする
read -d '\\n' -r -a LIST_USER <<<"$TEXT_RESULT"
###リスト内の項目数
NUM_CNT=${#LIST_USER[@]}
/bin/echo "ユーザー数:" "$NUM_CNT"
########################################
STR_DEVICE_UUID=$(/usr/sbin/ioreg -c IOPlatformExpertDevice | grep IOPlatformUUID | awk -F'"' '{print $4}')
/bin/echo "デバイスUUID: " "$STR_DEVICE_UUID"
###各ユーザーの最終ログアウト日
for ITEM_LIST in "${LIST_USER[@]}"; do
STR_CHECK_File_PATH="/Users/${ITEM_LIST}/Library/Preferences/ByHost/com.apple.loginwindow.$STR_DEVICE_UUID.plist"
STR_LAST_LOGOUT=$(/usr/bin/sudo -u "${ITEM_LIST}" /usr/bin/stat -f "%Sm" -t "%Y-%m-%d %H:%M:%S" "$STR_CHECK_File_PATH")
/bin/echo "ユーザー$ITEM_LIST の最終ログアウト日: " "$STR_LAST_LOGOUT"
done
########################################
##デバイス
#起動ディスクの名前を取得する
for ITEM_LIST in "${LIST_USER[@]}"; do
/usr/bin/sudo -u "${ITEM_LIST}" /bin/mkdir -p "/Users/${ITEM_LIST}/Documents/Apple/IOPlatformUUID/"
/usr/bin/sudo -u "${ITEM_LIST}" /usr/bin/touch "/Users/${ITEM_LIST}/Documents/Apple/IOPlatformUUID/com.apple.diskutil.plist"
/usr/bin/sudo -u "${ITEM_LIST}" /usr/sbin/diskutil info -plist / >"/Users/${ITEM_LIST}/Documents/Apple/IOPlatformUUID/com.apple.diskutil.plist"
STARTUPDISK_NAME=$(/usr/bin/sudo -u "${ITEM_LIST}" /usr/bin/defaults read "/Users/${ITEM_LIST}/Documents/Apple/IOPlatformUUID/com.apple.diskutil.plist" VolumeName)
done
/bin/echo "ボリューム名:" "$STARTUPDISK_NAME"
########################################
###ダウンロード起動時に削除する項目
for ITEM_LIST in "${LIST_USER[@]}"; do
USER_TEMP_DIR=$(/usr/bin/sudo -u "${ITEM_LIST}" /usr/bin/mktemp -d)
/bin/echo "起動時に削除されるディレクトリ:" "$USER_TEMP_DIR"
done
########################################
##基本メンテナンス
########################################
for ITEM_LIST in "${LIST_USER[@]}"; do
/usr/bin/sudo -u "${ITEM_LIST}" /bin/chmod 700 "/Users/${ITEM_LIST}/Library"
##ライブラリの不可視属性を解除
/usr/bin/sudo -u "${ITEM_LIST}" /usr/bin/chflags nohidden "/Users/${ITEM_LIST}/Library"
/usr/bin/sudo -u "${ITEM_LIST}" /usr/bin/SetFile -a v "/Users/${ITEM_LIST}/Library"
## Managed Itemsフォルダを作る
/usr/bin/sudo -u "${ITEM_LIST}" /bin/mkdir -p "/Users/${ITEM_LIST}/Library/Managed Items"
/usr/bin/sudo -u "${ITEM_LIST}" /bin/chmod 755 "/Users/${ITEM_LIST}/Library/Managed Items"
/usr/bin/sudo -u "${ITEM_LIST}" /usr/sbin/chown "${ITEM_LIST}" "/Users/${ITEM_LIST}/Library/Managed Items"
/usr/bin/sudo -u "${ITEM_LIST}" /usr/bin/touch "/Users/${ITEM_LIST}/Library/Managed Items/.localized"
##
/bin/chmod 777 "/Users/${ITEM_LIST}/Library/Caches"
/bin/chmod 777 /Users/"${ITEM_LIST}"/Library/Caches/*
##
/bin/chmod -Rf 755 "/Users/${ITEM_LIST}/Library/Fonts"
/usr/sbin/chown -Rf "${ITEM_LIST}" "/Users/${ITEM_LIST}/Library/Fonts"
##
/bin/echo "ライブラリチェックDONE:" "${ITEM_LIST}"
done
########################################
## HOME
########################################
for ITEM_LIST in "${LIST_USER[@]}"; do
############
LIST_SUB_DIR_NAME=("Applications" "Desktop" "Developer" "Documents" "Downloads" "Groups" "Library" "Movies" "Music" "Pictures" "Public" "Sites" "bin")
for ITEM_DIR_NAME in "${LIST_SUB_DIR_NAME[@]}"; do
/bin/mkdir -p "/Users/${ITEM_LIST}/${ITEM_DIR_NAME}"
/usr/sbin/chown "${ITEM_LIST}" "/Users/${ITEM_LIST}/${ITEM_DIR_NAME}"
/usr/bin/touch "/Users/${ITEM_LIST}/${ITEM_DIR_NAME}/.localized"
/usr/sbin/chown "${ITEM_LIST}" "/Users/${ITEM_LIST}/${ITEM_DIR_NAME}/.localized"
/bin/chmod -N "/Users/${ITEM_LIST}/${ITEM_DIR_NAME}"
/bin/chmod 700 "/Users/${ITEM_LIST}/${ITEM_DIR_NAME}"
/bin/chmod +a "group:everyone deny delete" "/Users/${ITEM_LIST}/${ITEM_DIR_NAME}"
done
############
## 他ユーザー閲覧可
#
/bin/chmod 755 "/Users/${ITEM_LIST}/Sites"
/usr/bin/chgrp www "/Users/${ITEM_LIST}/Sites"
#
/bin/chmod 755 "/Users/${ITEM_LIST}/Public"
#
/bin/chmod 750 "/Users/${ITEM_LIST}/Groups"
##全ローカルユーザーに対して実施したい処理があれば追加する
/bin/echo "ユーザーディレクトリチェックDONE" "${ITEM_LIST}"
done
########################################
## Public
########################################
for ITEM_LIST in "${LIST_USER[@]}"; do
/bin/chmod 755 "/Users/${ITEM_LIST}/Public"
##
STR_CHECK_DIR_PATH="/Users/${ITEM_LIST}/Public/Drop Box"
/bin/mkdir -p "$STR_CHECK_DIR_PATH"
/usr/bin/touch "$STR_CHECK_DIR_PATH/.localized"
/usr/sbin/chown "${ITEM_LIST}" "$STR_CHECK_DIR_PATH"
/usr/bin/chgrp -Rf nobody "$STR_CHECK_DIR_PATH"
/bin/chmod 733 "$STR_CHECK_DIR_PATH"
/bin/chmod -N "$STR_CHECK_DIR_PATH"
/bin/chmod +a "group:everyone deny delete" "$STR_CHECK_DIR_PATH"
##########
STR_CHECK_DIR_PATH="/Users/${ITEM_LIST}/Public/Documents"
/bin/mkdir -p "$STR_CHECK_DIR_PATH"
/usr/bin/touch "$STR_CHECK_DIR_PATH/.localized"
/usr/sbin/chown "${ITEM_LIST}" "$STR_CHECK_DIR_PATH"
/usr/bin/chgrp -Rf admin "$STR_CHECK_DIR_PATH"
/bin/chmod 700 "$STR_CHECK_DIR_PATH"
/bin/chmod -N "$STR_CHECK_DIR_PATH"
##
STR_CHECK_DIR_PATH="/Users/${ITEM_LIST}/Public/Downloads"
/bin/mkdir -p "$STR_CHECK_DIR_PATH"
/usr/bin/touch "$STR_CHECK_DIR_PATH/.localized"
/usr/sbin/chown "${ITEM_LIST}" "$STR_CHECK_DIR_PATH"
/usr/bin/chgrp -Rf admin "$STR_CHECK_DIR_PATH"
/bin/chmod 700 "$STR_CHECK_DIR_PATH"
/bin/chmod -N "$STR_CHECK_DIR_PATH"
##
STR_CHECK_DIR_PATH="/Users/${ITEM_LIST}/Public/Favorites"
/bin/mkdir -p "$STR_CHECK_DIR_PATH"
/usr/bin/touch "$STR_CHECK_DIR_PATH/.localized"
/usr/sbin/chown "${ITEM_LIST}" "$STR_CHECK_DIR_PATH"
/usr/bin/chgrp -Rf admin "$STR_CHECK_DIR_PATH"
/bin/chmod 700 "$STR_CHECK_DIR_PATH"
/bin/chmod -N "$STR_CHECK_DIR_PATH"
##########
STR_CHECK_DIR_PATH="/Users/${ITEM_LIST}/Public/Groups"
/bin/mkdir -p "$STR_CHECK_DIR_PATH"
/usr/bin/touch "$STR_CHECK_DIR_PATH/.localized"
/usr/sbin/chown "${ITEM_LIST}" "$STR_CHECK_DIR_PATH"
/usr/bin/chgrp -Rf staff "$STR_CHECK_DIR_PATH"
/bin/chmod 770 "$STR_CHECK_DIR_PATH"
/bin/chmod -N "$STR_CHECK_DIR_PATH"
##
STR_CHECK_DIR_PATH="/Users/${ITEM_LIST}/Public/Shared"
/bin/mkdir -p "$STR_CHECK_DIR_PATH"
/usr/bin/touch "$STR_CHECK_DIR_PATH/.localized"
/usr/sbin/chown "${ITEM_LIST}" "$STR_CHECK_DIR_PATH"
/usr/bin/chgrp -Rf staff "$STR_CHECK_DIR_PATH"
/bin/chmod 750 "$STR_CHECK_DIR_PATH"
/bin/chmod -N "$STR_CHECK_DIR_PATH"
##########
STR_CHECK_DIR_PATH="/Users/${ITEM_LIST}/Public/Guest"
/bin/mkdir -p "$STR_CHECK_DIR_PATH"
/usr/bin/touch "$STR_CHECK_DIR_PATH/.localized"
/usr/sbin/chown "${ITEM_LIST}" "$STR_CHECK_DIR_PATH"
/usr/bin/chgrp -Rf nobody "$STR_CHECK_DIR_PATH"
/bin/chmod 777 "$STR_CHECK_DIR_PATH"
/bin/chmod -N "$STR_CHECK_DIR_PATH"
/bin/chmod +a "group:everyone allow read,write,append,delete,list,search,add_file,add_subdirectory,delete_child,file_inherit,directory_inherit" "$STR_CHECK_DIR_PATH"
##
STR_CHECK_DIR_PATH="/Users/${ITEM_LIST}/Public/Shared Items"
/bin/mkdir -p "$STR_CHECK_DIR_PATH"
/usr/bin/touch "$STR_CHECK_DIR_PATH/.localized"
/usr/sbin/chown "${ITEM_LIST}" "$STR_CHECK_DIR_PATH"
/usr/bin/chgrp -Rf nobody "$STR_CHECK_DIR_PATH"
/bin/chmod 775 "$STR_CHECK_DIR_PATH"
/bin/chmod -N "$STR_CHECK_DIR_PATH"
/bin/echo "パブリックチェックDONE" "${ITEM_LIST}"
done
########################################
## Applications
########################################
## Applications
for ITEM_LIST in "${LIST_USER[@]}"; do
STR_CHECK_DIR_PATH="/Users/${ITEM_LIST}/Applications"
/usr/bin/sudo -u "${ITEM_LIST}" /bin/mkdir -p "$STR_CHECK_DIR_PATH"
/bin/chmod 700 "$STR_CHECK_DIR_PATH"
/usr/bin/sudo -u "${ITEM_LIST}" /usr/bin/touch "$STR_CHECK_DIR_PATH/.localized"
##サブフォルダを作る
LIST_SUB_DIR_NAME=("Demos" "Desktop" "Developer" "Documents" "Downloads" "Favorites" "Groups" "Library" "Movies" "Music" "Pictures" "Public" "Shared" "Sites" "System" "Users" "Utilities")
##リストの数だけ処理
for ITEM_DIR_NAME in "${LIST_SUB_DIR_NAME[@]}"; do
/usr/bin/sudo -u "${ITEM_LIST}" /bin/mkdir -p "$STR_CHECK_DIR_PATH/$ITEM_DIR_NAME"
/bin/chmod 700 "$STR_CHECK_DIR_PATH/${ITEM_DIR_NAME}"
/usr/bin/sudo -u "${ITEM_LIST}" /usr/bin/touch "$STR_CHECK_DIR_PATH/$ITEM_DIR_NAME/.localized"
done
done
########################################
##シンボリックリンクを作る
if [[ ! -e "/Users/$CURRENT_USER/Applications/Applications" ]]; then
/bin/ln -s "/Applications" "/Users/$CURRENT_USER/Applications/Applications"
fi
if [[ ! -e "/Users/$CURRENT_USER/Applications/Utilities/Finder Applications" ]]; then
/bin/ln -s "/System/Library/CoreServices/Finder.app/Contents/Applications" "/Users/$CURRENT_USER/Applications/Utilities/Finder Applications"
fi
if [[ ! -e "/Users/$CURRENT_USER/Applications/Utilities/Finder Libraries" ]]; then
/bin/ln -s "/System/Library/CoreServices/Finder.app/Contents/Resources/MyLibraries" "/Users/$CURRENT_USER/Applications/Utilities/Finder Libraries"
fi
if [[ ! -e "/Users/$CURRENT_USER/Applications/Utilities/System Applications" ]]; then
/bin/ln -s "/System/Library/CoreServices/Applications" "/Users/$CURRENT_USER/Applications/Utilities/System Applications"
fi
if [[ ! -e "/Users/$CURRENT_USER/Applications/Utilities/System Utilities" ]]; then
/bin/ln -s "/Applications/Utilities" "/Users/$CURRENT_USER/Applications/Utilities/System Utilities"
fi
########################################
##ここから本処理
###ダウンロード>>起動時に削除する項目
USER_TEMP_DIR=$(/usr/bin/sudo -u "$CONSOLE_USER" /usr/bin/mktemp -d)
###CPUタイプでの分岐
ARCHITEC=$(/usr/bin/arch)
/bin/echo "Running on $ARCHITEC"
if [ "$ARCHITEC" == "arm64" ]; then
###ARM用のダウンロードURL
STR_URL="https://javadl.oracle.com/webapps/download/AutoDL?BundleId=248764_8c876547113c4e4aab3c868e9e0ec572"
###ファイル名を取得
DL_FILE_NAME=$(/usr/bin/curl -s -L -I -o /dev/null -w '%{url_effective}' "$STR_URL" | awk -F"/" '{print $NF}' | cut -d'=' -f1 | cut -d'&' -f1)
/bin/echo "DL_FILE_NAME:$DL_FILE_NAME"
###ダウンロード
if ! /usr/bin/curl -L -o "$USER_TEMP_DIR/$DL_FILE_NAME" "$STR_URL" --connect-timeout 20; then
/bin/echo "ファイルのダウンロードに失敗しました HTTP1.1で再トライします"
if ! /usr/bin/curl -L -o "$USER_TEMP_DIR/$DL_FILE_NAME" "$STR_URL" --http1.1 --connect-timeout 20; then
/bin/echo "ファイルのダウンロードに失敗しました"
exit 1
fi
fi
else
###INTEL用のダウンロードURL
STR_URL="https://javadl.oracle.com/webapps/download/AutoDL?BundleId=248766_8c876547113c4e4aab3c868e9e0ec572"
###ファイル名を取得
DL_FILE_NAME=$(/usr/bin/curl -s -L -I -o /dev/null -w '%{url_effective}' "$STR_URL" | awk -F"/" '{print $NF}' | cut -d'=' -f1 | cut -d'&' -f1)
/bin/echo "DL_FILE_NAME:$DL_FILE_NAME"
###ダウンロード
if ! /usr/bin/curl -L -o "$USER_TEMP_DIR/$DL_FILE_NAME" "$STR_URL" --connect-timeout 20; then
/bin/echo "ファイルのダウンロードに失敗しました HTTP1.1で再トライします"
if ! /usr/bin/curl -L -o "$USER_TEMP_DIR/$DL_FILE_NAME" "$STR_URL" --http1.1 --connect-timeout 20; then
/bin/echo "ファイルのダウンロードに失敗しました"
exit 1
fi
fi
fi
##全ユーザー実行可能にしておく
/bin/chmod 755 "$USER_TEMP_DIR/$DL_FILE_NAME"
/bin/echo "ダウンロードOK"
############################################################
######### インストール DMG In PKG
/bin/echo "インストール開始:DMG in PKG:" "$CURRENT_USER"
###マウントポイント
STR_MOUNTPOINT_PATH="$USER_TEMP_DIR/MountPoint/JRE"
###マウントポイント作成
/bin/mkdir -p "$STR_MOUNTPOINT_PATH"
/bin/chmod 777 "$STR_MOUNTPOINT_PATH"
###ディスクをマウント マウントポイント指定
/usr/bin/hdiutil attach "$USER_TEMP_DIR/$DL_FILE_NAME" -noverify -nobrowse -noautoopen -mountpoint "$STR_MOUNTPOINT_PATH"
###インストールPKGパス
STR_PKG_PATH="$STR_MOUNTPOINT_PATH/Java 8 Update 381.app/Contents/Resources/JavaAppletPlugin.pkg"
/usr/sbin/installer -pkg "$STR_PKG_PATH" -target / -dumplog -allowUntrusted -lang ja
sleep 2
###ディスクをアンマウント
/usr/bin/hdiutil detach "$STR_MOUNTPOINT_PATH" -force
exit 0