[bash] インストールDropBox
サンプルコード
行番号 | ソース |
---|---|
001 | #!/bin/bash |
002 | #com.cocolog-nifty.quicktimer.icefloe |
003 | # ランチコントロール 無効にするタイプ |
004 | # よくわからない人は使わない方がいいです |
005 | ################################################# |
006 | ###管理者インストールしているか?チェック |
007 | USER_WHOAMI=$(/usr/bin/whoami) |
008 | /bin/echo "実行ユーザー(whoami): $USER_WHOAMI" |
009 | if [ "$USER_WHOAMI" != "root" ]; then |
010 | /bin/echo "このスクリプトを実行するには管理者権限が必要です。" |
011 | /bin/echo "sudo で実行してください" |
012 | ### path to me |
013 | SCRIPT_PATH="${BASH_SOURCE[0]}" |
014 | /bin/echo "/usr/bin/sudo \"$SCRIPT_PATH\"" |
015 | /bin/echo "↑を実行してください" |
016 | exit 1 |
017 | else |
018 | ###実行しているユーザー名 |
019 | CONSOLE_USER=$(/bin/echo "show State:/Users/ConsoleUser" | /usr/sbin/scutil | /usr/bin/awk '/Name :/ { print $3 }') |
020 | /bin/echo "コンソールユーザー(scutil): $CONSOLE_USER" |
021 | ###実行しているユーザー名 |
022 | HOME_USER=$(/bin/echo "$HOME" | /usr/bin/awk -F'/' '{print $NF}') |
023 | /bin/echo "実行ユーザー(HOME): $HOME_USER" |
024 | ###logname |
025 | LOGIN_NAME=$(/usr/bin/logname) |
026 | /bin/echo "ログイン名(logname): $LOGIN_NAME" |
027 | ###UID |
028 | USER_NAME=$(/usr/bin/id -un) |
029 | /bin/echo "ユーザー名(id): $USER_NAME" |
030 | ###STAT |
031 | STAT_USR=$(/usr/bin/stat -f%Su /dev/console) |
032 | /bin/echo "STAT_USR(console): $STAT_USR" |
033 | fi |
034 | ################################# |
035 | ###プロセス終了 |
036 | STR_APP_NAME="Dropbox.app" |
037 | ### |
038 | STR_PLIST_PATH="/Applications/$STR_APP_NAME/Contents/Info.plist" |
039 | STR_BUNDLE_ID=$(/usr/bin/defaults read "$STR_PLIST_PATH" CFBundleIdentifier) |
040 | /bin/echo "STR_BUNDLE_ID" "$STR_BUNDLE_ID" |
041 | ##念の為 KILLもする |
042 | /usr/bin/killall "Dropbox" 2>/dev/null |
043 | /usr/bin/killall "Dropbox Helper" 2>/dev/null |
044 | /usr/bin/killall "Dropbox Helper (Renderer)" 2>/dev/null |
045 | /usr/bin/killall "Dropbox Helper (Plugin)" 2>/dev/null |
046 | /usr/bin/killall "Dropbox Helper (GPU)" 2>/dev/null |
047 | /usr/bin/killall "DropboxActivityProvider" 2>/dev/null |
048 | /usr/bin/killall "DropboxFileProviderCH" 2>/dev/null |
049 | /usr/bin/killall "DropboxFileProvider" 2>/dev/null |
050 | /usr/bin/killall "DropboxTransferExtension" 2>/dev/null |
051 | /bin/echo "アプリケーション終了" |
052 | /bin/sleep 2 |
053 | |
054 | ################################# |
055 | function DO_MOVE_TO_TRASH() { |
056 | if [ -e "$1" ]; then |
057 | TRASH_DIR=$(/usr/bin/sudo -u "$STAT_USR" /usr/bin/mktemp -d "/Users/$STAT_USR/.Trash/DropBoxXXXXXX") |
058 | /usr/bin/chflags nouimmutable "$1" |
059 | /usr/bin/chflags nouchg "$1" |
060 | /usr/bin/chflags nouchange "$1" |
061 | /bin/chmod -N "$1" |
062 | /bin/chmod 777 "$TRASH_DIR" |
063 | /bin/mv "$1" "$TRASH_DIR" |
064 | fi |
065 | } |
066 | #####古いファイルをゴミ箱に LOCAL |
067 | DO_MOVE_TO_TRASH "/Library/DropboxHelperTools" |
068 | DO_MOVE_TO_TRASH "/Applications/Dropbox.app" |
069 | #####古いファイルをゴミ箱に USER |
070 | DO_MOVE_TO_TRASH "/Users/${STAT_USR}/Library/Dropbox" |
071 | DO_MOVE_TO_TRASH "/Users/${STAT_USR}/Library/HTTPStorages/com.dropbox.DropboxMacUpdate" |
072 | DO_MOVE_TO_TRASH "/Users/${STAT_USR}/Library/HTTPStorages/com.getdropbox.dropbox" |
073 | DO_MOVE_TO_TRASH "/Users/${STAT_USR}/.dropbox/logs" |
074 | DO_MOVE_TO_TRASH "/Users/${STAT_USR}/.dropbox/Crashpad" |
075 | DO_MOVE_TO_TRASH "/Users/${STAT_USR}/Library/Application Scripts/com.dropbox.client.crashpad" |
076 | DO_MOVE_TO_TRASH "/Users/${STAT_USR}/Library/Application Support/Dropbox/Code Cache" |
077 | DO_MOVE_TO_TRASH "/Users/${STAT_USR}/Library/Application Support/Dropbox/GPUCache" |
078 | DO_MOVE_TO_TRASH "/Users/${STAT_USR}/Library/Application Support/Dropbox/DropboxMacUpdate" |
079 | DO_MOVE_TO_TRASH "/Users/${STAT_USR}/Library/Application Support/Dropbox/Dropbox/Crashpad" |
080 | DO_MOVE_TO_TRASH "/Users/${STAT_USR}/Library/Group Containers/G7HH3F8CAK.com.getdropbox.dropbox.sync/Crashpad" |
081 | DO_MOVE_TO_TRASH "/Users/${STAT_USR}/Library/Group Containers/G7HH3F8CAK.com.getdropbox.dropbox.sync/events" |
082 | DO_MOVE_TO_TRASH "/Users/${STAT_USR}/Library/Group Containers/G7HH3F8CAK.com.getdropbox.dropbox.sync/Library/Caches" |
083 | DO_MOVE_TO_TRASH "/Users/${STAT_USR}/Library/Group Containers/G7HH3F8CAK.com.getdropbox.dropbox.sync/Library/Application Scripts" |
084 | DO_MOVE_TO_TRASH "/Users/${STAT_USR}/Library/Group Containers/G7HH3F8CAK.com.getdropbox.dropbox.sync/logs" |
085 | DO_MOVE_TO_TRASH "/Users/${STAT_USR}/Library/LaunchAgents/com.dropbox.DropboxMacUpdate.agent.plist" |
086 | |
087 | ################################# |
088 | ## RSSから最新のバージョンを取得する |
089 | STR_RSS_URL="https://www.dropboxforum.com/mxpez29397/rss/board?board.id=101003016" |
090 | STR_USERAGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" |
091 | STR_USERAGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0" |
092 | STR_USERAGENT="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36" |
093 | STR_USERAGENT="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15" |
094 | |
095 | XML_RSS_DATA=$(/usr/bin/curl -L -A "$STR_USERAGENT" -s "$STR_RSS_URL" | xmllint --format -) |
096 | STR_TITLE=$(echo "$XML_RSS_DATA" | xmllint --xpath "//item/title/text()" -) |
097 | IFS=$'\n' read -r -d '' -a LIST_TITLE <<<"$STR_TITLE" |
098 | |
099 | for ITEM_TITLE in "${LIST_TITLE[@]}"; do |
100 | if [[ $ITEM_TITLE == *"Stable"* ]]; then |
101 | /bin/echo "$ITEM_TITLE" |
102 | read -ra ARRAY_TITLE <<<"$ITEM_TITLE" |
103 | STR_VERSION=${ARRAY_TITLE[2]} |
104 | /bin/echo "$STR_VERSION" |
105 | break |
106 | fi |
107 | done |
108 | ################################# |
109 | ##URLを生成する |
110 | STR_BASE_URL="https://edge.dropboxstatic.com/dbx-releng/client/" |
111 | ###CPUタイプでの分岐 |
112 | ARCHITEC=$(/usr/bin/arch) |
113 | if [ "$ARCHITEC" == "arm64" ]; then |
114 | STR_DMG_FILE_NAME="Dropbox%20$STR_VERSION.arm64.dmg" |
115 | DL_FILE_NAME="Dropbox $STR_VERSION.arm64.dmg" |
116 | STR_URL="$STR_BASE_URL$STR_DMG_FILE_NAME" |
117 | else |
118 | STR_DMG_FILE_NAME="Dropbox%20$STR_VERSION.dmg" |
119 | DL_FILE_NAME="Dropbox $STR_VERSION.dmg" |
120 | STR_URL="$STR_BASE_URL$STR_DMG_FILE_NAME" |
121 | fi |
122 | /bin/echo "$STR_URL" |
123 | ################################# |
124 | ##ダウンロード |
125 | STR_MKTEMP_DIR_PATH=$(/usr/bin/sudo -u "$STAT_USR" /usr/bin/mktemp -d) |
126 | STR_TEMP_DIR_T=$(/usr/bin/dirname "$STR_MKTEMP_DIR_PATH") |
127 | LOCAL_TMP_DIR=$(/usr/bin/sudo -u "$STAT_USR" /usr/bin/mktemp -d "${STR_TEMP_DIR_T}/dropbox.XXXXXXXXX") |
128 | /bin/echo "TMPDIR:" "$LOCAL_TMP_DIR" |
129 | |
130 | if [ "$ARCHITEC" == "arm64" ]; then |
131 | /bin/echo "Running on $ARCHITEC" |
132 | ###ダウンロード |
133 | if ! /usr/bin/curl -L -o "$LOCAL_TMP_DIR/$DL_FILE_NAME" "$STR_URL" --connect-timeout 20; then |
134 | /bin/echo "ファイルのダウンロードに失敗しました HTTP1.1で再トライします" |
135 | if ! /usr/bin/curl -L -o "$LOCAL_TMP_DIR/$DL_FILE_NAME" "$STR_URL" --http1.1 --connect-timeout 20; then |
136 | /bin/echo "ファイルのダウンロードに失敗しました" |
137 | exit 1 |
138 | fi |
139 | fi |
140 | else |
141 | /bin/echo "Running on $ARCHITEC" |
142 | ###ダウンロード |
143 | if ! /usr/bin/curl -L -o "$LOCAL_TMP_DIR/$DL_FILE_NAME" "$STR_URL" --connect-timeout 20; then |
144 | /bin/echo "ファイルのダウンロードに失敗しました HTTP1.1で再トライします" |
145 | if ! /usr/bin/curl -L -o "$LOCAL_TMP_DIR/$DL_FILE_NAME" "$STR_URL" --http1.1 --connect-timeout 20; then |
146 | /bin/echo "ファイルのダウンロードに失敗しました" |
147 | exit 1 |
148 | fi |
149 | fi |
150 | fi |
151 | |
152 | ############################################################ |
153 | ######### |
154 | /bin/echo "インストール開始:DMG in ditto:" "$CURRENT_USER" |
155 | #マウントポイント |
156 | STR_MOUNTPOINT_PATH="$LOCAL_TMP_DIR/MountPoint/Dropbox" |
157 | ###マウントポイント作成 |
158 | /bin/mkdir -p "$STR_MOUNTPOINT_PATH" |
159 | /bin/chmod 777 "$STR_MOUNTPOINT_PATH" |
160 | |
161 | /usr/bin/hdiutil attach "$LOCAL_TMP_DIR/$DL_FILE_NAME" -noverify -nobrowse -noautoopen -mountpoint "$STR_MOUNTPOINT_PATH" |
162 | |
163 | ###########この方法だとサイレントにならない |
164 | #/usr/bin/sudo "$STR_MOUNTPOINT_PATH/Dropbox Offline Installer/Dropbox.app/Contents/MacOS/Dropbox" - nolaunch |
165 | /usr/bin/ditto "$STR_MOUNTPOINT_PATH/Dropbox.app" "/Applications/Dropbox.app" |
166 | |
167 | /usr/bin/hdiutil detach "$STR_MOUNTPOINT_PATH" -force |
168 | |
169 | ###ここは好みの問題か? |
170 | #/usr/bin/sudo chown -Rf root "/Applications/Dropbox.app" |
171 | #/usr/bin/sudo chown -Rf "$SUDO_USER" "/Applications/Dropbox.app" |
172 | |
173 | ###実行はユーザーにまかせるのもあり? |
174 | ##/usr/bin/sudo "/Applications/Dropbox.app/Contents/MacOS/Dropbox" - nolaunch |
175 | ##/usr/bin/sudo -u "$SUDO_USER" "/Applications/Dropbox.app/Contents/MacOS/Dropbox" - nolaunch |
176 | |
177 | ################################################# |
178 | ###テンポラリーのクリーニング |
179 | STR_MKTEMP_DIR_PATH=$(/usr/bin/sudo -u "$STAT_USR" /usr/bin/mktemp -d) |
180 | STR_TEMP_DIR_T=$(/usr/bin/dirname "$STR_MKTEMP_DIR_PATH") |
181 | STR_CHK_DIR_PATH="$STR_TEMP_DIR_T" |
182 | STR_CHK_STRING="dropbox" |
183 | LIST_FILE_NAME=$(/bin/ls "$STR_CHK_DIR_PATH" | grep "$STR_CHK_STRING") |
184 | if [ -n "$LIST_FILE_NAME" ]; then |
185 | /bin/echo "$LIST_FILE_NAME" | while read -r ITEM_FILE_NAME; do |
186 | /bin/echo "$STR_CHK_DIR_PATH/$ITEM_FILE_NAME" |
187 | DO_MOVE_TO_TRASH "$STR_CHK_DIR_PATH/$ITEM_FILE_NAME" |
188 | done |
189 | fi |
190 | ### |
191 | STR_MKTEMP_DIR_PATH=$(/usr/bin/sudo -u "$STAT_USR" /usr/bin/mktemp -d) |
192 | STR_TEMP_DIR_T=$(/usr/bin/dirname "$STR_MKTEMP_DIR_PATH") |
193 | STR_TEMP_DIR=$(/usr/bin/dirname "$STR_TEMP_DIR_T") |
194 | STR_TEMP_DIR_C="$STR_TEMP_DIR/C" |
195 | STR_CHK_DIR_PATH="$STR_TEMP_DIR_C" |
196 | STR_CHK_STRING="dropbox" |
197 | LIST_FILE_NAME=$(/bin/ls "$STR_CHK_DIR_PATH" | grep "$STR_CHK_STRING") |
198 | if [ -n "$LIST_FILE_NAME" ]; then |
199 | /bin/echo "$LIST_FILE_NAME" | while read -r ITEM_FILE_NAME; do |
200 | /bin/echo "$STR_CHK_DIR_PATH/$ITEM_FILE_NAME" |
201 | DO_MOVE_TO_TRASH "$STR_CHK_DIR_PATH/$ITEM_FILE_NAME" |
202 | done |
203 | fi |
204 | |
205 | STR_AGENT_PLIST_PATH="/Users/${STAT_USR}/Library/LaunchAgents/com.dropbox.DropboxMacUpdate.agent.plist" |
206 | if [ -e "$STR_AGENT_PLIST_PATH" ]; then |
207 | /bin/launchctl stop -wF com.dropbox.DropboxMacUpdate.agent |
208 | /bin/launchctl unload -wF "$STR_AGENT_PLIST_PATH" |
209 | fi |
210 | |
211 | ################################################ |
212 | ### ランチコントロール停止 LaunchAgents |
213 | /usr/bin/sudo -u "$STAT_USR" /bin/mkdir -p "/Users/${STAT_USR}/Library/LaunchAgents Disabled" |
214 | /usr/bin/sudo -u "$STAT_USR" /bin/chmod 700 "/Users/${STAT_USR}/Library/LaunchAgents Disabled" |
215 | |
216 | function DO_MOVE_TO_DISABLED_A() { |
217 | if [ -e "$1" ]; then |
218 | MOVE_DIR="/Users/${STAT_USR}/Library/LaunchAgents Disabled" |
219 | /usr/bin/chflags nouimmutable "$1" |
220 | /usr/bin/chflags nouchg "$1" |
221 | /usr/bin/chflags nouchange "$1" |
222 | /bin/chmod -N "$1" |
223 | if ! /bin/mv "$1" "$MOVE_DIR"; then |
224 | /usr/bin/sudo -u "$STAT_USR" /usr/bin/touch "$1" |
225 | /usr/bin/sudo -u "$STAT_USR" /bin/chmod 644 "$1" |
226 | /usr/bin/sudo -u "$STAT_USR" /usr/bin/chflags uchg "$1" |
227 | /bin/echo "$1" "移動しました" |
228 | else |
229 | /bin/rm "$1" |
230 | /usr/bin/sudo -u "$STAT_USR" /usr/bin/touch "$1" |
231 | /usr/bin/sudo -u "$STAT_USR" /bin/chmod 644 "$1" |
232 | /usr/bin/sudo -u "$STAT_USR" /usr/bin/chflags uchg "$1" |
233 | /bin/echo "$1" "移動に失敗しました" |
234 | fi |
235 | else |
236 | /bin/rm "$1" |
237 | /usr/bin/sudo -u "$STAT_USR" /usr/bin/touch "$1" |
238 | /usr/bin/sudo -u "$STAT_USR" /bin/chmod 644 "$1" |
239 | /usr/bin/sudo -u "$STAT_USR" /usr/bin/chflags uchg "$1" |
240 | /bin/echo "$1" "最初からなかった" |
241 | fi |
242 | } |
243 | |
244 | |
245 | DO_MOVE_TO_DISABLED_A "/Users/${STAT_USR}/Library/LaunchAgents/com.dropbox.DropboxMacUpdate.agent.plist" |
246 | |
247 | exit 0 |
AppleScriptで生成しました |
| 固定リンク