• カテゴリー別アーカイブ Linux
  • opensuse leap 42.1でVMware Playerの3Dアクセラレーションが有効にならない

    nvidia-gfxG04.conf更新後に、ldconfigを実行する手順を追加しました。(2016/9/23)

    
    

    今、opensuse linux(leap 42.1)を常用OSとして利用しているのですが、その上でVMware Workstation 12 Playerを使って、Windowsも動かしています。
    しかし起動当初から、「No 3D support is available from the host.」と表示され、どうも3Dアクセラレーションが効いていないようでした。
    たしかに動作がカクつく…とは思っていました。

    ちょっと時間も出来たので、重い腰を上げ、いっちょ解決してみようと思い試行錯誤した記録です。

    続きを読む 投稿 ID 1381


  • WeeChatで~(全角チルダ/波ダッシュ)を入力したい(iso-2022-jpなIRCサーバ環境)

    私はWeeChatを使ってIRCを使っています。
    このときに、「~」を入力するとLimeChat等の他のクライアントでは文字化けしてしまうという問題がありました。

    どうにかこれを改善したいと思って試行錯誤した結果、改善できたのでメモしておきます。

    環境

    • WeeChatを起動させているサーバ
      • CentOS7
        • WeeChat 1.4(但し0.x台の頃から変わらない事象です)
        • screen 4.01.00
      • Linuxの$LANGは、ja_JP.UTF-8
      • WeeChatで接続しているチャンネルの文字コードは、iso-2022-jp
      • /set charset.default.decode = “iso-2022-jp”
      • /set charset.default.encode = “iso-2022-jp”
    • WeeChatを表示させているクライアント
      • Windows7
      • cygwin
      • ssh接続でscreenを表示してその上のWeeChatを使用

    クライアントからWeeChatとLimeChat(Windows上で動作するIRCクライアント)を操作し、同じサーバ、同じチャンネルにJOINします。

    問題の事象

    WeeChat上で「~」を入力すると、LimeChatから見ると文字化けします。
    LimeChat上で「~」を入力しても、WeeChatでは文字化けしません。
    ですが、2つの波ダッシュは、WeeChat上では別の文字(波の向きが違う)で表示されます。

    • WeeChatで入力した「~」:wavedash_wee
    • LimeChatで入力した「~」をWeeChatで表示:wavedash_lime

    この事から、Windowsで使われる「~」がLinuxでは扱いが異なっているのではないかと想像できます。
    これについては参考ページが以下の様にいくつかあります。

    解決

    要はWeeChatから入力する「~」をwavedash_weeからwavedash_limeに変換してやればいいわけです。
    そのため、送信時にテキスト置換できるようなスクリプトがないかを調べたところ、「text_replace.py」というスクリプトがあったのでこれを使ってみました。

    以下はWeeChat上での操作です。

    
    /script install text_replace.py
    /set plugins.var.python.text_replace.replacement_pairs "~=~"
    
    

    plugins.var.python.text_replace.replacement_pairsには、=区切りで変換前と変換後のテキストを指定します。

    “~=~”の部分は実際には以下の様に指定します。

    • 左側:普通にWeeChatに入力した「~」
    • 右側:LimeChatで入力した「~」をWeeChatで表示したwavedash_limeをコピーアンドペースト
    • こんな感じ:”wavedash_wee=wavedash_lime

    これで、普通にWeeChatで入力したら文字化けする「~」を、LimeChatで見ても文字化けしない「~」に変換して送信することが出来るようになりました。


  • rsyncでドットファイルだけ同期する

    rsyncの–includeオプションと–excludeオプションを使って実現出来ます。
    –includeと–excludeは記載順で評価順が変わるので注意です。

    rsync -av --include '.**' --exclude '**' /home/username/ remote:~/backup/
    

    みたいな感じです。

    簡単なパラメータの説明をしておくと:

    • –include ‘.**’
      ドットから始まるファイルとディレクトリ以下のファイルを含めます。
    • –exclude ‘**’
      全てのファイルを除外します。

    ちなみに、除外したいドットファイルなどがある場合は、–include ‘.**’の前に記載をする必要があります。


  • さくらVPSではL2TPv3の利用は出来ない

    かなり寝かせてしまったお話なのですが…
    2015年7月頃、ふと何を思ったか、家のネットワークとさくらVPSのネットワークをL2TPv3で結んでみたいと思い立ったので、そそくさと構築してみたことがありました。

    L2TPv3を構築するも…

    家のルータ(VyOS)とさくらVPS上のルータ(VyOS)間でL2TPv3の設定をしてみたのですが、ルータまでは疎通があるのに、LAN配下(家もさくらも)の端末にはpingが飛ばなかったのです。
    家のネットワークについては原因が分かりました。
    VyOSをESXiの上で動かしていたのですが、vSwitchが「無差別モード(プロミスキャスモード)」を有効にしていないとダメだということでした。

    この設定を施してやることでLAN配下の端末への通信が通るようになりました。

    家の中には通信が通ったもののさくらには通信が通らない…

    が、相変わらずさくらVPSの方には通信が出来ません。
    大体原因の予想が付きますよね。
    家と同じで、プロミスキャスモードが有効になっていないのだろうと。

    ただ正確なところは分からないため、一度サポートに問い合わせることにしました。

    VPSのローカルネットワークを構成する仮想スイッチ上でプロミスキャスモードは有効になっていますでしょうか?

    回答は、ブリッジ等ではプロミスキャスモードが有効になっている、とのことでした。
    ただtcpdumpのデータをくれれば原因調査してくれるとのことだったので、ルータと配下のサーバでパケットキャプチャを行って送付したところ、原因不明。

    基盤側でパケット見ることも出来るよ、と言ってくれたのでお言葉に甘えて調査してもらいました。

    原因判明

    最終的に、さくらさんにパケットキャプチャしてもらった結果、こんな回答が返ってきました。

    弊社にてホスト側のtcpdumpを確認した結果、「vyos_sakura」の収容ホストサーバ側のセキュリティ設定によって、パケットがフィルタされていたことが判明いたしました。

    前回までのご案内にて原因の特定に至らず、お手間をおかけいたしましたこと、深くお詫び申し上げます。

    ホストサーバ上ではARP-spoofingや、MAC-Spoofingを防ぐためのセキュリティ設定を導入しており、その影響によりフィルタされておりました。

    セキュリティ設定に関しましては、現時点で変更することが困難でございます。何卒ご了承ください。

    プロミスキャスモードじゃないけどMAC偽装は出来ないよってことで、ファイナルアンサーでした。

    結論

    さくらVPSではおとなしくIPsecとかでVPN張りましょう、ということです。

    いやしかし、こんな格安でサービス提供してくださっている上に、サポートも非常に充実していて、改めて素敵なサービスだと実感しました。
    みなさん、さくらインターネットでクラウド初めてみませんか?

    ※この記事は広告ではありませんw


  • putty.iniからssh_configを生成する(手抜き)スクリプトを作ってみた

    沢山あるPuTTyのホスト設定を移行するのが面倒だったので、かっとなって作りました。

    • PuTTyをiniファイル形式で使っている人用ですが。
    • PuTTyのバージョンによっては使えないかもしれません。
    • 全ての設定を変換するわけではありません。
    • 手抜きなので、Default Settingsも変換します(ご自身で削除して下さい)。
    • bash用です。
    • うまく変換できないときは、putty.iniの改行コードをLFにしてみて下さい。

    変換できる設定は以下のものだけです。

    • セッション名
      • これが接続Hostになりますが、基本的には変換後にご自身で手を入れて頂くのが良いかと。エスケープ文字とかも入ると思うので。
    • 接続先情報(ホスト名、ポート番号)
    • ユーザ名
    • 秘密鍵
      • 但し、末尾の拡張子.ppkは除去します(どうせそのままでは使えないので)。
    • プロキシ(ホスト名・ポート番号)
      • SOCKS4、SOCKS5に限ります。
      • 認証は考えていません。
      • 実際に動作させるためには、connectコマンドを導入している必要があります。
    • トンネル

    スクリプトの変数は以下の様に定めています。
    それ以外は内部で使っているものなので変更はしないで下さい。

    • INIFILE
      • putty.iniのファイル名
    • CONFFILE
      • sshのconfigのファイル名
    • SOCKSCMD
      • connectコマンドのパス
    • TRCMD
      • trコマンドのパス

    実行は、引数を付けずに実行するだけです。
    CONFFILEに指定したファイルに出力しますが、標準出力にも同時に出力します。
    標準出力に何も表示されずにコマンドが終了したときは、putty.iniの改行コードをLFにして再度試してみて下さい。

    
    #!/usr/bin/bash
    
    INIFILE=./putty.ini
    CONFFILE=./p2config
    SOCKSCMD=/usr/bin/connect
    TRCMD=/usr/bin/tr
    
    TMP_PXY_ENABLED=no
    TMP_PXY_HOST=""
    TMP_PXY_PORT=0
    TMP_FWD_LALL=no
    TMP_FWD_RALL=no
    TMP_FWD_LIST=""
    
    cat $INIFILE | while read -r LINE; do
    
        if [[ "$LINE" =~ ^\[Session:(.+)\]$ ]]; then
            TMP_PXY_ENABLED=no
            TMP_PXY_HOST=""
            TMP_PXY_PORT=0
            TMP_FWD_LALL=no
            TMP_FWD_RALL=no
            TMP_FWD_LIST=""
            echo Host ${BASH_REMATCH[1]} | tee -a $CONFFILE
        elif [[ "$LINE" =~ ^HostName=\"(.+)\"$ ]]; then
            echo -e \\tHostName\\t${BASH_REMATCH[1]} | tee -a $CONFFILE
        elif [[ "$LINE" =~ ^PortNumber=([0-9]+)$ ]]; then
            echo -e \\tPort\\t${BASH_REMATCH[1]} | tee -a $CONFFILE
        elif [[ "$LINE" =~ ^UserName=\"(.+)\"$ ]]; then
            echo -e \\tUser\\t${BASH_REMATCH[1]} | tee -a $CONFFILE
        elif [[ "$LINE" =~ ^PublicKeyFile=\"(.+)\.ppk\"$ ]]; then
            echo -e \\tIdentityFile\\t${BASH_REMATCH[1]} | tee -a $CONFFILE
        elif [[ "$LINE" =~ ^ProxyMethod=1|2$ ]]; then
            TMP_PXY_ENABLED=yes
        elif [[ "$LINE" =~ ^ProxyHost=\"(.+)\"$ ]]; then
            TMP_PXY_HOST=${BASH_REMATCH[1]}
        elif [[ "$LINE" =~ ^ProxyPort=([0-9]+)$ ]]; then
            TMP_PXY_PORT=${BASH_REMATCH[1]}
        elif [[ "$LINE" =~ ^LocalPortAcceptAll=1$ ]]; then
            TMP_FWD_LALL=yes
        elif [[ "$LINE" =~ ^RemotePortAcceptAll=1$ ]]; then
            TMP_FWD_RALL=yes
        elif [[ "$LINE" =~ ^PortForwardings=\"(.+)\"$ ]]; then
            TMP_FWD_LIST=${BASH_REMATCH[1]}
        fi
    
        # ProxyCommand
        if [ "$TMP_PXY_PORT" != "no" -a "$TMP_PXY_HOST" != "" -a $TMP_PXY_PORT -ne 0 ]; then
            echo -e \\tProxyCommand\\t$SOCKSCMD -S $TMP_PXY_HOST:$TMP_PXY_PORT %h %p | tee -a $CONFFILE
            TMP_PXY_ENABLED=no
            TMP_PXY_HOST=""
            TMP_PXY_PORT=0
        fi
    
        # PortForward
        if [ "$TMP_FWD_LIST" != "" ]; then
            FWD_LIST=( `echo "$TMP_FWD_LIST" | $TRCMD -s ',' ' '` )
            for ITEM in ${FWD_LIST[@]}; do
                if [[ "$ITEM" =~ ^L([0-9]+)=(.+:[0-9]+)$ ]]; then
                    echo -en \\tLocalForward\\t | tee -a $CONFFILE
                    if [ "$TMP_FWD_LALL" != "no" ]; then
                        echo -n : | tee -a $CONFFILE
                    fi
                    echo -e ${BASH_REMATCH[1]}\\t${BASH_REMATCH[2]} | tee -a $CONFFILE
                fi
                if [[ "$ITEM" =~ ^R([0-9]+)=(.+:[0-9]+)$ ]]; then
                    echo -en \\tRemoteForward\\t | tee -a $CONFFILE
                    if [ "$TMP_FWD_RALL" != "no" ]; then
                        echo -n : | tee -a $CONFFILE
                    fi
                    echo -e ${BASH_REMATCH[1]}\\t${BASH_REMATCH[2]} | tee -a $CONFFILE
                fi
                if [[ "$ITEM" =~ ^D([0-9]+)$ ]]; then
                    echo -e \\tDynamicForward\\t${BASH_REMATCH[1]} | tee -a $CONFFILE
                fi
            done
            TMP_FWD_LALL=no
            TMP_FWD_RALL=no
            TMP_FWD_LIST=""
        fi
    
    done
    
    

    バグ報告は歓迎しますが、修正するとは限りません(ぇ


  • cpanでperlモジュールをサーバ全体で使えるディレクトリにインストールする

    cpanでperlのモジュールをインストールするとき、デフォルトではユーザのホームディレクトリ以下にインストールされます。
    しかしこのままだと、Apache等でモジュールを読むことが出来ずに面倒なことになります。

    そこで、OS全体でパスが通っているディレクトリへインストールをする様に設定を変更します。

    続きを読む 投稿 ID 1381


  • SSHポートフォワード(SSHトンネル)【ローカル・リモート・ダイナミック総集編】

    みんな大好き、SSHトンネル。
    外から接続できないイントラネットのサーバへ、踏み台のSSHサーバ経由で接続できるようにする方法ですね。
    ですがそれはSSHトンネルの1つの使い方に過ぎないのです!

    SSHトンネルは、3つの使い方があります。

    • ローカルフォワード
    • リモートフォワード
    • ダイナミックフォワード

    今日はこの3つの方法について、WindowsのsshクライアントであるPuTTyでの接続方法(おまけでsshコマンドでの接続方法)と、活用例を紹介します。

    続きを読む 投稿 ID 1381


  • CentOS6.4とPX-W3PEで作る録画サーバ

    PLEXから発売されている、地上波*2+BS/CS*2のチューナーを内蔵したテレビチューナーPX-W3PEとLinuxを使ってテレビ録画サーバを構築します。
    これまでPX-W3PEはLinuxドライバが公開されておらずWindowsで使うほかありませんでしたが、2012年9月にはLinuxドライバが公開されており容易に利用出来るようになりました。
    ところが割と最近の公開であるせいか、Linuxで動作させている実例が少ないため、ここで記録しようと思います。

    続きを読む 投稿 ID 1381


  • logrotateスクリプトの調査

    Linuxでログファイルを一定期間ごとで切り出し、世代管理を行ってくれるlogrotate。
    logrotateでは、単にログをローテションするだけではなく、ローテションの際にスクリプトを動作させることが可能となっています。
    それらのスクリプトは、/etc/logrotate.confや、インクルードされる/etc/logrotate.d/hogehogeといったファイルに定義します。

    スクリプトを動作させることが可能なタイミングは以下の4つあります。

    • firstaction
      ログローテーションプロセスの1番最初
    • prerotate
      ログファイルをローテーションする前
    • postrotate
      ログファイルをローテションした後
    • lastaction
      ログローテーションプロセスの1番最後

    # 正直、firstactionとprerotate、postrotateとlastactionの違いはあまりよく分かっていません。

    これらのタイミングで、何らかの処理を行うことが可能ですが、その処理の中にはログファイル自身を扱う処理も行えます。
    ログファイル自身を扱うためには、その時点でのログファイルの状態(圧縮されたのか、ローテションされただけなのか、まだ何もされていないのか)などが気になります。
    調べては見ましたが、特にまとまった情報も無いようですし、OSやlogrotatedのバージョンによっても挙動が変化するそうなので、今回は自分が使う環境で色々調査してみました。

    続きを読む 投稿 ID 1381


  • hosts.denyで制限かけたのに、コネクションが張れてしまう

    Linuxなどで、sshdやportmapなどの簡単なアクセス制御をかけるのによく用いられる、hosts_acecss(/etc/hosts.deny, /etc/hosts.allow)。
    今回は、hosts.denyにてアクセス制限をかけたのに、コネクションが張れてしまうということについて。

    続きを読む 投稿 ID 1381