ラベル windows の投稿を表示しています。 すべての投稿を表示
ラベル windows の投稿を表示しています。 すべての投稿を表示

2014年8月26日火曜日

vim で samba 上のファイルを編集すると,ファイルのパーミッションが samba の create mode に戻されてしまう問題

Linux の samba サーバで公開されているファイルを,windows の vim で編集すると,ファイルのパーミッションが smb.conf の create mask で設定されるモードに戻されてしまう.

たとえば,create mode = 0664 の場合.
$ touch hoge
$ ls -l
合計 0
-rw-rw-r-- 1 nishi nishi 0 8月 26 01:28 hoge
$ chmod 777 hoge
$ sudo chown root:root hoge
$ ls -l
合計 0
-rwxrwxrwx 1 root root 0 8月 26 01:28 hoge*
### ここで windows から vim で hoge を編集 ###
$ ls -l
合計 4
-rw-rw-r-- 1 nishi nishi 5 8月 26 01:29 hoge
となる.実行ビットが落ちてしまうので,スクリプトの編集中など非常に困る.
更に,編集したファイルがシンボリックリンクだったりした場合,リンクが消されて通常ファイルが作られるのでもっと困る.
vim の代わりに notepad を用いた場合は,編集の前後でパーミッションは保持される.
また,
std::ofstream ofp(argv[1]);
ofp << "abc" << endl;
ofp.close();
という c++ プログラムを VC でコンパイルした物で試した場合もパーミッションは保持された.

ファイルのパーミッションだけでなくオーナーもユーザの物に戻ってしまっていることから,
vim でのファイルの保存時には,編集前のファイルの削除→編集後のファイルのセーブが行われている様に見える.

しかし,上記の chown root:root の操作に加え,chmod 555 . として,
カレントディレクトリの書き込み権限を落とすと,vim での編集後に,元のパーミッションが保持されたファイルがセーブされた.
一度削除していたら,書き込みエラーになるはずなのだが...

原因の調査は手に余るので,場当たり的だが今考えつく対処法はふたつ.
  1. chmod -w . (新規ファイル作成不可)かつ,chown root:root *(パーミッション変更不可) とする.
  2. smb.conf で,force create mode = 775 にする.
1.は,他のディレクトリに影響が出ないが,explorer から新規ファイル,フォルダが作成できなくなる.
2.は,共有全体で,テキストファイルを編集したときにも実行ビットが立つようになってしまう.
どちらも一長一短だが1の方がsafeかなと思う.

解決編


:set backupcopy=yes
参考: :help bkc, :helpgrep samba\c など.
bkc が no だと,元のファイルをリネームして backupfile とし,編集後のテキストを新規ファイルに書き込む.まさに上の挙動.

ただし,この設定だけだと私の環境では期待通りに動作しなかった.
smb.conf で create mask や,force create mode などを設定しているとどうしても影響を受ける様子.

; create mask = 770
; force create mode = 770
  map archive = no
  map system = no
  map hidden = no
  nt acl support = no
これで大抵は良くなったのだが,なんかの拍子で group のパーミッションが変わる時がある.
どうやら ACL (Access control list) が書き加えられている様子だが,トリガーが分からない.

2013年9月18日水曜日

memory allocation error on cifs

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters

IRPStackSize DWORD 0x32
MaxMpxCt DWORD 0x0400
MaxWorkItems DWORD 0x1000
Size DWORD 3


コンピュータの管理>サービス>Server サービスの再起動

2013年8月26日月曜日

build ruby-2.0 with visual c++ 2012

native tools コマンドプロンプトで

ruby1.9\bin, gnuwin32\bin にパスを通す。
(bison, sed, ruby が必要。ref: README.win32)

> git clone https://github.com/ruby/ruby.git ruby-2.0
> cd ruby-2.0
> win32\configure.bat
> vi win32\Makefile.sub
XCFLAGS に -I./win32 を追加
> vi ext\ripper\Makefile
INCFLAGS に -I../../win32 を追加
> nmake -f win32\Makefile
> nmake -f win32\Makefile install

win32 のディレクトリ内で nmake をすると LNK2019 とかで止まる

参考:http://blog.livedoor.jp/blackwingcat/archives/1757321.html


追記:
これだけだと ext/openssl がコンパイルされない
openssl が無いと gem がこける
gem が無いと ruby 本体もうまく働かないっぽい

2011年12月27日火曜日

SNTPとか

windowsのインターネット時刻設定でLinuxのntpサーバを設定するとエラーになる話。
デフォルトではsymmetric activeモードでつなごうとするが、ntpdの方はclientモードじゃないと応答しないので、clientモードを使うように設定を変えましょうという話のようだ。

# ntp.confでpeerを設定すれば相互同期できるようだが、Linuxの方だけが正しい時刻を取ってる前提で相互同期??と思う

やり方はいくつかあるみたい

レジストリをいじる場合

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Parameters\NtpServer

ntpserverfqdnorip,0x8
にする。0x9を0x8に変えるとclientモードになるらしい。
あとは、同じ階層のConfigにあるMaxPollIntervalとMinPollIntervalで同期間隔を設定。
DWORD値は2^n秒のnを設定する。
windows timeサービスを再起動しておく。


ポリシーエディターを使う場合

gpedit.mscからローカルコンピューターポリシーエディターを開く。
コンピューターの構成\管理用テンプレート\システム\Windowsタイムサービス\タイムプロバイダー
NTPクライアントを構成するで
・NtpServer: 上と同じく server,0x8
・種類: NTP
・SpecialPollInterval:適当に
NTPクライアントを有効にする。
windows time サービスを再起動。


コマンドプロンプトでやる場合
w32tm か net time あたりのコマンドでできるみたい。
googleで検索。


これらの方法を併用した場合にどうなるかは不明。(レジストリよりポリシーの方が優先される様子)
どちらにしてもインターネット時刻設定の表示は更新されない。
逆にインターネット時刻設定をいじるとレジストリは上書きされてしまう。

w32tm /query /configuration /verbose
w32tm /query /status /verbose
とかで出てくるのが動作中のサービスのパラメータだと思われる。

2007年1月4日木曜日

ntpの同期間隔を短く

※前のblogから記事を移動。元の公開日:2007/01/04(木) 15:58:50

---

参考:http://support.microsoft.com/kb/297227/ja
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient 
名前:SpecialPollInterval
種類:DWORD
値:秒数

1日=86400秒。

2006年12月25日月曜日

コマンドプロンプトのフォント変更

※前のblogから記事を移動。元の公開日:2006/12/25(月) 14:24:57

---

MSゴシックは見にくいです。
あと、斜めに棒の入った0が好み。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont
名前:932.
種類:文字列
値:(使いたいフォントの名前)
再起動したらプロパティの選択肢に追加される。

起動したショートカットに適用じゃなくてデフォルトを変更することはできないのだろうか・・・

keycodeの変更

※前のblogから記事を移動。元の公開日:2006/12/25(月) 14:16:00

---

レジストリの設定
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
名前 Scancode Map
種類 REG_BINARY (バイナリ値)
値:
00 00 00 00 00 00 00 00
05 00 00 00 1d 00 3a 00
39 00 7b 00 39 00 79 00
39 00 70 00 00 00 00 00

設定内容
00 00 00 00
00 00 00 00 // header
05 00 00 00 // 設定個数
1d 00 3a 00 // Caps Lock (0x3A) -> Left Ctrl (0x1D)
39 00 7b 00 // 無変換 (0x7B) -> Space (0x39)
39 00 79 00 // 変換 (0x79) -> Space (0x39)
39 00 70 00 // ひらがな (0x70) -> Space (0x39)
00 00 00 00

キーとコードの対応
Alt(右) : 0xE038
Alt(左) : 0x38
Caps Lock : 0x3A
Ctrl(右) : 0xE01D
Ctrl(左) : 0x1D
Esc : 0x01
F11~F12 : 0x57~0x58
F1~F10 : 0x3B~0x44
Num Lock : 0x45
Scroll Lock : 0x46
Windows(右) : 0xE05C
Windows(左) : 0xE05B
ひらがな : 0x70
スペース : 0x39
半角/全角 : 0x29
変換 : 0x79
無変換 : 0x7B