クリエイター:メタボ兔

ウェブやアプリの開発者で利用する色な技術やサーバーや開発環境の設定について共有する場

MacOS自動アップデートの通知を無効にする

概要

会社の開発用のMac ProはOSのアップデートをしない方針のチームが多いと思います。今日は一般的な対応方法と追加処理を整理してみました。

一般的な対応

1.システム環境設定 → ソフトウェアアップデート → 詳細 を選択します

f:id:FattyRabbit:20210622092701p:plain

2.上記ウィンドウのチェックをすべて外します。チェックを外すことでOSが自動的に更新の確認をしなくなりますが、自分の好きなタイミングでアップデートできるので安心してください。

通知を無効化

一般的な対応をしても通知はいつも通り出るし、間違えてボタンを押すのが気になりますよね。ターミナルを開き以下のコマンドを実行します。

Catalinaの場合

$ sudo softwareupdate --ignore "macOS Catalina"

Big Surの場合

$ sudo softwareupdate --ignore "macOS Big Sur"

上記をセットしても更新があるとソフトウェアアップデートのアイコンに赤丸のバッチが表示されてしまいます。以下のコマンドで消すことは可能です。

$ defaults write com.apple.systempreferences AttentionPrefBundleIDs 0
$ killall Dock

ShellスクリプトのみでSentryへイベントを送信

概要

使用しているAPIが正常に動いているかチェックしてSlackへ通知することになりましたが、サーバーに勝手にライブラリ(モジュール)のインストールが出来なかったので以下のような素晴らしい物の利用ができませんでした。

blog.sentry.io

ソース

いきなりソースです。

#!/bin/bash

# Sentry info
SENTRY_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXX
SENTRY_SECRET=YYYYYYYYYYYYYYYYYYYYYYYYYY
SENTRY_PROJECTID=MMMMMMM
SENTRY_HOST=sample.com
SCRIPT_ARGUMENTS=$@
# API info
API_URL=http://sample.com/api/xxxx
API_TOKEN=XYXYXYXYXYXYXYXYXYXYXYXXY

# event payloads : https://develop.sentry.dev/sdk/event-payloads/
function sendSentryMsg()
{
    LEVEL=$1
    TYPE=$2
    HTTP_CODE=$3
    TRACE=$4
    MESSAGE=$5
    EVENT_ID=`openssl rand -hex 16`
    EVENT_TIMESTAMP=`date +"%Y-%m-%dT%H:%M:%S"`
    SENTRY_TIMESTAMP=`date +%s`

    # Create a native event
    response=$(curl -sS https://$SENTRY_KEY@xxxxxxx.ingest.sentry.io/api/$SENTRY_PROJECTID/store/ \
        -H 'Content-Type: application/json' \
        -H "X-Sentry-Auth: Sentry sentry_version=7,sentry_timestamp=$(date +"%s"),sentry_client=sentry-curl/1.0,sentry_key=${SENTRY_KEY}" \
        -d "{
            \"event_id\": \"$EVENT_ID\",
            \"culprit\": \"$0\",
            \"timestamp\": \"$EVENT_TIMESTAMP\",
            \"message\": \"$MESSAGE\",
            \"level\": \"$LEVEL\",
            \"tags\": {
                \"shell\": \"$SHELL\",
                \"server_name\": \"`hostname`\",
                \"path\": \"`pwd`\",
                \"http_code\": \"$HTTP_CODE\"
            },
            \"exception\": {
                \"values\": [
                    {
                    \"type\": \"$TYPE\",
                    \"value\": \"$TRACE\",
                    \"module\": \"__builtins__\"
                    }
                ]
            }
        }" > /dev/null 2>&1)
    # echo $response
}

function getJsonItem()
{
    JSON_STRING=$1
    ITEM_KEY=$2
    # grep -Eo '"$ITEM_KEY"[^,]*' | grep -Eo '[^:]*$'
    # | perl -pe 's/"text"://; s/^"//; s/",$//'
    echo $JSON_STRING | grep -Eo '"'$ITEM_KEY'"[^,]*' | grep -Eo '[^:]*$' | tr -d "\""
}

function checkVPPApi()
{
    {
      IFS= read -rd '' HTTP_BODY
      IFS= read -rd '' HTTP_STATUS
      IFS= read -rd '' CURL_STATUS
      IFS= read -rd '' CURL_ERROR_MSG
    } < <({ HTTP_BODY=$(curl -sSL $API_URL \
        -o /dev/stderr \
        -w "%{http_code}" \
        -H 'Content-Type: application/json' \
        -d "{
            \"token\": \"$API_TOKEN\"
        }" \
        ); } 2>&1; printf '\0%s' "$HTTP_BODY" "$?")

    # echo $HTTP_BODY
    # echo $HTTP_STATUS
    # echo $CURL_STATUS
    # echo $CURL_ERROR_MSG

    level="info"
    type="正常に終了されました。"
    trace="Success!!"
    message=""
    if [ $CURL_STATUS != "0" ]; then
        declare -a CURL_ERRORS=(
            ["1"]="CURLE_UNSUPPORTED_PROTOCOL"
            ["2"]="CURLE_FAILED_INIT"
            ["3"]="CURLE_URL_MALFORMAT"
            ["4"]="CURLE_URL_MALFORMAT_USER"
            ["5"]="CURLE_COULDNT_RESOLVE_PROXY"
            ["6"]="CURLE_COULDNT_RESOLVE_HOST"
            ["7"]="CURLE_COULDNT_CONNECT"
            ["8"]="CURLE_FTP_WEIRD_SERVER_REPLY"
            ["9"]="CURLE_REMOTE_ACCESS_DENIED"
            ["11"]="CURLE_FTP_WEIRD_PASS_REPLY"
            ["12"]="CURLE_FTP_ACCEPT_TIMEOUT"
            ["13"]="CURLE_FTP_WEIRD_PASV_REPLY"
            ["14"]="CURLE_FTP_WEIRD_227_FORMAT"
            ["15"]="CURLE_FTP_CANT_GET_HOST"
            ["16"]="CURLE_HTTP2"
            ["17"]="CURLE_FTP_COULDNT_SET_TYPE"
            ["18"]="CURLE_PARTIAL_FILE"
            ["19"]="CURLE_FTP_COULDNT_RETR_FILE"
            ["21"]="CURLE_QUOTE_ERROR"
            ["22"]="CURLE_HTTP_RETURNED_ERROR"
            ["23"]="CURLE_WRITE_ERROR"
            ["25"]="CURLE_UPLOAD_FAILED"
            ["26"]="CURLE_READ_ERROR"
            ["27"]="CURLE_OUT_OF_MEMORY"
            ["28"]="CURLE_OPERATION_TIMEDOUT"
            ["30"]="CURLE_FTP_PORT_FAILED"
            ["31"]="CURLE_FTP_COULDNT_USE_REST"
            ["33"]="CURLE_RANGE_ERROR"
            ["34"]="CURLE_HTTP_POST_ERROR"
            ["35"]="CURLE_SSL_CONNECT_ERROR"
            ["36"]="CURLE_BAD_DOWNLOAD_RESUME"
            ["37"]="CURLE_FILE_COULDNT_READ_FILE"
            ["38"]="CURLE_LDAP_CANNOT_BIND"
            ["39"]="CURLE_LDAP_SEARCH_FAILED"
            ["41"]="CURLE_FUNCTION_NOT_FOUND"
            ["42"]="CURLE_ABORTED_BY_CALLBACK"
            ["43"]="CURLE_BAD_FUNCTION_ARGUMENT"
            ["45"]="CURLE_INTERFACE_FAILED"
            ["47"]="CURLE_TOO_MANY_REDIRECTS"
            ["48"]="CURLE_UNKNOWN_TELNET_OPTION"
            ["49"]="CURLE_TELNET_OPTION_SYNTAX"
            ["51"]="CURLE_PEER_FAILED_VERIFICATION"
            ["52"]="CURLE_GOT_NOTHING"
            ["53"]="CURLE_SSL_ENGINE_NOTFOUND"
            ["54"]="CURLE_SSL_ENGINE_SETFAILED"
            ["55"]="CURLE_SEND_ERROR"
            ["56"]="CURLE_RECV_ERROR"
            ["58"]="CURLE_SSL_CERTPROBLEM"
            ["59"]="CURLE_SSL_CIPHER"
            ["60"]="CURLE_SSL_CACERT"
            ["61"]="CURLE_BAD_CONTENT_ENCODING"
            ["62"]="CURLE_LDAP_INVALID_URL"
            ["63"]="CURLE_FILESIZE_EXCEEDED"
            ["64"]="CURLE_USE_SSL_FAILED"
            ["65"]="CURLE_SEND_FAIL_REWIND"
            ["66"]="CURLE_SSL_ENGINE_INITFAILED"
            ["67"]="CURLE_LOGIN_DENIED"
            ["68"]="CURLE_TFTP_NOTFOUND"
            ["69"]="CURLE_TFTP_PERM"
            ["70"]="CURLE_REMOTE_DISK_FULL"
            ["71"]="CURLE_TFTP_ILLEGAL"
            ["72"]="CURLE_TFTP_UNKNOWNID"
            ["73"]="CURLE_REMOTE_FILE_EXISTS"
            ["74"]="CURLE_TFTP_NOSUCHUSER"
            ["75"]="CURLE_CONV_FAILED"
            ["76"]="CURLE_CONV_REQD"
            ["77"]="CURLE_SSL_CACERT_BADFILE"
            ["78"]="CURLE_REMOTE_FILE_NOT_FOUND"
            ["79"]="CURLE_SSH"
            ["80"]="CURLE_SSL_SHUTDOWN_FAILED"
            ["81"]="CURLE_AGAIN"
            ["82"]="CURLE_SSL_CRL_BADFILE"
            ["83"]="CURLE_SSL_ISSUER_ERROR"
            ["84"]="CURLE_FTP_PRET_FAILED"
            ["85"]="CURLE_RTSP_CSEQ_ERROR"
            ["86"]="CURLE_RTSP_SESSION_ERROR"
            ["87"]="CURLE_FTP_BAD_FILE_LIST"
            ["88"]="CURLE_CHUNK_FAILED"
            ["89"]="CURLE_NO_CONNECTION_AVAILABLE"
            ["90"]="CURLE_SSL_PINNEDPUBKEYNOTMATCH"
            ["91"]="CURLE_SSL_INVALIDCERTSTATUS"
            ["92"]="CURLE_HTTP2_STREAM"
            ["93"]="CURLE_RECURSIVE_API_CALL"
            ["94"]="CURLE_AUTH_ERROR"
            ["95"]="CURLE_HTTP3"
            ["96"]="CURLE_QUIC_CONNECT_ERROR"
            ["98"]="CURLE_SSL_CLIENTCERT"
        )

        level="fatal"
        type="接続エラーが発生しております。"
        trace="${CURL_ERRORS["$CURL_STATUS"]}"
        message=""
    elif [ $HTTP_STATUS -ge "400" ] && [ $HTTP_STATUS -lt "600" ]; then
        level="fatal"
        type="VPP側でエラーが発生しております。"
        trace="$HTTP_STATUS"
        # trace=$HTTP_BODY
        message=""
    fi

    # echo $level
    # echo $type
    # echo $HTTP_STATUS
    # echo $trace
    # echo $message
    # echo $HTTP_BODY

    if [ $level != "info" ]; then
        sendSentryMsg "$level" "$type" "$HTTP_STATUS" "$trace" "$message"
    fi
}

checkVPPApi

exit 0

Slackの連携

私から詳しく書く必要もないかなと思いますんで、参考サイトで。

qiita.com

docs.sentry.io

Gmailのカレンダーの出欠連絡の自動振り分け

概要

GSuiteの利用している会社でカレンダーにスケジュールが入ると通常メールが送られてきますが、カレンダーを日常見ているので要らないかと思いました。しばらくGmailの自動振り分け方法が分からず、一応Googleカレンダーの方の設定でメールの通知を減らして対応しました。

ただし、通知が多い世の中でブラザーの通知のみだと流れてしまうケースもありちょっと不安でした。今週やっと見つけましたので紹介したいと思います。

Gmailの設定

support.google.com

Gmailを開き、検索ボックスの下矢印をクリックして以下の内容を入れます。

  • [To] に自分のメールアドレスを入力
  • [含む] に「invite.ics OR invite.vcs」と入力
  • [添付ファイルあり] チェックボックスをオン

f:id:FattyRabbit:20210611180859p:plain

この状態で一回検索してみて確認してもいいかと思います。もう一度検索ボックスの下矢印をクリックすれば入力されたまま表示されます。

その他とは通常のフィルタ作成の手順と一緒です。

  • [フィルタを作成] をクリック
  • [ラベルを付ける] チェックボックスをオンにし、受信メールを自動的に分類するためのラベルを選択
  • [受信トレイをスキップ(アーカイブする)] チェックボックスをオン
  • [フィルタを作成] をクリックします。

f:id:FattyRabbit:20210611181348p:plain

今年の夏、どこにも行けない子供のために

コロナでこの夏何処にも行けなさそうなので、子供のために水鉄砲をちょっといい物買ってあげました。

f:id:FattyRabbit:20210604232814j:plain

先ずはお風呂でテスト兼遊びました。喜ぶ子供、元々スプラトゥーンを好きでYoutubも色々見ていたのですごく喜びました。 明日は近い公園で水鉄砲で遊ぶ予定です。WWWW

Ovice 504 Tシャツが到着!!

前職でOviceというVirtualオフィスを利用していましたが、まだ始めたばかりだったので大きな障害があった時期もありました。その時504が発生しまして復帰した後のイベントとして「504Tシャツ?」がありました。

ありありの話ではありますが、普通の会社では出来ないことでもあるので応援する気持ちで応募しました。

転職とかもありまして完全に忘れていましたが、今日届きました。ちょっとびっくりしました。

チャージャーん!!!!

f:id:FattyRabbit:20210529000332j:plain

f:id:FattyRabbit:20210529000356j:plain

504がもっと見える方がいいかな〜〜