調べて、学ぶ

検索したり実験したことを覚えとくブログ

runasコマンドの代替を考えた

runasはつかえねぇ

職場で動いている業務システム(20年もののヴィンテージ)ですが、更新データを受け取るようにwindowsのログオン後に起動するバッチを、スタートアップフォルダに仕込んでいた。 ...のですが、

問題

  • 新しいユーザIDでログインするたびにスタートアップフォルダに仕込まなきゃいけない
  • 更新バッチには一部Admin必須となるコマンドが含まれている(regsvr32とか)ので、ipc$共有を使ってadmin権を行使していたが、コマンド実行のためにバッチファイルにadminユーザのパスワードが入っている。

  • 「ipc$共有でadmin権行使」は、windows10(8かもしれない)からどうも聞いてない様子(正式なドキュメント見つからず)

一時凌ぎ

  • スタートアップフォルダに仕込むのはやめて、AD環境なんだからログオンスクリプトに変更
  • $ipcできない&バッチにパスワードがあるのは、runas /savecredにしよう(資格情報がバッチリ残るけどテキストで残るよりは...)

これで試してみたのですが、新しいユーザが初めてログインする時は「とてつもなく待たされた挙句にrunasのパスワード待ち」というダメダメな形に。
キッティング時に我々が我慢すればいいのですが、知らないところでユーザ名を変更してログインされるとユーザが同じ目に遭う。

キッティングを担当している後輩くんも調べてくれて、どうもこれは「ログインスクリプト内でrunasが実行されて、パスワードの入力待ちでタイムアウトするまで待ち続けている」のだろうという結論に至った。

ならばrunasにパラメータを差し込めば とも思うが、方法が見つからない...

やりたいこと

  • admin権を行使してプログラムを実行したい
    • ユーザをadministratorsに入れるのは却下
    • runasは(/savecredするにしても)どうしても一回だけパスワードを入力する必要があるので、なんとかパスワードをパラメータで渡したい

※ちなみにrunas /savecredは、ユーザがカラクリに気づくとかなりまずい(ユーザがadmin権を悪用できてしまう)ので”最終手段”まで格下げ。

となると、もうrunasなんて使えねぇじゃん。

他ユーザで実行といえば

そういえば「タスクスケジューラ」はログオンしてない時でもアカウントを起動できるオプションがある。タスクスケジューラといえばatコマンド。 これ、ちゃんと使うのは初めてだな...「at /?」でヘルプを...

このATコマンドは廃止されました。代わりにschtasksコマンドを使用してください。

!? いつの間に...

結果(解決)

ということで、以下のコマンドを作成

@echo off
schtasks /create /tn <タスク名> /tr <実行するコマンド> /sc onece /st 23:59 /u <admin権を持っているユーザ> /p <パスワード>
schtasks /run /tn <タスク名>
schtasks /delete /tn <タスク名>

1行目でこれから使うコマンド(パスワード入っている)を非表示に。
2行目で「admin権を持つユーザで実行するタスクを作成」(”once”で一回だけ実行)、
3行目で(1行目の/tnの)「タスクを今すぐ実行」、
4行目で(1行目の/tnの)「タスクを削除」(このタスクの存在を消す)。

ずっと悩んでた”忌まわしい因習”が一つ断ち切れたw

taskctfに参加してきた(writeupのようなもの)

what's taskCTF?

  • task4233さんが自分の誕生日に開催しているctf(こちらが祝わなければならないはずなのに...)
  • 概要はこちら
  • taskさんはhardening2020で一緒のチームになったご縁。 seccon for begginersで札幌来た時に会いたかったけど、こちらの都合が合わず参加できず...

やったこと

1.submit_flag

  • こうやるんですよ ということで、問題文にあるフラグをコピペ。

2.just_google_it

  • 添付ファイルにあるフラグを読む問題。
  • ファイル名が「base64_encoded.txt」なので、デコードすればいいんだな と、お世話になっているdencodeでテキストを貼り付けたところ、「hello! hello! helleo!...」の連続。
  • 最後までスクロールしていると途中から文字の並びが崩れていることに気づき、もう一度ゆっくりスクロールするとflagが二箇所に分かれて置かれているのを見つけて、コピペ。
  • 他の人のwriteupをみて、テイストエディタに貼り付けて「hello! 」(最後にスペースつける)を消せば簡単にわかることに気づく

try_python

  • Pythonを使って配布ファイルに書かれた数字を全て足してみましょう! Flagは taskctf{ファイルに書かれた数の合計} です。」
  • ファイルは"1 3 5 7 ... 999"の羅列
  • わたくし、pythonは未学です... ということで、ブラウザのF12でwebコンソールを開き、以下のソースを書いて対応
let txt= '(テキストの中身)';
let sum = 0; 
let i;
for(i of txt.split(' ')){sum+= Number(i)}

ごめんなさい。python使いませんでした。

build_docker_environment

  • 「配布ファイルに含まれるapp/app.pyのコメントを外してDockerコンテナを起動し、Flagを取得してみましょう!」
  • docker、苦手意識でまだ触ってないのです。
  • ctfの案内ページにdockerの場合はこのコマンド叩いて という説明があることを思い出し実行(この場で初めてdockerDesktop入れましたよ)
  • app.pyのコメント欄を探してコメント削除・再実行してフラグゲット

welcome

  • 「2019年のtaskctfのwelcome問題のFlagは何でしたっけ?」
  • ”taskctf 2019”でググったら[st98]さんのページがトップに現れたので一読。フラグゲット

ramen

  • 「このラーメン屋の名前は何でしょう?」(写真添付)
  • google lensに投げたらかなりそれっぽいのが出てきたので回答。フラグゲット

robot(解けなかった)

  • 「Flagが漏洩してるって聞いたけど、本当ですか???」と、URLの記載
  • 開いたらかわいい手描きのロボットのjpg
  • ロボット...robots.txtのことか? と思い、URLの最後に「/robots.txt」を付けてブラウザを開くと、「User-Agent: * Disallow: /admin/flag」の表示。
  • URLの最後に「/admin/flag」をつけてブラウザを開くと、
    「401 Unauthorized
    (CTFサーバではないIP) is not internal IP address :(」
  • 上記のIP、自分のグローバルと思われるので、これを変えれば良い?
  • 「http 接続元 ip 変更」でググったらここで”X-Forwarded-For”のことを知り、これの使い方を考えているところで「そういえばburpってあったな」と思い、なんとなくでインストール&スタート
  • エラーメッセージがX-Forwarded-Forで指定したIPになったので、「インターナル...サーバのIPになればよい?」と考えたものの、サーバのグルーバルIPを指定してエラーになり頓挫。(ここで諦めた)
  • あとで他の人のwriteupみて気づいたけど、internalならloopbackアドレスやん...

first(解けなかった)

  • 「メンテ明けの12/6に100番目ちょうどの登録をしたユーザをトップページで掲載したいので、ユーザ名を taskctf{ユーザ名} で教えてください!」(docker再び)
  • dockerを起動してアクセスすると掲示板のような画面にユーザ名とコメントが出る
  • pythonソースがある。sqliteのファイルにSQLで抽出している(...インジェクションしろってこと?)
  • 「';」して条件なしのSQLを付与してみたけど、「複数行のSQLは処理しません」と怒られる。
  • まさかね...と思いながらURLの後ろにsqliteのファイルを記載したけどダウンロードされず <当たり前か
    ここで頓挫。
  • 他の人のwriteup参照。union句かぁぁぁぁ!忘れてた!!

kofun(解けなかった)

  • 「作問者が訪れてSNSにもアップロードしたはずの古墳の名前を思い出せなくなってしまいました.」(写真添付)
  • 写真には洞窟の入り口のようなもの(石室ということを知った)
  • google lensでも全く分からずでヒント使用。「twitterみろ」と。
  • twitterには、いろいろな古墳を歩いて見たことと、問題の写真ともうひとつ、埴輪が配置された古墳の写真。
  • 「古墳 埴輪」でググると、かなりそれっぽい写真を発見。龍角寺101号古墳らしい。 ...が、フラグゲットならず。
  • しばらく考えて、「歩き回ったなら、龍角寺近辺では?」となり、龍角寺の住所(千葉県印旛郡)の古墳を探すが、それらしき写真が見当たらず。頓挫。
  • 他の人のwriteup参照。古墳を列挙しているサイトから見つけたとのこと。地図で見たらまぁまぁ離れた場所。縮尺で大体900mほど。
  • 住所違うやん!(千葉県成田市) そりゃ見つからんわ!

douro(解けなかった)

  • 「この写真が撮られた場所の緯度と経度を教えてください!」(写真添付)
  • 交差点らしき風景。植物的には外国くさい。(よく見たら看板も英語だ)
  • はじっこに「culver」という文字が見えたのでググると、ロサンジェルスに「culver hotel」というホテルが出る。(お?)
  • culver hotel近辺の交差点を探しても、ストリートビューでは風景が違う
  • 道路の看板に書かれた文字(matheis withers)をググってもそれらしきものを見つけられず。頓挫。
  • 他の人のwriteup参照。どうも道路の看板までは当たりらしいけど、うーん...これはちょっとわからん。多分解けない。

振り返り

  • 231点取って、ヒントを2問(−100点)使ったので、131点で105位。むぅ...
  • 他にも、暗号解読やバイナリ解析があるけど全くできると思えなかったのでパス。
  • 相変わらずめっさ楽しい
  • こういうので色々調べると、初めて触る技術やアプリがあって知識の幅が広がる
  • なんとなくでもburpは使えるということがわかった
  • なんとなくでもdocker起動くらいならなんとかなることがわかった。相変わらずGoogleさんすごい。
  • 後半の三個(robots,first,kofun)は粘りが足りなかった(と思う)
  • 分からないととにかくwriteupが待ち遠しい。なるほど、このために他の人はwriteupを書いてくれているのか!(本当か?)
  • taskさん、誕生日おめでとうございます!

taskCTF2022


先日初めてctfに参加した時と、今回のtaskctf、両方ともctfdというアプリケーションとのこと。これは...クイズで使えるかも。_φ(・ _ ・

ハードニング2022に参加したハナシ

ハードニング(hardening 2022 decade)4回目の参加

3回目のwriteupはドラフト状態で眠ってます...

要点のみ。「ハードニングとは」

  • チームを組んで会社を衛ります。
  • 会社はショッピングサイト運営をしているので、ショッピングサイト(linuxサーバで動くdbやwebアプリ)を衛ります。
  • 会社なので当然事務方にwindowsサーバ&クライアントがいるのでこれも保護対象
  • 会社なのでコーポレートサイトがあるので、会社として体を成すようにコンテンツを充足しなければならない
  • linuxwindowsに区別なくサイバー攻撃が来るので、ショップ・事務PCどちらもダメージを少なくして運営しましょう
  • チームは面識がない人々で構成されるので、1ヶ月程度でチームビルディングします。
  • 攻撃されてしくじる(主にデータ漏洩など)と、社会的に怒られる(記者会見、上層部から詰め)イベントが起きる。

9月末 エントリーが決まる

  • とりあえずdiscordに入ってこい という主旨のメールが届く。メールには同じチームのメアドがtoに入っているので、人数と(人によっては)ドメインで所属がなんとなくわかる
  • ここでチームメンバーにコンタクトを取って、今後のやりとり方法を決める(うちのチームはslack)
  • メンバーに前々回一緒のチームだった「のみぞう」さんがおり、めっさ進めてくれる。
    • zoomを開催し、自分の画面を共有して議事録を書く(esa利用)
    • 会議は概ね1時間。決まらないことは宿題に。
      →高効率。うちの職場にも欲しい文化。
  • ここで自分の役割:ガヤおじさんとして「いない人への連絡」「あれあるぞ、これあるぞ」と煽る役。

10月 準備(チームビルド&情報共有)

  • 主にアイスブレイク、会議開始時に「最近のトピック」を持ってくる。
  • 経験者は本番時のタスクを全員へ共有し、各自でやりたい/できるタスクを決める
  • 幸いにも事務方やりますよ・インフラやりますよの人数バランスはいい感じ
  • この期間で各々がチートシート(本番ですぐ使えるコマンド集や設定ファイル)を作る
    • ちなみに自分はwindows人間なので、事務方ネットワークのActiveDirectory(主にグループポリシー)の設定に勤しんでいた
    • windowsのユーザパスワードは結構面倒な構成(英数大小記号込みの8文字以上)を求めてくるので、 それをoff
    • adminパスワードを変更、代理のユーザを作り、"ほぼadmin"に仕立てる
    • イベントログを一箇所に集めて監視したいので、イベントログのサブスクリプションを導入(結構ハマった)
    • 怪しいログを集めたいので、EnableWindowsLogSettingsにあるbatを参考にグループポリシーをつくる(エクスポートして本大会環境にもっていきます)
    • sysmonをクライアントにインストールさせる設定(com+越しにクライアントの管理画面を操作する想定)
  • ここで自分の役割:「そういえばアレどうします?」くらいしか言ってない...あとは世間話(時期的にCTFが重なってて、その話)

10月後半 マーケットプレイス

  • ハードニングの環境を衛るためのサービス(waf、お助け人員、外部から弱点監視 など)が発表されるので、「どれにする?」を会議。
    →あまりうまく話し合えなかった感。
  • 別チームの方が「マケプレだヨ!全員集合」という企画を立ち上げてくれて、マーケットプレイスで出店されるサービスのプレゼンを各メーカが プレゼンしてくれた。
    マケプレだヨ全員集合のお知らせ
  • これがものすごく有意義で、
    • 参加者は「それがどう役に立つのか」をイメージできる
    • 出店者は「これ、実世界でも同じことできますからね」をアピールできる。
  • ちなみにうちのチームは「バラクーダwafとNECの人員派遣サービスを買いに行くぞ!」となった(本番前日に)
  • ここで自分の役割:過去に使ったことのあるサービスの感想・情報提供(シスコはみんな欲しがるから高騰するぞ)

本番前日(ハードニングデイ)

  • 本番環境の資料(下記)が配られる
    • 背景事情
    • ネットワーク図や各サーバ・PCの設定資料
    • 本番中に行わなければならないタスク
  • 各チームで最後の打合せを行い、やること・順番を整理

本番当日

  • 今大会、初めての「オンサイト@沖縄」&「リモート(vpnで本番環境へ)」のハイブリッド開催
    →どっちもそれぞれの開催・参加経験があるから恐怖感は0
  • さぁやるぞ と思ったら、毎年恒例の「うまくいかない祭り」
    • vpnにはつながったけど、クライアントにログインできない
      →ネットワーク図を見間違えてIP間違ってた
    • マケプレに買い物に行けない(事象が謎のまま)
      →行ける人が代理
    • マケプレ、入札が必要なことをすっかり忘れてお買い物できず
      →販売元の計らいなのか(?)、結果的には購入できた。
    • シスコ製品、まさかの「高嶺の花すぎて入札なし」
    • drupalのコンテナを削除して再起動したら戻ってこない
      →あきらめた
      drupalが戻ってこない
    • (自分)クライアント(9台)のうちADドメインに入ってるのは3台だけ...
      → 3台はドメインに入れたけど、残りは放置(セグメント違うから諦めた)
    • com+経由(windowsのmmc)でクライアントを見に行ったら何故かエラー発生
      →わからないまま。これでクライアントのタスクスケジューラをモニタしようと思ってたのに...
    • 午後になってからあらゆるサイトがつながったり繋がらなかったり
      →今回の目玉。どうも複合的要因があるようで、結果的にはブロードキャストストーム状態になっていた模様。
    • ショップで買い物してくれたものを配送する業務があり、配送先を編集する作業がうまくいかない
      →こればっかりは「慣れ」しかないような。他チームはVBAcsvを編集してた模様。なるほど、だからofficeがあったのか。
    • 各ショップの管理画面に入れない
      → URLが変わったことに気づいてなかった。(これは単に自分が悪い。のみぞうさんesaのURLリストに変更後のURL書いてくれてたのに...ごめんなさい。)

とまぁ、いつもどおりの「安定のドタバタ感」で競技を終えました。 外的要因の被害よりも内部のトラブルシュートのほうが多かったな...

ソフトニングデイ

メインのハードニングデイが終わったら、デザートに”ソフトニング”があります。(ハードニングをやった週の週末に開催)

  • チームごとにハードニングの振り返りを発表
    • チームで行った準備
    • 当日のインシデント対応
    • マーケットプレイスをどう活用したか
    • ハードニング(準備から本大会までの1ヶ月)で得たもの などなど
  • 今大会の目的(タネ明かし的なもの)
    • その中で、非公開にしているブログ記事も、実は見えてしまう という話があった。なんか聞いたような記憶があるな...と思ってググったら、そこそこ関連のある話 がヒットした。気をつけよう。
  • 運営側の”戦い”の記録
  • 表彰(ハードニングの優秀チーム) もう、ハードニング参加者にとってはご馳走以外のなにものでもないほど「うんうん、それな」の嵐
  • 詳しくはyoutubeで「hardening」で検索するといいよ

振り返り、次回に向けて

そろそろ区切り良く参加をやめようかな と思いながらの参加でしたが、毎度毎度学びが多すぎてやめられない。困った。 次の作戦として、

  • psexec使う。グループポリシーがあってもこれがないと正直クライアントの制御(即時反映とか)に限界がある
  • hayabusa導入。
  • ショッピングサイト(EC-Cubewordpress(の、welcart、woocomerece))のお勉強。
  • windowsRMSの検討(CAL発生するやん...)

今回の目玉(に思える)

うちのチーム(team02)は、大会中午後からネットワーク激重になる状態が続いており、途中から「シャットダウンしたサーバに向かってarpを吐きまくっている=ブロードキャストストーム」が起きていることがわかりました。これだけが原因ではありませんが、まぁそれなりにうちのチームが働けなかったし、そもそもこんな動き(arp止まらない)自体おかしくね? ということで、運営側から調査報告(5:38:10あたり)が出ました。
結論としては「再現性があるけど、環境設定は原因ではない」。次回までに原因究明します! とのことなので、乞うご期待 とします。

最後に

今年も楽しく学ばせていただきました。沖縄でハイブリッド開催という正統進化を遂げて、なおパワーアップしてました。
運営に関わる方々、チームメンバー、ナイスなアウトプットをしてくれた他の参加者全ての皆様に大感謝! いたします。

team02_ばび

docomoのスケジュールアプリを移行した

docomoのスケジュールアプリはical形式じゃない

嫁さんがスマホを機種変したのですが、SIMはdocomoのまま、SIMフリースマホに変更しました。 googleアカウントもdocomoのメールアドレスも大したことなく移行できたのですが、まさかのスケジュールアプリで非常に困らされたので記録を残す。

前提

  • 嫁さんのスケジュールアプリはdocomoスマホのプリインストールアプリ
  • このアプリはdocomo以外のスマホではプレイストアからインストールできない
    SIMフリースマホではインストールできない

  • このアプリのバックアップ選択肢はdocomoクラウド or SDカードで、ファイル形式は(icalでもcvsでもcsvでもなく).vcs形式

  • SDにエクスポートしたvcsファイルのサイズは23MB(軽くめまいがした...)

  • 同じアプリは使えないため、これを機にgoogleカレンダーに行ってもらいたいが、googleカレンダーは.vcsファイルを受け取らない(インポートしても「0件中0件をインポート」となる)

試した手段

  1. vcsを扱えるアプリをインストールして使ってもらう
    ⇒ ない。 驚くぐらい見つからない。有料で対応しているようなことを書いているのもあるけど、どうも確証が得られない。却下。
  2. フリーウェアを探してvcsical変換をする
    • (フリーじゃないけど)outlookvcscsv変換
      ⇒ごめんなさい。outlook持ってないです。
    • MSNのoutlook.live.comからアップロード・icalでエクスポートできないか?
      ⇒ ファイルをアップロードしたらファイルサイズに引っかかった(10MBまでだった記憶)

いろいろググった結果、以下のが引っかかるが、どちらも希望は満たされず。

Q8.インポートできるファイル形式にはどのような種類がありますか。

iCalendar形式(.ics)とvCalendar形式(.vcs)に対応しています。iCalendarの文字コードはUTF8、 vCalendarの文字コードはSJISとなります。 

それだよ! と思わず声が出たのですが、実際に使ってみると「未来の予定しか登録しません」と言われてしまう。ぐむむむ...

で、何をしたか

今まで試したりググった中で分かったことは、

⇒自力でやるにはvcs形式とical形式の勉強が必要かと思っていたら、意外とこれはイケるかも... ということで、vcsから必要なものだけ別ファイルにコピーするスクリプトを作成。(nodejsです)

vcsの SUMMARY:スケジュールの題名 はQUOTED-PRINTABLEという形式でエンコードされている(初めて聞いた)とのことなので、これをデコードする機能がないか探したら、 そのものずばりが見つかったのでインストール。

◆プロジェクトフォルダ作成(コマンドラインで実行)

mkdir decodeVCS
cd decodeVCS
npm install quoted-printable

◆プロジェクトフォルダにdocomoスケジュールからエクスポートした.vcsファイルを置く

◆プロジェクトフォルダにindex.jsを作成し、コードを書く

// index.js
let quotedPrintable = require('quoted-printable');
let utf8 =require('utf8');
let fs= require('fs');

const path = require('path');

//変換対象(読み取り元)のvcs
const targetVCS = '(vcsファイルの名前).vcs';

//変換先(フォーマット後)のvcs
formatedVCS = 'newVCS.vcs';

//prodID('//会社名//個人名(プロダクト名)//国名' らしいけど、ブランク以外ならなんでもいい)
const prodID = '//-//baba babao//JP';

//vcsを読み込む
const text = String(fs.readFileSync(path.join(__dirname, targetVCS))).split('\r\n');

//読み込んだ内容によってはスキップすることもあるため、ストリームを使って書き込む
const writeoption ={
  encoding:'utf8'
}
const writeStream = fs.createWriteStream(path.join(__dirname, formatedVCS),writeoption);


let arrline;
let doFlg = true;
let strtmp ='';

//読み込んだvcsを1行ずつ展開
//日付がない場合は書き込みをスキップする
text.map(line =>{

  arrline = line.split(':');

  switch(arrline[0]){
    case 'BEGIN':
      if(arrline[1] === 'VCALENDAR'){
        //icalファイルのヘッダ
        writeStream.write(line + '\r\n' + 'PRODID:' + prodID + '\r\n' + 'VERSION:2.0\r\n');
      }else{
        strtmp += line + '\r\n';
      }
      break;
      
    case 'DTSTART':
    case 'DTEND':
      if(arrline[1]==='')  {
        //日付が入ってなければこのイベントは書き込まない
        doFlg = false;
      }
      
      strtmp += arrline.join(':') + '\r\n';
      break;

    case 'CATEGORIES':
      strtmp += arrline.join(':') + '\r\n';
      break;
      
    case 'END':
      strtmp += arrline.join(':') + '\r\n';
      
      //有効なイベント(DTSTART、DTENDがある)なら書き込み
      if(doFlg){
        writeStream.write(strtmp);
      }

      //初期化
      strtmp = '';
      doFlg = true;
      
      break;

    default:
      //'SUMMARY;'から始まる場合は加工
      if(arrline[0].search('SUMMARY;') === 0){
        //quotedPrintableをデコードし、改行を文字を半角スペースに変換
        //arrline[0]は 'SUMMARY;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE' となっているので、SUMMARY以後をカットして「:」付ける
        strtmp += 'SUMMARY:' + utf8.decode(quotedPrintable.decode(line.split(':')[1])).replace(/\n/g,' ') + '\r\n';
      }
  }
  
})

writeStream.end();

新たにnewVCSというファイルを作り出すので、そいつをgoogleカレンダーにインポートさせたら...読んだーーー!

嫁さんもこれで満足だろ...と思ったら、「今まで色分けしてたのに全部同じ色になっている」とのクレーム。 色の設定はical形式で定めていないので、次のレベルへチャレンジですわ…。

firebaseの「web設定」ボタンが見つからない

あるはずなのにない

初めてfirebaseを触るため、本を見ながら言われるままに画面を進めるのですが… authenticationの画面にあるはずの「web設定」のボタンがない。

webアプリ設定がない

”firebase authentication web設定 ない” でググっても引っ掛からず。

これが押せないとAPIキーが発行できないのぢゃーー としばらくコンソールを探すと、プロジェクトの設定画面にこんなのを発見。

firebase-webアプリ設定

アプリがない…からボタンがない というわけか。 ここにある”</>”をクリックしたらプロジェクト発行画面になり、

web設定画面

「アプリを登録」すると… おー、これこれ。これが欲しかった。

webアプリのapi発行

いつ変わったのか知らんけど、なかなか見つからなかったのでメモっとこ。

crontabの実行

定時にコマンドを実行したい

crontabを仕込む

windowsならタスクスケジューラに登録するだけでOKなことが、ラズパイではcron(クロン)になる。ラズパイ(手元のはラズパイ4)ではcronはどうやらデフォルトでonになっているようなので、あとはログの設定を。 インターネッツはなんでも情報が転がっていて便利だねぇ。

ラズベリーパイでCronを使って定期処理を行う方法、ハマりポイントやCronが動かない場合の対処方法など

これで終わりではなく、ログの書き方も要設定。

crontabのログに日時を仕込む

上記のcrontab設定だけだとログ(/var/log/syslog)に「やった」としか残らないので、もうちょい詳しい内容が欲しい。(errorだけじゃ何が起きたわからないし)

crontab の設定で日付の入った名前のファイルをつくろうとしたらエラーでたよ

コマンドの出力をリダイレクトして、日付をエスケープしろ、と。 つまり、

0 0 * * * (コマンド) > /home/(ユーザ)/`date +%Y%m%d`.log

てことか。(ちゃんと動きました ^^)

またoffice2013にやられた

【困りごと】

powerpointでナレーションした音声が聞こえない

【結論】

mp4コーデックがPCに入ってなかった。

【環境】

以前の記事を参照。 sirabete-manabu.hatenablog.com

【調べたこと】

  • ナレーションが聞こえるPCはoffice2013、聞こえないPCはoffice2010…またか。

  • 該当ファイルの拡張子を.zipに変えて解凍してみると、音声ファイルは「.mp4」

  • 聞こえるPCも聞こえないPCも、mp4は再生可能(GOMプレイヤーで再生している)

  • 聞こえないPCで該当ファイルを開き、ナレーション再生箇所(音声のアイコン)にカーソルを近づけると、「対応していないコーデック」との表示

…いやいや、対応してないコーデックなら再生できないでしょ(GOMプレーヤーあるし)、としばらく考え込んでいると、後輩くんが「QuickTime入れればいいってグーグルさんがいってますよ」と。

なるほど確かにmp4といえばQuickTime。でもすでに再生できてるしなぁ… でも言われたことは否定せずにとりあえず試してみよう。

で…解決! 思わず後輩くんに”ジーニアス○○(後輩くんの名前)!”って叫んでしまった。

【何が起きたのか(おそらく)】

あとで裏どりもできたけど、

  • PowerPointのナレーションは、
    • デフォルトはwav形式で作られる
    • office2010のpowerpointは、メディアを圧縮するとwmaになる
    • office2013のpowerpointは、メディアを圧縮するとmp4になる

support.microsoft.com

おそらくは、ユーザーはpowerpoint 2013でナレーションを吹き込んだ後、ファイルサイズがでかすぎて圧縮をかけたと思われる。 その結果ナレーションにmp4を使うファイルが出来上がり、mp4コーデックを標準搭載していないwin7&office2010の組み合わせではエラーになったと思われる。

GOMプレーヤーはmp4を使えるけど、プログラムの埋め込みじゃなく音声の埋め込みをしたから関連付けは無視されていたとも考えられる。 win10だったらこの現象も起きなかったんだろうけど…😩