Warning: https://developer.download.nvidia.com/compute/cuda/repos/debian10/x86_64/InRelease: Policy will reject signature within a year, see --audit for details を消す方法

apt updateで以下のメッセージが出る場合の対処方法(workaround)です

Warning: https://developer.download.nvidia.com/compute/cuda/repos/debian10/x86_64/InRelease: Policy will reject signature within a year, see --audit for details 


設定ファイル /usr/share/apt/default-sequoia.config を編集します

$ sudo vi /usr/share/apt/default-sequoia.config

以下の行, 2026-02-01 があるところを編集します

[hash_algorithms]
sha1.second_preimage_resistance = 2026-02-01    # Extend the expiry for legacy repositories

たとえば 2028-02-01 に変更するとしばらくはメッセージがでなくなります

補足

この warning はリポジトリ(上記の例の場合は,NVIDIAが公開しているもの)が,debianが要求するレベルの安全性を満たしてないという警告です

現時点では警告であり,既知の不具合・セキュリティーホールがある理由ではないと捉えれば,上記の方法でしばらく警告メッセージを見えなくすることができます

awkで間接関数呼び出し(indirect function call)

間接関数呼び出し(indirect function call ,indirect call)とは,変数で指定された関数(メソッド)を実行する方法です

たとえばc言語なら,ポインタ変数を使って

void (*f)(void);
f = foo;
f();   // これが indirect function call

となります


本エントリではawkで間接関数呼び出しを実装する方法をまとめます

awkでは間接関数呼び出しはできない

まず標準のawkPOSIX準拠のawk)では,indirect function callはできません.macOS標準のawk(/usr/bin/awk)などは indirect function callはできないことが多いです

gawkでは間接関数呼び出しはできる

一方で大半のLinuxディストリビューションubuntuとかcentos)の /usr/bin/awk は標準のawkではなくて,GNU拡張版の gawk を採用しています

そしてgawkには,拡張機能として indirect function callが実装されています!

gawk で indirect function callを行う方法

indirect function callは@演算子を使います

たとえば"foo"という関数をコールするには

     f = "foo"
     @f()   # これが indirect function call

となります

公式のマニュアルはこちらにあります
https://www.gnu.org/software/gawk/manual/html_node/Indirect-Calls.html

利用例:quicksort

上記の公式マニュアルでは,利用例として quicksort を取り上げて,ソート順を決定するoperatorを indirect function callで指定する例が紹介されています

引用すると quicksortの実装は以下の通りで, 引数 less_than でoperatorの関数名を指定しています

 function quicksort(data, left, right, less_than,    i, last)
     {
         if (left >= right)  # do nothing if array contains fewer
             return          # than two elements

         quicksort_swap(data, left, int((left + right) / 2))
         last = left
         for (i = left + 1; i <= right; i++)
             if (@less_than(data[i], data[left]))
                 quicksort_swap(data, ++last, i)
         quicksort_swap(data, left, last)
         quicksort(data, left, last - 1, less_than)
         quicksort(data, last + 1, right, less_than)
     }

     function quicksort_swap(data, i, j,      temp)
     {
         temp = data[i]
         data[i] = data[j]
         data[j] = temp
     }

例えば less than の条件でソートしたい場合は,以下の関数を定義して

function num_lt(left, right)
     {
         return ((left + 0) < (right + 0))
     }

引数 less_than として,関数の名前 "num_lt" を指定します