20190724のLinuxに関する記事は5件です。

gitのエラーerror:1407742Eの対処法について(備忘録)

経緯

ずっと使っていなかった昔のlinuxマシンでgithubにpush使用としたらerror:1407742Eが起きた。

環境

VineLinux6.1
git1.7
git version 2.2.1

対処法

gitのバージョンが古かったので、アップデートをした。

まずは、既存のgitを削除した

sudo apt-get remove git

make時にエラーが起きないように以下のパッケージをインストールしておく

sudo apt-get install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

インストールしたいgitをダウンロードし、解凍したあとにディレクトリを変更

sudo wget https://www.kernel.org/pub/software/scm/git/git-2.22.0.tar.gz
tar zxvf git-2.22.0.tar.gz
cd git-2.22.0

ビルドとインストール

make prefix=/usr/local all
make prefix=/usr/local install

もし、makeコマンドで以下のエラーが出るようなら

/usr/bin/ld: BFD version ~

以下のコマンドでインストールしてから再度実行すればできた

sudo apt-get install binutils

まとめ

突貫工事で対処してきたので、まちがっているかもしれない

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

How to write eBPF/XDP Programs and etc memo

Sample code for an XDP walkthrough

https://github.com/pabeni/xdp_walkthrough_examples

static inline int parse_ipv4(void *data, __u64 nh_off, void *data_end, __be32 *src, __be32 *dest)
{
    struct iphdr *iph = data + nh_off;

    if (iph + 1 > data_end)  /* for "It fails to pass the verifier check!" */
        return 0; 

    *src = iph->saddr;
    *dest = iph->daddr;
    return iph->protocol;
}

Achieving high-performance, low-latency networking with XDP: Part I

https://developers.redhat.com/blog/2018/12/06/achieving-high-performance-low-latency-networking-with-xdp-part-1/

Using eXpress Data Path (XDP) maps in RHEL 8: Part 2

https://developers.redhat.com/blog/2018/12/17/using-xdp-maps-rhel8/
The above code should compile just fine, but if we try to load it with iproute, we get a bad surprise:

Prog section 'prog' rejected: Permission denied (13)!
- Type: 6
- Instructions: 19 (0 over limit)
- License:

Verifier analysis:

0: (61) r1 = *(u32 *)(r1 +0)
1: (71) r2 = *(u8 *)(r1 +13)
invalid access to packet, off=13 size=1, R1(id=0,off=0,r=0)
R1 offset is outside of the packet

Error fetching program/map!

It fails to pass the verifier check! The verifier error message could be somewhat misleading, as we are accessing the first few handful of bytes of the packet.

Load XDP programs using the ip (iproute2) command

https://medium.com/@fntlnz/load-xdp-programs-using-the-ip-iproute2-command-502043898263

A brief introduction to XDP and eBPF

https://blogs.igalia.com/dpino/2019/01/07/a-brief-introduction-to-xdp-and-ebpf/
https://blogs.igalia.com/dpino/2019/01/10/the-express-data-path/

Awesome eBPF

https://github.com/zoidbergwill/awesome-ebpf/
https://github.com/zoidbergwill/awesome-ebpf/#examples

MPLS Encapsulation & Decapsulation via eBPF

https://github.com/fzakaria/eBPF-mpls-encap-decap

eBPF Powered Distributed Kubernetes Performance Analysis - Lorenzo Fontana, InfluxData

https://myslide.cn/slides/13023
https://kccna18.sched.com/event/GrYw/ebpf-powered-distributed-kubernetes-performance-analysis-lorenzo-fontana-influxdata
https://github.com/fntlnz/influxdb-ebpf-example

Go eBPF

https://github.com/dropbox/goebpf

# go get github.com/dropbox/goebpf
# go get github.com/dropbox/goebpf/goebpf_mock

    bpf := goebpf.NewDefaultEbpfSystem()
    bpf.LoadElf("test.elf")
    xdp := bpf.GetProgramByName("xdp_test")
    xdp.Load()
    xdp.Attach("eth0")
    defer xdp.Detach()
    test := bpf.GetMapByName("test")
    value, _ := test.LookupInt(0)
    fmt.Printf("Value at index 0 of map 'test': %d\n", )
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ruby で nl80211を使う

ruby からLinuxのnl80211を使ってみました。

nl80211を使ってWi-Fiのチャンネル設定をしてみました。

Ruby で Linux の NETLINKを使うの続きです。

nl80211はgenric netlinkという仕組みを使います。

socket生成

optionにNETLINK_GENERICを指定します。

require 'socket'
module Linux
    NETLINK_GENERIC    = 16
end

class Socket
  PF_NETLINK    = 16    unless defined? Socket::PF_NETLINK
  AF_NETLINK    = PF_NETLINK  unless defined? Socket::AF_NETLINK
end

s = Socket.new(Socket::AF_NETLINK, Socket::SOCK_DGRAM, Linux::NETLINK_GENERIC)

リクエスト生成

チャンネル設定の場合、リクエストはnlhdr, genlhdr, IFINDEXのアトリビュート、 WIPHY_FREQのアトリビュート、 WIPHY_CHANNEL_TYPEのアトリビュートを含みます。

IFINDEXが4, 周波数が 6ch (2437MHz), バンドが2.4GHzの場合のリクエストです。

nlhdr = [24, 0x16, Linux::NLM_F_REQUEST | Linux::NLM_F_ACK, 0, 0].pack("ISSII")
genlhdr = [Linux::NL80211_CMD_SET_WIPHY, 0, 0].pack(SSI)
if = [8, NL80211_ATTR_IFINDEX, 4].pack(SSI)
freq = [8, NL80211_ATTR_WIPHY_FREQ, 2437].pack(SSI)
freq_type = [8, NL80211_ATTR_WIPHY_CHANNEL_TYPE, 0].pack(SSI)

リクエスト送信、レスポンス受信

s.send(nlhdr+genlhdr+if+freq+freq_type, 0)
resp = s.recv(4096)

調査方法

iw を --debug 付きで動かしてみるのが良いです。

root@kali:~# iw --debug dev wlan0 set channel 6
-- Debug: Sent Message:
--------------------------   BEGIN NETLINK MESSAGE ---------------------------
  [NETLINK HEADER] 16 octets
    .nlmsg_len = 44
    .type = 22 <0x16>
    .flags = 5 <REQUEST,ACK>
    .seq = 1495358371
    .port = 1413498624
  [GENERIC NETLINK HEADER] 4 octets
    .cmd = 2
    .version = 0
    .unused = 0
  [PAYLOAD] 24 octets
    08 00 03 00 04 00 00 00 08 00 26 00 85 09 00 00 ..........&.....
    08 00 27 00 00 00 00 00                         ..'.....
---------------------------  END NETLINK MESSAGE   ---------------------------
-- Debug: Received Message:
--------------------------   BEGIN NETLINK MESSAGE ---------------------------
  [NETLINK HEADER] 16 octets
    .nlmsg_len = 36
    .type = 2 <ERROR>
    .flags = 0 <>
    .seq = 1495358371
    .port = 1413498624
  [ERRORMSG] 20 octets
    .error = 0 "Success"
  [ORIGINAL MESSAGE] 16 octets
    .nlmsg_len = 16
    .type = 22 <0x16>
    .flags = 5 <REQUEST,ACK>
    .seq = 1495358371
    .port = 1413498624
---------------------------  END NETLINK MESSAGE   ---------------------------

ドキュメントがないので地道にしらべないと理解できないです。

あとで調査するかも
* authenticate
* associate
* send_mlme
* set_ap_wps_ie

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ハードリンクとシンボリックリンク

ハードリンクとシンボリックリンクについてのメモ

ハードリンク

  • すでにあるファイルを別のファイル名(パス)で参照できるようにするもの
  • 既存のiノードを参照するディレクトリエントリを追加するもの
  • それぞれのディレクトリエントリのiノードは同じ
    • iノードは同一ファイルシステム内にのみ一意である
  • 作成されるとiノード内の情報(リンクされている数)が増える
  • リンク元と同一のiノード番号を指している

シンボリックリンク

  • 同じようにすでにあるファイルを別のファイル名(パス)で参照できるようにするもの
  • ただし、iノードから指定せずにパス名から指定するため、別のファイルシステムからでも参照可能
    • そのため、iノード番号は違う
  • リンク元のポインタ(パス名)を指している
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LinuxでArtifactory OSSをインストール(PostgreSQLをDB使用)

JFrogさんの公式記事にもやりかたがたくさん書いてありますが、個人的には詳細がたりなかったので一応自分用メモとして書きます。
ちょっと日本語がおかしいかもしれませんが悪しからず・・・語彙力がないので


7/23/2019

使ったのは
・Amazon Linux AMI 2018.03.0 (HVM)のt2.medium
Artifactoryさんはなかなか大きいので、無料版のMicroじゃウェブのUIをだしてくれませんでした
・Artifactory OSS zip
・Java 1.8.0
・ポート8081


デフォルトDB(Derby)ではなく外部データベースを使用したので
・PostgreSQL
・postgresql-42.1.4.jre6
・ポート5432

PostgreSQLについては気が向いたら別の記事で説明します

システムのアップデート

# yum update -y

全体をアプデしていきます

Java 1.8.0をインストール

デフォルトではJava1.7がインストールされてますけど1.8.0じゃないとダメなのでJavaのバージョンを変えます

# yum install java-1.8.0 -y

1.8.0があるオプションをセレクトします

# /usr/bin/alternatives --config java

バージョンを確認

# java-version

Javaの場所を確認

のちのち必要になってくるので
なんとなーくここにあるんじゃない?って感じでリストをくれますけど、ちゃんと確認しにいってね・・・

# whereis java

Artifactory OSSをインストール

JFrogさんの記事です: https://www.jfrog.com/confluence/display/RTF/Installing+on+Linux+Solaris+or+Mac+OS
手順とか書いてありましたが英文苦手すぎて・・・

ZIPファイルのダウンロード

ここからダウンロードします:https://jfrog.com/open-source/#artifactory

ダウンロードがはじまりましたらダウンロードリンクをブラウザからコピペします(ものすごく長いです)

# wget https://akamai.bintray.com/fc/fc2277fa4da9cfd83ca3af9ca94b2b03717e3df60573ab19f0281c9954117eda?__gda__=exp=1563887491~hmac=09a20401bc93409773d1097aa6e41529b0624b248676e3cc5445817edf720062&response-content-disposition=attachment%3Bfilename%3D%22jfrog-artifactory-oss-6.11.3.zip%22&response-content-type=application%2Foctet-stream&requestInfo=U2FsdGVkX18lyb8812SXCcJp8ELw0ivPZUVvKCJIkK6KSkVU69pcOAN0iaIE1qhK98x5LeNHn2KjjYT-mx_iknCgWrTdRW6iEzgymbsKrXAMBoKXDd2EtzZt5bPoWn5UPs9jBiGseDE2sxpOd3Ou3_rZNABBT9AZS3WJZT8tFjE&response-X-Checksum-Sha1=fe39d031c59c33f51fd881b4294740f3576380d2&response-X-Checksum-Sha2=fc2277fa4da9cfd83ca3af9ca94b2b03717e3df60573ab19f0281c9954117eda

インスタンスにZIPファイルがダウンロードしたのち、
わかりやすい名前(jfrog-artifactory-oss-6.11.1.zip)に改名

# ll

ファイルの改名
# mv 現在名をコピペ jfrog-artifactory-oss-6.11.1.zip

解凍先を作る

いろんな.sh内のコンフィグがこのpathを使ってるので似せるだけな簡単なお仕事なんですが、これを知るまでなぜPostgreSQLのDBで動かなかったか分からなかった苦悩の時間・・・返して・・・

homeからrootに上ってroot/var/opt/に入りjfrogのディレクドリーを制作

# mkdir jfrog

解凍します!!!!

# unzip jfrog-artifactory-oss-6.11.1.zip /var/opt/jfrog/

jfrog内に新しくできたファイル名をartifactoryに改名します

# mv jfrog-artifactory-oss-6.11.1 artifactory

PostgreSQL

ここからはPostgreSQLのターン!
繋げるためにはまだまだ作業が必要

artifactory/misc/db/postgresql.properties/etcにコピーさせます

cp artifactory/misc/db/postgresql.properties  artifactory/etc/

名前をdb.propertiesに変更します

# mv postgresql.properties  db.properties

PostgreSQL DBのIP情報や、作ったartifactoryのユーザー情報を入れていきます
終わったらちゃんとセーブしてね!

# vi db.propoerties

Tomcat/PostgreSQL JDBC

PostgreSQLをちゃんと走らせるためにはJDBCが必要になります。私はpostgresql-42.1.4.jre6を使いました
リンク:https://jdbc.postgresql.org/download.html

ZIPファイルをダウンロードした時と同じ要領でartifactory/tomcat/lib/に入れていってください

# wget コピーしたJDBCのダウンロードリンクをここにッペしてください

ダウンロードが終わりましたら走れるようにします。緑になるので分かりやすいですよ

# chmod +x postgresql-42.1.4.jre6.jar

artifactory.default

artifactory/bin/artifactory.default 内をコンフィグします
初めらへんでメモしたJavaのロケーションが必須になりますよ!そうじゃないとTomcatがお仕事してくれません

# vi artifactory.default

3つのエクスポートのコメントを消してね

#Default Values
export ARTIFACTORY_HOME=/var/opt/jfrog/artifactory
export ARTIFACTORY_USER=artifactory
export JAVA_HOME=/usr/lib/java-1.8.0 (メモしたJavaの場所を書いてね)
#export START_LOCAL_REPLICATOR=true

Arifactoryをサービスとしてインストール

binに移動してインストール

# cd artifactory/bin/
# ./installService.sh

Run Artifactory

リスタートしても自動で動くようにchkconfigもしていきます

# chkconfig artifactory on
# service artifactory start


http://local_host_IP:8081
でUIにアクセスできます

アクセスしたのちAdminとしてのパスワードを登録ができるようになるので、登録するまで小さなウィンドウはスキップしないでね!

ね、簡単でしょう?
個人的にはここまでたどり着くのにかなり時間がかかりました・・・書き出してみると簡単なんですけどね。
なので、もしこれが誰かの役に立てれば幸いです:relieved:


余談:ログはcatalina.outが個人的には見やすかったです


お世話になったリンク

Zipファイルのダウンロード
https://jfrog.com/open-source/#artifactory

公式の説明
https://www.jfrog.com/confluence/display/RTF/Installing+Artifactory

Zipファイルのダウンロード、解凍の仕方
https://www.youtube.com/watch?v=IFF-jnAxlDs

Artifactoryのデータベースを変更
https://www.jfrog.com/confluence/display/RTF/Configuring+the+Database

PostgreSQLを走らせるためのJDBC
https://jdbc.postgresql.org/download.html

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む