Linux」カテゴリーアーカイブ

Ubuntu: USBメモリをexFATでフォーマットする

Ubuntu/XubuntuでUSBメモリをexFATでフォーマットしたのでメモ

インストール

$ sudo apt install exfat-fuse
$ sudo apt install exfat-utils

/dev/sdb2をUSBというラベルをつけてexFATでフォーマット

$ sudo mkfs -t exfat -n USB /dev/sdb2

Google Spreadsheetの1枚目シートをBigQueryの外部テーブルにする

社内の同テンプレのスプレッドシートまとめるのこれでやると楽だったのでメモ。

#!/bin/bash

SCHEMA=date:DATE,id:STRING,description:STRING
URL=https://docs.google.com/spreadsheets/hoge/fuga
PRJ=myproject
DS=mydataset
TBL=mytable

bq mk --external_table_definition=${SCHEMA}@GOOGLE_SHEETS=${URL} ${PRJ}:${DS}.${TBL}

データセットは先に作っておかないと怒られる。
しかしこの方法はシート1枚目しか対応してない仕様。

複数シートも扱うならAppsScriptでBQのネイティブテーブル直接作るしかない。
外部テーブルじゃないけどさ。

function main() {
  var projectId = 'myproject';
  var datasetId = 'mydataset';

  var app = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = app.getActiveSheet();
  var tableId = sheet.getSheetName();
  
  var table = {
    tableReference: {
      projectId: projectId,
      datasetId: datasetId,
      tableId: tableId
    },
    schema: {
      fields: [
        {name: 'date', type: 'date'},
        {name: 'id', type: 'string'},
        {name: 'description', type: 'string'}
      ]
    }
  };
  try{
    BigQuery.Tables.remove(projectId, datasetId, tableId); 
  } catch(e) {}
  table = BigQuery.Tables.insert(table, projectId, datasetId);
  
  var range = sheet.getDataRange();
  var blob = Utilities.newBlob(convCsv(range)).setContentType('application/octet-stream');
  var job = {
    configuration: {
      load: {
        destinationTable: {
          projectId: projectId,
          datasetId: datasetId,
          tableId: tableId
        },
        skipLeadingRows: 1
      }
    }
  };
  job = BigQuery.Jobs.insert(job, projectId, blob);
}

function convCsv(range) {
  try {
    var data = range.getValues();
    var ret = "";
    if (data.length > 1) {
      var csv = "";
      for (var i = 0; i < data.length; i++) {
        for (var j = 0; j < data[i].length; j++) {
          if (data[i][j].toString().indexOf(",") != -1) {
            data[i][j] = "\"" + data[i][j] + "\"";
          }
        }
        if (i < data.length-1) {
          csv += data[i].join(",") + "\r\n";
        } else {
          csv += data[i];
        }
      }
      ret = csv;
    }
    return ret;
  }
  catch(e) {
    Logger.log(e);
  }
}

bashでバックグラウンドジョブの終了を待つ

時間の掛かるプロセスを同時に複数実行して、全てのジョブが終わったら最後に仕上げの処理をやりたかったのでメモ

pids=()

./hoge.sh &
pids+=($!)

./fuga.sh &
pids+=($!)

for pid in ${pids[@]}; do
    wait $pid
done

./foobar.sh

$!で直前のPIDを取得して配列化して、waitで待つ。

GAE Standard環境のNode.jsでリバースプロキシ構築

SSLのリバースプロキシが欲しかったのでメモ

HTTPS -> GAE (myproject.appspot.com) -> HTTP -> GCE (198.51.100.1:8080)

という構成。

npm初期化してhttpとhttp-proxyをインストール

$ npm init
$ npm install http --save
$ npm install http-proxy --save

で、下記のファイルを用意

app.yaml

runtime: nodejs8

index.js

const http = require('http');
const httpProxy = require('http-proxy');
const port = process.env.PORT || 8080;
httpProxy.createProxyServer({target: 'http://198.51.100.1:8080/'}).listen(port);

package.json
package.jsonはnpm initで作るとして、起動時にindex.jsを実行したいので下記のようにscriptsフィールド内でindex.jsを指定する。

  "scripts": {
    "start": "node index.js"
  },

あとはこれをAppEngineにデプロイ。

$ gcloud app deploy

そしてSSLで https://myproject.appspot.com/ にアクセスするとリクエストが http://198.51.100.1:8080/ にフォワードされる。

GCE Ubuntu: bootディスクサイズの増やし方

GCE上のUbuntuマシンのHDDサイズを増やした時のメモ。

ディスクの空きが足りなくなったので、Cloudコンソール画面でサイズを増やしたあとに下記のコマンドを実行。

$ sudo growpart /dev/sda 1
$ sudo resize2fs /dev/sda1

その後、df -hして空き容量増えてればOK。

公式ドキュメント:
永続ディスクの追加またはサイズ変更  |  Compute Engine ドキュメント  |  Google Cloud

Ubuntu: パスワードなしでsuとsudo可能にする

会社のUbuntu鯖で作業した時のメモ

1. まずはwheelグループを作成する

$ sudo addgroup wheel

ユーザー「orenomemo」をwheelグループに追加する。

$ sudo usermod -aG wheel orenomemo

 

2. パスワードなしでsu出来るようにする。
/etc/pam.d/su を編集して下記を追記

auth sufficient pam_wheel.so trust group=wheel

 

3. パスワードなしでsudo出来るようにする。
visudoコマンドを使って末尾に追記

$ sudo visudo


%wheel ALL=(ALL) NOPASSWD:ALL

追記後、Ctrl+o > Enterで保存、Ctrl+xでエディタを終了
 

これでsuとsudoがサクサクです。

Jumper Ezbook 3 Pro に Xubuntu 18.04 をインストール

Xubuntu 18.04をEzbook 3 Proにクリーンインストールしたのでメモ。

1. インストールUSBを作る

本当は16.04上でUnetbootinを使ってインストールUSB作ろうとしたが、操作誤ってMBRを消してしまった…
という訳で不本意ながらMac上でインストールUSB作った。

作り方はこのとおり。balenaEtcherというツールを使う。
Create a bootable USB stick on macOS | Ubuntu tutorials

Secure BootとFast Bootをオフ

起動時にDEL or ESCを押してBIOSに入る。
で、Secure BootとFast BootをDisableにする。
(元々そうなってたんだけど、メモ)

USBから起動してインストール

これでUSBさして電源ONでXubuntuインストーラが起動します。
あとはインストールするだけ。
16.04の時はインストーライメージをRespinして、Windows上でREFindインストールしたりとえらい手間が掛かったけど、18.04では拍子抜けするくらいインストールが簡単になった。

ついでにもう使わないWindowsも消去して、Ezbookを完全にXubuntuマシンにした。
パーティション設定はカスタムにした。適当に。
MBRは/dev/mmcblklpに配置。

その他はこんな感じで。
/dev/mmcblk1p1 … EFI 200MB
/dev/mmcblk1p2 … /swap 6000MB
/dev/mmcblk1p3 … /opt eMMC残り全部
/dev/sda … / SSD全部

CapsをCtrlにする

ここのとおりに設定
コマンド一発でCapsLockをCtrlに変える方法

$ gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:nocaps']"
# /etc/default/keyboard
XKBOPTIONS="ctrl:nocaps"

そしてこれを実行

$ sudo systemctl restart console-setup

日本語入力の設定

初回起動時に、「言語サポートが完全にはインストールされていません」というアラートが出たと思ったら、日本語入力できねえ。
これまた上記サイトを参考にMozcをインストール

Ubuntu 18.04 LTSで日本語が入力できない!どうすればいい? | Linux Fan

Mozcをインストールしたのち、Mozcの[設定] > [全体の設定]で「入力メソッドのオンオフ」を右Altに割り当てる。

Chromeのインストール

ここのとおりにgoogle-chrome-stableをインストール

Ubuntu 18.04でaptを使ってchromeをインストール

$ curl https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
$ echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | sudo tee /etc/apt/sources.list.d/google-chrome.list
$ sudo apt update
$ sudo apt install google-chrome-stable

フォルダ名を英語にする

ホームディレクトリのフォルダ名を英語にしておく。

$ LANG=C xdg-user-dirs-gtk-update

まずここまでやっといて、あとは適当に環境を整える。