2019年12月18日水曜日

Raspberry Pi4 Ubuntu 19.10 ものぐさUSB HDDブート

この記事でRaspberry Pi4の技適モデルが出たのを知ったので、勢いで買ってみた。

買って気がついた事実。
いわゆるBIOSやUEFI的にブートデバイス選択できなかった。
浅はかな自分で悲しくなる・・・

ここからのリカバリーをしたいので、設定してみた。

インストール


最近はUbuntuユーザーなのでRaspberry Pi4向けのUbuntu Server 19.10 for RP4てきなをSDカードインストール!

とりあえず、起動までは他のページでもあるので省略。

そしてUSB差し込む!
が、そもそもカーネルのバグでラズパイが4GBメモリ場合、USBを認識しない、とのこと。
まじ?

とりあえずインストールしてsshでログイン。
ちゃんとお家のDHCPを管理してれば余裕。

で、調べたらカーネルアップデートすりゃ改善するらしい。
パッケージ直しておいてほしいよねっと。

apt update
apt dist-upgrade

で、再起動

reboot

これでUSB HDD(キーボードとかも)を差し込むと認識してくれる。

コピー先パーテーションの準備


USB HDD上のOSパーテーションを準備しましょう。
とりあえず初期化しとこ。
対象のパーテーションは確認を忘れないように。

mkfs.ext4 /dev/sda1

で、マウントして

mount -t ext4 -o defaults /dev/sda1 /mnt/

rsyncでSDカードの内容を全コピ

rsync -a --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /mnt/

exclude忘れると永遠に終わりません。。

この状態まで来ればあとはブートでどこを読み込むか設定を変更するだけ

ブート設定の変更


まず、起動したいパーテーションのPARTUUIDを調べる

blkid

取得できたPARTUUIDで下記の2ファイルがを変更します。

/boot/firmware/btcmd.txt
/boot/firmware/nobtcmd.txt

変更する箇所はroot=LABEL=writableです。

< net.ifnames=0 dwc_otg.lpm_enable=0 console=tty1 root=LABEL=writable rootfstype=ext4 elevator=deadline rootwait
---
> net.ifnames=0 dwc_otg.lpm_enable=0 console=tty1 root=PARTUUID=b11b7ad2-84f5-4a48-b13c-3360129e4ac5 rootfstype=ext4 elevator=deadline rootwait

で、両方のファイルを変更して再起動したらUSB HDDを/として読み込んでくれます。

ものぐさなので無料でもらった8GB SDカードをそのまま運用します。
読み込みだけなら簡単には死なないでしょ。多分。

2015年10月28日水曜日

【Linux】液晶とかプラズマに繋いでコンソールログインが出ない時

なんか家のサーバーメンテしてたら、操作ができなくて困った話

普段画面を見ないから液晶テレビにVGAで繋いでるんだけど、
再インストール時に画面が映らないかった。

grob2の選択画面までは出るんだけど、その後はブラックアウト。

で、検索すると↓が出てくる。

grub2の画面で「e」を押して、ブートオプションを付けましょ!
linuxで始まってる行の末尾に、vga=771とか追加するといいよ!

うつんねーよ!!
色々選択したけどうつんねーよ!
てか、解像度じゃなくてリフレッシュレートを変更すべきなんじゃね?

てことで探したのが↓
video=VGA-1:800x600@60

写ったわ。
やっとメンテできる。

2015年10月25日日曜日

【Scala】CentOS7でScalatraを使えるようにする

環境構築しようと思って、CentOSにインストールしたらハマったのでメモ。

■結論■
yumで簡単インストール禁止

■現象■
調べてみると、下記の手順でやれって出てくる。

1.Javaインストール
2.Typesafeリポジトリの追加
3.typesafe-stackインストール
4.csをインストール
5.giter8インストール
6.g8コマンドでテンプレートのコピー

その辺見れば手順書いてあるので詳細は割愛。
んで、重要なのはtypesafeリポジトリの内容が古い。
scalaは2.9とか入ってくる。(作業時最新2.11.7)
その流れでgiter8は0.5.3になる。
最後にテンプレートコピーが終わった段階でcontainer:startするとエラーが出て止まる。

■対応方法■
Scala、sbtを探してきてインストール。

問題は特に下記。
①Scalaが古い
→Centのリポジトリからならほぼ最新版だからこっちから入れる。 
②Scalaインストール時にgitがインストールされるけどCentの公式リポジトリ上のgitのバージョンが古い
→先にgitを入れる。古くても実害はないかも??他で問題が出ることがあるので、最新版を入れておくのを推奨
③sbtを公式リポジトリからyumで入れようとすると、OpenJDKが入ってくる
→yumdownloaderコマンドでsbtを落として、rpm -ivh sbt-*.rpmでインストールする。
 oracle javaじゃない人はこのままでいいですよ?

■おまけ■
conscriptとgiter8について、アンインストールしたかったのにさくっと検索できなかったので、書いときます。

コマンドでremoveやらuninstallやらあるかと思ったら削除するのが基本ぽい?
そもそも削除はしないのが前提なのか。

まず削除
$~/.sbt
$~/.conscript

で、sbtから再構築
$sbt
$curl https://raw.githubusercontent.com/n8han/conscript/master/setup.sh | sh
$cs n8han/giter8
これでg8コマンドが使えるようになります。

あ、結局アップデートはどうやってやるのか不明だった。
MacばっかりでLinuxの情報が少ないのも物悲しい。

2014年7月1日火曜日

【Linux】SoftEther VPN

便利なSoftEther VPN

今まではUbuntuにOpenswan+xl2tpでIPSecを構成してたんだけど、
デスクトップPCやスマホからはいいものの、Ubuntu同士での接続がうまくいかなかった。。

評判が良さそうなので、乗り換えてみることに。

ていうかSoftEther VPNってどんなの

よく知らずに使おうとしてたんだけど、これはVPN系ソフトの塊だったのね。
PPTPとかIPSecとかOpenVPNとかいっぱい入ってる。

まぁ、使うのはIPSecだけなんだけどw

とりあえず入れてみる

とりあえず入れようかなーとか思って、aptitudeで探したらない。
まじかよ。makeとかだりーなとか思ってtar探してみる。

えーっと、

  1. makeに必要なパッケージ入れる
  2. makeする
  3. agreeとかyesとかする
  4. 使いやすように配置する
  5. init.dにスタートアップスクリプトを置く
  6. ランレベルとか設定する
これで終わってくれたら余裕じゃん。
→参考にさせて頂きました某模型メーカー中の人のサーバー管理帳

うーん。

最後までやって気がついた。
これって、Windowsから管理できんのか。
超便利じゃん!

ということで、Windows向けのManagerもインストール。

起動確認。
Openswan+xl2tpに比べてメンテ超楽じゃん。
なんかワクワクしてきた!

ここまでは躓かなかったけど、この先が長かった・・・

DHCPでIPが取れない!!

まず、Lunixで仮想HUBからブリッジ接続を行った場合、ブリッジしたインターフェースとは接続できません。

そうとも知らずに、ブリッジ接続したIFからDHCPを待っても・・・
IPが取れない!!

気がついた時には面倒だったので、物理IFを追加し、同じセグメントへ設定。

なのに・・・
IPが取れない!!

まじかよ。
めんどくさいと思いつつ、dnsmasqの設定を変更して、DHCPを振られるように再調整・・・・
IPが取れない!!

ええー。もうなにこれ。どうしたらいいのかわかんなーい。
追加した物理IFもDHCPで振られるようにしたら・・・
IPが取れた!!

とれたよ!
あれかよ、IFのstatic設定がダメだっただけかよ・・・
もういいよ。このまま運用しよう。。

dnsmasqの設定を綺麗にして、稼働状況まで持って終了!

だけど、Openswan+xl2tpに比べて若干速度が落ちた気がする。
管理しやすくなったし、何でも接続できるようになったから、まぁいっかw

次はディザスタリカバリ用のUbuntuサーバーへこの設定を行いにいかなきゃw


【Typefi】自動組版 その2

ニッチなんだよね2

いつのまにかCS7ならぬCCまで出てしまいました。
久しぶりに更新しようかなーとか思います。

右流れ組版

ME版の起動

いつの間にか仕事では実際に使用してましたね・・・
InDesign CS6から、ME版の機能がデフォルトで組み込まれています。

ですが、日本語版インストーラーではME版をインストールすることはできません。

実は、日本語版インストールでインストールできるのは英語と日本語なのですが、
英語版をインストールすると、「CJKVはサポートしてねぇから、対応したバージョン入れろよ!」って怒られます。
英語版では、日本語版で作成したファイルを開くことすらできません。
これは、Wikipediaに書いてる情報を信じると・・・

Adobe InDesign日本語版は、日本でのニーズに合わせて大規模な改修が行われており、ことに日本語特有の多様な文字組みルールを実現している点で、「日本語ローカライズ製品」というよりも「日本市場用製品」といえる製品に仕上がっている。

とのことなので、開くことができないのは頷けますねー。
自分の予想では、日本語対応段落コンポーザーだと睨んでいるんですが、調べてはいませんw

InDesign Serverでは、使用可能な言語は全てインストールできます。
が、おすすめは「English(International)」です。
InDesign Server自体の情報があまり(特に日本語は)ありませんが、言語特有の問題を起こしにくいというのが理由です。

さて、話しを戻します。

ME版は日本語版でもインストール自体はされています。
ですが、編集言語設定がレジストリに隠されているため、この設定をME版(アラビア語版)に変更しなくては行けません。
※UIの言語設定もありますが、こちらはいじってもあまり意味無いです。
  1. InDesignを終了しておく
  2. レジストリエディターを起動する
  3. HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\InDesign\8.0\Feature Set Locale Setting の値を103にする
  4. Windowsを再起動する
これでME版が立ち上がります。

ワークスペース等の情報が別で保存されてしまいますが、日本語版に戻すと元の情報を読み込みます。

ME版の注意点

注意点は色々あるんですが、大きくは↓な感じですかね?
  • テキストフレーム自体がME版用のため、使い回しは厳禁
  • 段落は段落設定で右寄せ、右流れに変更する
  • 多言語複数段落コンポーザーにする
カシダスやらディジット変換やら色々ありますが、これは自動組版をする際の問題(どのようにレイアウトするか)とイコールなので、ME版を使用すること自体では問題は起きにくいかと思います。

英語版やME版のメニューを見ると、日本語版のメニューの多さにビビります。

ME版の問題は、組版以上に言語特有のルールが大きな壁になります。
インド数字・ペルシア数字間における拡張数字の違いや、括弧やハイフン、ピリオドなどに起こるディレクションの問題がそれです。

慣れればいいんですかね?!
タイ語に比べれば可愛いものです!!
※InDesignがタイ語に対応していないため、TypefiもInDesignと同じ状況になります。

Typefiでの組版

やっとこ本題ですね・・・
Typefiでは特に問題なく右流れを組みことが可能です。ほぼ。
ほぼと言うのは自分でチェックができないからです!
まぁ、アラビア語圏の人間ではないですしね・・・
ネイティブの方にチェックはしてもらいますが、やはり何か不安が残ってしまうのは日本人だからなんでしょうか?

それと、左流れと右流れの言語を1つのInDesignファイルにまとめることはおすすめしません。
テキストフレームが右流れ専用というのもそうですが、InDesng上で両側から開始とか気持ち悪い事ができないためです。

できるソフトもあるんですがね・・・

段落スタイル、文字スタイルなどのスタイル系の設定は問題ありませんが、表は問題が起こります。

右流れの言語では、表も右端の列が開始列になるため、自動組版では左右の入れ替えを行わなくてはならない等の問題が起きます。

InDesignでは表のディレクションチェンジが可能なのですが、Typefi上からはその設定を行うことができません。

この場合は別途プラグイン、もしくはJavaScriptなどで表のディレクションチェンジを行います。




2013年7月18日木曜日

【XSLT】 XSLTで2つのXMLをマージしてみた

XSLTで2つのデータのマージをしたいとおもって色々探しまわったけど、見つからなかったので自作してみた。

こういう用途ってないのかな??

saxonでしか確認してない。そもそも2.0でしか動かない!

call-templateはネストすると処理が重くなるため、apply-templatesで処理してます。
nodes1に放り込んだxmlに対して、nodes2を上書きしていきます。

要素の順番はnodes1側に引きづられ、nodes2側にしかない要素(追加したい要素)は兄弟要素として末尾に追加されます。

マージしたxmlに対してxpathで取得する際には問題が起きにくいですが、ノード番号等で取得するような場合は注意が必要です。

さて、次はドキュメント比較用のXSLTを作らねば・・・

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@*|node()" mode="marge">
 <xsl:param name="nodes1" as="item()*" />
 <xsl:param name="nodes2" as="item()*" />
 <xsl:variable name="node1" select="$nodes1[1]" as="item()*" />
 <xsl:variable name="node2" as="item()*">
  <xsl:choose>
   <xsl:when test="$node1">
    <xsl:copy-of select="$nodes2[name() = $node1/name()][position() = 1]" />
   </xsl:when>
   <xsl:otherwise>
    <xsl:copy-of select="$nodes2[1]" />
   </xsl:otherwise>
  </xsl:choose>
 </xsl:variable>
 <xsl:variable name="nodes1After" as="item()*">
  <xsl:copy-of select="$nodes1[position() != 1]" />
 </xsl:variable>
 <xsl:variable name="nodes2After" as="item()*">
  <xsl:choose>
   <xsl:when test="$node1">
    <xsl:copy-of select="$nodes2[not(name() = $node1/name() and position() = 1)]" />
   </xsl:when>
   <xsl:otherwise>
    <xsl:copy-of select="$nodes2[position() != 1]"></xsl:copy-of>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:variable>
 
 <xsl:choose>
  <xsl:when test="not($node1)">
   <xsl:copy-of select="$node2" />
  </xsl:when>
  <xsl:when test="$node1">
   <xsl:element name="{$node1/name()}">
    <xsl:apply-templates select="$node1/@*" />
    <xsl:apply-templates select="$node2/@*" />
    <!-- 子要素 -->
    <xsl:apply-templates select="self::node()" mode="marge">
     <xsl:with-param name="nodes1" select="$node1/node()" />
     <xsl:with-param name="nodes2" select="$node2/node()" />
    </xsl:apply-templates>
   </xsl:element>
   <xsl:apply-templates select="self::node()" mode="marge">
    <xsl:with-param name="nodes1" select="$nodes1After" />
    <xsl:with-param name="nodes2" select="$nodes2After" />
   </xsl:apply-templates>
  </xsl:when>
  <xsl:otherwise />
 </xsl:choose>
</xsl:template>
</xsl:stylesheet>

2013年6月26日水曜日

【Javascript】クラス化ってどうよ?

すげー久々に更新したりしてみたり。

最近、JavaScriptと仲良しです。
といっても、ブラウザ向けじゃなくて、Adobe向けっていうのがまた変なんですが・・・

InDesign、Illustrator、Photoshop、Acrobat(いじった時間が多い順)とかやってて思ったのが、
クラス化してない人が多いな、と。

JavaScriptはなんちゃって(プロトタイプ)オブジェクト指向なので、クラス化する意味あるのかなーとかずっと思ってたんだけど、やってみると超便利だったっていうことがわかった。

結局、Adobe系のjsについてはデータドリブンな部分がhtmlに比べて少なく、メソッドチェーンが効果を発揮するのは自分でデータセットを準備した後のようなイメージ。

じゃあ、データ揃うまではどうすんの?って話に成るんだけど、関数やらでごまかしても限界があって二度手間、三度手間が発生しちゃう。

かといって、クラス化してるJavaScriptはあまり無かったもんだからさぁ困ったっていう話。

今、サンプルが手元にないので偉そうなこと言えないな・・・

今度アップします。