GnuPG2にpublic key decryption failed: Inappropriate ioctl for deviceと怒られた時の対処法
gpg: encrypted with 4096-bit RSA key, ID XXXXXXXXXXXX, created 2018-03-06 "Tsumugi Shiraishi <tsumugi@example.com>" gpg: public key decryption failed: Inappropriate ioctl for device gpg: decryption failed: No secret key
なんやいね、これは!?
WSL(Ubuntu 18.04)でGnuPG2を使おうと思ったらこんなエラーが出て鍵の復号化が出来ず困った。
ちなみにCUIメインの運用になるので、pinentryにはpinentry-cursesを使ってます。
$ cat ~/.gnupg/gpg-agent.conf pinentry-program /usr/bin/pinentry-curses
解決策
.bashrc
(zshなら.zshrc
)に以下の設定を追記する。
export GPG_TTY=$(tty)
どうやらpinentry-cursesが正しい出力先のttyを認識出来ていないとこのようなエラーが出る模様。(恐らく初期設定だと/dev/ttyとかに向いていると思われる)
ので、シェルが立ち上がる時に正しいttyを設定してあげると直る模様。
あとがき
というかちゃんと設定しろって公式のマニュアルにも書いてありましたね... ちゃんと読むべきでした。
Xamarin.MacでiTunesとSwinsianで再生している曲の情報を取得する
AppleScriptを使った曲情報の取得のサンプルは探せばゴロゴロ出てきますが、アルバムアートの画像も含めてXamarin.Macから取得する方法が見つからなかったのでメモ。
転がってるSwiftを使ったサンプルを参考にどのAPIを叩けば曲情報が取れるのか調べる
NSDistributedNotificationCenterを使うとiTunesとSwinsianでの曲再生時にイベントが取れるようです。飛んできた通知の中に曲情報が入っているみたいなのでこれを利用します。
とりあえずSwinsianは公式HPにNSDistributedNotificationCenterで取ってくるべきNSNotificationのNameが書いてあるので、参考にSwiftのコードを書いてみました。
import Cocoa class ViewController: NSViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. DistributedNotificationCenter.default().addObserver(self, selector: #selector(self.onTrackChange(notification:)), name: NSNotification.Name("com.swinsian.Swinsian-Track-Playing"), object: nil) } override var representedObject: Any? { didSet { // Update the view, if already loaded. } } @objc func onTrackChange(notification: NSNotification){ print("Event recived.\n") let userinfo = notification.userInfo print(userinfo ?? "") print(userinfo?["thumbnailPath"] as? String ?? "") print("Event recived end.\n") } }
曲情報が入ったAnyHashableが取れるみたいですね。ちなみにiTunesはNSNotification.Name
の名前をcom.apple.iTunes.playerInfo
に変更すればサムネイルのパス以外は取れます。
肝心のアルバムアートの取り方が分からない
Swinsianに関しては、pngのパスがAnyHashableに入ってるのでそこから取ってきてNSImageに突っ込めば表示できますね。簡単です。
しかし、iTunesに関してはScripting Bridgeを使って取得する必要があります。
Scripting Bridgeに関してはAppleのドキュメントを読めば大体わかると思いますが、要はWindowsでいうCOMみたいなものです。
ありがたいことにiTunes.h
の生成の仕方が書いてあるので、書いてあるコマンドを打ってiTunes.h
を生成しました。
sdef /Applications/iTunes.app | sdp -fh --basename iTunes
生成されたiTunes.h
を読めば大方どのAPIを叩けばお目当てのアルバムアートが取れるかわかるはずです。
というわけでC#で書けばこんな感じになるはずです。(本当はSwift版も書こうかと思いましたが何故か上手く動かなかったのでやりませんでした)
var itunes = SBApplication.FromBundleIdentifier("com.apple.iTunes"); var ctrack = itunes.ValueForKey(new NSString("currentTrack")); var front_artwork = ctrack.ValueForKey(new NSString("artworks")) as SBElementArray; if (front_artwork.Count > 0) { var aitem = front_artwork.Get()[0]; var raw_image = aitem.ValueForKey(new NSString("rawData")) as NSData; var image = new NSImage(raw_image); }
というわけでゴリ押しでコードを書く
gistb728c424cc574d02a29e841f19d2d534
あとがき
Xamarinとはいえ、こういったmacOS特有の機能を使う場合はまずはAppleのドキュメントを確認しなければなりませんし、大半のサンプルはSwift/ObjCで書かれているのでそれが読めないとかなりつらいです。
なうぷれTunesV2 Ver1.3をリリースしました
いつもなうぷれTunesをご利用ありがとうございます。
Ver1.2のリリース後、いくつかのバグ報告と機能追加要望を頂いたのでそれらを改善したVer1.3をリリースしました。
主な変更点
- [自動ツイート] 前回のツイートから一定時間経過していないとツイートしない機能を追加
- [UI] ツイートダイアログを表示後に自動的にツイートを入力するテキストボックスにフォーカスが行くように変更
- [iTunesプラグイン] アルバムアートワークが大きすぎるとクラッシュするバグを修正
- [iTunesプラグイン] デバッグモードを追加
「前回のツイートから一定時間経過していない場合ツイートしない」機能の追加
上記画像の設定項目を変更することで、「前回のツイートから一定時間経過していない場合ツイートしない」機能を有効化することができます。
例えばこの画像ですと、5分に設定されているので、最後のツイートから5分以上経過していない場合はツイートしないという動作になります。
ツイートダイアログを表示後に自動的にツイートを入力するテキストボックスにフォーカスが行くように変更
ダイアログ表示後そのままツイートしたい時はそのままCtrl+Enterでツイートできるようになりました。(要は余計な1クリックが減ったということです)
iTunesプラグイン使用時に、アルバムアートワークが大きすぎるとクラッシュするバグを修正
github.com
本アプリはiTunes連携用に同梱されたiTunesNPPlugin.exe
を使用していますが、埋め込まれているアルバムアートワークが大きい音楽ファイルを再生するとプラグインのプロセスがクラッシュしてしまいそれ以降に再生した曲が本アプリを再起動するまで反映されなくなるバグを修正しました。
iTunesプラグインにデバッグモードを追加
うまくiTunesプラグインが動作しない環境向けに、トラブルシュート用にデバッグモードを追加しました。
--debug
オプションを付けた状態でiTunesNPPlugin.exe
を起動することで詳細なログを取得することが出来ます。(なうぷれTunesがインストールされたディレクトリ内でPowerShellを開いて、.\iTunesNPPlugin.exe --debug
と実行してください)
うまくiTunesとの連携が上手く行かない場合は、大抵の場合はiTunesの再インストールをしてPCを再起動すると直りますが、直らない時はこのデバッグモードで表示される画面のスクリーンショットをgithubのissueに投げてもらえば対応します。
ダウンロード
以前のバージョンがインストールされたディレクトリ内に新しいバージョンのファイルを展開(上書き)していただくことでアップデートできます。
Sourcetree for WindowsでコミットにGPGで署名する
上記画像のようにgithubでは署名してあるコミットにはVerifiedの印が付く。
署名したい...といっても、Sourcetree for Windowsは署名に対応してない(Mac版は対応してる模様)ので強引に対応させた時のメモ。
鍵は既に生成済みという前提で話を進めます。
Gpg4winを導入する
既に導入済みなら飛ばしてください。
KleopatraというGUIツールが付いてくるのでありがたく使わせてもらって、ここでLinux環境で使っていた鍵をインポートした。
一応パスが通ってるかの確認も込めて、Powershellからgpg --list-secret-keys
を実行してみる。
PS C:\Users\izumin> gpg --list-secret-keys C:/Users/izumin/AppData/Roaming/gnupg/pubring.kbx ------------------------------------------------- sec rsa4096 2018-03-06 [SC] 28CCF1B13BB7557AA13039949B215618569CB439 uid [ 究極 ] Izumi Ohishi <ohishiizumi@example.com> ssb rsa4096 2018-03-06 [E]
大丈夫そうですね。
Git for Windowsの設定を弄る
Powershellから以下のコマンドを実行。
> git config --global user.signingkey 28CCF1B13BB7557AA13039949B215618569CB439 > git config --global commit.gpgsign true > git config --global gpg.program $((gcm gpg).Definition)
※Powershellでは(gcm gpg).Definition
と実行してあげることで*nix環境のwhichコマンドと同じ事ができる模様。
※Sourcetree側で対応してないならデフォルトで署名つけるようにすれば良いのでは?という強引な解決策なのでSourcetreeのGUIから今回だけは署名したくないみたいなことは出来ないです。
※Git for Windows付属のGnuPGはちょっとおバカなので(あるはずもない/dev/ttyを参照したりとか)使わないようにします。
※Sourcetree内蔵のgitで同じことが出来るかどうかは未確認です。
ちなみにこの設定により、以後デフォルトでコミットにここで設定した鍵で署名が付くようになるので注意。
あとは普通に今まで通りのようにcommitするだけ
コミット処理中に鍵のパスワードを求めるダイアログが出てくるので、入力してOKを押せば大丈夫です。
あとがき
いい加減Windows版も対応してくれ....(悲願)
Setup GPG to sign commits within SourceTree - Atlassian Documentation
一応公式に設定方法のドキュメントはあるが、これはmacOS版だけなのでWindows版では同じことは出来ない模様。(今のところは)
なうぷれTunesV2 Ver1.2をリリースしました
いつもなうぷれTunesをご利用ありがとうございます。
V2のリリース後、いくつかのバグ報告と機能追加の要望があったのでそれらを追加したVer1.2をリリースしました。
変更点
タスクトレイを右クリックすると表示されるメニューにいくつかの機能を追加
メニュー内から今すぐツイートするを選択することで、有効化されているすべてのアカウントで投稿文を編集することなくツイートできるようになりました。
また、メニューから直接自動ツイートの有効・無効を切り替えられるようになりました。
対応タグを追加&Apple Music楽曲に対応
ご要望があったグループタグ($Group)に対応しました。
また、Apple Musicやホームシェアリングの楽曲から正しく曲データが取得できるようになりました。(アルバムアーティストを取得できないなど一部制約があります)
Windows10のAcrylic materialテーマを追加
Windows10に標準搭載されている電卓アプリに似た背面が少し透明になっているデザインに対応しました。
Windows10以降の環境で、設定からacrylic_darkテーマを選択することで使用できます。
ツイート画面からCtrl+Enterキーでツイート可能に
ツイート画面内のテキストボックスが選択された状態でCtrl+Enterキーを押すことでツイート出来るようになりました。
警告メッセージなどのUI内に誤字があったのを修正
いくつかUI内のテキストに誤字を見つけたので修正しました。
ダウンロード
以前のバージョンがインストールされたディレクトリ内に新しいバージョンのファイルを展開(上書き)していただくことでアップデートできます。
【Mastodon対応】なうぷれTunesV2をリリースしました
お久しぶりです。
前作であるなうぷれTunesを一から作り直し、MusicBee対応やMastodon対応などの新機能を追加したなうぷれTunesV2をリリースしました。
主な機能
- iTunes・MusicBee・foobar2000で再生している曲をTwitter、Mastodonに投稿
- アルバムアートを添付して投稿
- 自動投稿機能
- 遅延ツイート機能(一定時間(変更可能)投稿を遅らせ、その時間内に再生している曲が変わった場合は投稿をキャンセル)
- 前回再生した曲とアルバムが同じならアルバムアートを添付して投稿しない機能
- 前回再生した曲とアルバムが同じなら自動投稿をしない機能
- 投稿する文が投稿可能な最大文字数を超えた場合は自動的に削る機能
前作からの変更点
- iTunesの仕様変更に対応(前作であるなうぷれTunesが正常に動作しなくなっていた原因に対処)
- iTunesに依存しない設計にし、容易に対応アプリを増やせる体制をつくりました
- Mastodonに対応しました
プラグインの使用方法について
V2からは音楽再生ソフトへの連携をプラグイン経由で行うようにしました。アプリケーションを起動しただけでは使用できませんのでご注意ください。
iTunes
なうぷれTunesV2起動後に表示される設定画面にある基本設定からiTunesのプラグインを有効化し、なうぷれTunesV2を再起動することで使用可能になります。
foobar2000・MusicBee
なうぷれTunesV2の配布ファイルに同梱されている、foo_nowplayingv2.dll
がfoobar2000用のプラグインファイル、mb_MusicBeeNPPlugin.dll
がMusicBee用のプラグインファイルになります。
これらを音楽再生ソフト側のプラグインとしてインストールして頂くことで使用可能になります。
なうぷれTunesからなうぷれTunesV2への移行方法
なうぷれTunesとなうぷれTunesV2の間には一切互換性がありません。
なうぷれTunesのディレクトリになうぷれTunesV2を上書きインストールされても正常に動作しませんのでご注意ください。
動作要件
- .NET Framework 4.7がインストールされた環境
- Windows7 SP1 / Windows8.1 / Windows10を実行している環境
ダウンロード
上記リンクからダウンロードしてください。
機能追加のご要望・バグ報告など
githubのissueにお願いします。
投げ銭大歓迎です
Cisco C841M-4X-JSECを買ってみた話とハマった点
Cisco StartシリーズのC841M-4X-JSECが1万円ちょっとで衝動買いしてしまったので自宅のネットワーク機器のリプレースをしました。
Ciscoのネットワーク機器を触るのは初めてで、コンフィグ等いろいろ慣れない点があり思いっきりハマってしまい1日無駄にした点もあったのでメモとして残しておきます。
設定項目
- ギガイーサ5のポートを使用してPPPoEでプロバイダに接続する
プロバイダの都合でipv6 IPoEが使用出来ないので、ipv6 PPPoEでipv6でインターネットに出れるようにします。 - (ひかり電話ルーターとONU部分を分離させているので) ひかり電話が使用できるようNGNから来るipv4のパケットだけひかり電話ルーター側にブリッジする
フレッツ光ネクスト (ひかり電話あり) 回線において、ひかり電話と自前の設備を IPoE IPv6 的な意味で仲良くさせる - diary.sorah
素直にPPPoEブリッジ等設定していればこんな事をする必要はないと思います。(上記ページ参照)ちなみにひかり電話ルーターはギガイーサ4のポートに繋ぎました。 - Zone Based Firewallを使用してファイアウォールを構築する
- WAN側のIPに着信したTCP443ポート宛の通信はすべて192.168.0.110のサーバに転送するようにNATを調整&FWに穴を開ける
- 外からのPING要求を無視するようにする(応答しないようにする)
- 管理画面から統計情報が見れるみたいなので見れるようにする。
要らないなら無効化してもいいでしょう。flow monitor [monitorname]あたりの設定です。 - ギガイーサ0のポートはタグVLAN対応のスイッチに接続する
ハマったポイント
ipv6 cefが有効になっているとipv6の外向きの通信がなぜか50%ぐらいパケットロスする
supportforums.cisco.com
どうやらIOS側のipv6 CEFのバグ疑惑があるので、no ipv6 cef
で回避。ちなみにipv4のCEFに関しては問題ありませんでした。
ipv6環境にてWindows Updateが走らなくなる
Windows Updateのログを確認するとアップデートを配信しているCDNに繋げなくてエラーになっている模様。
(正確には接続は確立できるが、それ以降の通信がまったくできない状態になる)
確認するとPMTUD Black Holeにより通信できなくなっていたようなので、ルーター側でTCP MSS Clampingをすることにより解決しました。
本来ならICMPv6パケット(Packet too bigメッセージ)が送出され、MSS値が調整されるはずですが、このパケットがフィルタされてしまい届かないことによりこのような現象が起こることがあるようです。
TCPの場合、3way handshakeの段階で自分が受け取れる最大のセグメントサイズを通知することが出来るので、Dialerインタフェース側に通知する設定を加えることで解決しました。
interface Dialer2 ipv6 mtu 1454 ipv6 tcp adjust-mss 1394
ルーターがWAN側からのping要求に対して応答しないようにZone Based Firewallを調整したはずなのに応答してしまう
下記のコンフィグのように、外→内のルールでping要求をdropするようにしていますが、何故かルーターがpingの要求に対して応答してしまうようになっていました。
ip access-list extended v4acldeny permit icmp any any echo ! ipv6 access-list v6acldeny permit icmp any any echo-request ! class-map type inspect match-any pub-priv-deny-cmap match access-group name v4acldeny match access-group name v6acldeny ! policy-map type inspect pub-priv-policy class type inspect pub-priv-deny-cmap drop class type inspect pub-priv-cmap inspect class class-default drop ! zone-pair security pub-priv source public destination private service-policy type inspect pub-priv-policy !
ルーター本体はself
に属するので、以下のコンフィグを追加することで解決。
zone-pair security pub-pub source public destination self service-policy type inspect pub-priv-policy
native vlanに指定したVLANがスイッチ側でタグを付けると使えない(疎通しない)
(当たり前なのかもしれませんが) untaggedに指定したVLANはタグ付きで使用することはできないようです。
(いくらスイッチ側でタグを付けようがルーター側で破棄されるようです)
デフォルト設定ではVLAN1がuntaggedに設定されるので、VLAN1を使わないようにして対処しました。
コンフィグ
hostname akane ! ! logging buffered 51200 warnings ! ! ip dhcp excluded-address 192.168.0.1 ip dhcp excluded-address 192.168.3.1 ! ip dhcp pool vlan2-dhcp network 192.168.0.0 255.255.255.0 default-router 192.168.0.1 dns-server 8.8.8.8 8.8.4.4 ! ip dhcp pool vlan3-dhcp network 192.168.3.0 255.255.255.0 default-router 192.168.3.1 dns-server 8.8.8.8 8.8.4.4 ! ! ! no ip domain lookup ip domain name akane.local ip cef ipv6 source-route ipv6 flowset ipv6 unicast-routing no ipv6 cef ipv6 dhcp pool vlan2-dhcpv6 dns-server 2001:4860:4860::8888 dns-server 2001:4860:4860::8844 ! ! ! flow record nbar-appmon match ipv4 source address match ipv4 destination address match application name match interface output match ipv6 source address match ipv6 destination address match interface input collect counter bytes collect counter packets collect timestamp absolute first collect timestamp absolute last collect application http host ! ! flow monitor application-mon cache timeout active 60 record nbar-appmon ! ! ! ! vtp mode transparent username matsuri privilege 15 secret 5 hogepassword ! redundancy ! ! ! ! ! vlan 2-3 no cdp run ! ! class-map type inspect match-any pub-priv-deny-cmap match access-group name v4acldeny match access-group name v6acldeny class-map type inspect match-any priv-pub-cmap match protocol tcp match protocol udp match protocol ident match protocol icmp class-map type inspect match-any pub-priv-cmap match access-group name v4alist match access-group name v6alist ! policy-map type inspect priv-pub-policy class type inspect priv-pub-cmap inspect class class-default drop policy-map type inspect pub-priv-policy class type inspect pub-priv-deny-cmap drop class type inspect pub-priv-cmap inspect class class-default drop ! zone security public zone security private zone-pair security priv-pub source private destination public service-policy type inspect priv-pub-policy zone-pair security pub-priv source public destination private service-policy type inspect pub-priv-policy zone-pair security pub-pub source public destination self service-policy type inspect pub-priv-policy ! ! ! ! ! bridge crb ! ! ! ! interface GigabitEthernet0/0 switchport mode trunk no ip address ! interface GigabitEthernet0/1 switchport trunk native vlan 2 switchport mode trunk no ip address ! interface GigabitEthernet0/2 switchport trunk native vlan 2 switchport mode trunk no ip address ! interface GigabitEthernet0/3 switchport trunk native vlan 2 switchport mode trunk no ip address ! interface GigabitEthernet0/4 no ip address duplex auto speed auto bridge-group 1 bridge-group 1 input-type-list 200 ! interface GigabitEthernet0/5 no ip address duplex auto speed auto ipv6 dhcp client pd ngnprefix pppoe enable group global pppoe-client dial-pool-number 2 pppoe-client dial-pool-number 1 bridge-group 1 ! interface Vlan1 no ip address ! interface Vlan2 ip address 192.168.0.1 255.255.255.0 ip nat inside ip virtual-reassembly in zone-member security private no autostate ipv6 address ocnprefix ::1:1/64 ipv6 enable ipv6 nd other-config-flag ipv6 nd ra interval 10 ipv6 dhcp server vlan2-dhcpv6 ipv6 virtual-reassembly in ! interface Vlan3 ip address 192.168.3.1 255.255.255.0 ip nat inside ip virtual-reassembly in zone-member security private no autostate ! interface Dialer1 mtu 1454 ip address negotiated ip flow monitor application-mon input ip flow monitor application-mon output ip nat outside ip virtual-reassembly in zone-member security public encapsulation ppp ip tcp adjust-mss 1414 dialer pool 1 dialer idle-timeout 0 dialer-group 1 ppp authentication chap callin ppp chap hostname hogehoge@hoge.ne.jp ppp chap password 0 hogehogepassword ppp ipcp dns request accept no cdp enable ! interface Dialer2 mtu 1454 no ip address ip flow monitor application-mon input ip flow monitor application-mon output zone-member security public encapsulation ppp ip tcp adjust-mss 1414 dialer pool 2 dialer idle-timeout 0 dialer-group 2 ipv6 address autoconfig ipv6 enable ipv6 mtu 1454 no ipv6 nd ra suppress ipv6 tcp adjust-mss 1394 ipv6 dhcp client pd hint ::/0 ipv6 dhcp client pd ocnprefix ipv6 virtual-reassembly in ppp authentication chap callin ppp chap hostname hogehoge@ipv6.hoge.ne.jp ppp chap password 0 hogehogepassword ppp ipcp dns request accept no cdp enable ! ip forward-protocol nd ip http server ip http upload enable path flash: ip http upload overwrite ip http access-class 1 ip http authentication local ip http secure-server ip http timeout-policy idle 60 life 86400 requests 10000 ! ! ip nat inside source list 1 interface Dialer1 overload ip nat inside source static tcp 192.168.0.110 443 interface Dialer1 443 ip nat inside source list 2 interface Dialer1 overload ip route 0.0.0.0 0.0.0.0 Dialer1 permanent ip ssh version 2 ! ip access-list extended v4acldeny permit icmp any any echo ip access-list extended v4alist permit tcp any host 192.168.0.110 eq 443 ! dialer-list 1 protocol ip permit dialer-list 2 protocol ipv6 permit ipv6 route ::/0 Dialer2 ! ! access-list 1 permit 192.168.0.0 0.0.0.255 access-list 2 permit 192.168.3.0 0.0.0.255 access-list 23 permit 10.10.10.0 0.0.0.127 access-list 200 deny 0x86DD 0x0000 access-list 200 permit 0x0000 0xFFFF ! ipv6 access-list v6acldeny permit icmp any any echo-request ! ipv6 access-list v6alist permit icmp any any bridge 1 protocol ieee ! vstack ! line con 0 login local no modem enable length 0 line vty 0 4 access-class 1 in privilege level 15 login local length 0 transport input telnet ssh line vty 5 15 access-class 1 in privilege level 15 login local length 0 transport input telnet ssh ! scheduler allocate 20000 1000 ! end
Qt Base(5.9)を静的リンク用にビルドしてみた(MSVC向け)
Qt公式で動的リンク用のビルド済みのライブラリが配布されているが、静的リンク用のライブラリは配布されていないので自分用にビルドしてみたのでメモ。
続きを読むmbed IDEからエクスポートしたMercurialレポジトリにcommitしようとしたらディレクトリが無えよと怒られた件
> hg add . adding .cproject adding .project (省略) > hg status A .cproject A .hgignore A .mbed A .project (省略)
で、ファイルとディレクトリが追加されたことを確認した上で、コミットしようとすると以下のようなエラーが発生する
> hg commit abort: could not lock repository /mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led: No such file or directory > file /mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led /mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led: directory
🤔🤔🤔🤔No such file or directoryって言われても存在するんだが…???
エラーの原因を調べてみる
Mercurialにはデバッグ用のオプションがあるのでそれを付けてやることで、普段は表示されない細かなエラーログを表示させることができる。
--debug
と--verbose
と--traceback
オプションを付けて再度hg commit
すると以下のような出力が得られる。
> hg --debug --verbose --traceback commit Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 191, in _runcatch return _dispatch(req) File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 924, in _dispatch cmdpats, cmdoptions) File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 681, in runcommand ret = _runcommand(ui, options, cmd, d) File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 1055, in _runcommand return checkargs() File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 1015, in checkargs return cmdfunc() File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 921, in <lambda> d = lambda: util.checksignature(func)(ui, *args, **cmdoptions) File "/usr/lib/python2.7/dist-packages/mercurial/util.py", line 993, in check return func(*args, **kwargs) File "/usr/lib/python2.7/dist-packages/mercurial/commands.py", line 7013, in verify return hg.verify(repo) File "/usr/lib/python2.7/dist-packages/mercurial/hg.py", line 815, in verify ret = verifymod.verify(repo) File "/usr/lib/python2.7/dist-packages/mercurial/verify.py", line 25, in verify with repo.lock(): File "/usr/lib/python2.7/dist-packages/mercurial/localrepo.py", line 1346, in lock self.invalidate, _('repository %s') % self.origroot) File "/usr/lib/python2.7/dist-packages/mercurial/localrepo.py", line 1306, in _lock parentlock=parentlock) File "/usr/lib/python2.7/dist-packages/mercurial/lock.py", line 57, in __init__ self.delay = self.lock() File "/usr/lib/python2.7/dist-packages/mercurial/lock.py", line 87, in lock self._trylock() File "/usr/lib/python2.7/dist-packages/mercurial/lock.py", line 129, in _trylock why.filename, self.desc) LockUnavailable: [Errno 2] No such file or directory: '/mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led/.hg/store/lock' abort: could not lock repository /mnt/c/Users/kazuki/Documents/eclipse-cpp/Nucleo_blink_led: No such file or directory
エラーの原因はレポジトリが格納されているディレクトリそのものではなく、格納されているディレクトリ内の.hg/store/lock
が存在しない事に起因することが分かる。
lockファイル自体はロック用のファイルなので、.hg内にstoreディレクトリを作成してみる。
> mkdir .hg/store > hg commit > hg log changeset: 0:b4a651370c4a tag: tip user: Yuka Nakano <nakanoyuka@hogehoge.com> date: Tue Sep 12 02:31:45 2017 +0900 summary: add files.
以上、正常にコミット出来たことを確認して終了。
追記
mbed IDE上で一度もコミットしていないと、storeディレクトリが無い状態でリポジトリがエクスポートされる可能性があるので、もし一度もコミットしていないのならしてからエクスポートした方が良いかもしれない。
また、一度もコミットしてないレポジトリはパブリッシュ出来ないので注意する必要がある。(ローカルからmbed IDE上のリモートレポジトリにプッシュするにはパブリッシュする必要がある)
あとがき
中野有香かわいい。